26.3.2024

Toto všetko dokáže protokol DNP3. Poznáte ho?

Zhruba od konca februára som pracoval na implementáci protokolu DNP3 do aplikačného servera reálneho času Ipesoft D2000. Čo teda protokol DNP3 vie, na čo sa dá použiť a aké má výhody a nevýhody?

Skratka DNP3 znamená Distributed Network Protocol, verzia 3. Napriek honosnému názvu sa jedná v podstate o štandardný master-slave protokol používaný v riadiacich systémoch a automatizácii.

Protokol DNP3 bol vyvinutý v roku 1990 firmou Westronic (dnes GE Harris) a zverejnený v roku 1993. V tom čase ešte len prebiehal vývoj štandardov IEC 60870-5 (z nich najznámejšie sú IEC 60870-5-101 určený na point-to-point master-slave komunikáciu na sériovej linke a IEC 60870-5-104 pre siete TCP).

Kým sa dokončila štandardizácia IEC 60870-5, protokol DNP3 si stihol získať obľubu najmä v Spojených štátoch a v Ázii. V Európe sa majoritne používajú IEC 60870-5. Ale napríklad Simatic S7 protokol DNP3 podporuje. Podobne ako Rockwell ControlLogix alebo Modicon M340. Pozor – podpora je väčšinou prostredníctvom fyzických komunikačných modulov prípadne komunikačných procesorov, ktoré je nutné zakúpiť a pripojiť k PLC.

Obr: Modicon M340 s podporou protokolu DNP3

Takže – čo je na DNP3 také zaujímavé? Skúsim spomenúť niektoré vlastnosti a porovnať ich s protokolmi IEC 60870-5-101 a IEC 60870-5-104.

Médium

DNP3 je určený primárne pre sériové linky (rovnako ako IEC 101), ale je použiteľný aj na IP sieťach po zabalení do TCP alebo UDP paketov. Z IEC štandardov sa IEC 101 používa zabalená do UDP alebo TCP (napríklad pri konverzii pomocou Moxa NPort sériových serverov)  a IEC 104 je priamo určený pre TCP siete.

Implementácia DNP3 v D2000 KOM procese podporuje tieto typy liniek:

Počet zariadení

