Plusieurs requête sur Mscomm

gaudreaua Messages postés 32 Date d'inscription jeudi 7 mai 2009 Statut Membre Dernière intervention 15 mai 2009 - 11 mai 2009 à 15:46
hellangel777 Messages postés 267 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 26 novembre 2013 - 12 mai 2009 à 07:33
Bonjour,

Comme ce forum m'a été d'une grande aide lors de mes derniers questionnements, je refais appel à vous. Voic mon problème.

je développe un logicel ExAO.

J'ai une interface branchée sur mon ordi via le port série. cette interface comporte 4 entrées pour brancher des capteurs différents (luxmètre, thermomètre, etc) Dans mon programme, je veux avoir des rectangles dont la grandeur varie selon la valeur lu par les capteurs...

le tout fonctionne comme cela, quand un checkbox est cliquer je j'envoie un code par MScomm.output et je récupère la valeur rétournée par MScomm.input et je fais varier le rectangle en fonction de cette valeur. J'ai donc 4 code que je peux envoyé (1 par entrée) une image vaut mille mots...

Cela fonctionne très bien pour les capteurs si je les fais fonctionner un à la fois. ... lors que je veux en faire fonctionner plus d'un ... le tout plante.... Je suppose que MScomm ne gère pas les différentes requête .output et .input.

Avez-vous une solution... merci de votre aide...

7 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 mai 2009 à 15:51
quel est ton code ?

j'imagine qu'il faut s'assurer que la première opération est bien terminée...
0
gaudreaua Messages postés 32 Date d'inscription jeudi 7 mai 2009 Statut Membre Dernière intervention 15 mai 2009
11 mai 2009 à 16:05
Salut, voici le code

Private Sub Check2_Click()

    If Check1.Value = 1 Then

    Timer2.Enabled = True

    Else

    Timer2.Enabled = False

    End If

End Sub

Private Sub Timer2_timer()
    DetecCapt ("ZEA 5") 'quel capteur est sur l'entrée 2 (no entrée + 3)
    emissionPort "ZEA 2" ' envoie de la requête pour recevoir les valeurs du capteur de l'entrée 2
    attente (0.05)
    buffer = MSComm1.Input
    shpcapteur2.Height = Val(buffer) * 100
    shpcapteur2.Top = shpCapteur2_margin - Val(buffer) * 100
    lblval2.Caption = buffer
End Sub

et les functions

Public Function DetecCapt(no As String)
    emissionPort (no)
    attente (0.1)
    If MSComm1.PortOpen = True Then
        buffer = MSComm1.Input
        Select Case Val(buffer)
            Case 400 To 420
                lblcapteur1.Caption = "Luxmètre"
            Case Else
                lblcapteur1.Caption = buffer
        End Select
    End If
End Function

Public Sub attente(t As Double)
    Dim PauseTime, Start
        PauseTime = t   ' Définit la durée.
    Start = Timer   ' Définit l'heure de début.
    Do While Timer < Start + PauseTime
        DoEvents   ' Donne le contrôle à d'autres processus.
    Loop
End Sub

Public Function emissionPort(ch As String)
    MSComm1.Output = ch + vbCrLf
    'ReceptionTexte.Text = ReceptionTexte.Text & vbCrLf & "_ch_" & ch
End Function

Voilà un peu de concret ...
Merci de votre aide...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 mai 2009 à 16:15
attente (0.05)
ça c'est de l'aléatoire !

boucle sur a lecture de l'input, avec un beau DoEvents pour laisser tourner

voir:

http://grafikm.developpez.com/portcomm/
0
gaudreaua Messages postés 32 Date d'inscription jeudi 7 mai 2009 Statut Membre Dernière intervention 15 mai 2009
11 mai 2009 à 16:26
Salut,

Je ne suis pas très expérimenter en vb6... peux-tu être un peu plus explicite. Je ne comprends pas très bien le fonctionnement de DoEvents.

Es-ce que tu crois que cela permettrait d'avoir 4 sub timer qui tourne en temps (une par entrée)?

Private Sub Timer2_timer()
    DetecCapt ("ZEA 5") 'quel capteur est sur l'entrée 2 (no entrée + 3)
    emissionPort "ZEA 2" ' envoie de la requête pour recevoir les valeurs du capteur de l'entrée 2
    attente (0.05)
    buffer = MSComm1.Input
    shpcapteur2.Height = Val(buffer) * 100
    shpcapteur2.Top = shpCapteur2_margin - Val(buffer) * 100
    lblval2.Caption = buffer
End Sub

merci de ta patience et de ton aide...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 mai 2009 à 16:38
j'ai rien pour tester, mais, en gros :




Private Sub Timer2_timer()
Dim sBuffer As String
Timer2.Enabled = False

MsComm1.PortOpen = True
sBuffer = Envoi("ZEA 5")
Select Case Val(buffer)
Case 400 To 420
lblcapteur1.Caption = "Luxmètre"
Case Else
lblcapteur1.Caption = buffer
End Select

sBuffer = Envoi("ZEA 2")
shpcapteur2.Height = Val(sBuffer) * 100
shpcapteur2.Top = shpCapteur2_margin - shpcapteur2.Height

lblval2.Caption = sBuffer
MsComm1.PortOpen = False

Timer2.Enabled = True
End Sub

Private Function Envoi (byref vsCommand) as String
Dim sBuffer As String
MsComm1.Output = vsCommand & vbCrLf
Do
DoEvents
sBuffer = MsComm1.Input
If lenb(sBuffer) Then
Envoi = Envoi & sBuffer
ElseIf Lenb(Envoi) Then
Exit Do
End If
Loop
End Function
0
gaudreaua Messages postés 32 Date d'inscription jeudi 7 mai 2009 Statut Membre Dernière intervention 15 mai 2009
11 mai 2009 à 17:07
Salut,

Je viens de tester et cela ne fonctionne pas... je lis une seule valeur et le tout s"arrête. Je doit envoyer la commande ZEA 2 à chaque fois que je veux une lecture sur le port 2.

Je dois envoyer cette commande en boucle tant et aussi longtemps que le check box n'est pas décoché.

Cela doit fonctionner avec 4 boucles et quater check box un par entrée.

Une autre piste que je pourrais essayer...
merci encore
0
hellangel777 Messages postés 267 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 26 novembre 2013 1
12 mai 2009 à 07:33
Bonjour

Essaye de relancer le timer à la fin du traitement de ton code.
J'ai pas regardé en profondeur mais comme ton timer est arrêter il n'envoi plus de données et donc il n'a plus de données à lire.
Bon courage

HellAngel777
<hr />
Les machines ne font pas d'erreurs
Heureusement nous sommes humains
0
Rejoignez-nous