Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Settembre 6, 2013 alle 12:29 pm in risposta a: Utilizzo del modem MC55i per invio di SMS concatenati #37756
Sergio Bertana
Amministratore del forumIl messaggio SMS ha una dimensione fissa di 140 byte. Questo si traduce in pratica nella possibilità di usare 160 caratteri di testo (a 7 bit). Il modem non può concatenare i messaggi, pertanto se si hanno messaggi più lunghi da gestire occorre suddividerli in messaggi da 140 byte.
Ricordo che la tecnica della concatenazione utilizzata dai telefoni, è comunque quella di dividere il messaggio in più messaggi spediti separatamente, i messaggi sono poi ricombinati dal ricevente. Anche a livello di tariffazione il gestore fa pagare ogni singolo messaggio di cui è composto il messaggio concatenato. Quindi il tuo programma su PC potrebbe utilizzare la stessa tecnica.
Sergio Bertana
Amministratore del forumAggiungo la risposta alla tua richiesta, come detto nel post precedente, SlimLine viene riavviato se il programma non rinfresca ciclicamente il circuito di watchdog, quindi se nel tuo programma ti blocchi in un loop infinito provochi il riavvio del sistema. E’ possibile ad esempio scrivere un programma del tipo:
WHILE (Di00CPU) DO END_WHILE;
Come si evince attivando la variabile Di00CPU (Definita come %IX255.0, ingresso 0 del modulo CPU) il programma si arresta in un loop infinito provocando il riavvio del sistema SlimLine per intervento del circuito di watchdog.
Attenzione! Eseguendo questo tipo di tests od in generale se il programma và sempre in errore può essere impossibile riconnettere il sistema a LogicLab, per risolvere il problema occorre eseguire un catch del sistema e la successiva cancellazione del programma (Vedi post).
Sergio Bertana
Amministratore del forumQuesto post mi dà l’opportunità di spiegare in modo dettagliato tutti i meccanismi di autocontrollo del funzionamento gestiti dal sistema operativo e dall’hardware dello SlimLine.
I sistemi SlimLine hanno un doppio circuito di watchdog hardware, uno basato su un circuito appositamente predisposto ed uno gestito internalmente dal processore ARM. Se il programma non rinfresca ciclicamente questi due watchdog il sistema viene resettato in modo hardware forzandone un riavvio. Tutta questa gestione è fatta appositamente per garantire che eventuali impallamenti del sistema non lo blocchino, la normativa IEC infatti prevede che in caso di blocchi sul funzionamento del programma il sistema riparta. Esistono poi ulteriori controlli gestiti in modo hardware dal processore ARM che provocano il riavvio del sistema:
Il programma fa un accesso ad un area di memoria errata.
Il processore trova nel programma una istruzione non corretta.
Vengono abilitati/disabilitati gli interrupts in modo anomalo.
Viene corrotta la memoria di heap del processore.Può succedere che nel programma trasferito sul sistema vi sia un errore grave che provoca il riavvio del sistema, in questo caso mi troverei in un vicolo cieco, il sistema ripartendo riesegue il programma in errore riavviandosi e questo all’infinito. Ecco allora che se SlimLine riconosce che era connesso ad un PC con l’ambiente di sviluppo LogicLab, in caso di errore non riavvia il programma ma si pone in stato di programmazione.
Settembre 5, 2013 alle 6:43 am in risposta a: Virtual COM (VCOM) convertitori Ethernet-seriale ATC #37752Sergio Bertana
Amministratore del forumMolti clienti mi chiedono se virtualizzando più convertitori su altrettante porte COMs seriali si ottengono ancora buone prestazioni.
Certo molto dipende dal PC su cui viene eseguita la virtualizzazione e dalle prestazioni della rete LAN su cui i convertitori sono connessi, riporto un esempio reale di un nostro cliente che ha virtualizzato su di un PC Windows Xp utilizzando il software VCOM 3.6.1, 13 convertitori Ethernet/Seriale ATC-1000 (Screenshot).
Come si vede dallo screenshot è anche possibile gestire convertitori configurati con connessione TCP insieme a convertitori configurati con connessione UDP. Se il protocollo di comunicazione dei dispositivi seriali connessi ai convertitori prevede già un meccanismo di controllo trasmissione (Esempio protocollo Modbus), consiglio di configurare la connessione UDP in quanto richiede meno banda.
Settembre 4, 2013 alle 3:08 pm in risposta a: Gestire un display alfanumerico con un modulo SlimLine #37751Sergio Bertana
Amministratore del forumStimolato dalle richieste eccomi con una FB che gestisce la scrittura su di un display MC21605GL6W-SPI della Midas acquistato da Farnell (Codice 221-8947) di cui allego il datasheet. Ho collegato il display al bus di estensione di un modulo CPU compact ARM7 (Vedi foto), utilizzando il seguente schema elettrico.
Come si vede dal programma (Stampa e Download), il blocco funzione MC21605LCDMng gestisce il display connesso al bus, occorre indicare l’indirizzo I2C del display, e l’indirizzo della stringa da visualizzare. I primi 16 caratteri della stringa saranno visualizzati sulla riga superiore del display mentre i secondi 16 sulla riga inferiore. Attivando la variabile Write viene eseguito il trasferimento della stringa sul display.
Il FB viene eseguito da programma ladder ed il comando di Write è attivato sul fronte positivo di SysClock1000, quindi il display viene aggiornato ad ogni secondo. Il comando Write deve essere utilizzato per sincronizzare l’aggiornamento del display quando si varia la stringa da visualizzare, siccome l’aggiornamento del display avviene ciclicamente un carattere a loop di programma se vario la stringa mentre il display si aggiorna corro il rischio di visualizzare un messaggio composto da un pezzo del vecchio dato e da un pezzo del nuovo dato.Il programma potrà essere modificato per gestire display diversi da quello da me scelto magari con maggior numero di righe e colonne.
Settembre 3, 2013 alle 1:41 pm in risposta a: Gestione pagine web dinamiche da parte dell’utente #37749Sergio Bertana
Amministratore del forumAggiungo links a questi posts che riportano esempi di utilizzo del web server con pagine dinamiche.
In questo post è trattato l’invio di SMS direttamente da pagina web.
In questo post è trattata la gestione di comandi e la visualizzazione di stati logici.Sergio Bertana
Amministratore del forumDovendo gestire il comando di uscite logiche e la visualizzazione dello stato di ingressi logici ho pensato di utilizzare un sistema Netlog III che dispone già nativamente di 12 ingressi ed 8 uscite digitali. Il programma può anche essere utilizzato sui dispositivi SlimLine ma il modulo CPU dispone solo di 2 ingressi e 2 uscite digitali, se te ne occorrono di più devi utilizzare i moduli di espansione.
Nel programma (Stampa) di cui allego sia il programma sorgente che la pagina HTM di esempio (Download), ho definito due array di BOOL nella DB 100. Nell’array IStatus allocato ad indirizzo DB100.0 da programma ladder appoggio lo stato di 8 ingressi digitali, lo stato delle variabili dell’array OCommand allocato ad indirizzo DB100.2048 (Zona RETAIN) viene da programma ladder trasferito sulle 8 uscite digitali.
Nella pagina web (Screenshot) ho creato una tabella con la possibilità di impostare sia gli 8 comandi che visualizzare gli 8 stati. Le utenze sono definite con l’etichetta “Utenza x” ed i comandi e lo stato con “Spento” ed “Acceso” ma aprendo il file IOByWeb.htm con un normale text editor è possibile modificare il testo per adattarlo alle proprie necessità, in questo post si trovano informazioni su come funziona il web server.
Per trasferire la pagina web (File IOByWeb.htm) sul sistema fare riferimento a questo post, il sistema Netlog III è esattamente uguale ai sistemi SlimLine.
Settembre 2, 2013 alle 12:44 pm in risposta a: Riportare alle impostazioni di default su ATC-1000 #37746Sergio Bertana
Amministratore del forumAggiungo a quanto detto nel post precedente che la ricerca dei dispositivi trova solo i dispositivi il cui indirizzo IP appartiene alla rete in cui è configurato il PC.
Settembre 2, 2013 alle 9:42 am in risposta a: Come mantenere in backup il valore di un counter #37745Sergio Bertana
Amministratore del forumA scopo didattico ecco il sorgente ST di un nuovo FB che prevede anche il preset, l’ho chiamato CTUPreset.
IF (CU AND NOT CUMemo) THEN
IF (CV < PV) THEN CV:=CV+1; END_IF;
END_IF;CUMemo:=CU; (* CU status memo *)
IF P THEN CV:=Preset; END_IF; (* Preset command *)
IF R THEN CV:=0; END_IF; (* Reset command *)
Q:=(CV >= PV); (* Output management *)Come vedi ho aggiunto due ingressi P (BOOL) e Preset (UDINT) che permettono su comando di presettare il valore in uscita. Inoltre già che ho modificato ho anche modificato le variabili di conteggio in UDINT, in questo modo il counter può contare fino a 4294967295.
Allego stampa e progetto sorgente, come vedi nel programma LD al primo loop forzo il preset del CTU con la variabile Pieces che è anche la variabile valorizzata con il valore CV del CTU. Naturalmente questa variabile andrà allocata in una zona RETAIN.
Settembre 2, 2013 alle 9:37 am in risposta a: Come mantenere in backup il valore di un counter #37744Sergio Bertana
Amministratore del forumIl blocco funzione CTU è stato fatto in accordo alle specifiche della IEC61131, ma è sicuramente possibile modificarlo per ottenere quello che si desidera. Il blocco funzione CTU è realizzato in ST ecco il codice sorgente.
IF (CU AND NOT CUMemo) THEN
IF (CV < PV) THEN CV:=CV+1; END_IF;
END_IF;CUMemo:=CU; (* CU status memo *)
IF R THEN CV:=0; END_IF; (* Reset command *)
Q:=(CV >= PV); (* Output management *)In merito alla tua domanda, non è possibile in nessun modo presettare il valore di CTU.CV in quanto si tratta di una variabile di uscita dal FB.
Settembre 2, 2013 alle 6:28 am in risposta a: Migrazione di vecchi programmi sviluppati con Remoter #37742Sergio Bertana
Amministratore del forumNell’ambiente di sviluppo Remoter erano disponibili alcune variabili che non sono più presenti in LogicLab, come ad esempio mi fai notare tu la PLCPulse1000. Nei programmi ladder la variabile si ottiene semplicemente utilizzando il contatto di tipo fronte positivo -]P[- con operando SysClock1000.
Per quanto riguarda il linguaggio ST è ottima la tua soluzione.
Sergio Bertana
Amministratore del forumAggiungo ricordando che di questi rami è possibile farne tutti quelli che si necessitano, in questo post un esempio di più contatori con acquisizione del loro valore da Modbus.
Sergio Bertana
Amministratore del forumSe usi il blocco funzione CTU, Counter Up per gestire il counter non puoi mantenere in backup il valore di conteggio CV. Esiste una soluzione molto semplice per realizzare contatori che mantengono il loro valore di conteggio allo spegnimento, basta utilizzare l’operando ADD, ecco un semplice ramo ladder che ne mostra l’uso.
In pratica viene abilitato l’operando ADD sul fronte di attivazione di un ingresso digitale tramite l’operando -]P[-, ad ogni fronte di attivazione viene sommato 1 al valore della variabile Counter ed il risultato è salvato nella variabile Counter. Basterà definire la variabile con l’attributo RETAIN oppure allocarla nella memoria ritentiva (A partire da DB 100.2048) per mantenere il valore memorizzato allo spegnimento, allego un progetto per il download.
Sergio Bertana
Amministratore del forumIl download del progetto è possibile soltanto se sei registrato, comunque la procedura è esattamente quella da tè descritta. Occorre importare l’immagine gif per ogni stato della lampada, questo vale sia per lampade Bit a 2 stati che per lampade Word a più stati.
Agosto 30, 2013 alle 12:22 pm in risposta a: Comunicazione dati M2M con chiamata da linea analogica #37735Sergio Bertana
Amministratore del forumIl modem analogico è connesso direttamente alla linea Telecom oppure passa tramite centralino, la linea Telecom è la classica linea analogica oppure è una linea VoIP ?
Hai provato con un solo modem analogico, oppure ne hai provati più modelli, è da qualche anno che non faccio più questo tipo di connessioni ma quando eseguivo dei tests utilizzavo un modem USRobotics 56K V.92 Message Modem USR015668D ed il tutto funzionava senza problemi.
-
AutorePost