OPC UA · BMS · DESIGO CC · Beckhoff · asyncua · MQTT PubSub · 11 мин чтения

OPC UA в автоматизации зданий: интеграция BMS, сбор данных и KPI

OPC UA стал основой интеграции для современных интеллектуальных зданий, обеспечивая единый, независимый от вендора интерфейс, который соединяет контроллеры BMS, счетчики энергии, оборудование HVAC и облачные аналитические платформы. В отличие от BACnet или Modbus, OPC UA включает безопасность и самоописываемую информационную модель — это означает, что система управления энергопотреблением может обнаружить все доступные точки данных с сервера DESIGO CC или TwinCAT без необходимости в отдельной карте регистров или списке точек.

Роль OPC UA в зданиях

Типичное коммерческое здание объединяет три или более подсистем, которые исторически использовали несовместимые протоколы: BACnet/IP BMS для HVAC и контроля доступа, счетчики энергии Modbus RTU на последовательной шине и CMMS (компьютеризированная система управления техническим обслуживанием) для записей обслуживания оборудования. OPC UA выступает в качестве горизонтального интеграционного слоя, обеспечивая единый интерфейс чтения/записи/подписки для всех подсистем из одного клиентского подключения.

Сервер OPC UA находится между полевыми протоколами и IT-уровнем. Он опрашивает или подписывается на данные от подсистем BACnet, Modbus и KNX с помощью драйверов, специфичных для протокола, а затем предоставляет все данные в едином адресном пространстве для просмотра. Клиенты — SCADA-системы, платформы управления энергопотреблением, панели мониторинга и облачные коннекторы — подключаются к серверу OPC UA один раз и получают доступ ко всем данным здания через стандартный API, независимо от базового протокола.

Топология интеграции OPC UA в здании

Field layer (field protocols)
  BACnet/IP: Siemens PXC200, Distech EC-Net controllers
  Modbus TCP: Schneider PM5xxx energy meters, Janitza UMG 96
  KNX/IP: WEINZIERL KNX IP Interface 731
  M-Bus: heat meters, gas meters (IEC 62056)

  ↓ protocol drivers (inside BMS or gateway)

OPC UA Server layer
  Siemens DESIGO CC with OPC UA server module
    └── exposes BACnet objects as OPC UA Variables
    └── exposes alarm conditions as OPC UA AlarmCondition
  Beckhoff TwinCAT OPC UA Server
    └── exposes PLC variables directly from ADS runtime
  Kepware KEPServerEX
    └── multi-protocol gateway (BACnet + Modbus → OPC UA)

  ↓ opc.tcp:// or opc.wss://

Clients (standard OPC UA)
  Energy management platform (Schneider PME, EcoStruxure)
  SCADA / MES (Ignition, WinCC OA, Aveva)
  Cloud connector (Azure IoT OPC Publisher, AWS Greengrass)
  Analytics / dashboards (Grafana OPC UA plugin, Power BI)

Варианты реализации сервера OPC UA

Для автоматизации зданий доминируют три реализации сервера OPC UA. Каждая подходит для определенной экосистемы BMS и аппаратной платформы.

СерверПлатформаДрайверы протоколовЛицензия
Siemens DESIGO CC с OPC UAWindows Server, сервер приложений DESIGO CCBACnet/IP, BACnet MS/TP, KNX, Modbus, M-Bus через драйверы DESIGOПлатная — часть лицензии DESIGO CC
Schneider EcoStruxure BMS OPC UAСервер EcoStruxure Building Operation (EBO)BACnet/IP, Modbus, LON, M-Bus, DALIПлатно — лицензия EBO
Сервер Beckhoff TwinCAT OPC UAПК с Windows, работающий под управлением TwinCAT 3 runtimeTwinCAT ADS (переменные ПЛК), EtherCAT I/O, Modbus через функциональные блоки ПЛКБесплатно с лицензией TwinCAT
Kepware KEPServerEXПК/сервер с Windows (автономный шлюз)BACnet/IP, Modbus RTU/TCP, OPC DA, SNMP, EtherNet/IP, более 150 драйверовПлатно — лицензирование на драйвер
Pro-face Remote HMI OPC UAВстроенный Linux на HMI GP4000/GP4600Modbus TCP, EtherNet/IP, протокол Mitsubishi MCВключено в стоимость HMI

