This is an old revision of the document!
Příjem/odesílání SMS zpráv
Některé modely našich PLC jsou vybaveny GSM modulem, kterým lze přijímat a odesílat SMS zprávy. Následující návod se věnuje konfiguraci modemu a příjmu/odesílání SMS pomocí funkčních bloků v Mervis IDE.
Neuron S103-G
Konfigurace modemu
Nejprve je třeba nastavit komunikaci s modemem, k tomu slouží Alarmový kanál. Dvojitě klikněte na PLC v levém panelu. Vyberte záložku Definice hlášení, klikněte pravým tlačítkem myši na prázdný seznam kanálů a v kontextovém menu vyberte možnost Přidat alarmový kanál:
Objeví se nový alarmový kanál. Ve výchozím stavu je nastaven pro odesílání e-mailových zpráv. Klikněte na Typ (nyní předvyplněn “Smtp”) a změňte jej na Gsm:
Nyní se přesuňte do vlastností kanálu a změňte Číslo portu na COM1 (TTL):
Pokud je SIM karta chráněna PIN kódem, zadejte jej do příslušné kolonky. Pokud ne, ponechte ji prázdnou:
Většina modemů, včetně těch použitých v Unipi kontrolérech, vyžaduje inicializační příkazy. Klikněte na ikonu vedle Nastavení AT příkazů. Objeví se následující dialogové okno:
V rozbalovacím menu následně vyberte správný modem. Pro jednotky Unipi Neuron se jedná o Unipi Neuron GSM - G510:
Nezapomeňte tento výběr uložit kliknutím na Použít a uzavřením dialogového okna:
Kanál je nastaven. Změny je nyní nutné uložit kliknutím na OK v červené liště:
Odesílání SMS
Pro odesílání SMS zpráv vyhledejte funkční blok “SendSMS Triggered” a umístěte jej do prostoru programu:
Tento funkční blok vyžaduje 4 vstupní proměnné. Pro pohodlnější ladění vytvoříme pomocné proměnné. Jako první vytvoříme vstup channel. Vytvořte proměnnou typu string a jako její počáteční hodnotu zadejte jméno vytvořeného alarmového kanálu. Ve výchozím stavu je nazván jako alrchannel:
Stejný proces zopakujeme i u zbytku proměnných:
- recipient: proměnná typu string, obsahuje telefonní číslo v mezinárodním formátu (tj. např. 00420777666555)
- message: proměnná typu string, obsahuje text samotné SMS zprávy
- trigger: proměnná typu bool, která zprávu odešle při detekci náběžné hrany.
Výsledek by měl vypadat přibližně takto:
Nyní sestavu nahrajte a spusťte ladění. Při každé změně hodnoty proměnné trigger z False na True se na zadané číslo odešle SMS zpráva.
Pokud je odeslání SMS úspěšné, výstup Result bude mít hodnotu 0. Pokud ne, zobrazí se chybový kód; v takovém případě určete příčinu problému prostudováním nápovědy k danému funkčnímu bloku (klávesa F1).
Příjem SMS
Funkční blok receiveSMS v základu není určen pro použití ve FBD, jelikož by se na zprávy dotazoval v každém cyklu programu. S patřičnou úpravou jej však ve FBD použít lze.
Tento funkční blok nemá žádné vstupní proměnné, ale obsahuje 5 výstupů:
- channel: proměnná typu string, obsahuje označení alarmového kanálu na kterém byl SMS přijata (pro případ více modemů)
- sender: proměnná typu string, obsahuje telefonní číslo v mezinárodním formátu (tj. např. +420777666555)
- message: proměnná typu string, obsahuje text samotné SMS zprávy
- receivetime: proměnná typu DT, obsahuje čas, kdy byla zpráva přijata
Posledním výstupem je výstup bez označení, který je typu integer a obsahuje číselný status s výsledkem operace, více je popsno níže v textu.
Jelikož je blok určen pouze pro použití v ST, je nutné pro jeho použití vytvořit vlastní funkční blok psaný v ST. To je možné pouze v Plném módu sestavy. Postup pro přepnutí do plného módu naleznete zde v úvodním článku.
Pro příjem SMS vytvořte funkční blok kliknutím pravým tlačítkem myši na projekt (např. ve spustitelných projektech).
img1
Zobrazí se dialogové okno, zde vyberte/vložte:
- Název: ReceiveSMS_fbd
- Typ: FunctionBlock
- Jazyk: st
- Jmenný prostor: v0_0
a potvďte kliknutím na OK.
img2
Otevře se Vám okno se základní kostrou funkčního bloku. Veškerý obsah bloku smažte a nahraďtě následujícím kódem:
- ReceiveSMS_fbd.st
NAMESPACE v0_0 FUNCTION_BLOCK ReceiveSMS_fbd VAR trigger : R_TRIG; readPulse : bool := 0; END_VAR VAR_INPUT readSMS : bool := 0; END_VAR VAR_OUTPUT result : int := 31; sms_channel : string := ""; sender : string := ""; message : string := ""; receive_time : dt := dt#0001-01-01-00:00:00; END_VAR trigger(CLK:=readSMS,Q=>readPulse); IF readPulse THEN result := MESSAGING.RECEIVESMS( CHANNEL => sms_channel, SENDER => sender, MESSAGE => message, RECEIVETIME => receive_time ); END_IF; END_FUNCTION_BLOCK END_NAMESPACE
Výsledek by měl vypadat následovně:
obr3
Okno funkčního bloku nyní můžete zavřít, následně sestavu uložte a kompilujte.
Nyní otevřete main.program.fbd a klikněte pravým talčítkém myši do prázdného prostoru a z kontextové nabídky zvolte: Přidat blok knihovny → Přidat blok knihovny.
obr4
Otevře se dialogové okno pro vyhledávání funkcí a funkčních bloků. Do pole Název zadejte název bloku: ReceiveSMS_fbd, označte jej a klikněte na OK.
obr5
Tím se blok vloží do prostoru programu:
obr6
Nyní je třeba vytvořit několik testovacích proměnných. Nejprve vytvořte vstupní proměnnou trigger typu bool a jako její počáteční hodnotu zadejte False. Proměnnou propojte se vstupem readSMS bloku:
obr7
Následně vytvořte výstupní proměnné channel, sender a message, všechny jsou typu string. Jako poslední vytvořte proměnnou receivetime typu DT. Jelikož jsou všechny proměnné výstupní, není nutné nastavovat jejich počáteční hodnoty. Na závěr je propojte s blokem.
Výsledek by měl vypadat přibližně takto:
obr8
Nyní sestavu nahrajte a spusťte ladění. Při každé změně hodnoty proměnné trigger z False na True se přečte jedna zpráva z paměti SIM karty.
Výstup result bude mít hodnotu 0, pokud přeštění zprávy proběhlo v pořádku a hodnotu 31, pokud není k dispozici žádná zpráva. Ostatní hodnoty indikují chybu, více se dozvíte v nápovědě k funkčnímu bloku receivesms (klávesa F1).