Impasse sur une réponse d'une carte électronique

Résolu
mouky66 Messages postés 49 Date d'inscription mardi 29 mars 2005 Statut Membre Dernière intervention 13 juillet 2005 - 4 mai 2005 à 17:01
mouky66 Messages postés 49 Date d'inscription mardi 29 mars 2005 Statut Membre Dernière intervention 13 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

mouky66

6 réponses

vaughan Messages postés 198 Date d'inscription mardi 6 août 2002 Statut Membre Dernière intervention 29 octobre 2008
4 mai 2005 à 17:31
Voici un lienhttp://grafikm.developpez.com/portcomm/

Je viens de tester si je fait un OutPut d'une adresse non implémenté dans mon événement OnComm je recois une chaine vide.

vaughan
3
vaughan Messages postés 198 Date d'inscription mardi 6 août 2002 Statut Membre Dernière intervention 29 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.

vaughan
0
mouky66 Messages postés 49 Date d'inscription mardi 29 mars 2005 Statut Membre Dernière intervention 13 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

mouky66
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
0

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

Posez votre question
mouky66 Messages postés 49 Date d'inscription mardi 29 mars 2005 Statut Membre Dernière intervention 13 juillet 2005
9 mai 2005 à 09:21
t doué Jack


merki bcp

mouky66
0
mouky66 Messages postés 49 Date d'inscription mardi 29 mars 2005 Statut Membre Dernière intervention 13 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.


Aidez moiiiiiiiiiiiiiiiiiiiiiiiii merki.

mouky66
0
Rejoignez-nous