Нашёл хоть какое описание протокола из дистрибутива старой программы Multi485. Программа есть на сайте support.controlcompressors.com.
Для мониторинга без управления мне достаточно будет широковещательных пакетов с контроллера, которые отсылаются периодически и по изменению статуса.
Пример широковещательного пакета (контроллер S1 на столе без датчиков), 9600N1:
FF 01 FF 01 10 00 00 02 BB 33 C0
FF - не знаю для чего. Может стартовый байт для протокола.
01 - адрес
FF - маркер широковещательного пакета
01 - status byte 1
10 - status byte 2
00 00 - давление
02 BB - температура
33 - первый байт контрольной суммы. Сумма предыдущих байтов включая этот должна быть 0.
C0 - второй байт контрольной суммы.
Описание второго байта контрольной суммы немного кривое. Пришлось помучаться, вот рабочий вариант алгоритма:
Код
def firstbyte(data):
return 0xFF-(sum(data)&0xFF)+1
def secondbyte(data):
crc = 0
for x in data[:-1]:
crc = (x + crc )&0xFF
crc = (crc<<1 | crc >>7)&0xFF
crc = (crc+data[-1])&0xFF
return crc
Шлюз нужен чтобы не занимать 485 периодическими запросами и для уменьшения задержек при управлении группой.