Décryptage Modbus

Description

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.

Exemple de trame modbus:

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

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:

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 ? smil_07

Le fichier de définition:

modbus.def

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.