wiki:AdcProtocol

Version 17 (modified by alx, 6 years ago) ( diff )

--

Протокол обмена данными c UPS-1200

1. Формат пакета

|FLAG | ADDR | CMND | DATA | CSUM | FLAG |

  • Поле FLAG имеет размер 1 байт, предназначено для определения приемником границ пакета, значение поля фиксированное 0x7E. Флаги могут постоянно передаваться в сети между пакетами. Если сетевой элемент обнаруживает байт, не являющийся флагом, он тем самым уведомляется о начале пакета. При обнаружении следующего флага, элемент будет знать, что поступил полный пакет.
  • Поле ADDR имеет размер 1 байт, предназначено для передачи адресной информации и трактуется по-разному в зависимости от направления движения пакета. Для пакета исходящего от сетевого модуля ADDR=0. Для пакета исходящего из UPS-1200 ADDR=0x7F.
  • Поле CMND имеет размер 1 байт, предназначено для кодирования команд или ответов. Значения 0x00-0x7F кодируют команды, значения 0x80-0xFF - ответы. Кодировка поддерживаемых команд и ответов приведена ниже.
  • Поле DATA может быть размером 0-74 байт, содержимое зависит от значения поля CMND
  • Поле CSUM имеет размер 1 байт, предназначено для контроля полей ADDR, CMND и DATA. Вычисляется как ИСКЛЮЧАЮЩЕЕ ИЛИ всех байтов в контролируемых полях.

2. Кодирование

Для предотвращения ложного распознавания границ пакета, все передаваемые данные, кроме полей FLAG, должны подвергаться следующей процедуре:

  • если значение байта данных есть 0x7E, то он заменяется двумя байтами 0x7D и 0x5E;
  • если значение байта данных есть 0x7D, то он заменяется двумя байтами 0x7D и 0x5D.

Все размеры полей приведены без учета описанных выше замен. После распознавания пакета производится:

  1. обратная замена байтов. Если длина пакета после замены больше 77 байт, пакет не обрабатывается;
  2. проверка контрольной суммы пакета. Если контрольная сумма не совпадает, то пакет не обрабатывается;
  3. проверка поля адреса
  4. обработка команды, если адрес совпадает. Если код команды не известен UPS-1200, пакет не обрабатывается;
  5. посылается ответ.

Команды запроса состояния UPS-1200 посылаются периодически, поэтому единичная потеря ответа на эти команды допустима (произойдет задержка отображения состояния).

3. Команды

UPS-1200 поддерживает следующие команды:

Команды мониторинга(запрос на чтение данных)

  • CMND = 0x00 (ответ 0x80) - основная команда, в ответе передаются основные параметры ИБЭП. Формат команды: "7E 00 00 00 7E".
  • CMND = 0x01 (ответ 0x81) - опрос составных устройств ИБЭП. Формат команды: "7E 00 01 DATA CSUM 7E". В поле DATA команды передаётся 1 байт, в зависимости от значения которого команда имеет разное назначение и ответ:
    • DATA = 0 - Опрос параметров центральной платы RC-01
    • DATA = 1 - Опрос параметров АКБ (имеет смысл отправлять если к ИБЭП подключена АКБ, признак подключения передается в ответе на CMND=0)
    • DATA = 2,3,4,5 - Опрос параметров выпрямителя RC-48 установленного в слот 2,3,4 или 5 (имеет смысл отправлять только для тех слотов в которые установлены выпрямители, признак наличия выпрямителя в слоте передается в ответе на CMND=0)

4. Расшифровка ответов на команды

В зависимости от версии устройства длина ответа может быть разной, но максимальный размер поля DATA ограничен 74 байтами. Если в ответе устройства не хватает части переменных, значения этих переменных в базе заполняются нолями.

Ответ на команду CMND=0

№ байта OID Тип
0x7e (FlAG)
0 0x7F (ADDR)
2 0x80 (CMND)
3 0x7e Аппаратная версия устройства = расширенная
4 0x04 Аппаратная версия устройства = UPS-1200
5 бит 7 – Общая авария adc.10001.1.0int, ro
5 биты 6..0- Программная версия adc.10001.2.0int, ro
6 ...редактируется...
7 ...редактируется...
8 Расширенная программная версия(подверсия) adc.10001.3.0int, ro
... ...редактируется...
N-1 CSUM
N 0x7e (FlAG)
Note: See TracWiki for help on using the wiki.