Protokol DNP3 je použiteľný na point-to-point aj point-to-multipoint komunikáciu (t.j. napr. na zbernici RS-485 s jednou master stanicou (väčšinou SCADA) a viacerými slave stanicami (v terminológii DNP3 sa nazývajú outstation a sú to PLC, RTU alebo iné IED – Intelligent Electronic Devices). Poznámka: DNP3 podporuje posielanie spontánnych zmien slave stanicami - s použitím aplikačnej funkcie Unsolicited Response (130). Pokiaľ je na zbernici viacero staníc, pri použití tejto funkcionality by mohlo dôjsť ku kolíziam.

Master aj slave stanice sú identifikované 2-bajtovým číslom z intervalu 0-65 519. Vyššie adresy sú rezervované pre broadcasty, ako „self-adresa“ alebo pre budúce rozšírenie.

Protokoly IEC-101 aj IEC-104 sú naproti tomu určené iba pre point-to-point komunikáciu – jeden master, jeden slave. Existuje tzv. „Common address of ASDU“, ktorá sa v D2000 mapuje na adresu stanice (1 alebo 2 bajty pre IEC-101 a 2 bajty pre IEC-104).

Pseudo-transportná  vrstva

Protokol DNP3 dokáže prenášať aj veľké správy – jeho tzv. pseudo-transportná vrstva ich rozdelí do rámcov s maximálne 249 dátovými bajtami. Podľa štandardu musí vedieť zariadenie obmedziť veľkosť správ na maximálne 2048 bajtov, aby nezahltilo buffre menej výkonného partnera.

Protokoly IEC-101 a IEC-104 nemajú podobné možnosti keďže na veľkosť dát majú vyhradený iba jeden bajt a v každom rámci môžu poslať max. 253 bajtov. Takže aj nároky na spracovanie takýchto správ sú nižšie.

Dátový model

 Protokol DNP3 definuje skupiny objektov (Groups) definované 1-bajtovým číslom skupiny, napr. Binary Input (1), Binary Input Event (2), Double-bit Binary Input (3), ..

 V rámci skupiny je objekt identifikovaný indexom. Index je nezáporné číslo, podľa jeho veľkosti môže byť prenášané ako 1, 2 alebo 4-bajtové číslo.

 Každá skupina objektov má definovaných niekoľko formátov, ktoré sa označujú ako variácie (Variations). Napríklad skupina Counter (20) má variácie:

  • 32-bit with flag (1)
  • 16-bit with flag (2)
  • 32-bit with flag, delta (obsolete) (3)
  • 16-bit with flag, delta (obsolete) (4)
  • 32-bit without flag (5)
  • 16-bit without flag (6)
  • 32-bit without flag, delta (obsolete) (7)
  • 16-bit without flag, delta (obsolete) (8)

Niektoré skupiny objektov sú používané na čítanie hodnôt, iné na zápis. Navyše, okrem „hodnotových skupín“ existujú aj „udalostné skupiny“, pomocou ktorých sa prenášajú zmeny hodnôt. Napríklad variácie skupiny Counter (20) sa používajú v žiadostiach o čítane objektov z tejto skupiny, ale variácie skupiny Counter Event (22) sa používajú v správach o spontánnych zmenách hodnôt – vyššie spomenuté Unsolicited Response (130) správy ako aj odpovede na dotazovanie celej skupiny hodnôt (polling, viď nižšie).

Obr: v konfigurácii meraného bodu musia byť zadané vždy aspoň parametre Group a Index

Pri explicitnom čítaní si môže master vyžiadať konkrétnu variáciu v rámci skupiny. Ak použije variáciu 0, znamená to, že nemá preferovaný formát a nechá jeho výber na podriadenú stanicu.

Obr: časť tabuľky so zoznamom skupín objektov a variácií pre jednotlivé skupiny.

Ako sú na tom IEC protokoly?

Adresy objektov (mapované na adresy meraných bodov v D2000) sú 1-3 bajty pre IEC-101 a 3 bajty pre IEC-104.

Protokoly IEC-101 aj IEC-104 sú „skromnejšie“ aj v reprezentácii hodnôt - definujú typy ASDU (Application Service Data Unit) iba v závislosti od ich numerických charakteristík. Pre prenos hodnôt majú sadu ASDU bez časových značiek (single point, double point, 32-bit floating number, 32-bit bitstring a iné) a ďalšiu s krátkou časovou značkou (milisekundy až minúty v rámci hodiny) a ešte jednu s dlhou časovou značkou (milisekundy až roky v rámci storočia). Navyše majú podobné dve sady ASDU pre príkazy (single command, double command, set point command 32-bit floating number, set point command 32-bit bitstring) – tentokrát bez časovej značky a s dlhou časovou značkou.

Z tohto pohľadu je DNP3 náročnejšia na implementáciu; na druhej strane sa mi páči, že poskytuje aj variácie pre 64-bitové hodnoty (celočíselné aj s pohyblivou rádovou čiarkou), ktoré nám v praxi v protokole IEC-104 chýbali (takže sme ich implementovali nad rámec štandardu – viď ASDU 241 a 243 v dokumentácii IEC 60870-5-104).

Ešte poznámka k reťazcom – IEC protokoly nemajú žiadnen typ ASDU použiteľný na prenos reťazcov. DNP3 má skupinu Octet String (110), pomocou ktorej môže prenášať reťazce bajtov s dĺžkou maximálne 255 bajtov.

Triedy objektov

 Protokol DNP3 umožňuje zaradiť objekty do jednej zo štyroch tried:

  • Class 0 – statické dáta (objekty, ktorých zmeny sa nezaznamenávajú)
  • Class 1 – dynamické dáta, priorita 1 (zvyčajne high)
  • Class 2 – dynamické dáta, priorita 2 (zvyčajne middle)
  • Class 3 – dynamické dáta, priorita 3 (zvyčajne low)

Podľa normy požiadavka na čítanie (tzv. Poll požiadavka) dát z triedy Class 0 vráti aktuálne hodnoty pre objekty zo všetkých tried Class 0-3. Dotaz na dáta z Class 1-3 vráti udalosti (zmeny hodnôt) príslušnej triedy.

 Preto sme v implementácii DNP3 podporili na stanici štyri parametre na nezávislú konfiguráciu štyroch typov Poll požiadaviek. V konkrétnej konfigurácii sa môže napríklad každých 10 sekúnd vygenerovať Poll požiadavka pre Class 1-3 a raz za 10 minút tzv. „integrity poll“ - Poll požiadavka pre Class 0, vracajúca aktuálne hodnoty objektov vo všetkých triedach Class 0-3.

Obr: parametre protokolu konfigurovateľné na DNP3 stanici – intervaly pre Poll  tried Class 1-3 boli zmenšené z 10 na 5 sekúnd, interval pre Poll triedy Class 0 je prednastavený na 600 sec.

Protokoly IEC-101 aj IEC-104  umožňujú zaradiť objekty až do 16 skupín a počítadlá (counters) do 4 ďalších skupín. V praxi sme si zatiaľ vystačili s posielaním obecnej „station interrogation“, pomocou ktorej pri nadväzovaní spojenia zistíme aktuálne hodnoty všetkých objektov. Následne sa prenášajú už iba zmeny.

Komunikácia - request – response a iné

Protokol DNP3 podporuje teda posielanie Poll požiadaviek na jednotlivé triedy. Norma ale zároveň hovorí, že niektoré objekty nemusia byť zaradené v žiadnej triede – takže musí podporovať aj explitné dotazovanie sa na hodnoty.

Aby sa dala v D2000 pre rôzne objekty nastaviť individuálna perióda generovania požiadaviek na čítanie, v nastaveniach meraného bodu je možné špecifikovať parameter Read Period. Pokiaľ parameter nie je zadaný, uplatnia sa časové parametre nakonfigurované na stanici, ktorá je rodičom meraného bodu.

V požiadavke na čítanie je možné špecifikovať okrem skupiny a variácie aj rozsah objektov (parameter Range). Je možné čítať konkrétny objekt, rozsah (špecifikovaním 1, 2 alebo 4-bajtových identifikátorov From/To), prípadne použiť voľbu No range, ktorá spôsobí čítanie všetkých objektov zvolenej skupiny. Táto vlastnosť DNP3 protokolu umožňuje optimalizovať počet požiadaviek na čítanie. Hodnoty objektov, ktoré prídu v odpovedi, budú zapísané do meraných bodov na základe zhody parametrov Group+Index.

Obr: Meraný bod s nakonfigurovaným explicitným čítaním s 30-sekundovou periódou. V požiadavke na čítanie bude variácia=0 (automatická) a rozmedzie objektov triedy Analog Output Status (40) s indexami 0 až 3, takže sa načítajú hodnoty štyroch objektov.

Tretí spôsob komunikácie je posielanie zmien hodnôt podriadenou stanicou spontánne, t.j. bez potreby dotazu zo strany master stanice – už spomínaná funkcia Unsolicited Response (130). Tento spôsob je vhodný tam, kde je k dispozícii full-duplex linka a komunikuje iba jedna slave stanica, prípadne je komunikácia „občasná“. V opačnom prípade by dochádzalo ku kolíziam medzi spontánnymi správami a správami inej slave stanice alebo master stanice.

Navyše každá odpoveď v DNP3 protokole obsahuje 16-bitové pole Internal indications, ktoré informuje mastra nielen o výsledku požiadavky, ale aj o stave stanice. Tri z týchto príznakov hovoria práve o tom, že sú k dispozícii udalosti tried Class 1-3, ktoré sa dajú vyčítať príslušnou Poll požiadavkou. D2000 KOM proces pri prijatí takýchto príznakov automaticky generuje Poll požiadavky (aj mimo nakonfigurovanej periodicity).

Obr: popis jednotlivých bitov v rámci poľa Internal indications. Okrem bitov 1-3 hovoriacich o dostupnosti udalostí príslušnej triedy reaguje D2000 KOM aj na bit 4 – NEED_TIME. V prípade, že je povolená na stanici časová synchronizácia, pošle mimo poradia príkaz na nastavenie času. Obslúžený je aj bit 7 (DEVICE_RESTART) oznamujúci, že zariadenie bolo reštartované. D2000 KOM naň reaguje príkazom na resetovanie tohto bitu.

Protokoly IEC-101 a IEC-104 nemajú takéto bohaté možnosti – vystačia si s už vyššie spomenutým mechanizmom poslania „interrogation“ na získanie hodnôt všetkých objektov a následne sa prenášajú iba zmeny.

Robustnosť

Protokol DNP3 je určený aj do silne zarušeného prostredia. Implementuje samostatné polynomiálne CRC kontroly pre hlavičku ako aj pre dáta, pričom dáta delí na 16-bajtové balíčky, z ktorých každý má opäť samostatné zabezpečenie CRC.

Obr: formát DNP3 hlavičky. Dva štartovacie bajty, dĺžka celého paketu, riadiaci bajt, 2-bajtové adresy cieľovej a zdrojovej stanice a následne dva bajty CRC.

Môžem povedať, že DNP3 má najdôkladnejšiu kontrolu zo všetkých protokolov, ktoré som implementoval alebo s ktorými som sa stretol. Táto skutočnosť ma robí silne podozrievavým voči kvalite sériových liniek v Spojených štátoch ...

To ale nie je všetko, čo sa týka robustnosti v DNP3. Na zápis okrem jednoduchej funkcie Write (vracajúcej iba pole Internal indications) ponúka aj bezpečnú sekvenciu funkcií Select + Operate. Odpoveď na každu z požiadaviek obsahuje všetky dáta požiadavky (skupina, index, zapisovaná hodnota), takže master si môže dvakrát overiť, že jeho príkaz prešiel nepoškodený tam aj späť. Podriadená stanica zas vykoná príkaz až po prijatí obidvoch požiadaviek SelectOperate, pričom dáta v nich musia byť identické. Pravdepodobnosť, že by sa v dôsledku nedetekovaného poškodenia dát na linke dokázal vykonať chybný povel, je prakticky nulová.

Existuje aj „niečo medzi“ funkciou Write a funkciami Select + Operate – zápis s použitím funkcie Direct Operate prebehne ihneď, ale odpoveď obsahuje všetky dáta požiadavky, takže si ich master môže skontrolovať. No a nakoniec, existuje funkcia Direct Operate Non Return, ktorá vykoná zápis a nevráti nič (takže master nemá žiadnu informáciu o tom, či sa zápis podaril alebo nie).

Obr: časť konfiguračného dialógu meraného bodu, v ktorom vidieť konfiguráciu výstupného meraného bodu s výberom typu zápisu.

Protokoly IEC-101 a IEC-104 ponúkajú zhruba ekvivalent akcie funkcie Direct Operate – zápis je potvrdzovaný rovnakou ASDU.

Čo sa týka kontroly konzistencie dát, IEC-101 má jednoduchú - bajtovú kontrolnú sumu (súčet hodnôt dátových bajtov), IEC-104 sa spolieha na kontroly TCP vrstvy.

Synchronizácia času

Protokol DNP3 ako aj IEC-101 a IEC-104 majú podporu pre synchronizáciu času podriadených staníc zo strany mastra. Implementácie týchto protokolov v D2000 KOM procese dokážu synchronizovať čas podriadených staníc -  konfigurácia sa nachádza štandardne v časových parametroch stanice. Ako bolo napísané vyššie, podriadená stanica vie informovať o tom, že potrebuje synchronizovať čas jedným bitom z poľa Internal indications.

Obr: v rámci časových parametrov stanice je možnosť zapnúť synchronizáciu času a nastaviť jej periódu (na obrázku nastavená 1 hodina).

Bezpečnosť

 Protokol DNP3 podporuje bezpečnú autentifikáciu (Secure Authentication) s využitím kľúča zdieľaného obidvoma stranami, slúžiacu na to, aby:

  • si master overil, že skutočne komunikujú s konkrétnou podriadenou stanicou
  • si stanica overila, že master je autorizovaný použiť služby stanice

Pokiaľ master požaduje funkcionalitu, ktorú stanica považuje za privilegovanú, stanica si od neho vyžiada overenie totožnosti.

Obr: výskyt Authentication Challenge / Response správ v dôsledku požadovanej „kritickej“ funkcionality (napr. ovládanie, nastavenie požadovaných hodnôt, zmena parametrov)

DNP3 protokol okrem bezpečnej autentifikácie neimplementuje kryptovanie dát ani iné bezpečnostné vlastnosti.

IEC protokoly nemajú žiadnu zabudovanú bezpečnosť.

 Bezpečná autentifikácia momentálne v D2000 KOM procese nie je podporená.

Čerešnička na záver – browsing

Pokiaľ je funkčná komunikácia s DNP3 stanicou, D2000 KOM proces dokáže na požiadanie zobraziť zoznam doteraz prijatých objektov a ich hodnôt. Navyše vie poslať požiadavky na čítanie objektov všetkých podporovaných skupín. Toto je využiteľné pri konfigurácii meraných bodov – zo zoznamu objektov stačí vybrať konkrétny riadok a do konfigurácie meraného bodu sa vloží príslušná skupina a index.

Zobrazený je aj stĺpec Source, ktorý udáva, ako hodnota prišla:

  • READ – výsledok explicitného čítania
  • POLLED – výsledok odpovede na Poll požiadavku
  • SPONTANEOUS – spontánna správa funkciou Unsolicited Response (130)

Implementácia priebežne aktualizuje stĺpec Value, takže užívateľ vidí okamžité hodnoty objektov.

Obr: browsovací dialóg DNP3 protokolu. Okrem stĺpcov s názvom skupiny, indexom objektu, typom zdroja a hodnotou je tu aj stĺpec Point, v ktorom je názvov meraného bodu, ktorý má zhodnú skupinu a index ako zobrazený objekt. Tlačidlo Refresh spôsobí, že D2000 KOM proces zahodí všetky nazbierané dáta a vykoná nové dotazovanie stanice.

Záver

Protokol DNP3 je americkým „bratrancom“ protokolov IEC-101 a IEC-104. V niektorých aspektoch sa mi páči pre svoju väčšiu variabilitu a vyjadrovacie schopnosti. V inom (napr. pre naše podmienky predimenzované kontroly konzistencie dát alebo komplikácie s pseudo-transportnou vrstvou) sa mi viac páči návrh IEC protokolov. Každopádne, pre nasadenia D2000 mimo územia Európy je podpora DNP3 nutnou podmienkou.

V súčasnosti je ukončená implementácia DNP3 v aplikačnom serveri reálneho času D2000 a prebehlo aj testovanie voči dvom softvérovým DNP3 serverom. Ďalšia vydaná verzia (12.1) už bude tento protokol obsahovať.

Iné blogy