Rs232

Xman_fr Messages postés 39 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 14 septembre 2007 - 27 janv. 2006 à 18:40
Xman_fr Messages postés 39 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 14 septembre 2007 - 30 janv. 2006 à 09:33
je veux lire des information appartir d'un balance a l'aide Visual basic 6 en utilisant l'OCX mscomm via le port rs232 .
j'ai déjà réaliser une aplication comme ça. mantenant j'essayer d'utiliser le meme programe en changer seulement la commande d'envoyée mais j'arriver pas car j'ai pas a compris ça :


Commande « I » : demande de poids et statut


Demande ! 0 1 I Chk CR LF


Réponse ! 1 0 I +150000 / +130000 / 3 / 8 / 240345 Chk CR LF


Brut(1+6) Net(1+6) Virgule(1)Etat(1) Adc(6)


Dans cet exemple le poids brut= 150kg et le net=130kg car virgule=3. Ces poids sont


stables car Etat=8.


! Caractère de début de trame


1 Numéro de l’émetteur


0 Numéro du destinataire


Etat: Octet d’état


Bit 0 Zéro au 1/4 d’échelon


Bit 1


Bit 2 Tare présente


Bit 3 Mesure stable


Bit 4 1


Bit 5 1


Bit 6 0


Bit 7 0


Adc: Valeur interne du convertisseur


Chk : Checksum du message. La valeur du checksum est l’addition sur 8 bits de tous les


caractères transmis ( hormis le !, le CR et le LF ). Le résultat est sur 2 caractères ASCII :


1er caractère 4 bit de poids fort décalés + 30 hex ; 2eme caractère 4 bit de poids faible +


30 hex.


CR Caractère retour chariot 0Dh


LF Caractère avance ligne 0Ah
...fin
essayer de m'explique stp

6 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
28 janv. 2006 à 09:49
Tout cela me semble bien clair pourtant, qu'est-ce que tu n'as pas compris ?

<hr size="2" width="100%">
0
Xman_fr Messages postés 39 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 14 septembre 2007
28 janv. 2006 à 10:35
j'ai pas compris cette partie :
"
Chk : Checksum du message. La valeur du checksum est l’addition sur 8 bits de tous les


caractères transmis (hormis le !, le CR et le LF). Le résultat est sur 2 caractères ASCII :


1er caractère 4 bit de poids fort décalés + 30 hex ; 2eme caractère 4 bit de poids faible +


30 hex.


CR Caractère retour chariot 0Dh


LF Caractère avance ligne 0Ah
"
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
28 janv. 2006 à 11:16
OK, je vais essayer de t'expliquer ce que j'en ai compris.

On va prendre la trame "Demande" c'est plus court.

Le checksum est la somme de la valeur ascii de chacun des caractères de ta trame hormis le !, le CR et le LF .... et aussi le chk je presume ça semble plus logique.

!01IchkCRLF --> &h30 + &h31 + &h49 ou si tu préfère en décimal 48+49+73 = &hAA (170)
cette somme, tu la ramène sur 8 bits, c'est à dire que tu ne conserve que les 8 bits de poids faible en faisant un masque :
somme=somme & &h00FF, dans le cas présent ça donne toujours 170
ensuite tu prend les bits de poids fort (masque) que tu décale (division) auquel tu ajoute &h30 (valeur ascii de "0") et que tu converti en caractère :chk1 chr$( ( (somme & &hF0) / 16) + &h30) --> chk1 &h3A soit ":"
puis tu prend les bits de poid faible auquels t'ajoute &h30 puis etc...chk2 chr$( (somme) & &h0F) + &h30) --> chk2 &h3A soit ":"

donc ta trame devient !01I::CRLF

pour la réponse tu devrai avoir chk=">7" si tu ne compte pas le caractère "/" ou ":3" s'il faut en tenir compte.

Je sais pas si j'ai été très clair.

<hr size="2" width="100%">
0
Xman_fr Messages postés 39 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 14 septembre 2007
28 janv. 2006 à 12:56
ok
merci j'ai compris
mano je vais faire mscomm1.output "!01I::CRLF" pour faire la commande !01IchkCRLF ??
0

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

Posez votre question
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
28 janv. 2006 à 13:22
ou plutot : mscomm1.output "!01I::" & vbCRLF ou mscomm1.output "!01I::" & chr$(&h0D) & chr$(&h0A)

attention quand on dit CR ou LF il ne s'agit pas des caractères C et R (ou L et F) mais d'un code désignant respectivement le caractère "retour charriot" (&h0D) et le caractère "Saut de ligne" (&H0A).
Donc dans tes trames, il ne faut pas écrire "CR" et "LF" mais les remplacer par leur code respectif, ou mieux les constantes VB prédéclarées vbCR, vbLF ou vbCRLF pour l'association des 2.

Bon code

PS : avant de coder sous vb tu peux déjà essayer d'envoyer ta trame avec un terminal bien configuré (ex: Hyperterminal) pour voir si ta balance comprend bien

<hr size="2" width="100%">
0
Xman_fr Messages postés 39 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 14 septembre 2007
30 janv. 2006 à 09:33
OK et merci beaucoup
0
Rejoignez-nous