Сервер Beckhoff TwinCAT OPC UA — бесплатно для интеграторов: Если вы используете TwinCAT 3 в качестве среды выполнения ПЛК для контроллера здания, сервер TwinCAT OPC UA входит в комплект без дополнительной оплаты. Он предоставляет все переменные ПЛК, объявленные с атрибутом {attribute 'OPC.UA.DA' := '1'} непосредственно как узлы OPC UA. Это наиболее экономичный способ внедрения OPC UA в новых панельных контроллерах зданий.

Информационная модель OPC UA для зданий

Стандарт IEC 62541-100 (OPC UA for Buildings) определяет стандартизированную информационную модель, отображающую концепции ISO 16739-1 IFC (Industry Foundation Classes) на типы объектов OPC UA. Это позволяет системе управления энергопотреблением перемещаться по адресному пространству сервера здания, используя общеизвестные имена типов — SpaceType, ZoneType, HVACSystemType — вместо строковых путей, специфичных для вендора.

Структура информационной модели здания IEC 62541-100

BuildingType (ns=2;s=Building_Alpha_Tower)
├── SiteType (ns=2;s=Site_Riga_01)
│   ├── BuildingStoreyType (ns=2;s=Floor_03)
│   │   ├── SpaceType (ns=2;s=Office_3A)  ← IFC IfcSpace mapping
│   │   │   ├── AirTemperature [Variable, Float, °C]
│   │   │   ├── CO2Concentration [Variable, UInt16, ppm]
│   │   │   └── OccupancyState [Variable, Boolean]
│   │   └── SpaceType (ns=2;s=Meeting_3B)
│   └── BuildingStoreyType (ns=2;s=Floor_04)
├── HVACSystemType (ns=2;s=AHU_Main_01)  ← IFC IfcSystem mapping
│   ├── SupplyAirTemperature [Variable, Float, °C]
│   ├── ExhaustAirTemperature [Variable, Float, °C]
│   ├── HeatingCoilValve [Variable, Byte, 0–100%]
│   ├── CoolingCoilValve [Variable, Byte, 0–100%]
│   ├── FanSpeed [Variable, UInt16, RPM]
│   └── OperatingMode [Variable, Enum: Off/Auto/Heating/Cooling/Night]
└── EnergyMeterType (ns=2;s=MainMeter_kWh)  ← IEC 62056 meter
    ├── ActiveEnergyImport [Variable, Double, kWh]
    ├── ActivePower [Variable, Float, kW]
    └── Timestamp [Variable, DateTime]

Извлечение KPI энергопотребления через подписку OPC UA

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

KPIУзел OPC UAРекомендуемый интервалЗона нечувствительности
Почасовое потребление кВт·чActiveEnergyImport (Double, кВт·ч)PublishingInterval 60 000 мсАбсолютная 0,01 кВт·ч
Пиковая нагрузка за 15 минActivePower (Float, кВт)PublishingInterval 900 000 мсАбсолютная 0,1 кВт
Мониторинг мощности в реальном времениActivePower (Float, кВт)PublishingInterval 5 000 мсПроцент 1%
Ежедневные показания теплосчетчикаThermalEnergyImport (Double, кВт·ч тепл.)PublishingInterval 86 400 000 мсАбсолютная 0,1 кВт·ч
Потребление газаGas_Volume (Double, м³)PublishingInterval 3 600 000 мсАбсолютное 0.001 м³

OPC UA PubSub: отправка данных здания в облачный MQTT брокер

