платформы нижнего уровня

Платформа UPB: описание протокола

 

1. ВВОДНЫЕ ЗАМЕЧАНИЯ

Данное описание составлено на основе официального документа фирмы-разработчика платформы PCS Inc. UPB Technology Description и касается канального и более высоких уровней протокола информационного обмена. Описание физического уровня, включающее описание информационных сигналов и способа модуляции, а также начальные сведения по формату коммуникационных сообщений были даны в головной статье Платформа UPB: общий обзор. Описываемый протокол является последней версией 1.4, опубликованной в 2007 г.

 

2. КОММУНИКАЦИОННЫЙ ПАКЕТ.

Как уже было показано в общем обзоре при описании архитектуры платформы UPB, коммуникационный UPB-пакет начинается с байта синхронизации (т.н. преамбулы). Далее располагается заголовок, содержащий управляющее слово (CTL), адрес сети (NID), адрес назначения (DID) и адрес источника (SID). За ним следует UPB-сообщение, включающее идентификатор (MDID) и аргумент (MDA). Замыкает пакет байт контрольной суммы. В конце пакета в диаграмме обмена зарезервирована одна позиция для импульса подтверждения приема пакета адресатом.

формат коммуникационного UPB-пакета

Рис.1 Формат коммуникационного UPB-пакета

 

Внимание! В оригинальном описании протокола отсутствуют какие-либо сведения о том, как логически объединяются присваиваемые информационным импульсам значения в общий байт и какова очередность передачи разрядов байта - начиная с младших разрядов, т.е. аналогично передаче байтов в пакете, или же начиная со старших, т.е. аналогично представлению структуры байта как стандартного двоичного слова.

 

Байт синхронизации не требует пояснений. Остальные составляющие рассмотрим более подробно в следующих разделах.

 

3. УПРАВЛЯЮЩЕЕ СЛОВО

формат управляющего слова UPB-пакета

Рис.2 Формат управляющего слова UPB-пакета

 

Длина управляющего слова равна 16 бит (2 байта) и оно содержит 7 полей, в т.ч.:

SEQ - порядковый номер пакета. Показывает, который раз передается данный пакет. 00 означает первый раз, 01 - второй, 10 - третий и 11 - четвертый. Повторная передача пакета предусмотрена для повышения надежности доставки сообщений.

CNT - заданное число пакетов. Устанавливает, сколько раз должен передаваться пакет. 00 означает 1, 01 - 2, 10 - 3 и 11 - 4.

ACKRQ - запрос подтверждения приема. Определяет, каким способом приемник должен подтверждать получение пакета, в т.ч. «1» в разряде 4 (ACK-bit) означает использование импульса подтверждения ACK Pulse, «1» в разряде 5 (ID-bit) - импульса подтверждения ID Pulse, «1» в разряде 6 (MSG-bit) - сообщения подтверждения Acknowledge Message. Могут использоваться как любой один из данных способов, так и их комбинации, а также не использоваться ни один. Более подробно данные способы будут рассмотрены ниже.

LEN - длина пакета в байтах без учета байта синхронизации. Длина корректного пакета лежит в пределах от 6 до 24 байт. Если значение поля LEN выходит за пределы указанного диапазона, пакет получателем игнорируется.

REPRQ - запрос ретрансляции пакета. Определяет, должен ли пакет ретранслироваться репитерами и сколько раз. 00 означает запрет ретрансляции, 01 - Low Level (низкий уровень - 1 ретрансляция), 10 - Medium Level (средний уровень - 2 ретрансляции) и 11 - Hight Level (высокий уровень - 4 ретрансляции).

LINK - линк-пакет. «0» в данном разряде означает, что пакет является прямым, т.е. адресуется UPB-устройству, а «1» - что пакет явлется линк-пакетом, т.е. адресуется компонентам UPB-устройства. Более подробно о линк-пакетах будет сказано ниже.

Бит #7 в данной версии протокола не используется (зарезервирован для последующих версий).

 

4. АДРЕСАЦИЯ ПАКЕТОВ

Пакет имеет три адресных поля, по одному байту каждое, в т.ч.:

 

