Otra alternativa, para usuarios más avanzados o desarrolladores, es enviar un string hexadecimal construyendo la petición ModBus RTU.
Para leer Holding Registers de un dispositivo, usamos la función ModBus RTU #3.
El formato de los bytes a enviar para una petición de Holding Registrers (#3) es el siguiente:
Byte 0 Modbus Device Address
Byte 1 Function Code / Message Type (0x03)
Byte 2 Number of bytes returned (specified in bytes, 1 register x 2 bytes = 2)
Byte 3 Data0
Byte 4 Data1
Byte 5 CRC of bytes 1 to 5 (high byte)
Byte 6 CRC of bytes 1 to 5 (low byte)
Entonces, armamos el siguiente string en hexadecimal, cada valor hexa es un byte (cuya descripción la vimos arriba):
01
03 00 20 00 01 85 C0 Notemos como "
00 20" es el número de registro a leer, en decimal el 32, donde está la temperatura.
El primer byte (01) es la dirección ModBus RTU del dispositivo esclavo el segundo byte es el tipo de función ModBus, es decir, la número 3.
Para enviar la cadena hexadecimal podemos utilizar el software "
Coolterm":
También si querés enviar una serie de bytes en hexa (construís la petición manualmente) y ver la repuesta, podés utilizar "Coolterm":
Breve explicación:
https://learn.sparkfun.com/tutorials/terminal-basics/coolterm-windows-mac-linuxDescarga:
http://freeware.the-meiers.org/Al abrir el software, configurar primero que nada el puerto serie dónde tenemos el conversor USB-RS485 y la velocidad 9600 BPS, 8N1.
Luego conectar el puerto con "Connect".
Desde menú
View seleccionar
Hex para ver la respuesta en hexadecimal.
Luego en menú "
Connection" seleccionar "
Send string..." para enviar la siguiente cadena hexa que vimos arriba:

Y la respuesta del módulo visualizada en Coolterm es:

¡Éxitos!