3.5 Uživatelsky definované funkce - UDF

Funkce UDF je soubor podmínek, definovaných uživatelem v daném terminálu, po jejichž splnění jsou provedeny nastavené akce. Po splnění podmínky je možné odesílat SMS zprávy, TCP zprávy nebo nastavovat polohu relé na daném terminálu.

Pro potřebu UDF je možné na jednom terminálu nastavit až 10 různých podmínek.

Jednotlivé podmínky jsou neustále vyhodnocovány a v případě, že jsou splněny jako „pravda" (True) dojde k provedení nastavené akce. K dalšímu provedení akce je zapotřebí aby podmínka prošla stavem „nepravda" (false), popřípadě ještě musí v daném stavu setrvat po nastavenou dobu časovače. To zajistí, že se například SMS zprávy nebudou odesílat při každé iteraci. 

Upozornění

  • Během vytváření jednotlivých podmínek je třeba dbát obecných zásad programování tak, aby nedocházelo k nastavení nesmyslných syntaxí nebo opakování stejných podmínek. Paměť a výkon terminálu je pouze omezený a není možné ošetřovat všechny nesmyslné stavy.

Podmínky se nastavují v konfiguraci terminálu pomocí AT příkazů. Každý AT příkaz musí obsahovat syntaxi podmínky (<parametr1>znaménko<parametr2>) následuje oddělovač.

":", typ akce a akční parametry.

AT příkaz pak může vypadat třeba následovně:

AT^SCUDF="ADD","AIN1>=50:SMS P[+420123456789] m[alarm1] t[60]"

Upozornění

  • Každý příkaz musí obsahovat nějakou podmínku (syntaxi), oddělovač „:" a akci, která se má provést. „<syntaxe>:<akce>" V opačném případě nebude nastaven.

Upozornění

  • Pro nastavení je možné použít AT příkaz dlouhý maximálně 80 znaků.

Poznámka

  • Pokud dojde při ukládání podmínky k chybě, je tato chyba ohlášena zprávou ERROR a případně rozlišena kódem. Tabulku těchto zpráv je možné najít v následující části pojmenované „chybové kódy".

Nastavení UDF podmínek

Základní příkazy pro UDF. 

AT^SCUDF="ADD","<code>"
  • Příkaz „ADD" provede přidání podmínky do seznamu nastavených podmínek. Část příkazu označená jako code je samotná podmínka. Po uložení terminál vrátí zpět zprávu OK.

Upozornění

  • Po obdržení zprávy OK je podmínka zařazena do seznamu a ihned se s ní začíná pracovat. Je proto důležité mít na paměti, že může dojít k okamžitému odeslání SMS nebo TCP zpráv, popřípadě sepnutí relé.
AT^SCUDF="CLEAR" 
  • Vymaže všechny podmínky z paměti terminálu.
AT^SCUDF="REMOVE",<ID> 
  • Vymaže podmínku se zvoleným ID.
AT^SCUDF?
  • Vypíše všechny uložené podmínky. 
AT^SCUDF=? 
  • Zobrazí možnosti nastavení.
  • ^SCUDF: "ADD","0–100"
  • ^SCUDF: "REMOVE",1–10 
  • ^SCUDF: "CLEAR" 

Podporované syntaxe

Parametry jednotlivých podmínek lze zadávat několika způsoby. Pro univerzálnost se každý z parametrů může chovat jako číslo tedy analogová hodnota vstupu nebo jako binární vstup tedy v rozsahu hodnot (0–1). To, jak se bude zvolený vstup chovat, ovlivníte způsobem zápisu syntaxe. 

UDF dokáže pracovat s těmito parametry:

<paramX>

Popis

AIN1

1. analogový vstup

AIN2

2. analogový vstup

AIN3

3. analogový vstup

DIN1

1. digitální vstup

DIN2

2. digitální vstup

DIN3

3. digitální vstup

PUL1

1. pulzní vstup

PUL2

2. pulzní vstup

PUL3

3. pulzní vstup

CONx

Referenční podmínka, kde x = <id> dané podmínky

CNTxInterní čítač, kde x = <id> čítače (1–5)

