Promotic

PmDNP3 - Ovladač pro komunikaci protokolem DNP3

Tento ovladač slouží pro komunikaci se zařízeními, které podporují protokol DNP3. Viz Komunikace protokolem DNP3.

Před použitím tohoto ovladače v aplikaci PROMOTIC je vhodné shlédnout "PROMOTIC video kurz 4 - Komunikační ovladače".

Základní vlastnosti ovladače:
- Použití tohoto ovladače vyžaduje zakoupení licence PmDNP3. Při vývoji aplikace ve freeware módu PmFree nebo s vývojovou licencí a při jejím testování v runtime je tato komponenta vždy funkční.
- Komunikace je pro Ethernet (aplikace PROMOTIC je klient).
- Ovladač je začleněn do systému PROMOTIC pomocí objektu PmaComm.
Ovladač podporuje použití objektů PmaCommMsg a PmaCommGroup. Pro běžné případy přenosu dat je lepší použít objekt PmaCommGroup.
Pro snadné přidání tohoto ovladače do aplikace je vhodné použít: Předkonfigurace ve skupině "DNP3"


Doporučené hodnoty parametrů objektu PmaComm:

Doporučené hodnoty pro Parametry Ethernet-klient:
Číslo vzdáleného TCP/UDP portu20000 (podle normy DNP3)
 
Viz: Wikipedia: Seznam čísel portů TCP a UDP používaných protokoly pro provoz síťových aplikací.
Typ Ethernet přenosuTCP (povinné)
Timeout přenosu jednoho paketu [ms]2000
Filtrovat ECHO znakyNe
Popis a doporučené hodnoty pro Parametry protokolu:
DNP3 adresa této aplikaceDNP3 adresa této aplikace PROMOTIC.
Výchozí hodnota je 0.
Keep-Alive Timer [ms]Timeout (v milisekundách) pro testování, zda je aktivní TCP spojení.
Pokud po tuto dobu není nic přeneseno, pak je na příslušnou DNP3 adresu (outstation) poslána systémová zpráva REQUEST_LINK_STATUS.
Výchozí hodnota je 5000.
Povolit časovou synchronizaciPokud je zatrženo, pak po příjmu zprávy ze zařízení, ve které je nastaven bit Bit 4: NEED_TIME, ovladač automaticky zašle do tohoto zařízení zprávu typu "Time Synchronization".

Popis komunikace pomocí objektu PmaCommGroup

Popis konfigurátoru "ItemId":
ItemId je textový identifikátor položky, který slouží k adresaci položky v zařízení. Z konfigurátoru ItemId ovladač pozná, jak se má hodnota položky přijímat nebo vysílat.
Text lze buď napsat ručně, nebo sestavit v okně, které se otevře tlačítkem vpravo od konfigurátoru.
Pro zadání lze použít Makro výraz (vyhodnocuje se po spuštění aplikace).
Identifikátor ItemId může mít podobu například "dev1.g30.v0.i20.tFlag", kde:
dev1 = Položka je v zařízení (device) s adresou 1.
Místo čísla lze zadat devD (=default adresa) a adresa zařízení bude určena podle konfigurátoru "Přednastavená adresa zařízení (outstation)".
g30 = Číslo Group. Viz Podporované typy dat.
v0 = Číslo Variation (nepovinné). Viz Podporované typy dat.
Pokud není uvedeno, pak je v0, tzn. stanice (outstation) pošle hodnotu ve formátu, který ona uzná za vhodný.
i20 = Index položky (nepovinné).
Pokud není uvedeno, pak je i0.
tFlag = Typ položky (nepovinné).
Pokud není uvedeno, pak je to hodnota položky.
Pokud je tFlag, pak je to Flag položky.
 
Popis konfigurátoru "PmaCommGroup > Parametry > Speciální parametry":
Přednastavená adresa zařízení (outstation)Adresa zařízení, se kterým se má komunikovat.
Zařízení má často adresu s hodnotou 1.
Maximální počet objektů přenášených v jedné zprávěObjekt PmaCommGroup vytvoří skupiny proměnných, na které se bude dotazovat v jednotlivých komunikačních zprávách.
Zde lze zadat kolik proměnných bude maximálně v jedné zprávě.
Maximální počet souvislých mezer mezi objekty v jedné zprávěKomunikační zpráva, která se dotazuje na proměnné, může obsahovat pouze proměnné stejného typu následující adresně v pořadí za sebou.
Zde lze zadat počet nepoužitých proměnných, které se budou ve zpráve přenášet.

