Ovladač slouží pro komunikaci mezi jednou nebo více stanicemi a systémem Control Web přes standardní sériové rozhraní RS-232 (nebo RS-485, RS-422). Použitý protokol je DirectNET. Ovladač vystupuje jako MASTER.
Ovladač slouží pro komunikaci mezi jednou nebo více stanicemi a
systémem Control Web přes standardní sériové rozhraní RS-232 (nebo
RS-485, RS-422). Použitý protokol je DirectNET. Ovladač vystupuje jako
MASTER.
Seznam sekcí: - Činnost ovladače
- Kanály ovladače
- Parametry ovladače
- Mapovací soubor ovladače a datové typy
- Zpracování a stavy výjimek ovladače
- Chybové kódy
Činnost ovladače
Pomocí ovladače je možno číst nebo zapisovat data z paměťových
registrů (VMemory) binárních výstupů (Outputs) a binárních vstupů
(Inputs). Jednotlivé registry, vstupy nebo výstupy se přiřadí
kanálům ovladače prostřednictvím definice v jeho souboru
parametrů. Ovladač má určitou množinu kanálů vyhraženou pro
speciální informace, proto doporučujeme, aby uživatelsky
definované kanály začínaly nejméně od čísla 100. Paměťové registry
stanice (VMemory) je možno interpretovat různým způsobem v
závislosti na typu stanice nebo na aplikačním programu, běžícím ve
stanici.
Platí konvence, že všechny numerické kanály ovladače jsou vždy
typu real. Všechny konverze do jiných datových typů použitého
zařízení se provádějí v ovladači.
Kanály ovladače
Ovladač může jednotlivé prvky různých datových oblastí
připojených stanic interpretovat jako svoje kanály, což jsou
číselné nebo logické hodnoty (bity). Definice kanálů se děje
prostřednictvím souboru parametrů v sekci [Channels], jak je
popsáno níže.
Vyhrazené kanály ovladače
Ovladač předává informace o stavu komunikace
prostřednictvím zvláštních kanálů, které jsou mapovány do
intervalu 1 až 99. Dojde-li k chybě komunikace, je
vygenerována výjimka ovladače a z jednotlivých kanálů je možno
zjistit různé údaje, které blíže specifikují chybu nebo
nějakou událost. Kanál č.1 rozlišuje, jedná-li se o chybu při
čtení nebo při zápisu. Skupina kanálů č.10 až 18 doplňuje
údaje o chybě při čtení resp. 20 až 28 při zápisu.
Číslo kanálu - význam |
Typ kanálu |
Poznámka |
Společné |
1 - ExceptionStatus |
real input |
druh výjimky od ovladače |
Operace čtení |
10 - Station |
real input |
adresa PLC |
11 - ErrCode |
real input |
kód chyby |
12 - ErrString |
string input |
chybová zpráva z ovladače |
13 - ErrCount |
real input |
počet chyb čtení |
14 - FirstChannel |
real input |
první kanál bloku s chybou |
15 - LastChannel |
real input |
poslední kanál bloku s chybou |
16 - Media |
real input |
oblast v PLC |
17 - Reset |
boolean output |
vynulování chybových stavů |
18 - ClearErrorCounter |
boolean output |
vynulování počítadla chyb |
Operace zápis |
20 - Station |
real input |
adresa PLC |
21 - ErrCode |
real input |
kód chyby |
22 - ErrString |
string input |
chybová zpráva z ovladače |
23 - ErrCount |
real input |
počet chyb zápisu |
24 - FirstChannel |
real input |
první kanál bloku s chybou |
25 - LastChannel |
real input |
poslední kanál bloku s chybou |
26 - Media |
real input |
oblast v PLC |
27 - Reset |
boolean output |
vynulování chybových stavů |
28 - ClearErrorCounter |
boolean output |
vynulování počítadla chyb |
Vyhrazené kanály ovladače
Kódy oblastí PLC (kanál 16 a 26) Hodnota | Význam |
---|
0 | žádná (nedefinovaná) oblast. | 1 | M — oblast paměťových registrů
(VMemory). | 2 | I — oblast digitálních vstupů
(Inputs). | 3 | O — oblast digitálních výstupů
(Outputs). |
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.
Sekce [Plc]
Tato sekce obsahuje parametry, které slouží ke konfiguraci
ovladače z hlediska používání protokolu DirectNET.
[Plc]
ComDriver = <LinkDll>, <ComId>
MasterAdr = <N>
FinalizeAfterEachBlock = true | false
Mode = ASCII | HEX
Timeout = <N>
EnableMonitor = true | false
SwapBytes = true | false
SwapRegisters = true | false
NumRepeat = <N>
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). |
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'. | Mode | Parametr definuje mód komunikace. Je možno zvolit
binární mód HEX nebo znakový mód ASCII | MasterAdr | Parametr definuje adresu počítače (master) | 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. | EnableMonitor | Pomocí tohoto parametru je možno zapnout výpisy
průběhu komunikace do okna ovladače. | NumRepeat | Parametr udává počet opakování po neúspěšné
komunikaci. Je-li nastaven na 0, požadavek se neopakuje
(vykoná se tedy pouze jednou). Implicitní hodnota je 2.
Maximální hodnota je 5. | FinalizeAfterEachBlock | Pomocí tohoto parametru se zadává, jestli budou data
předána do aplikace po každé komunikaci (hodnota parametru =
true) nebo až po dokončení přenosu všech bloků, které se
řeší v rámci daného časového kroku. Implicitní nastavení je
false. | SwapBytes | Pomocí tohoto parametru je možno nastavit, jestli
mají být byte v registrech vzájemně prohozeny. | SwapRegisters | Pomocí tohoto parametru se dá nastavit pořadí
registrů u hodnot, které jsou uloženy ve více
registrech. |
Sekce [Channels]
V této sekci se používá jediný parametr Block, který
definuje bloky kanálů ovladače. Jednotlivým datovým oblastem
ve stanici je možno přiřadit určitou skupinu kanálů. Blok je
definován adresou stanice, intervalem kanálů, datovou oblastí
ve stanici, počáteční adresou v dané oblasti a pro oblast
registrů ještě datovým typem. V případě použití obousměrných
kanálů je možno definovat parametr bidirect, který zamezí
vzniku kolizí při současném čtení i zápisu na stejný kanál -
pak jsou v ovladači vytvořeny dva zvláštní bloky, jeden pro
čtení, druhý pro zápis. Z pohledu komunikace představuje jeden
blok maximální celistvý úsek, který se dá přenést najednou v
rámci jedné komunikace se stanicí. Použitý komunikační
protokol tuto hodnotu dále upravuje. Bude-li definován delší
blok než je možno přenést najednou a budou-li zadány požadavky
na čtení nebo zápis všech kanálů bloku, rozpadne se komunikace
na několik částí tak, aby byla všechna data přenesena. Způsob
zápisu parametrů a jejich možné hodnoty (v hranatých závorkách
jsou uvedeny nepovinné nebo doplňující parametry):
[Channels]
Block = <Station>, <ChannelFrom>, <ChannelTo>, <Media>, <Offset>, [<Subtype>], [Bidirect] [<Comment>]
Block = ...
...
Parametr | Význam |
---|
Station | adresa PLC | ChannelFrom | počáteční kanál bloku (číslo). | ChannelTo | poslední kanál bloku (číslo). | Media | oblast ve stanici: M | paměť PLC (VMemory) | I | vstupy PLC (Input) | O | výstupy PLC (Output) |
| Offset | adresa prvního odpovídajícího registru, vstupu,
výstupu v PLC. Zadává se hexa nebo oktalově (musí začínat
písmenem V) | SubType | formát dat: int64 | 64 bitové celé číslo se znaménkem ve 4
registrech | float64 | 64 bitové číslo real ve 4 registrech | uint32 | 32 bitové celé číslo bez znaménka ve 2
registrech | int32 | 32 bitové celé číslo se znaménkem ve 2
registrech | float32 | 32 bitové číslo real ve 2 registrech | bcd32 | 32 bitové číslo ve formátu BCD ve 2
registrech | uint16 | 16 bitové celé číslo bez znaménka v 1
registru | int16 | 16 bitové celé číslo se znaménkem v 1
registru | bcd16 | 16 bitové číslo ve formátu BCD v 1
registru | bool16 | boolean hodnota v jednom registru (0 =
false | bits16 | 16 boolean hodnot (kanálů) v jednom registru
odpovídající jednotlivým bitům | uint8 | dvě 8 bitová celá čísla bez znaménka v jednom
registru | int8 | dvě 8 bitová celá čísla se znaménkem v jednom
registru | bcd8 | dvě 8 bitová čísla ve formátu BCD v jednom
registru |
Kanály se mapují buď do 4, 2 nebo 1 registru,
popřípadě dva kanály do jednoho registru (uint8, int8, bcd8)
nebo 16 boolean kanálů do jednoho registru
(bits16). | Bidirect | parametr udává, že definovaný blok je určen pro čtení
i pro zápis (bidirect). Není-li uveden, je možno z bloku
číst nebo do něj zapisovat, ale při současném čtení a zápisu
nemusí být do stanice zapsána správná data. | Comment | místo pro poznámku |
Příklad definice bloku
[Channels]
Block = 01, 100, 199, M, 0301, int16, bidirect
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 přímo v
souboru parametrů ovladače Plc Direct:
[comm]
baudrate = 9600
parity = odd
databits = 8
stopbits = 1
rx_buffer = 1152
tx_buffer = 1152
rx_frame_buffer = 1152
tx_frame_buffer = 1152
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
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 vyhražené kanály
a různou pro kanály definované uživatelsky v souboru parametrů v
sekci [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 možno zjistit stav výjimky přečtením kanálu č.1. Stav
je určen jednotlivými bity podle následující tabulky:
Ovladač generuje následující chybové kódy. Tyto kódy jsou k
dispozici na kanálech č.11 resp. č.21. Při vzniku chyby se
současně vypíše hlášení do okna zpráv.
Chybové kódy
Ovladač generuje následující chybové kódy. Tyto kódy jsou k
dispozici na kanálech č.11 resp. č.21. Při vzniku chyby se
současně vypíše hlášení do okna zpráv.
Chybové kódy ovladače Hodnota | Význam |
---|
0 | úspěšná operace | 1 | chyba timeoutu | 2 | neplatná hodnota | 3 | nesprávné číslo kanálu | 100 | chyba LRC | 101 | vstupní komunikační buffer je plný | 102 | chyba potvrzení (ACK) | 103 | chyba telegramu (EOT) | 200 | neznámá chyba |
|