Version 28 (modified by 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.
Все размеры полей приведены без учета описанных выше замен. После распознавания пакета производится:
- обратная замена байтов. Если длина пакета после замены больше 77 байт, пакет не обрабатывается;
- проверка контрольной суммы пакета. Если контрольная сумма не совпадает, то пакет не обрабатывается;
- проверка поля адреса
- обработка команды, если адрес совпадает. Если код команды не известен UPS-1200, пакет не обрабатывается;
- посылается ответ.
Команды запроса состояния 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)
Конфигурационные команды(чтение/запись параметров конфигурации в ПЗУ устройства)
- CMND = 0x07 (ответ 0x87) - чтение байта данных конфигурации. Формат команды: "7E 00 07 ADRLO ADRHI CSUM 7E". ADRLO - младший байт адреса байта, ADRHI - старший байт адреса. Ответ на команду "7E 7F 87 ADRLO ADRHI BYTE CSUM 7E", BYTE - прочитанный байт данных.
- CMND = 0x08 (ответ 0x88) - запись байта данных конфигурации. Формат команды: "7E 00 08 ADRLO ADRHI BYTE CSUM 7E", BYTE - записываемый байт данных. Ответ на команду "7E 7F 88 ADRLO ADRHI BYTE CSUM 7E", BYTE - записанный байт данных.
- CMND = 0x11 (ответ 0x91) - чтение 32 байта данных конфигурации. Формат команды: "7E 00 11 ADRLO ADRHI CSUM 7E", ADRLO - младший байт начального адреса, ADRHI - старший байт начального адреса. Ответ на команду "7E 7F 91 ADRLO ADRHI <BYTE32> СS CSUM 7E", BYTE - прочитанный байт данных, <BYTE32> - прочитанные 32 байта данных, CS- контрольная сумма для поля <BYTE32> (алгебраическая сумма всей байт по модулю $FF с переполнением).
- CMND = 0x12 (ответ 0x92) - запись 32 байта данных конфигурации. Формат команды: "7E 00 12 ADRLO ADRHI <BYTE32> CS CSUM 7E", <BYTE32> - записываемые 32 байта данных, CS- контрольная сумма для поля <BYTE32> (алгебраическая сумма всей байт по модулю $FF с переполнением). Ответ на команду "7E 7F 92 ADRLO ADRHI CS CSUM 7E", CS- контрольная сумма для записанных 32 байт(алгебраическая сумма всей байт по модулю $FF с переполнением).
Перезапуск
- CMND = 0x09 (ответа на команду нет) - перезапуск ИБЭП. Формат команды: "7E 00 09 AA BB CC CSUM 7E".
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.0 | int, ro | |
4 | биты 6..0- Программная версия | adc.10001.2.0 | int, ro | |
5 | бит 1 - Наличие RM-48 №1 | adc.10001.9.1.1.0 | int, ro | |
5 | бит 2 - Наличие RM-48 №2 | adc.10001.9.2.1.0 | int, ro | |
5 | бит 3 - Наличие RM-48 №3 | adc.10001.9.3.1.0 | int, ro | |
5 | бит 4 - Наличие RM-48 №4 | adc.10001.9.4.1.0 | int, ro | |
6 | пока не используем | |||
7 | Расширенная программная версия(подверсия) | adc.10001.3.0 | int, ro | |
8, 9 | Uнагрузки | adc.10001.4.1.0 | int, ro | *3 |
10, 11 | UАКБ | adc.10001.4.2.0 | int, ro | |
12, 13 | U220 | adc.10001.4.3.0 | int, ro | |
14, 15 | Iнагрузки | adc.10001.4.4.0 | int, ro | |
16, 17 | IАКБ | adc.10001.4.5.0 | int, ro | |
18, 19 | Pвыпрямителей | adc.10001.4.6.0 | int, ro | |
20, 21 | TАКБ | adc.10001.4.7.0 | int, ro | |
22 | бит 0 - Датчик 1 | adc.10001.5.1.0 | int, ro | |
22 | бит 1 - Датчик 2 | adc.10001.5.2.0 | int, ro | |
22 | бит 2 - Датчик 3 | adc.10001.5.3.0 | int, ro | |
22 | бит 3 - Датчик 4 | adc.10001.5.4.0 | int, ro | |
23 | пока не используем | |||
24 | бит 1 - Автомат 1 | adc.10001.6.1.0 | int, ro | |
24 | бит 2 - Автомат 2 | adc.10001.6.2.0 | int, ro | |
24 | бит 3 - Автомат 3 | adc.10001.6.3.0 | int, ro | |
24 | бит 4 - Автомат 4 | adc.10001.6.4.0 | int, ro | |
24 | бит 5 - Автомат 5 | adc.10001.6.5.0 | int, ro | |
24 | бит 6 - Автомат 6 | adc.10001.6.6.0 | int, ro | |
25 | пока не используем | |||
26 | бит 0 - Авария Потеря 220 | adc.10001.7.1.0 | int, ro | |
26 | бит 1 - Авария Отключение АКБ | adc.10001.7.2.0 | int, ro | |
26 | бит 2 - Авария Критический разряд | adc.10001.7.3.0 | int, ro | |
26 | бит 3 - Отключение неприоритетной нагрузки | adc.10001.7.4.0 | int, ro | |
26 | бит 4 - Авария RM-48 | adc.10001.7.5.0 | int, ro | |
26 | бит 5 - Не включен контактор АБ | adc.10001.7.6.0 | int, ro | |
26 | бит 6 - Не совпадает количество RM-48 | adc.10001.7.7.0 | int, ro | |
26 | бит 7 - Авария термодатчика | adc.10001.7.8.0 | int, ro | |
27 | бит 0 - Отключение АБ по напряжению | adc.10001.7.9.0 | int, ro | |
27 | бит 1 - Дисбаланс напряжения АБ | adc.10001.7.10.0 | int, ro | |
27 | бит 2 - Нет контроля АБ (отсутствие измерительного шнура) | adc.10001.7.11.0 | int, ro | |
28..34 | пока не используем | |||
35 | бит 7 - Разряд АКБ | adc.10001.4.8.0 | int, ro | |
N | CSUM | |||
0x7e (FlAG) |
Примечания
- 1. Значения, занимающие более одного байта передаются в ответе младшим байтом вперёд.
- 2. Битовые значения записываются в младший бит переменной SNMP.
- 3. Значение Uнагрузки полученное от UPS-1200 делится на 10 и округляется до целого.
Ответ на команду CMND=0x01, DATA=0x01 (Чтение параметров АКБ)
№ байта | OID | Тип | |
---|---|---|---|
0x7e (FlAG) | |||
0 | 0x7F (ADDR) | ||
1 | 0x81 (CMND) | ||
2 | 0x01 Ответ АКБ | ||
3 | UАБ1 | adc.10001.8.2.1.0 | int, ro |
4 | UАБ2 | adc.10001.8.2.2.0 | int, ro |
5 | UАБ3 | adc.10001.8.2.3.0 | int, ro |
6 | UАБ4 | adc.10001.8.2.4.0 | int, ro |
7 | UАБ5 | adc.10001.8.2.5.0 | int, ro |
8 | Статус батареи | adc.10001.8.3.0 | int, ro |
9..30 | пока не используем | ||
N | CSUM | ||
0x7e (FlAG) |