Architektura OPC UA: Model informacyjny, bezpieczeństwo, sesje i transport
OPC UA (IEC 62541) to 13-częściowy standard definiujący niezależną od platformy, zorientowaną na usługi architekturę komunikacji automatyki przemysłowej i budynkowej. W przeciwieństwie do swojego poprzednika OPC Classic (który działał tylko na Windows COM/DCOM), OPC UA działa na każdym systemie operacyjnym, zawiera pełny model bezpieczeństwa i zapewnia ujednolicony model informacyjny, który sprawia, że każdy serwer jest samoopisujący – eliminując potrzebę zewnętrznych słowników danych podczas integracji BMS, SCADA i platform IoT.
Struktura standardu IEC 62541
IEC 62541 składa się z 13 ponumerowanych części. Części 1–7 definiują podstawową architekturę; części 8–14 obejmują mapowania, bezpieczeństwo i profile. Dla integratorów automatyki budynkowej najważniejsze są części 1 (Koncepcje), 3 (Model przestrzeni adresowej), 4 (Usługi), 6 (Mapowania – kodowanie i transport), 7 (Profile) oraz specyfikacja towarzysząca IEC 62541-100 (OPC UA dla budynków).
| Część | Tytuł | Znaczenie |
|---|---|---|
| IEC 62541-1 | Koncepcje i przegląd | Podstawowa architektura, model usług, koncepcja modelu informacji |
| IEC 62541-3 | Model przestrzeni adresowej | Typy NodeClass, referencje, atrybuty – kręgosłup modelu danych |
| IEC 62541-4 | Usługi | Zestawy usług Read, Write, Browse, Subscribe, Call – wszystkie API serwera |
| IEC 62541-6 | Mapowania | Kodowanie binarne (UA Binary), kodowanie XML, transport opc.tcp, HTTPS, WebSockets |
| IEC 62541-7 | Profile | Profile serwera, klienta i transportu do testowania zgodności |
| IEC 62541-12 | Odkrywanie i usługi globalne | Lokalny serwer odkrywania (LDS), Globalny serwer odkrywania (GDS) do zarządzania certyfikatami |
| IEC 62541-100 | OPC UA dla budynków | Model informacji odwzorowany w IFC dla pomieszczeń, stref, HVAC, pomiarów energii |
Model informacji: typy NodeClass i referencje
Każda informacja w serwerze OPC UA jest reprezentowana jako węzeł w przestrzeni adresowej. Węzły mają atrybut NodeClass określający ich rolę. Węzły są połączone ze sobą za pomocą typowanych referencji – na przykład HasComponent, HasProperty, Organizes, HasSubtype. Tworzy to skierowany graf, który klienci mogą przeglądać, aby odkryć zawartość serwera bez wcześniejszej znajomości struktury danych.
| NodeClass | Przeznaczenie | Przykład w BMS |
|---|---|---|
| Obiekt | Kontener grupujący powiązane węzły; sam nie ma wartości | Obiekt AHU_01 grupujący wszystkie zmienne AHU |
| Zmienna | Przechowuje typowaną wartość; do odczytu i opcjonalnie do zapisu | SupplyAirTemp (Float, °C), FanSpeed (UInt16, RPM) |
| Metoda | Funkcja wywoływalna; argumenty wejściowe i wyjściowe | ResetAlarm(), SetOperatingMode(mode: Int32) |
| Widok | Nazwany podzbiór przestrzeni adresowej do filtrowanego przeglądania | EnergyMeteringView pokazujący tylko węzły kWh |
| Typ danych | Definiuje typ skalarny lub strukturalny używany przez zmienne | EnumHvacMode {Auto=0, Heating=1, Cooling=2} |
| ObjectType | Szablon dla węzłów obiektów (jak definicja klasy) | HVACUnitType ze standardowymi komponentami |
| VariableType | Szablon dla węzłów zmiennych z domyślnymi atrybutami | AnalogItemType z właściwością EngineeringUnits |
| ReferenceType | Definiuje semantykę referencji między węzłami | HasComponent, HasProperty, Organizes |
Przestrzeń adresowa: przestrzenie nazw i przeglądane drzewo
Przestrzeń adresowa jest zorganizowana jako przeglądane drzewo. Każdy węzeł jest identyfikowany przez NodeId składający się z indeksu przestrzeni nazw i identyfikatora (numeryczny, tekstowy lub GUID). Przestrzeń nazw 0 (ns=0) jest zawsze standardową przestrzenią nazw OPC UA zawierającą wbudowane typy i standardowe węzły. Przestrzenie nazw 1+ są przypisywane przez serwer dla treści specyficznych dla dostawcy lub aplikacji. Klienci odkrywają tablicę przestrzeni nazw za pomocą wywołania usługi GetNamespaceArray.
Przestrzeń adresowa OPC UA — przykład BMS
Objects (ns=0;i=85) ← OPC UA standard root
├── Server (ns=0;i=2253) ← always present, server diagnostics
└── Building_01 (ns=1;s=Building_01) ← application namespace
├── Floor_02 (ns=1;s=Building_01/Floor_02)
│ ├── AHU_01 (ns=1;s=AHU_01) [Object]
│ │ ├── SupplyAirTemperature (ns=1;s=AHU_01.SAT) [Variable, Float]
│ │ │ ├── EngineeringUnits [Property: "°C"]
│ │ │ ├── EURange [Property: Low=0, High=60]
│ │ │ └── StatusCode [Property: Good/Bad/Uncertain]
│ │ ├── FanSpeed (ns=1;s=AHU_01.FanRPM) [Variable, UInt16]
│ │ ├── DamperPosition (ns=1;s=AHU_01.Damper) [Variable, Byte, 0–100%]
│ │ └── ResetAlarm (ns=1;s=AHU_01.ResetAlarm) [Method]
│ └── VAV_Zone_2A (ns=1;s=VAV_2A) [Object]
│ ├── RoomTemperature (ns=1;s=VAV_2A.RoomTemp) [Variable, Float]
│ └── Setpoint (ns=1;s=VAV_2A.SP) [Variable, Float, writable]
└── Meters (ns=1;s=Meters)
└── Main_kWh (ns=1;s=Meter.kWh) [Variable, Double]Klienci nawigują od korzenia Objects za pomocą usługi Browse, podążając za referencjami hierarchicznymi (HasComponent, Organizes, HasProperty), aby odkryć węzły. Usługa TranslateBrowsePathsToNodeIds umożliwia klientom bezpośrednie przejście do znanej ścieżki bez przeszukiwania całego drzewa – przydatne do wydajnościowego odpytywania znanych zmiennych.
Opcje transportu
OPC UA definiuje trzy wiązania transportowe. Wybór wpływa na opóźnienie, przechodzenie przez zapory ogniowe i narzut protokołu. OPC UA Binary przez TCP jest domyślne dla integracji BMS na poziomie zakładu; HTTPS i WebSockets są używane dla interfejsów chmurowych lub dostępnych przez przeglądarkę.
| Transport | Prefiks URI | Domyślny port | Narzut | Uwagi |
|---|---|---|---|---|
| OPC UA TCP | opc.tcp:// | 4840 | Najniższy – ramkowanie binarne | Najlepsze dla hali produkcyjnej; trwałe połączenie TCP; nieprzyjazne dla zapór sieciowych |
| OPC UA HTTPS | opc.https:// | 443 | Średni — HTTP/1.1 + TLS | Przyjazny dla zapór sieciowych; może przechodzić przez proxy; wyższe opóźnienie na żądanie |
| OPC UA WebSockets | opc.wss:// | 443 | Niski — ramkowanie WebSocket | Zgodny z przeglądarką; trwały; używany do web SCADA i bram chmurowych |
Zalecenie dla poziomu produkcyjnego: Zawsze używaj opc.tcp:// w sieci LAN budynku lub VLAN OT. Trwałe połączenie TCP eliminuje narzut uzgadniania TLS na żądanie i zapewnia najniższe opóźnienie powiadomień subskrypcji. Zarezerwuj HTTPS dla integracji między lokalizacjami lub w chmurze, gdy port zapory 4840 nie może być otwarty.
Tryby bezpieczeństwa i polityki bezpieczeństwa
Bezpieczeństwo OPC UA jest negocjowane na poziomie Secure Channel przed wymianą jakichkolwiek wiadomości aplikacji. Serwer ogłasza obsługiwane EndpointDescriptions (kombinacje MessageSecurityMode i SecurityPolicyUri). Klient wybiera jedną podczas otwierania połączenia. Nigdy nie używaj None w środowisku produkcyjnym – przesyła wszystkie dane w postaci jawnej bez ochrony integralności.
| MessageSecurityMode | Ochrona | Zastosowanie |
|---|---|---|
| Brak | Brak podpisu, brak szyfrowania | Tylko laboratorium / rozwój – nigdy produkcja |
| Podpisz | Integralność HMAC wiadomości; brak szyfrowania ładunku | SCADA krytyczne dla wydajności w zaufanej zamkniętej sieci LAN |
| PodpiszISzyfruj | HMAC + szyfrowanie AES wszystkich ładunków wiadomości | Standard dla wszystkich integracji BMS i chmury |
SecurityPolicyUri wybiera algorytmy kryptograficzne. Obecnie zalecane polityki (według IEC 62541-7:2022) to:
| SecurityPolicyUri | Asymetryczny (wymiana kluczy) | Symetryczny (dane) | Status |
|---|---|---|---|
| Basic128Rsa15 | RSA-PKCS1-v1.5 / 1024-bit | AES-128-CBC | Przestarzałe — nie używać |
| Basic256 | RSA-OAEP / 1024-bit | AES-256-CBC | Przestarzałe — nie używać |
| Basic256Sha256 | RSA-OAEP / 2048-bit + SHA-256 | AES-256-CBC + SHA-256 HMAC | Obecny – szeroko wspierany |
| Aes128Sha256RsaOaep | RSA-OAEP / 2048-bit + SHA-256 | AES-128-CBC + SHA-256 HMAC | Obecny – niższe obciążenie CPU |
| Aes256Sha256RsaPss | RSA-PSS / 2048-bit + SHA-256 | AES-256-CBC + SHA-256 HMAC | Zalecany – najsilniejszy, używać tam, gdzie jest obsługiwany |
Informacja o wycofaniu: Basic128Rsa15 i Basic256 używają 1024-bitowych kluczy RSA i SHA-1, które są uważane za kryptograficznie słabe. IEC 62541-7:2022 oznacza je jako przestarzałe. Kepware KEPServerEX 6.x i Siemens DESIGO CC obsługują Basic256Sha256 i Aes256Sha256RsaPss. Wyłącz przestarzałe polityki w konfiguracji serwera produkcyjnego, aby zapobiec atakom obniżania poziomu.
Metody uwierzytelniania
Uwierzytelnianie odbywa się na warstwie sesji (powyżej bezpiecznego kanału). OPC UA definiuje trzy typy tokenów tożsamości ActivateSession. Uwierzytelnianie oparte na certyfikatach jest najbezpieczniejsze i wymagane przez normy bezpieczeństwa przemysłowego, takie jak IEC 62443-3-3 Security Level 2.
| Typ tokena | Opis | Zalecenie |
|---|---|---|
| AnonymousIdentityToken | Brak poświadczeń – każdy klient może utworzyć sesję | Wyłącz w produkcji; dopuszczalne tylko dla publicznych pulpitów tylko do odczytu |
| UserNameIdentityToken | Nazwa użytkownika i hasło; hasło szyfrowane kluczem publicznym serwera | Dopuszczalne dla dostępu operatora; używaj z transportem Sign+Encrypt |
| X509IdentityToken | Klient przedstawia ważny certyfikat X.509; serwer weryfikuje względem listy zaufania | Wymagane dla integracji maszyna-maszyna i zgodności z IEC 62443 SL-2 |
Sesje i subskrypcje
Sesja jest ustanawiana na szczycie bezpiecznego kanału po uwierzytelnieniu. Sesje mają RequestedSessionTimeout (zwykle 60–3600 sekund); jeśli klient nie wyśle keep-alive przed upływem czasu, serwer usuwa sesję i wszystkie jej subskrypcje. Klienci powinni obsługiwać ponowne połączenie poprzez przywrócenie sesji lub transfer.
Subskrypcje są podstawowym mechanizmem efektywnego monitorowania danych. Zamiast wielokrotnie odpytywać zmienne (co generuje niepotrzebny ruch), klienci tworzą subskrypcję z PublishingInterval i dodają do niej MonitoredItems. Serwer próbkuje każdy MonitoredItem z interwałem SamplingInterval i kolejkuje zmiany wartości; gdy PublishingInterval wyzwala, wszystkie oczekujące powiadomienia są wysyłane w jednej wiadomości PublishResponse.
Parametry subskrypcji – kluczowe pola
CreateSubscription request:
RequestedPublishingInterval: 1000 // ms — how often server sends Publish
RequestedMaxKeepAliveCount: 10 // Publish cycles before keep-alive sent
RequestedLifetimeCount: 30 // LifetimeCount × PublishingInterval = session timeout
MaxNotificationsPerPublish: 1000 // cap notifications per PublishResponse
PublishingEnabled: true
MonitoredItem parameters:
SamplingInterval: 500 // ms — server samples item at this rate
// must be ≥ server MinSupportedSampleRate
QueueSize: 10 // buffer for overrun; 1 = last value only
DiscardOldest: true // discard oldest on queue overflow
DeadbandType: None / Absolute / Percent
DeadbandValue: 0.5 // Absolute: only report if change > 0.5 units
// Percent: only report if change > 0.5% of EURangeFiltrowanie martwej strefy dla czujników HVAC: Ustawienie absolutnej martwej strefy 0,2–0,5°C dla zmiennych temperatury zapobiega zalewaniu subskrypcji trywialnymi aktualizacjami wywołanymi szumem. W przypadku liczników energii typowe jest procentowe martwe strefy 1% na licznikach kWh. Filtrowanie martwej strefy odbywa się po stronie serwera, zmniejszając zarówno obciążenie CPU, jak i ruch sieciowy.
Specyfikacje towarzyszące OPC UA
Specyfikacje towarzyszące rozszerzają podstawowy standard OPC UA o domenowe modele informacyjne. Definiują standardowe ObjectTypes, VariableTypes i przestrzenie nazw URI, tak aby urządzenia różnych producentów udostępniały dane w spójnej, interoperacyjnej strukturze. Inżynierowie automatyki budynkowej powinni znać następujące specyfikacje towarzyszące:
| Specyfikacja | Zakres | Kluczowe typy obiektów |
|---|---|---|
| IEC 62541-100 (OPC UA dla budynków) | Automatyka budynkowa: przestrzenie, strefy, urządzenia, pomiary energii | BuildingType, SpaceType, HVACSystemType, EnergyMeterType |
| OPC UA dla FDI (Integracja urządzeń polowych) | Urządzenia polowe: czujniki, siłowniki, przyrządy procesowe | DeviceType, FunctionBlockType, ParameterType |
| OPC UA dla PLCopen | Elementy programu PLC: bloki funkcyjne, alarmy, zadania | FunctionBlockType, AlarmType, TaskType |
| OPC UA dla I4.0 Asset Administration Shell | Cyfrowy bliźniak: metadane zasobów, podmodele, właściwości | AssetAdministrationShellType, SubmodelType |
| OPC UA dla urządzeń (DI) | Podstawowe informacje o urządzeniach sprzętowych | DeviceType, ComponentType, SoftwareType |
Potrzebujesz konfiguracji serwera OPC UA dla swojego projektu BMS?
Konfigurujemy i zabezpieczamy serwery OPC UA na Siemens DESIGO CC, Beckhoff TwinCAT i Kepware KEPServerEX – w tym zarządzanie certyfikatami, zaostrzanie polityki bezpieczeństwa i dostrajanie subskrypcji dla gęstych wdrożeń czujników.
Poproś o wycenę →