Práce s alarmy

Práce s alarmy

Alarm je zvláštním druhem informace, který SCADA systém využívá při prezentaci dat. Nejdůležitější jsou standardní alarmy, které jsou vždy spojeny se změnou stavu dat nějaké proměnné systému. Jiné alarmy (např. záznam o vydání povelu, výpis chyby, apod.) mají obecnější charakter, ale zatím nejsou využívány, a proto bude pod pojmem alarm míněn dále pouze alarm standardní.

Standardní alarm vzniká při vytvoření nového vzorku dat, pokud se jeho stav významně liší od stavu vzorku předchozího. Nový vzorek je pak s vygenerovaným alarmem tzv. svázaný. Kombinace stavů obou zmíněných vzorků je určující pro typ alarmu. Všechny alarmy příslušející jedné proměnné, které mají stejný typ, představují alarmovou událost. Pro jednotlivé alarmové události lze definovat jiný způsob reakce při zpracování alarmu v klientské aplikaci.

Každý alarm je jednoznačně identifikován pomocí klíčového času, který představuje čas, kdy byl alarm vygenerován s přesností na 1 milisekundu. Princip generování zajišťuje, aby každý alarm dostal jiný čas i v případě, kdy dojde k vytvoření mnoha alarmů najednou.

Vedle klíčového času jsou určujícími parametry alarmu ještě identifikátor proměné a typ alarmu, které specifikují alarmovou událost. Alarm dále obsahuje datovou úroveň vzorků, všechny parametry svázaného vzorku (čas vzorku, hodnotu, status a počet vzorků) a údaje o jeho potvrzení (identifikátor uživatele a čas potvrzení).

1. Generování alarmu

Každá proměnná má definovánu masku typu alarmů, pro které se má alarm generovat. Tato generační maska (AlaGen_Mask) je definována zvlášť pro každou datovou úroveň.

Jelikož proměnná nemusí mít na všech úrovních definovány vlastní parametry, ale může využívat dědění parametrů z nižší úrovně, má ještě globální masku alarmových úrovní (Alarm_Mask). Tato maska určuje, na kterých úrovních se generační maska použije. Díky tomu je možné potlačit generování alarmů, přestože ostatní parametry proměnné se vydědí.

Procesní server generuje alarmy při každém vytvoření nového posledního vzorku, ať tento vznikne externě (skener, programy) nebo interním zpracováním ze vzorků nižší úrovně. Nejprve se testuje maska Alarm_Mask, zda se na dané datové úrovni mají alarmy vůbec generovat. Potom se porovnáním stavů předchozího a nového vzorku zkoumá, zda jejich kombinace odpovídá některému typu standardních alarmů. Pokud ano a tento typ je obsažen v masce AlaGen_Mask, jsou podmínky pro generování alarmu nalezeného typu splněny. Pokud je vyhodnocený typ alarmu "přechod mezi různými neporuchovými stavy hodnoty", zkoumá se, zda u proměnné není definován některý uživatelský typ alarmu, který by dané situaci vyhovoval. Trojice uživatelských typů je obsažena v parametru Usr_Ala_Def, a to tak, že každý z dolních 3 bytů obsahuje definici jednoho typu. Dolní polovina bytu obsahuje číslo stavu hodnoty předchozího vzorku, horní polovina bytu pak číslo stavu hodnoty vzorku posledního.

Má-li se alarm generovat, zjistí se napřed jeho klíčový čas. Klíčový čas poskytuje procesní server, který jej vypočítá jako svůj interní aktuální čas. Pokud by tento čas byl stejný nebo nižší než klíčový čas vypočtený při předchozí generaci alarmu, použije se klíčový čas zvětšený o 1 milisekundu.

Tímto mechanismem se zajistí jednoznačná identifikace každého generovaného alarmu, i když by z nějakého důvodu došlo k posunu interního času serveru směrem dozadu. Při generování mnoha alarmů najednou se klíčový čas události může lišit i o několik milisekund od skutečného času jejího vzniku. Při startu procesního serveru se klíčový čas posledního alarmu načte z tabulky alarmů.

