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ánkaProduktyPrůmyslový počítačový systém DataLabJednotky vstupů a výstupů DataLab

Active X control pro DataLab IO/USB
 Active X control pro DataLab IO/USB slouží k jednoduchému zpřístupnění vstupních i výstupních dat, která poskytuje počítači systém průmyslových vstupů a výstupů DataLab.

Active X control je komponenta s programovým rozhraním odpovídajícím standardu Microsoft COM (Coponent Object Model), a lze ji proto použít ve všech nástrojích, prohlížečích a vývojových prostředcích, které s touto technologií umějí pracovat. To je například Internet Explorer, MS Visual Basic, MS C# a všechny programy, které umějí spustit Visual Basic Script, Java Script nebo C# script.

Poznámka:

Jednotky DataLab IO/USB jsou plně programově podporovány v systému rychlého vývoje vizualizačních a řídicích aplikací Control Web. Active X prvek tvoří most mezi rozhraním ovladače pro systém Control Web na jedné straně a technologií COM na straně druhé. Z tohoto důvodu tato dokumentace nepopisuje řadu témat, která jsou již zahrnuta v popisu ovladače DataLab IO/USB pro Control Web. Pro pochopení práce s jednotkami DataLab IO/USB jsou ale tyto informace důležité.

Například aby bylo možno s jednotkou DataLab IO/USB komunikovat, je nutné ji správně konfigurovat (definovat čísla komunikačních kanálů, nastavit měřicí rozsahy apod.). Konfigurace je uložena v tzv. parametrickém souboru (s příponou '.PAR') a před první komunikací je nutno specifikovat ve kterém souboru je žádaná konfigurace uložena (viz sekci Příprava ke komunikaci).

Doporučujeme proto nejprve se seznámit s vlastní dokumentací ovladače.

Instalace a přístup k Active X komponentě

Aby mohl operační systém všem zájemcům Active X komponentu správně poskytnout, musí být komponenta v systému korektně nainstalována. To představuje zajištění dvou věcí:

přístup k DLL komponenty

DLL může být v zásadě umístěna zcela kdekoli. Pro její umístění existuje pouze jediné omezení — jakmile je komponenta jednou zapojena do registru, nesmí být její DLL přemístěna. Operační systém by pak podle záznamů v registru hledal DLL na chybném místě a nic by samozřejmě nenašel.

Je-li proto potřeba DLL někam přemístit, je neprve nutné odstranit informace z registru. Teprve pak lze DLL přemístit a celý přesun se posléze ukončí novým zápisem informací do registru.

DLL komponenty je přímo obsahem instalace; její jméno je 'dldrv.dll'. Pro úspěšnoou funkci stačí tuto DLL nakopírovat na cílové místo.

záznamy v registru operačního systému

bez záznamů v registru není koponenta schopna práce. Po výběru místa a po okopírování DLL komponenty na to místo je proto nutné komponentu zaregistrovat.

To je jednoduché, protože komponenta má standardní rozhraní nutné pro registraci, takže pro tuto akci lze použít program regsvr32.exe, který je přímo součástí operačního systému. Pro registraci komponenty je třeba spustit příkazový řádek, přepnout se do adresáře s DLL a následně použitím regsvr32 komponentu zaregistrovat:

c:\Documents And Settings\User\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 And Settings\User\Documents>cd \Directory\With\DLL

c:\Directory\With\DLL>regsvr32 /u dldrv.dll

c:\Directory\With\DLL>

Jakmile je komponenta na správném místě a správně zaregistrována, nebrání již jejímu vytvoření a použití vůbec nic. Základní prostředek, jak komponentu vytvořit, je použít některou z jejích identifikací. Lze použít buď jméno (ProgId) komponenty, nebo unikátní identifikátor (GUID).

Active X control pro DataLab IO/USB má následující identifikátory:

ProgId (jméno)

ControlWeb.DrvAxDlUsb

GUID (číslo)

{45D4DCAF-DCE7-4484-9321-8E12C7B7E8DB}

Tedy, pomocí těchto identifikátorů lze komponentu vytvořit například následovně:

v HTML stránce
<head>
  <object id="DataLab" classid="clsid:45D4DCAF-DCE7-4484-9321-8E12C7B7E8DB"></object>
