В этом файле содержится описание протокола, используемого устройством. Он является подмножеством протокола MODBUS в режиме RTU. Аппаратный интерфейс - RS485. Скорость 9600 бод, 8 информационных бит, 1 стоповый бит, без проверки чётности. Задержка между двумя последовательными байтами больше длительности 1 байта считается началом нового пакета. Все 16 битные и 32 битные значения передаются старшим байтом вперёд. Поддерживаются команды: 2, 3, 6, 16, 43 ЗАПРОС AA CC DD ... DD SS SS AA - адрес (0-127), 0 - адрес для широковещательных команд CC - код команды DD ... DD - байты данных (количество и значение зависит от кода команды) SS SS - стандартный CRC16 протокола MODBUS чтобы проверить, что алгоритм рассчёта CRC реализован правильно, используйте пример: для набора байт(HEX) 81 03 00 CRC16 будет 21 18 а для набора байт 81 03 00 21 18 CRC16 будет 00 00 таким образом контроль CRC упрощается до простой проверки на 0 ОТВЕТ при наличии ошибки AA CC EE SS SS AA - сетевой адрес датчика CC - копия кода команды с установленным старшим битом EE - код ошибки SS SS - CRC16 коды ошибок 01 - ILLEGAL FUNCTION - если команда с указанным кодом не поддерживается датчиком 02 - ILLEGAL DATA ADDRESS - запрошен недопустимый номер регистра для чтения или для записи 03 - ILLEGAL DATA VALUE - передано недопустимое значение, например, запрос на запись адреса выходящего за пределы диапазона 0-127 04 - Failure In Associated Device ОТВЕТ при отсутствии ошибок AA CC DD ... DD SS SS AA - сетевой адрес датчика CC - копия кода команды из запроса DD ... DD - дополнительные данные в ответе(зависит от кода команды) SS SS - CRC16 КОДЫ КОМАНД команда 2 - чтение нескольких бинарных регистров(на данный момент только у бинарных датчиков эта команда испольуется и там есть только один бинарный регистр) поле данных содержит USHORT - номер стартового регистра откуда читать USHORT - количество запрашиваемых регистров (из-за ограничений протокола читать более 2000 регистров нельзя) поле данных ответа содержит BYTE количество дополнительных байтов в пакете = (<количество читаемых регистров> + 7)/8 ... содержимое читаемых регистров (младший адрес у младшего бита) команда 3 - чтение нескольких USHORT регистров поле данных содержит USHORT - номер стартового регистра откуда читать USHORT - количество читаемых регистров (из-за ограничений протокола читать более 125 регистров за одну команду нельзя) поле данных ответа содержит BYTE количество дополнительных байт в пакете (равно <количество читаемых регистров> * 2) ... содержимое читаемых регистров команда 6 - запись одиночного USHORT регистра используется для смены адреса, также можно использовать для записи калибровочной константы поле данных содержит USHORT - номер регистра для записи USHORT - значение регистра поле данных ответа содержит копию полученных данных: USHORT - номер регистра для записи USHORT - значение регистра команда 16 - запись нескольких последовательных USHORT регистров поддерживается только некоторыми датчиками USHORT - номер первого из записываемых регистров USHORT - количество записываемых регистров BYTE - количество байт для каждого из регистров (в текущей реализации тут может быть только 2) USHORT - значение для первого записываемого регистра ...значения для других записываемых регистров поле данных ответа содержит: USHORT - номер первого из записываемых регистров USHORT - количество записанных регистров команда 43 - индентификация типа устройства