Ovladač je určen pro komunikaci s moduly ADAM 4000/5000
od firmy ADVANTECH. Tento ovladač nevyžaduje programovou podporu od
firmy ADVANTECH a je určen především pro aplikace běžící na počítačích
s operačním systémem Windows CE.
Komunikuje přes standardní sériové rozhraní RS-232 (RS-485) a
používá linkovou komunikační vrstvu CWCOMM, která je součástí systému
Control Web. Ovladač je dodáván zvlášť pro vývojovou
resp. runtime verzi systému Control Web a samostatně
pro systém Windows CE. Jméno souboru ovladače je
'ADAM2.DLL'.
Upozornění:
Ovladač ADAM2 není kompatibilní
s ovladačem ADAM, který používá programovou
podporu firmy ADVANTECH.
Pro vývoj aplikací do Windows CE nelze použít ovladač
ADAM s podporou firmy ADVANTECH.
Vlastnosti ovladače
Komunikace s moduly ADAM 4000/5000.
Podporovány jsou základní příkazy komunikace pro čtení a
zápis analogových resp. digitálních vstupů a výstupů.
Možnost uživatelsky (v rámci aplikace) vytvářet
příkazy, které nejsou přímo ovladačem podporovány.
Jednoduché synchronní komunikace (dotaz — odpověď) nebo asynchronní komunikace s pevným
ukončovacím znakem zpráv <CR>.
Možnost monitorování zpráv na lince bez předchozího
vyslání požadavku.
Generování události při příjmu zprávy ze
zařízení.
Přidání předdefinovaných skupin znaků, které budou
automaticky připojeny na začátek vysílaného řetězce
(prefix).
Možnost reinicializace a změny parametrů komunikace za
běhu aplikace.
Seznam sekcí: - Vlastnosti ovladače
- Činnost ovladače
- Parametry ovladače
- Kanály ovladače
- Procedury ovladače
- Mapovací soubor ovladače a datové typy
- Zpracování a stavy výjimek ovladače
- Chybové kódy
- Příklad použití ovladače
Činnost ovladače
Pomocí tohoto ovladače je možno komunikovat s moduly ADAM
řady 4000 a 5000 přes standardní sériové rozhraní počítače. Pro
přenos dat mezi moduly ADAM a aplikací existují dva způsoby
přístupu. Prvním je standardní přístup prostřednictvím kanálů
ovladače. Pro tvůrce aplikace je jednoduchý, ale nepodporuje
všechny možnosti, které moduly poskytují. Druhý přístup je zcela
univerzální, ale je poněkud pracnější a vyžaduje větší zkušenost
s programováním. Využívá speciální procedury ovladače, které
je možno z aplikace volat.
Přístup pomocí kanálů
Pro čtení nebo zápis základních údajů z modulů ADAM
jako jsou analogové nebo digitální vstupy a analogové nebo
digitální výstupy je možno využít techniku čtení nebo zápisu
kanálů ovladače. Ovladač při tom na základě požadavků na čtení
nebo zápis kanálů používá základní komunikační příkazy #AA,
#AAN, $AA6, #AA(data),
#AABB(data) pro moduly ADAM 4000 a #AASi,
$AASi6, #AASiCj(data), #AASiBB(data)
pro moduly ADAM 5000. Podrobný popis komunikačních příkazů
modulů ADAM najdete v dokumentaci firmy ADVANTECH. Kanály
jednotlivých modulů nejsou v ovladači nijak pevně
definovány, ale tvoří se na základě požadavků tvůrce aplikace.
K tomuto účelu slouží soubor parametrů ovladače,
konkrétně jeho sekce [Channels]. V ní jsou
definovány jednotlivé moduly a způsob přiřazení jejich vstupů
či výstupů do kanálů ovladače. Přesný způsob definice kanálů
ovladače naleznete v kapitole Konfigurace kanálů ovladače — sekce
[Channels].
Přístup pomocí procedur ovladače
Jestliže se vyskytne potřeba použít i další příkazy
komunikace, je možno je vyvolat prostřednictvím procedur
ovladače. V tomto případě se dá do modulu vyslat
libovolný řetězec s požadavkem (příkazem) a pokud modul
odpoví, ovladač vrátí tuto odpověď opět jako řetězec do
aplikace. Je jen na tvůrci aplikace, jak s přijatou
odpovědí naloží. Při vysílání ovladač automaticky přidává na
konec zpráv znak <CR> a při příjmu očekává
tento znak jako ukončovací znak zprávy. Znak <CR>
pak není součástí přijaté zprávy. Ovladač může automaticky
generovat a ke zprávě přidávat kontrolní součet. Samozřejmě,
že pokud je tato vlastnost zapnuta, také testuje kontrolní
součet u přijatých zpráv. Existují dva způsoby komunikace
pomocí procedur — synchronní a
asynchronní.
Synchronní znamená, že se pomocí procedury vyšle příkaz do
modulu a ovladač čeká na odpověď. Když do doby stanovené
parametrem Timeout nepřijde odpověď, hlásí
ovladač chybu. V opačném případě ovladač signalizuje do
aplikace, že přijal odpověď a aplikace může číst přijatá
data.
Asynchronní znamená, že se pomocí procedury vyšle příkaz
(např. společný pro všechny moduly) a ovladač nečeká žádnou
odpověď. Samozřejmě, že pokud nějaká zpráva přijde, zpracuje
se stejným způsobem jako odpověď při synchronní komunikaci.
V praxi to znamená, že se do aplikace signalizují přijatá
data.
Parametry ovladače
Pomocí souboru parametrů je možno nastavit parametry
komunikace a definovat kanály ovladače, popřípadě nastavit další
doplňující parametry. Celý soubor parametrů je rozdělen do několika
sekcí. Název sekce je uveden v hranatých závorkách. V sekci
jsou uvedeny za jménem a znakem = jednotlivé parametry. Na
jednom řádku může být definován jeden parametr. Upozornění: U názvů
sekcí a parametrů je třeba dodržet správný zápis velkých a malých
písmen.
Parametry pro základní nastavení ovladače — sekce [Settings]
Tato sekce obsahuje parametry, které slouží ke konfiguraci
ovladače z hlediska komunikace. Způsob zápisu parametrů a
jejich možné hodnoty:
[Settings]
ComDriver = <LinkDll> <ComId>
NumRepeat = <N>
Timeout = <N>
InputBufferSize = <N>
OutputBufferSize = <N>
MaxExceptions = <N>
Trace = none | log | xtrace | windows
InterMessageDelay = <N>
Readback = true | false
Monitor = true | false
Význam symbolů:
Základní syntaktické kategorie použité v konfiguraci
ovladače: Objekt | Popis |
---|
LinkDll | řetězec obsahující jméno DLL knihovny linkového
ovladače. | ComId | řetězec obsahující jméno komunikačního portu. | N | číselná hodnota. Může být zapsána dekadicky nebo
hexadecimálně (ukončena znakem H). |
Následuje výčet a popis jednotlivých
parametrů: ComDriver | jméno knihovny ovladače sériového
rozhraní (linkové vrstvy) a jméno komunikačního portu
(COMx), který je nainstalován v prostředí Windows.
Jméno standardního ovladače je 'CWCOMM.DLL'. | NumRepeat | počet opakování požadavků na komunikaci
po výskytu chyby. Implicitní hodnota je 3. Týká
se synchronního módu komunikace. | Timeout | čas čekání na odezvu v milisekundách.
Nedojde-li do této doby odpověď od zařízení, bude vrácena do aplikace
chyba komunikace. Implicitní hodnota je 1000
ms. | Monitor | Parametr přepíná ovladač do režimu sledování
komunikace na lince. V tomto režimu ovladač nečte ani
nezapisuje kanály, ale pouze sleduje stav na komunikační
lince a do aplikace předává jednotlivé zachycené zprávy.
Zprávy se předávají prostřednictvím volání procedury
ovladače Receive. | InputBufferSize | velikost přijímacího komunikačního
bufferu. Ovladač si zpravidla tuto hodnotu nastavuje sám. Implicitní hodnota je
1024 byte. | OutputBufferSize | velikost vysílacího komunikačního
bufferu. Ovladač si zpravidla tuto hodnotu nastavuje sám. Implicitní hodnota je
1024 byte. | InterMessageDelay | minimální časová prodleva před
následujícím požadavkem na komunikaci v milisekundách. Ovladač nezahájí
další komunikaci dříve než uplyne nastavený čas od naposledy přijaté
odpovědi zařízení. | Readback | parametr slouží k automatickému
filtrování zpráv, které se dostávají zpět na vstup přijímače při
vysílání. To může nastávat například u některých starších typů
převodníků RS-232/RS-485. Dále je možno tento parametr použít
u zařízení, která přijatou zprávu vysílají nazpět
(echo). | MaxExceptions | velikost fronty pro nezpracované
výjimky od ovladače. Implicitní nastavení je
4 096. | Trace | zapnutí trasovacích výpisů komunikace.
Je-li nutno sledovat komunikaci ovladače se zařízením, je možno zvolit
tímto parametrem cíl trasovacích výpisů. Možné hodnoty parametru jsou: Hodnota | Význam |
---|
none | žádné trasovací výpisy | log | výpisy jsou nasměrovány do Okna zpráv záložky
Ladicí výpisy systému Control Web | xtrace | výpisy jsou nasměrovány do souboru
'\XTRACE.TXT' | windows | výpisy jsou nasměrovány do ladicího okna systému
Windows |
Upozornění: Trasovací výpisy zpomalují činnost aplikace,
popřípadě mohou vést ke zmenšování prostoru v paměti nebo na disku.
Proto se nedoporučuje používat trasovací výpisy ve finální
aplikaci. |
Příklad parametrů v sekci [Settings]:
[Settings]
ComDriver = CWCOMM.DLL COM4
Timeout = 350
InterMessageDelay = 0
NumRepeat = 1
Trace = none
Monitor = false
Readback = false
Konfigurace kanálů ovladače — sekce
[Channels]
Tato sekce definuje jednotlivé kanály nebo skupiny kanálů
ovladače a jejich přiřazení ke vstupům nebo výstupům
jednotlivých modulů ADAM. Jednotlivé kanály resp. skupiny
kanálů se definují jako bloky. Blok je popsán intervalem
kanálů, typem a adresou modulu (u modulů ADAM 5000 musí
být adresa doplněna ještě číslem slotu). Definice bloku dále
obsahuje typ vstupu nebo výstupu a parametr, který určuje,
jestli se při komunikaci bude používat zabezpečení přenosu dat
pomocí kontrolního součtu. Popis bloku může obsahovat
i speciální skupinu znaků (řetězec), která se vyšle do
modulu na začátku každé zprávy (prefix). Tato skupina může být
použita např. pro ovládání adresovatelných převodníků
ADAM-4521.
Následuje způsob zápisu parametrů a jejich možné hodnoty.
Každé skupině (bloku) kanálů odpovídá jeden řádek textu. V
hranatých závorkách jsou uvedeny nepovinné nebo doplňující
parametry:
[Channels]
<From> [<- To>] = Adam:<N>, [Prefix:<S>,] Adr:<N>, [Slot:<N>,] ChSum:<N>, Data:<S>
<From> [<- To>] = ...
...
Význam symbolů:
From | číslo prvního kanálu v bloku. | To | číslo posledního kanálu v bloku. | N | číselná hodnota zapsaná buď dekadicky nebo
v šestnáctkové soustavě. Ve druhém případě musí být
číslo zakončené znakem 'H', např. 1AH. | S | textový řetězec. |
Následuje výčet a popis jednotlivých parametrů:
Adam | číslo za dvojtečkou udává číslo (typ) modulu ADAM,
např. 4012. | Prefix | řetězec, který bude vyslán před vlastním příkazem
komunikace. | Adr | adresa modulu ADAM | Slot | slot u modulů ADAM 5000 | ChSum | příznak zabezpečení přenosu pomocí kontrolního
součtu. 0 znamená kontrolní součet vypnutý, 1 znamená
kontrolní součet zapnutý. | Data | typ dat v oblasti. Možné hodnoty jsou: AI | analogový vstup nebo skupina vstupů. Ovladač
předpokládá, že moduly jsou nastaveny tak, aby vracely
hodnoty ve formě desetinných čísel (Engineering
Units). | AO | analogový výstup nebo skupina výstupů. Ovladač
předpokládá, že moduly jsou nastaveny tak, aby vracely
hodnoty ve formě desetinných čísel (Engineering
Units). | DI | digitální vstup nebo skupina vstupů, popřípadě
stavy výstupů. Každý bit je jeden boolean kanál. Při
čtení hodnot digitálních vstupů vrací moduly hodnotu
jako 2 byte (16 bitů), jejichž význam je pro různé
moduly různý. Např. pro ADAM-4050 jsou v prvním
byte hodnoty digitálních výstupů a ve druhém byte jsou
hodnoty digitálních vstupů. Prvních 8 kanálů bloku tedy
obsahuje stavy výstupů a druhých 8 kanálů bloku vrací
stavy vstupů. | DO | digitální výstup nebo skupina výstupů. Každý bit
je jeden boolean kanál. | DIB | skupina 8 digitálních vstupů resp. stavů výstupů,
přečtená jako číslo v intervalu 0 až 255. Při čtení
hodnot digitálních vstupů vrací moduly hodnotu jako 2
byte (16 bitů), jejichž význam je pro různé moduly
různý. Např. pro ADAM-4050 jsou v prvním byte
hodnoty digitálních výstupů a ve druhém byte jsou
hodnoty digitálních vstupů. První kanál bloku tedy
obsahuje stavy výstupů a druhý kanál bloku vrací stavy
vstupů. | DOB | skupina 8 digitálních výstupů, zapsaná jako číslo
v intervalu 0 až 255. |
|
Příklad parametrů v sekci [Channels]:
[Channels]
100 - 107 = Adam:4018, Adr:2BH, ChSum:1, Data:AI
110 = Adam:4011, Adr:02H, ChSum:0, Data:AI
120 - 127 = Adam:5017, Adr:03H, Slot:0, ChSum:0, Data:AI
200 = Adam:4021, Adr:0AH, ChSum:0, Data:AO
210 - 213 = Adam:5024, Adr:03H, Slot:1, ChSum:0, Data:AO
300 - 315 = Adam:4050, Adr:10H, ChSum:0, Data:DI
316 - 331 = Adam:5060, Adr:03H, Slot:2, ChSum:0, Data:DI
400 - 407 = Adam:4050, Adr:10H, ChSum:0, Data:DO
408 - 415 = Adam:5060, Adr:03H, Slot:2, ChSum:0, Data:DO
500 - 501 = Adam:4050, Adr:10H, ChSum:0, Data:DIB
502 - 503 = Adam:5060, Adr:03H, Slot:2, ChSum:0, Data:DIB
600 = Adam:4050, Adr:10H, ChSum:0, Data:DOB
601 = Adam:5060, Adr:03H, Slot:2, ChSum:0, Data:DOB
Parametry spojení s připojenými jednotkami — sekce [Unit_n]
Pokud ovladač komunikuje s více
zařízeními, která jsou připojena na jedné sběrnici, může nastat případ,
kdy je některé z nich nedostupné. To může být způsobeno buď
poruchou zařízení, jeho vypnutím, či odpojením a pod. Jestliže tato
situace nastane a aplikace požaduje po ovladači výměnu dat s tímto
zařízením, může dojít ke zpomalení běhu celé aplikace vlivem čekání
ovladače na odpověď od tohoto zařízení (po dobu definovanou parametrem
Timeout). Aby se zabránilo těmto stavům, je ovladač vybaven
možností nefungující zařízení logicky odpojit. To znamená, že se
zařízení z pohledu ovladače uvede do vypnutého neboli odpojeného
stavu. Nachází-li se zařízení v odpojeném stavu, požadavky aplikace
na komunikaci s ním budou ovladačem ignorovány (budou ztraceny). Do
odpojeného stavu může být zařízení uvedeno buď uživatelsky (povelem
z aplikace) nebo automaticky po výskytu chyby komunikace (jestliže
zařízení neodpovídá na požadavky od ovladače). Připojení zařízení, které
je v odpojeném stavu se uskuteční automaticky po uplynutí předem
definované doby (parametr ovladače) nebo opět uživatelsky — povelem z aplikace. Akce připojení nezpůsobí okamžitý
požadavek na komunikaci, ale pouze nastaví pro zařízení stav, kdy
s ním ovladač může opět komunikovat — zařízení přejde do stavu připojeno. Fyzicky se komunikace
uskuteční až v důsledku následující žádosti aplikace na přenos dat.
Je-li zařízení stále nedostupné, vznikne opět chyba komunikace a
zařízení přejde znovu do stavu odpojeno. Připojit nebo odpojit
zařízení je možno prostřednictvím kanálů ovladače č. 28 a 29 nebo voláním procedur ovladače UnitConnect
a UnitDisconnect. Aby bylo možné využívat zmíněné
vlastnosti ovladače, je třeba pro každé zařízení, ke kterému se má
ovladač takto chovat, definovat zvláštní sekci v souboru parametrů.
Název sekce je složen z klíčového slova Unit_ (se
znakem podtržítko) a pořadového čísla sekce v souboru parametrů,
např. Unit_1. Číslování sekcí musí začínat od jedničky a
pokračovat v souvislé řadě. Číslo v názvu sekce nemá nic
společného s adresou zařízení. Způsob zápisu parametrů a
jejich možné hodnoty: [Unit_<N>]
UnitAdr = <N>
StatusChannel = <N>
CheckTime = <N> Následuje výčet a popis jednotlivých parametrů: Parametr | Význam |
---|
UnitAdr | Adresa resp. identifikátor zařízení, které může být logicky
odpojeno nebo připojeno. Tato adresa (identifikátor) musí souhlasit
s identifikátorem spojení v definicích bloků kanálů, kde
je odkaz na konkrétní připojené zařízení (fyzická adresa, IP adresa,
jméno zařízení apod. ) . | StatusChannel | Číslo kanálu, pomocí kterého je možno zjistit stav zařízení.
Typ kanálu je real. Je-li zařízení odpojeno kanál vrací
hodnotu 0. V opačném případě vrací hodnotu 1. | CheckTime | Doba po které bude odpojené zařízení znovu připojeno. Udává
se v sekundách. |
Příklad zápisu parametrů: [Unit_1]
UnitAdr = 15
StatusChannel = 1000
CheckTime = 60
Parametry linkové komunikační vrstvy — sekce [comm]
Linková komunikační vrstva
představuje prostředek pro přístup na standardní sériové rozhraní
počítače. Tato vrstva umožňuje mimo jiné sdílet jedno sériové rozhraní
více ovladači. V systému Control Web je linková
komunikační vrstva reprezentována dvěma DLL knihovnami
('CWXLINK.DLL' a 'CWCOMM.DLL'). Pro její
konfiguraci slouží v souborech parametrů ovladače sekce [comm].
V této sekci je možno buď přímo definovat parametry sériové komunikace
nebo uvést odkaz (přesměrovaní) na samostatný konfigurační soubor s
parametry sériové komunikace. V případě přesměrování obsahuje sekce
[comm] pouze jediný parametr — file: [comm]
file=c:\cw\par\comm.par Struktura parametrů linkové
vrstvy: [comm]
file = <file>
device = <comdevice> Pokud je definován parametr device
a existuje sekce jména comdevice, budou konfigurační parametry
přednostně získány z této sekce, jinak budou použity parametry přímo ze
sekce [comm]. Povinné parametry: [comm]
rx_frame_buffer = <N>
tx_frame_buffer = <N>
baudrate = <N>
databits = <N>
stopbits = one | 1 | oneandhalf | 1.5 | two | 2
parity = none | no | even | mark | odd | space
cts_flow = true | false
dsr_flow = true | false
dtr_control = disable | low | enable | high | handshake | toggle | toggle_neg
rts_control = disable | low | enable | high | handshake | toggle | toggle_neg
dsr_sense = low | high
rx_interchar_timeout = <N>
rx_char_timeout = <N> | 0
rx_timeout = <N> | 0
tx_char_timeout = <N> | 0
tx_timeout = <N> | 0 Nepovinné parametry: priority = idle | low | below_normal | normal | above_normal | high | realtime
mode = fullduplex | halfduplex
pre_key = <N>
hold_key = <N>
rx_buffer = <N>
tx_buffer = <N>
tx_continue_xon_xoff = true | false
tx_xon_xoff = true | false
rx_xon_xoff = true | false
xon_tresh = <N>
xoff_tresh = <N>
error_xlat = true | false
discard_null = true | false
xon_char = <N>
xoff_char = <N>
err_char = <N>
eof_char = <N>
evt_char = <N> Syntaktické kategorie: Objekt | Popis |
---|
file | jméno souboru u parametru file | comdevice | název sekce u parametru device | N | číselná hodnota |
Popis jednotlivých parametrů: Parametr | Význam |
---|
file | soubor parametrů. Tento parametr je výhodné použít v
případech, kdy více ovladačů používá jedinou linkovou vrstvu.
Parametry lze potom udržovat v jediném souboru. | device | jméno zařízení, například COM1. Pokud je
tento parametr uveden, bude použito zařízení tohoto jména. Pokud
zároveň existuje sekce stejného jména, budou následující parametry
získány z této sekce. Pokud sekce tohoto jména neexistuje,
parametry jsou načteny z aktuální sekce [comm]. | priority | priorita komunikačního threadu. Implicitní hodnota je normal. | mode | režim činnosti (obousměrná/jednosměrná komunikace).
Implicitní hodnota je fullduplex. | pre_key | určuje prodlevu před zahájením přenosu. Stav signálů DTR/RTS,
pokud pracují v toggle módu, je po dobu prodlevy již změněn na
aktivní. | hold_key | určuje prodlevu po ukončení přenosu. Signály DTR/RTS, pokud
pracují v toggle módu, zůstávají po tuto dobu prodlevy ještě
aktivní. | rx_frame_buffer | velikost sekundárního bufferu pro vstup. Přípustný rozsah
<96;65535>, parametr nemá implicitní hodnotu. | tx_frame_buffer | velikost sekundárního bufferu pro výstup. Přípustný rozsah
<96;65535>, parametr nemá implicitní hodnotu. | rx_buffer | velikost bufferu pro vstup; rozsah <96;65535>,
implicitně 4096. | tx_buffer | velikost bufferu pro výstup; rozsah <96;65535>,
implicitně 4096. | baudrate | komunikační rychlost. | databits | počet data bitů. | stopbits | počet stop bitů. | parity | parita přenosu. | cts_flow | povoluje CTS řízení (handshake). | dsr_flow | povoluje DSR řízení (handshake). | dtr_control rts_control | chování DTS a RTS, význam hodnot viz dále. | dsr_sense | určuje, je-li DSR aktivní v úrovni high nebo low (high =
pozitivní handshake, low = negativní handshake). | tx_continue_xon_xoff | povoluje zastavení vysílání pokud je vstupní buffer plný a
byl vyslán znak XOFF (xoff_char). Pokud je nastaveno
true, vysílání pokračuje od okamžiku, kdy je ve
vstupním bufferu nejméně xoff_tresh znaků volných a
ovladač vyslal XOFF znak (xoff_char) pro přibrzdění
příjmu. Pokud je nastaveno false, vysílání nepokračuje
do okamžiku než je ve vstupním bufferu alespoň xon_tresh
znaků volných a ovladač vyslal XON znak (xon_char) pro
obnovení příjmu. Implicitní hodnota je false. | tx_xon_xoff | povoluje XON/XOFF (software) řízení pro výstup. Implicitní
hodnota je false. | rx_xon_xoff | povoluje XON/XOFF (software) řízení pro vstup. Implicitní
hodnota je false. | xon_tresh | minimální volná kapacita vstupního bufferu pro vyslání XON.
Implicitní hodnota je 50 procent. | xoff_tresh | ovlivňuje maximální počet znaků ve vstupním bufferu pro
vyslání XOFF. Maximální počet přípustných znaků lze spočítat
odečtením uvedené hodnoty od velikosti vstupního bufferu
(rx_buffer). Implicitní hodnota je 80 procent. | error_xlat | povoluje nahrazení znaků přijatých s chybou parity znakem
err_char. Pokud je nastaveno true a kontrola parity
povolena, dochází k nahrazení. Implicitní hodnota je false. | discard_null | povoluje odstranění prázdných (NULL) znaků. Pokud je
nastaveno true, každý NULL znak je ihned po přijetí
odstraněn ze vstupního bufferu. Implicitní hodnota je false. | xon_char | dekadický kód znaku XON. | xoff_char | dekadický kód znaku XOFF. | err_char | dekadický kód znaku, který je určen pro nahrazení znaků
přijatých s chybou parity. | eof_char | dekadický kód znaku EOF. | evt_char | dekadický kód znaku EVT. | rx_interchar_timeout | meziznaková prodleva pro příjem v milisekundách. | rx_char_timeout | prodleva na jeden přijatý znak v milisekundách. | rx_timeout | konstantní prodleva pro příjem v milisekundách. | tx_char_timeout | prodleva na vyslání jednoho znaku v milisekundách. | tx_timeout | konstantní prodleva pro vysílání v milisekundách. |
Hodnoty pro definici chování DTS a RTS (parametry rts_control
a dtr_control): Hodnota | Význam |
---|
disable | řízení vypnuto, trvale v úrovni low | low | stejně jako disable | enable | řízení vypnuto, trvale v úrovni high | high | stejně jako enable | handshake | pozitivní handshake | toggle | signál mění stav během přenosu dat na high (pozitivní klíč),
jinak trvale v low | toggle_neg | signál mění stav během přenosu dat na low (negativní klíč),
jinak trvale v high |
Chování DTR/RTS v módech toggle/toggle_neg Upozornění: Parametry rx_interchar_timeout,
rx_char_timeout a rx_timeout ovlivňují
propustnost na vstupu. Zvýšením hodnoty rx_timeout lze
dosáhnout zvýšení efektivity pro rozsáhlé přenosy dat (pozor na kapacitu
vstupního bufferu!), ale dojde také k prodloužení prodlev při příjmu
separátních bloků dat. Nulové hodnoty parametrů způsobí nastavení
optimálních hodnot podle parametrů komunikace. Parametry tx_char_timeout
a tx_timeout ovlivňují propustnost na výstupu. Zvýšením
hodnot lze docílit vyšší efektivity pro rozsáhlé přenosy dat, zvláště
při povoleném handshake. Příliš malé hodnoty mohou způsobit problémy při
vysílání, včetně potenciálně velkého počtu neúspěšných pokusů o vyslání.
Nulové hodnoty parametrů způsobí nastavení optimálních hodnot podle
parametrů komunikace.
Příklad parametrů v sekci [comm]:
[comm]
baudrate = 9600
parity = no
databits = 8
stopbits = 1
rx_buffer = 2048
tx_buffer = 2048
rx_frame_buffer = 2048
tx_frame_buffer = 2048
cts_flow = false
dsr_flow = false
dtr_control = disable
rts_control = disable
dsr_sense = low
rx_interchar_timeout = 0
rx_char_timeout = 0
rx_timeout = 0
tx_char_timeout = 0
tx_timeout = 0
Kanály ovladače
Ovladač má jednak pevně přidělenou množinu kanálů se
speciálními funkcemi a dále uživatelsky definované bloky kanálů.
Ty jsou popsány v kapitole Konfigurace kanálů ovladače — sekce
[Channels]
Vyhrazené kanály ovladače
Kromě uživatelsky definovaných
kanálů, viz sekce [Channels], má ovladač skupinu kanálů,
které jsou pevně definovány. Tyto kanály jsou vyhrazeny pro poskytování
stavových informací o ovladači a pro řízení jeho činnosti. Jsou mapovány
do intervalu 1 až 99. Proto kanály s těmito čísly nepoužívejte
v definici bloků pro komunikaci:
- č. 1 (real input)
stav výjimky od ovladače
- č. 2 (boolean output)
povolení výjimky od ovladače
- č. 3 (real input)
počet zpracovaných výjimek od ovladače
- č. 4 (real input)
počet nezpracovaných výjimek, které má ovladač ve
frontě
- č. 5 (real input)
adresa stanice, která způsobila výjimku
- č. 6 (real input)
chybový kód
- č. 7 (string input)
popis chyby
- č. 8 (real input)
číslo prvního kanálu bloku, při jehož přenosu vznikla
chyba
- č. 9 (real input)
číslo posledního kanálu bloku, při jehož přenosu vznikla
chyba
- č. 10 (real input)
datový typ, při jehož přenosu vznikla
chyba: Hodnota | Význam |
---|
1 | analogové vstupy AI. | 2 | analogové výstupy AO. | 3 | digitální vstupy DI — typ boolean. | 4 | digitální výstupy DO — typ boolean. | 5 | digitální vstupy DIB — číselný typ. | 6 | digitální výstupy DOB — číselný typ. |
- č. 11 (real input)
počet chyb čtení
- č. 12 (boolean output)
vynulování počítadla chyb čtení
- č. 13 (real input)
počet chyb zápisu
- č. 14 (boolean output)
vynulování počítadla chyb zápisu
- č. 15 (real input)
celkový počet opakování požadavků na komunikaci
Automatická konverze typů
Při definování kanálů ovladače je nutno kromě zápisu bloků
v souboru parametrů vytvořit také soubor '*.DMF',
který obsahuje seznam kanálů a jejich typů pro aplikaci.
Ovladač nevyžaduje striktní dodržování stejných typů v
definici bloků a souboru '*.DMF'. Pouze
doporučujeme aby kanály typu boolean (logické) v
souboru '*.DMF' měly své protějšky v blocích v
souboru '*.PAR' jako některý z bitových typů.
Ostatní číselné typy se mohou kombinovat. Např. v souboru
'*.DMF' mohou být všechny číselné kanály typu
real a v blocích ovladače mohou být uvedeny třeba
jako int16.
Příklad automatické konverze typu int16 na
real.
Procedury ovladače
Aplikace může volat ovladači
určité procedury, pomocí nichž je možno řídit chování ovladače nebo
získat důležité informace. To se děje prostřednictvím systémové
procedury: core.DriverQueryProc( DriverName : string; Param1 : any; &Param2 : any ) Její parametry mají následující význam: Parametr | Význam |
---|
DriverName | symbolické jméno ovladače, definované v aplikaci, | Param1 | slouží k zadání povelu (jména procedury ovladače), | Param2 | je použit jako parametr procedury nebo návratová hodnota
procedury. |
DriverName a Param1 se zadávají jako
textové řetězce. Param2 je různého typu podle významu
procedury. Některé procedury, sloužící k nastavení parametrů, mohou
skončit chybou. Výsledek naposled vykonané procedury je možno získat
voláním procedury GetResult.
Přehled a význam jednotlivých procedur ovladače (parametr Param1)
- GetResult
-
Vrátí výsledek naposledy volané
procedury ovladače. Výsledkem je některý z chybových kódů, popsaných v
kapitole Chybové kódy. Tato procedura by se
měla volat po volání těch procedur, u kterých může nastat
chyba.
- GetVersion
-
Vrátí v Param2 řetězec popisující
jméno a verzi ovladače.
- GetMajorVersion
-
Vrátí vyšší slovo verze
produktu Control Web.
- GetMinorVersion
-
Vrátí nižší slovo verze
produktu Control Web.
- GetAPIMajorVersion
-
Vrátí vyšší slovo verze API
produktu Control Web.
- GetAPIMinorVersion
-
Vrátí nižší slovo verze API
produktu Control Web.
- EnableException
-
Voláním této procedury se
povolí další výjimka od ovladače.
- GetErrorCode
-
Vrátí číslo chyby právě
zpracovávané výjimky ovladače.
- GetErrorString
-
Vrátí popis chyby právě
zpracovávané výjimky ovladače.
- GetExcStatus
-
Vrátí kód právě zpracovávané
výjimky ovladače.
- SetTraceOutput
-
Nastaví cíl trasovacích výpisů komunikace. Parametr udává
cíl výpisů: Hodnota | Význam |
---|
0 | žádné trasovací výpisy | 1 | výpisy jsou nasměrovány do ladicího okna systému
Windows | 2 | výpisy jsou nasměrovány do Okna zpráv záložky
Ladicí výpisy systému Control Web | 3 | výpisy jsou nasměrovány do souboru
'\XTRACE.TXT' |
- SetDevice
-
Nastaví jméno COM portu pro otevření
pomocí procedury OpenCom.
- GetDevice
-
Vrátí aktuální jméno COM portu
(nemusí se shodovat se jménem nastaveným pomocí procedury SetDevice).
- OpenCom
-
Otevře COM port definovaný procedurou
SetDevice a vrací popis chyby.
- CloseCom
-
Zavře aktuální COM
port.
- IsOpen
-
Vrátí aktuální stav COM portu — otevřen/zavřen.
- SetComParams
-
Nastaví parametry COM portu.
Parametr je ve tvaru: 'baud=n, data=n, parity=n, stop=n'.
- GetComParams
-
Vrátí aktuální parametry COM
portu.
- SetBaudRate
-
Nastaví komunikační rychlost, např.
19200.
- GetBaudRate
-
Vrátí aktuální komunikační
rychlost.
- SetDataBits
-
Nastaví počet datových bitů
komunikace. Možné hodnoty jsou 5, 6, 7, 8.
- GetDataBits
-
Vrátí počet datových
bitů.
- SetParity
-
Nastaví paritu přenosu: Hodnota | Význam |
---|
0 (none) | bez parity | 1 (odd) | lichá | 2 (even) | sudá | 3 (mark) | značka | 4 (space) | mezera |
- GetParity
-
Vrátí aktuální paritu přenosu.
Hodnoty jsou stejné jako u procedury SetParity.
- SetStopBits
-
Nastaví počet stop bitů komunikace: Hodnota | Význam |
---|
0 | 1 stop bit | 1 | 1.5 stop bitu | 2 | 2 stop bity |
- GetStopBits
-
Vrátí aktuální počet stop bitů
komunikace.
- SetTimeout
-
Nastaví timeout komunikace v
milisekundách. Je to doba, kterou ovladač čeká po odeslání požadavku na
odpověď od zařízení. Pokud odpověď do této doby nepřijde, vznikne chyba
timeout.
- GetTimeout
-
Vrátí aktuální hodnotu timeoutu
komunikace.
- SetCheckSum
-
Zapíná nebo vypíná zabezpečení přenosu dat pomocí
kontrolního součtu. Parametr je typu boolean.
- SendAsync
-
Vyšle řetězec, který se předává jako parametr procedury.
Ovladač nečeká na odpověď od zařízení.
- SendSync
-
Vyšle řetězec, který se předává jako parametr procedury.
Ovladač čeká na odpověď od zařízení. Když do doby dané
parametrem Timeout přijde odpověď (zpráva
ukončená znakem <CR>), je do aplikace
generována výjimka od ovladače. Stav výjimky — kanál č.1 má hodnotu 3 a kanál č.6 — kód chyby vrátí hodnotu 0. Jestliže odpověď
nepřijde, stav výjimky je 3 a kód chyby je 1 (chyba
timeout).
- Receive
-
Procedura přečte z ovladače přijatou zprávu a vrátí
ji ve svém parametru, který musí být typu string.
Proceduru má význam volat, když nastane výjimka od ovladače
a současně její stav je 3 a kód chyby je 0. Parametr
procedury (Param2), ve kterém se vrací přijatý
řetězec musí být uveden znakem '&'
např.
core.DriverQueryProc( 'adam2', 'Receive', &s );
- SetMonitorMode
-
Nastaví ovladač do režimu monitorování zpráv na lince.
Každý přijatý řetězec způsobí vznik výjimky od ovladače.
V tomto módu je možné sledovat komunikaci mezi jiným
počítačem a moduly ADAM. Samozřejmě, že pro to musí být
vytvořena i aplikace, která bude přijaté zprávy
vyhodnocovat.
Mapovací soubor ovladače a datové typy
Tento soubor obsahuje typy kanálů ovladače. Protože ovladač má
jak pevnou množinu kanálů, tak proměnnou množinu kanálů, měl by
tento soubor obsahovat vždy shodnou definici pro vyhrazené kanály
a různou (podle požadavků aplikace) pro kanály definované
uživatelsky pomocí sekce [Channels].
Zpracování a stavy výjimek ovladače
Při výskytu chyby komunikace
vznikne událost, kterou ovladač může přenést jako výjimku do aplikace. V
aplikaci musí být definován objekt (virtuální přístroj), který má
definován parametr driver_exception se symbolickým jménem
tohoto ovladače. V tomto případě je takový přístroj výjimkou aktivován.
V rámci jeho činnosti je třeba zapsat na kanál č. 2 hodnotu true nebo zavolat proceduru
ovladače EnableException. Tím se povolí vyvolání další
výjimky, jakmile nastane nebo pokud není fronta výjimek prázdná.
Přečtením kanálu č. 1 je možno zjistit stav
výjimky. Při použití kanálu č. 2 je třeba
pamatovat na to, aby měl virtuální přístroj nastaven parametr send_same_data.
Pokud aplikace výjimky nezpracovává, přidávají se do fronty, jejíž
maximální velikost je určena parametrem MaxExceptions
v sekci [Settings].
Kódy pro stavy výjimek ovladače
Hodnota | Význam |
---|
0 | žádná výjimka od ovladače | 1 | výjimka signalizuje chybu při čtení dat. Její kód a popis je
možno získat voláním procedury ovladače GetErrorCode
nebo čtením kanálu č. 6. | 2 | výjimka signalizuje chybu při zápisu dat. Její kód a popis je
možno získat voláním procedury ovladače GetErrorCode
nebo čtením kanálu č. 6. | 3 | změna dat v zařízení. U asynchronních komunikací
nebo v případě, že ovladač vystupuje jako podřízená stanice (slave),
se takto signalizuje změna dat v zařízení. | 4 | chyba procedury ovladače. Vykonání některých procedur
ovladače může zabrat poměrně dlouhou dobu. Proto běží zpravidla ve
zvláštním threadu, aby nezdržovaly běh aplikace. Pokud procedura
skončí chybou, způsobí generování výjimky s tímto
kódem. |
Chybové kódy
Ovladač generuje následující chybové
kódy. Tyto kódy jsou k dispozici na kanále č. 6. Kód a popis chyby je také možno získat voláním
procedur ovladače GetErrorCode a GetErrorString.
Při vzniku chyby se současně vypíše hlášení do Okna zpráv
systému Control Web. Kódy definované systémem Control Web: Hodnota | Význam |
---|
0 | úspěšná operace | 1 | chyba timeoutu | 2 | neplatná hodnota | 3 | neexistující kanál |
Obecné chybové kódy ovladače: Hodnota | Význam |
---|
1000 | vnitřní chyba | 1001 | chyba kontrolního součtu | 1002 | vstupní komunikační buffer je plný | 1003 | nesprávná adresa stanice | 1004 | nesprávný kód povelu (funkce) | 1005 | přijatá data mají nesprávnou délku | 1006 | chyba potvrzení | 1007 | nesprávná odpověď | 1008 | chyba otevření COM portu | 1009 | chyba zavření COM portu | 1010 | chyba nastavení zařízení | 1011 | chyba nastavení COM parametrů | 1012 | chyba nastavení rychlosti | 1013 | chyba nastavení délky slova | 1014 | chyba nastavení parity | 1015 | chyba nastavení stop bitů | 1016 | chyba nastavení timeoutu | 1017 | chyba zápisu bloku | 1018 | výstupní fronta je plná | 1019 | vstupní fronta je plná | 1020 | nesprávný parametr procedury | 1021 | data nejsou k dispozici | 1022 | neznámá procedura ovladače | 1023 | nesprávný identifikátor bloku | 1024 | neplatný offset bloku | 1025 | zařízení není připojeno | 1026 | datový element je určen pouze pro čtení | 1027 | neplatný číselný rozsah datového elementu nebo nesprávný
formát dat v textovém tvaru | 1028 | neplatné záhlaví rámce |
Příklad použití ovladače
Součástí instalace je několik příkladů použití ovladače. Tyto
příklady naleznete v adresáři 'ADAM2\EXAMPLES\'.
Součástí příkladů jsou také soubory '*.DMF' a
'*.PAR'. Před spuštěním příkladů si nejprve tyto
soubory upravte podle aktuální konfigurace.
|