Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Membre Expert Avatar de jurassic pork
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    501
    Détails du profil
    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : décembre 2008
    Messages : 501
    Points : 1 064
    Points
    1 064

    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 Images attachées
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert Avatar de jurassic pork
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    501
    Détails du profil
    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : décembre 2008
    Messages : 501
    Points : 1 064
    Points
    1 064

    Par défaut

    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •