Anda di halaman 1dari 14

El protocolo MODBUS

1-Introduccin
2-Descripcin general
3-Los campos de las tramas MODBUS
4-Descripcin de los campos de las tramas MODBUS
- Nmero de Esclavo
- Cdigo de Operacin o Funcin
- Direccin, datos y subfunciones
- Control de errores LRC o CRC

5-Descripcin de los cdigos de operacin o funcin ms frecuentes
- Funcin 1 o 2 ( 1 Read Coil Status - 2 Read Input Status )
- Funcin 3 o 4 ( 3 Read Holding Registers 4 Read Input Registers )
- Funcin 5 ( Force Single Coil )
- Funcin 6 ( Preset Single Register )
- Funcin 7 ( Read Exception Status )
- Funcin 15 ( Force Multiple Coils )
- Funcin 16 ( Preset multiple registers )
- Funcin 20 ( Read General Reference )
- Funcin 21 ( Write General Reference )

1-Introduccin
El protocolo de comunicaciones industriales MODBUS fue desarrollado en 1979 por la
empresa norteamericana MODICON 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. A parte de que muchos fabricantes utilizan
este protocolo en sus dispositivos, existen tambin versiones con pequeas modificaciones o
adaptadas para otros entornos ( como p.ej JBUS o MODBUS II )
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.
Este documento explica la especificacin MODBUS de forma general, sin entrar en mucho
detalle en algunas de sus particularidades, no obstante su contenido ha de ser ms que
suficiente para aquellos que deseen comprender el funcionamiento general de este estndar.
Por otro lado, quien desee realizar una implementacin precisa de MODBUS deber recurrir a
la documentacin oficial de MODICON o a la documentacin especifica del fabricante de los
equipos con los que va a comunicar.

2-Descripcin 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: en que 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: en que 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 ).
Como se puede ver, 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.
Existe algn caso concreto, en que hay ms de una trama de respuesta para una trama de
pregunta, como p.ej. cuando el maestro enva una operacin cuya respuesta puede llevar al
esclavo un tiempo elaborar. En estas situaciones el esclavo enva una primera respuesta
indicando que an no tiene los datos y tardar un tiempo en disponer de ellos, y otra segunda
con los datos o confirmacin de la operacin.
Adems las comunicaciones MODBUS se pueden realizar 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.


Modo ASCII Modo RTU
Carcteres ASCII 09,A.F Binario 0255
Comprob. Error LRC Longitudinal Redundancy check CRC Cyclic Redundancy Check
Inicio de trama Carater : 3.5 veces t de carcter
Final de trama Character CR/CL 3.5 veces t de carcter
Distancia max. entre caracteres 1 seg 1.5 veces t de carcter
Bit de inicio 1 1
Bits de datos 7 8
Paridad Par / Impar / Ninguna Par / Impar / Ninguna
Bits de parada 1 si hay paridad 2 si ninguna 1 si hay paridad 2 si ninguna

3-Campos de las tramas MODBUS
El nmero de campos de las tramas MODBUS vara ligeramente dependiendo de si utilizamos
la codificacin ASCII o RTU:

Codificacin ASCII ( formato texto ):
-Inicio de trama: 2 caracteres ASCII ( que representan 1 byte ) codificando el caracter :
(0x3A)
-NEsclavo: 2 caracteres ASCII ( que representan 1 byte ) codificando la direccin del esclavo
destino ( o origen ) de la trama
-Cdigo Operacin: 2 caracteres ASCII ( que representan 1 byte ) con el cdigo de operacin
-Direccin, datos y subfunciones Datos: con los parmetros necesarios para realizar la
operacin.
-LRC(16): H L
-Final de trama: 4 caracteres ASCII ( que representan 2 bytes ) con los caracteres CR (0x0D) -
LF (0x0A)
Codificacin RTU (en el formato binario, el inicio de trama debera ser tras 3.5 tiempo de
carcter):
-NEsclavo: 1 byte con la direccin del esclavo destino ( o origen ) de la trama
-Cdigo Operacin: 1 byte con el cdigo de operacin
-Subfunciones Datos: con los parmetros necesarios para realizar la operacin.
-CRC(16): H L.

4-Descripcin de los campos de las tramas 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 queremos
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.
El cdigo de operacin puede tomar cualquier valor comprendido entre el 0 y el 127 ( el bit de
ms peso se reserva para indicar error ). Cada cdigo se corresponde con una determinada
operacin. Algunos de estos cdigos se consideran estndar y son aceptados e interpretados
por igual por todos los dispositivos que dicen ser compatibles con MODBUS, mientras que
otros cdigos son implementaciones propias de cada fabricante. Es decir que algunos
fabricantes realizan implementaciones propias de estos cdigos no estndar.
Es tambin mediante el cdigo de funcin que el esclavo confirma si la operacin se ha
ejecutado correctamente o no. Si ha ido bien responde con el mismo cdigo de operacin que
se le ha enviado, mientras que si se ha producido algn error, responde tambin con el mismo
cdigo de operacin pero con su bit de ms peso a 1 ( 0x80 ) y un byte en el campo de datos
indicando el cdigo de error que ha tenido lugar.
- 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.
Al establecer la direccin de una variable u otro elemento en el mapa de direcciones
MODBUS, direccionamos con 1 unidad menos a la del REGISTRO al que queremos
acceder, de manera que si p.ej. quisiramos acceder al rel @ 127d, lo haramos situando el
valor 126d en el byte del campo de direccin. Otros ejemplos:
- El rel nmero 1 de un controlador se direccionara con el valor 0000 en el campo de
direccin de un mensaje MODBUS.
- El rel 0x007F (127d ) de un controlador se direccionara con el valor 0x007E ( 126d ) en el
campo de direccin de un mensaje MODBUS.
- El Holding REGISTER 40001 se accedera situando el valor 0000 en el campo de direccin
del mensaje. Como se puede ver el cdigo de funcin de acceso a los Holding Registers lleva
implcito el acceso a la direccin 4XXXX.
- El Holding Register 40108 es accedido leiendo de la direccin 0x006B ( 107d )
Generalmente en MODBUS cada tipo de dato se mapea en un rango de memoria concreto:
@1-10000 (DOs - digital outputs): 1 bit por direccin para indicar el estado de una salida,
mando o rel ( 0 desactivado, 1 activado ). Las direcciones de este rango se suelen acceder
mediante las funciones 1 (lectura), 5 (escritura), 15 (escritura mltiple).
@10001-20000 (DIs - digital inputs): 1 bit por direccin para leer el estado de una entrada
digital ( 0 desactivada, 1 activada ) tambin denominadas DIs ( Digital Inputs ). Las direcciones
de este rango se suelen acceder con la funcin 2 (lectura) y llevan implcita la direccin 10001
como direccin base ( para acceder a una direccin bastar con especificar la distancia entre
esta y la direccin base ).
@20001-30000: el protocolo MODBUS estndar no hace uso de este rango de direcciones.
@30001-40000 (AIs - analog inputs): 16 bits por direccin con el estado de las medidas o
entradas analgicas tambin denominadas AIs ( Analog Inputs ). Dependiendo del dispositivo
este puede hacer uso de ms de un REGISTRO para almacenar la informacin de la
medida, as con 2 registros consecutivos podramos almacenar medidas de 32 bits. Las
direcciones de este rango se acceden mediante la funcin 4 (lectura) y llevan implcita la
direccin 30001 como direccin base ( para acceder a una direccin bastar con especificar la
distancia entre esta y la direccin base ).
@40001-50000 (AOs - analog outputs): 16 bits con los registros de salidas analgicas o de
propsito general ( Output Registers Holding Registers). Se acceden con las funciones 3 (
lectura ), 6 ( escritura ) o 16 ( escritura mltiple ) y llevan implcita la direccin 40001 como
direccin base ( para acceder a una direccin bastar con especificar la distancia entre esta y
la direccin base ).
Algunos fabricantes expresan la direccin de forma compuesta, separando la direccin de
palabra y la direccin de bit: p.ej word 0x30 bit 1
Como se cita en el apartado de Cdigo de Operacin o Funcin, cuando se produce un error
en la ejecucin de un comando en el esclavo, este responde poniendo a 1 el bit de ms peso
del codigo de funcin ( 0x80 ). Con este bit el maestro sabe que se ha producido un error, pero
para obtener mas detalle sobre el tipo de error, ha de comprobar el campo de datos:
Codigo Nombre Significado
01
ILLEGAL
FUNCTION
El cdigo de funcin recibido no se corresponde a ningn comando disponible en el
esclavo
02
ILEGAL DATA
ADRESS
La direccin indicada en la trama no se corresponde a ninguna direccin vlida del
esclavo
03
ILLEGAL DATA
VALUE
El valor enviado al esclavo no es vlido
04
SLAVE DEVICE
FAILURE
El esclavo ha recibido la trama y la ha comenzado a procesar, pero se ha producido
algn error y no ha podido termina la tarea.
05 ACKNOWLEDGE
El esclavo ha recibido la trama y la est procesando pero esto le llevar un periodo
un poco largo. Mediante esta respuesta se evita que el mster considere un error de
timeout. El mster podr enviar ms tarde una trama una trama de tipo Poll Program
Complete para verificar si ha completado el comando
06
SLAVE DEVICE
BUSY
El esclavo est ocupado realizando otra tarea y no puede atender a esa peticin en
ese instante por lo que el mster tendr que reintentarlo ms adelante.

- 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.
La siguiente es una implementacin en C de la funcin de clculo del CRC ( modo RTU ):
#definePOLY0xA001
unsignedcrc16(char*buf,intlen)
{
char i;
unsigned crc;

for(crc=0xFFFF;len!=0;len--){
crc^=*buf++;
for(i=0;i<8;i++){
if(crc&0x0001){
crc=(crc>>1)^POLY;
}else{
crc>>=1;
}
}
}
return(crc);
}


En C#:


uint crc16(byte [ ] buf , uint len)
{
uint POLY=0xA001;
int crc;
uint i;
uint j;

j = 0;
for (crc = 0xFFFF; len != 0; len --){
crc ^= buf[j];
j++;
for (i = 0; i < 8; i ++){
if ((crc & 0x0001)>0){
crc = (crc >> 1) ^ POLY;
}else{
crc >>= 1;
}
}
}
return (crc);
}


El siguiente es un ejemplo en modo ASCII y RTU de peticin de lectura de 3 REGISTROS
del esclavo y la correspondiente respuesta :

-PETICION de 3 datos

Nombre del campo Ejemplo ( HEX ) Caracteres ASCII 8bits modo RTU
Cabecera : Ninguno
Direccin esclavo 06 06 0000 0110
Funcin 03 03 0000 0011
Direccion inicio Hi 00 00 0000 0000
Direccion inicio Lo 6B 6B 0110 1011
Num de Registros Hi 00 00 0000 0000
Num de Registros Lo 03 03 0000 0011
Error Check LRC ( 2 caracteres ) CRC (16 bits)
Fin de trama CR LF Ninguno
Total: 17 bytes 8 bytes

-RESPUESTA con los 3 datos:

Nombre del campo Ejemplo (HEX) Caracteres ASCII 8bits modo RTU
Cabecera : Ninguno
Direccin esclavo 06 06 0000 0110
Funcin 03 03 0000 0011
Numero de bytes de datos 06 06 0000 0110
Dato 0 Hi 02 02 0000 0010
Dato 0 Lo 2B 2B 0010 1011
Dato 1 Hi 00 00 0000 0000
Dato 1 Lo 00 00 0000 0000
Dato 2 Hi 00 00 0000 0000
Dato 2 Lo 63 63 0110 0011
Error Check LRC (2 caracteres ) CRC (16 bits)
Fin de trama CR LF ninguno
Total: 23 bytes 11 bytes


5-Descripcin de los cdigos de operacin o funcin ms
frecuentes
Los siguientes cdigos son algunos de los cdigos de funcin MODBUS ms extendidos,
soportados por todos los dispositivos que cumplen con las especificaciones del estndar (
controladores de MODICON ):

- Funcin 1 Read Coil Status
- Funcin 2 Read Input Status
- Funcin 3 Read Holding Registers
- Funcin 4 Read Input Registers
- Funcin 5 Force Single Coil
- Funcin 6 Preset Single Register
- Funcin 7 Read Exception Status
- Funcin 8 Diagnostics
- Funcin 9 Program 484
- Funcin 10 Poll 484
- Funcin 11 Fetch Communication Event Counter
- Funcin 12 Fetch Communication Event Log
- Funcin 13 Program Controller
- Funcin 14 Poll Controller
- Funcin 15 Force Multiple Coils
- Funcin 16 Preset Multiple Registers
- Funcin 17 Report Slave ID
- Funcin 18 Program 884/M84
- Funcin 19 Reset Comm. Link
- Funcin 20 Read General Reference
- Funcin 21 Write General Reference
- Funcin 22 Mask Write 4X REGISTER
- Funcin 23 Read/Write 4X Registers
- Funcin 24 Read FIFO Queue

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.

Peticin del mster (modo RTU):
NEsclavo
Cdigo Operacin: 0x01 o 0x02
Direccin del registro ( de 1 bit ) a leer H
Direccin del registro ( de 1 bit ) a leer L
N de bits que se desea leer H
N de bits que se desea leer L
CRC(16): H
CRC(16):
Respuesta del esclavo (modo RTU):
NEsclavo
Cdigo Operacin: 0x01 o 0x02
N bytes leidos: 1 byte
Octetos: max 256 bytes
CRC(16): H
CRC(16): L

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 )
Peticin del mster (modo RTU):
NEsclavo
Cdigo Operacin: 0x03 o 0x04
Direccin del registro :
N de datos que se desea leer: max 128 datos
CRC(16): H L
Respuesta del esclavo (modo RTU):
NEsclavo
Cdigo Operacin: 0x03 o 0x04
N de bytes leidos: 1 byte
Datos: max 128 datos ?
CRC(16): H L
Ej 1:
P:[01][03][01][00][00][06][C4][34]
R:[01][03][0C][20][81][00][00][00][00][00][00][00][00][1C][01][76][F1]
Ej 2:
P:[0A][04][00][00][00][0A][71][76]
0A numero de perifrico
04 funcin de lectura
00 00 registro donde se va a comenzar la lectura
00 0A numero de REGISTROS a leer: 10
71 76 CRC
R:[0A][04][14][00][00][08][4D][00][00][23][28][00][00][0F][A0][00][00][00][90][00][00][00][60][C
B][2E]
0A Nmero del perifrico que responde, 10 en decimal
04 Funcin de lectura - la que se ha utilizado en la pregunta
14 Nmero de bytes recibidos (20).
00 00 08 4D V1x 10 (registro 00 Hex) con valor en decimal 212,5 V
00 00 23 28 mA 1, en decimal 9000 mA
00 00 0F A0 W 1, en decimal 4000 W
00 00 00 90 varL 1, en decimal 144 varL
00 00 00 60 PF1 x 100, en decimal 96
CB 2E CRC