</head>
ve VBScriptu
set DataLab = CreateObject( "ControlWeb.DrvAxDlUsb" )
v jScriptu
DataLab = new ActiveXObject( "ControlWeb.DrvAxDlUsb" );

Je zřejmé, že každé jiné prostředí může mít jiný způsob, jak komponentu vytvořit i použít, ale to je samozřejmě v každém z těchto prostředí dobře popsáno. Active X control pro DataLab IO/USB je zcela standardní a budou pro něj proto platit všechna pravidla a postupy jako pro každý jiný COM objekt.

Princip práce komponenty

Programové rozhraní Active X komponenty je velmi jednoduché, neboť i princip práce s ním je jednoduchý. 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:

  1. shromáždění a připravení seznamu dat, která se mají číst nebo zapsat,

  2. zahájení čtení nebo zápisu a průběh těchto operací,

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

Tak jak je v ovladačích systému Control Web a vůbec v systému Control Web zvykem, jsou 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 hardware (tedy DataLab IO/USB), které je přesně zapsáno v samostatném konfiguračním, parametrickém, souboru (takový soubor má obyčejně příponu 'PAR').

Přesný význam obsahu parametrického souboru je součástí základní dokumentace ovladače jednotek DataLab IO/USB. Pro informaci, jak takový parametrický soubor může vypadat, viz ukázku:

[device]
status_channel = 99

[module_a]
module_type = digital_output
first_channel = 100
control_channel = 200

Možné indexy měřených a zapisovaných bodů, které lze pro komunikaci použít, jsou tak podle parametrického souboru v ukázce následující: 99, 100107 a 200.

Procedury Active X 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.

Většina procedur používá pro informování o stavu komunikace (chybách nebo výsledcích) výčtový typ TCommunicationState, jehož jednotlivé položky jsou tyto:

HodnotaVýznam
csSuccess (0)

úspěch, komunikace v pořádku

csPending (1)

komunikace stále probíhá (buď již začala, anebo je vstup již jednou ke čtení označen)

csNotRunning (2)

Active X control neběží, nebyla dosud zavolána procedura LoadPARFile()

csFailure (3)

komunikace skončila chybou — nikoli programovou chybou, ale chybou protokolu komunikace — například zařízení neodpovědělo, byla přečtena neplatná data, apod.

csBadIndex (4)

vstup či výstup s uvedeným indexem není znám, index neodpovídá konfiguraci určené parametrickým souborem

csBadDirection (5)

byl učiněn pokus zapsat do vstupu nebo pokus číst výstup, zvolený směr komunikace neodpovídá parametrickému souboru

Příprava ke komunikaci

(procedury jsou zapsány v notaci MS Visual Basic)

Function LoadPARFile(ByVal PARFilePath As String, ByRef ErrorMessage As String) As Integer

první procedura, kterou je nutné zavolat, aby Active X komponenta mohla korektně pracovat. Procedura se pokusí parametrický soubor 'PARFilePath' zpracovat a když zpracování skončí úspešně, zkonfiguruje komponentu podle obsahu tohoto souboru.

Význam parametrů a návratové hodnoty je následující:

ParametrVýznam
PARFilePath

cesta k parametrickému souboru. Vzhledem k tomu, že operační systém nezaručuje přesné nastavení aktuálního adresáře, je doporučeno uvádět tuto cestu kompletní, včetně disku a adresářů.

ErrorMessage

chybové hlášení. Parametr je naplněn zprávou o chybě, nepodaří-li se parametrický soubor korektně použít; v opačném případě zůstává hodnota tohoto parametru nezměněná.

návratová hodnota

výsledek konfigurace. Proběhlo-li načtení a konfigurace úspěšně, je návratová hodnota 1 (true). V opačném případě (když nastala chyba) je návratová hodnota funkce 0 (false).

Zahájení komunikace

(procedury jsou zapsány v notaci MS Visual Basic)

Function MarkInput(ByVal InputIndex As Integer) As TCommunicationState

procedura, pomocí které se označí vstup k měření, volání této procedury zařadí vstup s indexem InputIndex do fronty požadavků čtení. Volání procedury nezpůsobuje (nezahajuje) čtení.

