B.1 PROTOCOLO MODBUS RTU
•
CÓDIGO DE FUNCIÓN: Es uno de los códigos de función válidos de la unidad que indica al esclavo la acción que
debe realizar. Para más información, véase el apartado Códigos de función válidos. Se indica una respuesta a
excepciones por parte del esclavo ajustando el bit de orden superior del código de función del paquete de respuesta.
Para más información, véase el apartado Respuestas a excepciones.
•
DATOS: Consistirá en un número variable de bytes dependiendo del código de función. Puede incluir valores reales,
ajustes o direcciones enviadas por el maestro al esclavo o por el esclavo al maestro.
•
CRC: Es un código de comprobación de errores de dos bytes. La versión RTU de Modbus
B
de redundancia cíclica de 16 bits (CRC-16) con cada paquete, lo que constituye un método estándar utilizado para la
detección de errores. Si un dispositivo esclavo Modbus recibe un paquete en el que el CRC indique un error, el
dispositivo esclavo no actuará con respecto al paquete ni responderá a éste para evitar operaciones erróneas. Véase
el apartado Algoritmo CRC-16 para obtener más información sobre el cálculo del CRC.
•
TIEMPO MUERTO: Un paquete finaliza cuando no se reciben datos durante un período de 3,5 veces el tiempo de
transmisión de bytes (aprox. 15 ms a 2.400 bps, 2 ms a 19.200 bps y 300 µs a 115.200 bps). En consecuencia, el
dispositivo de transmisión no debe permitir lapsos de tiempo entre bytes superiores a dicho intervalo. Una vez
expirado el tiempo muerto sin una nueva transmisión de bytes todos los esclavos empiezan a escuchar en espera de
un nuevo paquete del maestro, excepto el esclavo destinatario.
El algoritmo CRC-16 básicamente trata todo el flujo de datos (sólo los bits de datos; se ignoran los bits de arranque,
detención y paridad) como un número binario continuo. En primer lugar, este número de desplaza 16 bits hacia la izquierda
y, a continuación, se divide por un polinomio característico (11000000000000101B). Los 16 bits del resto de la división se
adjuntan al final del paquete, con el MSByte en primer lugar. Al dividir el paquete resultante, que incluye el CRC, por el
mismo polinomio en el receptor, la división será exacta si no ha habido ningún error de transmisión. Este algoritmo
requiere que se invierta el orden de los bits del polinomio característico. El bit más importante (MSbit) del polinomio
característico se omite, ya que no afecta al valor del resto.
Es posible implementar el algoritmo CRC en el lenguaje de programación C previa petición.
Tabla B–2: ALGORITMO CRC-16
SÍMBOLOS:
A
Alow
Ahigh
CRC
i,j
(+)
N
Di
G
shr (x)
ALGORITMO:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
B-2
-->
transferencia de datos
registro de funcionamiento de 16 bits
byte de orden inferior de A
byte de orden superior de A
resultado del CRC-16 de 16 bits
contadores de bucles
operador lógico EXCLUSIVE-OR
número total de bytes de datos
byte de datos i-n (i = 0 a N-1)
polinomio característico de 16 bits = 1010000000000001 (binario) sin el MSbit y en orden inverso
operador de desplazamiento hacia la derecha (el LSbit de x se desplaza hacia un bit de arrastre, un "0"
se desplaza al MSbit de x, los demás bits se desplazan un lugar a la derecha)
FFFF (hex) --> A
0 --> i
0 --> j
Di (+) Alow --> Alow
j + 1 --> j
shr (A)
¿Hay algún bit de arrastre?
¿Es j = 8?
i + 1 --> i
¿Es i = N?
A --> CRC
Relé diferencial de barras B90
No: ir a 8; Sí: G (+) A --> A y continuar.
No: ir a 5; Sí: continuar
No: ir a 3; Sí: continuar
APÉNDICE B
®
incluye una comprobación
B.1.4 ALGORITMO CRC-16
GE Multilin