NID (Network ID) - адрес UPB-сети. Позволяет создавать в одной силовой сети до 255 виртуальных UPB-сетей. В одну виртуальную сеть объединяются все устройства, имеющие одинаковые сетевые адреса NID (см. архитектру сетап-регистров UPB-устройств). Адрес 0x00 называется адресом глобальной сети Global Network ID и предназначен для одновременной адресации пакета всем устройствам независимо от их сетевого адреса.

 

 

DID (Destination ID) - адрес назначения. Как было сказано выше, в зависимости от значения поля LINK управляющего слова пакет может быть прямым или линк - пакетом. Прямой пакет (LINK=0) адресуется UPB-устройствам в соответствии со следущей схемой:

  • 000 / Broadcast DID - широковещательный адрес, т.е. адрес, предназначенный для одновременной адресации пакета всем устройствам виртуальной сети;
  • 001 ÷ 250 - адреса для индивидуальной адресации пакета UPB-устройствам по их UID, записанным в их UPB-идентификаторах;
  • 251, 252 - не используются (зарезервированы для новых версий протокола);
  • 253 / Write Enable DID - адрес с разрешенной записью, используемый при передаче незащищенных пакетов (Unprotected Packets), предназначенных для одновременной адресации всем устройствам, у которых командой Write Enable разрешена запись в регистры сетапа.
  • 254 / Setup Mode DID - адрес режима сетапа, предназначенный для одновременной адресации пакета всем устройствам, находящися в режиме сетапа;
  • 255 / Default DID - адрес UID по умолчанию, записываемый в UPB-устройство в состоянии поставки до его конфигурирования.

При обнаружение прямого пакета каждое UPB-устройство адресуемой виртуальной сети проводит анализ значения DID с принятием решения об акцепте пакета (т.е. о принятии к исполнению) или его игнорировании в соответствии с диаграммой рис.3

прием UPB-устройством прямого пакета

Рис.3 Прием UPB-устройством прямого пакета

 

Линк - пакеты используются для группового взаимодействия объектов при реализации сценариев. В качестве таких объектов выступают компоненты UPB-устройств, связанные с определенной функцией - кнопки, индикаторы, диммеры, коммутирующие элементы и пр. Всем объектам сценария, как приемникам, так и передатчикам, назначают командой Add Link одинаковые линк-адреса Link ID. Диаграмма приема линк-пакета UPB-устройством приведена на рис.4

прием UPB-устройством линк-пакета

Рис.4 Прием UPB-устройством линк-пакета

 

В соответствии с диаграммой производится последовательный выбор из таблицы сетапа имеющихся линк-адресов и сравнение их с адресом назначения, при этом линк-адреса 000 и 251-255 считаются невалидными. При совпадении адреса назначения с валидным линк - адресом производится акцепт пакета.

 

SID (Source ID) - адрес источника. В этом поле передающее UPB-устройство помещает свой UID, который необходим для отправки приемником пакета подтверждения.

 

5. UPB-СООБЩЕНИЕ

UPB-сообщение является контейнером коммуникационного пакета, содержащим команды или рапорты, передаваемые от одного UPB-устройства другому UPB-устройству. Оно имеет два поля - идентификатор сообщения MDID и аргумент сообщения MDAD.

формат идентификатора UPB-сообщения

Рис.4 Формат идентификатора UPB-сообщения

 

Идентификатор MDID занимает один байт и содержит два поля (см. рис.5), в т.ч.:

MSID (Message Set ID) - идентификатор группы, к которой принадлежит сообщение, в соответствии со следующими кодами:

  • 000 - группа команд ядра UPB;
  • 001 - группа команд управления устройствами;
  • 010 - резервная группа команд #1
  • 011 - резервная группа команд #2
  • 100 - группа рапортов ядра UPB;
  • 101 - резервная группа рапортов #1
  • 110 - резервная группа рапортов #2
  • 111 - группа расширенных сообщений

