|
Transmission sur port serie |
Started by Amine, May, 30 2020 8:32 PM - 1 reply |
| |
| | | |
|
| |
Registered member 138 messages Popularité : +7 (7 votes) |
|
Posted on May, 30 2020 - 8:32 PM |
Bonjour à tous, je galère depuis 3 jours pour la transmision d'une trame sur un port serie (comunication avec un equipement ophtlamologie) ci-joint mon code merci pour votre aide
chp_shp est une chaîne = "- 1.25" chp_Cyl est une chaîne = "- 0.75" chp_axe est une chaîne = "165" Cmb_Sphere1 est une chaîne = "- 1.35" Cmb_Cyl1 est une chaîne = "- 0.85" Cmb_Axe1 est une chaîne = "175" Cmb_addD est une chaîne = "+ 2.00" Cmb_addG est une chaîne = "+ 2.25"
SHH est Buffer = Caract(0x01) EBB est Buffer = Caract(0x17) ETT est Buffer = Caract(0x03) SXX est une Buffer = Caract(0x02) crr est une Buffer = Caract(0x0D)
ARSCAR est une chaîne ="OR+ 2.25- 0.75180" ARSCAL est une chaîne ="OL+ 3.50- 1.00 75" ARPD est chaîne = "PD63" ARBLOC est chaîne = "DRM"+SXX+ARSCAR+EBB+ARSCAL+EBB+ARPD
LMSCAR est une chaîne = " R- 2.25- 0.75180" LMSCAL est une chaîne = " L- 2.25- 0.75180" LMADDR est une chaîne = "AR+ 3.00" LMADDL est une chaîne = "AR+ 3.00" LMPRIR est une chaîne = "PR 2.80I"+EBB+"PR 3.10U" LMPRIL est une chaîne = "PL 2.80I"+EBB+"PL 3.10D" LMPD est une chaîne = "PD63" LMBLOC est une chaîne = "DLM"+SXX+LMSCAR+EBB+LMSCAL+EBB+LMADDR+EBB+LMADDL+EBB+LMPRIR+EBB+LMPRIL+EBB+LMPD RS est un Buffer = SHH+"C**"+SXX+"RS"+EBB+ETT SD est un Buffer = SHH+"CRL"+SXX+"SD"+EBB+ETT
SI ExeLancé("GestiCabLink.exe") ALORS ExeTermine("GestiCabLink.exe") FIN ExeTermine("GestiCabLink.exe") ThreadPause(30) nPort est un entier = 3 sFerme(nPort) sFerme(nPort) sFerme(nPort) sFerme(nPort) sFerme(nPort) ThreadPause(30)
_ok est un booléen = sOuvre(nPort, 4096, 4096, sTimeoutDéfaut, Vrai) SI _ok ALORS sFixeParamètre(3, 9600, 1, 7, 2,0,0,0) WHILE NOT sEchap(3,"SETDTR") sEchap(3,"SETDTR") FIN sEcrit(nPort, RS)
WHILE sDansFileSortie(3)<>0 Multitâche() END ThreadPause(30) ThreadPause(30) ThreadPause(30) Nombre est un entier MessageLu est une chaîne Nombre = sDansFileEntrée(3) MessageLu = sLit(3, Nombre) SI MessageLu <> SD ALORS sClose(nPort) SINON ChaîneAEcrire est chaîne= SHH+ARBLOC+EBB+LMBLOC+EBB+ETT TailleEcrite est un numérique= sEcrit(nPort, ChaîneAEcrire) BOUCLE SI sDansFileSortie(2) = 0 ALORS SORTIR FIN FIN SI TailleEcrite = Taille(ChaîneAEcrire) ALORS Info("Jai ecrit") FIN FIN
FIN
Sablier(False)
la transmission doit suivre ce process
|
| |
| |
| | | |
|
| | |
| |
Registered member 946 messages Popularité : +102 (110 votes) |
|
Posted on May, 31 2020 - 12:01 AM |
Bonsoir Mettre des chaines à la place des buffers. Supprimer le code inutile.
Pour gérer les communications série j'utilisais la méthode par gestion d'événements :
CODE DU PROJET BufferCom est une chaîne = "" nPort est un entier = 3
PROCÉDURE OpenCom() sFerme(nPort) IF not sOuvre(nPort, 4096, 4096, sTimeoutDéfaut, True) THEN RENVOYER False IF not sFixeParamètre(nPort, 9600, 1, 7, 2, True, False, False) THEN sFerme(nPort); RENVOYER False IF not sEvénement(nPort,sEveCaractèreReçu, ReceiveData) THEN sFerme(nPort); RENVOYER False RENVOYER True
AVEC UN BOUTON BufferCom = "" sEcrit(nPort, <data sous forme d'une chaine>)
PROCÉDURE ReceiveData() BufferCom += sLit(nPort, sDansFileEntrée(nPort)) // ici il faut analyser les données présentes dans BufferCom // ne pas oublier que le pc va beaucoup plus vite qu'une transmission à 9600 bds
-- « L'erreur ne devient pas vérité parce qu'elle se propage et se multiplie ; la vérité ne devient pas erreur parce que nul ne la voit. » Gandhi |
| |
| |
| | | |
|
| | | | |
| | |
|