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.
| Serveris | Platforma | Protokolu draiveri | Licence |
|---|---|---|---|
| Siemens DESIGO CC ar OPC UA | Windows Server, DESIGO CC lietojumprogrammu serveris | BACnet/IP, BACnet MS/TP, KNX, Modbus, M-Bus caur DESIGO draiveriem | Maksas — daļa no DESIGO CC licences |
| Schneider EcoStruxure BMS OPC UA | EcoStruxure Building Operation (EBO) serveris | BACnet/IP, Modbus, LON, M-Bus, DALI | Maksas — EBO licence |
| Beckhoff TwinCAT OPC UA serveris | Windows dators, kurā darbojas TwinCAT 3 izpildlaiks | TwinCAT ADS (PLC mainīgie), EtherCAT I/O, Modbus caur PLC funkciju blokiem | Bezmaksas ar TwinCAT licenci |
| Kepware KEPServerEX | Windows dators/serveris (autonoms vārteja) | BACnet/IP, Modbus RTU/TCP, OPC DA, SNMP, EtherNet/IP, 150+ draiveri | Maksas — licencēšana uz draiveri |
| Pro-face Remote HMI OPC UA | Iebūvētais Linux GP4000/GP4600 HMI | Modbus TCP, EtherNet/IP, Mitsubishi MC protokols | Iekļ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.
| KPI | OPC UA mezgls | Ieteicamais intervāls | Nejutīguma zona |
|---|---|---|---|
| Stundas kWh patēriņš | ActiveEnergyImport (Double, kWh) | PublishingInterval 60 000 ms | Absolūtā 0,01 kWh |
| 15 minūšu maksimālā slodze | ActivePower (Float, kW) | PublishingInterval 900 000 ms | Absolūtā 0,1 kW |
| Reāllaika jaudas uzraudzība | ActivePower (Float, kW) | PublishingInterval 5 000 ms | Procentuālā 1% |
| Dienas siltuma skaitītāja rādījums | ThermalEnergyImport (Double, kWh th) | PublishingInterval 86 400 000 ms | Absolūtā 0,1 kWh |
| Gāzes patēriņš | Gas_Volume (Double, m³) | PublishingInterval 3 600 000 ms | Absolū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 solis | Konfigurācijas darbība |
|---|---|
| Atspējot anonīmo autentifikāciju | Noņemiet AnonymousIdentityToken no gala punkta konfigurācijas; izmantojiet Username vai X.509 |
| Atspējojiet novecojušās drošības politikas | Noņemiet Basic128Rsa15 un Basic256 gala punktus; atstājiet tikai Basic256Sha256 un Aes256Sha256RsaPss |
| Piespiedu kārtā ieslēdziet Sign+Encrypt | Iestatiet minimālo MessageSecurityMode = SignAndEncrypt visiem ražošanas gala punktiem |
| Sertifikātu uzticamības saraksts | Importējiet tikai zināmos klientu sertifikātus servera uzticamības sarakstā; noraidiet visus pārējos |
| Audita žurnāls | Ieslēdziet OPC UA audita notikumus (AuditActivateSessionEvent, AuditWriteUpdateEvent); nosūtiet uz SIEM |
| Ugunsmūra noteikumi | Atļ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ība | Iestatiet 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 telpa | Deklarē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 →