OPC UA PubSub (IEC 62541-14) расширяет модель клиент-сервер шаблоном публикации-подписки с использованием MQTT или UDP multicast в качестве транспорта. Вместо опроса сервера OPC UA облачной платформой, сервер отправляет DataSetMessages в MQTT брокер с заданным PublishingInterval WriterGroup. Это рекомендуемый шаблон для интеграции с облаком, когда сервер OPC UA находится за NAT или брандмауэром, блокирующим входящий TCP 4840.

OPC UA PubSub — конфигурация Kepware для MQTT брокера

# Kepware IoT Gateway Plugin — OPC UA PubSub to MQTT

Agent type: MQTT Client (Publisher)
Broker URL: mqtts://iot.yourdomain.com:8883
Client ID: kepware-building-01
TLS: enabled (CA cert + client cert for mutual TLS)

Published datasets (JSON encoding, UA-JSON):
  Topic: building/01/hvac/ahu01
  Payload (DataSetMessage, JSON):
  {
    "MessageId": "uuid-xxx",
    "PublisherId": "kepware-building-01",
    "DataSetWriterId": 1001,
    "Timestamp": "2025-03-14T10:30:00Z",
    "Payload": {
      "SupplyAirTemperature": { "Value": 18.4, "StatusCode": "Good", "SourceTimestamp": "..." },
      "FanSpeed":             { "Value": 1450, "StatusCode": "Good" },
      "HeatingCoilValve":     { "Value": 72,   "StatusCode": "Good" }
    }
  }

  Topic: building/01/energy/main-meter
  PublishingInterval: 60000 ms
  QueueSize: 1 (latest value only)

Python OPC UA клиент — пример asyncua

Библиотека asyncua (ранее opcua-asyncio) является рекомендуемым Python OPC UA клиентом для автоматизации зданий. Она поддерживает async/await, все режимы безопасности, сертификаты X.509 и подписки. Установите с помощьюpip install asyncua.

asyncua — подключение, обзор, чтение, подписка

import asyncio
from asyncua import Client
from asyncua.crypto.security_policies import SecurityPolicyBasic256Sha256
from asyncua.ua import MessageSecurityMode

class SubHandler:
    """Callback invoked for each subscription notification."""
    def datachange_notification(self, node, val, data):
        print(f"  DataChange: {node} = {val}  status={data.monitored_item.Value.StatusCode}")

async def main():
    url = "opc.tcp://192.168.10.50:4840/freeopcua/server/"

    async with Client(url=url) as client:
        # --- Security: Sign + Encrypt, Basic256Sha256, X.509 cert ---
        await client.set_security(
            SecurityPolicyBasic256Sha256,
            certificate="client_cert.pem",
            private_key="client_key.pem",
            server_certificate="server_cert.pem",
            mode=MessageSecurityMode.SignAndEncrypt,
        )

        print("Connected. Server namespaces:")
        for i, ns in enumerate(await client.get_namespace_array()):
            print(f"  ns={i}: {ns}")

        # --- Browse Objects root ---
        objects = client.get_objects_node()
        children = await objects.get_children()
        for child in children:
            name = await child.read_browse_name()
            print(f"  Object: {name.Name}")

        # --- Read a specific variable by NodeId ---
        temp_node = client.get_node("ns=1;s=AHU_01.SupplyAirTemperature")
        temp_value = await temp_node.read_value()
        print(f"Supply air temperature: {temp_value:.1f} °C")

        # --- Read EngineeringUnits property ---
        eu = await temp_node.read_data_value()
        print(f"StatusCode: {eu.StatusCode}")

        # --- Subscribe to multiple nodes ---
        handler = SubHandler()
        subscription = await client.create_subscription(500, handler)  # 500 ms publishing
        nodes = [
            client.get_node("ns=1;s=AHU_01.SupplyAirTemperature"),
            client.get_node("ns=1;s=AHU_01.FanSpeed"),
            client.get_node("ns=1;s=Meter.kWh"),
        ]
        await subscription.subscribe_data_change(nodes)

        print("Subscribed. Waiting 30 seconds for notifications...")
        await asyncio.sleep(30)
        await subscription.delete()

