Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
cs:sw:01-mervis:sending-sms-hidden [2021/08/31 12:18]
avsetula
cs:sw:01-mervis:sending-sms-hidden [2021/09/02 07:51]
avsetula [Příjem/odesílání SMS zpráv]
Line 7: Line 7:
 ====== 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&​nbspS103-G</​span></​html>​ <​html><​span class="​dev-tag dev-neuron">​Neuron&​nbspS103-G</​span></​html>​
Line 43: Line 43:
 ---- ----
  
-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 |}}
Line 66: Line 66:
  
  
-/* 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 |}} 
  
----- +====== ====== 
- +/* Příjem SMS */ 
-/* FIXME - upraveno pár detailů v následujícím odstavci */ +{{page>cs:​sw:​01-mervis:​receive-sms-hidden}}
-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**.+