8.1.3.2 Código de función
El segundo carácter del mensaje identifica la función que debe ser ejecutada en el mensaje transmitido por el maestro,
que el esclavo responde a su vez con el mismo código para indicar que la función ya ha sido ejecutada.
Se implementa un subíndice de las funciones MODBUS que comprende:
•
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
Las funciones 01 y 02 son operativamente idénticas e intercambiables, así como las funciones 03 y 04. Para una
descripción completa y detallada de las funciones se remite al capítulo 3.
8.1.3.3 Il CRC16
Los últimos dos caracteres del mensaje contienen el código de redundancia cíclica (Cyclic Redundancy Check) calculado
según el algoritmo CRC16. Para el cálculo de estos dos caracteres el mensaje (dirección, código función y datos descartando
los bit de start, stop y la paridad eventual) se considera como un único número binario continuo del cual el bit mas significativo
(MSB) se transmite primero. En primer lugar, el mensaje se multiplica por x
divide por x
16
+x
15
+x
2
+1, expresado como número binario (1100000000000101). El cociente entero se descarta y el resto a
16 bits (inicializado a FFFFh al inicio para evitar el caso de un mensaje solamente de ceros) se adjunta a continuación del
mensaje transmitido. El mensaje resultante, cuando el esclavo receptor lo ha dividido por el mismo polinomio (x
debe dar cero como resultado si no ha habido errores (el esclavo recalcula el CRC).
De hecho, puesto que el dispositivo que serializa los datos a transmitir (UART) transmite primero el bit menos significativo (LSB)
y no el MSB como debería ser para el cálculo del CRC, esto se efectúa invirtiendo el polinomio. Además, puesto que el MSB del
polinomio influencia solamente el cociente y no el resto, éste se elimina quedando 1010000000000001.
El procedimiento paso a paso para el cálculo del CRC16 es el siguiente:
1) Cargue un registro a 16 bits con FFFFh (todos los bits a 1).
2) Haga el OR exclusivo del primer carácter con el byte superior del registro, y ponga el resultado en el registro.
3) Traslade el registro a la derecha de un bit.
4) Si el bit trasladado a la derecha del registro (flag) es un 1, haga el OR exclusivo del polinomio generador
1010000000000001 con el registro.
5) Repita 8 veces los pasos 3 y 4.
6) Haga el OR exclusivo del carácter sucesivo con el byte superior del registro, y ponga el resultado en el registro.
7) Repita los pasos del 3 al 6 para todos los caracteres del mensaje.
8) El contenido del registro a 16 bits es el código de redundancia CRC que tiene que adjuntarse al mensaje.
8.1.3.4 Sincronización de los mensajes
La sincronización del mensaje entre transmisor y receptor se obtiene interponiendo una pausa entre los mensajes iguales de
un mínimo de 3.5 veces el tiempo de un carácter. Si el receptor no recibe durante un tiempo de 4 caracteres, retiene el
mensaje precedente completado y considera que el sucesivo byte recibido será el primero de un nuevo mensaje y
consecuentemente de una dirección.
8.1.3.5 Ajuste de la línea serie
La comunicación prevé las siguientes configuraciones:
•
1 bit de start
•
8 bits de datos (protocolo RTU)
•
1 bit de stop
•
sin paridad
198 • Capítulo 8 - Protocolo serie
(No utilizado para el convertidor AGy)
(No utilizado para el convertidor AGy)
(No utilizado para el convertidor AGy)
(No utilizado para el convertidor AGy)
16
(trasladado a la izquierda de 16 bits) y luego se
Manual de instrucciones ARTDriveG
16
15
2
+x
+x
+1)