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
Připravenou knihovnu můžeme vygenerovat. V menu
zvolíme příkaz . 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.
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.
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.
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.
|