Význam parametrů a návratové hodnoty je následující:

ParametrVýznam
InputIndex

index vstupu (platný podle parametrického souboru). Není-li index platný, vrátí procedura návratovou hodnotu csBadIndex.

návratová hodnota

výsledek označení, typicky csSuccess, csPending nebo csNotRunning.

Vstupy, které nejsou pomocí této procedury označeny pro čtení, Active X control nebude číst.

Podle aktuálního stavu měření lze rozlišit dvě situace a tím i dvoje chování vstup — buď vstup je součástí probíhající dávky, pak procedura vrátí csPending (1), vstup neoznačí a následující dávka měření nebude tento vstup číst; anebo vstup není součástí probíhající dávky (například jeho čtení právě skončilo) a tehdy procedura vstup označí a vstup bude v následující dávce změřen.

Function ReadInputs() As TCommunicationState

procedura, která po označení vstupů (pomocí MarkInput) zahájí komunikaci (čtení) všech označených vstupů. Procedura zahajuje novou čtecí komunikační dávku.

Význam návratové hodnoty je následující:

ParametrVýznam
návratová hodnota

výsledek zahájení dávky, typicky csSuccess byla-li dávka zahájena a stihla se hned ukončit; nebo csPending, pokud již dávka probíhá či pokud dávka byla zahájena a nestihla se dosud ukončit.

Function MarkOutput(ByVal OutputIndex As Integer, ByVal Value As String) As TCommunicationState

procedura, pomocí které se označí výstup pro zápis, volání této procedury zařadí výstup s indexem OutputIndex do fronty požadavků zápisu. Volání procedury nezpůsobuje (nezahajuje) zápis.

Význam parametrů a návratové hodnoty je následující:

ParametrVýznam
OutputIndex

index výstupu (platný podle parametrického souboru). Není-li index platný, vrátí procedura návratovou hodnotu csBadIndex.

Value

hodnota, která má být zapsána. Podle typu výstupu lze do řetězce zadávat například čísla (10.00) nebo logické hodnoty (true) apod.

návratová hodnota

výsledek označení, typicky csSuccess, csPending nebo csNotRunning.

Vstupy, které nejsou pomocí této procedury označeny pro zápis, Active X control nebude zapisovat.

Podle aktuálního stavu zápisu lze rozlišit dvě situace a tím i dvě chování vstup — buď výstup je součástí probíhající dávky, pak procedura vrátí csPending (1), výstup neoznačí a následující dávka měření nebude tento výstup zapisovat; anebo výstup není součástí probíhající dávky (například jeho zápis právě skončil) a tehdy procedura výstup označí a výstup bude v následující dávce zapsán.

Function WriteOutputs() As TCommunicationState

procedura, která po označení výstupů (pomocí MarkOutput) zahájí komunikaci (zápis) všech označených výstupů. Procedura zahajuje novou zapisovací komunikační dávku.

Význam návratové hodnoty je následující:

ParametrVýznam
návratová hodnota

výsledek zahájení dávky, typicky csSuccess byla-li dávka zahájena a stihla se hned ukončit; nebo csPending, pokud již dávka probíhá či pokud dávka byla zahájena a nestihla se dosud ukončit.

Zpracování výsledků

(procedury jsou zapsány v notaci MS Visual Basic)

Event OnInputRead(ByVal CommunicationState As TCommunicationState, ByVal InputIndex As Integer, ByVal ErrorCode As Integer, ByVal Value As String)

procedura (událost), kterou Active X vyvolá po dokončení čtení vstupu, ať již čtení skončilo úspěchem nebo chybou. Okamžikem volání této události lze vstup opětovně označit pro nové čtení (pomocí MarkInput).

Význam parametrů a návratové hodnoty je následující:

ParametrVýznam
CommunicationState

výsledek komunikace; skončilo-li čtení úspěchem má parametr hodnotu csSuccess, skončilo-li čtení komunikační chybou má parametr hodnotu csFailure.

InputIndex

index vstupu, jehož čtení skončilo.

ErrorCode

chyba komunikace; parametr má nenulovou hodnotu (neboli obsahuje kód chyby) pouze je-li CommunicationState = csFailure.

Value

