-
14/07/2006 - 12h34 Xman_fr
rs232 and checksum
Bonjour
Je suis entrain de faire un programme pour obtenir la valeur d’un balance apartir de port série la commande de ce balance est comme suite :
<STX><DONNEes(longueur variable)><CHECKSUM(2 bytes)><CR><LF>
mais j’ai pas comprend cette partie de la commande :
est ce qu’il y a quelqu’un qui m’expliquer cette partie
-
Poursuivez votre recherche
-
14/07/2006 - 13h02 domlefebvre
Re : rs232 and checksum
 Envoyé par Xman_fr Bonjour
Je suis entrain de faire un programme pour obtenir la valeur d’un balance apartir de port série la commande de ce balance est comme suite :
<STX><DONNEes(longueur variable)><CHECKSUM(2 bytes)><CR><LF>
mais j’ai pas comprend cette partie de la commande :
est ce qu’il y a quelqu’un qui m’expliquer cette partie Bonjour,
Donc tu essais de récupérer un message indiquant un poids (sans doute) depuis une balance par RS232 (ce ne serait pas une Mettler par hasard?).
Le checksum est un nombre construit à partir des octets précédants du message, en général le STX et ta zone DONNEES. Il est calculé en général par un XOR sur tous les octets. Il sert au récepteur à contrôler que le message reçu est bien celui émis par l'émetteur, parce que les liaisons RS232 peuvent être bruitées et donc transmettre des erreurs.
Voilà pour le général. Pour le particulier, le mode de calcul de ton Cheksum doit figuré dans la documentation de ta balance (il est probable que ce soit un XOR mais il vaut mieux vérifier!).
-
14/07/2006 - 13h37 Xman_fr
Re : rs232 and checksum
merci
voila c'il y a dans la documentation :
"le checksum sera le résultat d'un OU exclusif de tous les bytes précédents le checksum ( y compris le caractère début de trame <STX> si validé dans les paramètres "communication" et du nombre de bytes du mesage . les caractères <CR> et <LF> ne sont pas intégrés dans ce calcule ( il son situés aprés le checksum).
le résultat est divisé en 2 bytes ; a chacun des bytes, on ajoute 0X30"
mano je veux savoir le trame que je vais envoyer
-
14/07/2006 - 15h05 domlefebvre
Re : rs232 and checksum
 Envoyé par Xman_fr merci
voila c'il y a dans la documentation :
"le checksum sera le résultat d'un OU exclusif de tous les bytes précédents le checksum ( y compris le caractère début de trame <STX> si validé dans les paramètres "communication" et du nombre de bytes du mesage . les caractères <CR> et <LF> ne sont pas intégrés dans ce calcule ( il son situés aprés le checksum).
le résultat est divisé en 2 bytes ; a chacun des bytes, on ajoute 0X30"
mano je veux savoir le trame que je vais envoyer c'est ce que je t'avais répondu (OU exclusif = XOR).
Pour calculer ton checksum, tu dois programmer une boucle qui parcourt ton buffer de message en partant du STX jusqu'au dernier octet de données. Dans cette boucle tu fais un XOR comme ça : CHECKSUM = CHECKSUM XOR Buffer[i]. Pense à initialiser à 0 CHECKSUM avant ta boucle.
Ensuite, il faut décomposer ton CHECKSUM en deux octets, en séparant l'octet de poids fort et l'octet de poids faible. Si l'octet de poids fort est nul (CHECKSUM <= 255), donne lui la valeur 0x30 (espace).
-
14/07/2006 - 16h34 Xman_fr Re : rs232 and checksum
désolé car je suis débutant ,
est ce que tu peux m'envoie la trame que je vais l'envoie.
par exemple : mscomm1.output = "<STX><CRLF>"
et merci beaucoup -
14/07/2006 - 17h24 domlefebvre
Re : rs232 and checksum
 Envoyé par Xman_fr désolé car je suis débutant ,
