Vlastnosti ovladače
Seznam sekcí: - Vlastnosti ovladače
- Činnost ovladače
- Parametry ovladače
- Kanály ovladače
- Procedury ovladače
- Zpracování a stavy výjimek ovladače
- Chybové kódy
- Příklady souborů DMF a PAR ovladače
Činnost ovladače
Ovladač komunikuje s jedním nebo několika připojenými
regulátory KS98 pomocí protokolu ISO1745. Pracuje jako hlavní
nadřízená stanice, která řídí komunikaci (master). Připojené
jednotky vystupují jako podřízené stanice (slave), které
odpovídají na požadavky od stanice hlavní. Jako komunikačí
rozhraní je možno použít RS-485 nebo RS-422 (s použitím speciální
karty do počítače např. PCL-745B, Tedia aj.) nebo standardní
sériové rozhraní počítače RS-232 s použitím externího převodníku
např. ADAM 4520, Elsaco aj. Ovladač umožňuje čtení nebo zápis
různých hodnot v regulátoru. Je možno využít dvou přístupů:
Při řízení komunikace procedurami ovladače se zadávají přímo
jednotlivé textové řetězce, které se vysílají do regulátoru, jako
jednotlivé požadavky. Ovladač tyto řetězce doplní o řídící znaky
protokolu a kontrolní součet a vyšle je do regulátoru. Odpověď od
regulátoru je signalizována výjimkou od ovladače, a pokud se
jednalo o povel ke čtení dat, ovladač předá řetězec s odpovědí
regulátoru. Pomocí této metody je možno zapsat nebo přečíst
prakticky jakoukoliv hodnotu v regulátoru. Nevýhodou je nutnost
znát přesný tvar jednotlivých zpráv. O veškerou manipulaci s
řetězci se musí postarat autor aplikační úlohy. Druhý způsob je z
hlediska tvůrce aplikace jednodušší. V souboru parametrů ovladače
je nutno podle jednoduchých pravidel zadefinovat jednotlivé kanály
a jim odpovídající hodnoty v regulátoru. V aplikaci se pak pracuje
běžným způsobem přímo s těmito kanály. Tento způsob má určitá
omezení. Využívá pouze některé (typické) formáty zpráv. U operací
zápisu dat do regulátoru je možno přenášet data pouze po
jednotlivých hodnotách. Operace čtení mohou využívat jak
individuální přístup, tak přenos po blocích.
Parametry ovladače
Ovladač se konfiguruje pomocí souboru parametrů, který se
načítá při spouštění aplikace. Je to textový soubor, který je
možno upravovat běžným textovým editorem. Parametry jsou rozděleny
do několika skupin - sekcí. Každá sekce má svoje jméno uvedené v
hranatých závorkách a dále seznam několika parametrů tvořených
jménem parametru, oddělovacím znakem (rovnítko) a jednou nebo více
hodnotami parametru.
Upozornění: U zápisu názvu sekcí a parametrů záleží na způsobu
psaní velkých a malých písmen.
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 definice parametrů sériové komunikace v souboru
parametrů. Zde je uvedena ukázka s nastavením pro rozhraní
RS-232 s použitím externího převodníku na RS-485, který
nevyžaduje řízení směru toku dat.
[comm]
baudrate = 9600
parity = even
databits = 7
stopbits = 1
rx_buffer = 1200
tx_buffer = 1200
rx_frame_buffer = 1200
tx_frame_buffer = 1200
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
Parametry pro základní nastavení ovladače — sekce [Settings]
Tato sekce obsahuje parametry, které slouží ke konfiguraci
ovladače. Následuje způsob zápisu parametrů:
[Settings]
ComDriver = <LinkDll>, <ComId>
Timeout = <N>
NumRepeat = <N>
DecPlaces = <N>
InterMessageDelay = <N>
Trace = none | log | windows | xtrace
Parametr | Význam |
---|
LinkDll | řetězec obsahující jméno DLL knihovny linkového
ovladače, např. 'CWCOMM4.DLL'. | ComId | řetězec obsahující jméno komunikačního portu, např
COM1. | N | číselná hodnota. Může být zapsána dekadicky nebo
hexadecimálně (ukončena znakem H). |
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'. | Timeout | Parametr definuje dobu čekání ovladače na odpověď
podřízené stanice. Nepřijde-li do této doby odpověď,
požadavek se opakuje podle parametru NumRepeat. Nedojde-li
ani poté odpověď, je hlášena chyba komunikace. Tento údaj se
zadává v milisekundách. Implicitní hodnota je 300
ms. | NumRepeat | počet opakování požadavků na komunikaci po chybě.
Implicitní nastavení jsou 2 opakování. | DecPlaces | počet desetinných míst u výstupních kanálů typu real.
Implicitní nastavení jsou 4 desetinná místa. | InterMessageDelay | prodleva v milisekundách, která se vkládá mezi
požadavky na komunikaci. Implicitní nastavení je 0. | 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: 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 sekce [Settings] |
[Settings]
ComDriver = CWCOMM COM1
Timeout = 300
NumRepeat = 1
DecPlaces = 2
Konfigurace vstupních kanálů ovladače — sekce [Read]
Tato sekce definuje jednotlivé kanály nebo skupiny kanálů
ovladače pro čtení dat z regulátoru KS98. Pro čtení je možno
zvolit definice po jednotlivých kanálech nebo po blocích.
Jsou-li definovány jednotlivé kanály, budou se číst vždy v
rámci samostatných komunikací. Jsou-li definovány bloky
kanálů, budou se přenášet vždy celé bloky. Součástí definice
je obsah požadavku (zprávy) pro regulátor. Jednotlivé kanály
se definují takto:
Chan = Adr, Code, FBlock, FNum
Definice skupiny kanálů je podobná:
ChanFrom..ChanTo = Adr, Code, FBlock, FNum
Code - kód přístupu k určitému funkčnímu bloku a jeho
parametru nebo veličině. Tyto kódy jsou uvedeny v
dokumentaci k regulátoru KS98 a jsou závislé na typu
funkčního bloku. Tento parametr určuje, jestli se bude
přenášet jediná hodnota, maximálně devět hodnot nebo všechny
hodnoty funkčího bloku.
FBlock - číslo funkčního bloku, jehož data se budou
číst. Funkční bloky vlastně tvoří program regulátoru. Každý
blok má svoje číslo a skupinu parametrů, které je možno
ovladačem číst nebo zapisovat. Přiřazení čísel funkčních
bloků určuje tvůrce programu pro regulátor.
[Read]
101 = 01 01 1 0
102 = 01 02 1 0
110..118 = 01 00 1 0
120..128 = 01 00 2 0
Konfigurace výstupních kanálů ovladače — sekce [Write]
Tato sekce definuje jednotlivé kanály pro zápis dat do
regulátoru KS98. Ovladač neumožňuje blokový zápis hodnot do
regulátoru. Zápis hodnot do regulátoru se bude uskutečňovat
vždy po jednotlivých kanálech. Součástí definice je obsah
požadavku (zprávy) pro regulátor. Jednotlivé kanály se
definují takto:
Chan = Adr, Code, FBlock, FNum
[Write]
200 = 01 31 10 0
201 = 01 32 10 0
202 = 01 33 10 0
203 = 01 34 10 0
Kanály ovladače
Kromě uživatelsky definovaných kanálů, viz sekce [Read]
[Write], má ovladač některé kanály, které jsou pevně definovány.
Tyto kanály jsou vyhrazeny pro poskytování chybových informací o
ovladači. Proto kanály s těmito čísly nepoužívejte v definici
datových kanálů pro komunikaci.
Automatická konverze typů
Při definování kanálů ovladače je nutno kromě jejich zápisu
v souboru parametrů vytvořit také soubor *.DMF, který obsahuje
seznam kanálů a jejich typů pro aplikaci. Ovladač převádí
automaticky data podle typů uvedených v aplikaci (a také v
souboru DMF). Protože všechny hodnoty čtené nebo zapisované do
regulátoru se přenášejí ve formě ASCII řetězců, je nutno
vyřešit problémy jejich konverze. Ovladač pracuje tak, že na
základě požadavku na čtení nebo zápis sestaví podle definice v
souboru *.PAR textovou zprávu. Tuto zprávu doplní o speciální
řídicí znaky a kontrolní součet a vyšle ji do regulátoru. V
případě, že se jedná o zápis hodnot, regulátor zprávu potvrdí.
V případě, že se jedná o čtení, regulátor pošle odpověď, což
je opět textový řetězec.
Operace čtení
Přenos jednotlivých kanálů - je-li parametr Code
roven hodnotě xy, kde x je libovolná číslice a y je číslice
různá od nuly. V tomto případě vrátí regulátor jednu
hodnotu, která je uložena do odpovídajícího kanálu podle
jeho typu.
Částečný blokový přenos kanálů - parametr Code roven
hodnotě x0, kde x je libovolná číslice. V tomto případě
regulátor vrátí až devět hodnot podle toho, o jaký funkční
blok se jedná. Těmito hodnotami se postupně zaplní všechny
kanály, které se vyskytují v definici bloku.
Přenos kompletních bloků - parametr Code je roven
hodnotě B1, B2, B3 nebo B4. V tomto případě regulátor vrátí
všechny hodnoty funkčního bloku. Těmito hodnotami se
postupně zaplní všechny kanály, které se vyskytují v
definici bloku.
Kanály v jednom bloku nemusí být stejného typu.
Operace zápis
Hodnoty se do regulátoru přenášejí po jedné. Parametr Code,
kterým se určuje způsob přístupu k datům musí mít tvar xy, kde
x je libovolná číslice a y je číslice různá od nuly. Má-li být
hodnota celočíselná, tj. číslo nebude obsahovat desetinnou
tečku, definujte u odpovídajícího kanálu některý z typů
shortcard, shortint, cardinal, integer, longcard, longint.
Pokud použijete typ shortreal nebo real bude hodnota převedena
na řetězec, který obsahuje také desetinnou tečku a pevný počet
desetinných míst, podle parametru DecPlaces. Hodnotu je možno
předat také jako řetězec přes kanál typu string. V takovém
případě nebude hodnota nijak upravována.
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
(dále uváděn jako parametr procedury) může být různého typu podle
významu procedury.
Přehled a význam jednotlivých procedur ovladače (parametr Param1)
- GetVersion
-
Vrací v Param2 řetězec popisující jméno a verzi ovladače.
Param2 je typu string.
- ReadDataRequest
-
Param2 je typu string a obsahuje zprávu pro přečtení dat
z regulátoru. Řetězec neobsahuje řídicí znaky. Operace
skončí vygenerováním výjimky od ovladače, a to buď na
základě odpovědi od regulátoru nebo vyprší-li doba pro
čekání na odpověď daná parametrem Timeout. Není-li text
zprávy požadavku korektní, regulátor vrátí znak NAK a
chybový kód se nastaví na hodnotu erNAK. Je-li požadavek
zadán správně, regulátor vrátí řetězec (zprávu s daty),
který je možno získat voláním procedury ReadResponse. O jeho
dekódování se musí postarat aplikace.
- WriteDataRequest
-
Param2 je typu string a obsahuje zprávu pro zápis dat do
regulátoru. Řetězec neobsahuje žádné řídicí znaky, tzn. ani
znak STX, který odděluje adresu a datovou část zprávy. V
zadaném řetězci jsou obě části spojeny do jediného řetězce.
Operace skončí vygenerováním výjimky od ovladače, a to buď
na základě odpovědi od regulátoru nebo vypreí-li doba pro
čekání na odpověď daná parametrem Timeout. Není-li text
zprávy požadavku korektní, regulátor vrátí znak NAK a
chybový kód se nastaví na hodnotu erNAK. Je-li požadavek
zadán správně, regulátor odpoví znakem ACK a chybový kód je
nastaven na hodnotu erOK.
- ReadResponse
-
Procedura vrátí v parametru Param2 řetězec, který poslal
regulátor po zavolání procedury ReadDataRequest. Param2 je
typu string.
- SetDelay
-
Procedura nastavuje parametr InterMessageDelay. Param2 je
číselného typu a zadává se v milisekundách.
- SetTrace
-
Procedura nastavuje parametr Trace pro výpisy trasování
komunikace. Param2 je typu string.
- GetErrorString
-
Vrací popis chyby právě zpracovávané výjimky ovladače.
Param2 je typu string.
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 resp. activity — driver se symbolickým jménem tohoto
ovladače. V tomto případě je takový přístroj výjimkou aktivován.
Přečtením kanálu č.1 lze získat kód chyby, přečtením kanálu č.2 je
možno zjistit adresu jednotky, u které nastala chyba.
Chybové kódy
Hodnota | Význam |
---|
0 | erOK | 1 | erTimeout | 2 | erValue | 100 | erOK | 101 | erBCC | 102 | erBadResponse | 103 | erBufferFull | 104 | erData |
Příklady souborů DMF a PAR ovladače
Soubor *.DMF
begin
1 real input
2 real input
3 string input
100 - 118 string input
120 - 128 real input
130 - 138 real input
200 cardinal output
201 - 208 real output
end.
Soubor *.PAR
[comm]
baudrate = 9600
parity = even
databits = 7
stopbits = 1
rx_buffer = 1200
tx_buffer = 1200
rx_frame_buffer = 1200
tx_frame_buffer = 1200
cts_flow = false
dsr_flow = false
dtr_control = disable
rts_control = disable
dsr_sense = low
rx_interchar_timeout = 5
rx_char_timeout = 2
rx_timeout = 5
tx_char_timeout = 10
tx_timeout = 10
[Settings]
ComDriver = cwcomm COM1
Timeout = 300
NumRepeat = 1
DecPlaces = 5
[Write]
200 = 01 31 10 0
201 = 01 32 10 0
202 = 01 33 10 0
203 = 01 34 10 0
204 = 01 35 10 0
205 = 01 36 10 0
206 = 01 37 10 0
207 = 01 38 10 0
208 = 01 39 10 0
[Read]
101 = 01 01 1 0
102 = 01 02 1 0
103 = 01 03 1 0
104 = 01 04 1 0
105 = 01 05 1 0
106 = 01 06 1 0
107 = 01 07 1 0
108 = 01 08 1 0
109 = 01 09 1 0
110..118 = 01 00 1 0
120..128 = 01 00 2 0
130..138 = 01 B1 3 0
|