Аппаратный интерфейс RS485 Скорость 9600 бод, 8 информационных бит, 1 стоповый бит, без проверки чётности. Если интервал между байтами больше длительности 1 байта, то считается что это новый пакет. Протокол связи - Modbus (Все USHORT значения передаются старшим байтом вперёд) ЗАПРОС AA CC DD ... DD SS SS AA - адрес (0-127), 0 - адрес для широковещательных команд CC - код команды, поддерживаются команды 2, 3, 6, 16, 43 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 - индентификация типа устройства