Sei sulla pagina 1di 5

Protocolo de comunicacin Modbus Protocolo de comunicacin Modbus.

Fue desarrollado en 1979 por la empresa norteamericana MODICON para su gama de controladores lgicos programables (PLCs) y debido a que es pblico, relativamente sencillo de implementar y flexible se ha convertido en uno de los protocolos de comunicaciones ms populares en sistemas de automatizacin y control. Se encuentra situado en el nivel 7 del Modelo OSI. Modbus especifica el procedimiento que el controlador y el esclavo utilizan para intercambiar datos, el formato de estos datos, y como se tratan los errores. No especifica estrictamente el el tipo de red de comunicaciones a utilizar, por lo que se puede implementar sobre redes basadas en Ethernet, RS-485, RS-232 etc. DESCRIPCION GENERAL Modbus funciona siempre en modo maestro - esclavo (cliente - servidor), siendo el maestro (cliente) quien controla en todo momento las comunicaciones con los esclavos que pueden ser hasta 247 (@1d a @247d) . Los esclavos (servidores) se limitan a retornar los datos solicitados o a ejecutar la accin indicada por el maestro. La comunicacin del maestro hacia los esclavos puede ser de dos tipos:

Peer to peer: Se establece comunicacin maestro - esclavo , el maestro solicita informacin y el esclavo responde ( se enva el comando a un dispositivo comprendido entre las direcciones 1d i 247d ). Broadcast: Se establece comunicacin maestro - todos los esclavos , el maestro enva un comando a todos los esclavos de la red sin esperar respuesta (se enva a la direccin @0d).

La secuencia bsica en las comunicaciones Modbus consiste siempre en una trama de pregunta, seguida de su correspondiente trama de respuesta:

Pregunta: con el cdigo de funcin que indica al esclavo que operacin ha de realizar, y los bytes necesarios (datos, comprobacin) para su ejecucin. Respuesta: con la confirmacin o datos resultantes de la ejecucin de la funcin.

Las comunicaciones Modbus se pueden realizar, adems, en modo ASCII o en modo RTU. En modo ASCII los bytes se envan codificados en ASCII, es decir, que por cada byte a transmitir se envian dos caracteres ASCII ( 2 bytes ) con su representacin hexadecimal ( esto permite leer las tramas con un simple editor de texto ). En modo RTU se envan en binario, tal cual. En el modo ASCII las tramas comienzan por 3AH (carcter ':'), y terminan en 0DH-0AH (CR LF Carrier Return

Line Feed) y cada byte se enva como dos caracteres ASCII. En modo RTU no se utiliza indicador de inicio y final de trama. DESCRIPCION DE LA TRAMA MODBUS Nmero de Esclavo (1byte) En el caso de las tramas enviadas por el mster, el campo de nmero de esclavo indica la direccin del destinatario de esta trama. Permite direccionar hasta 247 esclavos, con las direcciones de 1d a 247d (0x00 a 0xF7). El 0x00 es para los mensajes de Broadcast, as el primer esclavo comienza con la direccin 1 ( de 1 a 247 ). En el caso de las tramas enviadas por los esclavos, este byte sirve para indicar al mster a quin pertenece la respuesta. Es decir, cada vez que un esclavo responde, sita su propia direccin en el byte de direccin lo que permite saber al maestro a que equipo corresponde cada respuesta. Las tramas broadcast, no tienen asociada respuesta, y algunas implementaciones de Modbus no admiten la trama de broadcast. Cdigo de Operacin o Funcin ( 1byte) Indica el tipo de operacin que se quiere realizar sobre el esclavo. Las operaciones se pueden clasificar en dos tipos:

De lectura / escritura en memoria: para consultar o modificar el estado de los registros del mapa de memoria del esclavo. Ordenes de control del esclavo: para realizar alguna actuacin sobre el esclavo.

Direccin, datos y subfunciones (n bytes) Este campo contiene la informacin necesaria para realizar la operacin indicada en el cdigo de operacin. Cada operacin necesitar de unos parmetros u otros, por lo que el nmero de bytes de este campo variar segn la operacin a realizar. En el caso del esclavo, este puede responder con tramas con o sin campo de datos dependiendo de la operacin. En los casos en que se produzca algn error es posible que el esclavo responda con un byte extra para especificar el cdigo de error. Control de errores LRC o CRC Se utiliza un sistema de deteccin de errores diferente dependiendo del tipo de codificacin utilizado (ASCII o RTU) . En el caso de la codificacin ASCII es el checksum (o Longitud Redundancy Check LRC) en mdulo 16 expresado en ASCII (2 caracteres representan 1 byte), sin considerar el ":" ni el CR LF de la trama. En la codificacin RTU se utiliza el mtodo de CRC (Cyclical Redundancy Check) codificado en 2 bytes (16 bits).

Para calcular el CRC se carga un registro de 16 bits todo con '1's , se hace OR con cada uno de los caracteres de 8 bits con el contenido de cada byte y el resultado se desplaza una bit a la izquierda insertando un 0 en la posicin de menos peso (la de la derecha). El de la izquierda se extrae y se examina: si es 1 se vuelve a hacer OR con un valor prefijado, si es 0 no se hace ninguna OR... y el proceso se repite hasta que se han hecho los 8 shifts del byte.