Ej 3:
P:[01][03][00][30][00][10][44][09]
Lectura en el esclavo @1 de 16 registros a paritir de la direccion 0x0030
R:[01][03][20][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00]
[00][27][0F][16][18][00][00][2E][DF][00][00][42][CF]
01 direccion del esclavo que responde
03 Funcin de lectura
20 Numero de bytes recibidos
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 27 0F 16 18 00 00 2E
DF 00 00 Respuesta ( 32 bytes a 2 bytes por registro: 16 registros )
42 CF CRC H L
Funcin 5 ( Force Single Coil ):
Permite modificar el estado de una DO del esclavo ( mando o rel ) . Es decir mediante este
comando podemos 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.
Peticin del mster (modo RTU):
NEsclavo
Cdigo Operacin: 0x05
Direccin del bit:
Estado para el bit: 0xXX ( 0x00 : 0 , 0xFF : 1 )
Byte a 0x00
CRC(16): H L
Respuesta del esclavo (modo RTU):
NEsclavo
Cdigo Operacin: 0x05
Direccin del bit:
Estado para el bit: 0xXX ( 0x00 : 0 , 0xFF : 1 )
Byte a 0x00
CRC(16): H L
Ej 1 :
P:[01][05][00][01][FF][00] [DD][FA]
R:[01][05][00][00][FF][00][8C][3A]
Ej 2:
P:[01][05][00][00][00][00][CD][CA]
R:[01][05][00][01][00][00] [9C][0A]

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 ). Deberemos indicar la
direccin del valor que queremos modificar y la magnitud que queremos asignarle. 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 )
Peticin del mster (modo RTU):
NEsclavo
Cdigo Operacin: 0x06
Direccin del dato:
Valor del dato:
CRC(16): H L
Respuesta del esclavo (modo RTU):
NEsclavo
Cdigo Operacin: 0x06
Direccin del dato:
Valor del dato:
CRC(16): H L
Ej:
P:[01][06][01][F1][00][02][58][04]
R:[01][06][01][F1][00][02][58][04]
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) :
Peticin del master (modo RTU):
NEsclavo
Cdigo Operacin: 0x07
CRC(16): H L
Respuesta del esclavo (modo RTU):
NEsclavo
Cdigo Operacin: 0x07
Valor del octeto:
CRC(16): H L

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.
Peticin del mster (modo RTU):
NEsclavo
Cdigo Operacin: 0x0F
Direccin inicial de los mandos ( bits ) H
Direccin inicial de los mandos ( bits ) L
Cantidad de mandos ( bits ) H
Cantidad de mandos ( bits ) L
Cantidad de bytes enviados con el estado de los mandos ( bits )
Estado de los 8 primeros mandos ( bits ) a modificar
Estado de los 8 siguientes mandos ( bits ) a modificar
...
Estado de los 8 ltimos mandos ( bits ) a modificar
CRC(16): H L
Aunque el estado de las DOs se especifica bit a bit, las tramas se componen de bytes, y esto
obliga a enviar los estados en grupos de 8. El esclavo no debera hacer caso a los bits
sobrantes, es decir, no debera considerar los que queden por encima del ltimo bit indicado
en el campo cantidad de mandos a modificar. As, si quisiramos modificar 12 mandos o
rels a partir de la direccin 7, indicaramos como direccin origen la direccin 7, como
cantidad de mandos a modificar 12, y en el campo de estado de mandos: 0x3C , 0x0B ( el
esclavo no considerar los que queden por encima del 12o bit )
Rel: 14 13 12 11 10 09 08 07 - 22 21 20 19 18 17 16 15
Bits: 0 1 1 1 1 0 0 0 X X X X 1 0 1 1
Respuesta del esclavo (modo RTU):
NEsclavo
Cdigo Operacin: 0x0F
Direccin inicial de los mandos o bits consecutivos H
Direccin del mando o bit L
Cantidad de mandos o bits H
Cantidad de mandos o bits L
CRC(16): H L
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 queremos comenzar a
actualizar valores, el nmero de valores que queremos actualizar, y la lista de valores que
queremos 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 )
Peticin del mster (modo RTU):
NEsclavo
Cdigo Operacin: 0x10
Direccin base de los datos: 2 bytes
Nmero de datos: 2 bytes
Valor del dato 0: 2 bytes
Valor del dato 1: 2 bytes

