p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Membre Expert
    Avatar de jurassic pork
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    859
    Détails du profil
    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : décembre 2008
    Messages : 859
    Points : 1 890
    Points
    1 890

    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 : 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
    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
     
    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 : 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
    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
    859
    Détails du profil
    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : décembre 2008
    Messages : 859
    Points : 1 890
    Points
    1 890

    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

Discussions similaires

  1. Gestion de données arrivant par le port série
    Par altivisio dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 16/02/2009, 21h15
  2. Pb avec classe CCOM (Gestion de liaison série)
    Par pdaniel dans le forum MFC
    Réponses: 7
    Dernier message: 08/03/2007, 10h09
  3. Gestion de liaison série portable
    Par Bayard dans le forum C
    Réponses: 8
    Dernier message: 17/12/2006, 10h54
  4. VBA, graphiques : Acceder au Range pointé par une série
    Par CCHEVALIER dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/09/2005, 10h56
  5. Interfacer un logiciel et un système hardware par port série
    Par jean-claude74 dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 13/08/2005, 16h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo