Lire et afficher donnés arrivant sur le RD du rs232

Résolu
didi59650 Messages postés 77 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 9 mai 2006 - 6 avril 2006 à 15:49
 ethan_decoster - 8 avril 2006 à 10:46
UN appareil mesure et envoie une donnée de 11bits
J'aimerai avec delphi pouvoir lire cette donnée puis l'afficher.

29 réponses

jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
7 avril 2006 à 13:57
attention READBYTE te donne un inetger si tu fait inttostr(lu) tu
afficheras la valeur de la lettre pas la lettre. Pour convertir données
en caractere imprimable il faut utiliser chr(lu)



@+

jlen
3
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
6 avril 2006 à 15:55
Pourrais-tu être plus explicite s'il te plait (surtout si tu veux avoir des réponses).
0
didi59650 Messages postés 77 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 9 mai 2006
6 avril 2006 à 16:14
j'ai relié un fil entre le RD (Receive Data) du port serie du PC et le DataOut de l'appareil de mesure. J'aimerai afficher avec delphi la mesure.
par exemple du style avec inpout32.dll je peux ecrire :
ShowMessage('Port $3F8:'+ IntToStr(Inp32($3F8)));
en sachant que le COM1 a pour adresse 3F8
mais ça ne marche pas evidemment.
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
6 avril 2006 à 16:15
salut;

déjà tu ne peux pas lire une donnée de 11 bits directement sur la
liaison série puisque le format maxi autorisé sont des mots de 8 bits.
je doute d'ailleurs que ton appareil envoi cette donnée en un seul mot

maintenant il faut savoir s'il envoie cette donneé octet fort+octet faible ou l'inverse octet faible+octet fort

cela étant dit il faut que tu cofigure ton port au format de celui de
l'appareil( NB bits de donnée, baudrate; Nb de stop; parité);



pour lire le port tu peux soit utiliser la dll RSCom et la fonction
readbyte soit ce qui est à mon sens préférable un composant comme TCOMPORT

plus fiable et plus facile à paramètrer

il te suffit de poser un composant sur ta fiche et dans l'inspecteur d'objet de lui mettre le bonnes valeurs.

ensuite si tu reçois octet faible octet fort



procedure TForm1.Button1Click(Sender: TObject);

var buf:string

valeursmall:^smallint;

begin

with comport1 do

begin

Open;// on ouvre la connection

clearbuffer(true,true);//on fait le ménage!!

buf:='';// par précaution en principe pas nécessaire

while InputCount<2 do
Application.ProcessMessages;//on attend la réponse sans bloquer l'appli

ReadStr(buf, InputCount);//on lit les données

//si octet fort octet faible buf1:=buf[2]+buf[1];buf:=buf1;//on inverse

valeursmall:= @buf[1];//on transtype

label1.caption:=inntostr(valeursmall^);//on affiche le résultat

close;

end;

end;

voili voilou c'est pas plus compliqué



@+

jlen
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
6 avril 2006 à 16:21
au fait ton appareil s'il possède une laison série il n'aurait des
fois, par hasard une commande de pilotage par cette même liason? ce qui
je pense serait beaucoup plus simple et plus logique que le bidouillage
que ton ingénieur de mes deux te fait faire .

un pilotage du genre j'envoie un ordre de conversion et j'attends la réponse?



@+

jlen
0
didi59650 Messages postés 77 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 9 mai 2006
6 avril 2006 à 16:23
OK , je vais essaye demain avec readbyte car tcomport ne marche pas avec delphi3.


Mais pour aujourd'hui j'arrete j'en ai marre!!! merci (comme d'hab...)
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
6 avril 2006 à 16:43
tu es sur que TComport ne marche pas avec D3 ? L'installation a-t-elle
été faite avec Clilb3? C'est vrai que D3 est une antiquité il faudrait
peut-être qu'ils investissent dans une version plus récente!!

pour tester tu peux télécharger le version perso de D2005ICI

ça n'a plus guere grand chose à voir avec D3

la version avec pilotage par RS donnerait quelque chose comme ça:

procedure TForm1.Button1Click(Sender: TObject);

var buf:string

valeursmall:^smallint;

begin

with comport1 do

begin

Open;// on ouvre la connection

clearbuffer(true,true);//on fait le ménage!!

writestr('commande de conversion');

buf:='';// par précaution en principe pas nécessaire

while InputCount<2 do
Application.ProcessMessages;//on attend la réponse sans bloquer l'appli

