Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > WinDev > Contribuez
Contribuez Vos contributions pour la rubrique Windev : articles, cours, tutoriels, faq, comparatifs, tests, sources, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 05/12/2010, 18h43   #1
jurassic pork
Membre chevronné
 
Avatar de jurassic pork
 
Bidouilleur
Inscription : décembre 2008
Messages : 379
Détails du profil
Informations professionnelles :
Activité : Bidouilleur

Informations forums :
Inscription : décembre 2008
Messages : 379
Points : 769
Points : 769
Par défaut Windev : Gestion de liaison série par événement série

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 :
Code :
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
et voici la procédure de lecture sur événement série :
Code :
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
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 :
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
Images attachées
Type de fichier : png reception_gps.png (45,8 Ko, 44 affichages)
Fichiers attachés
Type de fichier : zip ReceptionGPS.zip (30,8 Ko, 53 affichages)
jurassic pork est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 06h58   #2
jurassic pork
Membre chevronné
 
Avatar de jurassic pork
 
Bidouilleur
Inscription : décembre 2008
Messages : 379
Détails du profil
Informations professionnelles :
Activité : Bidouilleur

Informations forums :
Inscription : décembre 2008
Messages : 379
Points : 769
Points : 769
Bonjour,
Désolé mais la procédure LecturePortSérie n'était pas fiable en fonction de la vitesse de transmission et du nombre de trames transmises à la fois . J'ai donc remodifié sur le message précédent les procédures. Finalement j'utilise le procédé initial de WDGPS qui a l'air assez robuste.

P.S j'ai modifié aussi le fichier .zip

Ami calmant, J.P
jurassic pork est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 01h02.


 
 
 
 
Partenaires

Hébergement Web