MID (Message ID) / ESID (Extended Set ID) - идентификатор сообщения (для всех групп, кроме группы 111) или идентификатор группы расширенного сообщения (для группы 111). MID является стандартизованным кодом команды или рапорта в соответствующей группе, а ESID является дополнительным набором команд и рапортов, которые может вводить разработчик UPB-устройств для своих линеек по согласованию с генеральным разработчиком платформы UPB. Описание стандартизованных команд и рапортов будет приведено ниже.

Аргумент сообщения может иметь размер от 0 (т.е. отсутствовать) до 17 байт. Он содержит параметры команды или данные рапорта.

 

6. КОМАНДЫ И РАПОРТЫ

Команды ядра UPB

0x00 - Null
Пустая команда. Может использоваться, например, для проверки наличия квитирующего импульса или сообщения от устройства с заданным адресом.
 
0x01 - Write Enable
Снимает блокировку записи в регистры сетапа устройства. Сопровождается паролем в аргументе.
 
0x02 - Write Protect
Включает блокировку записи в регистры сетапа устройства.
 
0x03 - Start Setup Mode
Переводит устройство в режим сетапа на время 5 минут. Сопровождается паролем в аргументе, где также могут быть указаны дополнительные реквизиты для выбора группы устройств - код изготовителя и код изделия.
 
0x04 - Stop Setup Mode
Выводит устройство из режима сетапа и включает блокировку записи в его регистры.
 
0x05 - Get Setup Time
Запрашивает у устройства время, оставшееся до его автоматического выхода из режима сетапа. На данную команду устройство отвечает рапортом с кодом 0x85.
 
0x06 - Auto-address
Изменяет адрес UID устройства, находящегося в режиме сетапа, на случайный выбранный из диапазона разрешенных адресов.
 
0x07 - Get Device Status
Запрашивает данные из 8-ми битного регистра статуса устройства. На данную команду устройство отвечает рапортом с кодом 0x87.
 
0x08 - Set Device Control
Записывает в 8-ми битный регистр управления устройства значение аргумента.
 
0x09 - 0x0A
Не используются.
 
0x0B - Add Link
Изменяет значение 0xFF LinkID первого незадействованного линк-компонента устройства, находящегося в режиме сетапа, на значение аргумента. При отсутствии в устройстве незадействованных линк-компонентов пакет игнорируется.
 
0x0C - Delete Link
Удаляет из устройства, находящегося в режиме сетапа, LinkID, указанный в аргументе,
 
0x0D - Tramsmit This Message
Предписывает устройству передать сообщение, указанное в аргументе. Данная команда предназначена для тестирования взаимодействия UPB-устройств.
 
0x0E - Device Reset
Инициирует ресет (перезагрузку) устройства. Сопровождается паролем в аргументе.
 
0x0F - Get Device Signature
Запрашивает у устройства сигнатуру. На данную команду устройство отвечает рапортом с кодом 0x8F.
 
0x10 - Get Register Values
Запрашивает у устройства значения регистров сетапа в диапазоне адресов, указанном в аргументе. На данную команду устройство отвечает рапортом с кодом 0x90.
 
0x11 - Set register Values
Записывает заданные значения в блок из 16-ти регистров сетапа устройства, у которого снята блокировка записи. Адрес первого регистра блока и значения, записываемые в регистры, указываются в аргументе.
 

Команды управления устройствами

0x20 - Activate Link
Активирует линк-компоненты устройства, переводя их из исходного состояния в состояние с параметрами, указанными для линк-адреса в регистрах сетапа.
 
0x21 - Deactivate Link
Деактивирует линк-компоненты устройства, возвращая их из активированного в исходное состояние с параметрами, указанными для линк-адреса в регистрах сетапа.
 
0x22 - GoTo
Переводит устройство, его канал или группу линк-компонентов в состояние с заданным уровнем с заданной скоростью. Заданный уровень, скорость и, при необходимости, канал указываются в аргументе.
 
0x23 - Fade Start
Запускает процесс диммирования в направлении заданного уровня с заданной скоростью, указанными в аргументе.
 
0x24 - Fade Stop
Останавливает процесс диммирования, запущенный командой Fade Start, с фиксацией параметров диммера в момент остановки.
 
0x25 - Blink
Включает режим «мигания» с заданным периодом, указанным в аргументе.
 
