OPC UA · BMS · DESIGO CC · Beckhoff · asyncua · MQTT PubSub · 11 min lasīšanai

OPC UA ēku automatizācijā: BMS integrācija, datu reģistrēšana un KPI

OPC UA ir kļuvis par integrācijas mugurkaulu mūsdienu inteliģentajās ēkās, nodrošinot vienotu, no piegādātāja neatkarīgu saskarni, kas savieno BMS kontrollerus, enerģijas skaitītājus, HVAC iekārtas un mākoņa analītikas platformas. Atšķirībā no BACnet vai Modbus, OPC UA ietver drošību un pašaprakstošu informācijas modeli — tas nozīmē, ka enerģijas pārvaldības sistēma var atklāt visus pieejamos datu punktus no DESIGO CC vai TwinCAT servera, neprasot atsevišķu reģistru karti vai punktu sarakstu.

OPC UA loma ēkās

Tipiska komerciāla ēka apvieno trīs vai vairākas apakšsistēmas, kas vēsturiski izmantoja nesaderīgus protokolus: BACnet/IP BMS HVAC un piekļuves kontrolei, Modbus RTU enerģijas skaitītāji uz seriālās kopnes un CMMS (datorizēta uzturēšanas pārvaldības sistēma) iekārtu apkopes ierakstiem. OPC UA darbojas kā horizontāls integrācijas slānis, nodrošinot vienotu lasīšanas/rakstīšanas/abonēšanas saskarni visām apakšsistēmām no viena klienta savienojuma.

OPC UA serveris atrodas starp lauka protokoliem un IT slāni. Tas aptaujā vai abonē datus no BACnet, Modbus un KNX apakšsistēmām, izmantojot protokolam specifiskus draiverus, pēc tam visus datus atklāj vienā pārlūkojamā adrešu telpā. Klienti — SCADA sistēmas, enerģijas pārvaldības platformas, informācijas paneļi un mākoņa savienotāji — pieslēdzas OPC UA serverim vienreiz un piekļūst visiem ēkas datiem caur standarta API neatkarīgi no pamatā esošā protokola.

OPC UA integrācijas topoloģija ēkā

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 servera ieviešanas iespējas

Ēku automatizācijā dominē trīs OPC UA servera realizācijas. Katra ir piemērota atšķirīgai BMS ekosistēmai un aparatūras platformai.

ServerisPlatformaProtokolu draiveriLicence
Siemens DESIGO CC ar OPC UAWindows Server, DESIGO CC lietojumprogrammu serverisBACnet/IP, BACnet MS/TP, KNX, Modbus, M-Bus caur DESIGO draiveriemMaksas — daļa no DESIGO CC licences
Schneider EcoStruxure BMS OPC UAEcoStruxure Building Operation (EBO) serverisBACnet/IP, Modbus, LON, M-Bus, DALIMaksas — EBO licence
Beckhoff TwinCAT OPC UA serverisWindows dators, kurā darbojas TwinCAT 3 izpildlaiksTwinCAT ADS (PLC mainīgie), EtherCAT I/O, Modbus caur PLC funkciju blokiemBezmaksas ar TwinCAT licenci
Kepware KEPServerEXWindows dators/serveris (autonoms vārteja)BACnet/IP, Modbus RTU/TCP, OPC DA, SNMP, EtherNet/IP, 150+ draiveriMaksas — licencēšana uz draiveri
Pro-face Remote HMI OPC UAIebūvētais Linux GP4000/GP4600 HMIModbus TCP, EtherNet/IP, Mitsubishi MC protokolsIekļauts HMI cenā

Beckhoff TwinCAT OPC UA serveris — bezmaksas integratoriem: Ja izmantojat TwinCAT 3 kā PLC izpildlaiku ēkas kontrollerim, TwinCAT OPC UA serveris tiek nodrošināts bez papildu maksas. Tas atklāj visus PLC mainīgos, kas deklarēti ar atribūtu {attribute 'OPC.UA.DA' := '1'} tieši kā OPC UA mezglus. Šis ir vislētākais ceļš uz OPC UA jaunos paneļos iebūvētos ēkas kontrolleros.