CODIGOS DE OPERACIN O FUNCION MAS FRECUENTE Funcin 1 o 2 ( 1 Read Coil Status - 2 Read Input Status ) Permite realizar la lectura del estado de las DIs (@1XXXX el comando 2-Read input status) o DOs (@0XXXX el comando 1-Read Coil Status). Para ello el maestro solicita el nmero de bits que desea leer a partir de una determinada direccin. Cada direccin se corresponde con un registro de 1 bit con el estado del la entrada digital. El esclavo responde indicando el nmero de bits que retorna y sus valores. En la trama de respuesta se aprovechan todos los bits del byte, y puede haber hasta 256 bytes. Funcin 3 o 4 ( 3 Read Holding Registers 4 Read Input Registers ) Permite realizar la lectura del valor de las AIs ( @4XXXX el comando 3 Read Holding Registers ) o AOs ( @3XXXX el comando 4 Read Input Registers ) . El mster indica la direccin base y nmero de palabras a leer a partir de esta, mientras que el esclavo indica en la respuesta el nmero bytes retornados, seguido de estos valores. Aunque en realidad se est escribiendo en el rango de registros o valores numricos , los registros son direccionados a partir de la direccin 0 ( as el registro @40001 se direcciona 0 ) Funcin 5 ( Force Single Coil ) Permite modificar el estado de una DO del esclavo ( mando o rel ) . Es decir mediante este comando se puede modificar algn bit de alguna de las variables internas del esclavo u ordenar la ejecucin o activacin de un mando. Acta sobre la zona de memoria de los DOs @0XXXX . El Maestro especifica la direccin del bit o mando que quiere modificar seguido de 0x00 para ponerlo a 0 o 0xFF para ponerlo a 1. El esclavo responde con una trama similar indicando la direccin que ha modificado y el valor que ha establecido en el bit o mando. Funcin 6 ( Preset Single Register ) Permite la escritura en las AOs del esclavo ( ya sea una seal o valor interno del equipo ), y por tanto acta sobre la zona de memoria de las AOs ( @4XXXX ). Se debe indicar la direccin del valor que se quiere modificar y la magnitud que se le quiere asignar. Luego el esclavo debera responder con la direccin del dato que ha

modificado y el valor que le ha asignado, que debera coincidir con el enviado. Aunque en realidad se est escribiendo en el rango de AOs , los registros son direccionados a partir de la direccin 0 ( as el registro @40001 se direcciona 0 ) Funcin 7 ( Read Exception Status ) Permite la lectura rpida de un byte fjo de un esclavo, que generalmente es el de excepcin y que informa del estado del equipo. No tiene direccin del byte debido a que siempre se lee el mismo byte (determinado por el propio dispositivo esclavo) Funcin 15 ( Force Multiple Coils ) Permite la modificacin simultanea de varios bits de DOs en el esclavo, pasndolos a OFF ( 0 ) o a ON ( 1) segn convenga. Acta sobre la zona de memoria de las DOs (@0XXXX). As en el comando se pasan la direccin inicial (direccin del primer bit o mando a modificar ) y la cantidad y estado de cada uno de los sucesivos mandos ( bits ) a modificar. Funcin 16 (Preset multiple registers ) Permite realizar la escritura en un grupo de AOs, y por tanto acta sobre la zona de AOs (@4XXXX). Se debe especificar la direccin a partir de la que se quiere comenzar a actualizar valores, el nmero de valores que se quiere actualizar, y la lista de valores que se quiere asignar a estos registros. Aunque se est escribiendo en el rango de registros o valores numricos, los registros son direccionados a partir de la direccin 0 ( es decir el registro @40001 se direcciona 0 ) Funcin 20 (Read General Reference) Retorna el contenido de los registros de la Extended Memory (@6XXXX). En la trama se enva la direccin del esclavo, el cdigo de funcin, el nmero de bytes que se va a leer y los bytes de comprobacin de error. En los datos se establece el grupo o grupos o referencias a leer. Cada grupo se define en un campo "subrequest" que contiene:

Reference type: 1 byte ( debe ser 6 ) Extended Memory file number: 2 bytes ( 0x01 a 0x0A ) La direccion del fichero a partir de la que se quiere comenzar a leer: 2 bytes La cantidad de registros a leer: 2 bytes

Los datos a leer seguidos de los demas campos no debe superar la longitud mxima permitida en los mensajes Modbus, es decir los 256 bytes.

Funcin 21 ( Write General Reference ) Modifica el contenido de los registros de la Extended Memory (6XXXX ). Esta funcin permite trabajar en grupos de registros que no tienen por qu ser contiguos (internamente s que han de ser contiguos). Cada grupo se define en un campo "sub-request" que contiene:

Reference type: 1 byte ( debe ser 6 ) Extended Memory file number: 2 bytes ( 0x01 a 0x0A ) La direccion del "fichero" a partir de la que se quiere comenzar a leer: 2 bytes La cantidad de registros a leer: 2 bytes

Los datos a leer seguidos de los demas campos no debe superar la longitud mxima permitida en los mensajes Modbus, es decir los 256 bytes.

Potrebbero piacerti anche