ReadStr(buf, InputCount);//on lit les données

//si octet fort octet faible buf1:=buf[2]+buf[1];buf:=buf1;//on inverse

valeursmall:= @buf[1];//on transtype

label1.caption:=inntostr(valeursmall^);//on affiche le résultat

close;

end;

end;

une seule ligne à rajouter!! un peut plus simple que le bidouillage



@+

jlen
0
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
7 avril 2006 à 10:41
11 bit ca peut tres bien etre : 1 startbit, 8 data bits, et 2 stop bits. Si c'est ca, suffit de régler le port com correctement.
0
didi59650 Messages postés 77 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 9 mai 2006
7 avril 2006 à 10:42
JE n'y arrive pas.
En fait l'appareil envoie le reusltat sous 11 bits :
-les 3 premiers bits donnent trois caractere qui represente le mode de fonctionnement
- les autres represente la valeur mesuré
par exemple: en mode HRS (j'invente) il lit 13,54
1er bit = H
2eme bit = R
ect...
0
didi59650 Messages postés 77 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 9 mai 2006
7 avril 2006 à 10:45
et je ne sais pas s'il envoie octet fort + faible ou inverse... mais bon en testant tout jpourrai trouvé
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
7 avril 2006 à 10:50
en fait il t'envoie la valeur sur 8 bits il suffit donc d'ignorer le
premier caractére et de ne transptyper que le second. Si buf contient
les 2 caractères alors:

var avleur:integer;

valeur :=ord(buf[2]);



@+

jlen
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
7 avril 2006 à 10:53
ou inveresment s'il envoie la donnée en premier: valeur :=ord(buf[1]);



@+

jlen
0
didi59650 Messages postés 77 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 9 mai 2006
7 avril 2006 à 10:53
D'apres ce que j'ai compris le rs232 ne peut pas lire de bits mais des octets


il faut donc que je transforme les bits reçue en octet


pui les afficher
0
didi59650 Messages postés 77 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 9 mai 2006
7 avril 2006 à 11:04
desolé ya eu un decalage je vien seulment de voir ta réponse jlen
si je tape
valeur :=ord(buf[2]);
alors valeur va etre compsé de 8bits?
mais que dois-je taper pour qu'il lise la valeur recu en RD? j'arrive pas a comprendre le programme :(
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
7 avril 2006 à 11:05
c'est l'uart qui s'en charge.

si tu as un oscilo sous la main vérifie la trame qu'il t'envoie : à mon avis 2 octets successifs.

en effet il n'est pas possible de modifier les parametres de la RS en
cours de transmission (ce qui d'ailleurs ne présenterait aucun intérêt)

Tu pourras plus facilement déterminer la structure de la trame il est probable que l'octet de mode soit 0000 0HRS;

@+

jlen
0
didi59650 Messages postés 77 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 9 mai 2006
7 avril 2006 à 11:06
lol alors la j'ai rien compris! mdr
je vai regarder a l'oscillo ce qu'il m'envoi
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
7 avril 2006 à 11:11
petit question utilise tu Tcomport ou RScom?

les procédures sont différentes.

si tu utilises RSCom tu lis le premier octet par READBYTE; puis le second

comme je crois que READBYTE renvoie un integer tu as directement la valeur.



@+

jlen
0
didi59650 Messages postés 77 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 9 mai 2006
7 avril 2006 à 11:15
j'utilise RSCOM
sur l'oscillo ya un courant de -5 volt quand une mesure est prise.
comment fonctionne readbyte?
je tape readbyte et quoi pour kil lise l'information?
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
7 avril 2006 à 11:33
c'est très bizarre (tu as bien pris sur le TXD de l'appareil?)

comme liaison ce que tu devrais avoir

avant l'envoi un +12V à la transmission un pulse descendant suivi
des pulses de données suivants la valeur un 1 = +12V un 0 -5 à -12V un
bit de stop (niveau 0) et cela 2 fois

ce qui veut dire que tu n'aurais qu'un niveau 0 pendant toute la transmission. et là ça ne colle pas.

pour avoir une idée des signaux que tu devrais avoir mets l'oscilo sur
le TDX du PC et envoi SENDBYTE(170); la tu as une succession de 0
et de 1.

petite question qu'elle est la durée de transmission?



@+

jlen
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
7 avril 2006 à 11:35
j'avis oublié READBYTE attend un octet lit l'octet présent dans l'UART tu as directement la valeur X:=READBYTE;



@+

jlen
0
Rejoignez-nous