Konstanta

Číslo, se kterým se bude parametrX porovnávat

NFGSíťová chyba GSM / UMTS

Upozornění

  • Parametry, které jsou vyčítány jako číslo, tedy AIN a PUL, které mohou nabývat hodnot 0–100, respektive 0–4294967295 se převádějí na logickou hodnotu následovně: je-li jejich hodnota =0, jejich stav bude 0.
  • Pro správnou funkci syntaxe NFG je potřeba mít nastaven SCPING. Bez tohoto nebude správně vyhodnocovat stav připojení.

Pro vyhodnocení stavu lze použít následující operátory:

<operátor>

Popis

>

param1 je větší než param2

<

param1 je menší než param2

==

param1 je roven param2

>=

param1 je větší nebo roven param2

<=

param1 je menší nebo roven param2

&&

Konjunkce

||

Disjunkce

!

Negace

Standardní způsob zápisu syntaxe je <param1><operátor><param2>. To využijete v případě, že chcete porovnávat velikost měřené veličiny. Existuje ale ještě jeden způsob, kterým je možné syntaxi zapsat. Je to <param1>. Pokud vynecháte operátor a vložíte pouze jeden parametr, automaticky se tento parametr bere jako logický, a to i v případě „AIN a PUL". Po přechodu tohoto parametru v platnost se provede nastavená akce.

Nyní si pro ukázku vysvětlíme několik syntaxí.

AIN1>50 – syntaxe bude označena jako true v případě, že hodnota naměřená na vstupu AIN1 bude vyšší než 50.

PUL2==2596 – syntaxe bude označena jako true v případě, že hodnota vyčtená z čítače PUL2 bude rovna nastavené konstantě.

DIN1&&CON3 – syntaxe bude označena jako true v případě, že hodnota DIN1 bude true a zároveň referenční podmínka bude také true.

!AIN2 – syntaxe bude označena jako true v případě, že na vstupu bude naměřena jakákoliv hodnota vyšší než 0.

AIN1<=AIN2 – syntaxe bude označena jako true v případě, že na vstupu AIN1 bude naměřena nižší hodnota než na vstupu AIN2.

NFG – syntaxe je vyhodnocena jako true (tj. network fail) v případě, že buď neprošel PING nebo se po dobu nastavenou v at^scping="interval",<minutes> nepodařilo získat IP adresu. Zisk IP adresy pak tento stav ruší a podmínka je vyhodnocena jako FALSE. Nastavení funkce PING najdete na konci této kapitoly.

Upozornění

  • Pokud použijete Negaci, bude s parametrem zacházeno jako s digitálním vstupem! Není možné počítat s tím, že naměřím například hodnotu 50 na AIN1 a budu požadovat výsledek -50 po negaci.
  • V případě, že porovnáváte dva vstupy mezi sebou, porovnávají se absolutní hodnoty získané z převodníku (ADC 0–1020). Proto je důležité mít oba vstupy správně zkalibrovány.

Typy akcí

Po zvolení vhodné syntaxe je možné za oddělovač vložit některou z akcí.

SAVE

Akce SAVE uloží výsledek podmínky do paměti terminálu pro další použití.

Poznámka

  • AT příkaz pro uložení podmínky by vypadal třeba následovně:
At^scudf="add","AIN1>50:SAVE"

REL1

Akce ovládá stav relé 1

REL2

Akce ovládá stav relé 2

Poznámka

  • AT příkaz pro přepnutí stavu relé by vypadal třeba následovně:
At^scudf="add","AIN1>50:REL1 r[1]"

SMS

Akce odešle SMS zprávu na nastavené telefonní číslo s nastaveným textem.

Poznámka

  • AT příkaz pro poslání SMS by vypadal třeba následovně:
At^scudf="add","AIN1>50:SMS p[+420123456789] m[text 1]"

Upozornění

  • Pro akci SMS musí být vždy vyplněn parametr telefonní číslo a zpráva. Bez těchto parametrů není možné akci SMS nastavit.

TCP

Akce odešle TCP zprávu na nastavenou IP adresu a port s nastaveným textem.