0x26 - Indicate
Переводит индикатор в заданное состояние (или выводит на него заданное значение) с заданной скоростью в соответствии с аргументом.
 
0x27 - Toggle
Переводит устройство из одного крайнего положения в другое заданное количество раз с заданной скоростью в соответствии с аргументом.
 
0x28 - 0x2F
Не используются.
 
0x030 - Report State Information
Запрашивает у устройства рапорт о его текущем состоянии. На данную команду устройство отвечает рапортом с кодом 0x86.
 
0x31 - Store State
Инициирует сохранение текущего состояния линк-компонентов.
 
0x32 - 0x3F
Не используются.
 

Рапорты ядра UPB

0x80 - Acknowledgment Response
Подтверждение приема коммуникационного пакета с установленным в 1 битом MSG-bit поля REPRQ слова управления. Не содержит аргумента.
 
0x81 - 0x84
Не используются
 
0x85 - Setup Time
Время, оставшееся до автоматического выхода устройства из режима сетапа. Является ответом на команду ядра с кодом 0x05 (Get Setup Time). Содержит в поле аргумента два байта 16-ти битного кода времени.
 
0x86 - Device State
Состояние устройства. Является ответом на команду управления с кодом 0x30 (Report State). Содержит в поле аргумента информацию (до 17 байт) о состоянии устройства.
 
0x87 - Device Status
Статус устройства. Является ответом на команду ядра с кодом 0x07 (Get Device Status). Содержит в поле аргумента адрес регистра статуса и его значение.
 
0x88 - 0x8E
Не используются
 
0x8F - Device Signature
Сигнатура устройства. Является ответом на команду ядра с кодом 0x0F (Get Device Signature). Содержит в поле аргумента следующую информацию (побайтно):
- PRH/PRL - старший и младший байты случайного 16-битного числа;
- SS (Signal Strength) - уровень сигнала при приеме команды запроса сигнатуры;
- NL (Noise Level - 0-5) - уровень шумов при приеме команды запроса сигнатуры;
- CS1H/CS1L - старший и младший байты контрольной суммы регистров UPBID;
- CS2H/CS2L - старший и младший байты контрольной суммы всех регистров сетапа;
- NSR - число всех регистров сетапа;
- DL1 - DL8 - 8 байт, зарезервированных для диагностической информации.
 
0x90 - Register Values
Значения регистров. Является ответом на команду ядра с кодом 0x10 (Get Register Values). Содержит в поле аргумента адрес первого регистра блока из 16 регистров и их значения.
 
0x91 - RAM Values
Значения RAM-регистров. Содержит в поле аргумента адрес первого регистра блока из 16 регистров и их значения. Команда для запроса данного рапорта не предусмотрена.
 
0x92 - Raw Data
Информация об ошибках. Содержит в поле аргумента до 16 байт. Команда для запроса данного рапорта не предусмотрена.
 
0x93 - Heartbeat
«Пульс» устройства, используемый для информирования об исправности устройства. Не содержит аргумента. Команда для запроса данного рапорта не предусмотрена.

 

 

 

 

7. КВИТИРОВАНИЕ ОБМЕНА

Устройство, получившее пакет, в соответствии со значением поля ACKRQ управляющего слова подтверждает его прием квитанцией, в качестве которой может выступать импульс ACK Pulse, импульс ID Pulse или сообщение Acknowledge Message. Рассмотрим подробнее.

Импульс ACK Pulse - одиночный импульс, генерируемый получателем пакета в в позиции 3 фрейма, следующего сразу за последним фреймом пакета. Импульс несет информацию только о том, что пакет принят его получателем. Запрашивается установленным в 1 битом ACK-bit поля REPRQ слова управления.

Импульс ID Pulse - одиночный импульс генерируемый, получателем пакета в позиции 3 фрейма, следующего за последним фреймом пакета в полупериоде с порядковым номером, равном, в зависимости от сетевого адреса пакета, индивидуальному (UID) или сетевому (SID) адресу его получателя. Т.о., задержка импульса ID Pulse несет информацию об UID или SID устройства, что используется при сканировании адресов устройств, находящихся в сети (см. ниже). Запрашивается установленным в 1 битом ID-bit поля REPRQ слова управления.

