Описание протокола работы с преобразователями влажности и температуры ДВ2ТС-А.

Протокол основывается на стандартном протоколе MODBUS, соблюдается структура посылки/ответа, расчёт контрольной суммы. Скорость обмена данными 19200 бод 8N1(2).

Для обмена данными используются команды чтение/запись регистра и запуск преобразования.

Под регистром подразумевается группа из двух байт, 1-й-старшие 8 бит, 2-й – младшие 8 бит. Посылка и ответ состоят из 6-ти, 8-ми или более байт, причём пауза между байтами не должна превышать 20 мс, в противном случае посылка будет проигнорирована. Обмен данными происходит только с тем преобразователем, чей сетевой адрес указывается в посылке. Также определена команда записи на все преобразователи, без получения ответа.

Команда запуска преобразования (08h)

Команда служит для запуска преобразования влажности и температуры в цифровой код. После подачи этой команды, перед считыванием значений, необходимо выдержать 2 (две) секунды. В качестве примера дана команда запуска преобразования для всех преобразователей, подключенных к сети:

ПОСЫЛКА: номер преобразователя
идентификатор команды
номер функции, старший байт
номер функции, младший байт
номер подфункции, старший байт
номер подфункции, младший байт
контрольная сумма, младший байт
контрольная сумма, старший байт
00h
08h
00h
20h
00h
01h
crc_lo
crc_hi
Команда чтения одного регистра (19h)

Читает содержимое регистра по указанному адресу. В качестве примера дано чтение регистра влажности по адресу 200h из преобразователя с сетевым номером 01h, содержимое регистра в старшем байте - 09h, в младшем байте - F6h соответствует 25,5%:

ПОСЫЛКА: номер преобразователя
идентификатор команды
адрес регистра, старший байт
адрес регистра, младший байт
контрольная сумма, младший байт
контрольная сумма, старший байт
01h
19h
02h
00h
crc_lo
crc_hi
ОТВЕТ: номер преобразователя
идентификатор команды
содержимое регистра, старший байт
содержимое регистра, младший байт
контрольная сумма, младший байт
контрольная сумма, старший байт
01h
19h
09h
F5h
crc_lo
crc_hi
Команда записи регистра (06h)

Записывает содержимое регистра по у казанному адресу. В качестве примера дана запись в регистр числа 1234h (старший байт=12h, младший байт=34h) в преобразователь с сетевым номером 04h по адресу 200h:

ПОСЫЛКА: номер преобразователя
идентификатор команды
адрес регистра, старший байт
адрес регистра, младший байт
содержимое регистра, старший байт
содержимое регистра, младший байт
контрольная сумма, младший байт
контрольная сумма, старший байт
04h
06h
02h
00h
12h
34h
crc_lo
crc_hi
ОТВЕТ: идентичен посылке
номер преобразователя
идентификатор команды
адрес регистра, старший байт
адрес регистра, младший байт
содержимое регистра, старший байт
содержимое регистра, младший байт
контрольная сумма, младший байт
контрольная сумма, старший байт
04h
06h
02h
00h
12h
34h
crc_lo
crc_hi
Запись регистра по широковещательному адресу (06h@00h)

Команда предназначена для записи содержимого регистра по указанному адресу во все преобразователи, используя для этого "широковещательный" адрес "0". В качестве примера дана запись в регистр числа 1234h (старший байт=12h, младший байт=34h) во все преобразователи по адресу 200h:

ПОСЫЛКА: номер преобразователя
идентификатор команды
адрес регистра, старший байт
адрес регистра, младший байт
содержимое регистра, старший байт
содержимое регистра, младший байт
контрольная сумма, младший байт
контрольная сумма, старший байт
00h
06h
02h
00h
12h
34h
crc_lo
crc_hi
ОТВЕТ: не производится.

При необходимости можно изменить сетевой номер преобразователя. Для этого нужно оставить в сети только этот преобразователь, убрав все остальные и записать новый сетевой адрес, используя для этого "широковещательный" адрес "0". В качестве примера дана запись адреса 05h в преобразователь по адресу 1000h:

ПОСЫЛКА: номер преобразователя
идентификатор команды
адрес регистра, старший байт
адрес регистра, младший байт
содержимое регистра, старший байт
содержимое регистра, младший байт
контрольная сумма, младший байт
контрольная сумма, старший байт
00h
06h
10h
00h
00h
05h
crc_lo
crc_hi
ОТВЕТ: преобразователем не производится.
Команда чтения группы регистров (03h, 04h)

Читает содержимое группы регистров, начиная с указанного адреса. Адресация ведется с единицы. В качестве примера дано одновременное чтение регистров влажности и температуры, расположенных по адресу 01h и 02h из преобразователя с сетевым номером 01h:

ПОСЫЛКА: номер преобразователя
идентификатор команды
адрес регистра, старший байт
адрес регистра, младший байт
число считываемых регистров ст.
число считываемых регистров мл.
контрольная сумма, младший байт
контрольная сумма, старший байт
01h
03h (или 04h)
00h
01h
00h
02h
crc_lo
crc_hi
ОТВЕТ: номер преобразователя
идентификатор команды
число считанных байт
данные (RH), старший байт
данные (RH), младший байт
данные (T), старший байт
данные (T), младший байт
контрольная сумма, младший байт
контрольная сумма, старший байт
01h
03h (bkb 04h)
04
X1
X2
X3
X4
crc_lo
crc_hi
Расчёт значений, считываемых с преобразователя

Значение относительной влажности в процентах, считанное из регистра с адресом 200h, вычисляется следующим образом:

RH = 0,01•(256•HIGH_BYTE + LOW_BYTE)

Значение температуры в градусах Цельсия, считанное из регистра с адресом 202h, вычисляется следующим образом:

Т = 0,01•(256•HIGH_BYTE + LOW_BYTE)

Обратите внимание, что значение температуры может быть отрицательным, используйте знаковое представление числа!

Адреса ячеек преобразователя ДВ2TС-А (для команды 19h)
200h
202h
204h
1000h
- значение относительной влажности по воде
- значение температуры
- значение относительной влажности по льду
- сетевой адрес преобразователя (в диапазоне 01h...F7h)
Адреса ячеек преобразователя ДВ2TС-А (для команд 03h, 04h)
01h
02h
03h
- значение относительной влажности по воде
- значение температуры
- значение относительной влажности по льду