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
cs:sw:01-mervis:sending-sms-hidden [2021/08/31 12:29]
avsetula
cs:sw:01-mervis:sending-sms-hidden [2021/09/02 07:52] (current)
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&​nbspS103-G</​span></​html>​ <​html><​span class="​dev-tag dev-neuron">​Neuron&​nbspS103-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**: ​
Line 65: Line 64:
 {{ :​cs:​sw:​01-mervis:​sms-gsm8.png?​direct |}} {{ :​cs:​sw:​01-mervis:​sms-gsm8.png?​direct |}}
  
-===== ===== 
  
 +====== ======
 +/* Odeslání SMS */
 {{page>​cs:​sw:​01-mervis:​send-sms-hidden}} {{page>​cs:​sw:​01-mervis:​send-sms-hidden}}
  
  
-===== 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. +/* Příjem SMS */ 
- +{{page>cs:​sw:​01-mervis:​receive-sms-hidden}}
-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**.+