PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Communication Port COM / WINDEV
Communication Port COM / WINDEV
Iniciado por yohann.michel, 04,ago. 2020 16:21 - 2 respuestas
Publicado el 04,agosto 2020 - 16:21
Bonjour tout le monde,

je découvre la communication entre un appareil et le PC, et j'essaie de comprendre et decouvrir les fonction sEcrit, slit, sEvenement etc...

j'ai essayé avec Hyperterminal, et si j'envois "SN" l'appareil me reponds par son numero de Serie.

j'essaie de reproduire cela sous Windev :

J'ai donc une fenetre, avec une commande a envoyer, un zone pour le retour et un champs pour le numero du port.

Niveau code j'ai :

SAI_retour = ""
NumPort = SAI_NUM_PORT_COM

sFerme(NumPort)
BufferRx = ""
SI sOuvre(NumPort, 3000, 3000,sTimeoutDéfaut,Vrai) ALORS
sEvénement(NumPort,sEveCaractèreReçu, Lecturecom)
sFixeParamètre(NumPort, 38400, 0, 8, 0)
sEcrit(NumPort,SAI_Commande)
SINON
Erreur("Erreur d'ouverture du port COM"+NumPort)
FIN


Procedure Lecturecom()

Trace("Lecturecom")
i est un entier
BufferRx += sLit(NumPort,sDansFileEntrée(NumPort))
// ici on test BufferRx pour savoir si on à reçu le ou les caractères de fin de trame (dépend du protocole)
// j'ai pris 0x0d = 13 = CR pour l'exemple
i = Position(BufferRx, Caract(0x0d))
IF i > 0 THEN
// si oui on exploite
Trace(BufferRx[[1 À i-1]])
BufferRx = BufferRx[[i+1 À]]
END


Le code Lecturecom a été trouvé sur ce forum d'ailleurs. Mais il ne se déclenche pas. C'est la que je ne comprends pas...

La doc de l'appareil préconise :

Bits per second: 38,400
Data bits: 8
Stop bits: 1
Flow control: None

Donc je pense que mon sFixeParamètre est Ok

Du coup, je sais pas d'ou cela peux venir. Si jamais vous avez des idées, je suis preneur,

Merci d'avance !
Miembro registrado
948 mensajes
Publicado el 04,agosto 2020 - 17:36
Bonjour
Si vous remplacez : sEcrit(NumPort,SAI_Commande) par sEcrit(NumPort, "SN") avez-vous la trace : Lecturecom ?
il faut peutetre un CR ou un LF voir un CR et LF après la commande : dans ce cas, ajoutez le :
sEcrit(NumPort, "SN"+Caract(0x0d)))
sEcrit(NumPort, "SN"+Caract(0x0a)))

--
« 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
Publicado el 05,agosto 2020 - 11:10
Merci Philiipe,

c'est bien le caractère CR qui manquait.

sEcrit(NumPort, "SN"+Caract(0x0d))

j'ai une réponse, et j'ai le Numero de Serie.
y'a plus qu'a maintenant :)

Merci encore !