Technologie ActiveX
Předchůdci ActiveX měli za cíl vyřešit dva
okruhy problémů:
jak zajistit, aby se uvnitř programového systému dokázaly
domluvit jeho jednotlivé části bez toho, aby se tyto části
přesně (binárně) znaly. Vzájemná přesná znalost částí systému
totiž znamená, že celý systém musí být vyroben a sestaven jako
jeden monolit (i když je třeba rozdělen do více
programových souborů). Monolitičnost je překážka údržbě a
dalšímu vývoji systému; monolitičnost je také překážka
spolupráci programů různých výrobců.
jak zajistit, aby se určitý programový systém (třeba
vývojový nástroj) dal snadno doplňovat a rozšiřovat o nové
funkce, o nové vlastnosti a o funkční kousky programů
naprosto cizích autorů. Jak sloučit programovou část kreslící
grafy s programovou částí, která dokáže pomocí měřicí karty
sledovat teplotu?
Ukázalo se, že oba okruhy problémů vedou na totéž: jak
vymyslet a standardizovat spojovací vrstvu programových
částí — dnes rozhraní
(interface) — které jediné se následně
bude pro spolupráci a výměnu dat programových částí používat.
Je-li určen způsob, jak se rozhraní vytváří a používá, je snadné
splnit oba motivační cíle:
programy různých výrobců se domluví, budou-li mít pro
stejný účel totéž rozhraní,
doplňky a rozšíření lze použít, jsou-li známa jejich
rozhraní poskytující určitou funkci.
Princip použití rozhraní je v dnešních informačních
technologiích naprosto zásadní. Platí to beze zbytku
rovněž pro hlavní objektovou technologii operačních systémů
Windows, kterou je Component Object Model (COM). COM sám
o sobě je samozřejmě pouze prázdný rámec, který dokáže
poskytnout rozhraní objektů a který dokáže zaručit jejich
propojitelnost. Bez dalšího určení, jak a čím bude tento rámec
naplněn, bez určení pravidel a naplánování rozhraní, nelze COM
rozumně používat (a stejně tak ani žádnou jinou komponentovou
technologii).
Objektový model technologie ActiveX je COM. To je hlavní a základní
vlastnost ActiveX, která prakticky kompletně
vysvětluje a popisuje, co a jak lze pomocí ActiveX vyřešit. Současně je tím však
opět řečeno, že bez stanovení pravidel a naplánování rozhraní je
ActiveX stejně neurčité, jako samotný
COM.
Než se však o některých existujících pravidlech a blocích
rozhraní zmíníme, je nutné učinit odbočku k Internetu.
Technologie ActiveX má totiž důležitou vlastnost,
která přímo s rozhraními a objekty nesouvisí. Při skládání
jednotlivých objektových komponent nemusejí být všechny přímo
dostupné (tj. například na místním disku), mohou být uchovány na
cizích místech. Takové cizí místo může být například
u výrobce komponenty, u poskytovatele určité služby
(například u banky v případě elektronického
bankovnictví) nebo to může být jen prosté skladiště užitečných
komponent. ActiveX řeší, pomocí Internetu, jak
takovéto vzdálené komponenty zpřístupnit natolik, aby je bylo
možné jako komponenty použít. Důležité současně je, že tato
vlastnost technologie ActiveX vůbec nijak neomezuje a
nezakazuje čistě místní použití komponent.
Zpět k objektovým rozhraním. Stanovením pravidel a
naplánováním rozhraní (skupiny rozhraní) vždy vznikne řešení pro
nějaký konkrétní účel. V zásadě i tento samotný účel
může být různě konkrétní, takže vznikají řešení různě obecná,
různě rozšiřitelná a různě upravitelná; vznikají různé objektové
a komponentové standardy. Příklad několika z nich
bude nejnázornější:
- OPC (OLE for Process Control)
Standard a technologie pro unifikovaný přístup
k řízení, měření a regulaci průmyslových procesů. Sada
rozhraní rozeznává OPC server a OPC klient.
- OLE (Object Linking and Embedding)
Standard a technologie pro zařazování dokumentů dovnitř
jiných dokumentů (příkladem je tabulka MS Excel vložená dovnitř
dokumentu MS Word); uvnitř kancelářského balíku MS Office je OLE
zcela skryté a automatické.
- ActiveX controls
Standard především pro komponenty uživatelského
rozhraní — pomocí ActiveX controls se sestavují
aplikace, dialogová okna apod. Každý ActiveX control musí být vidět (musí
mít rozhraní pro uživatelské ovládání a pro operace související
se vzhledem), musí mít rozhraní pro programové ovládání, a pokud
to má pro konkrétní ActiveX control smysl, může mít
rozhraní pro poskytování svých událostí.
- ActiveX automation object
Standard pro COM komponenty, které nejsou na obrazovce
vidět. Každý ActiveX automation prvek musí mít
rozhraní pro programové ovládání, a pokud to má pro konkrétní
ActiveX automation prvek smysl, může
mít rozhraní pro poskytování svých událostí. Je vcelku
zřejmé, že ActiveX automation prvek je
ActiveX control zbavený rozhraní a
funkčnosti související s uživatelským rozhraním. Obě
varianty technologie ActiveX se často směšují, rozdíl je
totiž velmi malý. Řekne-li se ActiveX, může se jednat o obojí
druh komponenty.
Všechny komponenty vystavěné v objektovém modelu COM jsou
ve všech nástrojích, které této technologii rozumějí, dostupné.
Teoreticky by tak mělo být možné v každém nástroji libovolně
spojovat funkce jakýchkoli standardů. Prakticky to není vždy
možné. Platí zpravidla, že nástroje určené k programování
(Visual Basic) dokáží COM využít skutečně obecně, zatímco jiné
nástroje využívající COM využívají jen některý objektový standard
(třeba OPC, nebo ActiveX).
Přestože je variabilita komponentových standardů velmi obecná a
bohatá, používá se v praxi pro rozšiřování funcí a spojování
komponent témeř výhradně ActiveX. Pravděpodobně proto, že bloky
rozhraní ActiveX a pravidla pro jejich používání
nejsou v ActiveX nijak komplikovaná a že
ActiveX lze velmi snadno rozšiřovat a
používat v prostředí Internetu.
Ovladače jsou prvky ActiveX
Skutečnost, že technologie ActiveX je pro rozšiřování vlastností
a komunikaci s okolními programy základní a témeř výhradní,
využívají i ovladače jednotek průmyslového měřicího a
řídicího systému DataLab. Všechny
ovladače jednotek DataLab tak lze
použít jedním ze třech způsobů:
- v aplikaci Control Web
Zde se jedná o nativní způsob využití ovladače, kdy
jsou data vstupů a výstupů dostupná jako kanály aplikace. Bez
instalovaného systému Control Web nelze tímto
způsobem ovladač použít.
- v Univerzálním OPC Serveru
Tento způsob využití ovladače předpokládá instalaci
produktu Univerzální OPC. Data vstupů a výstupů, případně
komunikace jednotek jsou dostupné prostřednictvím OPC serveru
jakémukoli OPC klientovi.
- jako ActiveX automation prvek
Způsob využití, který nepředpokládá instalaci
žádného produktu (samozřejmě kromě toho, v němž má být
ovladač jako ActiveX prvek použit); způsob, kdy
samotná knihovna ovladače nabízí všem COM klientům svá
ActiveX rozhraní. Pro široké
použití a univerzální zapojení jednotek DataLab do všech cizích produktů je tento způsob
využití ovladače nejjednoušší a automaticky
nejpřímější.
Použije-li se ovladač jako ActiveX automation prvek, není kromě
samotné knihovny ('DLL' soubor) ovladače třeba nic více
dodávat. Co je však vždy třeba, je registrace ovladače
jako ActiveX prvku. Má-li totiž být
ActiveX prvek cizím programovým
systémům dostupný, musí o něm vědět operační systém — technicky to nutné není, protože i jen
s pomocí DLL lze COM využít; prakticky však všechny produkty
používající ActiveX získavají data
o komponentách jen z operačního systému.
Nejjednodušší způsob registrace je s využitím programu
'regsvr32.exe' příkazové řádky operačního
systému — příkazový řádek operačního systému
je program 'cmd.exe'; spustit tento program lze
například příkazem Spustit...
nabídky Start operačního systému. Příklad registrace
ovladače DataLab IO/USB:
c:\Documents>cd \Directory\With\DLL
c:\Directory\With\DLL>regsvr32 dldrv.dll
c:\Directory\With\DLL>
Opačná operace, zrušení registrace, se provede velmi podobně.
Pouze se volání programu regsvr32 rozšíří
o volbu /u (uninstall):
c:\Documents>cd \Directory\With\DLL
c:\Directory\With\DLL>regsvr32 /u dldrv.dll
c:\Directory\With\DLL>
Je evidentní, že pro jiné ovladače systému DataLab (například DataLab IF/EIB)
je třeba registrovat jinou DLL (například
'dleibdrv.dll').
Sama registrace, tak jak je zde popsána, nemusí být nutná
v případě, kdy již ovladač jako ActiveX registroval někdo jiný
(například instalátor ovladače). Tak či tak se případnou druhou
registrací nic nepokazí a lze ji bez obav provádět
i opakovaně.
Okamžikem registrace komponenty ji lze použít ve všech
programech rozumějících ActiveX. Záleží pak na konkrétním
programu a jeho zvyklostech (či dokonalosti), jak se
k ActiveX prvku ovladačů propracují.
Pravděpodobně však většina programů bude požadovat buď
unikátní identifkátor ActiveX prvku (GUID), nebo
symbolické jméno ActiveX prvku (ProgId). Například pro
ovladač DataLab IF/EIB je tato dvojice GUID
a jména následující: {5D9DAB98-D82D-4090-984A-C017768BE03C}
a ControlWeb.DrvAxDlIfEib. Navíc většina nástrojů pro
výběr komponenty nabízí nějaký vizuální nástroj (dialogové okno
apod.), takže výběr správného ActiveX prvku skutečně není
složitý.
Příklady použití
Ovladače systému Control Web lze jako
ActiveX použít na mnoha místech.
Všechna možná místa použití proto nelze dostatečně dobře
podchytit. Protože je však ActiveX standard, budou
i nepodchycená místa v principu podobná uvedeným
příkladům.
Každé použití ovladače jako ActiveX předpokládá, že pro konkrétní
jednotku systému DataLab bude existovat
správně sestavený konfigurační (parametrický) soubor. Tento
konfigurační soubor lze umístit kamkoli, protože při rozběhu
ActiveX prvku může být cesta
k němu uvedena kompletní.
Obsah konfiguračního souboru se liší ovladač od ovladače, a
přestože soubory mají formálně stejný zápis (dělí se na sekce a
klíče), je jejich zápis nutné vždy konzultovat s dokumentací
ovladače (dokumentace je součástí každého ovladače). Jako základ
konfiguračního souboru lze vždy vzít nějaký existující (například
ukázkový) konfigurační soubor.
Ukázka kódu VBScript pro komunikaci
s DataLab IO/USB uvnitř HTML
dokumentu
<html>
<head>
<title>DataLab IO ActiveX sample</title>
<object
id="DataLab"
classid="clsid:45D4DCAF-DCE7-4484-9321-8E12C7B7E8DB">
</head>
<script language="VBScript">
sub Init()
window.SetInterval "OnInterval", 10
DataLab.LoadPARFile "SOMEWHERE\dl.par", ""
end sub
sub OnInterval()
ReadAnalog()
end sub
sub ReadAnalog()
DataLab.MarkInput 500
DataLab.ReadInputs()
end sub
sub DataLab_OnInputRead( CS, Index, EC, Value )
AnalogBar.style.width =
CLng( Value ) / 32768 * 500
end sub
Init()
</script><body>
<p>Read analog value:
<span
id="AnalogBar"
style="background: red;"></span></p>
</body></html>
Uvedený krátký HTML dokument pomocí jednotky
DataLab IO/USB načítá údaj
z analogového vstupu a zobrazuje jej jako proměnlivě
široký červený pásek. V ukázce je v místě volání
procedury DataLab.LoadPARFile použit konfigurační
soubor 'SOMEWHERE\dl.par', který, samozřejmě, musí
být nahrazen cestou se správným umístěním souboru (cestou na
místním disku). V ukázce je dále použito číslo kanálu 500
(DataLab.MarkInput 500), toto číslo musí
odpovídat definovanému číslu kanálu v konfiguračním
souboru. Bude-li v tomto souboru vstupu přiřazeno jiné
číslo, bude i volání MarkInput obsahovat
jiné číslo.
Použití ActiveX v MSVisual Studio
ActiveX komponentu pro
DataLab IO/USB je možné uvnitř
vývojového prostředí stejně jako každou jinou komponentu.
V zásadě je nutné učinit následující kroky:
zařadit komponentu do projektu,
definovat komponentu, případně včetně jejích
událostí,
použít komponenty v programu.
- Zařazení komponenty do projektu
Komponenta se zařadí po výběru ze záložky COM. Tato
záložka zobrazuje COM komponenty známé operačnímu systému,
přičemž se nemusí vždy jednat o ActiveX prvky — přestože jich velká většina je právě taková.
Obrázek ukazuje nalezený ActiveX prvek ovladače
DataLab IF/EIB již po té, co byl do
projektu zařazen (tlačítkem Add).
Vybraný a přidaný ActiveX prvek ovladače
DataLab IF/EIB
- Definice objektu a připojení jeho událostí
Definice komponenty je odlišná podle jazyka a
platformy, která se používá. Tedy například, takhle nějak
může vypadat vytvoření objektu v C#: ...
private dldrv_ax.dldrv_ax DataLab = null;
...
DataLab = new dldrv_ax.dldrv_ax();
... nebo ve jazyku Visual Basic: ...
Private DataLab As dldrv_ax.dldrv_ax = null
...
DataLab = New dldrv_ax.dldrv_ax()
... Stejně tak se velmi může lišit spojení objektu s jeho
událostmi — od jednoduchého zápisu
události až po komplikovanější tvorbu spojujích objektů. To
vše je nicméně dobře v každém vývojovém nástroji
popsáno včetně průvodců a dokumentace.
- Vlastní použití komponenty
Použití komponenty již je potom jednoduché, tak jak
to je koneckonců uvedeno v ukázce skriptu v HTML
dokumentu. Princip práce ActiveX prvku je podrobně popsán
v dokumentaci, je však velmi jednoduchý, takže nic
nebrání popsat jej stručně v následující
sekci.
Princip práce ActiveX prvků
Operace čtení (neboli přenos dat z technologie
či hardware do počítače — programu)
i operace zápisu (opačný přenos dat
z počítače — programu do
technologie či hardware) vždy probíhají ve třech
krocích:
shromáždění a připravení seznamu dat, která se mají
číst nebo zapsat,
zahájení čtení nebo zápisu a průběh těchto
operací,
zpracování informací o dokončení čtení nebo
zápisu.
Tyto tři kroky komunikace probíhají dávkově. Po
shromáždění požadavků se zahájí komunikace a dokud
tato probíhající komunikace neskončí není
možné zahájit komunikaci novou. Neboli, dokud nejsou
dokončeny (přečteny nebo zapsány) všechny komunikace
v dávce, nelze zahájit dávku novou; dovnitř jedné dávky
nelze vsunout jinou. Avšak — jednotlivá
čtení i zápisy lze i uvnitř běžící dávky
připravovat pro dávku novou.
Všechny jednotlivé měřené či zapisované body označeny
číslem (indexem), pomocí kterých se
identifikují. V principu je možné pro
identifikaci použít jakákoli čísla, technicky jsou však
všechna možná čísla omezena aktuálním nastavením,
které je přesně zapsáno v konfiguračním souboru (soubor
má obyčejně příponu 'PAR').
Procedury ActiveX komponenty lze rozdělit do
třech skupin — procedury pro
nastavení a řízení, procedury pro
zahajování komunikace a procedury
pro zpracování výsledků komunikace. Procedury pro
nastavení a řízení se typicky použijí jednou, procedury pro
zahajování a řízení komunikace pak násobně — tak, jak je třeba data zapisovat nebo číst.
Na závěr
Co říci na závěr? Snad jen tolik, že všechny dostupné
informace, které jsou v tomto textu například jen zmíněny, je
možné velmi pohodlně získat buď na CD s ovladači dodávaném
s produkty DataLab, anebo, rovněž
velmi pohodlně, na internetových stránkách společnosti Moravské
přístroje — http://www.mii.cz.
|