BACnet и KNX

BACnet и KNX — протоколы систем автоматизации здания: освещения, вентиляции, климата, жалюзи. Если в зале такое оборудование уже есть, программа U-Logic (редактор программы управления) может читать его состояние и отправлять ему команды, а панель — показывать значения и управлять ими так же, как для остальных устройств.

Как открыть окно узла и где найти справку — на странице «Узлы U-Logic». Подписи полей даны так, как они показаны в окне: они английские. Адреса и порты подключений задаются в программе; общий порядок согласования портов — на странице «Сетевые порты и протоколы».

Предупреждение

Узлы записи и команд меняют состояние оборудования здания, которое обслуживают другие службы. Согласуйте объекты и адреса с теми, кто его обслуживает, до первого запуска.

BACnet

Три узла категории BACnet. У каждого один вход и один выход. Чтение и запись обращаются к свойству объекта устройства BACnet. Результат чтения или запись приходят в msg.payload, при сбое ошибка попадает в msg.error.

Узел

Что делает

Ключевые поля

BACnet - Read

читает свойство объекта

Type, Instance, Property Id, Device, Client, Multiple Read

BACnet - Write

записывает значение в свойство объекта

Type, Instance, App-Tag, Value, Property, Priority, Device, Client

BACnet - Command

отправляет устройству служебную команду

Command, Device, Client; остальные поля зависят от команды

Устройство, объект и подключение к сети BACnet задаются один раз и выбираются в окне узла; как это сделать — в разделе «Подключение к сети BACnet» ниже.

BACnet - Read: прочитать свойство

Зачем. Узнать состояние оборудования здания: температуру в помещении, положение клапана, включён ли свет. Узел читает одно свойство одного объекта устройства BACnet, когда на его вход приходит сообщение. Один вход, один выход. Пример — ниже.

../../_images/node-bacnet-read.png

Окно узла BACnet - Read: 1 — «Type», 2 — «Instance», 3 — «Property Id», 4 — «Device», 5 — «Client», 6 — «Multiple Read»

Поля окна:

  1. «Type» — тип объекта (например, вход, выход, значение). Кнопка со значком поиска рядом с полем открывает список.

  2. «Instance» — номер объекта; выбирается из списка или создаётся кнопкой «+».

  3. «Property Id» — какое свойство читать; список открывает кнопка поиска.

  4. «Device» — устройство BACnet, к которому обращается узел (адрес в нём — ниже).

  5. «Client» — подключение контроллера к сети BACnet.

  6. «Multiple Read» — несколько объектов или свойств за один запрос; список запросов приходит в сообщении (msg.payload.requestArray). Если поля в окне заданы и в сообщении есть такие же свойства, берутся значения сообщения.

BACnet - Write: записать значение

Зачем. Отправить оборудованию значение: задать уставку температуры, включить выход. Узел записывает значение в свойство объекта устройства BACnet, когда на его вход приходит сообщение. Один вход, один выход.

../../_images/node-bacnet-write.png

Окно узла BACnet - Write: 1 — «Type» (ниже «Instance»), 2 — «App-Tag», 3 — «Value», 4 — «Property», 5 — «Priority», 6 — «Device» (ниже «Client»)

Поля окна:

  1. «Type» и «Instance» — тип и номер объекта, как у BACnet - Read.

  2. «App-Tag» — тип значения для записи; список открывает кнопка поиска.

  3. «Value» — само значение.

  4. «Property» — в какое свойство писать.

  5. «Priority» — приоритет записи.

  6. «Device», «Client» — устройство и подключение, как у BACnet - Read.

Предупреждение

Запись меняет состояние реального оборудования. Не пробуйте её «наугад»: проверьте объект, свойство, тип значения и приоритет по описанию оборудования.

BACnet - Command: служебная команда

Зачем. Найти устройства BACnet в сети, передать им время, на время отключить обмен устройства. Узел отправляет служебную команду; остальные поля окна зависят от выбранной команды. Один вход, один выход.

../../_images/node-bacnet-command.png

Окно узла BACnet - Command с командой Who Is: 1 — «Command», 2 — «Device», 3 — «Client»

Поля окна:

  1. «Command» — какая команда.

  2. «Device» — устройство, которому адресована команда.

  3. «Client» — подключение к сети BACnet.

  4. Поля выбранной команды — по таблице ниже.

Команда

Зачем

Поля

Who Is

найти устройства BACnet в сети

—

Who Is explicit