Сообщение Acknowledge Message - пакет, содержащий в поле UPB-сообщения рапорт с кодом 0x80 (Acknowledgment Response), направляемый получателем пакета его источнику для подтверждения приема. Введено, начиная с версии 1.2 протокола. Запрашивается установленным в 1 битом MSG-bit поля REPRQ слова управления.

 

8. СКАНИРОВАНИЕ СЕТИ

Сканирование (или нумерация - Enumeration) UPB-сети производится для определения всех занятых сетевых (NID) и индивидуальных (UID) адресов устройств и осуществляется двумя методами - с использованием импульсов ID Pulse и с использованием импульсов ACK Pulse.

При использовании импульсов ID Pulse для сканирования виртуальной сети сканирующее устройство посылает широковещательный пакет (DID=000) с адресом SID сканируемой сети и установленным в 1 битом ID-bit поля ACKRQ управляющего слова, после чего в течение 256 полупериодов регистрирует появление импульсов ID Pulse и по их месту в последовательности прослушиваемых фреймов определяет адреса их источников.

При сканировании данным методом занятых сетевых адресов сканирующее устройство посылает аналогичный пакет, но с адресом глобальной сети (SID=000), после чего так же в течение 256 полупериодов регистрирует появление импульсов ID Pulse и по их месту определяет сетевые адреса NID устройств, которые их отправили.

 

Примечание 1. В фирменном описании протокола не оговорено, с какого адреса начинается нумерация фреймов, в которых располагаются импульсы ID Pulse - с нулевого или с первого. Исходя из того, что сканирующее устройство, как сказано в описании, должно оcуществлять прослушивание в течение 256 полупериодов, нумерация должна начинаться с начального адреса, т.е. нулевого. В то же время нулевой адрес является широковещательным и не является разрешенным ни для UID-адресов устройств, ни для их SID-адресов. Также не разрешены для UID адреса с 251 по 255, хотя диапазон прослушивания под них зарезервирован. Какие либо разъяснения на этот счет в фирменном описании протокола отсутствуют.

Примечание 2. При сканировании сетевых адресов с использованием ID Pulse, очевидно, будет иметь место наложение импульсов, генерируемых устройствами, находящимися в одной виртуальной сети. Также возможно наложение импульсов при сканировании виртуальной сети, если в ней имеются устройства с одинаковыми UID. Последствия таких ситуаций на физическом уровне (встречная работа передатчиков, недопустимое увеличение амплитуды или ширины импульсов и пр.) в фирменном описании протокола не рассматриваются.

 

При использовании импульсов ACK Pulse сканирующее устройство последовательно отправляет индивидуальные пакеты с установленным в 1 битом ACK-bit по очереди по всем адресам виртуальной сети (или широковещательные пакеты по всем сетевым адресам) и определяет их занятость по наличию ответного импульса ACK Pulse. Однако такой метод требует значительно больше времени на сканирование, что и явилось причиной появления с версии 1.2 метода на основе импульсов ID Pulse.

 

9. РЕТРАНСЛЯЦИЯ ПАКЕТОВ

Потребность в ретрансляции пакетов возникает, в первую очередь, в трехфазных сетях, что обусловлено необходимостью синхронизации фреймов с фазой сетевого напряжения. Кроме того, ретрансляция может потребоваться в сетях большой протяженности. Протокол предусматривает управление режимом ретрансляции через поле REPRQ (Repeater Request - запрос ретрансляции) управляющего слова пакета, которым устанавливается 4 уровня режима ретрансляции, т.е. число допустимых повторений пакета ретрансляторами (см. описание управляющего слова). Пакет, подлежащий ретрансляции, принимается только ретрансляторами, обычные UPB-устройства должны его игнорировать. Для того, чтобы ретранслированный пакет был принят UPB-устройствами, ретранслятор должен обнулить в нем поле REPRQ.

 

Примечание. Что понимать под числом ретрансляций, определяемых полем REPRQ - число пакетов на выходе одного ретранслятора или число последовательно проходимых ретрансляторов, в фирменном описании протокола не поясняется. В связи с этим возможны различные толкования понятия «уровень ретрансляции»

 

