6. COMMUNICATIONS
La version RTU (terminal satellite) de Modbus comprend, avec chaque transmission, un CRC-16 (contrôle de redondance cyclique à 16
bits) à deux octets.
L'algorithme du CRC-16 traite essentiellement le train de données (uniquement les bits de données; les bits de
départ, d'arrêt et de parité sont ignorés) comme un nombre binaire continu. Ce nombre est d'abord décalé de 16 bits vers la gauche et
est ensuite divisé par un polynôme caractéristique (11000000000000101B). Le reste à 16 bits de la division est annexé à la fin de la
transmission, l'octet le moins significatif d'abord.
donnera un reste de «0» s'il ne s'est produit aucune erreur pendant la transmission.
Si un dispositif asservi Modbus du SR489 reçoit une transmission pour laquelle le calcul du CRC-16 indique une erreur de transmission,
le dispositif asservi ne répondra pas au message. Une erreur CRC-16 indique qu'au moins un des octets de la transmission a été reçu
incorrectement et le message doit donc être complètement ignoré de sorte à éviter l'exécution d'une fonction impropre par le SR489.
Le calcul CRC-16 est une méthode conforme aux normes de l'industrie utilisée pour la détection d'erreurs. Nous présentons ci-dessous
un algorithme pour assister aux programmateurs dans les cas où aucune routine de calcul CRC-16 n'est disponible.
Algorithme CRC-16
Lorsque l'algorithme suivant est complet, le registre de travail «A» contiendra la valeur CRC à transmettre. Il est à noter que, pour cet
algorithme, l'ordre des bits du polynôme caractéristique est inversé. Le bit le plus significatif du polynôme caractéristique est ignoré
puisqu'il n'affecte pas la valeur du reste (de la division). Les symboles suivants sont utilisés pour l'algorithme :
transfert de données
A
registre de travail à 16 bits
AL
octet le moins significatif de A
AH
octet le plus significatif de A
CRC
valeur 16 bit du CRC-16
i,j
compteurs de boucles
(+)
exclusion logique ou opérateur
ième
Di
i
octet de données (i = 0 à la puissance N-1)
G
polynôme caractéristique à 16 bits = 1010000000000001, avec le bit le plus significatif ignoré et l'ordre des bits inversé
shr(x)
décalage vers la droite (le bit le moins significatif de l'octet le moins significatif de «x» est placé dans un indicateur de
report, un «0» remplace ' le bit le plus significatif de l'octet le plus significatif de «x», tout autre bit est décalé d'une
position vers la droite).
Algorithme :
1.
FFFF hex
A
2.
0
i
3.
0
j
4.
Di (+) AL
AL
5.
j+1
j
6.
shr(A)
7.
y a-t-il une retenue?
8.
est-ce que j = 8?
9.
i+1
i
10.
est-ce que i = N?
11.
A
CRC
Le message résultant, y compris le CRC, lorsque divisé par le même polynôme
Non :
aller à 8.
Oui :
G (+) A
A
Non :
aller à 5.
Oui :
aller à 9.
Non :
aller à 3.
Oui :
aller à 11.
PROTOCOLE
6.2.4 CONTRÔLE D'ERREURS
6
6-3