Popis komunikace pomocí objektu PmaCommMsg:

Seznam a popis komunikačních zpráv:
- Read Static Points:
Tato zpráva není určena pro skupiny typu:
- Info (tzn. Group 60 = Class objects).
Pro tyto přenosy je určena zpráva Read Batch of Points.
Parametry zprávy:
Maximální počet čtených položekMaximální počet položek, které se mohou přijímat najednou v odpovědi této zprávy.
Požadovaný počet čtených položek se pak určuje v proměnné Count v kartě "Data-příjem".
Co uložitUrčuje co se bude ukládat do karty "Data-příjem":
0 = Value (+Quality+Time) -
Pro jednu DNP3 položku bude v kartě "Data-příjem" jen jedna proměnná (ValN) a v ní bude uložena hodnota (ve vlastnosti PmVar.Value).
Pokud ve zprávě s touto položkou příjde i čas nebo Flag, pak se čas do proměnné uloží do vlastnosti PmVar.TimeSource a Flag se přepočte do vlastnosti PmVar.Quality.
1 = Value+Flag (+Quality+Time) -
Pro jednu DNP3 položku budou dvě proměnné.
Do první proměnné (ValN) se uloží hodnota (do vlastnosti PmVar.Value)
Pokud ve zprávě s touto položkou příjde i čas nebo Flag, pak se čas uloží do vlastnosti PmVar.TimeSource a Flag se přepočte do vlastnosti PmVar.Quality.
Do druhé proměnné (FlagN) se uloží hodnota Flag dané DNP3 položky.
Pokud tato položka neobsahuje Flag, pak se uloží hodnota 0.
V kartě "Data-zaslání" jsou proměnné:
ItemId: (String) Identifikátor první čtené položky.
Tvar tohoto identifikátoru je stejný jako v objektu PmaCommGroup, viz Popis konfigurátoru "ItemId".
Všechny další položky budou stejného typu, jen budou podle indexu následovat za sebou.
Count: (Long) Požadovaný počet čtených položek.
Hodnota musí být menší nebo rovna hodnotě v konfigurátoru "Maximální počet čtených položek".
V kartě "Data-příjem" jsou proměnné:
IntInd: (Long) Internal Indications.
Bity v této hodnotě (typu Long) indikují stavy a chybové příznaky v rámci stanice (v outstation).
Viz Hodnoty v proměnné Internal Indications.
Val0: (Variant) První čtená hodnota.
Flag0: (Long) Flag první čtené hodnoty.
Tato proměnná je zde pouze pokud v konfigurátoru "Co uložit" je nastavena volba 1 = Value+Flag (+Quality+Time).
Za těmito proměnnými jsou další proměnné Val1, Flag1, Val2, Flag2 ... Jejich počet je určen hodnotou v konfigurátoru "Maximální počet zapisovaných položek".

- Write Static Points:
Tato zpráva je určena pro zápis dat ze skupin typu Static, tzn. pro:
Parametry zprávy:
Maximální počet zapisovaných položekMaximální počet položek, které se v této zprávě mohou posílat najednou.
Požadovaný počet zapisovaných položek se pak určuje v proměnné Count v kartě "Data-příjem".
V kartě "Data-zaslání" jsou proměnné:
ItemId: (String) Identifikátor první zapisované položky.
Tvar tohoto identifikátoru je stejný jako v objektu PmaCommGroup, viz Popis konfigurátoru "ItemId".
Všechny další položky budou stejného typu, jen budou podle indexu následovat za sebou.
Count: (Long) Požadovaný počet zapisovaných položek.
Hodnota musí být menší nebo rovna hodnotě v konfigurátoru "Maximální počet zapisovaných položek".
Val0: (Variant) První zasílaná hodnota.
Za těmito proměnnými jsou další proměnné Val1, Val2 ... Jejich počet je určen hodnotou v konfigurátoru "Maximální počet zapisovaných položek".
V kartě "Data-příjem" jsou proměnné:
IntInd: (Long) Internal Indications.
Bity v této hodnotě (typu Long) indikují stavy a chybové příznaky v rámci stanice (v outstation).
Viz Hodnoty v proměnné Internal Indications.
Error: (Long) Hodnota úspěšnosti přenosu zprávy.
Seznam hodnot viz parametr pEvent.Error v události PmaCommMsg.onEndOfTransfer.

