Bonjour,
j'aimerai savoir comment envoyer des trames depuis une TMemo vers un microcontroleur via une liaison série RS232-C
Merci.![]()
Bonjour,
j'aimerai savoir comment envoyer des trames depuis une TMemo vers un microcontroleur via une liaison série RS232-C
Merci.![]()
Salut !
Pour la transmission, c'est à toi de voir avec les spécifications du Comport :
- transmission et décodage du Memo byte à byte ?
- transmission par buffer donc décodage de n bytes du Memo ?
- Le Comport assure t-il toute la synchronisation ? En particulier lorsque le
buffer a été transmis (donc vidé) ?
** ** ** ** ** **
La méthode AnsiString::ToInt() permet de convertir une valeur sous forme de texte en binaire.
Elle est polymorphe de sorte que :
On peut donc mélanger ces notations sur une même ligne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 AnsiString N = "0xFF"; // ou bien N = "255"; Byte r = (Byte)N.ToInt(); //donne le résultat attendu pour les deux notations
Pour isoler chaque expression dans une ligne on peut faire ainsi, en supposant qu'on travaille à l'aide d'un buffer:
Code : Sélectionner tout - Visualiser dans une fenêtre à part Byte Buffer[256];C'est un simple exemple à optimiser et à compléter! Attention à l'usage avec ToInt() qui ne supporte aucune erreur.
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
26
27
28
29
30
31
32
33 AnsiString N; AnsiString B; int po; int addr = 0; for(int j = 0; j <Memo1->Lines->Count; j++) { N = Memo1->Lines->Strings[j]; while(N != "") { po = N.Pos(" "); if((po != 0)) { B = N.SubString(1, po - 1); N = N.SubString(po + 1, N.Length()); } else { B = N; N = ""; } Buffer[addr] = (Byte)B.ToInt(); addr++; //Vérifier si le buffer est plein //Transmission du buffer //Attendre ? //...Application->ProcessMessages(); //si on fait une boucle addr = 0; //c'est reparti pour un buffer... } } // Verifier si le buffer est vide, si non on transmet ce qui reste // Ouf !
Il faudrait apporter des modifications dans ce sens.
Pour l'exemple, chaque expression doit y être séparée par un seul espace. (voir AnsiString::Trim() pour l'amélioration etc...)
Comme il est tard...j'espère qu'il n'y a pas d'erreurs de ma part !
Bonne continuation et à plus !
NB : Je n'y connais rien mais... n'y a t'il pas une possibilité pour que le µc soit équipé en interne d'un boot sachant lire un format du type S19 (quelque chose dans ce genre là ???)
Voici la forme de la trame que je dois envyer au micro:
STX,"Message balise",CR,ETX soit; 02,"Message balise",CR,03 (voire code ASCII).
c'est tous ce dont je sais. Comment faire sachant que le buffer reçois de l'hexa et l'envoi au micro en binaire, si je ne me trope?
Salut,
Tu écris des octets donc tout dépends du message que tu souhaites envoyer.
Les méthodes du TComPort te permettent d'écrire ces octets. Ils sont envoyé bit par bit suivant le protocol que tu lui a donné en configuration (expl: 8bits +1bit de start +1bit de stop sans parité)
Partager