bonjour,
voici un exemple de gestion de liaison série par événement.
j'ai choisi pour illustrer la chose, la réception de trames NMEA par une liaison série provenant d'un GPS.
J'ai repris l'exemple en windev 7 de WDGPS ( wdgps.com). Celui-ci utilise un timer pour receptionner les trames.
J'ai donc remplacé le timer par une gestion d'événement série et plus précisément l'événement caractère reçu.
J'ai gardé le décodage des trames et l'affichage par liste des trames reçues.
J'ai enlevé la partie sauvegarde de points et de positions et l'utilisation de la dll de WDGPS.
Tout tient dans une fenêtre ( en téléchargement une copie d'écran et le code en Windev9 ( pour compatibilité).
voici l'initialisation de la ligne série et de la gestion des événements Série, à partir d'un clic sur un bouton ON/OFF :
et voici la procédure de lecture sur événement série :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 LigneCom est un booléen SI MoiMême..Enfoncé=Vrai ALORS MoiMême..Libellé="ON" // Port COM choisi // ferme le port COM sFerme(Cb_Port) LigneCom = sOuvre(Cb_Port, 6000, 6000,400,1) SI LigneCom = Vrai ALORS // Paramétrage de COM choisi : , parité paire, sFixeParamètre(Cb_Port, Cb_Vitesse, 0, 8, 0) // 8 bits sans parité 1 bit de stop // Détection de caractères sur le port COM choisi sEvénement(Cb_Port,sEveCaractèreReçu,"LecturePortSérie") // on active la procédure de lecture sur évenement SINON Erreur("Erreur d'ouverture du port COM") FIN SINON MoiMême..Libellé="OFF" sFinEvénement(Cb_Port,sEveCaractèreReçu ) sFerme(Cb_Port) FIN
Dans l'affichage des trames par une liste, j'affiche toujours la dernière trame reçue en incluant une sélection de la dernière trame juste après l'avoir ajoutée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 PROCEDURE LecturePortSérie(NumPort,Event) OctetsLus est un entier TempBuffer est une chaîne i est un entier OctetsLus = sDansFileEntrée (NumPort) TempBuffer = sLit (NumPort ,OctetsLus) POUR i = 1 A OctetsLus SI TempBuffer[[i]]=Caract(10)ALORS SI Gauche(phrase,1)<>"$"ALORS phrase="" // Pas NMEA!!! debut de capture Decodage() // Phrase est variable GLOBALE donc accessible aux procedures globales //phrase_preced=Phrase phrase="" SINON SI TempBuffer[[i]]<>Caract(13)ALORS phrase=phrase+TempBuffer[[i]] FIN FIN// de pour i
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SI SansEspace(phrase)<>"" ALORS ListeAjoute(Liste_Trames,phrase) // remplissage de la liste ListeSelectPlus(Liste_Trames, Liste_Trames..Occurrence) // pour toujours afficher dernière ligne
Ami calmant, J.P
Partager