- Read Batch of Points: Tato zpráva nečte konkrétní položku z nějaké skupiny ale čte:
- buď jen změněné položky v dané skupině
- nebo všechny položky v dané skupině (pouze pro g60.v1).
Dopředu tedy není určeno které položky se přijmou, kolik jich bude a dokonce v jedné odpovědi může být jedna položka i vícekrát (pokaždé např. s jiným časem změny).
Proto v odpovědi (v proměnné Data) je hodnota typu String, ve které jsou všechny položky uloženy ve formátu JSON.

V kartě "Data-zaslání" jsou proměnné:
ItemId: (String) Tvar tohoto identifikátoru je podobný jako v objektu PmaCommGroup, viz Popis konfigurátoru "ItemId".
Tímto identifikátorem se zde však neadresuje konkrétní položka, ale celá skupina. Proto má tento identifikátor jednodušší tvar,
např. g32.v5 (tzn. požadavek na příjem změn alarmních vstupů, v5=floating-point with time). Zde se nezadává index, protože se dopředu neví které položky se změnily.
V kartě "Data-příjem" jsou proměnné:
IntInd: (Long) Internal Indications.
Bity v této hodnotě (typu Long) indikují stavy a chybové příznaky v rámci stanice (v outstation).
Viz Hodnoty v proměnné Internal Indications.
Data: (String) Přijaté hodnoty položek.
Data jsou ve formátu JSON. Jejich tvar má tuto strukturu:
[
  {"g":2,"v":2,"i":1,"val":0,"f":1,"t":45076.6068058565},
  {"g":2,"v":2,"i":7,"val":0,"f":1,"t":45076.6070141319}
]
To znamená: Přijaly se 2 položky,
- obě dvě položky jsou typu g2.v2 (viz Group 2 = Single-bit Binary Input Event),
- index ("i") první položky je 1, a druhé 7,
- hodnota obou položek ("val") je 0,
- Flag obou položek ("f") je 1 (viz Hodnoty Flag u DNP3 objektu) a
- čas změny položek ("t") je reálné číslo. Zjistit datum a čas z tohoto čísla lze např. metodou Pm.CreatePmDateObject.
Tento textový řetězec lze převést na pole metodou Pm.JsonParse a tak získat jednoduchý přístup je všem hodnotám.

- Time Synchronization:
Tato zpráva zašle aktuální čas počítače do zadané stanice (provede časovou synchronizaci).
Pokud v parametrech protokolu je nastaven konfigurátor Povolit časovou synchronizaci, pak se časová synchronizace provádí automaticky. Tato zpráva je pak nutná jen pro případy kdy synchronizaci je potřeba provést bez ohledu na to zda stanice synchronizaci vyžaduje.

V kartě "Data-zaslání" jsou proměnné:
DevAddr: (Byte) Adresa zařízení (stanice / device / outstation).
V kartě "Data-příjem" jsou proměnné:
IntInd: (Long) Internal Indications.
Bity v této hodnotě (typu Long) indikují stavy a chybové příznaky v rámci stanice (v outstation).
Viz Hodnoty v proměnné Internal Indications.


Podporované typy dat

Protokol DNP3 rozděluje typy dat do skupin (tzv. Group), které jsou určené svým číslem.
V každé skupině mohou být data přenášena různými formáty (tzv. Variation), které jsou také určené svým číslem.
Dotaz na proměnnou s Variation=0 znamená, že druhá strana (tzv. stanice, outstation) pošle odpověď ve formátu, který ona uzná za vhodný.
 
- Group 1 = Single-bit Binary Input: (Typ: Static, jen pro čtení)
- Variation 1 = g1.v1: Packet format
- Variation 2 = g1.v2: With Flag
 
- Group 2 = Single-bit Binary Input Event: (Typ: Event, jen pro čtení)
- Variation 1 = g2.v1: Without time
- Variation 2 = g2.v2: With absolute time
- Variation 3 = g2.v3: With relative time
 
- Group 3 = Double-bit Binary Input: (Typ: Static, jen pro čtení)
- Variation 1 = g3.v1: Packet format
- Variation 2 = g3.v2: With Flag
 
- Group 4 = Double-bit Binary Input Event: (Typ: Event, jen pro čtení)
- Variation 1 = g4.v1: Without time
- Variation 2 = g4.v2: With absolute time
- Variation 3 = g4.v3: With relative time
 
- Group 10 = Binary Output: (Typ: Static, pro čtení i zápis)
- Variation 1 = g10.v1: Packed format (pro čtení i zápis)
- Variation 2 = g10.v2: Output status with Flag (jen pro čtení)
 
- Group 11 = Binary Output Event: (Typ: Event, jen pro čtení)
- Variation 1 = g11.v1: Status without time
- Variation 2 = g11.v2: Status with time
 
- Group 13 = Binary Output Command Event: (Typ: Event, jen pro čtení)
- Variation 1 = g13.v1: Command status without time
- Variation 2 = g13.v2: Command status with time
 
- Group 20 = Counter: (Typ: Static, jen pro čtení)
- Variation 1 = g20.v1: 32-bit with Flag
- Variation 2 = g20.v2: 16-bit with Flag
- Variation 3 = g20.v3: 32-bit with Flag, delta
- Variation 4 = g20.v4: 16-bit with Flag, delta
- Variation 5 = g20.v5: 32-bit without Flag
- Variation 6 = g20.v6: 16-bit without Flag
- Variation 7 = g20.v7: 32-bit without Flag, delta
- Variation 8 = g20.v8: 16-bit without Flag, delta
 
- Group 21 = Frozen Counter: (Typ: Static, jen pro čtení)
- Variation 1 = g21.v1: 32-bit with Flag
- Variation 2 = g21.v2: 16-bit with Flag
- Variation 3 = g21.v3: 32-bit with Flag, delta
- Variation 4 = g21.v4: 16-bit with Flag, delta
- Variation 5 = g21.v5: 32-bit with Flag and time
- Variation 6 = g21.v6: 16-bit with Flag and time
- Variation 7 = g21.v7: 32-bit with Flag and time, delta
- Variation 8 = g21.v8: 16-bit with Flag and time, delta
- Variation 9 = g21.v9: 32-bit without Flag
- Variation 10 = g21.v10: 16-bit without Flag
- Variation 11 = g21.v11: 32-bit without Flag, delta
- Variation 12 = g21.v12: 16-bit without Flag, delta
 
- Group 22 = Counter Event: (Typ: Event, jen pro čtení)
- Variation 1 = g22.v1: 32-bit with Flag
- Variation 2 = g22.v2: 16-bit with Flag
- Variation 3 = g22.v3: 32-bit with Flag, delta
- Variation 4 = g22.v4: 16-bit with Flag, delta
- Variation 5 = g22.v5: 32-bit with Flag and time
- Variation 6 = g22.v6: 16-bit with Flag and time
- Variation 7 = g22.v7: 32-bit with Flag and time, delta
- Variation 8 = g22.v8: 16-bit with Flag and time, delta
 
- Group 23 = Frozen Counter Event: (Typ: Event, jen pro čtení)
- Variation 1 = g23.v1: 32-bit with Flag
- Variation 2 = g23.v2: 16-bit with Flag
- Variation 3 = g23.v3: 32-bit with Flag, delta
- Variation 4 = g23.v4: 16-bit with Flag, delta
- Variation 5 = g23.v5: 32-bit with Flag and time
- Variation 6 = g23.v6: 16-bit with Flag and time
- Variation 7 = g23.v7: 32-bit with Flag and time, delta
- Variation 8 = g23.v8: 16-bit with Flag and time, delta
 
- Group 30 = Analog Input: (Typ: Static, jen pro čtení)
- Variation 1 = g30.v1: 32-bit with Flag
- Variation 2 = g30.v2: 16-bit with Flag
- Variation 3 = g30.v3: 32-bit without Flag
- Variation 4 = g30.v4: 16-bit without Flag
- Variation 5 = g30.v5: Single-precision, floating-point with Flag
- Variation 6 = g30.v6: Double-precision, floating-point with Flag
 
- Group 31 = Frozen Analog Input: (Typ: Static, jen pro čtení)
- Variation 1 = g31.v1: 32-bit with Flag
- Variation 2 = g31.v2: 16-bit with Flag
- Variation 3 = g31.v3: 32-bit with time-of-freeze
- Variation 4 = g31.v4): 16-bit with time-of-freeze
- Variation 5 = g31.v5: 32-bit without Flag
- Variation 6 = g31.v6: 16-bit without Flag
- Variation 7 = g31.v7: Single-precision, floating-point with Flag
- Variation 8 = g31.v8: Double-precision, floating-point with Flag
 
- Group 32 = Analog Input Event: (Typ: Event, jen pro čtení)
- Variation 1 = g32.v1: 32-bit without time
- Variation 2 = g32.v2: 16-bit without time
- Variation 3 = g32.v3: 32-bit with time
- Variation 4 = g32.v4: 16-bit with time
- Variation 5 = g32.v5: Single-precision, floating-point without time
- Variation 6 = g32.v6: Double-precision, floating-point without time
- Variation 7 = g32.v7: Single-precision, floating-point with time
- Variation 8 = g32.v8: Double-precision, floating-point with time
 
- Group 33 = Frozen Analog Input Event: (Typ: Event, jen pro čtení)
- Variation 1 = g33.v1: 32-bit without time
- Variation 2 = g33.v2: 16-bit without time
- Variation 3 = g33.v3: 32-bit with time
- Variation 4 = g33.v4: 16-bit with time
- Variation 5 = g33.v5: Single-precision, floating-point without time
- Variation 6 = g33.v6: Double-precision, floating-point without time
- Variation 7 = g33.v7: Single-precision, floating-point with time
- Variation 8 = g33.v8: Double-precision, floating-point with time
 
- Group 34 = Analog Input Reporting Deadband: (Typ: Static, pro čtení i zápis)
- Variation 1 = g34.v1: 16-bit
- Variation 2 = g34.v2: 32-bit
- Variation 3 = g34.v3: Single-precision, floating-point
 
- Group 40 = Analog Output Status: (Typ: Static, jen pro čtení)
- Variation 1 = g40.v1: 32-bit with Flag
- Variation 2 = g40.v2: 16-bit with Flag
- Variation 3 = g40.v3: Single-precision, floating-point with Flag
- Variation 4 = g40.v4: Double-precision, floating-point with Flag
 
- Group 41 = Analog Output: (Typ: Static, jen pro zápis)
- Variation 1 = g41.v1: 32-bit
- Variation 2 = g41.v2: 16-bit
- Variation 3 = g41.v3: Single-precision, floating-point
- Variation 4 = g41.v4: Double-precision, floating-point
 
- Group 42 = Analog Output Event: (Typ: Event, jen pro čtení)
- Variation 1 = g42.v1: 32-bit without time
- Variation 2 = g42.v2: 16-bit without time
- Variation 3 = g42.v3: 32-bit with time
- Variation 4 = g42.v4: 16-bit with time
- Variation 5 = g42.v5: Single-precision, floating-point without time
- Variation 6 = g42.v6: Double-precision, floating-point without time
- Variation 7 = g42.v7: Single-precision, floating-point with time
- Variation 8 = g42.v8: Double-precision, floating-point with time
 
- Group 43 = Analog Output Command Event: (Typ: Event, jen pro čtení)
- Variation 1 = g43.v1: 32-bit without time
- Variation 2 = g43.v2: 16-bit without time
- Variation 3 = g43.v3: 32-bit with time
- Variation 4 = g43.v4: 16-bit with time
- Variation 5 = g43.v5: Single-precision, floating-point without time
- Variation 6 = g43.v6: Double-precision, floating-point without time
- Variation 7 = g43.v7: Single-precision, floating-point with time
- Variation 8 = g43.v8: Double-precision, floating-point with time
 
- Group 50 = Time and Date: (Typ: Info, pro čtení i zápis)
- Variation 1 = g50.v1: Absolute time
- Variation 2 = g50.v2: Absolute time and interval
- Variation 3 = g50.v3: Absolute time and last recorded time
- Variation 4 = g50.v4: Indexed absolute time and long interval
 
- Group 51 = Time and Date Common Time-of-Occurence: (Typ: Info, jen pro čtení)
- Variation 1 = g51.v1: Absolute time, synchronized
- Variation 2 = g51.v2: Absolute time, unsynchronized
 
- Group 52 = Time Delay: (Typ: Info, jen pro čtení)
- Variation 1 = g52.v1: Coarse
- Variation 2 = g52.v2: Fine
 
