Ovladač SMSDRV je určen pro příjem krátkých textových zpráv z mobilního telefonu do počítače a k odesílání krátkých textových zpráv z počítače do mobilního telefonu.
Vlastnosti ovladače
Ovladač SMSDRV je určen pro příjem krátkých textových
zpráv z mobilního telefonu do počítače a k odesílání krátkých
textových zpráv z počítače do mobilního telefonu. Využívá k tomu
GSM modem nebo mobilní telefon s funkcemi modemu připojený na
standardní sériové rozhraní počítače RS-232. Lze použít např.
modemy M1, M20, TC35, MC35 od firmy Siemens, moduly od firmy
Wavecom a jiné. Funkce modemu podporují také některé mobilní
telefony, např. Siemens S25, řada 35 nebo Nokia 6210, Alcatel OT
500 a další. Formát zpráv může být buď PDU nebo text.
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říklady souborů DMF a PAR ovladače
Činnost ovladače
Ovladač dokáže zaslat textovou zprávu (SMS) na zvolené
telefonní číslo mobilního telefonu. Maximální délka zprávy je 160
znaků. Textové zprávy by neměly obsahovat znaky s háčky a čárkami,
neboť norma GSM tyto znaky nepodporuje. Pro odeslání zprávy je
nutno zapsat do ovladače číslo mobilního telefonu, text zprávy a
nakonec zapsat hodnotu true na kanál č.8, jako povel k vyslání
zprávy. Odeslání zprávy ovladač signalizuje výjimkou. Status
výjimky říká, jestli byla operace úspěšná nebo jestli došlo k
chybě. Příjem zpráv probíhá tak, že ovladač v pravidelných
intervalech zjištuje, jestli modem nemá novou zprávu. V případě,
že tomu tak je, zpráva a číslo telefonu, ze kterého byla odeslána
se přečte a uloží do fronty ke zpracování. Pak se zpráva vymaže z
paměti modemu a současně se vygeneruje výjimka od ovladače.
Aplikace tuto výjimku zachytí některým virtuálním přístrojem a
vyhodnotí. Nakonec musí aplikace opět výjimku od ovladače povolit
buď zápisem hodnoty true na kanál č.2 nebo voláním procedury
ovladače EnableException. Dojde-li během odesílání zpráv k chybě,
ovladač opět vygeneruje výjimku do aplikace. Přestane-li modem
odpovídat na dotazy ovladače, opět se vygeneruje výjimka.
Parametry ovladače
Činnost a chování ovladače se dá ovlivnit nastavením jeho
parametrů. Tyto parametry se zapisují do souboru (*.PAR), který se
zadává v definici ovladače v aplikaci systému Control Web. Soubor parametrů je textový soubor, který je možno
upravovat běžným textovým editorem. Parametry mohou být 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. Ovladač SMSDRV používá sekce [comm] a
[Settings].
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ů ovladače:
[comm]
baudrate = 57600
parity = none
databits = 8
stopbits = 1
rx_buffer = 1024
tx_buffer = 1024
rx_frame_buffer = 1024
tx_frame_buffer = 1024
cts_flow = false
dsr_flow = false
dtr_control = high
rts_control = high
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]
V sekci [Settings] se zadávají základní parametry,
které určují chování ovladače. Způsob zápisu jednotlivých
parametrů sekce [Settings] je následující:
[Settings]
ComDriver = <LinkDll>, <ComId>
InitString = <String>
SMSCenter = <String>
Timeout = <N>
MaxExceptions = <N>
ScanTime = <N>
DelayTime = <N>
ResetModem = true | false
Mode = PDU | TEXT
PassSMSCenter = 0 | 1 | 2
SendATZ = true | false
Validity = true | false
ReadSMSFrom = default | <String>
IgnoreCOMFail = true | false
PIN = <N>
PlusPrefix = <String>
Report = true | false
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). | String | textový řetězec. |
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'. | InitString | zadání inicializačního řetězce pro modem. Tento
řetězec je vyslán v rámci inicializace modemu při startu
aplikace nebo po chybě. Po vyslání inicializačního řetězce
ovladač nastaví další parametry modemu pro svoje potřeby
(režim echo, odpovědi modemu v textovém tvaru a formát
zpráv). Inicializační řetězec může obsahovat pouze jediný AT
příkaz, který ale může být kombinovaný (může obsahovat víc
nastavení najednou). Ovladač nepodporuje používání řídicích
znaků pro oddělení řádků (^M pro znak CR). | SMSCenter | číslo SMS centra. Číslo musí obsahovat kód země
(např. 420603052000). Pokud není tento parametr zadán,
zjišťuje ovladač podle potřeby toto číslo z modemu v rámci
odesílání SMS. | Timeout | doba čekání na odezvu modemu v milisekundách.
Nedojde-li do této doby odpověď od modemu, bude vrácena do
aplikace chyba komunikace. Implicitní hodnota je 1000
ms. | MaxExceptions | velikost fronty pro nezpracované výjimky od ovladače
(jedná se o přijaté textové zprávy a chyby). Implicitní
nastavení je 4096. | ScanTime | perioda zjišťování nových příchozích zpráv v
milisekundách. Implicitní nastavení je 3000 ms. | DelayTime | časová prodleva v milisekundách po chybě, která je
nutná pro regeneraci modemu. Implicitní nastavení je 3000
ms. | ResetModem | tento parametr nastaví automatickou hardwarovou
inicializaci modemu pomocí řídicích signálů (DTR, RTS) po
chybě komunikace. Implicitní nastavení je true. | Mode | tento parametr nastavuje formát zpráv. Možnosti jsou
PDU nebo text. Implicitní nastavení je PDU. | PassSMSCenter | určuje, jak se bude v módu PDU při odesílání SMS
manipulovat s adresou (číslem) SMS centra. Možnosti
jsou: 0 — číslo
SMS centra bude součástí zprávy
- 1 — místo adresy
SMS centra se vloží 0
- 2 — adresa SMS
centra se vynechá
| SendATZ | Parametr ovlivňuje vyslání AT příkazu "ATZ" při
inicializaci modemu. Implicitní nastavení je true. | Validity | Parametr určuje, jestli bude v módu PDU součástí
zprávy položka pro nastavení délky platnosti zprávy.
Implicitní nastavení je true a nastavuje platnost zprávy na
24 hodin. | ReadSMSFrom | Parametr zadává zdroj paměti pro čtení a mazání SMS
zpráv. Může mít následující hodnoty: default — zprávy se čtou z aktuální paměti
modemu
- SM — zprávy se
čtou ze SIM karty modemu
- MT — zprávy se
čtou z paměti modemu
| IgnoreCOMFail | Parametr způsobí, že při startu aplikace ovladač
nehlásí chybu, když se mu nepodaří otevřít sériový port. Ten
je možno dodatečně otevřít pomocí procedury ovladače
OpenCom. | PIN | PIN kód pro inicializaci modemu. | PlusPrefix | skupina znaků, která nahrazuje znak "+" v čísle
příjemce zprávy. | Report | požadavek na zaslání doručenky. Parametr se uplatňuje
pouze v módu PDU. |
Kanály ovladače
Pomocí kanálů ovladač předává aplikaci přijaté zprávy a odesílá
zprávy na zadané telefonní číslo. Další kanály slouží ke
zpracování výjimky ovladače a k identifikaci chyb.
6 — číslo telefonu, na které má být
odeslána zpráva. Číslo musí být zapsáno ve tvaru, který vyžaduje
použitý modem. To znamená že např. v módu PDU může nebo nemusí
obsahovat kód země, v textovém módu obsahuje znak "+" před kódem
země. Potřebné informace jsou zpravidla součástí dokumentace k
modemu.
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.
Procedury ovladače jsou určeny pro rozšíření možností ovladače.
Není bezpodmínečně nutné je používat, neboť duálně s nimi fungují
některé kanály. Akce vyvolané voláním procedur jsou podstatně
rychlejší, než stejné akce vyvolané zápisem resp. čtením kanálů.
Volání procedur ovladače 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. Param1 se uvádí jako
procedura ovladače. Param2 bude dále uváděn jako parametr
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.
- GetMajorVersion
-
Vrátí vyšší slovo verze produktu Control Web. Param2 je libovolného číselného typu.
- GetMinorVersion
-
Vrátí nižší slovo verze produktu Control Web. Param2 je libovolného číselného typu.
- GetAPIMajorVersion
-
Vrátí vyšší slovo verze API produktu Control Web. Param2 je libovolného číselného typu.
- GetAPIMinorVersion
-
Vrátí nižší slovo verze API produktu Control Web. Param2 je libovolného číselného typu.
- EnableException
-
Voláním této procedury se povolí další výjimka od
ovladače. Param2 nemá žádný význam.
- GetErrorString
-
Vrací popis chyby právě zpracovávané výjimky ovladače.
Param2 je typu string.
- GetErrorCode
-
Vrací číslo chyby právě zpracovávané výjimky ovladače.
Param2 je libovolného číselného typu.
- GetExcStatus
-
Vrací stav právě zpracovávané výjimky ovladače. Param2 je
libovolného číselného typu.
- OpenCom
-
Otevře sériový port. Param2 je typu string a udává jméno
portu (např.COM1). Vrací se v něm případné chybové hlášení.
Procedura zachová původní jméno COM portu, pokud je parametr
Param2 prázdný řetězec.
- CloseCom
-
Procedura zavře aktuální COM port
- IsOpen
-
Procedura otestuje, jestli je COM port otevřen
Mapovací soubor ovladače a datové typy
Mapovací soubor obsahuje typy kanálů ovladače. Je to textový
soubor, který se zadává při definici ovladače v aplikaci (*.DMF).
Ovladač má pevnou množinu kanálů, takže tento soubor není nutno
upravovat. Součástí instalace ovladače je soubor SMS.DMF, který je
možno použít v aplikaci. Pokud se bude v dalších verzích ovladače
počet kanálů zvětšovat, bude se měnit i mapovací soubor.
Zpracování a stavy výjimek ovladače
Jak již bylo naznačeno, výjimka od ovladače se generuje na
základě různých událostí. Těmito událostmi může být přijatá zpráva
nebo vznik chyby. Stav výjimky, který vrací kanál č.1 popisuje
vzniklou událost. Správný mechanizmus zpracování výjimky od
ovladače je následující. 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. Nastane-li výjimka od
ovladače, je tento přístroj aktivován. V rámci jeho činnosti je
třeba vyhodnotit stav výjimky a podle toho vykonat další činnost.
Důležité je nakonec 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á.
Pokud aplikace výjimky nestíhá zpracovávat nebo je vůbec
nezpracovává, přidávají se do fronty, jejíž maximální velikost je
určena parametrem MaxExceptions v sekci [Settings].
Možné stavy výjimky od ovladače:
Hodnota | Význam |
---|
0 | stReady — ovladač znovu navázal
spojení s modemem (po chybě komunikace). | 1 | stError — nastala chyba komunikace.
Buď se nepodařilo odeslat zprávu nebo modem neodpovídá na
požadavky ovladače. | 2 | stSMSData — modem přijal textovou
zprávu. | 3 | stExtraData — tento stav se
nepoužívá. | 4 | stSMSSentOK — zpráva byla
odeslána. | 5 | stSMSReport — přišlo potvrzení
(doručenka). | 6 | stIncomingCall — indikace
příchozího hovoru na modem. |
Chybové kódy
Nastane-li během činnosti ovladače chyba, vygeneruje se výjimka
se stavem stError. K identifikaci chyby slouží kanál č.3, který
vrací naásledující kódy:
Hodnota | Význam |
---|
0 | erOK — žádná chyba | 1000 | erBusy — nastal pokus odeslat
textovou zprávu v okamžiku, kdy ještě nebylo ukončeno odesílání
zprávy předchozí | 1001 | erSendSMS — nepodařilo se odeslat
textovou zprávu | 1002 | erModem — modem neodpovídá na
požadavky ovladače. Příčinou může být vypnutý modem, vybité
akumulátory, rozpojený kabel a podobně. | 1003 | erPIN — modem vyžaduje zadání PIN
kódu. | 1004 | erData — přijatý řetězec obsahuje
nesprávná data. | 1005 | erModemResponse — špatná odpověď od
modemu. | 1006 | erSMSAddress — nesprávné číslo
cílové stanice. | 1007 | erCOMPort — chyba při pokusu
otevřít COM port. | 1008 | erIllegalCharacter — byl přijat
neočekávaný znak. | 1009 | erNoData — odpověď modemu
neobsahuje data. |
Pomocí volání procedury GetErrorString je možno získat textový
popis chyby.
Příklady souborů DMF a PAR ovladače
Soubor *.DMF
begin
1 real input
2 boolean output
3 real input
4 real input
5 real input
6 string output
7 string output
8 boolean output
9 string input
10 string input
end.
Soubor *.PAR
[Settings]
ComDriver = cwcomm, COM1
Timeout = 1000
MaxExceptions = 100
ScanTime = 5000
DelayTime = 5000
InitString =
SMSCenter =
Mode = PDU
PassSMSCenter = 0
ResetModem = true
IgnoreCOMFail = false
PIN = 1234
PlusPrefix = 00
Report = true
[comm]
baudrate = 57600
parity = none
databits = 8
stopbits = 1
rx_buffer = 1024
tx_buffer = 1024
rx_frame_buffer = 1024
tx_frame_buffer = 1024
cts_flow = false
dsr_flow = false
dtr_control = high
rts_control = high
dsr_sense = low
rx_interchar_timeout = 0
rx_char_timeout = 0
rx_timeout = 0
tx_char_timeout = 0
tx_timeout = 0
|