Ricezione ed invio messaggi SMS
Home › Forum › Programmazione IEC 61131 (LogicLab) › Ricezione ed invio messaggi SMS
- Questo topic ha 11 risposte, 4 partecipanti ed è stato aggiornato l'ultima volta 9 anni, 4 mesi fa da
Anonimo.
-
AutorePost
-
Ottobre 30, 2010 alle 8:13 am #34908
Anonimo
InattivoHo messo in funzione il modem che manda i messaggi correttamente. Ma quando gli invio dei messaggi vedo il modulo modem core che si attiva ma non compare niente sulla variabile stringa, ho provato a dare un indirizzo di memoria ritentiva alla stringa ma non è cambiato nulla.
Una volta che la stringa funziona volevo chiedere se contiene già il numero chiamante e se si come estrapolarlo. Ho guardato più attentamente il manuale ma non sono riuscito a vedere o capire come puntare ad una posizione della stringa e trasferire carattere per carattere alla nuova stringa.
Questo mi serve per mandare un messaggio solo al numerro chiamante e non a tutti quelli inseriti.
Ringrazio find’ora per la cortese risposta.
Ottobre 30, 2010 alle 8:21 am #36544Sergio Bertana
Amministratore del forumCredo che quando parli di variabili stringa in uscita dalla FB ModemCore, tu ti riferisca alle variabili ModemTx e ModemRx. Queste due variabili riportano le stringhe seriali inviate e ricevute dal modem, sono poste solo per permettere il debug della comunicazione con il modem.
Su queste stringhe vedrai i comandi seriali che il bloco funzione invia e riceve dal modem, e sono mantenuti per un tempo di un paio di secondi solo per poterli visualizzare in debug.
Il numero del chiamante o CLIP, è riportato nella variabile CLIPNumber, ed è presente sia su chiamata telefonica che su ricezione messaggio SMS.
Ti basterà copiare la variabile nel blocco funzione ModemSMSSend per inviare un messaggio al numero di telefono da cui hai ricevuto la chiamata e/o il messaggio SMS.
Allego per facilitarti un estratto del manuale di Sline che riporta il funzionamento delle FB di gestione Modem (Download) ed un semplice programma LogicLab (Download programma, Stampa programma).
Dicembre 16, 2011 alle 4:38 pm #37072Anonimo
InattivoHo realizzato un programma per il controllo di un impianto di distribuzione gas. Nell’impianto esistono svariati allarmi alla cui presenza occorre inviare un SMS di avvertimento.
Il cliente chiede di inviare su ogni singolo allarme lo stesso SMS a più numeri telefonici contemporaneamente, avete un suggerimento su come realizzare questo ?
Dicembre 16, 2011 alle 4:45 pm #37073Sergio Bertana
Amministratore del forumLa soluzione è molto semplice, basta utilizzare più blocchi funzione SMSSend, definendo per ogni blocco il testo del messaggio da inviare ed il numero di telefono a cui inviarlo. Il comando di invio del messaggio (Nel tuo caso l’ingresso digitale di allarme) sarà lo stesso per tutte le FB.
Il blocco funzione SMSSend permette la gestione dell’invio sullo stesso evento di più messaggi, si occupa in modo automatico di gestire la sequenza di eventi, attendendo l’invio di ogni singolo messaggio prima di iniziare l’invio del messaggio successivo. Allego estratto manuale per il download.
Dicembre 16, 2011 alle 5:05 pm #37074Sergio Bertana
Amministratore del forumSe devi inviare lo stesso messaggio a diversi numeri, per evitare di dover inserire tante FB SMSSend, ho pensato di realizzare un blocco funzione che gestisce la sequenziazione dell’invio. Riporto il codice sorgente del blocco funzione, e per comodità allego la stampa ed un progetto di esempio per il download.
Done:=FALSE; (* Invio eseguito *)
MSSend(); (* Eseguo FB invio SMS *)(* Memorizzazione comando invio SMS, il comando deve essere impulsivo. *)
IF (Send) THEN StartPls:=TRUE; SdCmd:=TRUE; END_IF;
IF NOT(StartPls) THEN PhNr:=0; RETURN; END_IF;(* Eseguo selezione numero di telefono. *)
CASE PhNr OF
0: SMSSend.Number:=Number1; (* Phone number *)
1: SMSSend.Number:=Number2; (* Phone number *)
2: SMSSend.Number:=Number3; (* Phone number *)
ELSE
Done:=TRUE; (* Invio eseguito *)
StartPls:=FALSE; (* Start pulse *)
RETURN;
END_CASE;(* Eseguo invio SMS. *)
SMSSend.ModemID:=ModemID; (* Modem ID *)
SMSSend.Text:=Text; (* Testo messaggio *)
SMSSend.Send:=SdCmd; (* Comando invio SMS *)
SdCmd:=FALSE; (* Comando invio SMS *)(* Eseguo attesa fine invio. *)
IF ((SMSSend.Done) OR (SMSSend.Fault)) THEN
SdCmd:=TRUE; (* Comando invio SMS *)
PhNr:=PhNr+1; (* Sequencer numeri di telefono *)
END_IF;L’esempio è stato realizzato per inviare lo stesso messaggio a 3 numeri di telefono, ma può essere semplicemente modificato aumentando a piacere i numeri di telefono.
Novembre 23, 2015 alle 7:26 pm #39204Anonimo
InattivoCi sarebbe la possibilità di gestire i numeri dei destinatari da pannello ? Mi spiego meglio dovrei/vorrei poter cambiare il numero di telefono dei destinatari degli SMS direttamente da pannello…
Novembre 24, 2015 alle 8:47 am #39205Sergio Bertana
Amministratore del forumCerto che è possibile, come vedi i vari numeri di telefono sono memorizzati in variabili stringa che ho dimensionato a 16 caratteri. Se tu allochi queste variabili nella DB 100 che è accessibile via Modbus dal terminale potrai scrivere e leggere i numeri con un oggetto inputazione ASCII del terminale (Screenshot). Alcune note importanti.
Se vuoi che i numeri siano ritentivi devi allocarli a partire da DB 100.2048, siccome il pannello operatore accede per variabili WORD (16 Bits) occorre che la dimensione delle stringhe messaggio sia a multipli di 2. Questo anche per mantenere l’allocazione su indirizzi pari (Non si possono allocare variabili WORD su indirizzi dispari).
Attenzione per definizione una variabile di tipo STRING[16] occupa 17 bytes (Il byte aggiuntivo è il codice tappo di terminazione stringa “0”), quindi per mantenere il multiplo binario ti conviene definire stringhe di dimensione 15. Tanto un numero di telefono più il codice di nazione è minore di 15 caratteri.
Novembre 24, 2015 alle 12:23 pm #39211Anonimo
InattivoHo provato ad usare l’FB SMSmux scaricato dal post precedente ma da alcuni errori.
Ho aggiornato la Var ModemSMSSend nell’FB con ModemSMSSend_v2, ho risolto un errore ma me ne da altri:SMSMUX(23) – warning G1799: SMSSEND.NUMBER => Conversione di una stringa in un numero
SMSMUX(24) – warning G1799: SMSSEND.NUMBER => Conversione di una stringa in un numero
SMSMUX(25) – warning G1799: SMSSEND.NUMBER => Conversione di una stringa in un numero
SMSMUX(38) – warning G1799: SMSSEND.TEXT => Conversione di una stringa in un numero
MODEM(3$12) – warning G0065: SMS_SEND_SM_3000.TEXT => Il tipo destinazione può essere troppo piccolo per contenere il risultato
MODEM(3$12) – errore G0043: MOVE => ERRORE INTERNO DEL GENERATORE DI CODICENovembre 24, 2015 alle 1:35 pm #39212Sergio Bertana
Amministratore del forumHo convertito il programma con il nuovo LogicLab 4 (Download programma). Nel nuovo FB ModemSMSSend_v2 il numero di telefono ed il testo del messaggio sono passati per pointer (@USINT) e non per stringa. Quindi all’interno della FB SMSMux si creano errori nelle assegnazioni quali ad esempio:
SMSSend.Number:=Number1;
Perchè cerchi di assegnare ad una variabile pointer una stringa. Ho ripreso il progetto modificando il FB convertendo tutte le variabili stringa in puntatori. Come vedi nel programma ladder per passare una stringa ad un puntatore devi utilizzare lo statement ADR() che carica nel puntatore l’indirizzo di allocazione della variabile.
Vedo dal report di errore che hai tutto in maiuscole attento è meglio mettere nei programmi il tick di selezione Case sensivity, e poi se non vuoi perdere tempo nel trasferire ad ogni download anche i sorgenti, scegli Before disconnection (Screenshot).
Novembre 24, 2015 alle 5:48 pm #39217Anonimo
InattivoNiente da fare… non ne vuole sapere di inviare l’FB SMSMux, ho provato direttamente sul tuo programma ma nulla, mentre con l’FB ModemSMSSend_v2 tutto ok sia con il numero diretto che puntando alla variabile mappata.
Novembre 25, 2015 alle 9:19 am #39218Sergio Bertana
Amministratore del forumStrano ho provato qui da me il programma e funziona… Anche se è ovvio hai definito (Magari in debug) i 3 numeri di telefono, vanno definiti tutti e 3.
Come vedi ho attivato lo Spy quindi dovresti connetterti con la console di spionaggio e vedere cosa succede, eventualmente salvi tutto in un file e me lo invii per capire dove stà il problema.
Novembre 25, 2015 alle 1:30 pm #39219Anonimo
Inattivoah beh… allora come non detto, io avevo definito ed allocato le 3 variabili dei numeri, poi però da HMI ne ho inseriti solo due per testare la comodità di gestire il tutto, decidendo in base a quanto destinatari presenti.
Ho notato anche mentre testavo l’FB SMSSend_v2 che trasferendo il programma senza il sorgente non mi funzionava.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.