přečtená hodnota. Parametr je platný pouze je-li CommunicationState = csSuccess.

Event OnOutputWritten(ByVal CommunicationState As TCommunicationState, ByVal InputIndex As Integer, ByVal ErrorCode As Integer)

procedura (událost), kterou Active X vyvolá po dokončení zápisu výstupu, ať již zápis skončil úspěchem nebo chybou. Okamžikem volání této události lze výstup opětovně označit pro nový zápis (pomocí MarkOutput).

Význam parametrů a návratové hodnoty je následující:

ParametrVýznam
CommunicationState

výsledek komunikace; skončil-li zápis úspěchem má parametr hodnotu csSuccess, skončil-li zápis komunikační chybou má parametr hodnotu csFailure.

OutputIndex

index výstupu, jehož zápis skončil.

ErrorCode

chyba komunikace; parametr má nenulovou hodnotu (neboli obsahuje kód chyby) pouze je-li CommunicationState = csFailure.

Ukázka kódu VBScript pro komunikaci s DataLab IO/USB

Dim DataLab
set DataLab = CreateObject("ControlWeb.DrvAxDlUsb")

sub Init()
  DataLab.LoadPARFile "dl.par", ""
end sub

sub WriteOutputs()
  DataLab.MarkOutput 200, State
  DataLab.WriteOutputs()
end sub

sub DataLab_OnOutputWritten( CommunicationStatus, Index, ErrorCode )
  alert "Written: " + CStr( Index ) + " with status: " + CStr( CommunicationStatus )
end sub

sub ReadAnalog()
  DataLab.MarkInput 500
  DataLab.ReadInputs()
end sub

sub DataLab_OnInputRead( CommunicationStatus, Index, ErrorCode, Value )
  alert "Read: " + CStr( Index ) + " with status: " + CStr( CommunicationStatus ) + " as value: " + CStr( Value )
end sub

Další ukázku a příklad lze najít v instalaci v souboru 'VBStest.htm', který ukazuje přímé zapojení (včetně kousků programu uvedeného v ukázce) do akcí v rámcí HTML stránky.

Upozornění:

Pro správnou práci ukázky (a nejen pro ni) je nutné Active X prvku překládat správný parametrický soubor. To představuje především zápis správného umístění tohoto souboru do parametru procedury LoadPARFile. Proto asi nejspíše, bez úpravy dodané ukázky, nebude komponenta schopna práce. Teprve po zápisu správné cesty k parametrickému souboru do 'VBStest.htm' bude komponenta pracovat správně.

Některé hodnoty parametru ErrorCode událostí OnInputRead a OnOutputWritten

Obecné chyby:

HodnotaVýznam
ecCommunicationTimeout (1)

zařízení po stanovenou dobu neodpovědělo

ecValueProcessing (2)

při zpracování údajů z/pro zařízení došlo k převodní chybě

ecUnknownElement (3)

zařízení požadovaný prvek nezná

ecBadDirection (4)

pokus číst výstup nebo zapsat výstup

ecValueTruncated (5)

při zpracování údajů z/pro zařízení byla hodnota ořezána

Chyby specifické pro DataLab IO/USB:

HodnotaVýznam
65537jednotka odpojena: DataLab IO/USB buď nemá připojené napájení (pouze u jednotek s externím napájením) nebo je rozpojen USB kabel. U jednotek DataLab IO/USB zabudovaných do počítačů DataLab PC by tato chyba neměla nastat, protože napájení i propojení USB je interní. Pokud přesto nastane, pravděpodobně je rozpojen některý vnitřní konektor.
65538špatný modul: Ve slotu odpovídajícím danému kanálu je jiný modul než je uvedeno v parametrickém souboru ovladače. Opravit parametrický soubor bývá zpravidla jednodušší než fyzicky přepojovat moduly. Pokud je ale parametrický soubor vytvořen automaticky pomocí konfiguračního nástroje ovladače, tato chyba nenastane.
65539modul nepodporuje čtení řídicího kanálu: pokus číst řídicí kanál modulu, který tuto funkci nepodporuje.
65540

modul nepodporuje zápis řídicího kanálu: pokus zapsat do řídicího kanál modulu, který tuto funkci nepodporuje.

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