== Протокол обмена данными c UPS-1200 == === 1. Формат пакета === |FLAG | ADDR | CMND | DATA | CSUM | FLAG | Рис 1. - Поле FLAG имеет размер 1 байт, предназначено для определения приемником границ пакета, значение поля фиксированное $7E. Флаги могут постоянно передаваться в сети между пакетами. Если сетевой элемент обнаруживает байт, не являющийся флагом, он тем самым уведомляется о начале пакета. При обнаружении следующего флага, элемент будет знать, что поступил полный пакет. - Поле ADDR имеет размер 1 байт, предназначено для передачи адресной информации и трактуется по-разному в зависимости от направления движения пакета. Для пакета исходящего от сетевого модуля ADDR=0. Для пакета исходящего из UPS-1200 ADDR=0x7F. - Поле CMND имеет размер 1 байт, предназначено для кодирования команд или ответов. Значения $00-$7F кодируют команды, значения $80-$FF - ответы. Кодировка команд и ответов приведена ниже. - Поле DATA может быть размером 0-74 байт, содержимое зависит от значения поля CMND (см. п. 5). - Поле CSUM имеет размер 1 байт, предназначено для контроля полей ADDR, CMND и DATA. Вычисляется как ИСКЛЮЧАЮЩЕЕ ИЛИ всех байтов в контролируемых полях. === 2. Кодирование === Для предотвращения ложного распознавания границ пакета, все передаваемые данные, кроме полей FLAG, должны подвергаться следующей процедуре: - если значение байта данных есть $7E, то он заменяется двумя байтами $7D и $5E; - если значение байта данных есть $7D, то он заменяется двумя байтами $7D и $5D. Все размеры полей приведены без учета описанных выше замен. После распознавания пакета производится: 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 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)