Pro přenos této zprávy se používá protokol telnet.

Poznámka

  • AT příkaz pro poslání TCP zprávy by vypadal třeba následovně:
At^scudf="add","AIN1>50:TCP i[62.134.22.87:8026] m[text 1]" 

Upozornění

  • Pro akci TCP musí být vždy vyplněn parametr IP adresa a zpráva. Bez těchto parametrů není možné akci TCP nastavit.

Varování

  • Dbejte na to, aby server, na který odesíláte zprávu, existoval. V případě, že daný server neexistuje, může dojít ke zpomalení procesu vyhodnocování podmínek. Terminál totiž čeká na odpověď od neexistujícího serveru a prozatím nevykonává další nastavené akce.

CNT 1–5

Akce ovládá interní countery. V programu jich je vedených celkem 5.

Poznámka

  • AT příkaz pro inkrementaci počítadla o jedničku může být třeba následující:
At^scudf="add","AIN1>50:CNT1 d[1]"

Akční parametry

Jedná se o parametry výše uvedených akcí. Těmito parametry se mění stav relé, určuje se adresa, na kterou se odesílá TCP nebo SMS zpráva. Do příkazu se vkládají ve tvaru <značka>[hodnota] a z obou stran musí být ohraničené mezerou. Jejich pořadí potom není nijak stanoveno a lze je řadit libovolně.

IP Adresa

Parametr se nastavuje jako i[xxx.xxx.xxx.xxx], defaultně se TCP zprávy odesílají na port 80. Pokud port potřebujete změnit, zadejte adresu ve tvaru i[xxx.xxx.xxx.xxx:yyyyy], kde x je IP adresa vzdáleného serveru a y je port, na který se má zpráva odeslat. 

Upozornění

  • IP adresu lze vložit pouze do akce TCP. V ostatních nemá smysl a je signalizována chyba.

Telefonní číslo

Telefonní číslo se nastavuje v parametru p[xx], kde xx je samotné telefonní číslo. Lze jej zadat v národním i mezinárodním formátu. Tedy jako p[123456789] nebo p[+420123456789].

Upozornění

  • Telefonní číslo lze použít pouze ve spojení s akcí SMS.
  • Do parametru lze zadávat telefonní čísla o délce 1–15 znaků.

Stav relé

Parametr nastavuje přímo polohu kontaktu relé. Zadává se jako r[1 nebo 0]

1 znamená, že relé je sepnuto, a 0, že relé je rozepnuto.

Upozornění

  • Parametr r lze použít pouze v souvislosti s akcí REL.

Časovač

Nastavuje se jako t[xx] v sekundách, kde xx je čas, po který se má čekat. Více informací naleznete v části časovače.

Upozornění

  • Časovač lze použít jen ve spojení s akcemi TCP a SMS.

Zpráva

Parametr zpráva (message) se zadává ve tvaru m[text]. Maximální délka této zprávy může být 40 znaků. Delší zprávy budou odmítnuty.

Poznámka

  • Maximální délka 40 znaků je odvozena od maximální délky odesílané SMS zprávy. Pokud dojde k naplnění maximálními hodnotami klíče PUL, je její délka právě 160 znaků.

Upozornění

  • Zprávu lze použít jen ve spojení s akcemi TCP a SMS.

Do parametru zpráva lze také vkládat klíče, pomocí kterých můžete v SMS zobrazit aktuální změřenou hodnotu veličiny na vstupních obvodech nebo aktuální logickou hodnotu podmínek. 

klíč

Popis

$AIN1

Hodnota analogového vstupu 1

$AIN2

Hodnota analogového vstupu 2

$AIN3

Hodnota analogového vstupu 3

$DIN1

Hodnota digitálního vstupu 1

$DIN2

Hodnota digitálního vstupu 2

$DIN3

Hodnota digitálního vstupu 3

$PUL1

Hodnota pulzního vstupu 1

$PUL2

Hodnota pulzního vstupu 2

$PUL3

Hodnota pulzního vstupu 3

$CNT1Hodnota čítače 1
$CNTxHodnota čítače x (1–5)
$CON1Hodnota výsledku podmínky 1
$CONxHodnota výsledku podmínky x (1–10)

