RS232

Résolu
tonylivingston Messages postés 11 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 9 mai 2006 - 10 févr. 2006 à 22:39
tonylivingston Messages postés 11 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 9 mai 2006 - 12 févr. 2006 à 03:51
Bonjour,

Je débute en vb et vba. A l'aide Svp.

Comment réceptionner les données d'une balance avec mscomm et récupérer
les différents messages dans Excel, sachant que je veux récuperer ces
données cellule par cellule.

Je m'explique: colonne A: code produit, Colonne B: nom produitn, Colonne C: total brut etc......

voici ci-dessous les informations dont je dispose, je signale que je voudrais récupérer le mode complet .



Merci de votre aide!!!

*******************************************************************

PROTOCOLE DE COMMUNICATION

RS232 SORTIE PC DES INDICATEURS



Transmission d’ une ligne de cumul :

Le système transmet une ligne pour chaque cumul réalisé.



Mode complet :

Description Valeur Commentaires

STX 0X02 Début de transmission

Code 6 ASCII+espace(20) code du produit

Nom 25 ASCII+ESP nom du produit

Brut 7 ASCII +ESP Total brut

Tare 7 ASCII +ESP Total tare

Net 9 ASCII + ESP Total NET

Jour 2 ASCII + ESP Jour de l’accumulation

Mois 2 ASCII + ESP Mois de l’accumulation

Année 4 ASCII + ESP Année de l’accumulation

Heure 2 ASCII + ESP Heure de l’accumulation

Minute 2 ASCII + ESP Minute de l’accumulation

Seconde ESP+ESP + ESP Seconde de l’accumulation

Externe 2 ASCII + ESP Poids non pesé

Mult 2 Bytes HEX Facteur multiplicateur

EXT 0x03 Fin de transmission

CR 0x0D Retour chariot imprimante

En mode complet « comple » des blancs sont ajoutés à chaque valeur pour compléter

Jusqu’à la dimension correct du message.

Exemple pour le code produit , valeur 6 ascii + un espace:

Si le code est égal à 1543chiffre au lieu de 6 : le protocole sera 31 35 34 33 20 20 20

Pour les valeurs de pesées externes les valeurs possibles sont :

«1 » la valeur n’ est pas une pesée externe

« E+ » la valeur est une pesée externe positive

« E- » la valeur est une pesée externe négative

Mode court ( SFORM) :

Description Valeur Commentaires

STX 0X02 Début de transmission

Code 6 ASCII+virgule( 2c) code du produit

Nom 25 ASCII+virgule nom du produit

Brut 7 ASCII +virgule Total brut

Tare 7 ASCII + virgule Total tare

Net 9 ASCII + virgule Total NET

Jour 2 ASCII + virgule Jour de l’accumulation

Mois 2 ASCII + virgule Mois de l’accumulation

Année 4 ASCII + virgule Année de l’accumulation

Heure 2 ASCII + virgule Heure de l’accumulation

Minute 2 ASCII + virgule Minute de l’accumulation

Externe 2 ASCII + virgule Poids non pesé

Mult 2 Bytes HEX Facteur multiplicateur

EXT 0x03 Fin de transmission

CR 0x0D Retour chariot imprimante

En mode court, seule les valeurs significatives sont transmisses ( sans blancs pour completer les

valeurs )

Exemple pour le code 1534 le protocole correspondant est 31 35 34 33 2c

Pour les valeurs de pesées externes les valeurs possibles sont :

«1 » la valeur n’ est pas une pesée externe

« E+ » la valeur est une pesée externe positive

« E- » la valeur est une pesée externe négative

Communication avec un PC

Réponse à un ENQ 0X05 du pc :

Le système transmet le poids avec le format suivant

Description Valeur Commentaires

STX 0X02 Début de transmission

MSD(6) ASCII Premier DIGIT

DIG(5) ASCII Second DIGIT

DIG(4) ASCII Troisième DIGIT

Point décimal) ASCII Point décimal

DIG(3) ASCII Quatrième DIGIT

DIG(2) ASCII Cinquième DIGIT

DIG(1) ASCII Sixième DIGIT

ETX 0X03 Fin de transmission

CR 0X0D Retour chariot