Po vygenerování alarmu se zjistí, zda se má normálně potvrzovat či nikoli. Tuto informaci obsahuje parametr proměnné Sys_Ack_Mask, ve kterém jsou označeny nepotvrzované typy alarmů. Pokud se jedná o nepotvrzovaný alarm, je serverem příslušně označen.

Dále se převezme nalezený typ události, datová úroveň a parametry aktuálního vzorku a všechny tyto informace se přidají do bufferu alarmů.

Procesní server udržuje buffer alarmů pro každou proměnnou zvlášť. Buffery všech proměnných jsou periodicky ukládány do databázové tabulky, buffer se při uložení vždy vyprázdní (standardní perioda ukládání je 3 s).

Klíčový čas je v tabulce rozložen do dvou sloupců (Key_Time a Key_MSec), neboť milisekundy musí být v databázi ukládány zvlášť. Pokud je u alarmu nastaven příznak potvrzení systémem, zapíše se při jeho uložení do času potvrzení aktuální čas a do čísla potvrzujícího uživatele 0, jinak zůstanou obě položky nedefinovány.

2. Zpracování alarmů

Zpracováním alarmů se rozumí jejich periodické čtení z databáze do klientské aplikace a vyvolání příslušných reakcí.

Konkrétní reakce pro danou alarmovou událost závisí na:

  • alarmovém profilu definovaném u proměnné
  • alarmovém profilu definovaném pro tuto proměnnou v uživatelském profilu
  • právech definovaných k této proměnné v uživatelském profilu
  • globálních právech uživatele
  • nastavení potlačení reakcí na alarmy u uživatele.

Zpracování se provádí periodicky se standardní periodou 10 s. Přitom se čtou nové alarmy od posledního čtení. Čas posledně zpracovaného alarmu je vždy na konci čtení uschován a příště se hledají jen novější. Alarmy se čtou vždy po blocích omezeného počtu - standardně po 100 - a pak se hromadně zpracovávají. Pokud by bylo nových alarmů více než 100 opakovalo by se čtení dalších bloků až do načtení všech nových alarmů. Pro zpracování se čtou pouze ty alarmy, které jsou pro konkrétního uživatele určeny ke zpracování. Alarmy, které ke zpracování určeny nejsou může uživatel prohlížet pouze prostřednictvím okna historie alarmů.

U každého načteného alarmu se zjišťuje:

  • - zda má být vypsán ve stavovém řádku
  • - zda je potvrzovaným
  • - jakou má úroveň zvuku
  • - zda má aktivovat alarmovou konzoli.

Každý z alarmů se pošle do seznamu posledních alarmů alarmové konzole. Tento seznam je kruhový s definovanou délkou (standardně 100). Pokud je seznam plný, nejstarší alarmy jsou mazány. Alarmy jsou seřazeny podle klíčového času buď standardně s posledním (nejnovějším) alarmem dole nebo inverzně s posledním alarmem nahoře.

Ty alarmy, které jsou potvrzované, se pošlou do seznamu alarmů k potvrzení alarmové konzole, a to i ty, které již byly potvrzeny jiným uživatele (k tomu by mělo dojít jen výjimečně).

Pokud má zpracovávaný alarm vyšší úroveň zvuku, než ty předchozí ve zpracovávaném bloku, nastaví se výsledná úroveň na novou hodnotu. Pokud má zpracovávaný alarm standardní úroveň zvuku, nastaví se výsledný identifikátor zvuku na novou hodnotu, ale jen pokud už výsledná úroveň nebyla standardní. V tom případě bude výsledný zvuk default pro standardní úroveň. Na konci čtení bloku bude připraven zvuk nevyšší úrovně, který se v bloku vyskytl - tedy zvuková signalizace nejprioritnějšího z alarmů. Uživatelský zvuk standardní úrovně se uplatní jen tehdy, pokud se současně nevyskytl jiný uživatelský zvuk standardní úrovně. Výsledný zvuk e přehraje. Pokud je výsledbá úroveň zvuku nejvyšší - kritická, přehrává se zvuk v cyklu dokola, dokud jej uživatel v alarmové konzoli nevypne. V tomto případě by se měla konzole aktivovat, i když to žádný z alarmů explicitně nepožadoval.

Do stavového řádku se pošle poslední z těch alarmů v bloku, které se do řádku měly poslat. Pokud tedy budou alarmy do zpracování přicházet po jednom, mohou se všechny ve stavovém řádku zobrazit.

Pokud alespoň jeden z alarmů v bloku požadoval aktivaci alarmové konzole, tak se konzole aktivuje. Aktivace znamená okno konzole zobrazit, dostat ho do popředí a v případě, že bylo minimalizováno, tak obnovit jeho velikost.

Vyhodnocování všech těchto reakcí probíhá v následujícím pořadí:

  • Pokud je pro danou proměnnou definován alarmový profil v rámci svázaného uživatelského profilu, použijí se parametry alarmové události z ně ho.
  • Jinak se použijí parametry alarmové události z profilu svázaného přímo s proměnnou, ovšem modifikované podle nastavení potlačení reakcí na alarmy přímo v parametrech uživatele.
  • pokud ani jeden z profilů neobsahuje parametry dané alarmové události nebo ani jeden z nich neexistuje, použijí se default parametry (alarm zpracovávat, a tedy poslat do seznamu posledních alarmů a poslat jej do stavového řádku)

Alarm bude potvrzovatelný, pokud bude mít uživatel globální právo potvrzovat alarmy a zároveň pro danou proměnnou právo potvrzovat alarmy.

Interní administrátor využívá jen alarmového profilu svázaného s proměnnou. Tento uživatel má vždy právo potvrdit jakýkoli alarm.

Pokud uživatel nemá nějakou proměnnou přístupnou, nemůže se mu pochopitelně ani objevit při zpracování.

Speciální reakci vyžadují ty alarmové události označené jako kritické. Vyhodnocení , zda je událost kritická, se provádí obdobně jako u ostatních parametrů alarmového profilu.

Pokud obsahuje okno potvrzovaných alarmů alespoň jeden nepotvrzený kritický alarm, bude se požadavek na jeho potvrzení periodicky připomínat zvukovým signálem a aktivací alarmové konzole (pokud byla deaktivovaná).

3. Zpracování alarmů v Exploreru

Explorer bude mít objekt pro centrální zpracování alarmů.

Tento objekt bude zajišťovat následující funkce:

  • nastavení času posledního potvrzení
  • načtení a úprava času posledně zpracováného alarmu
  • počáteční načtení starých alarmů nepotvrzených uživatelem
  • počáteční načtení nových alarmů
  • periodické čtení nových alarmů
  • periodické čtení nově potvrzených alarmů
  • zpracování načtených alarmů na základě alarmových profilů (rozeslání alarmů jednotlivým prezentačním prvkům)

Vysvětlení pojmů:

Standardní alarm - alarm, který vzniká při zpracování vzorků proměnné procesním serverem.

Speciální alarm - alarm, který vzniká jiným způsobem než alarmy standardní (info, chyby, ..).

Alarmový záznam - souhrn všech parametrů alarmu. V datábazi je reprezentován jako řádek tabulky (spojené řádky tabulek), v aplikaci jako objekt (rekord).

Čas alarmu (identifikátor/klíč /systémový čas/čas generace) - čas (double) s přesností na 1 ms, který je alarmu přiřazen při jeho vygenerování procesním serverem. Základní parametr alarmu, který jednoznačně alarm identifikuje. Je obsažen ve všech alarmových záznamech. V tabulce je uložena zvlášť část bez milisekund a zvlášť milisekundy.

Svázaná proměnná - proměnná, při jejímž zpracování byl vygenerován standardní alarm. Identifikátor této proměnné je součástí alarmového záznamu. Speciální alarmy, které nevznikají při zpracování vzorků proměnných, svázanou proměnnou mít nemusí.

Potvrzované alarmy - alarmy u nichž je vyžadováno jejich potvrzení nějakým uživatelem. Jedná se o všechny alarmy mimo ty, jejichž svázaná proměnná má nastaven parametr SYSTEM_ACK - potvrzování systémem.

Nepotvrzované alarmy - alarmy, u nichž není potvrzení uživatelem požadováno. Lze je také považovate za potvrované systémem (ihned po jejich generování).

Uživatelem potvrzované alarmy - potvrzované alarmy, které může potvrdit konkrétní uživatel (předpokládá se aktuálně přihlášený uživatel). Zda je alarm pro uživatele potvrzovaný je dáno kombinací práv uživatele, práv uživatelského profilu ke svázané proměnné případně přiřazeného alarmového profilu. Alarm může být potvrzovaný pro více uživatelů, a může ho pak potvrdit libovolný z nich. Uživatel může mít právo potvrzovaný alarm ignorovat (může ho skrýt).

Potvrzené alarmy - potvrzované alarmy, které již někdo potvrdil. V alarmovém záznamu je vyznačen identifikátor uživatele, který alarm potrvdil, a čas potvrzení.

Nepotvrzené alarmy - potvrzované alarmy, které nikdo zatím nepotrvrdil.

Alarm tedy může být:

  • nepotvrzovaný (potvrzený systémem) - ID uživatele = 0
  • potvrzovaný, ale nepotvrzený - ID uživatele = -1  (v datábázi NULL)
  • potvrzený uživatelem - ID uživatele > 0.

Čas posledního zpracovaného alarmu - identifikátor posledního alarmu který systém zpracoval. Udržuje se v objektu a zároveň zaznamenává do registru (tabulky). Na začátku nebo při resetu záznamu je nulový, s každým zpracovaným alarmem se zvyšuje.

Staré alarmy - všechny alarmy s časem menším (nebo stejným) než je čas posledního zpracovaného alarmu. Staré alarmy již byly zpracovány.

Nové alarmy - všechny alarmy s časem větším než je čas posledního zpracovaného alarmu. Nové alarmy jsou ke zpracování.

Staré uživatelem nepotvrzené alarmy - všechny staré alarmy, které uživatel dosud nepotvrdil.

Čas posledního potvrzení - čas potvrzení nejpozději potvrzeného alarmu. Udržuje se v objektu. Na začátku nebo při resetu záznamu je nulový, s každou kontrolou nově potvrzených alarmů se zvyšuje.

Nově potvrzené alarmy - alarmy s časem potvrzení vyšším než čas posledního potvrzení.

Maximální stáří alarmů pro zpracování - omezení pro výběr alarmů určených ke zpracování. Alarmy jejichž identifikátor je v okamžiku zpracování starší než dané maximum se již nezpracovávají, i když dosud zpracovány nebyly. Je nutné použít pro situaci, kdy je již tabulka alarmů dostatečně naplněna a čas posledního zpracovaného alarmu nebyl pravidelně updatován.

Nastavení času posledního potvrzení

Do tohoto času se nastaví aktuální čas (databáze). Každé následující potvrzení musí mít čas vyšší, noboť ho nastavuje databáze.

Načtení a úprava času posledně zpracovaného alarmu

Načte se uložený čas posledně zpracovaného alarmu (registry, databáze). Pokud bude tento čas starší než odpovídá maximálnímu stáří alarmů pro zpracování, nahradí se přečtená hodnota časem podle maxima.

Počáteční načtení starých alarmů nepotvrzených uživatelem

Provede se čtení alarmů z databáze do seznamu v objektu.

Požadavek bude mít parametry:

  • čas alarmu <= čas posledního zpracováného alarmu
  • omezení počtu čtených záznamů na rozumnou mez
  • třídění alarmů podle času sestupně (nejnovější časy).

Také zda je možno pracovat z nějakým maximálním stářím nepotrvrzených alarmů, resp. volit vhodnou kombinaci max. stáří a celkového počtu. Může se tak stát, že se některé značně staré nepotvrzené alarmy už k potvrzení nabízen nebudou. Max. stáří pro potvrzení, resp. počet starých nepotvrzených alarmů mohou být dány konstantou, globálním parametrem nebo parametrem specifickým pro uživatele/ uživatelský profil (registry,databáze).

Načtené alarmy se odešlou všechny do seznamu potvrzovaných alarmů alarmové konzole.

Počáteční načtení nových alarmů

Provede se čtení alarmů z databáze do seznamu v objektu.

Požadavek bude mít parametry:

  • čas alarmu > čas posledního zpracovaného alarmu
  • alarm není potvrzen
  • alarm je uživatelem potvrzován
  • omezení počtu čtených záznamů na rozumnou mez
  • třídění alarmů podle času vzestupně (nejstarší časy).

Může se stát, že se nepodaří načíst všechny nové alarmy najednou, pak by se mělo čtení nových alarmů opakovat s posunutým časem posledního zpracování. Podobně by se mělo číst v cyklu při periodickém čtení nových alarmů.

Ze seznamu se budou postupně číst jednotlivé alarmy od nejstaršího a podle parametrů v záznamech zpracovávat. Po zpracování se posune čas posledního zpracovaného alarmu. Po ukončení načítání se čas posledního zpracovaného alarmu uloží.

Periodické čtení nových alarmů

V podstatě bude stejné jako počáteční čtení. Důležité je zvolit periodu čtení. Čas posledního zpracovaného alarmu je možné ukládat také při každém ukončení čtení nebo nezávisle v jiné periodě.

Periodické čtení nově potvrzených alarmů

Provede se čtení alarmů z databáze do seznamu v objektu. Požadavek bude mít parametry:

  • čas potvrzení > čas posledního potvrzení
  • alarm je potvrzen
  • omezení počtu čtených záznamů na rozumnou mez
  • třídění alarmů podle času potvrzení vzestupně (nejstarší časy).

Všechny alarmy v seznamu se pošlou jak do seznamu potvrzovaných alarmů, tak do seznamu všech alarmů alarmové konzole. Po odeslání se posune čas posledního potvrzení. Pokud nebude stačit jedno čtení, bude se opakovat v cyklu. Priodu čtení je opět nutno zvolit. Čtení nových a nově potvrzených alarmů je nezávislé, i když může probíhat ve stejných periodách.


Zpracování načtených alarmů a jejich prezentace v Exploreru

Zpracování alarmů v Exploreru probíhá paralelně v každé spuštěné instanci, přičemž je vždy závislé na aktuálně přihlášeném uživateli. Způsob zpracování a podoba prezentace je výsledkem kombinace nastavení:

  • u proměnné svázané s alarmem
  • u uživatele
  • v uživatelském profilu přísluejícímu uživateli.

Vedle zpracování alarmů v Exploreru je třeba rozlišit jejich centrální zpracování v procesním serveru, které závisí pouze na svázané proměnné. Centrální zpracování alarmů zahrnuje automatické potvrzování vybraných událostí systémem, které následuje bezprostředně po generaci alarmu, a periodické ukládání alarmů do databáze. Centrální zpracování by mohlo časem zahrnout např. logování do text. souboru (souborů) nebo aktivní rozesílání klientům.

Způsoby prezentace alarmů jsou:

  • výpis ve stavovém řádku
  • výpis v přehledu posledních alarmů alarmové konzole
  • výpis v přehledu potvrzovaných alarmů alarmové konzole
  • zvuková signalizace příchozích alarmů

Další efekty při prezentaci alarmů jsou

  • aktivace alarmové konzole při příchodu alarmů
  • periodické upozornění na kritické dosud nepotvrzené alarmy
  • indikace nových alarmů v neaktivní alarmové konzoli

Zpracování alarmů v Exploreru zahrnuje

  • počáteční načtení posledních alarmů z databáze
  • zobrazení posledních alarmů v alarmové konzoli
  • počáteční načtení nepotvrzených alarmů z databáze
  • zobrazení nepotvrzených alarmů v alarmové konzoli
  • periodické čtení nových alarmů z databáze
  • vyhodnocení způsobu prezentace u každé události
  • určení výsledné zvukové signalizace ke všem načteným alarmům
  • rozhodnutí, zda je třeba aktivovat okno alarmové konzole
  • provedení vyhodnocené prezentace
  • periodické čtení nově potvrzených alarmů z databáze
  • provedení úpravy v prezentaci nově potvrzených událostí
  • periodická aktualizace výpisu potvrzovaných alarmů

Prezentace alarmu ve stavovém řádku

Každý nově zpracovaný alarm určený pro prezentaci ve stavovém řádku přepíše jeho aktuální obsah. Do stavového řádku mohou chodit různá hlášení, chyby i další informace. Při velké frekvenci těchto výpisů včetně alarmů nebude možno všechny výpisy sledovat, mají proto pouze informativní charakter. Poslední výpis bude možno manuálně smazat, popřípadě bude po definované době smazán automaticky (30 s).

Prezentace alarmů v přehledu posledních alarmů alarmové konzole

Po přihlášení do systému se přehled naplní posledními (nejnovějšími) alarmy v datábázi, které jsou pro prezentaci v tomto přehledu určeny. Počet posledních alarmů bude omezen na definovanou hodnotu (100), případně na maximální stáří (7 dní). Každý nově zpracovaný alarm určený pro prezentaci v tomto přehledu do něj bude přidán, přičemž nejstarší alarm se smaže, pokud by celkový počet přesáhl maximum. Přehled bude buď normální s nejnovějším alarmem na konci seznamu, kdy se bude přidávat na poslední řádek nebo inverzní s nejnovějším alarmem na začátku sesnamu, kdy se bude vkládat první řádek.

Zvuky jsou rozčleněny do 5 základních kategorií:

  • 0 - bez zvuku
  • 1 - standardní zvuk (základní)
  • 2 - střední zvuk
  • 3 - vysoký zvuk
  • 4 - kritický zvuk (nepřetržitý - opakovaný).

Zvuky jsou uloženy v tabulce zvuků, jejíž parametry budou podobné jako u bitmap. Pod čísly 1 .. 4 jsou uloženy globální zvuky odpovídající úrovně, od čísla 100 včetně budou zvuky uživatelské, které mají vždy standardní úroveň (1). Každá alarmová událost v profilu bude obsahovat odkaz na zvuk. Podle něj lze zjistit jak úroveň zvuku, tak odkaz na konkrétní název (jméno souboru se zvukem).

Pro jeden cyklus zpracování se vyhodnotí vždy pouze jeden zvuk, a to ten který má nejvyšší prioritu. Pokud je nejvyšší priorita 1 - standardní, kterou mají i uživatelské zvuky, záleží jaké všechny zvuky se na této úrovni v seznamu alarmů vyskytují. Pokud je tam pouze jediný zvuk, použije se ten. Pokud je tam více různých zvuků, použije se standardní (s číslem 1).

Výsledný zvuk se použije - spustí se jeho přehrávání. Pokud se jedná o kritický zvuk ukončí se jeho přehrávání volbou příslušného tlačítka v alarmové konzoli. Mělo by také dojít k automatickému zobrazení této konzole na popředí, pokud tam již není.

Pokud se má použít pro potvrzení dialog, musí být daný alarm uživatelem potvrzovaný. Všechny požadavky na dialog v jednom cyklu zpracování se sestaví do fronty. Jednotlivé dialogy se pak budou modálně uživateli předkládat k potvrzení. Jiná alternativa je vygenerovat všechny dialogy jako nemodální najednou a nepotvrzené uživateli cyklicky vyvolávat na popředí.

Pro správné zpracování se musí alarmy načítat s přídavnými informacemi:

  • z proměnné - příznak potvrzení systémem
  • z proměnné a uživatelského profilu - ID alarmového profilu
  • z proměnné a uživatelského profilu - specifické povolení potvrzovat
  • z uživatele - globální povolení potvrzovat
  • z uživatele - další případné korekce pro alarmový profil.

Výsledné přídavné informace jsou:

  • zda je alarm potvrzovaný
  • zda je alarm potvrzovaný uživatelem (kombinace globálního a specifického)
  • zda má jít alarm do stavového řádku
  • zda má jít alarm do alarmové konzole
  • jaká je úroveň zvuku
  • jaký je ID, resp. název zvuku
  • zda se má vyvolat potvrzující dialog
  • zda se má vyvolat alarmová konzole