aqui pongo unas tramas que envia el master al slave.con el ejemplo del labview.me ha servido para entender el funcionamiento
de algunos comandos y como interactuan el master y el slave.de momento he entendido como el master envia los codigos de
funcion "write multiple coils" y "write multiple registers" aunque me quedan mas funciones y como se transmite desde
el slave al master.
MASTER
01 02 00 00 00 04 79 c9 escribe
01 02 01 00 a1 88 lee
01 04 00 00 00 04 f1 c9 escribe
01 04 08 00 00 00 00 00 00 00 00 24 0d lee
el ejemplo del labview sin introducir ningun dato en los coil ni en los registros,genera la trama anterior.
lo que entiendo de esta trama es lo suguiente:
01 02 00 00 00 04 79 c9 el master envia datos al slave 01 con el comando 02"read discrete inputs"
01 02 01 00 a1 88 el slave responde
01 04 00 00 00 04 f1 c9 el master envia datos al slave 01 con el comando 04"read input registers"
01 04 08 00 00 00 00 00 00 00 00 24 0d el slave responde
ahora me he ddo cuenta de que el master no envia constantemente el dato seleccionado en el panel de control.
si no que lo envia al producirse el evento de cambiar algun registro o interruptor.
esta es la trama enviada al slave cuando todos los interruptores estan a 1.
01 0f 00 00 00 04 01 07 7f 54 el master envia datos al slave 01 con el comando 0f"Write Multiple Coils"
01 0f 00 00 00 04 54 08 el slave responde
estos de abajo son los resultados de varias tramas al modificar los coils.se distinge en el 8º byte que el valor
del coil esta insertado en este.y el 6º byte es el numero de coils usados.
tambien se verifica que en los coils del panel de control el bit de menos peso esta situado a la izquierda.
coils to write 0001 01 0f 00 00 00 04 01 08 3f 50
coils to write 0010 01 0f 00 00 00 04 01 04 3f 55
coils to write 0100 01 0f 00 00 00 04 01 02 bf 57
coils to write 1000 01 0f 00 00 00 04 01 01 ff 56
coils to write 1111 01 0f 00 00 00 04 01 0f 7e 92
coils to write 11111111 01 0f 00 00 00 08 01 ff be d5
respuesta: 01 0f 00 00 00 04 54 08
________________
ejemplo del envio de datos de 16 coils to write:
01 0f 00 00 00 10 02 ff 7f e2 30
1º byte: 01 direccion del esclavo
2º byte: 0f codigo de funcion (Write Multiple Coils)
3º y 4º byte: 00 00 principio de direccion.
5º y 6º byte: 00 10 cantidad de salidas(16 coils) o bits.segun se quiera interpretar.
7º byte: 02 numero de bytes a enviar.bytes involucrados en el envio.al pasar del 8º bit
8º byte: ff dato
9º byte: ff dato
10º y 11º crc
el slave responde:
01 0f 00 00 00 10 54 07
1º byte: 01 direccion del esclavo
2º byte: 0f codigo de funcion
3º y 4º byte: 00 00 principio de direccion.
5º y 6º byte: 00 10 cantidad de salidas(16 coils) o bits.segun se quiera interpretar.
7º y 8º crc
______________________________________________________________________________________________________________________________________________
y aqui abajo el envio de la modificacion de los registers:
01 10 00 00 00 04 08 00 00 00 00 00 01 00 01 26 7a el maste envia al slave 01 con el comando 10"Write Multiple registers"
01 10 00 00 00 04 c1 ca el slave responde
registers to write 0001 01 10 00 00 00 04 08 00 00 00 00 00 00 00 01 77 7a
registers to write 0010 01 10 00 00 00 04 08 00 00 00 00 00 01 00 00 e7 ba
registers to write 0100 01 10 00 00 00 04 08 00 00 00 01 00 00 00 00 8b ba
registers to write 1000 01 10 00 00 00 04 08 00 01 00 00 00 00 00 00 a6 ba
registers to write 1111 01 10 00 00 00 04 08 00 01 00 01 00 01 00 01 0b 7a
respuesta del slave: 01 10 00 00 00 04 c1 ca
________________
ejemplo del envio de datos de 16 registers to write:
01 10 00 00 00 10 20 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 be ca
1º byte: 01 direccion del esclavo
2º byte: 10 codigo de funcion (Write Multiple registers)
3º y 4º byte: 00 00 principio de direccion.
5º y 6º byte: 00 10 cantidad de salidas(16 registers de 16 bits)
7º byte: 02 numero de bytes a enviar.bytes involucrados en el envio.cada 2 bytes=1 registro de 16 bits
del 8º al 39º: datos
40º y 41º:crc
el slave responde:
01 10 00 00 00 10 c1 c5
1º byte: 01 direccion del esclavo
2º byte: 10 codigo de funcion
3º y 4º byte: 00 00 principio de direccion.
5º y 6º byte: 00 10 cantidad de salidas
7º y 8º crc
informacion sobre modbus
http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf