OPC UA · BACnet/IP · Modbus TCP · Kepware · UaExpert · Azure IoT · 11 min czytania

Bramka OPC UA do BACnet i Modbus: Tłumaczenie protokołów dla integracji BMS

Zdecydowana większość zainstalowanych urządzeń BMS – kontrolery BACnet/IP, liczniki energii Modbus TCP i urządzenia polowe Modbus RTU – nie implementuje serwera OPC UA. Bramka protokołowa wypełnia tę lukę: łączy się z urządzeniami starszymi za pomocą ich natywnych protokołów i udostępnia wszystkie odkryte punkty danych jako węzły OPC UA w jednej przeglądanej przestrzeni adresowej. Kepware KEPServerEX jest branżowym standardem do tej roli, wspieranym przez Siemens, Schneider i Rockwell Automation przy wdrożeniach bramek wieloprotokołowych BMS.

Dlaczego potrzebna jest bramka

Urządzenia BACnet/IP i BACnet MS/TP udostępniają dane za pośrednictwem usług obiektowych BACnet (ReadProperty, SubscribeCOV) – a nie usług OPC UA. Urządzenia Modbus TCP i RTU udostępniają dane jako ponumerowane rejestry bez wbudowanego nazewnictwa, informacji o typie ani zabezpieczeń. Klient OPC UA nie może komunikować się natywnie z żadnym z tych protokołów.

Bramka działa jako warstwa translacyjna. Po stronie południowej odpytuje lub subskrybuje urządzenia przy użyciu ich natywnych protokołów. Po stronie północnej uruchamia pełny serwer OPC UA, mapując każdy punkt danych urządzenia na nazwany, typowany węzeł zmiennej OPC UA. Rezultat: system SCADA, łącznik chmurowy lub platforma zarządzania energią widzi jeden punkt końcowy OPC UA zawierający wszystkie dane budynku, niezależnie od tego, czy bazowe urządzenia komunikują się za pomocą BACnet, Modbus, KNX czy SNMP.

COV vs. odpytywanie w bramce: Dla urządzeń BACnet obsługujących subskrypcje Change of Value (COV) skonfiguruj Kepware do używania SubscribeCOV zamiast okresowego odpytywania ReadProperty. COV zmniejsza ruch w sieci BACnet i zapewnia, że bramka odzwierciedla zmiany stanu natychmiast, zamiast czekać na następny cykl odpytywania. Urządzenia Modbus zawsze wymagają odpytywania – ustaw częstotliwość skanowania zgodnie z wymaganiami dotyczącymi świeżości danych (zwykle 1–10 sekund dla HVAC, 100–500 ms dla jakości zasilania).

Porównanie opcji bramek

BramkaSerwer OPC UAObsługa BACnetObsługa ModbusPlatforma
Kepware KEPServerEX 6Pełny serwer UA (wszystkie tryby bezpieczeństwa)BACnet/IP + MS/TP; BBMD; COVModbus RTU/TCP/ASCII; 65535 rejestrówWindows Server/PC
matrikon OPC UA TunnellerSerwer OPC UA + most DA/HDATylko przez pomost OPC DATylko przez pomost OPC DAWindows
Cogent DataHub OPC UAPełny serwer UABACnet/IP; ograniczone COVModbus TCPWindows
softing edgeConnector ModbusSerwer OPC UANie — tylko ModbusModbus TCP + RTUDocker / Linux / Windows
softing edgeConnector BACnetSerwer OPC UABACnet/IP + MS/TPNieDocker / Linux / Windows
Ignition (Inductive Automation)Serwer OPC UA (wbudowany)BACnet/IP przez moduł sterownikaSterownik Modbus TCP/RTUWindows / Linux (JVM)

Kepware KEPServerEX: Konfiguracja sterownika BACnet/IP

Sterownik Ethernet BACnet/IP firmy Kepware (licencjonowany oddzielnie od podstawowego pakietu KEPServerEX) łączy się z urządzeniami BACnet/IP w lokalnej podsieci lub przez routery za pomocą urządzenia zarządzającego rozgłoszeniami BACnet (BBMD). Po dodaniu kanału sterownika Kepware automatycznie wykrywa wszystkie widoczne urządzenia BACnet i importuje ich listy obiektów.

Konfiguracja sterownika Kepware BACnet/IP

Channel settings (Connectivity > BACnet/IP Ethernet):
  Network adapter: 192.168.10.5 (Kepware server OT NIC)
  UDP port: 47808 (BAC0 — standard BACnet/IP port)
  BACnet device instance: 1001 (Kepware gateway identity on BACnet network)
  BBMD address: 192.168.10.1 (router acting as BBMD for cross-subnet discovery)
  BBMD UDP port: 47808
  Foreign device registration: enabled (for devices on other subnets)

Auto-discovery:
  Tools > Device Discovery > BACnet/IP
  Scan range: all subnets registered on BBMD
  Result: discovered 47 BACnet devices with object counts
  Import: select all → creates Kepware device entries with all objects

COV subscription (preferred over polling):
  Device property > Subscriptions > Use COV: Enabled
  Lifetime: 3600 seconds (re-subscribe hourly)
  COV increment for Analog Values: 0.5 (only report if change > 0.5 units)
  Fallback poll rate (if COV not supported): 5000 ms

Każdy zaimportowany obiekt BACnet staje się znacznikiem Kepware. Kepware automatycznie mapuje właściwość BACnet Present_Value na główną wartość znacznika. Nazwa znacznika jest zgodna ze wzorem DeviceName.ObjectType_Instance.Property, na przykład: PXC_01.AnalogInput_1.Present_Value. Te znaczniki są natychmiast udostępniane jako węzły zmiennych OPC UA na wbudowanym punkcie końcowym OPC UA serwera KEPServerEX.

Modbus TCP do OPC UA: import mapy rejestrów

Urządzenia Modbus TCP wymagają jawnej konfiguracji mapy rejestrów – w przeciwieństwie do BACnet, nie ma samoopisującego się wykrywania obiektów. Sterownik Modbus TCP/IP Ethernet firmy Kepware akceptuje plik importu znaczników CSV lub ręczną konfigurację znaczników określającą adres rejestru, typ danych i konwersję inżynieryjną.

Konfiguracja znaczników Modbus TCP w Kepware

Channel: Modbus TCP/IP Ethernet
  Network adapter: 192.168.10.5
  Port: 502 (standard Modbus TCP port)
  Request timeout: 1000 ms
  Failure count before error: 3

Device: Schneider_PM5100
  IP address: 192.168.10.21
  Unit ID (slave address): 1
  Scan rate: 1000 ms (1 second)

Tags (imported from Schneider PM5100 register map):
  Tag name            | Address        | Data type | Scaling
  ActivePower_Total   | 400593 (HR593) | Float (4B) | ×1 → kW
  ActiveEnergy_Import | 400001 (HR001) | DWord (4B) | ×0.1 → kWh
  Voltage_L1_N        | 400003 (HR003) | Float (4B) | ×1 → V
  Current_L1          | 400013 (HR013) | Float (4B) | ×1 → A
  PowerFactor_Total   | 400085 (HR085) | Float (4B) | ×1 (dimensionless)
  Frequency           | 400073 (HR073) | Float (4B) | ×1 → Hz

# Tag addressing format for Kepware Modbus driver:
# Holding Register 40001 → address "400001" or "4:1"
# Input Register 30001   → address "300001" or "3:1"
# Coil 1                 → address "000001" or "0:1"
# Discrete Input 10001   → address "100001" or "1:1"

Mapowanie obiektów BACnet na węzły OPC UA

Kepware mapuje każdy typ obiektu BACnet na węzeł zmiennej OPC UA z odpowiednim typem danych OPC UA. Właściwość Present_Value obiektu BACnet staje się wartością węzła OPC UA. Właściwości Status_Flags i Reliability są mapowane na kod stanu OPC UA zmiennej.

Typ obiektu BACnetTyp Present_ValueTyp danych OPC UATypowe zastosowanie
Wejście analogowe (AI)REAL (Float)FloatCzujnik temperatury, ciśnienia, przepływu
Wyjście analogowe (AO)REAL (Float)Float (z możliwością zapisu)Zadana pozycja zaworu, prędkość wentylatora
Wartość analogowa (AV)REAL (Float)Float (z możliwością zapisu)Wartość zadana, wartość obliczona
Wejście binarne (BI)WYLICZENIOWY (Aktywny/Nieaktywny)Logiczny (Boolean)Stan włącz/wyłącz, stan alarmu
Wyjście binarne (BO)WYLICZENIOWY (Aktywny/Nieaktywny)Boolowski (do zapisu)Polecenie załącz/wyłącz, sterowanie przekaźnikiem
Wartość binarna (BV)WYLICZENIOWY (Aktywny/Nieaktywny)Boolowski (do zapisu)Flaga trybu, stan nadrzędny
Wejście wielostanowe (MI)UNSIGNED INTInt32Odczyt trybu pracy (Wył=0, Grzanie=1, Chłodzenie=2)
Wyjście wielostanowe (MO)UNSIGNED INTInt32 (zapisywalny)Polecenie trybu, krok prędkości
Wartość wielostanowa (MV)UNSIGNED INTInt32 (zapisywalny)Konfigurowalna wartość wyliczeniowa
AkumulatorUNSIGNED INT (32-bit)UInt32Licznik impulsów: kWh, m³, litry

Bezpieczeństwo bram OPC UA

Brama OPC UA to urządzenie graniczne IT/OT. W przypadku naruszenia atakujący może zapisywać na zapisywalne wyjścia BACnet (zawory, przekaźniki) lub cewki Modbus za pomocą usługi zapisu OPC UA. Zastosuj obronę w głąb: segmentację sieci, uwierzytelnianie oparte na certyfikatach i minimalne uprawnienia do zapisu.

Kontrola bezpieczeństwaImplementacja
Dedykowane VLAN OTUmieść serwer Kepware w izolowanej sieci VLAN; urządzenia BACnet i Modbus w tej samej sieci VLAN; bez bezpośredniego routingu do sieci IT LAN
Reguły zapory sieciowejZezwalaj na przychodzące TCP 4840 tylko ze znanych adresów IP klientów OPC UA; blokuj wszystkie inne przychodzące; zezwalaj na wychodzące Kepware do BACnet UDP 47808 i Modbus TCP 502
Uwierzytelnianie certyfikatemWyłącz anonimowe; wymagaj certyfikatów klienta X.509; importuj zaufane certyfikaty klienta do magazynu zaufania Kepware
Kontrola dostępu użytkowników KepwareUtwórz rolę UA tylko do odczytu dla klientów monitorujących; rolę UA do odczytu i zapisu tylko dla integracji BMS; MFA na konsoli administracyjnej Kepware
Ochrona zapisu na poziomie tagówUstaw tagi Modbus na Tylko do odczytu w Kepware, gdzie zapis nie jest wymagany; tagi BACnet AO/BO/MO włączone do zapisu tylko dla roli SCADA
Rejestrowanie audytuWłącz dziennik zdarzeń Kepware; przekaż do dziennika zdarzeń systemu Windows → SIEM; alarmuj przy nieautoryzowanych próbach zapisu

Domyślny port 4840: Kepware KEPServerEX domyślnie nasłuchuje na porcie TCP 4840 — zarejestrowanym przez IANA porcie OPC UA. Port ten musi być otwarty w Zaporze systemu Windows na hoście Kepware, aby klienci OPC UA mogli się połączyć. Nie wystawiaj portu 4840 na niezaufane sieci. Jeśli serwer Kepware wymaga dostępnego przez internet OPC UA (dla łączników chmurowych), użyj odwrotnego proxy z wzajemnym TLS zamiast bezpośredniego przekierowania portów.

Testowanie połączeń OPC UA za pomocą UaExpert

UaExpert (firmy Unified Automation) to standardowy darmowy klient OPC UA do uruchamiania i diagnostyki. Oferuje pełną przeglądarkę przestrzeni adresowej, monitorowanie danych w czasie rzeczywistym, testowanie subskrypcji i zarządzanie certyfikatami bezpieczeństwa. Pobierz z unified-automation.com (wymagana darmowa rejestracja).

UaExpert — kroki połączenia i weryfikacji

1. Add server:
   Server menu > Add > Advanced > Enter URL:
   opc.tcp://192.168.10.50:4840
   Security policy: Basic256Sha256
   Message security mode: SignAndEncrypt
   Authentication: Certificate (browse to client_cert.pem + client_key.pem)