- Group 60 = Class objects: (Typ: Info, jen pro čtení)
- Variation 1 = g60.v1: Class 0 data (Static)
- Variation 2 = g60.v2: Class 1 data (Event)
- Variation 3 = g60.v3: Class 2 data (Event)
- Variation 4 = g60.v4: Class 3 data (Event)
 
- Group 80 = Internal Indications: (Typ: Static, pro čtení i zápis)
- Variation 1 = g80.v1: Packed format

Hodnoty Flag u DNP3 objektu

Některé typy DNP3 objektů posílají ve zprávě spolu s svou hodnotou i Flag (typu Byte).
Tento Flag je složen z bitů, které indikují podmínky nebo atributy DNP3 objektu.
 
Bit 0: ONLINE
Hodnota 0 indikuje, že bod je neaktivní, zakázaný, nedostupný, mimo provoz atd.
Bit 1: RESTART
Hodnota 1 indikuje, že data nebyla aktualizována od restartu zařízení.
Bit 2: COMM_LOST
Hodnota 1 indikuje, že došlo k chybě komunikace a hodnota objektu může být zastaralá.
Bit 3: REMOTE_FORCED
Hodnota 1 indikuje, že data jsou přepsána z jiného zařízení.
Bit 4: LOCAL_FORCED
Hodnota 1 indikuje, že data jsou přepsána zařízením, které hlásí tento příznak.
Bit 5: CHATTER_FILTER
Platí pouze pro skupinu objektů:
Hodnota 1 indikuje, že hodnota binárních dat se v současné době mezi stavy mění dostatečně vysokou rychlostí, aby se aktivoval filtr chvění.
Bit 5: OVER_RANGE
Platí pouze pro skupinu objektů:
Hodnota 1 indikuje, že skutečná hodnota datového objektu překračuje platný rozsah měření objektu.
Bit 6: DISCONTINUITY
Platí pouze pro skupinu objektů:
Hodnota 1 indikuje, že získaná hodnota čítače nelze porovnat s předchozí hodnotou, aby se získal správný rozdíl v počtu.
Bit 6: REFERENCE_ERR
Hodnota 1 indikuje, že proces měření určil, že hodnota dat objektu nemusí mít očekávanou úroveň přesnosti.

Hodnoty v proměnné Internal Indications

Bity v této hodnotě (typu Long) indikují stavy a chybové příznaky v rámci stanice (v outstation).
Tuto hodnotu lze číst:
- pomocí objektu PmaCommMsg ve zprávách (hodnota je vždy v proměnné IntInd): nebo
- pomocí objektu PmaCommGroup čtením typu "Group 80 = Internal Indications" (tzn. ItemId="g80.v1").


Bit 0: BROADCAST
Byla přijata zpráva typu broadcast.
Bit 1: CLASS_1_EVENTS
Stanice má nevyzvednuté události pro Class1.
Bit 2: CLASS_2_EVENTS
Stanice má nevyzvednuté události pro Class2.
Bit 3: CLASS_3_EVENTS
Stanice má nevyzvednuté události pro Class3.
Bit 4: NEED_TIME
Je nutná synchronizace času. Viz konfigurátor "Povolit časovou synchronizaci".
Bit 5: LOCAL_CONTROL
Jeden nebo více bodů stanice je v režimu místního (local) ovládání.
Bit 6: DEVICE_TROUBLE
Ve stanici existuje abnormální stav specifický pro zařízení.
Bit 7: DEVICE_RESTART
Stanice se restartovala.

Bit 8: NO_FUNC_CODE_SUPPORT
Stanice nepodporuje tento kód funkce.
Bit 9: OBJECT_UNKNOWN
Stanice nepodporuje požadovanou operaci pro objekty v požadavku.
Bit 10: PARAMETER_ERROR
Byla zjištěna chyba parametru.
Bit 11: EVENT_BUFFER_OVERFLOW
Ve stanici existuje podmínka přetečení vyrovnávací paměti událostí a došlo ke ztrátě alespoň jedné nepotvrzené události.
Bit 12: ALREADY_EXECUTING
Požadovaná operace se již provádí.
Bit 13: CONFIG_CORRUPT
Stanice zjistila poškozenou konfiguraci.

Historie:
Pm9.00.25: Vytvořeno
© MICROSYS, spol. s r.o.