10. РЕЖИМ СЕТАПА

Состав блока регистров сетапа UPB-устройств был рассмотрен в разделе архитектура устройств головной статьи. В данном разделе будут рассмотрены процедуры доступа к данным регистрам для модификации их содержимого.

В исходном состоянии доступ к регистрам сетапа в режиме записи заблокирован. Для разрешения записи, что требуется для конфигурирования и при выполнении некоторых команд, устройство должно быть переведно в режим сетапа командой Start Setup Mode, сопровождаемой паролем. Однако доступ к чтению пароля, который записан в блоке UPBID регистров сетапа, в свою очередь тоже возможен только в режиме сетапа, что сделано для дополнительной защиты от несанкционированного доступа. Для разрешения данной «патовой» ситуации предусмотрена возможность перевода устройства в режим сетапа вручную с помощью специальных манипуляций органами управления, которая может быть индивидуальна для каждого типа устройств. Полученный таким образом пароль далее может быть использован уже при переводе устройства в режим сетапа командой по сети. Находящееся в режиме сетапа устройство получает на время сеанса специальный адрес (UID) 254 для записи данных в регистры сетапа.

Доступ к регистрам сетапа в режиме записи может быть также активирован командой снятия блокировки записи Write Enable, при этом устройство получает для записи данных специальный адрес (UID) 253. Данный режим используется для записи информации в регистры сетапа командой Set Register Values.

 

11. ЛИНК-КОМПОНЕНТЫ И СЦЕНАРИИ

Описанная выше адресация с использованием линк-адресов LinkID позволяет одним передатчиком управлять сразу целой группой устройств, устанавливая при этом заранее заданные значения выходных параметров каждого из них при отработке команд активации и деактивации. В этом смысле, например, один диммер, активированный через линк-адрес, может подать на нагрузку 50% мощности, а деактивированный - 30%, другой же диммер - 20% и 80% соответственно. Заданные значения выходных параметров прописываются в регистрах, ассоциированных с регистрами линк-адресов компонентов.

 

Примечание. Описание регистров и структуры записей, используемых для задания параметров активных и неактивных состояний линк-компонентов, в фирменном описании на протокол не приводится. Для получения данной информации необходимо обращаться к описаниям и руководствам конкретных устройств и программного обеспечения.

 

12. ЗАКЛЮЧИТЕЛЬНЫЕ ЗАМЕЧАНИЯ

Фирменное описание платформы UPB предоставляет достаточно большой объем сведений о протоколе, однако содержит ряд пробелов и нестыковок, о некоторых из которых было упомянуто выше. К ним можно добавить также следующие:

  • отсутствие сведений о возможных последствиях конфликтов в сети в результате одновременной работы передатчиков, а также о наличии процедур и методов по их разрешению или предотвращению;
  • отсутствие сведений по архитектуре, назначению и использованию ряда регистров, в частности, RAM-регистров, регистра статуса и регистров состояния;
  • отсутствие рекомендаций по организации квитирования линк-пакетов с получением подтверждающих посылок от каждого из устройств линк-группы.

Надо также иметь в виду, что на практике производители могут отступать от некоторых требований протокола. В частности, в состоянии поставки устройства могут иметь адрес (UID), отличный от дефолтного (255), а пароль может быть простейшим и указываться в сопроводительной документации, при этом устройство может иметь функции сброса его настроек, включая пароль, к заводским, т.е. в соответствии с общепринятой моделью для паролируемых устройств.

Для получения дополнительной информации о протоколе рекомендуется воспользоваться руководством UPStart Users Guide по конфигурированию UPB-сети с помощью пакета UPStart, а также документацией на UPB-устройства.

 

Другие статьи проекта «Умный Дом в разрезе», имеющие отношение к теме «платформа UPB»:

# платформа UPB: общий обзор
# платформа UPB: протокол IPC и линейка GreenWorx

* * * * *

 

 

Опубликовано 15.10.2015. Последнее изменение - нет.

© Janto 2015 Все права защищены