Edition : 26 juin 2012 (Gestion des mots signés de 32 bits, amélioration affichage)
Ce programme est encore une ébauche d'un utilitaire de lecture de trame modbus.
A l'origine je reçois via TTERMPRO (équivalent à Hyperterminal) une floppée de trame modbus en format ASCII.
160ms 32 03 00 00 00 0A C0 0E CRC:C00E 22ms 32 03 14 FF FF FF FE FF FF FF FE 00 00 00 00 00 00 00 0A 00 00 00 02 AA 48 CRC:AA48 33ms 32 10 00 05 00 01 02 00 01 27 34 CRC:2734 22ms 32 10 00 05 00 01 14 0B CRC:140B
Ce genre de trame modbus est assez pénible à décortiquer...
Ce petit programme en Basic me permet de "traduire" ces trames en langage plus compréhensible...
Pour cela, il faut sélectionner puis copier les trames dans le presse-papier avant de lancer la "traduction".
Le programme principal : modbus.bas.
Dans TeraTermPro je vois passer des trames de ce genre :
Teraterm pro
160ms 32 03 00 00 00 0A C0 0E CRC:C00E 22ms 32 03 14 FF FF FF FE FF FF FF FE 00 00 00 00 00 00 00 0A 00 00 00 02 AA 48 CRC:AA48 33ms 32 10 00 05 00 01 02 00 01 27 34 CRC:2734 22ms 32 10 00 05 00 01 14 0B CRC:140B 26ms 32 03 00 05 00 01 91 C8 CRC:91C8 22ms 32 03 02 00 01 7D 80 CRC:7D80 25ms 32 03 00 00 00 0A C0 0E CRC:C00E 22ms 32 03 14 FF FF FF FE FF FF FF FE 00 00 00 01 00 00 00 0A 00 00 00 02 A7 D8 CRC:A7D8 62ms 32 03 00 00 00 0A C0 0E CRC:C00E 22ms 32 03 14 FF FF FF FE FF FF FF FE 00 00 00 01 00 00 00 0A 00 00 00 02 A7 D8 CRC:A7D8 62ms 32 03 00 00 00 0A C0 0E CRC:C00E 22ms 32 03 14 FF FF FF FE FF FF FF FE 00 00 00 01 00 00 00 0A 00 00 00 02 A7 D8 CRC:A7D8 63ms 32 03 00 00 00 0A C0 0E CRC:C00E 22ms 32 03 14 FF FF FF FE FF FF FF FE 00 00 00 01 00 00 00 0A 00 00 00 02 A7 D8 CRC:A7D8 63ms 32 03 00 00 00 0A C0 0E CRC:C00E 22ms 32 03 14 FF FF FF FE FF FF FF FE 00 00 00 01 00 00 00 0A 00 00 00 02 A7 D8 CRC:A7D8 63ms 32 03 00 00 00 0A C0 0E CRC:C00E 22ms 32 03 14 FF FF FF FE FF FF FF FE 00 00 00 01 00 00 00 0A 00 00 00 02 A7 D8 CRC:A7D8 63ms 32 03 00 00 00 0A C0 0E CRC:C00E 22ms 32 03 14 FF FF FF FE FF FF FF FE 00 00 00 01 00 00 00 0A 00 00 00 02 A7 D8 CRC:A7D8 63ms 32 03 00 00 00 0A C0 0E CRC:C00E 22ms 32 03 14 FF FF FF FE FF FF FF FE 00 00 00 01 00 00 00 0A 00 00 00 02 A7 D8 CRC:A7D8 63ms 32 03 00 00 00 0A C0 0E CRC:C00E 22ms 32 03 14 FF FF FF FE FF FF FF FE 00 00 00 01 00 00 00 0A 00 00 00 02 A7 D8 CRC:A7D8 64ms 32 03 00 00 00 0A C0 0E CRC:C00E 22ms 32 03 14 FF FF FF FE FF FF FF FE 00 00 00 01 00 00 00 0A 00 00 00 02 A7 D8 CRC:A7D8
Le programme affichera le résultat de l'analyse sous cette forme :
C'est quand même plus sympa à lire, non ?
Le fichier modbus.def permet de définir le mapping modbus:
# ------------------------------------- # Application : xxxx # Zone modbus Carte yyyy # ------------------------------------- 0:lCodeProduit:2 2:lCodeProduitDemande:2 4:wVoyant:1 5:wRevisionList:1
Notes :
Les lignes commencant par # sont des commentaires.
On ne peut pas mettre de commentaire à la suite d'une ligne de définition de variable
Une ligne de définition est composée de la manière suivante:
Adresse modbus:Nom de la variable:nombre de mot:valeur_1=constante,...,valeur_n=constante_n
Exemple de définition pour une variable lCodeProduit qui se trouve à l'adresse 0 et qui est composée de 2 mots :
# ------------------------------------- # Application : xxxx # Zone modbus Carte yyyy # ------------------------------------- 0:lCodeProduit:2:0
La liste des constantes est optionnelle. Si il n'y a pas de constante de définies, il faut ecrire "0".
Par exemple pour la variable EtatVoyant qui peut avoir 3 valeurs (0:OFF 1:ON 2:CLIGNOTANT) il faut écrire:
# ------------------------------------- # Application : xxxx # Zone modbus Carte yyyy # ------------------------------------- 0:lCodeProduit:2:0 2:EtatVoyant:1:0=OFF,1=ON,2=CLIGNOTANT
Par défaut le programme charge le fichier modbus.def.
Le bouton "Fichier de définition" permet de sélectionner un autre fichier de définition...
La boite à cocher "Filtrer les doublons" permet d'ignorer les trames identiques consécutives.
Par exemple, si j'ai ceci:
62ms 32 03 00 00 00 0A C0 0E CRC:C00E 22ms 32 03 14 FF FF FF FE FF FF FF FE 00 00 00 01 00 00 00 0A 00 00 00 02 A7 D8 CRC:A7D8 63ms 32 03 00 00 00 0A C0 0E CRC:C00E 22ms 32 03 14 FF FF FF FE FF FF FF FE 00 00 00 01 00 00 00 0A 00 00 00 02 A7 D8 CRC:A7D8 63ms 32 03 00 00 00 0A C0 0E CRC:C00E 22ms 32 03 14 FF FF FF FE FF FF FF FE 00 00 00 01 00 00 00 0A 00 00 00 02 A7 D8 CRC:A7D8
Seul le premier échange sera analysé, les 2 autres ne le seront pas.