wiki:AdcProtocol

Version 2 (modified by san, 5 years ago) ( diff )

--

Протокол обмена данными 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 посылаются периодически, поэтому единичная потеря ответа на эти команды допустима (произойдет задержка отображения состояния).

Note: See TracWiki for help on using the wiki.