est ce que tu peux m'envoie la trame que je vais l'envoie.
par exemple : mscomm1.output = "<STX><CRLF>"
et merci beaucoup  Dans ton exemple, la zone de données est vide. le checksum portera donc uniquement sur le <STX>.
La trame à envoyer sera donc:
<STX><CHECKSUM1><CHECKSUM2><CR ><LF>
où CHECKSUM1 = 0x30 (car CHECKSUM2 < 255) et CHECKSUM2 = 0 XOR <STX> = <STX>
-
14/07/2006 - 20h28 umfred
Re : rs232 and checksum
à mon avis le checksum est calculé sur un octet, puis l'octet est séparé en deux pour pouvoir être transmis sous forme ASCII.
par exemple si le CHECKSUM à la fin du calcul vaut 0x24 (en hexadécimal) alors CHECKSUM1 = 0x32= "2" et CHECKSUM2 = 0x34 = "4".
Donc pour ton exemple de trame vide:
mscomm1.output=<STX><CHECKSUM1 ><CHECKSUM2><CR ><LF>
ça donnerai:
mscomm1.output = chr(0x02) & chr(0x30) & chr(0x32) & chr(0x0D) & chr(0x0A)
car:
<STX> = chr(0x02)
CHECKSUM1 = chr(0x30)
CHECKSUM2 = chr(0x32)
<CR> = chr(0x0D)
<LF> = chr(0x0A)
Remarque: le caractère <espace> a pour code ASCII 0x20; 0x30 correspodant à "0".
-
14/07/2006 - 23h36 domlefebvre
Re : rs232 and checksum
A relire la notice indiquée par Xman, tu as sans doute raison!
Et oui, autant pour moi, l'espace c'est 0x20...
-
21/07/2006 - 11h25 Xman_fr
Re : rs232 and checksum
Merci beaucoup ...
j'ai envoie
MSComm1.Output ="<STX><CHECKSUM1 ><CHECKSUM2><CR><LF>"
et
MSComm1.Output = "chr(0x02) & chr(0x30) & chr(0x32) & chr(0x0D) & chr(0x0A)"
mais j'ai aucun réponse
-
21/07/2006 - 13h52 umfred
Re : rs232 and checksum
Normal tu n'envoie aucune commande à ta balance.
Les commandes doivent être décrites dans le manuel avec la trame de réponse associée.
On t'a juste expliqué comment calculer et mettre en forme le cheksum pour l'envoyer. -
22/07/2006 - 10h52 Xman_fr Re : rs232 and checksum
bonjour
voila j'ai la trame suivante :
<STX><$><2><4><CR><LF>
comment je peux envoie cette trame ??
-
22/07/2006 - 12h58 domlefebvre
Re : rs232 and checksum
 Envoyé par Xman_fr bonjour
voila j'ai la trame suivante :
<STX><$><2><4><CR><LF>
comment je peux envoie cette trame ?? Bonjour,
Il faut tu commences par composer ta trame en concatenant les caractères STX, $, 2 et 4 (avec des + en basic).
Puis tu calcules le check sum comme indiqué précédement. Tu obtiens 2 caratères que tu concatènes avec la trame construite.
Enfin tu ajoutes CR et LF à la fin de ta trame et tu l'envoies...
Tu vas avoir qq chose comme:
trame = STX+$+2+4+CS1+CS2+CR+LF
vérifie la syntaxe, je ne suis pas un pro de basic...
-
22/07/2006 - 13h53 umfred -
26/07/2006 - 11h07 Xman_fr
Re : rs232 and checksum
Bonjour
c'est la marque EXA
model: CYBER(III)
de la société GROUP EPELSA.SL.
j'ai envoie la trame "STX$24" et j'ai obtenu une chaine de caractaire comme "┐w1" et dans l'indicateur j'ai 760 Kg
-
26/07/2006 - 16h13 domlefebvre
Re : rs232 and checksum
 Envoyé par umfred A mon avis, domlefebvre, le <2> et le <4> sont les checksums calculés Tu crois? Parce que dans ce cas, aucune commande n'est envoyée à la balance! le STX marque le début de trame et le CRLF la fin de trame. Donc pas d'octet de commande! Curieux...
| | |