Vai al contenuto

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.
Stai visualizzando 12 post - dal 1 a 12 (di 12 totali)
  • Autore
    Post
  • #34908
    Anonimo
    Inattivo

    Ho 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.

    #36544
    Sergio Bertana
    Amministratore del forum

    Credo 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).

    #37072
    Anonimo
    Inattivo

    Ho 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 ?

    #37073
    Sergio Bertana
    Amministratore del forum

    La 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.

    #37074
    Sergio Bertana
    Amministratore del forum

    Se 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.

    #39204
    Anonimo
    Inattivo

    Ci 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…

    #39205
    Sergio Bertana
    Amministratore del forum

    Certo 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.

    #39211
    Anonimo
    Inattivo

    Ho 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 CODICE

    #39212
    Sergio Bertana
    Amministratore del forum

    Ho 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).

    #39217
    Anonimo
    Inattivo

    Niente 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.

    #39218
    Sergio Bertana
    Amministratore del forum

    Strano 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.

    #39219
    Anonimo
    Inattivo

    ah 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.

Stai visualizzando 12 post - dal 1 a 12 (di 12 totali)
  • Devi essere connesso per rispondere a questo topic.