== Протокол обмена данными 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.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|| U,,220,, ||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) || || ||