mouky66
Messages postés49Date d'inscriptionmardi 29 mars 2005StatutMembreDernière intervention13 juillet 2005
-
4 mai 2005 à 17:01
mouky66
Messages postés49Date d'inscriptionmardi 29 mars 2005StatutMembreDernière intervention13 juillet 2005
-
9 mai 2005 à 16:29
salut a tous
voici une question que g deja pose mais la réponse ne ma pas satisfait entièrement.
en vb6, g un dialogue entre mon PC et une carte électronique (avec 3 adresse a l'intérieur : 000 ,001, 002).
lorsque j'interroge la première adresse (000) la carte (qui est relié a un détecteur de radioactivité) me répond son état qui est soit
n000@@
soit n000@A
soit n000A@
soit n000AA
pour traiter la réponse je "capte" les 3 dernier caractères (grace a "split") et je colore les fond des label en fonction de la réponse (vert pour n000@@.........)
mais ce que je voudrai faire c'est par exemple interroger l'adresse 003 (qui n'est pas occupé donc la carte ne répondra pas). le problème c'est que je ne sais pas comment interpréter une réponse qui n'existe pas.
je pense que je devrai utiliser un timer et dire que si je n'est pas de réponse au bout de 5 secondes, par exemple, alors je colore le fond d'un label en blanc.
voila si quelqu'un c faire merki bcp
vaughan
Messages postés198Date d'inscriptionmardi 6 août 2002StatutMembreDernière intervention29 octobre 2008 4 mai 2005 à 17:08
Peux-tu indiquer comment t'interroge tes adresses. Car le problème viens de l'interragation des adresses ... normalement tu devrais avoir un code retour t'indiquant que si réponse alors ok sinon si aucune réponse alors non Ok.
mouky66
Messages postés49Date d'inscriptionmardi 29 mars 2005StatutMembreDernière intervention13 juillet 2005 4 mai 2005 à 17:15
ben j'envoi:
mscomm1.output = "n00" & i & vblf
avec le i qui prend les valeur de 0 a 3.
donc pour i = 0 la carte répond "n000@@" (ou AA ou @A ou A@).
pour i = 1 la carte répond "n001@@
etc....
et pour i = 3 g rien du tout et j'aimerai traduire ce rien du tout en autre chose.
voila
note: le programme se bloque arriver a i = 3
car tout ceci est insérer dans un timer et le dialogue se fait toute les 10 secondes.
merki
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 5 mai 2005 à 03:18
Salut
Traditionnelle gestion du TimeOut :
En supposant que tu gères dans un timer la récupération des données et que tu les mettent dans une chaine Résultat (public)
Dim Temps As Date
Résultat = "" ' RaZ chaine de réception
mscomm1.output = "n00" & i & vblf ' Envoi la demande
Temps = Now ' mémorise l'heure actuelle
' Attend 20 secondes maximum
Do While Abs(DateDiff("s", Now, Temps)) < 20 And Résultat = ""
DoEvents
Loop
If Résultat = "" Then MsgBox "Pas de réponse"
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
Vous n’avez pas trouvé la réponse que vous recherchez ?
mouky66
Messages postés49Date d'inscriptionmardi 29 mars 2005StatutMembreDernière intervention13 juillet 2005 9 mai 2005 à 16:29
T doué jack mais en fait ca marche pas quand meme lol. voici mon programme et donne moi une solution si tu peux merki.(bon je t’épargne la partie ouverture du port et tout ca).
<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />
Private Sub Timer1_Timer()
For i = 0 To 3 'g 3 carte de branché, l'adresse 003 est vide
MSComm1.Output = "n00" & i & vbLf 'envoi de la commande a la carte
Do
DoEvents
Loop Until MSComm1.InBufferCount >= 2 'je "tourne" tant que g une réponse de + de 2 caractères
Label1(i) = MSComm1.Input 'je place la réponse dans un label
Label1(i).Caption = Right$(Label1(i), 3) 'prise des 3 dernier caractères de la réponse
If Label1(i) = "@@" & vbLf Then
Label1(i).BackColor = vbGreen 'état normal en vert
ElseIf Label1(i) = "AA" & vbLf Then
Label1(i).BackColor = vbRed 'état seuil 1 rouge
ElseIf Label1(i) = "A@" & vbLf Then
Label1(i).BackColor = vbBlue 'état de transition en bleu
ElseIf Label1(i) = "@A" & vbLf Then
Label1(i).BackColor = vbBlue 'état de transition en bleu
Else
Label1(i).BackColor = vbBlack 'état pas de réponse en noir
End If
Next
End Sub.
Voila donc mon problème : des que i = 3 mon programme stop car je n’est aucune réponse (normal) bon je sais que cela vient de la ligne Loop Until MSComm1.InBufferCount >= 2
Mais ya rien d’autre qui marche.
Jack pour ta solution c pareil mon programme stop dés qu’il tombe sur une adresse vide.