Valor del dato n: 2 bytes
CRC(16): H L
Respuesta del esclavo (modo RTU):
NEsclavo
Cdigo Operacin: 10H
Direccin base de los datos: 2 bytes
Nmero de datos: 2 bytes
CRC(16): H L
Funcin 20 ( Read General Reference ):
Retorna el contenido de los regitros 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 "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 queremos 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.
Peticin del mster (modo RTU):
Slave Address 0x11
Function 0x14
Byte Count 0x0E
SubReq 1, Reference Type 0x06
SubReq 1, File Number Hi 0x00
SubReq 1, File Number Lo 0x04
SubReq 1, Starting Addr Hi 0x00
SubReq 1, Starting Addr Lo 0x01
SubReq 1, REGISTER Count Hi 0x00
SubReq 1, Register Count Lo 0x02
SubReq 2, Reference Type 0x06
SubReq 2, File Number Hi 0x00
SubReq 2, File Number Lo 0x03
SubReq 2, Starting Addr Hi 0x00
SubReq 2, Starting Addr Lo 0x09
SubReq 2, Register Count Hi 0x00
SubReq 2, Register Count Lo 0x02
Error Check (LRC or CRC)--
Respuesta del esclavo (modo RTU):
Slave Address 0x11
Function 0x14
Byte Count 0x0C
SubRes 1, Byte Count 0x05
SubRes 1, Reference Type 0x06
SubRes 1, Register Data Hi 0x0D
SubRes 1, Register Data Lo 0xFE
SubRes 1, Register Data Hi 0x00
SubRes 1, Register Data Lo 0x20
SubRes 2, Byte Count 0x05
SubRes 2, Reference Type 0x06
SubRes 2, Register Data Hi 0x33
SubRes 2, Register Data Lo 0xCD
SubRes 2, Register Data Hi 0x00
SubRes 2, Register Data Lo 0x40
Error Check (LRC or CRC)
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 porque 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 queremos 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.
Peticin del mster (modo RTU):
Slave Address 0x11
Function 0x5
Byte Count 0x0D
SubReq 1, Reference Type 0x06
SubReq 1, File Number Hi 0x00
SubReq 1, File Number Lo 0x04
SubReq 1, Starting Addr Hi 0x00
SubReq 1, Starting Addr Lo 0x07
SubReq 1, REGISTER Count Hi 0x00
SubReq 1, Register Count Lo 0x03
SubReq 1, Register Data Hi 0x06
SubReq 1, Register Data Lo 0xAF
SubReq 1, Register Data Hi 0x04
SubReq 1, Register Data Lo 0xBE
SubReq 1, Register Data Hi 0x10
SubReq 1, Register Data Lo 0x0D
Error Check (LRC or CRC)
Respuesta del esclavo (modo RTU):
Slave Address 0x11
Function 0x15
Byte Count 0x0D
SubReq 1, Reference Type 0x06
SubReq 1, File Number Hi 0x00
SubReq 1, File Number Lo 0x04
SubReq 1, Starting Addr Hi 0x00
SubReq 1, Starting Addr Lo 0x07
SubReq 1, Register Count Hi 0x00
SubReq 1, Register Count Lo 0x03
SubReq 1, Register Data Hi 0x06
SubReq 1, Register Data Lo 0xAF
SubReq 1, Register Data Hi 0x04
SubReq 1, Register Data Lo 0xBE
SubReq 1, Register Data Hi 0x10
SubReq 1, Register Data Lo 0x0D
Error Check (LRC or CRC)

Anda mungkin juga menyukai