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

Nebojme se knihoven
 Nejdůležitějším cílem při návrhu systému Control Web bylo zjednodušit a zrychlit práci tvůrcům aplikací. Hlavní novinkou, která bude mít velký vliv na efektivitu práce, jsou aplikační knihovny a předlohy přístrojů. V tomto článku se budeme věnovat knihovnám. Na jednoduchých příkladech si ukážeme, jak se knihovny používají, co všechno umí a jaké jsou nástrahy jejich používání.

Knihovny umožňují vkládat aplikaci vytvořenou v systému Control Web do jiné aplikace jako jeden virtuální přístroj. Díky tomu je možné velice jednoduše skládat aplikaci z připravených částí. Na rozdíl od modulární aplikace, kde se výsledná aplikace skládá z nezávislých modulů, umožňují knihovny vložit aplikaci jako jeden virtuální přístroj – tedy vzhledově „dovnitř“ jiné aplikace.

Krok 1. Vytvoření jednoduché knihovny

Připravíme si malou testovací aplikaci. Do aplikace vložíme přístroj panel, do panelu vložíme přístroje meter a control (oba zatím ponecháme bez datových elementů). Z této aplikace nyní vytvoříme knihovnu. Nejprve v Datových inspektorech v sekci Nastavení aplikace změníme hodnotu atributu library na true. Tím řekneme systému Control Web, že vytváříme aplikační knihovnu.

Aplikace bude knihovnou

Aplikace bude knihovnou

Připravenou knihovnu můžeme vygenerovat. V menu Soubor zvolíme příkaz Generovat knihovnu. Control Web spustí Průvodce generováním knihovny. V prvním kroku zadáme adresář, ve kterém bude vytvořen soubor s knihovnou. V dalších krocích nemusíme prozatím nic nastavovat. Můžeme projít všechny kroky postupným klikáním na tlačítko Další a v posledním kroku Dokončit.

Poznámka:

Knihovny jsou uložené v souborech s příponou cwl. Jejich struktura je obdobná jako u souborů cwx, které používá Control Web Runtime.

Nyní budeme vkládat knihovnu do aplikace. Vytvoříme novou aplikaci. Do ní vložíme přístroj library. Otevřeme inspektor přístroje a do parametru file (soubor knihovny) napíšeme jméno vygenerovaného souboru knihovny. Nyní můžeme aplikaci spustit.

Krok 2. Jak dostat data z aplikace do knihovny

V systému Control Web je možné přenášet hodnoty datových elementů nebo výrazů mezi knihovnou a aplikací, do které je knihovna vložena. Obdobně jako při síťových komunikacích zde využijeme možností datových sekcí. Vše si opět ukážeme na jednoduchém příkladu.

Znovu otevřeme knihovnu, kterou jsme vytvořili v prvním kroku. Do aplikace (knihovny) vložíme dvě nové sekce. Jedna bude sloužit pro přenos dat do knihovny a druhá pro přenos dat z knihovny. V první sekci nastavíme atribut scope (atribut sekce) na hodnotu library_input. Tato sekce bude sloužit pro přenos hodnot do knihovny. V sekci vytvoříme datový element Vstup. V druhé sekci nastavíme atribut scope na hodnotu library_output - přenos hodnot ven z knihovny do aplikace, která knihovnu používá. Také v této sekci vytvoříme datový element, pojmenujeme ho například Vystup.

Nyní znovu vygenerujeme knihovnu. Postup je stejný jako v předchozím kroku.

Načteme aplikaci, která knihovnu používá a otevřeme inspektor nad přístrojem library. V sekci library_input vidíme datový element Vstup. Zde je možné nastavit výraz, který bude při každé aktivaci přístroje library vyhodnocen a zapsán do datového elementu Vstup v knihovně. Obdobně v sekci library_output je možné zadat datový element a při každé aktivaci přístroje library bude přečtena hodnota proměnné knihovny Vystup a zapsána do zadaného datového elementu.

Vstupních nebo výstupních sekcí může být v knihovně libovolný počet. Pokud jsou sekce pojmenované, uvidíte v inspektoru přístroje knihovna vstupy případně výstupy rozdělené podle jmen sekcí. Pokud u datových elementů v knihovně vyplníte komentář (atribut comment), uvidíte tento komentář také v inspektoru přístroje library.

Procedury knihoven

Procedury knihoven jsou nejpokročilejším způsobem interakce mezi aplikací a knihovnou. Knihovny mohou mít jak nativní procedury, tak událostní procedury. Nativní procedury vytváří tvůrce knihovny a jsou volány z aplikace, v níž je knihovna použitá. Naopak hlavičku (definici) událostní procedury určuje autor knihovny. Knihovna událostní proceduru volá, kód procedury však vytváří ten, kdo knihovnu použije.

Uživatelské procedury definované v datových sekcích označených library_input se stanou nativními procedurami přístroje library, který knihovnu použije.

Nativní procedury knihoven

Všechny uživatelské procedury definované v datových sekcích označených library_input se stanou nativními procedurami přístroje library, který knihovnu použije.

Otevřeme znovu knihovnu vytvořenou v předchozích krocích. Do vstupní sekce (library_input) vložíme novou uživatelskou proceduru Test().

procedure Test( s : string );
begin
  core.DebugOutput('knihovna procedura test :', s );
end_procedure;

Stejně jako v předchozích krocích vygenerujeme knihovnu a otevřeme aplikaci, která knihovnu používá. Vybereme přístroj library a ve stromu aktuálního přístroje najdeme vytvořenou nativní proceduru Test.