asyncio.run(main())

OPC UA для HVAC: примеры Siemens и Beckhoff

Две распространенные платформы контроллеров зданий имеют встроенные серверы OPC UA. Siemens DESIGO предназначен для крупных коммерческих зданий с централизованной BMS; Beckhoff TwinCAT — для панельных контроллеров с прямым вводом/выводом.

Сервер OPC UA Siemens DESIGO CC: Включается через лицензию надстройки DESIGO CC Management Platform. Сервер предоставляет все точки данных DESIGO (включая объекты BACnet, импортированные из контроллеров PXC) как переменные OPC UA в иерархии, соответствующей структуре папок станции управления DESIGO. Конечная точка по умолчанию: opc.tcp://<desigo-server>:4840. Поддерживает Sign+Encrypt с Basic256Sha256 и клиентскими сертификатами X.509. Условия тревог и событий из DESIGO предоставляются как узлы OPC UA AlarmCondition.

Сервер OPC UA Beckhoff TwinCAT (TC3 OPC UA): Бесплатно с любой лицензией TwinCAT 3 runtime. Переменные ПЛК, отмеченные атрибутом OPC UA в объявлении STRUCTURED TEXT, автоматически публикуются. Поддерживает до 5000 отслеживаемых элементов с интервалом выборки 10 мс на IPC со стандартным процессором. Серия комнатных контроллеров DESIGO RXB также включает встроенный сервер OPC UA (порт 48040 по умолчанию) с прямым доступом к температуре в помещении, уставке, клапану фанкойла и состоянию датчика присутствия.

Усиление безопасности для серверов OPC UA в зданиях

Серверы OPC UA в зданиях являются точками конвергенции IT/OT и представляют собой ценные цели. Примените следующие шаги усиления во время ввода в эксплуатацию:

Шаг усиленияДействие по конфигурации
Отключить анонимную аутентификациюУдалите AnonymousIdentityToken из конфигурации конечной точки; используйте Username или X.509
Отключите устаревшие политики безопасностиУдалите конечные точки Basic128Rsa15 и Basic256; оставьте только Basic256Sha256 и Aes256Sha256RsaPss
Принудительно используйте Sign+EncryptУстановите минимальный MessageSecurityMode = SignAndEncrypt на всех промышленных конечных точках
Список доверенных сертификатовИмпортируйте только известные сертификаты клиентов в список доверенных серверов; отклоняйте все остальные
Журнал аудитаВключите события аудита OPC UA (AuditActivateSessionEvent, AuditWriteUpdateEvent); перенаправляйте в SIEM
Правила брандмауэраРазрешите входящий TCP 4840 только с известных IP-адресов клиентов в OT VLAN; заблокируйте из IT LAN
Мониторинг срока действия сертификатовНастройте оповещение при приближении срока действия сертификатов сервера или клиента (предупреждение за 90 дней)
TwinCAT: пространство имен только для чтенияОбъявите переменные мониторинга как VAR_OUTPUT или используйте роль UA для ограничения записи

Требование IEC 62443-3-3 Уровень безопасности 2: Для зданий, подпадающих под EN 50159 (железная дорога) или ISO 27001 (BMS), IEC 62443-3-3 SL-2 требует, чтобы все удаленные управляющие соединения использовали взаимную аутентификацию на основе сертификатов X.509. Анонимные конечные точки и конечные точки только с именем пользователя должны быть отключены на всех промышленных серверах OPC UA.

Нужна интеграция OPC UA BMS для вашего строительного проекта?

Мы интегрируем подсистемы BACnet, Modbus, KNX и M-Bus в единый уровень OPC UA — подключая счетчики энергии, контроллеры HVAC и SCADA к облачной аналитике и платформам управления энергопотреблением.

Запросить расчёт →
Loading...
Back to top