O společnostiProduktyObchodPodpora
Moravské přístroje
Hlavní stránka
O společnosti
Stažení software
Stažení dokumentů
Produkty
Control Web
Strojové vidění VisionLab
Kamery DataCam a osvětlovače DataLight
Průmyslový počítačový systém DataLab
Vědecké kamery
Speciální technika
Ceník
Aktivace produktů
Služby
Školení
Zakázková řešení
Podpora
Volba kamery a objektivu pro Strojové vidění
Control Web - Ukázkové aplikace

Hlavní stránkaProduktyProgramový systém Control WebČlánky

Zálohované aplikace - s datovými sekcemi to jde snadno
 Díky novým vlastnostem systému Control Web 5 již není nutné zálohované aplikace složitě programovat a používat speciální serverové operační systémy. Vystačíte si „pouze“ s klasickým operačním systémem pro pracovní stanice a systémem Control Web 5.

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í.

Poznámka:

Algoritmus rozhodující, který server se stane aktivním po selhání aktivního serveru, je komplikovaný a není možné ho v tomto článku celý podrobně popsat. Velmi zjednodušeně lze říci, že všechny servery mají kromě aktivního serveru určené pořadí v něž budou nahrazovat nedostupné aktivní servery. Tento algoritmus vždy a spolehlivě zajistí správný výběr nového aktivního serveru.

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.

Poznámka:

Každá synchronizovaná sekce musí znát všechny ostatní sekce s nimiž se má synchronizovat. To je nutné především proto, aby byl Control Web schopný vždy zvolit jednu sekci, která bude aktivní. Proto je nutné, aby byl na všech počítačích v dané sekci seznam v parametru server shodný.

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:

ParametrVý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.

Poznámka:

Konfigurace ovladače jednotek DataLab IO/USB je velice jednoduchá, pokud máme k dispozici zařízení, pro které ovladač konfigurujeme. DataLab IO/USB připojíme k počítači. Spustíme inspektor ovladače (v datových inspektorech ikona v liště s nástroji). V inspektoru vybereme volbu Vyhledat zařízení z menu Nástroje. Control Web zobrazí seznam všech aktuálně připojených jednotek. Vybereme jednotku, kterou chceme z aplikace kontrolovat ovladačem a tím je celá konfigurace hotová. Zbývá nám jenom v inspektoru ovladače přečíst čísla kanálů, která byla automaticky přiřazena vstupům nebo výstupům a můžeme je rovnou začít v aplikaci používat.

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.

Poznámka:

Při každé změně aktivní sekce není po určitou dobu žádná sekce aktivní. Poté co servery ztratí spojení s aktivním serverem, trvá ještě nějakou dobu, řádově desítky sekund než je vybrán nový aktivní server. Tato prodleva je zde především proto, že je nutné rozlišit krátkodobý výpadek komunikace a skutečné zastavení aktivního serveru. Pokud bude synchronizována archivní sekce, která periodicky ukládá hodnoty datových elementů do databáze, bude při každé změně aktivní sekce v databázi několik hodnot chybět.

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.

 
 | O společnosti | Produkty | Podpora | Stažení software | Stažení dokumentů | 
Moravské přístroje, a.s., Masarykova 1148, Zlín-Malenovice, 76302