2. First connection — certificate exchange:
   UaExpert generates a self-signed client cert on first run
   Server will show certificate as "untrusted" initially
   On Kepware: OPC UA Configuration > Trusted Clients > Move cert to Trusted
   On UaExpert: OPC UA > Manage Certificates > Trust the server cert

3. Browse address space:
   Expand Root > Objects > (your channel name) > (device name)
   Locate BACnet tags: PXC_01 > AnalogInput_1 > Present_Value
   Locate Modbus tags: Schneider_PM5100 > ActivePower_Total

4. Read values:
   Double-click any Variable node to open Data Monitor
   Verify values match expected engineering units and range
   Check StatusCode column — should show "Good (0x00000000)"
   StatusCode "Bad_NoCommunication" → check BACnet/Modbus connectivity from Kepware

5. Create subscription:
   Data Access View panel (bottom): drag Variable nodes from address space
   Set PublishingInterval 1000 ms
   Watch values update in real time — confirms subscription pipeline is working

6. Test write (writable tags only):
   Right-click Variable node > Write Value
   Enter test value within EU range
   Verify change reflected on BACnet device Present_Value
   Note: writes on Kepware require the connecting client to have write permission in UA role

Integracja z chmurą za pomocą Azure IoT Hub OPC Publisher

Azure IoT Hub OPC Publisher to otwartoźródłowy klient OPC UA firmy Microsoft, który łączy się z serwerami OPC UA (w tym Kepware) i przekazuje telemetrię do Azure IoT Hub. Działa jako moduł Azure IoT Edge na hoście kontenera Linux w budynku, łącząc warstwę OT OPC UA z usługami chmurowymi Azure.

OPC Publisher — publishednodes.json dla Kepware

// publishednodes.json — defines which OPC UA nodes to publish to Azure IoT Hub
[
  {
    "EndpointUrl": "opc.tcp://192.168.10.50:4840",
    "UseSecurity": true,
    "OpcAuthenticationMode": "UsernamePassword",
    "OpcAuthenticationUsername": "azure-publisher",
    "OpcAuthenticationPassword": "<from keyvault>",
    "OpcNodes": [
      {
        "Id": "ns=2;s=Channel1.PXC_01.AnalogInput_1.Present_Value",
        "DisplayName": "AHU01_SupplyAirTemp",
        "OpcPublishingInterval": 10000,
        "OpcSamplingInterval": 5000,
        "HeartbeatInterval": 60
      },
      {
        "Id": "ns=2;s=Channel1.Schneider_PM5100.ActivePower_Total",
        "DisplayName": "MainMeter_ActivePower_kW",
        "OpcPublishingInterval": 5000,
        "OpcSamplingInterval": 2000
      },
      {
        "Id": "ns=2;s=Channel1.Schneider_PM5100.ActiveEnergy_Import",
        "DisplayName": "MainMeter_Energy_kWh",
        "OpcPublishingInterval": 60000,
        "OpcSamplingInterval": 30000,
        "SkipFirst": true
      }
    ]
  }
]

// Azure IoT Hub receives JSON telemetry:
// {
//   "NodeId": "ns=2;s=Channel1.Schneider_PM5100.ActivePower_Total",
//   "DisplayName": "MainMeter_ActivePower_kW",
//   "Value": { "Value": 47.3, "StatusCode": "Good", "SourceTimestamp": "2025-03-14T10:30:00Z" }
// }

Z usługi Azure IoT Hub dane telemetryczne są kierowane do Azure Time Series Insights, Azure Data Explorer lub niestandardowego zadania Azure Stream Analytics na potrzeby pulpitów nawigacyjnych KPI energii w czasie rzeczywistym w Power BI. Kontener OPC Publisher zarządza ponownym łączeniem, buforowaniem podczas utraty łączności (konfigurowalne store-and-forward) oraz zarządzaniem certyfikatami dla połączenia OPC UA z Kepware.

Potrzebujesz bramy BACnet lub Modbus do OPC UA dla swojego projektu?

Konfigurujemy i uruchamiamy bramy Kepware KEPServerEX łączące urządzenia budynkowe BACnet/IP, Modbus TCP i KNX z klientami OPC UA, platformami SCADA i Azure IoT Hub – z pełnym wzmocnieniem bezpieczeństwa i zarządzaniem certyfikatami.

Poproś o wycenę →
Ładowanie...
Powrót do góry