OPC UA informācijas modelis ēkām

IEC 62541-100 (OPC UA ēkām) definē standartizētu informācijas modeli, kas kartē ISO 16739-1 IFC (Industry Foundation Classes) koncepcijas uz OPC UA ObjectTypes. Tas ļauj enerģijas pārvaldības sistēmai pārlūkot ēkas servera adrešu telpu, izmantojot labi zināmus tipu nosaukumus — SpaceType, ZoneType, HVACSystemType — nevis pārdevēja specifiskas virknes ceļus.

IEC 62541-100 ēkas informācijas modeļa struktūra

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]

Enerģijas KPI iegūšana, izmantojot OPC UA abonēšanu

Enerģijas pārvaldībai nepieciešami ticami, ar laikzīmogu apgādāti kWh rādījumi no skaitītāju mezgliem. Tā vietā, lai aptaujātu skaitītājus fiksētos intervālos (kas var palaist garām maksimumus un rada pastāvīgu datplūsmu), izmantojiet OPC UA abonementus ar PublishingInterval, kas atbilst vēlamajai detalizācijai, un nejutīguma zonu (deadband), lai neziņotu par nenozīmīgām izmaiņām.

KPIOPC UA mezglsIeteicamais intervālsNejutīguma zona
Stundas kWh patēriņšActiveEnergyImport (Double, kWh)PublishingInterval 60 000 msAbsolūtā 0,01 kWh
15 minūšu maksimālā slodzeActivePower (Float, kW)PublishingInterval 900 000 msAbsolūtā 0,1 kW
Reāllaika jaudas uzraudzībaActivePower (Float, kW)PublishingInterval 5 000 msProcentuālā 1%
Dienas siltuma skaitītāja rādījumsThermalEnergyImport (Double, kWh th)PublishingInterval 86 400 000 msAbsolūtā 0,1 kWh
Gāzes patēriņšGas_Volume (Double, m³)PublishingInterval 3 600 000 msAbsolūtais 0,001 m³

OPC UA PubSub: ēkas datu nosūtīšana uz mākoņa MQTT brokeri

OPC UA PubSub (IEC 62541-14) paplašina klienta-servera modeli ar publicēšanas-abonēšanas modeli, izmantojot MQTT vai UDP multiraidi. Tā vietā, lai mākoņa platforma aptaujātu OPC UA serveri, serveris pats nosūta DataSetMessages uz MQTT brokeri ar konfigurēto WriterGroup PublishingInterval. Šis ir ieteicamais modelis integrācijai ar mākoni, ja OPC UA serveris atrodas aiz NAT vai ugunsmūra, kas bloķē ienākošo TCP 4840.

OPC UA PubSub — Kepware konfigurācija MQTT brokerim

# 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 klients — asyncua piemērs

Bibliotēka asyncua (agrāk opcua-asyncio) ir ieteicamais Python OPC UA klients ēku automatizācijas skriptēšanai. Tā atbalsta async/await, visus drošības režīmus, X.509 sertifikātus un abonēšanu. Instalēšana arpip install asyncua.

asyncua — savienojums, pārlūkošana, lasīšana, abonēšana

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 sistēmām: Siemens un Beckhoff piemēri

Divas populāras ēku kontrolleru platformas ar iebūvētu OPC UA atbalstu. Siemens DESIGO paredzēts lielām komerciālām ēkām ar centralizētu BMS; Beckhoff TwinCAT — paneļa kontrolleriem ar tiešo I/O.

