Sei sulla pagina 1di 15

Protocolos de Comunicacin: Modbus

Hola gente! Les dejo una


monografa hecha por m sobre unos de los protocolosd e comunicacin ms nombrados,
el Modbus. Espero que les sirva

NDICE
INTRODUCCIN
-COMUNICACIN SERIAL
--Qu es la comunicacin serial?
--Como se enva la informacin de forma serial
--Bit de Start y bit de Stop
--Bit de paridad
--Velocidad de transmisin
-PROTOCOLO RS-485
--Qu es el protocolo RS-485
--Comunicacin RS-485 a dos hilos (half-duplex)
--Otra ventaja del RS-485
-MODBUS
--MODBUS sobre conexin RS-485
--Modos de Transmisin del MODBUS
MODBUS RTU
MODBUS ASCII
--Comunicacin Maestro-Esclavo en MODBUS
--Representacin de datos en MODBUS
---Output Coils
--Algunas anotaciones
---Holding Registers
-Cdigos de operacin o de funcin en MODBUS
-Descripcin de la trama de informacin enviada por el Maestro
--Ejemplo #1. Lectura de un solo coil del esclavo.
---Primer Dato de la Trama: Numero de esclavo
---Segundo Dato de la Trama: Cdigo de operacin o funcin MODBUS
---Tercer Dato: Direccin del primer coil que se desea leer
---Cuarto Dato: Nmero de coils a leer
---Quinto Dato: Cdigo de Deteccin de Error: CRC
---Respuesta del esclavo a la funcin 01
---Respuesta del esclavo al maestro suponiendo que el coil es 0
--Ejemplo #2. Lectura de varios coil del esclavo.
---Peticin del maestro
---Respuesta del esclavo

INTRODUCCIN

Qu es y cmo funciona el MODBUS? En este informe se dar respuesta a esas y otras


preguntas, pero antes de comenzar con el MODBUS, necesitamos conocer algunos detalles
bsicos, como los siguientes:
Qu es la comunicacin serial.
Que es el RS-485.

COMUNICACIN SERIAL

[b]Qu es la comunicacin serial?


[/b]
La comunicacin serial consiste en el envi secuencial de un bit a la vez de informacin
entre dos o ms dispositivos, por eso se le llama serial, porque cada bit va uno seguido de
otro o dicho de otra manera cada bit va en serie, ahora esto implica que para la transmisin
de datos es necesario un solo cable entre los dispositivos y una referencia o tierra.

Por supuesto que para que funcione correctamente la transmisin de unos y ceros los dos
dispositivos deben estar enviando y recibiendo la informacin a la misma velocidad, de esto
hablamos ms adelante.

Como se enva la informacin de forma serial

Serialmente podemos enviar cualquier dato, por ejemplo, vamos a pensar que yo deseo
enviar la letra A de un dispositivo a otro, cuando son letras las que se envan
generalmente se usa el cdigo ASCII de la letra, as pues, para la letra A le corresponde
el cdigo ASCII 65, que convertido a unos y ceros (cdigo binario) nos da como resultado
el 1000001, entonces para enviar la letra A simplemente se enva una trama de bits.

Notas:
1. Se enva siempre, del bit menos significativo al bit ms significativo.
2. Generalmente se enva los datos de forma serial en bloques de 8 bits, el cdigo ASCIII
de la letra es de 7 bits, por lo que se agrega un 0 al final, en el bit ms significativo.
3. El envi de datos es a una velocidad previamente establecida por los dispositivos, por
eso es posible saber cundo es 0 y cuando es 1.
De esta forma se pueden enviar informacin, cualquier tipo de informacin, letras, nmeros
y caracteres. Se puede enviar el cdigo ASCII de una letra seguida de otra y as
sucesivamente para formar palabras, y as enviar la informacin que nosotros queremos, as
de simple es la comunicacin serial.
Bit de Start y bit de Stop

A la trama de 8 bits que enva la letra A y que se mostro en la imagen anterior, siempre se le
agregan dos bits mas, uno al inicio y otro al final, esto con la finalidad de indicarle al
receptor cuando inicia el dato (bit de start) y cuando termina (bit de stop), es de suponer
que ambos bits van al inicio y al final de la trama de bits.

El bit de inicio es un 0 y el bit de paro es un 1, siempre que se enven datos seriales


generalmente llevan este formato, por ejemplo si se enva la palabra HOLA serialmente, se
vera como la figura siguiente la trama de bits, donde ahora no se muestran los unos y
ceros, por simplicidad se usaran bloques representando datos y bits de inicio y paro.

