Я полагаю, вы знаете, как отправлять данные по компорте. Проблема в том, «как написать запрос Modbus RTU».
Вы можете проверить документацию организации Modbus
Пример: Считать два регистра хранения из 0x0001 и 0x0002 из идентификатора Устройство 11 (0x0B).
Slave Address 0B
Function 03
Starting Address Hi 00
Starting Address Lo 01
No. of Points Hi 00
No. of Points Lo 02
CRC Hi 95
CRC Lo 61
Вы можете проверить cr c с этого генерирующего сайта cr c Не проверяйте "Hex" и посмотрите на CRC16 (modbus).
Следующие примеры данных отображаются следующим образом.
byte[] data = new byte[] {
0x11, 0x03, 0x00, 0x01, 0x00, 0x02, 0x95, 0x61
};
Отправляя эти данные, вы можете получить ответ в следующей структуре данных.
Field Name (Hex)
Slave Address 0B
Function 03
Byte Count 06
Data Hi (Register 0x01) 00
Data Lo (Register 0x01) 2B
Data Hi (Register 0x02) 00
Data Lo (Register 0x02) 13
Error Check (LRC or CRC) ––
PS: между каждым запросом вам нужен интервал без вывода сообщений для 28 бит, вы можете рассчитать интервал без вывода сообщений по скорости передачи.