Pro lepší představu si uvedeme malý příklad.

Do terminálu nastavíme příkaz, který po překročení limitní hodnoty 80 na vstupu 1 odešle SMS na číslo 123456789 a v textu bude ALARM hodnota je:(aktuální změřená hodnota).

AT příkaz bude vypadat následovně:

AT^SCUDF="ADD","AIN1>80:SMS p[123456789] m[ALARM hodnota je:$AIN1]"

SMS, která potom přijde na nastavené číslo, bude vypadat třeba následovně:

ALARM hodnota je:87 

Upozornění

  • Pokud zadáte klíč nesprávně nebo vynecháte některý znak, klíč se vůbec nepoužije a v odeslané SMS se nezobrazí.

Tip

  • Pokud chcete zobrazit v SMS znak $, je potřeba zadat speciální klíč $$. Je to proto, že samostatný znak $ uvozuje ostatní klíče.

Časovače

Existují tři možnosti, jak časování podmínek využívat. Nyní si je postupně popíšeme. 

Časovač nenastaven

Akce je provedena po vyhodnocení podmínky jako true. Před další akcí je potřeba, aby podmínka byla nejprve false a pak opět true. 

Časovač

Nastavuje se vložením stringu t[60]. Parametr "t" určuje, že se jedná o timer. Číslo 60 je údaj o zpoždění časovače zadávaný v sekundách. Možnosti nastavení časovače jsou 5–4294967s.

Akce je provedena po vyhodnocení podmínky jako true. Před další akcí je třeba, aby byla podmínka nejprve false a pak opět true a zároveň musí vypršet nastavená doba.

Kontinuální časovač

Nastavuje se vložením stringu t[c120]. Parametr "t" určuje, že se jedná o timer. "c" říká, že se jedná o kontinuální časovač a číslo 120 je údaj o zpoždění časovače zadávaný v sekundách. Možnosti nastavení časovače jsou 5–4294967s.

Akce je provedena po vyhodnocení podmínky jako true. Po uplynutí nastavené doby je akce provedena znovu za předpokladu, že je podmínka true. Není nutné, aby byla podmínka vyhodnocena nejprve jako false. 

Čítače

V programu terminálu je celkem 5 virtuálních čítačů, které je možné použít pro čítání počtu zvolených akcí nebo pro uložení aktuální hodnoty do paměti pro další výpočet. K jejich ovládání slouží následující dva parametry.

Inkrementace čítače

Nastavuje se vložením stringu d[1]. Parametr "d" určuje, že se jedná o inkrementaci (navýšení) hodnoty čítače o zadanou hodnotu, která je uvedena v závorce. Číslo 1 tedy určuje krok, o který se čítač posune. Může zde být 1, 5, 254 apod. Lze také nastavit zápornou hodnotu. Potom bude čítač tuto hodnotu od aktuální nastavené odečítat.

Nastavení čítače

Nastavuje se vložením stringu s[4658]. Parametr "s" určuje, že se jedná o parametr nastavení hodnoty čítače, a číslo 4658 udává hodnotu, na kterou se čítač nastaví.

Signalizace chyby GSM sítě

V programu terminálu je podmínka pro UDF – Network Fail GSM (NFG) Jedná se o sledování stavu připojení k mobilní datové síti. V případě, že mobilní připojení selže je možné vyvolat akci, která na to uživatele upozorní. Případně pouze zapsat událost do čítače.

Podmínka je vyhodnocena jako TRUE (tj. network fail) v případě, že buď neprošel PING nebo se po dobu nastavenou v [ at^scping="interval",<minutes> ] nepodařilo získat IP adresu. Zisk IP adresy pak tento stav ruší a podmínka je vyhodnocena jako FALSE

AT příkaz bude vypadat následovně:

at^scudf="ADD","NFG:rel1 r[1]"

Chybové kódy

Zde je tabulka chybových kódů, se kterými se během nastavování UDF podmínek můžete setkat. Při špatném zadání příkazu se objeví ERROR <err_code>. Podle následující tabulky je potom možné identifikovat, kde nastal problém.

<err_code>

Název

Popis

1

UDF_RESP_ERROR

Obecný error

2

UDF_RESP_ERROR_NO_FREE_SLOT

Není místo pro nový záznam

3

UDF_RESP_ERROR_SYNTAX_ACTION_SEPARATOR

Separátor ':' nenalezen

4

UDF_RESP_ERROR_SYNTAX_LOGIC_MARK

Logická značka nenalezena nebo není správná

5

UDF_RESP_ERROR_SYNTAX_PARAM1

1. parametr podmínky nenalezen nebo je nesprávný

6

UDF_RESP_ERROR_SYNTAX_PARAM2

2. parametr podmínky nenalezen nebo je nesprávný

7

UDF_RESP_ERROR_SYNTAX_INVALID_CONDITION

Podmínka není podporována

8

UDF_RESP_ERROR_SYNTAX_ACTION

Chyba v syntaxu akce

9

UDF_RESP_ERROR_SYNTAX_ACTION_TYPE

Typ akce není podporován

10

UDF_RESP_ERROR_PHONE_NUMBER_LEN

Chyba délky telefonního čísla

11

UDF_RESP_ERROR_PHONE_NUMBER

Tel. číslo nenalezeno nebo formát není podporován

12

UDF_RESP_ERROR_IP_ADDRESS

IP adresa nenalezena nebo formát není podporován

13

UDF_RESP_ERROR_IP_PORT

Nesprávný IP port

14

UDF_RESP_ERROR_RELAY_STATE

Stav relé nenalezen nebo nepodporován

15

UDF_RESP_ERROR_PARAM_PARSE

Chyba překladu parametru akce

16

UDF_RESP_ERROR_PARAM_MARK

Neznámý typ parametru akce

17

UDF_RESP_ERROR_PARAM_MARK_TIMING_PERIOD

Odpočet nesprávný nebo mimo meze

18

UDF_RESP_ERROR_PARAM_MESSAGE_LENGTH

Chyba délky zprávy

19

UDF_RESP_ERROR_ID_NOT_FOUND

ID referenční podmínky nenalezeno

20

UDF_RESP_ERROR_PARAM_TYPE_INVALID

Zvolený akční parametr není podporován pro daný typ akce

21

UDF_RESP_ERROR_ACTION_IN_PROGRESS

Právě probíhá akce dané podmínky

22

UDF_RESP_ERROR_MESSAGE_MISSING

Zpráva pro odeslání nenalezena

23

UDF_RESP_ERROR_PARAM_VALUE           

Formát nebo rozsah hodnot je nesprávný

SC Ping 

Funkcí je možné nastavit periodické pingání na nastavenou adresu v nastavených intervalech. Slouží pro správnou funkci syntaxe NFG v UDF nebo pro udržování spojení přes firewall, pokud je terminál ve STANALONE módu.

at^scping="host","8.8.8.8"
  • Nastavuje IP adresu Hosta, na kterého se bude odesílat ICMP požadavek.
at^scping="interval",5
  • Parametr interval se zadává v minutách. 0 znamená, že periodické pingy jsou deaktiovány.
at^scping="test"
  • Příkaz "test" slouží k testování konfigurace před uložením. Při jeho použití se aplikuje právě změněná hodnota, není tedy potřeba provádět "srestart", v průběhu nastavování a zjišťování funkčnosti.
at^scping="save"
  • Uloží provedené změny.
at^scping="restart"
  • Provede restart dané funkce.
at^scping="srestart"
  • Uloží provedené změny a okamžitě přenastaví parametry pingu. 
at^scping?
  • Zobrazí aktuálně nastavené hodnoty rozhraní.
    • SCPING: "HOST","8.8.8.8"
    • SCPING: "INTERVAL",0
at^scping=?
  • Zobrazí možnosti nastavení hodnot na rozhraní.
SCPING: "HOST","1-32"<br>
SCPING: "INTERVAL",0-65534<br>
SCPING: "TEST"<br>
SCPING: "SAVE"<br>
SCPING: "RESTART"<br>
SCPING: "SRESTART"