то же в заданных пределах номеров устройств

Low Limit, High Limit

Time Sync

передать устройствам время

флажок UTC Date

Device Communication Control

включить или отключить обмен устройства

Enable/Disable, Time Duration, Password

Reinitialize Device

перезапустить устройство

State, Password

Device Communication Control и Reinitialize Device отключают или перезапускают реальное устройство: используйте их осознанно.

Подключение к сети BACnet

Три общих настройки создаются кнопкой «+» рядом с полем в окне узла и используются всеми узлами BACnet. Значения возьмите из описания оборудования здания или у его обслуживающей организации.

Client: подключение контроллера к сети

../../_images/node-bacnet-client.png

Окно подключения Client: 1 — «Имя», 2 — «Interface», 3 — «Broadcast», 4 — «Port», 5 — «adpu Timeout»

Поля окна:

  1. «Имя» — подпись в списке.

  2. «Interface» — сетевой интерфейс контроллера, через который идёт обмен с BACnet.

  3. «Broadcast» — широковещательный адрес вашей сети BACnet.

  4. «Port» — порт; в окне по умолчанию 47808.

  5. «adpu Timeout» — сколько ждать ответа.

Device: устройство

../../_images/node-bacnet-device.png

Окно устройства Device: 1 — «Имя», 2 — «Address»

Поля окна:

  1. «Имя» — подпись в списке.

  2. «Address» — адрес устройства BACnet в сети.

Instance: объект

../../_images/node-bacnet-instance.png

Окно объекта Instance: 1 — «Имя», 2 — «Instance»

Поля окна:

  1. «Имя» — подпись в списке.

  2. «Instance» — номер объекта в устройстве.

Пример: прочитать значение с BACnet-устройства

Зачем. Проверить связь с оборудованием здания и увидеть, что оно отвечает. Цепочка: inject → BACnet - Read → debug. Записи в оборудование здесь нет.

  1. Перетащите на рабочую область inject, BACnet - Read и debug и соедините по порядку.

  2. Откройте BACnet - Read. Рядом с полем «Client» нажмите «+», заполните «Interface», «Broadcast» и «Port» по сети вашего оборудования и нажмите «Добавить».

  3. Рядом с «Device» нажмите «+»: «Address» — адрес устройства BACnet. Нажмите «Добавить».

  4. Рядом с «Instance» нажмите «+»: «Instance» — номер объекта из описания оборудования. Нажмите «Добавить».

  5. В «Type» и «Property Id» выберите тип объекта и свойство (например, текущее значение) кнопками поиска. Нажмите «Готово».

  6. Откройте debug, в поле «Выводить» выберите «весь msg объект сообщения», нажмите «Готово» и «Развернуть». Откройте вкладку отладки (значок «жук»).

  7. Нажмите кнопку слева от inject.

../../_images/flow-bacnet-knx-bacnet-read.png

Цепочка примера: inject «Прочитать» → BACnet - Read «Значение объекта» → debug «Результат чтения»

Что вы увидите. В отладке — сообщение, в payload которого лежит результат чтения. Если ответа нет, в сообщении будет error.

Частые ошибки.

  • Ответа нет — неверный адрес устройства в «Device» или широковещательный адрес в «Client» не соответствует сети оборудования. Проверьте у обслуживающей организации и убедитесь, что оборудование доступно с контроллера.

  • Приходит не то значение — выбран не тот объект или свойство: сверьте «Type», «Instance» и «Property Id» с описанием.

KNX

Два узла и одно подключение. Группа адресов KNX записывается как 1/2/3, физический адрес устройства — как 1.1.100.

Узел

Вход / выход

Что делает

knx - in

0 / 1

принимает телеграммы шины и передаёт каждую в программу

knx - out

1 / 0

отправляет телеграмму в шину

У обоих узлов поля «Name», «Controller» (подключение к шлюзу, выбирается из списка или создаётся кнопкой «+») и флажок «Debug logs» (расширенный журнал для диагностики).

knx - in: принять телеграммы

Зачем. Узнать, что происходит на шине: нажали выключатель, изменилась температура. Узел принимает телеграммы шины и передаёт каждую в программу. Входа нет, один выход.

../../_images/node-knx-in.png

Окно узла knx - in: 1 — «Name», 2 — «Controller», 3 — «Debug logs»

Поля окна:

  1. «Name» — подпись на вкладке.

  2. «Controller» — подключение к шлюзу KNX (ниже).

  3. «Debug logs» — расширенный журнал для диагностики.

