Debe tener presente que en ModBus son válidas solamente las direcciones 1 a
247. Las direcciones 248 a 255 está reservadas y no deben ser utilizadas. Todos los
equipos responden a la dirección 254, pero esta solo debe ser empleada si hay un único
equipo en la red, pues todas las respuestas van a colisionar.
Cod. Función
Datos
CRC
Para poder diferenciar el inicio y el final de un paquete, entre estos se intercala
un tiempo en el que ningún equipo transmite nada. Este tiempo debe ser de al menos 3,5
caracteres, es decir, 35 bits.
Si está trabajando a 9600 baudios, este tiempo será de 35/9600 baudios, es
decir, unos 3,6ms. Con la finalidad de evitar que los tiempos sean excesivamente cortos
cuando aumenta la velocidad se pone como tiempo mínimo 1,7ms.
Para evitar confusiones, entre caracteres de un mismo mensaje no debe haber
más de 1,5 caracteres. Para evitar tiempos muy grandes, se pone un tiempo máximo de
759us para velocidades superiores a 19200 baudios.
En la práctica, cumplir este requisito es sencillo. El programador únicamente
debe asegurarse de que los caracteres de un mensaje se transmiten seguidos, sin pausas
ni interrupciones. Para ello la solución es cargar todo el mensaje en una variable o
arreglo y luego enviar el conjunto hacia el puerto RS485.
Por el contrario, si se envía primero el byte de dirección, el código de función,
luego los datos y finalmente se calcula el CRC, es garantía de que no funcionará.
Posiblemente calcular el CRC requiera un tiempo y posiblemente entre las muchas
instrucciones el sistema operativo realice un cambio de contexto (asignar la CPU a otro
proceso/programa).
El protocolo ModBus tiene un gran número de códigos de función, no siendo
necesarios todos. Nosotros no los hemos implementados todos. Los que están
implementados en nuestras tarjetas son los siguientes:
Se trata del código de función, es decir, lo que se espera que
haga el módulo esclavo. El código de función, como se
describirá más adelante, sirve básicamente para decirle al
esclavo que se desea leer o escribir sobre un registro.
En la respuesta este código de función puede también contener
una indicación de que se ha producido un error.
Es un número de bytes que contiene datos adicionales al
código de la función, por ejemplo, si se desea escribir sobre
relés, los datos deberán contener el estado deseado para los
relés.
Es un valor que permite saber si el contenido del mensaje ha
sido alterado o no por el camino. Se trata de un a función
polinómica de 16 bits que se nuestra al final de este manual.
MANUAL MODBUS iBDAM
Pág 16 de 60