Plusieurs requête sur Mscomm

Messages postés
32
Date d'inscription
jeudi 7 mai 2009
Statut
Membre
Dernière intervention
15 mai 2009
- - Dernière réponse : 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...
Afficher la suite 

7 réponses

Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
58
0
Merci
quel est ton code ?

j'imagine qu'il faut s'assurer que la première opération est bien terminée...
Commenter la réponse de Renfield
Messages postés
32
Date d'inscription
jeudi 7 mai 2009
Statut
Membre
Dernière intervention
15 mai 2009
0
Merci
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...
Commenter la réponse de gaudreaua
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
58
0
Merci
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/
Commenter la réponse de Renfield
Messages postés
32
Date d'inscription
jeudi 7 mai 2009
Statut
Membre
Dernière intervention
15 mai 2009
0
Merci
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...
Commenter la réponse de gaudreaua
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
58
0
Merci
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
Commenter la réponse de Renfield
Messages postés
32
Date d'inscription
jeudi 7 mai 2009
Statut
Membre
Dernière intervention
15 mai 2009
0
Merci
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
Commenter la réponse de gaudreaua
Messages postés
267
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
26 novembre 2013
1
0
Merci
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
Commenter la réponse de hellangel777