Le point décimal est positionné en fonction du choix de l’échelle et de l’échelon de l’indicateur.

Si L’ échelle selectionné ne comporte pas de point décimal,celui-ci est pla cé en dernière position .

EX :

5.670 kg........................... 2 20 20 35 2E 36 3730 3D

200.6 kg.......................... 2 20 20 32 30 30 2E 36 3D

1000 kg ......................... 2 20 20 31 30 30 30 2E 3D

5 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
11 févr. 2006 à 00:20
Salut
Sans être méchant, très peu de chance que qqun te fasse le code tout fait, tu rêves et de toute façon, on n'est pas là pour ça.
Analyse toi même quelles sont les données clés, comment lire, comment "parser", c'est à dire découper cette chaine pour en récupérer la structure, donc les données, puis les adpater à ta feuille Excel.
Renseigne toi sur chacune de ces étapes, quand tu auras reçue une trame, tu pourras envisager de traiter les données.
Si tu rencontres des difficultés sur un code particulier, reviens poser ta question, mais sur un thème précis.
Le site contient des sources qui font de la lecture de port série.
Le site contient aussi des sources qui - même si ce n'est pas exactement ton applicatif - font du tri dans des données reçues au fil de l'eau, comme les "chat", inspire t-en.
Bon courage.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
11 févr. 2006 à 15:27
Je ne vois pas ou est ton problème si tu as déjà récupérer la trame. Tu dois l'avoir normalement dans une chaine de caractères, il ne te reste plus qu'a faire une série de Mid() pour récupérer chacun des paramètres :
Code : caractères 2 à 8,
Nom : caractères 9 à 34,
.....
.....
et ainsi de suite. Et si tu veux virer les espaces superflus tu fait ensuite un Trim() sur chacun des paramètres avant d'envoyer tout ça dans leurs cellules respectives.

<hr size="2" width="100%">
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
11 févr. 2006 à 19:17
Salut
En fait, ce que tu reçois de la comm, c'est une chaine de caractères, c'est à dire une succession de Bytes.
Parmi ces caractères, certains sont reconnaissables en ASCII (lettres chiffres, signes), mais d'autres, dans ton protocole, devront être analysés en recherchant le Code ASCII du caractère, avec Asc(monCaractère) = valeur entre 0 et 255.
Il te faut donc isoler, caractère après caractère, chaque caractère de ta chaine.

Exemple :
Tu reçois ta chaine.
Dans le protocole que tu énumères en exemple, le premier caractère devrait être celui là :
STX 0X02 Début de transmission
monCaractère = Mid(maChaine, 1, 1)
monCodeAscii = Asc(monCaractère)
Il n'est pas un code ascii "lisible".
0X02 veut dire que la valeur est Hexadécimale (précédée de 0X).
Pour tester s'il vaut bien 02, il suffit de comparer :
If monCodeAscii = &h02 Then
' Twingo : J'ai trouvé un Début de transmission"
...
End If

... et comme ça pour chaque caractère. Il va donc falloir faire une boucle pour analyser chacun d'eux (Do-Loop ou For-Next)...

Pour convertir un chiffre hexa en décimal :
ValeurComparaison = Val("&h02") ' 0X se transforme en &h sous VB
Pour convertir un décimal en héxa :
ValeurHexa$ = Hex(ValeurDécimale) ' en String, car un code Hexa peut contenir des lettres (A à F)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
3
tonylivingston Messages postés 11 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 9 mai 2006
11 févr. 2006 à 10:34
Bonjour,

J'ai bien compris qu'on allait pas me macher le travail, je récupère déjà la trame.

Le probleme que je rencontre c'est comment couper cette trame pour la mettre dans un tableau excel.

Merci quand même pour la réponse.
0

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

Posez votre question
tonylivingston Messages postés 11 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 9 mai 2006
12 févr. 2006 à 03:51
Merci pour votre aide, je pensais que c'était plus compliqué que cela.

Je teste vos solutions.

Merci à Jack et Casy.

Je vous tiens au courant de ma reussite ou mon echec, mais avec les
renseignements que vous m'avez fourni, je pense ne pas rencontrer de
problèmes.

Encore un gros bravo à l'entraide que l'on trouve sur VBfrance.
0
Rejoignez-nous