Bit de paridad

Existe otro bit que se agrega a la trama, es el llamado bit de paridad, que sirve para detectar
errores en las tramas enviadas, no entraremos en detalle de este bit, pues es opcional su uso.

[
b]Velocidad de transmisin
[/b]
Finalmente debemos tener en cuenta la velocidad a la que se envan lo bits serialmente, es
de suma importancia pues como se menciono arriba, ambos dispositivos deben estar a la
misma velocidad para transmitir y recibir bits, si no lo estn, simplemente la transmisin
serial no sera correcta.
La velocidad de transferencia de informacin indica el nmero de bits que se transmiten en
un segundo, se mide en bauds (baudios) algunas velocidades de transmisin que son muy
usadas son las siguientes: 1200, 2400, 4800, 9600, 19200.

PROTOCOLO RS-485
Qu es el protocolo RS-485?

Es un protocolo de comunicacin serial, qu a la fecha es un estndar, es usado como


sistema de interconexin entre dispositivos a grandes distancias y funciona en ambientes
elctricamente ruidosos sin problema alguno. Existen dos opciones para crear una red RS-
485:
Usando 4 cables, llamada en ingles full-duplex.
Usando 2 cables, llamada half-duplex.
Enseguida se detallan cada una de estas opciones.

Comunicacin RS-485 a cuatro hilos (full-duplex)

En el artculo anterior se vio que dos dispositivos pueden comunicarse serialmente usando
dos cables, uno llamado receptor (Rx) y otro llamado trasmisor (Tx), pues basta con
agregar un dispositivo electrnico llamado transceptor (transceiver) para protocolo RS-485.
Este chip es capaz de manejar la recepcin y transmisin de datos con los niveles de voltaje
requeridos en la especificacin que se defini para el protocolo RS-485.
Observe la figura, el transceptor se conecta a las terminales Tx y Rx de un dispositivo
serial, para as tener lista la conexin RS-485 a 4 hilos, as de simple.

Ese es el hardware necesario para la comunicacin RS485 a 4 hilos, el transmisor y


receptor son totalmente independientes, en un instante ambos pueden estar transmitiendo y
recibiendo informacin, por eso es llamado full-duplex pues es ms rpida este tipo de
conexin que su contraparte, la conexin RS-485 a 2 hilos.
Comunicacin RS-485 a dos hilos (half-duplex)
La otra conexin posible es la de dos hilos, en este caso se usa igual un transceptor para
RS-485, pero que sea para dos hilos, la diferencia, es que a dos hilos, el transmisor y el
receptor nunca estn funcionando en el mismo instante, o el dispositivo transmite
informacin o la recibe, pero nunca al mismo tiempo. Este tipo de conexin, es ms lenta
que usando la conexin RS-485 a 4 hilos, pero solo requerimos de dos simples cables, esa
es una ventaja que hay que tener en cuenta, a la hora de disear el hardware. La figura
siguiente muestra dos dispositivos conectados para funcionar con la especificacin RS-485
a dos hilos, observe como es necesaria una lnea ms de control.

Como se mencion arriba, la ventaja en modo half dplex es evidente, requiere


solamente dos cables para su conexin, lo que ahorra en cableado, sobre todo si son largas
las distancias entre los dispositivos.

O
tra ventaja del RS-485

Adems de las ventajas mostradas en este articulo, existe otra caracterstica de la conexin
RS-485, la posibilidad de conectar ms dispositivos a la misma red, es decir, que puedo
conectar a los dos hilos del RS-485 una gran cantidad de dispositivos electrnicos,
anteriormente los transceptores, soportaban solamente 32 dispositivos en la misma red,
ahora hay chips que soportan muchos ms.
Generalmente, cuando se conectan en la red varios dispositivos uno de ellos es llamado
maestro y los otros esclavos, observe la figura siguiente, muestra la conexin RS-485 de
dos hilos con varios esclavos, en la figura por simplicidad no se muestra el transceptor.


MODBUS

Es un protocolo de comunicaciones situado en el nivel 7 del Modelo OSI, basado en la


arquitectura maestro/esclavo o cliente/servidor, diseado en 1979 por Modicon para su
gama de controladores lgicos programables (PLCs). Convertido en un protocolo de
comunicaciones estndar de facto en la industria es el que goza de mayor disponibilidad
para la conexin de dispositivos electrnicos industriales. Las razones por las cuales el uso
de Modbus es superior a otros protocolos de comunicaciones son:
1. es pblico
2. su implementacin es fcil y requiere poco desarrollo
3. maneja bloques de datos sin suponer restricciones