Siemens DESIGO CC OPC UA serveris: Tiek aktivizēts ar papildu DESIGO CC Management Platform licenci. Serveris atklāj visus DESIGO datu punktus (ieskaitot BACnet objektus, kas importēti no PXC kontrolleriem) kā OPC UA mainīgos hierarhijā, kas atbilst DESIGO vadības stacijas mapju struktūrai. Noklusējuma galapunkts: opc.tcp://<desigo-server>:4840. Atbalsta Sign+Encrypt ar Basic256Sha256 un X.509 klienta sertifikātiem. DESIGO trauksmes un notikumu nosacījumi tiek atklāti kā OPC UA AlarmCondition mezgli.

Beckhoff TwinCAT OPC UA serveris (TC3 OPC UA): Bezmaksas ar jebkuru TwinCAT 3 runtime licenci. PLC mainīgie, kas atzīmēti ar OPC UA atribūtu STRUCTURED TEXT deklarācijā, tiek automātiski publicēti. Atbalsta līdz 5000 uzraudzītiem vienumiem ar 10 ms SamplingInterval IPC ar standarta procesoru. DESIGO RXB telpas kontrolleru sērijā ir arī iebūvēts OPC UA serveris (ports 48040 pēc noklusējuma) ar tiešu piekļuvi telpas temperatūrai, iestatītajai temperatūrai, ventilatora spoles vārstam un klātbūtnes detektora stāvoklim.

OPC UA serveru drošības stiprināšana ēkās

OPC UA serveri ēkās ir IT/OT konverģences punkti un ir augstvērtīgi mērķi. Pielietojiet šādus stiprināšanas soļus nodošanas ekspluatācijā laikā:

Stiprināšanas solisKonfigurācijas darbība
Atspējot anonīmo autentifikācijuNoņemiet AnonymousIdentityToken no gala punkta konfigurācijas; izmantojiet Username vai X.509
Atspējojiet novecojušās drošības politikasNoņemiet Basic128Rsa15 un Basic256 gala punktus; atstājiet tikai Basic256Sha256 un Aes256Sha256RsaPss
Piespiedu kārtā ieslēdziet Sign+EncryptIestatiet minimālo MessageSecurityMode = SignAndEncrypt visiem ražošanas gala punktiem
Sertifikātu uzticamības sarakstsImportējiet tikai zināmos klientu sertifikātus servera uzticamības sarakstā; noraidiet visus pārējos
Audita žurnālsIeslēdziet OPC UA audita notikumus (AuditActivateSessionEvent, AuditWriteUpdateEvent); nosūtiet uz SIEM
Ugunsmūra noteikumiAtļaujiet ienākošo TCP 4840 tikai no zināmām klientu IP adresēm OT VLAN; bloķējiet no IT LAN
Sertifikātu derīguma termiņa uzraudzībaIestatiet brīdinājumu, kad servera vai klienta sertifikāti tuvojas derīguma termiņa beigām (90 dienu brīdinājums)
TwinCAT: tikai lasāma vārdu telpaDeklarējiet uzraudzības mainīgos kā VAR_OUTPUT vai izmantojiet UA lomu, lai ierobežotu rakstīšanu

IEC 62443-3-3 Drošības līmeņa 2 prasība: Ēkām, uz kurām attiecas EN 50159 (dzelzceļš) vai ISO 27001 BMS darbības joma, IEC 62443-3-3 SL-2 pieprasa, lai visi attālās pārvaldības savienojumi izmantotu savstarpēju autentifikāciju, pamatojoties uz X.509 sertifikātiem. Anonīmie un tikai lietotājvārda gala punkti ir jāatspējo visos ražošanas OPC UA serveros.

Vai jūsu ēkas projektam nepieciešama OPC UA BMS integrācija?

Mēs integrējam BACnet, Modbus, KNX un M-Bus apakšsistēmas vienotā OPC UA slānī — savienojot enerģijas skaitītājus, HVAC kontrollerus un SCADA ar mākoņa analītikas un enerģijas pārvaldības platformām.

Pieprasīt cenu →
Ielādējas...
Uz augšu