Bonjour,
Bien qu'ayant consulté l'exemple associé au composant "TLazSerial'', je n'arrive pas à récupérer les données émises par un appareil par l'intermédiaire d'un port série.
Tout d'abord, par l'utilisation du logiciel CoMPort Data Emulator j'ai vérifié que mon PC recevait bien l’information transmise en continu par l'appareil (une balance). Cette information se présente comme indiqué sur l'image jointe.
Ce qui m’intéresse c'est de récupérer dans une variable la chaine fde caractères correspondant au poids lu comprise entre le caractère '+' et le caractère'g. soit , dans le cas de l'exemple : 1184.7.
pour cela , j'écrit une procédure appelée ''Lecture_portSerie" qui, pour le moment contient simplement :
sachant que la procédure lecture_PortSerie est appelée à partir d'une procédure onTimer qui boucle à intervalle réguliers (choisi par l'utiisateur expl 5 minutes) la lecture de l'information ne durant que pendant les 2, 5 ou 10 secondes de la boucle précédente :
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 Procedure TF_Balanc.lecture_portserie; Var Str_P : String ; // Chaine de caractère émise par le port série begin Laz_serie.Active:= True ; // Partie à coder pour récupérer la chaine de caractère Poids_lu (définie comme varaible // // globale) Str_P correspondant à la brqiue de construction de cette chaine dont les étapes //me semblent être : //parcours du signal reçu en continu du port série // - reconnaissance du caractère de début de la chaine (le +) // stockage des caractères de type nombre 0 à 9 et du séparateur décimal . // reconnaissance du caractère de fin (g) // identification de la chaine Poids_lu comme la suite des caractères stockés Laz_serie.Active:= false ; end;
Tout cela est une question de comprehension des infos renvoyées par le ReadData de Laz_Serie et de l'accès à ces infos.
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
24
25 procedure TF_balanc.Tim_lectBalTimer(Sender: TObject); // TIMER en route - Exécution des taches à effectuer Var Comptrebour : integer ; begin ED_DatHeur.Text:= DateTimeToStr(Now); Tactuel := Now ; TDelta := Tactuel- TDepart ; // calcul du temps écoulé depuis le Start (Jours décimaux) Ed_Tecoule.Text := FloatToStr(Tdelta) ; // affichage en jours décimaux du temps écoulé // décompte du temps pour le stockage des données Sh_TemRouge.Brush.Color := StringToColor('$00FF00') ; // témoin d'écriture - Couleur Vert Comptrebour := StrToInt(Ed_Stockage.text) * 60 ; DecompteTemp := Decomptetemp + 1 ; Ed_Compteur.Text := IntToStr(ComptRebour - DecompteTemp) ; if StrToInt(Ed_compteur.text) < StrToInt(Ed_Prisinfo.text) then Begin Lecture_PortSerie ; // APPEL A LA LECTURE DES INFOS TRANSMISES *********** Sh_TemRouge.Brush.Color := StringToColor('$00FB4DEE') ; // modification couleur du Témoin de connexion du Timer (vert--> Fuschia) end; if decompteTemp = Comptrebour Then Begin // ZONE DE TRAVAIL SUR LES DONNEES Sh_TemRouge.Brush.Color := StringToColor('$00FF00') ; // modification couleur du Témoin de connexion du Timer (Fushia--> Vert) stockageData ; end; end;
Qui pourrait m'éclaire la -dessus
Merci
R.O.
Partager