wiki:AdcProtocol

Version 25 (modified by san, 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 - Опрос параметров АКБ.
    • DATA = 2,3,4,5 - Опрос параметров выпрямителя RC-48 установленного в слот 2,3,4 или 5 (имеет смысл отправлять только для тех слотов в которые установлены выпрямители, признак наличия выпрямителя в слоте передается в ответе на CMND=0)

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

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

  • Значения, занимающие более одного байта передаются в ответе младшим байтом вперёд.

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

№ байта OID Тип
0x7e (FlAG)
0 0x7F (ADDR)
1 0x80 (CMND)
2 0x7e Аппаратная версия устройства = расширенная
3 0x04 Аппаратная версия устройства = UPS-1200
4 бит 7 – Общая авария adc.10001.1.0int, ro
4 биты 6..0- Программная версия adc.10001.2.0int, ro
5 ...редактируется...
6 пока не используем
7 Расширенная программная версия(подверсия) adc.10001.3.0int, ro
8, 9 Uнагрузки adc.10001.4.1.0int, ro
10, 11 UАКБ adc.10001.4.2.0int, ro
12, 13 U220 adc.10001.4.3.0int, ro
14, 15 Iнагрузки adc.10001.4.4.0int, ro
16, 17 IАКБ adc.10001.4.5.0int, ro
18, 19 Pвыпрямителей adc.10001.4.6.0int, ro
20, 21 TАКБ adc.10001.4.7.0int, ro
22 бит 0 - Датчик 1 adc.10001.5.1.0int, ro
22 бит 1 - Датчик 2 adc.10001.5.2.0int, ro
22 бит 2 - Датчик 3 adc.10001.5.3.0int, ro
22 бит 3 - Датчик 4 adc.10001.5.4.0int, ro
23 пока не используем
24 бит 1 - Автомат 1 adc.10001.6.1.0int, ro
24 бит 2 - Автомат 2 adc.10001.6.2.0int, ro
24 бит 3 - Автомат 3 adc.10001.6.3.0int, ro
24 бит 4 - Автомат 4 adc.10001.6.4.0int, ro
24 бит 5 - Автомат 5 adc.10001.6.5.0int, ro
24 бит 6 - Автомат 6 adc.10001.6.6.0int, ro
25 пока не используем
26 бит 0 - Авария Потеря 220 adc.10001.7.1.0int, ro
26 бит 1 - Авария Отключение АКБ adc.10001.7.2.0int, ro
26 бит 2 - Авария Критический разряд adc.10001.7.3.0int, ro
26 бит 3 - Отключение неприоритетной нагрузки adc.10001.7.4.0int, ro
26 бит 4 - Авария RM-48 adc.10001.7.5.0int, ro
26 бит 5 - Не включен контактор АБ adc.10001.7.6.0int, ro
26 бит 6 - Не совпадает количество RM-48 adc.10001.7.7.0int, ro
26 бит 7 - Авария термодатчика adc.10001.7.8.0int, ro
27 бит 0 - Отключение АБ по напряжению adc.10001.7.9.0int, ro
27 бит 1 - Дисбаланс напряжения АБ adc.10001.7.10.0int, ro
27 бит 2 - Нет контроля АБ (отсутствие измерительного шнура) adc.10001.7.11.0int, ro
28..34 пока не используем
35 бит 7 - Разряд АКБ adc.10001.4.8.0int, ro
N CSUM
0x7e (FlAG)

Ответ на команду CMND=0x01, DATA=0x01 (Чтение параметров АКБ)

№ байта OID Тип
0x7e (FlAG)
0 0x7F (ADDR)
1 0x81 (CMND)
2 0x01 Ответ АКБ
3 UАБ1 adc.10001.8.2.1.0int, ro
4 UАБ2 adc.10001.8.2.2.0int, ro
5 UАБ3 adc.10001.8.2.3.0int, ro
6 UАБ4 adc.10001.8.2.4.0int, ro
7 UАБ5 adc.10001.8.2.5.0int, ro
8 Статус батареи adc.10001.8.3.0int, ro
9..30 пока не используем
N CSUM
0x7e (FlAG)
Note: See TracWiki for help on using the wiki.