Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
cs:sw:01-mervis:sending-sms-hidden [2021/08/31 11:54] avsetula |
cs:sw:01-mervis:sending-sms-hidden [2021/09/02 07:52] avsetula |
||
---|---|---|---|
Line 4: | Line 4: | ||
</div></html> | </div></html> | ||
- | /* FIXME - změna nadpisu */ | ||
====== Příjem/odesílání SMS zpráv ====== | ====== Příjem/odesílání SMS zpráv ====== | ||
<WRAP group> | <WRAP group> | ||
- | <WRAP half column 81%> | + | <WRAP half column 80%> |
[[https://www.unipi.technology/cs/unipi-neuron-s103-g-p107|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. | [[https://www.unipi.technology/cs/unipi-neuron-s103-g-p107|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. | ||
</WRAP> | </WRAP> | ||
- | <WRAP half column 15%> | + | <WRAP half column 16%> |
;;# | ;;# | ||
<html><span class="dev-tag dev-neuron">Neuron S103-G</span></html> | <html><span class="dev-tag dev-neuron">Neuron S103-G</span></html> | ||
Line 17: | Line 16: | ||
</WRAP> | </WRAP> | ||
- | /* FIXME - doplněn nadpis, upraven začátek první věty */ | + | |
===== Konfigurace modemu ===== | ===== 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**: | 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**: | ||
{{ :cs:sw:01-mervis:sms-gsm1.png?direct |}} | {{ :cs:sw:01-mervis:sms-gsm1.png?direct |}} | ||
+ | |||
+ | ---- | ||
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**: | 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**: | ||
{{ :cs:sw:01-mervis:sms-gsm2.png?direct |}} | {{ :cs:sw:01-mervis:sms-gsm2.png?direct |}} | ||
+ | |||
+ | ---- | ||
Nyní se přesuňte do vlastností kanálu a změňte **Číslo portu** na **COM1 (TTL)**: | Nyní se přesuňte do vlastností kanálu a změňte **Číslo portu** na **COM1 (TTL)**: | ||
{{ :cs:sw:01-mervis:sms-gsm3.png?direct |}} | {{ :cs:sw:01-mervis:sms-gsm3.png?direct |}} | ||
+ | |||
+ | ---- | ||
Pokud je SIM karta chráněna PIN kódem, zadejte jej do příslušné kolonky. Pokud ne, ponechte ji prázdnou: | Pokud je SIM karta chráněna PIN kódem, zadejte jej do příslušné kolonky. Pokud ne, ponechte ji prázdnou: | ||
Line 35: | Line 40: | ||
{{ :cs:sw:01-mervis:sms-gsm4.png?direct |}} | {{ :cs:sw:01-mervis:sms-gsm4.png?direct |}} | ||
- | 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 {{:files:dialog-open_button_2.png?nolink|}} vedle **Nastavení AT příkazů**. Objeví se následující dialogové okno: | + | ---- |
+ | |||
+ | Většina modemů, včetně těch použitých v Unipi jednotkách, vyžaduje inicializační příkazy. Klikněte na ikonu {{:files:dialog-open_button_2.png?nolink|}} vedle **Nastavení AT příkazů**. Objeví se následující dialogové okno: | ||
{{ :cs:sw:01-mervis:sms-gsm5.png?direct |}} | {{ :cs:sw:01-mervis:sms-gsm5.png?direct |}} | ||
+ | |||
+ | ---- | ||
V rozbalovacím menu následně vyberte správný modem. Pro jednotky Unipi Neuron se jedná o **Unipi Neuron GSM - G510**: | V rozbalovacím menu následně vyberte správný modem. Pro jednotky Unipi Neuron se jedná o **Unipi Neuron GSM - G510**: | ||
{{ :cs:sw:01-mervis:sms-gsm6.png?direct |}} | {{ :cs:sw:01-mervis:sms-gsm6.png?direct |}} | ||
+ | |||
+ | ---- | ||
Nezapomeňte tento výběr uložit kliknutím na **Použít** a uzavřením dialogového okna: | Nezapomeňte tento výběr uložit kliknutím na **Použít** a uzavřením dialogového okna: | ||
{{ :cs:sw:01-mervis:sms-gsm7.png?direct |}} | {{ :cs:sw:01-mervis:sms-gsm7.png?direct |}} | ||
+ | |||
+ | ---- | ||
Kanál je nastaven. Změny je nyní nutné uložit kliknutím na **OK** v červené liště: | Kanál je nastaven. Změny je nyní nutné uložit kliknutím na **OK** v červené liště: | ||
Line 52: | Line 65: | ||
- | /* FIXME - přidán nadpis a upravena první věta */ | + | ====== ====== |
- | ===== Odesílání SMS ===== | + | /* Odeslání SMS */ |
- | Pro odesílání SMS zpráv vyhledejte funkční blok "**SendSMS Triggered**" a umístěte jej do prostoru programu: | + | {{page>cs:sw:01-mervis:send-sms-hidden}} |
- | + | ||
- | {{ :cs:sw:01-mervis:sms_ide9.png?direct |}} | + | |
- | + | ||
- | /* FIXME - upraveno pár detailů v následujícím odstavci */ | + | |
- | 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**: | + | |
- | + | ||
- | {{ :cs:sw:01-mervis:sms_ide10.png?direct |}} | + | |
- | + | ||
- | **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**. | + | |
- | + | ||
- | /* FIXME - upraven detail v následující větě */ | + | |
- | Výsledek by měl vypadat přibližně takto: | + | |
- | + | ||
- | {{ :cs:sw:01-mervis:sms_ide11.png?direct |}} | + | |
- | + | ||
- | 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. | + | |
- | + | ||
- | {{ :cs:sw:01-mervis:sms_ide12.png?direct |}} | + | |
- | + | ||
- | 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 (pro výstup result). | + | |
- | + | ||
- | ---- | + | |
- | + | ||
- | <WRAP center round important 95%> | + | |
- | 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 [[cs:sw:01-mervis:creating-new-project-hidden#prepnuti_do_plneho_modu|zde v úvodním článku]]. | + | |
- | </WRAP> | + | |
- | + | ||
- | Pro příjem SMS vytvořte funkční blok kliknutím pravým tlačítkem myši na projekt (např. ve spustitelných projektech). | + | |
- | + | ||
- | {{ :cs:sw:01-mervis:sms_ide13.png?direct |}} | + | |
- | + | ||
- | 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. | + | |
- | + | ||
- | {{ :cs:sw:01-mervis:sms_ide14.png?nolink |}} | + | |
- | + | ||
- | 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: | + | |
- | + | ||
- | <code | 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 | + | |
- | </code> | + | |
- | + | ||
- | Výsledek by měl vypadat následovně: | + | |
- | + | ||
- | {{ :cs:sw:01-mervis:sms_ide15.png?direct |}} | + | |
- | + | ||
- | Okno funkčního bloku nyní můžete zavřít, následně sestavu uložte a kompilujte. | + | |
- | + | ||
- | Poté 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**. | + | |
- | + | ||
- | {{ :cs:sw:01-mervis:sms_ide16.png?direct |}} | + | |
- | + | ||
- | 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. | + | |
- | + | ||
- | {{ :cs:sw:01-mervis:sms_ide17.png?direct |}} | + | |
- | + | ||
- | Tím se blok vloží do prostoru programu: | + | |
- | + | ||
- | {{ :cs:sw:01-mervis:sms_ide18.png?direct |}} | + | |
- | + | ||
- | 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: | + | |
- | + | ||
- | {{ :cs:sw:01-mervis:sms_ide19.png?direct |}} | + | |
- | + | ||
- | Dále 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: | + | |
- | + | ||
- | {{ :cs:sw:01-mervis:sms_ide20.png?direct |}} | + | |
- | + | ||
- | Nahrajte sestavu 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. | + | |
- | + | ||
- | {{ :cs:sw:01-mervis:sms_ide21.png?direct |}} | + | |
- | + | ||
- | 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ě (klávesa F1) k funkčnímu bloku **receivesms**. | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
+ | ====== ====== | ||
+ | /* Příjem SMS */ | ||
+ | {{page>cs:sw:01-mervis:receive-sms-hidden}} | ||