На выходе msg.topic — knx:event или knx:status. В msg.payload — объект: dstgad (группа адресов), srcphy (физический адрес отправителя), value (принятые данные телеграммы, записанные текстом), type (event или status), а также data и dptData (данные телеграммы в исходном виде). Поле dpt всегда равно no_dpt: узел не переводит значение по типу данных группы адресов, поэтому число или состояние выделяйте сами. Что именно приходит от вашего оборудования, проверьте узлом debug («весь msg объект сообщения»), подключив его к выходу knx - in.

knx - out: отправить телеграмму

Зачем. Включить свет, опустить жалюзи, запросить значение у устройства. Узел отправляет телеграмму в шину. Один вход, выходов нет.

../../_images/node-knx-out.png

Окно узла knx - out: 1 — «Name», 2 — «Controller», 3 — «Debug logs»

Поля окна:

  1. «Name» — подпись на вкладке.

  2. «Controller» — подключение к шлюзу KNX (ниже).

  3. «Debug logs» — расширенный журнал для диагностики.

msg.topic — write (запись значения; по умолчанию) или read (запрос значения). msg.payload — объект с полями dstgad, value и dpt. Если value не задано, узел отправляет запрос значения (read). Если не задан dpt, берётся тип 1 (включить/выключить). Например, включить свет по группе адресов 1/2/3:

{"dstgad":"1/2/3","value":1,"dpt":"1"}

Для других типов данных формат значения отличается: например, для затемнения (dpt 3) value — объект {"c": true, "amount": 4} (направление и шаг до 7), для времени и даты (dpt 10 и 11) — объект со временем или датой. Готовые примеры — во встроенной справке узла knx - out.

Подключение к шлюзу KNX

Создаётся кнопкой «+» рядом с полем «Controller».

../../_images/node-knx-controller.png

Окно подключения к шлюзу KNX: 1 — «Name», 2 — «knx Host», 3 — «knx Port», 4 — «knx Mode»

  1. «Name» — подпись подключения.

  2. «knx Host» — адрес вашего шлюза KNX (KNX/IP-интерфейса или маршрутизатора); значение 127.0.0.1, которое стоит в окне по умолчанию, замените.

  3. «knx Port» — порт шлюза; в окне по умолчанию 3671.

  4. «knx Mode» — tunnel/unicast — соединение с конкретным шлюзом; routing/multicast — через маршрутизацию, если её поддерживает ваша сеть KNX/IP.

Пример: отправить телеграмму и увидеть шину

Зачем. Проверить связь со шлюзом KNX: отправить команду и посмотреть, что видит шина. Цепочки: inject → knx - out и knx - in → debug.

  1. Перетащите на рабочую область inject, knx - out, knx - in и debug. Соедините inject с knx - out, а knx - in — с debug.

  2. Откройте inject. У msg.payload выберите тип «JSON» и впишите {"dstgad":"1/2/3","value":1,"dpt":"1"}; группу адресов 1/2/3 замените группой своего оборудования. Нажмите «Готово».

  3. Откройте knx - out. Рядом с «Controller» нажмите «+»: «knx Host» — адрес шлюза, «knx Port» и «knx Mode» — по описанию вашей сети KNX. Нажмите «Добавить», затем «Готово».

  4. Откройте knx - in и выберите в «Controller» то же подключение. Нажмите «Готово».

  5. Откройте debug, в поле «Выводить» выберите «весь msg объект сообщения», нажмите «Готово» и «Развернуть». Откройте вкладку отладки (значок «жук»).

  6. Нажмите кнопку слева от inject.

../../_images/flow-bacnet-knx-knx.png

Цепочка примера: inject «Включить свет» → knx - out «Команда в шину»; ниже knx - in «Телеграммы шины» → debug «Что пришло»

Что вы увидите. Устройство, привязанное к группе адресов, включается. В отладке появляются телеграммы шины, которые принимает knx - in: смотрите в payload поля dstgad и value.

Частые ошибки.

  • Узлы KNX не получают телеграмм: в «knx Host» остался локальный адрес 127.0.0.1 или шлюз недоступен из сети контроллера.

  • knx - out ничего не делает: в msg.payload не объект или нет dstgad; значение не доходит как нужно, если dpt не соответствует группе адресов (без dpt узел считает значение включением/выключением).

Все поля узлов — во встроенной справке: откройте вкладку «справка» боковой панели (значок книги) и выберите узел.