Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Autre questions sur le port COM

1 réponse
Avatar
Jean-Michel
Bonsoir,

Je voudrai savoir quelque petite astuce pour gerer ce qu'on recoi sur le
port COM
Je gere un automate et je voudrai savoir comment je pourrai pour que quand
j'envoi une donnée, je recoi une suite de 4 bits
Quand tout ce passe bien, je recoit 1111
Si il y a une probleme, je peux avoir un 0 qui se balade, ou meme plusieurs
0

Du coup, voici ce que je fait :

Do
DoEvents
Buffer$ = Buffer$ & MSComm1.Input
Loop Until InStr(Buffer$, "1111" & vbCRLF)

Mais comment gerer les autre cas, c'est a dire que je veux en fait attendre
une suite de 4 numero ( 0 ou 1 ) et apres je teste trankillement la chose !
Sachant que si je recoi n'importe quand #1 , et bien ca fait autre chose !

Merci de me donner la meilleur solution a mon probleme !

Merci Bonne soirée !

1 réponse

Avatar
Patrice Henrio
Pour ma part je commencerai par rentrer le MSComm1.input dans une variable
temporaire, par exemple REP=MSComm1.Input
Ensuite tu testes l'ensemble des 16 possibilités avec éventuellement un
regroupement du traitement sur certaines valeurs.
Mais le problème qui peut se poser et qui est bien connu des informaticiens
système c'est que les données continuent d'arriver pendant que tu testes le
début. Comment cela est-il géré ? Souhaites-tu modéliser le fonctionnement
du buffer de port série ?
De plus ton port série rentre des octets dans son buffer à priori. As-tu
redéfini ton acquisition sut ton COM pour qu'il complète les quatre premiers
bits par des zéros ou lis-tu deux séries de 4 bits pour obtenir un octet.
J'opte pour la deuxième solution. Si c'est la première, tu peux sans
difficulté adapter le code, ce sera plus simple car tu n'auras pas à traiter
le cas de la partie haute de l'octet.
Attention pour certain 1 indique la présence de courant pour d'autre
l'absence. C'est ton circuit qui te dira ce qu'il en est.

J'ai peut-être mal compris ton problème mais voici ce que je ferais

MSComm1.Inputlen=1 'on lit un octet à la fois dans le buffer
Finiúlse
Do
DoEvents
REP=MSComm1.Input 'c'est un nombre
Masque
Do
QuatreBits=REP and Masque 'partie basse b3b2b1b0 si Masque vaut
15, haute b7b6b5b4 si masque vaut 240
QuatreBitsBinaires=Valeur(QuatreBits) 'de 0000 à 1111
Select case QuatreBits
case 0
'Traitement 0
case 1
'Traitement 1
.../...
case 15
'Traitement 15
End Select
Buffer$=Buffer$+QuatreBitsBinaires
Fini=(QuatreBit)
If Fini then exit Do
If masque then Masque$0 else Masque
Loop
Loop Until Fini


Pour avancer dans ta programmation, j'aurai besoin de savoir ce que tu
cherches à piloter par ton port série.
Ensuite ton buffer$ se traitera par groupe de quatre bits.


"Jean-Michel" a écrit dans le
message de news:%23A81$
Bonsoir,

Je voudrai savoir quelque petite astuce pour gerer ce qu'on recoi sur le
port COM
Je gere un automate et je voudrai savoir comment je pourrai pour que quand
j'envoi une donnée, je recoi une suite de 4 bits
Quand tout ce passe bien, je recoit 1111
Si il y a une probleme, je peux avoir un 0 qui se balade, ou meme


plusieurs
0

Du coup, voici ce que je fait :

Do
DoEvents
Buffer$ = Buffer$ & MSComm1.Input
Loop Until InStr(Buffer$, "1111" & vbCRLF)

Mais comment gerer les autre cas, c'est a dire que je veux en fait


attendre
une suite de 4 numero ( 0 ou 1 ) et apres je teste trankillement la chose


!
Sachant que si je recoi n'importe quand #1 , et bien ca fait autre chose !

Merci de me donner la meilleur solution a mon probleme !

Merci Bonne soirée !