Kontaktné údaje
- info@ipesoft.com
- +421 907 703 854
- Obchodná 9076/3D
010 08 Žilina
Slovensko
© Copyright IPESOFT 2023
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.
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.
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).
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.
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:
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).
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.
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.
Protokol DNP3 umožňuje zaradiť objekty do jednej zo štyroch tried:
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.
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.
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.
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).
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.
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.
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 Select a Operate, 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).
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.
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.
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:
Pokiaľ master požaduje funkcionalitu, ktorú stanica považuje za privilegovanú, stanica si od neho vyžiada overenie totožnosti.
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á.
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:
Implementácia priebežne aktualizuje stĺpec Value, takže užívateľ vidí okamžité hodnoty objektov.
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ť.