MODBUS TD-500: Difference between revisions

no edit summary
 
No edit summary
Line 1: Line 1:
[[RU:MODBUS_ТД-500| Русская версия]]
[[RU:MODBUS_ТД-500| Русская версия]]
[[es:MODBUS_TD-500| Versión en español]]
[[es:MODBUS_TD-500| Versión en español]]
Описание регистров MODBUS ТД-500 


TEST
= '''Настройки порта''' =
Baud rate: 19200 kbps
 
Data size: 8
 
Stop-bits: 1
 
Parity: None
 
= '''Структура запроса и ответа''' =
'''ЗАПРОС''':
 
*        (u8) Сетевой номер
*        (u8) 0х03 --> Команда чтения
*        (u8) Младший байт рег. чтения (значение игнорируется)
*        (u8) Старший байт рег. чтения (значение игнорируется)
*        (u8) Младший байт количества -|-|-|-|
*        (u8) Старший байт количества -|-|-|-|
*        (u8) CRC16 - младший байт
*        (u8) CRC16 - старший байт
 
'''ОТВЕТ''':
 
*        (u8) Сетевой номер
*        (u8) Подтверждение команды (всегда 0х03)
*        (u8) Количество выгружаемых байт (всегда 8)
* s8    (s8) температура
*        (u8) Старший байт уровня
*        (u8) Младший байт уровня
*        (u8) Всегда 0
*        (u8) Всегда 0
*        (u8) Всегда 0
*        (u8) Всегда 0
*        (u8) Всегда 0
*        (u8) младший байт CRC16
*        (u8) Старший байт CRC16
 
s8 означает, что значение является знаковым целым, u8 - беззнаковое целое.
 
Пронумерованные адреса байтов ответа:
{| class="wikitable"
|Порядковый номер байта
|Порядковый номер байта начиная с 0
|Значение
|-
|1
|0
|Температура
|-
|2
|1
|Старший (первый) байт уровня
|-
|3
|2
|Младший (последний) байт уровня
|-
|4
|3
|Всегда 0
|-
|5
|4
|Всегда 0
|-
|6
|5
|Всегда 0
|-
|7
|6
|Всегда 0
|-
|8
|7
|Всегда 0
|}
Baudrate не изменяется.
 
'''19200, 8, n, 1'''
 
Количество бит в посылке 12х8 т.е около 96 шт
 
В запросе не важно какой указан сетевой номер, а также неважно количество запрашиваемых регистров. Главное, чтобы совпадала контрольная сумма. Расчет контрольной суммы приведен ниже.
 
= '''Пример опроса датчика ТД-500 в программе Terminal''' =
1 ответ (желтый) - ответ на запрос по протоколу LLS
 
2 ответ (красный) - ответ на запрос  по протоколу ModBUS RTU
 
Опрос ТД-500 в программе Terminal
 
'''$01$03$00$00$00$04$44$09''' Команда на опрос датчика по протоколу Modbus RTU (в красной рамке)
 
* 01 Сетевой адрес датчика
* 03 запрашиваемая команда на чтение регистров
* 00 00 регистр, начиная с которого запрашиваются данные
* 00 04 количество запрашиваемых регистров
* 44 09 контрольная сумма CRC-16 MODBUS
 
Если указать другой сетевой адрес, то нужно пересчитать контрольную сумму. Но менять сетевой адрес смысла нет, т.к. датчик будет отвечать на любой сетевой адрес.
 
== '''Расчет контрольной суммы''' ==
Для того, чтобы посчитать контрольную сумму, вы можете перейти на сайт '''<nowiki>https://crccalc.com</nowiki>''' и ввести ваш запрос '''без знака''' '''$''', выбрать '''HEX''', '''CRC-16 ModBUS''' и нажать Calc CRC-16
 
Расчет контрольной суммы на сайте '''[https://crccalc.com crccalc]'''
 
Полученной значение надо записать в отправляемую команду. При этом полученное при расчете значение 0C 44 следует записать в команду как 44 0C. Обратите внимание на раскладку вашей клавиатуры. Набирать команду следует латиницей.
 
= '''Ответ от датчика:''' =
'''01 03 08 14 04 67 00 00 00 00 00 D8 FF'''
 
* 01 - сетевой адрес
* 03 - команда, на которую датчик отвечает
* 08 - количество байтов в ответе
* 14 - температура HEX (20°C в DEC)
* 04 67 - байты уровня Big Endian HEX (в прямом порядке) (или 1127 единиц в DEC)
* 00 00 00 00 00 - резерв 5 байтов, не используется
* D8 FF - CRC-16 ModBUS контрольная сумма Little Endian HEX (Обратный порядок, т.е. FF D8)
1,060

edits