Můžeme vyzkoušet nativní proceduru zavolat. Do aplikace vložíme například přístroj button:

  button button_1;
    gui
      owner = background;
      position = 21, 65, 100, 47;
    end_gui;

    procedure OnPress();
    begin
      library_2.Test('zkouška zkouška');
    end_procedure;

  end_button;

Událostní procedury knihoven

Událostní procedury umožňují autorovi knihovny volat kód, který vytváří ten, kdo knihovnu používá. Znovu otevřeme knihovnu a do sekce library_output vložíme novou uživatelskou proceduru OnTest:

  var sekce_1 {scope = library_output};
    Vystup : real;

    procedure onTest( s : string );
    begin
    end_procedure;

  end_var;

Tělo procedury je prázdné, vyplníme ho až při použití knihovny v aplikaci. Událostní proceduru budeme volat z knihovny, proto musíme naši sekci pojmenovat (sekce_1). Do knihovny vložíme přístroj button a zavoláme proceduru.

  button button_1;
    gui
      owner = background;
      position = 59, 98, 100, 60;
    end_gui;

    procedure OnPress();
    begin
      sekce_1.onTest( 'Volání z knihovny.');
    end_procedure;

  end_button;

Opět, podobně jako v předchozích krocích, vygenerujeme knihovnu a otevřeme aplikaci, která knihovnu používá. Vytvořená procedura onTest se stala událostní procedurou knihovny, tedy událostní procedurou přístroje library. Otevřeme inspektor přístroje a přepneme se do záložky Procedury, zde mezi událostními procedurami vidíme naši proceduru onTest.

Poznámka:

V jedné knihovně může být více datových sekci se shodným atributem scope (library_output nebo library_input). Pokud však vytváříme procedury knihoven, musí být jejich jména jedinečná ve všech sekcích se stejným atributem scope. Tedy pokud například vytvoříme proceduru A v sekci library_input, nelze již vytvořit proceduru A v žádné další sekci library_input. Toto omezení platí pouze pro procedury.

Zabalení souborů do knihovny

Při generování aplikační knihovny je možné zabalit soubory, které knihovna používá do souboru CWL. Takto je možné zabalit například ikony, obrázky nebo i parametrické soubory ovladačů. Díky tomu přenášíte pouze jeden CWL soubor. Balení souborů do CWL je možné nastavit ve třetím kroku Průvodce generováním knihovny.

Ve stromu jsou uvedeny všechny soubory, které bude průvodce kopírovat do cílové složky (zadává se v prvním kroku). Průvodce seznam automaticky naplní podle souborů používaných v aplikaci. Další soubory je možné přidávat manuálně tlačítky v liště nástrojů.

U každého souboru je možné povolit vložení do CWL tlačítkem v liště nástrojů. Ikona souborů, které budou vloženy do CWL, je ve stromu zobrazená modrozelenou barvou.

Poznámka:

V některých případech je zabalení souborů do knihovny nežádoucí:

  • Typickým případem je situace, kdy aplikace/knihovna soubor modifikuje. Soubory uložené v CWL jsou při spuštění rozbaleny a je možné je z aplikace modifikovat. Takto modifikované soubory se však nedostanou zpět do knihovny (souboru CWL), při zastavení aplikace jsou smazány a při novém spuštění budou znovu rozbaleny z knihovny.

  • Dalším případem, kdy není možné soubory vkládat do CWL, jsou soubory webového serveru (přístroje httpd). Web server vyžaduje strukturu souborů, které nabízí klientům, uloženou na disku a není možné jejich rozbalování z CWL.

  • Všechny soubory vložené do CWL jsou „na jedné hromadě“, není zde žádná hierarchie adresářů. Proto může být soubor s určitým jménem vložený pouze jednou.

  • Nezapomínejte, že soubory vložené do CWL nemůže autor aplikace, který používá knihovnu, modifikovat. Někdy to může být výhoda, jindy, například při parametrizaci ovladače (PAR soubor), to může být na závadu.

Nástrahy při používání knihoven

Knihovny přináší pro tvůrce aplikací obrovské možnosti. Není však možné používat je bezmyšlenkovitě. Každá knihovna je vlastně kompletní aplikací v systému Control Web. Má svoje jádro, které nezávisle časuje přístroje, vyhodnocuje výrazy, řídí komunikaci a podobně. Proto je efektivnější vytvářet aplikační knihovny z větších částí aplikace, než malé knihovny z jednoho přístroje. Pokud uděláte knihovnu z jednoho přístroje a tu potom stokrát vložíte do aplikace, poběží ve výsledné aplikaci 100 nezávislých jader systému Control Web. V tomto případě je mnohem efektivnější použít předlohu přístroje. Aplikační knihovny jsou navržené pro větší aplikační celky. Při vkládání knihovny do aplikace vždy pamatujte na to, že vkládáte kompletní jádro systému Control Web s celou jeho režií.

Chyby v knihovně

Při generování knihovny Control Web překládá knihovnu a kontroluje chyby. Některé chyby je však možné odhalit až při spuštění aplikace. Pokud knihovnu vložíte do aplikace a tu spustíte, může Control Web při spouštění narazit na chybu v knihovně. Protože knihovna se otevírá ze souboru CWL, kde není uložený zdrojový kód, není možné zobrazit číslo řádku, na kterém je chyba. Na následujícím obrázku je výpis chyb nalezených při spouštění. První chyba je v knihovně, druhá v aplikaci. Řádek s popisem chyby vždy začíná jménem souboru, podle něho můžete poznat jestli jde o chybu v aplikaci nebo knihovně. Nejjednodušším způsobem, jak otestovat chyby v knihovně, je knihovnu spustit.

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