Datové sekce
Vytváření distribuovaných aplikací je podrobně popsáno
v článku Datové sekce - silný
nástroj pro distribuovaná data.
Základním elementem pro sdílení nebo synchronizaci dat je
v systému Control Web datová sekce. Datová
sekce je pojmenovaná skupina elementů stejného typu, tedy
například datová sekce proměnných je skupina proměnných. Při
tvorbě rozsáhlejších aplikací je výhodné rozdělit konstanty,
proměnné nebo kanály do skupin — datových
sekcí podle významu nebo použití. Navíc mohou být sekce jednoduše
sdíleny mezi více aplikacemi systému Control Web.
Základní popis práce s datovými sekcemi najdete v článku
na adrese http://www.mii.cz/art?id=245 nebo v dokumentaci
systému Control Web.
Zálohované aplikace se používají především pro zvýšení
spolehlivosti rozsáhlých řídicích nebo vizualizačních systémů.
Stejné (nebo alespoň z části stejné) aplikace běží na dvou
nebo více počítačích. Část dat těchto aplikací je synchronizovaná,
to znamená, že Control Web zajistí, aby byly na
všech počítačích hodnoty těchto dat v jeden okamžik stejné.
Všechny aplikace udržují spojení a informace o dostupnosti
ostatních aplikací na okolních počítačích. V jeden okamžik je
vždy jedna aplikace aktivní. Pokud tato aplikace selže (například
z důvodu výpadku napájení) vyberou ostatní aplikace mezi
sebou jinou, která se stane aktivní. Tím je zajištěno zálohování a
pokud neselžou všechny počítače, bude vždy jeden zajišťovat řízení
nebo vizualizaci technologie. V tomto článku popíšeme postup
při vytváření takovýchto aplikací.
Synchronizujeme datové sekce
Nejmenší - atomický element, který je možné synchronizovat mezi
aplikacemi, je datová sekce. Pokud sekce obsahuje například
proměnné, Control Web zajistí, aby hodnoty těchto
proměnných byly ve všech aplikacích stejné. Jedna sekce je
aktivní, tato sekce se v daný okamžik chová jako server -
poskytuje data ostatním sekcím. Ostatní neaktivní sekce se chovají
jako klienti — využívají služeb
serveru — čtou data ze serveru.
Control Web synchronizuje vždy jednotlivé sekce,
každou sekci samostatně a zcela nezávisle. Pokud je v jedné
aplikaci více synchronizovaných sekcí, každá sekce se
synchronizuje nezávisle. To, která sekce, na kterém počítači je
aktivní (pracuje pro ostatní jako server), rozhoduje
Control Web také zcela nezávisle. Může se tak
stát, že v jeden okamžik je jedna sekce aktivní na jednom
počítači a druhá sekce na jiném. Tato situace sice v praxi
nebude nastávat často, ale nelze ji zcela vyloučit.
Definice jedné synchronizované sekce musí být vždy ve všech
aplikacích stejná. Tedy parametry sekce a datové elementy, které
sekce obsahuje, musí být shodné. Nejjednodušší je vytvořit jednu
zálohovanou aplikaci a tu potom spustit na více počítačích. Pokud
aplikace není stejná, musí být stejná definice sekce a to vždy ve
všech aplikacích.
Další obrovskou výhodou synchronizovaných sekcí je možnost
připojovat k nim klienty — sdílet data
sekcí.
Vytváříme synchronizovaný server
Nejdůležitější při vytváření jakýchkoliv distribuovaných
aplikací je parametr scope datové sekce. Aby byla
sekce synchronizována, musíme nastavit scope na
hodnotu synchronized_shared_remotely. Tím říkáme, že
je sekce synchronizovaná se všemi stejnými sekcemi a navíc je tato
sekce nabízena klientům (shared). Dále je nutné v sekci
definovat seznam všech serverů, sekcí, s nimiž bude místní
sekce synchronizována. Definuje se jako seznam trojic: jméno
počítače, jméno aplikace a jméno sekce. Tento seznam zadáme do
parametru server.
Nakonec ještě musíme povolit vzdálený přístup k vytvořené
sekci. Přístup k sekci se nastavuje parametrem client_access.
Parametr musíme nastavit tak, aby k sekci měli přístup
všechny vzdálené synchronizované sekce a také případně všichni
klienti. Pro účely testování stačí nastavit allow, any — tím povolíme přístup všem.
Do vytvořené sekce je nyní možné vkládat datové elementy. Zde
je opět nutné dodržet pravidlo, aby ve všech sekcích, které jsou
vzájemně synchronizovány, byly stejné datové elementy.
Sledování aktivity
Control Web poskytuje velice jednoduchou
možnost, jak sledovat, která sekce je v daný okamžik aktivní.
Každá synchronizovaná sekce (tedy sekce, která má nastavený
parametr scope na hodnotu synchronized_shared_remotely)
má událostní proceduru OnSynchronizeStateChange. Tato
událostní procedura je spuštěna při každé změně stavu sekce.
Poprvé je zavolána po spuštění aplikace a poté vždy při přechodu
z aktivního do pasivního stavu nebo naopak. Procedura má dva
parametry, první definuje starý stav sekce a druhý parametr nový
stav sekce.
Parametry jsou textové řetězce a mohou nabývat
následujících hodnot: Parametr | Význam |
---|
starting | Hodnotu starting může nabývat pouze první parametr.
S touto hodnotou je procedura zavolána vždy pouze jednou po
každém spuštění aplikace. | active | Hodnota active signalizuje aktivní stav sekce. Sekce se
chová jako server. | pasive | Hodnota pasive signalizuje neaktivní stav sekce. Pokud je
sekce neaktivní, musí být dostupná jiná sekce, která je aktivní
a k níž jsou všechny ostatní sekce připojeny. |
Do událostní procedury můžeme napsat jednoduchý kód, který vždy
při změně stavu synchronizované sekce vypíše řádek do okna
zpráv.
procedure OnSynchronizeStateChange( PreviousState, NewState : string );
begin
core.DebugOutput('OnSynchronizeStateChange: ' + PreviousState + ', ' + NewState );
end_procedure;
Sledování aktivity umožňuje například povolit některé řídicí
algoritmy pouze na serveru, který je aktivní. Díky tomu, že data
aplikace jsou synchronizovaná (tedy ve všech běžících aplikacích
stejná), není problém, aby v případě výpadku převzal řízení
technologie jiný server.
Zálohovaná aplikace v praxi
Vytvoříme aplikaci, která bude periodicky vypínat a zapínat
digitální výstup. K aplikaci připojíme jednotku
DataLab IO/USB s modulem digitálních
výstupů. Aplikaci vytvoříme jako zálohovanou a budeme chtít, aby
pouze jedna, aktivní aplikace, zapisovala na výstup. Pokud aktivní
aplikaci zastavíme, musí řízení převzít jiná - záložní
aplikace.
Krok 1. Připojení hardware
V systému Control Web vytvoříme novou
aplikaci. Přidáme do ní ovladač jednotek DataLab IO/USB a nakonfigurujeme ho tak, aby kanál 100
představoval první digitální výstup na této jednotce.
Krok 2. Ukládáme stav synchronizované sekce
Aplikace si musí pamatovat svůj stav, tedy jestli je
aktivní nebo pasivní. Do aplikace vložíme sekci proměnných a
do ní vložíme proměnnou ServerActive typu
boolean. Pokud bude mít tato proměnná hodnotu true,
bude to signalizovat, že tento server je v aktivním
stavu — musí řídit výstup.
Krok 3. Synchronizovaná sekce
Nyní vytvoříme nejdůležitější část aplikace -
synchronizovanou sekci. Do aplikace vložíme další sekci,
tentokrát sekci kanálů. Sekce musí být pojmenovaná. Do sekce
vložíme kanál DO, který bude odpovídat prvnímu
digitálnímu výstupu připojené jednotky DataLab IO/USB.
Parametr scope sekce nastavíme na synchronized_shared_remotely.
Upozornění: V datových inspektorech je možné filtrovat
zobrazované atributy datových elementů a sekcí. Po
nainstalování vývojové verze systému Control Web 5 jsou filtry nejpřísnější — jsou zobrazeny pouze základní atributy.
Tlačítky a je možné zobrazit další rozšiřující a
síťové atributy. 
Filtrování atributů datových elementů a
sekcí
Parametr client_access nastavíme na allow, any.
Do parametru server napíšeme seznam všech
synchronizovaných serverů, tedy seznam všech počítačů na nichž
budeme vytvářenou aplikaci spouštět.
Celá definice sekce může vypadat například takto:
channels SynchronizovanaSekce {
scope = synchronized_shared_remotely;
server = 'pc_1.mii.cz', 'Test', 'SynchronizovanaSekce';
server = 'pc_2.mii.cz', 'Test', 'SynchronizovanaSekce';
server = 'pc_3.mii.cz', 'Test', 'SynchronizovanaSekce';
client_access = allow, 'any'
};
DO : boolean {driver = dl; driver_index = 101; direction = output};
end_channels;
Krok 4. Zachycení události o změně stavu
sekce
Do sekce přidáme událostní proceduru OnSynchronizeStateChange.
V ní podle hodnoty parametru NewState - nový
stav nastavíme naši proměnnou ServerActive.
procedure OnSynchronizeStateChange( PreviousState, NewState : string );
begin
ServerActive = (NewState = 'active');
end_procedure;
Krok 5. Ovládání výstupu
Zbývá naprogramovat řídicí algoritmus pro ovládání
digitálního výstupu. Do aplikace vložíme virtuální přístroj
indicator. Nastavíme časovač (parametr timer)
přístroje na 1 sekundu. V proceduře OnActivate,
která bude spouštěna jednou za sekundu, změníme hodnotu
výstupního kanálu digitálního výstupu, ale pouze pokud je
sekce aktivní:
procedure OnActivate();
begin
if ServerActive then
DO = not DO;
end;
end_procedure;
Parametr expression přístroje
indicator nastavíme na kanál DO -
indikátor bude zobrazovat stav digitálního výstupu.
Krok 6. Spouštíme aplikace
Aplikaci můžeme spustit na libovolném počtu počítačů
lokální sítě (ale vždy pouze na těch, které jsou uvedeny
v seznamu serverů v definici sdílené sekce). První
spuštěný počítač bude blikat digitálním výstupem, ostatní
budou pasivní. Pokud aktivní počítač vypneme (stačí zastavit
aplikaci), jeden z pasivních počítačů se stane aktivním a
"převezme řízení". Žárovky (přístroj indicator) budou blikat
na všech počítačích synchronně.
Jak připojit klienty
Sekce, které jsou synchronizované, umožňují ještě navíc nabízet
data klientům. Sekce, které mají parametr scope
nastavený na hodnotu synchronized_shared_remotely, se
pro klienty chovají stejně jako by byl parametr nastavený na
hodnotu shared_remotely — sekce
je nabízená klientům. Můžeme vytvořit klientskou aplikaci a
v ní dovézt tuto sekci, parametr scope nastavíme
na imported_remotely. V parametru server
musíme vyjmenovat všechny počítače, na nichž může běžet
synchronizovaná sekce. Klient si vždy najde aktivní server
(aktivní sekci) a k ní se připojí. Pokud dojde k výpadku
serveru a stane se aktivní jiný, záložní server, všichni klienti
se přepojí k tomuto serveru.
Vynucení ztráty aktivity
V aplikacích systému Control Web existuje
možnost programově zbavit sekci aktivity. K tomuto účelu má
každá synchronizovaná sekce virtuální proceduru YieldActiveSynchronizedState.
Pokud je tato procedura zavolána sekci, která je aktivní, přestane
být aktivní a vyhledá se jiná synchronizovaná sekce, která se
stane aktivní. Pokud se nepodaří nalézt jinou sekci, která by
mohla převzít aktivitu vrátí se aktivita zpět původní sekci.
V tomto případě je událostní procedura OnSynchronizeStateChange
vždy zavolána dvakrát: poprvé při přechodu do pasivního stavu a
podruhé při přechodu zpět do aktivního stavu.
Synchronizované sekce a SP2 pro Windows XP
Součástí aktualizace Service Pack 2 pro Windows XP je několik
užitečných rozšíření bezpečnosti operačního systému.
Nejvýznamnějším rozšířením je Brána Firewall systému
Windows. Brána omezuje přenos informací mezi vaším počítačem a
počítačovou sítí, případně Internetem, nepovolí přistupovat k
vašemu počítači uživatelům vně brány.
Pokud pracujete v operačním systému jako uživatel
s administrativním oprávněním, stačí při prvním spuštění
aplikace v systému Control Web zrušit
blokování Branou Firewall (přidat Control Webi do
seznamu aplikací pro něž Brána Firewall neplatí).
Ostatní uživatelé musejí požádat administrátora o zrušení
blokování.
Control Web Servis
Součástí každé instalace systému Control Web je servis - služba operačního systému
Control Web Service. Jde o velmi malý program,
který běží na každém počítači, kde je systém Control Web instalován. Control Web Service
je nutný pro správný běh systému Control Web
a je využíván pro některé druhy komunikace s operačním
systémem, a také pro spojování distribuovaných aplikací.
Control Web Service je v operačních
systémech Windows XP program 'cwsvc.exe'.
Implicitně je instalovaný v adresáři 'Moravian
Instruments\shared' v adresáři 'Program
Files'.
Pro správnou funkci distribuovaných aplikací je vždy nutné
přidat 'cwsvc.exe' do seznamu programů, které
operační systém nebude blokovat.
Síťová konektivita
Podmínkou správné synchronizace dat mezi sekcemi je spolehlivá
síťová konektivita mezi počítači. Komunikace mezi aplikacemi je
nutná nejenom pro výměnu dat, ale také pro výběr aktivního
serveru. Pokud například dojde k výpadku napájení
v jedné části systému a jeden ze zálohovaných serverů
vypadne, nepomůže ani dalších deset záložních serverů, pokud
zároveň zkolabuje napájení aktivních prvků počítačové sítě (hub,
switch apod.). Všechny servery v takovém případě ztratí
informaci o ostatních. Všechny běžící servery budou ostatní
považovat za vypnuté a všechny se stanou aktivními. Pokud by tyto
servery měly například řídit technologii, mohl by být výsledkem
fatální kolaps celého systému. Proto je vždy spolehlivá
komunikace mezi synchronizovanými servery velmi klíčová.
Výhodné je například využívat pro synchronizaci speciální
samostatnou a jenom k tomuto účelu vytvořenou počítačovou
síť, s co nejmenším množstvím aktivních prvků, které by mohly
selhat. Následující obrázek ukazuje stav čtyř synchronizovaných
serverů po přerušení komunikace mezi dvěma segmenty sítě -
vzniknou dva nezávislé zálohované systémy. Po obnovení spojení se
ustaví normální stav - zůstane pouze jediný aktivní server.
Na závěr
Nejsložitější část kódu pro obsluhu zálohovaných aplikací je
součástí jádra sytému Control Web. Díky tomu již
není potřeba zálohované aplikace složitě programovat nebo používat
specializovaný operační systém. Vytvořit zálohovanou aplikaci
s použitím systému Control Web 5 znamená
v podstatě pouze nastavení několika málo parametrů, zbylou
práci za vás udělá Control Web.
|