gaudreaua
Messages postés32Date d'inscriptionjeudi 7 mai 2009StatutMembreDernière intervention15 mai 2009
-
11 mai 2009 à 15:46
hellangel777
Messages postés267Date d'inscriptionjeudi 5 février 2009StatutMembreDernière intervention26 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.
gaudreaua
Messages postés32Date d'inscriptionjeudi 7 mai 2009StatutMembreDernière intervention15 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...
gaudreaua
Messages postés32Date d'inscriptionjeudi 7 mai 2009StatutMembreDernière intervention15 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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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
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
gaudreaua
Messages postés32Date d'inscriptionjeudi 7 mai 2009StatutMembreDernière intervention15 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
hellangel777
Messages postés267Date d'inscriptionjeudi 5 février 2009StatutMembreDernière intervention26 novembre 20131 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