Permite el control de una red de dispositivos, por ejemplo un sistema de medida de


temperatura y humedad, y comunicar los resultados a un ordenador. Modbus tambin se usa
para la conexin de un ordenador de supervisin con una unidad remota (RTU) en sistemas
de supervisin adquisicin de datos (SCADA). Existen versiones del protocolo Modbus
para puerto serie y Ethernet (Modbus/TCP).
Existen dos variantes, con diferentes representaciones numricas de los datos y detalles del
protocolo ligeramente desiguales. Modbus RTU es una representacin binaria compacta de
los datos. Modbus ASCII es una representacin legible del protocolo pero menos eficiente.
Ambas implementaciones del protocolo son serie. El formato RTU finaliza la trama con un
suma de control de redundancia cclica (CRC), mientras que el formato ASCII utiliza una
suma de control de redundancia longitudinal (LRC). La versin Modbus/TCP es muy
semejante al formato RTU, pero estableciendo la transmisin mediante paquetes TCP/IP
(puerto del sistema 502, identificador asa-appl-proto.

MODBUS sobre conexin RS-485

El protocolo MODBUS es un protocolo que usa lneas seriales, por lo que comnmente se
implementa sobre redes de comunicacin RS-485, pero tambin sobre redes que usan la
comunicacin serial RS-232, incluso se puede implementar va TCP/IP sobre una red
Ethernet, en SDM se usa la implementacin MODBUS sobre una red RS-485 como la que
se vio en el articulo pasado.

Modos de Transmisin del MODBUS

Los modos de transmisin definen como se envan los paquetes de datos entre maestros y
esclavos, el protocolo MODBUS define dos principales modos de transmisin:
MODBUS RTU (Remote Terminl Unit). La comunicacin entre dispositivos se realiza por
medio de datos binarios. Esta es la opcin ms usada del protocolo y es la que se
implemento en nuestras tarjetas.
MODBUS ASCII (American Standard Code for Information Interchange). La
comunicacin entre dispositivos se hace por medio de caracteres ASCII.
Comunicacin Maestro-Esclavo en MODBUS
El MODBUS siempre funciona con un maestro y uno o ms esclavos, siendo el maestro
quin controla en todo momento el inicio de la comunicacin con los esclavos, que segn la
especificacin pueden ser hasta 247 en una misma red. El esclavo por otro lado se limita a
retornar los datos solicitados por el maestro, as de simple es la comunicacin usando el
MODBUS, el maestro enva los mensajes y el respectivo esclavo los responde.
Cada esclavo debe tener una nica direccin, as el maestro sabe con quin se debe
comunicar. Vea la animacin siguiente, observe cmo funciona el envi de mensajes entre
el maestro y el esclavo tome en cuenta lo siguiente:
Cada esclavo tiene su propia direccin, que puede ir desde 1 hasta 247.
El maestro siempre inicia la comunicacin enviando un paquete de informacin bien
estructurado a todos los esclavos, entre otras muchas cosas en la informacin se incluye el
nmero del esclavo.
El esclavo elegido responde, enviando lo que se le pide por medio tambin de un paquete
de informacin bien estructurado.

Adems recuerde que el MODBUS se realiza sobre una red RS-485, como se observa en la
animacin, con ello solo se requieren dos cables entre dispositivos como se vio en el
anterior articulo.

Representacin de datos en MODBUS

El protocolo MODBUS usa el concepto de tablas de datos para almacenar la informacin


en un esclavo, una tabla de datos no es ms que un bloque de memoria usado para
almacenar datos en el esclavo, las tablas de datos que usa en MODUS son cuatro y se
muestran en la siguiente tabla:
Direccin MODBUS Direccin Usada en el protocolo Nombre de la Tabla de Datos
1 - 9999 0000 9998 Output Coils (Lectura/escritura)
10001 - 19999 0000 9998 Inputs Contact (Lectura)
30000 - 39999 0000 9998 Inputs Registers (Lectura)
40001 - 49999 0000 9998 Holding Registers (Lectura/Escritura)

Observe que hay dos direcciones, una es usada para diferenciar entre las tablas de datos, la
llamamos direccin MODBUS y la otra es la direccin usada en la comunicacin entre el
maestro y el esclavo, est es la direccin usada en la trama o paquetes de datos enviados
entre maestros y esclavos.

Output Coils

En MODBUS un coil representa un valor booleano tpicamente usado para representar una
salida, solo hay dos estados para el coil el ON y el OFF. Por ejemplo la tarjeta de
relevadores usa dos coils, para activar o desactivar precisamente dos relevadores.
El coil entonces, puede verse como una celda o un bloquecito de memoria que me permite
almacenar el estado de un bit, que puede tener solo dos valores como se vio arriba, el ON o
el OFF, o en lgica binaria, un 1 o un 0, o ms cerca de la realidad fsica, tierra (0 Volts) y
voltaje (5 Volts), como el lector quiera verlo, eso s debe quedar claro que son solo dos
valores por cada coil.
Hablemos de las direcciones, el coil segn la tabla de datos puede tener una direccin
MODBUS, la cual yo elijo y segn la tabla anterior, puede ser entre 1 y 9999 valores, por
simplicidad, se puede elegir el coil 1 y el coil 2 para, activar o desactivar, en nuestro caso,
los relevadores de la tarjeta, pero por supuesto que yo puedo elegir el coil 9998 y coil 9999,
si yo as lo quisiera, cualquier direccin en ese rango se puede usar sin ningn problema.
[
align=left]Algunas anotaciones
[/align]
En el intercambio de mensajes, ahora aparte de la direccin del esclavo se escribe que
estado deseamos para el coil. Aunque la animacin solo muestra los coil con el estado de
ON, tambin se enva de la misma forma el estado OFF del coil cuando as se necesite.
Note como el esclavo responde a la peticin del maestro, colocando el coil en el estado
que se le pide, pero adems regresa una trama de informacin al maestro, que
prcticamente es lo mismo que se le pidi.
Sobra decir que la trama de informacin enviada por el maestro y la respuesta enviada por
el esclavo, son nmeros binarios como se ver en la siguiente leccin.

Holding Registers

Los registros Holding, representan cantidades de 16 bits, se puede ver cada registro como
un bloque o celda de memoria, que es capaz de almacenar nmeros entre 0 y 65535.
Las direcciones usadas para los registros holding inician en la direccin 40001, pero puede
usarse cualquiera de las mencionadas en la tabla para los registros holding.
Estos registros son de lectura/escritura, es decir que el maestro puede hacer peticiones de
informacin para leer el dato que est almacenado, o puede enviar peticiones para escribirle
un valor al registro holding en el momento que se requiera.
Antes de ver como se forman exactamente las tramas de informacin que se envan entre
maestros y esclavos en el protocolo MODBUS, cabe recordar algo que se mencion en el
anterior artculo, se dijo que el MODBUS se basaba en tablas de datos que se almacenan en
el esclavo, de hecho enseguida se vuelve a reproducir la tabla de datos que maneja el
MODBUS, pues la vamos a necesitar ms adelante.
Direccin MODBUS Direccin Usada en la trama de informacin. Nombre de la Tabla de
Datos
1 - 9999 0000 9998 Output Coils (Lectura/escritura)
10001 - 19999 0000 9998 Inputs Contact (Lectura)
30000 - 39999 0000 9998 Inputs Registers (Lectura)
40001 - 49999 0000 9998 Holding Registers (Lectura/Escritura)
Son cuatro las tablas de datos que maneja el esclavo, y para cada una de esas tablas se
pueden realizar varias operaciones, por ejemplo para los Output Coils, se pueden realizar
las siguientes operaciones:
Leer el valor de un determinado coil
Escribir un valor a un coil
La primera operacin, la de lectura, sirve para que el esclavo vea, que valor tiene el
coil ( si es un 1 o un 0). La segunda operacin permite enviar un 0 o un 1 al coil elegido,
para diferenciar entre estas operaciones se usa un cdigo de funcin o un cdigo de
operacin como se ve enseguida.

Cdigos de operacin o de funcin en MODBUS

Exactamente el cdigo de operacin que usa MODBUS para diferenciar entre una
operacin y otra es un nmero de un solo byte, recuerde, este nmero indica al esclavo qu
funcin o que operacin tiene que hacer, enseguida se muestran los cdigos de operacin
para cada una de las tablas de datos que maneja MODBUS y una pequea descripcin de lo
que hace cada funcin.
Output Coils
Cdigo de operacin Accin Descripcin
01 (01 Hexadecimal) Lectura de uno o ms coils Sirve para leer que valor tiene el coil
(un 1 o un 0)
05 (05 Hexadecimal) Escritura de un solo coil Sirve para enviar un uno o un cero al coil
elegido
15 (0F Hexadecimal) Escritura de mltiples coils Envia unos o ceros a varios coil.
Input Contact
Cdigo de operacin Accin Descripcin
02 (02 Hex) Lectura de los Input Contact Lee los valores que tiene almacenado el o los
input contact
Input Register
Cdigo de operacin Accin Descripcin
04 (04 Hex) Lectura de los Input Registers Lee los valores que tiene almacenado el o los
input register
Holding Registers
Cdigo de operacin Accin Descripcin
03 (03 Hex) Lectura de los holding Lee qu valor tiene almacenado uno o varios Holding
Registers
06 (06 Hex) Escritura de un holding Escribe un valor entre 0 65535 en un solo holding
16 (10 Hex) Escritura de mltiples holding Escribe un valor entre 0 65535 en varios
holdings
Descripcin de la trama de informacin enviada por el Maestro
A continuacin se detalla exactamente la trama de informacin o paquete de datos que
enva el maestro para que el esclavo realice alguna operacin, se muestra incluso un
ejemplo especfico para que el lector vea con gran detalle la informacin que se enva entre
maestros y esclavos.

Ejemplo #1. Lectura de un solo coil del esclavo.

Supongamos que deseamos saber que trama de informacin tiene que enviar el maestro,
para saber el valor que tiene, especficamente, el coil #5 en un esclavo cuya direccin es la
#240.

Primer Dato de la Trama: Numero de esclavo

El primer dato enviado en la trama de informacin MODBUS es la direccin o nmero del


esclavo como se vio en otros artculos, la informacin se enva a todos los esclavos, pero
solo uno de ellos responde, justo al nmero de esclavo indicado en la trama, el nmero de
esclavo es entonces un nmero entre 1 y 247, por lo que se requiere solo de un byte para
almacenar ese dato.
Para nuestro ejemplo si se desea enviar un dato al esclavo nmero 240, la trama de
informacin inicia a formarse precisamente con el nmero de esclavo, que para nuestro
caso es el nmero 240 (igual a F0 Hexadecimal).

Segundo Dato de la Trama: Cdigo de operacin o funcin MODBUS

El segundo dato, es el cdigo de operacin visto arriba, por supuesto que tambin es un
nmero de un solo byte, que como recordaremos, le indica al esclavo qu funcin o que
operacin tiene que hacer.
Para nuestro ejemplo, se pide conocer el valor del coil #5, esto es entonces una lectura de
un solo coil, por tanto el cdigo de operacin es obviamente el 01 (Hex), como se vio en las
tablas de arriba. As pues la trama de informacin o paquete de datos MODBUS va
formndose como se observa en la figura siguiente:

Tercer Dato: Direccin del primer coil que se desea leer

El tercer dato para el cdigo de funcin 01, es la direccin del coil que se desea leer, debe
ser un nmero de 2 bytes, pues la direccin es un nmero entre 0 y 9998, para nuestro
ejemplo, se desea leer el coil #5, pero, las direcciones de los coil inician en 0, recordemos
esto reproduciendo una vez ms la tabla de datos en la siguiente imagen, donde se marcan
las direcciones usadas para la tabla de datos de los Output Coil.

La direccin MODBUS es el coil que se elige por el usuario, para nuestro ejemplo es el coil
#5, pero la verdadera direccin que se usa en la trama est en la siguiente columna, que
como se mencion arriba es un nmero entre 0 y 9998, el lector debe observar que para el
coil #1, le corresponde la direccin 0, esto implica que se debe restar una unidad para
conocer la direccin absoluta que debe ir en la trama de informacin, as pues para nuestro
ejemplo, el coil es el #5, entonces le corresponde la direccin 4, que en hexadecimal y para
dos bytes es: 0004, siendo este nmero el que se debe enviar en la trama de informacin.

Cuarto Dato: Nmero de coils a leer

El cuarto dato para el cdigo de funcin 01, es el total de coils que se desean leer, la
funcin 01, puede leer desde uno hasta el total de coils (9998) que puede haber, es por eso
que debe ser un nmero de dos byte, para nuestro ejemplo, solo se pide el valor del coil #5,
pero es posible saber con un solo paquete de informacin, el valor de mltiples coils, como
se ver ms adelante. Entonces para nuestro ejemplo, el nmero de coils a leer es 1, en
formato a dos byte es: 00001. Entonces la trama de informacin va quedando as:

Quinto Dato: Cdigo de Deteccin de Error: CRC

El quinto y ltimo dato es el CRC (Cyclic Redundancy Check, Comprobacin de


Redundancia cclica) es un nmero de dos bytes que se usa para detectar errores, el maestro
lo enva en su trama de informacin, y el esclavo lo calcula matemticamente con los datos
seriales que supuestamente llegaron al esclavo, si los datos llegaron correctamente el CRC
calculado por el esclavo debe ser igual al CRC enviado por el maestro, si esto no es
correcto existe un error de integridad de datos, por ende el esclavo no est recibiendo la
informacin correcta. Esta es una de las ventajas del MODBUS pues utiliza esta deteccin
de errores para comprobar que los datos recibidos sean los correctos.
Para el caso nuestro ejemplo, le corresponde un CRC igual a A92A (hex). Queda fuera del
alcance de esta serie de artculos conocer como se calculo el CRC, para fines de este
ejemplo se uso una herramienta de software, llamada modbus poll.
Finalmente la trama que tiene que enviar serialmente el maestro en la red RS485, para el
ejemplo mostrado en esta seccin es mostrada en la siguiente imagen.

Respuesta del esclavo a la funcin 01

Cuando el maestro hace peticiones como las vistas en la seccin anterior el esclavo debe
responder, justo con la funcin que se le pide, que para el caso de la funcin 01, es el valor
de los coils que se enviaron en la trama de informacin.
Para el ejemplo que se est analizando, si se enva la peticin que se muestra en la imagen
anterior, el esclavo solo tiene dos opciones de respuesta, esto por que como recordar el
lector, un coil solo tiene dos valores o es un 1 o es un 0, las imgenes siguientes nos
muestran estas dos respuestas posibles. Pero la trama del esclavo inicia, como la que enva
el maestro, con un byte para denotar el # de esclavo, otro para denotar el # de funcin y los
dems bytes ahora si nos dan la respuesta pedida y termina con el cdigo CRC tambin.
Respuesta del esclavo al maestro suponiendo que el coil es 0

Respuesta del esclavo al maestro suponiendo que el coil es 1

La respuesta prcticamente es igual, a excepcin del byte de datos, donde se observa justo
ah el valor del coil, en un caso un 00 y en otro caso un 01, con esto basta para que el
maestro conozca el valor del coil pedido.

Ejemplo #2. Lectura de varios coil del esclavo.

La misma funcin 01, sirve para conocer el estado de uno o muchos coil, este ejemplo
muestra la trama de informacin para leer el estado de varios coils.
Supongamos ahora que deseamos saber que trama de informacin tiene que enviar el
maestro, para saber el valor que tiene, especficamente, el coil #1, el #2, el #3, el #4, el #5,
el #6, y el #7 en un esclavo cuya direccin es la #240.

Peticin del maestro

La trama que de enviar el maestro es como la mostrada en la figura siguiente


El primer coil que se desea leer es el coil 1, por eso es que la direccin es la 0000, en total
los coils a leer son 7 por es que el cuarto byte es: 0007.

Respuesta del esclavo

Uff para esta peticin puede haber muchsimas respuestas, pues los esclavos pueden tener 0
o 1s, vamos a suponer algunos ejemplos especficos por facilidad.
Supongamos que el coil #1=0, #2=1, #3=0, #4=1, #5=0, #6=1, #7 =1, para este caso la
respuesta del esclavo es como la mostrada en la imagen siguiente:

Dos aspectos a destacar, el nmero de byte, sigue siendo un 1, esto debido a que con un
byte puedo representar los 7 coils, si me hubieran pedido por ejemplo el estado de 15 coils,
entonces ah si el byte de datos seria 02, puesto que solo con dos byte de datos puedo
mostrar el dato de 15 coil, por otro lado observe el byte de datos 6A, este valor es asi por
que es el valor que se obtiene de la representacin del estado de cada uno de los coils.

1.1.- Introduccin al Modbus


Modbus es un protocolo de comunicacin serie desarrollado y publicado por Modicon en
1979. En su origen el uso de Modbus estaba orientado exclusivamente al mundo de los
controladores lgicos programables o PLCs de Modicon. No hace falta ms que echar un
vistazo al mercado industrial actual para darse cuenta que, a da de hoy, el protocolo
Modbus es el protocolo de comunicaciones ms comn utilizado en entornos industriales,
sistemas de telecontrol y monitorizacin. Lo que implica de forma implcita que: tanto a
nivel local como a nivel de red, en su versin TCP/IP, seguir siendo uno de los protocolos
de referencia en las llamadas Smart Grids, redes de sensores, telecontrol y un largo etc de
sistemas de informacin que ya empiezan a asomar la cabeza en nuestro da a da.

El objeto del protocolo Modbus es bien sencillo: La transmisin de informacin entre


distintos equipos electrnicos conectados a un mismo bus. Existiendo en dicho bus un solo
dispositivo maestro (Master) y varios equipos esclavos (Slaves) conectados.

En su origen estaba orientado a una conectividad a travs de lneas serie como pueden ser
RS-232 o RS-485, pero con el paso del tiempo han aparecido variantes como la Modbus
TCP, que permite el encapsulamiento del Modbus serie en tramas Ethernet TCP/IP de
forma sencilla. Esto sucede porque desde un punto de vista de la torre OSI, el protocolo
Modbus se ubica en la capa de aplicacin.

El hecho que se haya extendido su uso hasta convertirse en el protocolo ms estandarizado


en el sector industrial se debe a varias razones diferenciales respecto a otros protocolos:

El estndar Modbus es pblico, lo que permite a los fabricantes


desarrollar dispositivos tanto Master como Slave sin royalties aplicados
al protocolo. Este hecho facilita el acceso a la informacin y estructura
del protocolo que, adems, es muy bsica pero funcional para su
objetivo.

Desde un punto de vista tcnico, su implementacin es muy sencilla y


en consecuencia el tiempo de desarrollo se acorta considerablemente
respecto a otros protocolos en los que se complica la estructura de las
tramas y en consecuencia el acceso a los datos que no estn
almacenados en estructuras complejas.

La transmisin de informacin no est comprometida a ningn tipo de


datos. Lo que implica cierta flexibilidad a la hora del intercambio de
informacin. Que quiere decir esto? Para expresarlo de forma ms clara,
si se transmite un dato de 16bits de informacin su representacin no
est sujeta a ninguna restriccin, por lo que puede tratarse de un dato
tipo Word con signo, un entero sin signo de 16bits o la parte alta de una
representacin tipo Float de 32bits, etc.La representacin del valor
vendr definida por la especificacin que el fabricante d del dispositivo,
lo que permite la representacin de un amplio rango de valores.

1.2.- Funcionamiento y elementos de una red ModBUS


El funcionamiento tiene una base muy sencilla: El Master pregunta y los Slaves responden
o actan en funcin de lo que este diga.

Un dispositivo conectado al bus ejerce de maestro solicitando informacin del resto de


dispositivos conectados que ejercen como esclavos y son quienes suministran la
informacin al primero. Segn el estndar Modbus y dada su implementacin, en una red
Modbus habr un Master y hasta un mximo de 247 dispositivos Slaves. Esta limitacin
est determinada por el simple hecho que en una trama Modbus la direccin del esclavo se
representa con un solo Byte, existiendo algunas direcciones reservadas para propsitos
especficos como broadcast, etc. Todo a su tiempo.

Lo dicho, en una red Modbus todos los dispositivos esclavos deben tener una direccin
asignada que debe estar comprendida entre la 1 y la 247.Desde un punto de vista prctico,
no pueden co-existir dos dispositivos esclavos con la misma direccin Modbus. Dentro de
la trama Modbus RTU, la direccin del esclavo corresponde al primer byte. En una red
Modbus el Master no slo puede ejercer la funcin de recompilar informacin de los
esclavos mediante preguntas, sino que puede interactuar con ellos o alterar su estado,
pudiendo escribir adems de leer informacin en cualquiera de ellos.

Con el paso de los aos y segn la evolucin de las redes de comunicaciones entre
dispositivos electrnicos, as como de la conectividad entre dispositivos, han ido
apareciendo variantes del protocolo Modbus que estaba pensado en su inicio para redes
implementadas sobre lneas serie. La evolucin ms utilizada/conocida es la que se conoce
como Modbus TCP, una versin del protocolo Modbus que permite la implementacin
de este protocolo sobre redes Ethernet i, en consecuencia, aumenta el grado de
conectividad. Est versin del protocolo encapsula la trama base del protocolo Modbus
en la capa de aplicacin TCP/IP de forma sencilla. Con un poco de tiempo colgar la
estrucura a nivel de byte de las tramas Modbus RTU y Mobus TCP.

La especificacin oficial de ModBUS se puede encontrar en www.modbus-ida.org.

En breve ms informacin sobre ModBUS, su estructura y sus variantes

Como en cualquier protocolo de campo destinado al intercambio de informacin entre un


servidor y los dispositivos esclavo, el protocolo Modbus RTU sigue una estructura de
trama bien definida por campos. Como veris la estructura de trama Modbus es muy
sencilla, siendo uno de los motivos de su xito junto a ser un protocolo abierto y a no estar
orientado a conexin (como comentaba en el post anterior).

As pues la estructura bsica de una trama Modbus RTU, tanto de lectura como escritura,
es la que se muestra a continuacin:

Direccin Funcin Bytes de Comprobacin de


Esclavo Modbus Datos Errores

1 Byte 1 Byte N Bytes 2 Bytes

Direccin Esclavo
Este es el campo al que haba hecho referencia en el post anterior y que de manera directa
limita el nmero de esclavos que podemos tener conectados de forma correcta al bus serie
Modbus. Dado que existen direcciones reservadas para propsitos especiales como el
broadcast el valor que puede ir de 1 a 247.

Valor comprendido entre 1-247.

No se v afectado por si se trata de una trama de escritura o lectura.

Cuando el master pregunta al slave este campo contiene la direccin del


slave al que va dirigido. Cuando se trata de una trama de respuesta de
un slave al master este campo contiene tambin la direccin del esclavo
indicando quin es el que responde.

Funcin Modbus
Con este campo se especifica que accin requiere el master del slave al que va dirigida la
trama. Con el paso de los aos se han ido aadiendo ms funciones especificas. En
cualquier caso, os explico las mas utilizadas y/o genricas.
En este caso, el valor contenido en este campo si que puede variar si se trata de una trama
Master->Slave o si por el contrario es Slave->Master. El valor de este byte se ver
modificado en la trama de respuesta slo cuando exista algn error en el campo de datos de
la trama Modbus enviada por el Master, no cuando el cdigo de comprobacin de errores
de esta sea errneo. Reiterando lo dicho, si la trama del Master es correcta, la trama de
respuesta tiene este byte con el mismo valor. En el caso de existir error el Slave responder
con la misma funcin que en la trama enviada por el Master pero con la mscara 0x80
aplicada. Por ejemplo: si el mster enva una trama con funcin 0x03 correcta el Slave
responder con el mismo campo y el mismo valor, 0x03; si por el contrario contiene algn
error, el Master aplicar la mscara 0x80 y responder con una trama con el valor 0x83.
Poco a poco, mas adelante explicar con mas detalle la trama de error de respuesta para que
quede mas claro. Ahora centrmonos en los casos no excepcionales y sin error. Pues
primero se gatea y despus se camina.

Funciones de lectura de datos:

Funcin 01 (01 hex): Lectura de seales discretas de salida (Discrete


Output Coils)

Funcin 02 (02 hex): Lectura de seales discretas de entradas


(Discrete Input Contacts)

Funcin 03 (03 hex): Lectura de registros analgicos (Analog Output


Holding Registers)

Funcin 04 (04 hex): Lectura de registros analgicos de entrada


(Analog Input Registers)

Funciones de escritura de datos:

Funcin 05 (05 hex): Escritura de una seal discreta de salida (Simple


Discrete Output Coil)

Funcin 15 (0F hex): Escritura de mltiples seales discretas de salida


(Mltiple Discrete Output Coils)

Funcin 06 (06 hex): Escritura de un Simple Analog Output Holding


Register

Funcin 16 (10 hex): Escritura Mltiple Analog Output Holding


Registers
Byte de datos
Este campo depender tanto en contenido como en longitud de la funcin que se indique en
el campo anterior (Funcin) as como de si se trata de una trama Master-Slave o de
respuesta Slave-Master.

En este post podis ver como son cada una de las funciones. He preferido dedicarle un post
por su variabilidad.

CRC Campo de comprobacin de errores


Este campo consta de dos bytes y como en cualquier otro protocolo en el caso de Modbus
sirve para la deteccin de errores en la trama. El CRC (Cyclic Redundancy Check o
comprobacin de redundancia cclica) es un cdigo ms que frecuente en la deteccin de
errores en redes digitales, sistemas de almacenamiento para la deteccin de modificacin
accidental de los datos o en este caso para comprobar la integridad de los datos en su
transmisin por buses de campo.

Para el clculo del CRC se utilizan cada uno de los bytes que conforman la trama. El
procedimiento es el siguiente:

Se enva la trama Modbus con el CRC calculado.

El receptor del mensaje recibe la trama completa e internamente calcula


el CRC con los datos recibidos. Y lo compara con el CRC que le ha
llegado.

o Si el cdigo coincide, la trama Modbus es correcta y se prosigue


con el funcionamiento normal generando la respuesta pertinente.

o Si el cdigo es errneo, es decir que no coincide el CRC recibido


con el CRC no se responder a la peticin de datos por parte del
Slave, de manera que ocurrir un Timeout en recepcin del Master
y este deber entender que el Slave no ha recibido la trama
correctamente y proceder a un reintento.

Si necesitis ms informacin acerca de como calcular este CRC16 encontraris algo de


cdigo C en este post: CRC 16 Modbus RTU

Potrebbero piacerti anche