8.1.3.2 Code fonction
Le deuxième caractère du message identifie la fonction qui doit être exécutée dans le message transmis par le master,
auquel le slave répond à son tour avec le même code pour indiquer que la fonction a été effectuée.
Un sous-ensemble des fonctions MODBUS est implémenté et il comprend :
•
01
Read Coil Status
•
02
Read Input Status
•
03
Read Holding Registers
•
04
Read Input registers
•
05
Force Single Coil
•
06
Preset Single register
•
07
Read Status
•
15
Force multiple Coils
•
16
Preset Multiple Registers
Les fonctions 01 et 02 sont opérativement identiques et interchangeables, ainsi que les fonctions 03 et 04. Pour la descrip-
tion complète et détaillée des fonctions voir le chapitre 3.
8.1.3.3 Le CRC16
Les deux derniers caractères du message contiennent le code de redondance cyclique (Cyclic Redundancy Check) calculé
selon l'algorithme CRC16. Pour le calcul de ces deux caractères le message (adresse, code fonction et données en
éliminant les bits de start, stop et l'éventuelle parité) est considéré comme un seul numéro binaire continu dont le bit plus
significatif (MSB) est transmis en premier. Le message est tout d'abord multiplié par x
16
15
2
divisé par x
+x
+x
+1 exprimé comme numéro binaire (1100000000000101). Le quotient entier est ensuite éliminé et le
reste à 16 bits (initialisé à FFFFh au début pour éviter le cas d'un message uniquement de zéros) est ajouté à la suite du
message transmis. Le message qui résulte, lorsqu'il est divisé par le slave récepteur pour le même polynôme (x
doit donner zéro de reste s'il n'y a eu aucune erreur (le slave recalcule le CRC).
En effet, comme le dispositif qui sérialise les données à transmettre (UART) transmet d'abord le bit le moins significatif
(LSB) plutôt que le MSB comme cela devrait être pour le calcul du CRC, il est effectué en inversant le polynôme. En outre,
comme le MSB du polynôme n'influence que le quotient et pas le reste, il est éliminé en le faisant donc devenir
1010000000000001.
La procédure pas à pas pour le calcul du CRC16 est la suivante :
1) Charger un registre à 16 bits avec FFFFh (tous les bits à 1).
2) Faire l'OR exclusif du premier caractère avec le byte supérieur du registre, placer le résultat dans le registre.
3) Déplacer le registre à droite d'un bit.
4) Si le bit sorti à droite du registre (flag) est un 1, faire l'OR exclusif du polynôme générateur 1010000000000001 avec le
registre.
5) Répéter 8 fois de suite les pas 3 et 4.
6) Faire l'OR exclusif du caractère suivant avec le byte supérieur du registre, placer le résultat dans le registre.
7) Répéter les pas de 3 à 6 pour tous les caractères du message.
8) Le contenu du registre à 16 bits est le code de redondance CRC qui doit être ajouté au message.
8.1.3.4 Synchronisation des messages
La synchronisation du message entre l'émetteur et le récepteur est obtenue en plaçant une pause entre les messages qui
est égale à au moins 3,5 fois le temps d'un caractère. Si le récepteur ne reçoit pas un temps de 4 caractères, il considère
que le message précédent est terminé et que le byte suivant reçu sera le premier d'un nouveau message et donc une
adresse.
8.1.3.5 Configuration ligne série
La communication prévoit les configurations suivantes :
•
1 bit de start
•
8 bits de données (protocole RTU)
•
1 bit de stop
•
no parity
Les baudrate peuvent être sélectionnés parmi les valeurs suivantes :
198 • Chapitre 8 - Protocole série
(Pas utilisé par les drives AGy)
(Pas utilisé par les drives AGy)
(Pas utilisé par les drives AGy)
(Pas utilisé par les drives AGy)
16
(déplacé à gauche de 16 bits), puis
Manuel d'instructions AGy-EV
16
+x
15
+x
2
+1),