didi59650
Messages postés77Date d'inscriptionmercredi 5 avril 2006StatutMembreDerniè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.
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201413 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)
didi59650
Messages postés77Date d'inscriptionmercredi 5 avril 2006StatutMembreDerniè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.
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201413 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201413 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?
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201413 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
didi59650
Messages postés77Date d'inscriptionmercredi 5 avril 2006StatutMembreDerniè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...
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201413 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:
didi59650
Messages postés77Date d'inscriptionmercredi 5 avril 2006StatutMembreDerniè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 :(
didi59650
Messages postés77Date d'inscriptionmercredi 5 avril 2006StatutMembreDerniè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?
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201413 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?