Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Giugno 5, 2026 alle 4:57 pm in risposta a: Errore in compilazione programma di esempio ST_ModbusGateway #85793
Sergio Bertana
Amministratore del forumNel programma di esempio viene utilizzato il blocco funzione ModbusGateway_v2, attualmente disponibile nella raccolta di librerie in fase di sviluppo. Come indicato in questo articolo, le librerie sono soggette a continui aggiornamenti: durante lo sviluppo di nuovi blocchi funzione (FB) e nuove funzioni vengono aggiornate anche le relative pagine del sito, comprese la documentazione e i programmi di esempio.
Di conseguenza, qualora un programma di esempio utilizzi oggetti non ancora inclusi nella versione ufficiale della raccolta di librerie distribuita, è necessario scaricare e installare la più recente versione beta in sviluppo, disponibile da questa pagina.
Sergio Bertana
Amministratore del forumEcco come il FB ModemCore gestisce il modem:
- Su abilitazione dopo l’attesa definita in TPower viene attivato Power e sono inviati i comandi di inizializzazione al modem. AT+CSQ controlla il livello del segnale, AT+CREG controlla la connessione alla rete, AT+COPS acquisisce l’operatore al termine si attiva MOk.
- Ogni tempo definito in TCheck sono inviati i comandi AT+CSQ controlla il livello del segnale, AT+CREG controlla la connessione alla rete, AT+COPS acquisisce l’operatore. In caso di errore sulla esecuzione comandi si disattiva MOk.
- Alla ricezione di un RING viene incrementato il valore in Rings acquisito il CLIP del chiamante che è ritornato in CLIPNumber.In caso di errore sulla esecuzione comandi si disattiva MOk.
Al FB ModemCore si collegano i FB ModemPhoneRing, ModemSMSReceive e ModemSMSSend che gestiscono le relative operazioni. Se in uno dei FB collegati si verifica un errore si disattiva MOk. Quindi MOk si disattiva su condizione di errore nella esecuzione dei comandi inviati al modem.
Tutte le operazioni che gestisci nel tuo programma in realtà sono già gestite dal FB ModemCore, basta utilizzare l’uscita Power per comandare l’alimentazione del modem. L’esecuzione ogni tempo definito in TCheck del controllo modem garantisce che sia operativo e connesso alla rete. Il fatto che MOk si disattivi è sicuramente legato ad un errore nella esecuzione di qualche comando modem. Per capire meglio il problema può essere utile attivare lo spionaggio e verificare quale comando và in errore.
Giugno 4, 2026 alle 6:05 pm in risposta a: Compatibilità vecchi progetti con ultime versioni di LogicLab #85757Sergio Bertana
Amministratore del forumI problemi che tu lamenti derivano dal fatto che molto probabilmente hai aperto un progetto LogicLab realizzato con una versione molto datata del programma. Nelle prime versioni i progetti erano salvati con l’estensione ppjs mentre successivamente si è passiti al nuovo formato con estensione plcprj.
Dal punto di vista del programma PLC, praticamente non ci sono differenze funzionali tra .ppjs e .plcprj. Il codice IEC 61131-3 (ST, LD, FBD, SFC, IL), le variabili, la configurazione hardware e il comportamento dell’applicazione restano gli stessi. Le differenze principali sono:
Aspetto .ppjs .plcprj --------------------------------------------------------------- Formato file Testo / formato storico XML Versione LogicLab LogicLab 3 (storico) LogicLab 4 e successive Leggibilita Limitata XML strutturato Gestione funzionalita Limitata Supporta nuove feature LogicLab 4 Librerie associate .pll .plclib Compatibilita target Target storici Compatibile anche con target precedenti
Con le nuove versioni di LogicLab è possibile convertire un progetto da .ppjs a .plcprj, la procedura è semplice:
- Apri il progetto .ppjs con la nuova versione di LogicLab
- Seleziona File->Salva progetto con nome.
- Salva il progetto con estensione .plcprj. LogicLab eseguirà la conversione nel nuovo formato XML.
E’ importante ricordare che quando apri un vecchio progetto .ppjs e lo salvi come .plcprj:
- il codice PLC non viene modificato;
- non cambia la compilazione;
- non cambiano i tempi di esecuzione;
- non cambia il download sul PLC;
- ottieni però il progetto nel nuovo formato XML e puoi utilizzare le funzionalità introdotte con le nuove versioni.
Quindi la conversione è sicuramente consigliabile anche perchè solo con i progetti .plcprj è possibile utilizzare la raccolta librerie.
Sergio Bertana
Amministratore del forumSia noi che Axel (Che sviluppa LogicLab) cerchiamo sempre di mantenere con gli upgrade di LogicLab la compatibilità con i progetti esistenti. Proprio per questo nella raccolta di librerie forniamo la libreria eLLabObsoleteLib che contiene tutte le versione datate dei vari ogetti rilasciati.
Nel tuo caso stai utilizzando davvero un FB “preistorico” ma nonostante questo è presente nella raccolta, ma se non lo fosse ricordo che grazie alla funzione Import di LogicLab è sempre possibile importare oggetti (FB, funzioni, strutture, ecc) da qualsiasi progetto esistente.
L’errore che lamenti nasce da un controllo più “stringente” che LogicLab ha introdotto sull’utilizzo dei puntatori. Nelle ultime versioni del compilatore per evitare errori quando si utilizza un puntatore ne viene controllato il tipo, quindi un puntatore non può puntare a variabili di tipo diverso dal tipo definito. Vediamo un esempio:
VAR Buffer : @BYTE; (* Buffer pointer *) BYArray : ARRAY[0..3] OF BYTE; (* BYTE buffer *) UDArray : ARRAY[0..3] OF UDINT; (* UDINT buffer *) END_VAR Buffer:=ADR(BYArray); Buffer:=ADR(UDArray); //error G0271: Buffer => Invalid operation on different pointed typesCompilando il programma avremo l’errore nella riga indicata, questo perchè si stà valorizzando il pointer Buffer con l’indirizzo di un array di tipo diverso da BYTE.
Per risolvere il problema occorre nelle impostazioni di LogicLab menù Project->Options->Code generation togliere la spunta sul campo Strict pointers check (Screenshot). In questo modo LogicLab non controllerà più il tipo di variabili a cui il puntatore punta.
Giugno 4, 2026 alle 12:09 pm in risposta a: Perseus Monitoring 140 – Segnalazione allarmi tramite ronzatore e led #85725Sergio Bertana
Amministratore del forumIl Perseus Monitoring 140 ha 2 uscite comandabili su condizioni di allarme. Le uscite sono a relè con contatto in scambio, alle uscite è possibile collegare carichi con tensione massima di 50V ed 1A di carico. Il connettore di uscita ha 3 contatti per ogni relè:
- NCx (Normalmente Chiuso): Nello stato di riposo (idle) il morsetto è chiuso con il morsetto COMx (Comune).
- COMx (Comune): Mosetto comune commutato in scambio con le uscite NCx e NOx.
- NOx (Normalmente Aperto): Nello stato di attivazione il morsetto è chiuso con il morsetto COMx (Comune).
Quindi venendo alla tua domanda puoi sicuramente comandare con le uscite un cicalino ed un LED a 12V, ed essendo un comando puramente logico non ci sono problemi ad estendere il cavo di collegamento fino ai 40 metri e oltre necessari per posizionare il cicalino nell’altra sala CED.
Riguardo alla domanda sul sensore con 1,5 metri di cavo, non ho capito se ti riferisci al sensore di temperatura 1-Wire. In tal caso, ricordo che a ciascun connettore 1-Wire del Perseus è possibile collegare più sensori sulla stessa linea (wired-OR/bus 1-Wire); la lunghezza massima complessiva del cavo può arrivare fino a 60 metri.
Per il collegamento dei sensori 1-Wire è possibile utilizzare un cavo UTP (ad esempio Cat.5e o Cat.6). Questo tipo di cavo è comunemente impiegato per realizzare reti 1-Wire e consente di raggiungere la lunghezza massima prevista dal sistema, fino a circa 60 metri, purché l’installazione sia eseguita correttamente e vengano rispettate le raccomandazioni del produttore. Tieni presente che la distanza effettivamente raggiungibile dipende anche dal numero di sensori collegati, dalla topologia del cablaggio e dalla qualità del cavo.
Sergio Bertana
Amministratore del forumPer visualizzare i pacchetti in errrore occorre nel Diagnoser visualizzare il gestore pacchetti indicando il dispositivo che si vuole monitorare (è possibile anche selezionare tutti). Verrà visualizzato un elenco con tutti i pacchetti di lettura/scrittura variabili in transito, i pacchetti in errore sono visualizzati con righe a sfondo rosso (Screenshot).
Cambiando pagina in visualizzazione sul pannello cambieranno anche i pacchetti di lettura/scrittura variabili (il pannello comunica con il PLC solo con le variabili presenti nella pagina).
- Se ci sono pacchetti di errore solo su alcune pagine gli errori sono da ricercare nella pagina in visualizzazione.
- Se i pacchetti in errore sono presenti un pò in tutte le pagine probabilmente è un oggetto generico (Allarmi, Macro, Campionamento dato, Pagina 4:Common Window).
Come si vede dallo screenshot nella riga in errore del diagnoser è riportato l’indirizzo della variabile interrogata, selezionando a sinistra in EasyBuilder il TAB degli indirizzi è posibile trovare l’indirizzo della variabile in errore e selezinandola in basso viene visualizzata la pagina dove si trova e l’oggetto grafico a cui è abbinata.
Sergio Bertana
Amministratore del forumThe GW-DLMS-485-LG is based on a customized version of our SlimLine device, specifically designed for Marcom.
It retains the same configuration and programming capabilities as the standard SlimLine models we offer. However, it includes several hardware modifications that were developed according to Marcom’s specific requirements.
Regarding the issue you reported, we kindly ask you to open a support ticket through the Marcom Support Centre, as they are responsible for providing technical assistance for this product variant.
Thank you for your understanding.
Sergio Bertana
Amministratore del forumAggiungo possibili alternative con display locale.
Sensore di temperatura WiFi: I valori sono visualizzati sul display LCD e possono essere visualizzati sulle pagine web integrate e forniti a sistemi di terze parti utilizzando i protocolli Modbus TCP, SNMP, JSON e XML. Sono gestiti limiti di allarme dei valori misurati e, in caso di superamento, può essere inviata una e-mail o attivare una segnalazione acustica o ottica (LED). Il dispositivo non ha datalogger integrato quindi se è necessario storicizzare i dati occorre appoggiarsi al COMET Cloud oppure gestirne localmente la storicizzazione.
Multilogger Ethernet: Datalogger alimentato a batteria con sensore CO2 integrato e 4 ingressi universali per la misura di temperatura, umidità, tensione 0-10V, corrente 0-20mA, segnali digitali e conteggio impulsi. Può essere installato permanentemente su una rete Ethernet oppure essere utilizzato come strumento portatile. I valori acquisiti sono visualizzati sul display e memorizzati internamente 1000000 di valori (record non ciclico), 600000 valori (record ciclico), i dati registrati sono scaricabili da rete.
Sensore di temperatura LoRaWAN: Progettato per misurare un’ampia gamma di temperature in ambienti difficili, grazie al contenitore con grado di protezione IP65, e trasmettere i dati utilizzando la tecnologia LoRaWAN. Grazie a questa tecnologia a basso consumo energetico può garantire una lunga durata operativa con le batterie integrate. Per l’acquisizione del sensore occorre utilizzare un gateway L0RaWAN. Il dispositivo non ha datalogger integrato ma all’interno del gateway è possibile utilizzando Node-RED o script Python gestire sia la visualizzazione da pagina web dei dati che la loro storicizzazione.
Sergio Bertana
Amministratore del forumI dispositivi della serie Perseus prodotti da HW-group rappresentano la soluzione ideale per il monitoraggio ambientale e industriale avanzato. Possono acquisire diversi tipi di sensori, temperatura, umidità, tensione e corrente, sono dotati di un data logger interno in grado di memorizzare fino a 250.000 campionamenti, registrando i valori dai sensori collegati. I dati storici possono essere scaricati in formato JSON o CSV direttamente dall’interfaccia web o tramite software aziendali.
Grazie alla connettività Ethernet nativa, il dispositivo si integra perfettamente nella rete aziendale. Non è richiesto alcun software proprietario per la consultazione: l’intera gestione avviene tramite un comune browser web, rendendo la dashboard accessibile in tempo reale da qualsiasi PC, smartphone o tablet connessi alla rete.
L’interfaccia utente, intuitiva e flessibile, permette di personalizzare la dashboard inserendo i sensori desiderati e attivandone la registrazione nel log con un semplice clic. Per garantire la massima sicurezza operativa, su ogni singolo sensore è possibile impostare soglie di allarme personalizzate. Al superamento dei limiti stabiliti, il Perseus reagisce immediatamente attivando diverse modalità di notifica:
- Invio di e-mail automatiche ai responsabili.
- Inoltro di Trap SNMP verso i sistemi di supervisione IT centralizzati.
- Attivazione di uscite digitali (relè) per avviare segnali acustici, visivi o sistemi di emergenza locali.
Perseus non ha un display locale di visualizzazione, in alcune applicazioni da ns clienti al sistema è stato abbinato un pannello operatore Touch-screen in cui è possibile realizzare una efficace interfaccia grafica.
Sergio Bertana
Amministratore del forumI would like to know the exact code of the MPS050 you have and the firmware version installed on it.
It seems the issue may be caused by an outdated firmware version.
Sergio Bertana
Amministratore del forumI have tried the same scenario in a simple project without any issues. This is my program:
VAR T1 : eTON; T2 : TON; END_VAR T1(IN:=NOT(T1.Q), PT:=1000); T1(IN:=NOT(T1.Q), PT:=TO_UDINT(T#1s)); T2(IN:=NOT(T2.Q), PT:=T#1s); T2(IN:=NOT(T2.Q), PT:=TO_TIME(1000));TON and TOF timers are defined and used as a blinker.
- The TO_UDINT function converts a TIME value to a UDINT (the returned value is expressed in ms).
- The TO_TIME function converts a UDINT value (which must be given in ms) to TIME.
So I cannot verify the problem you are complaining. It could be related to the operating system version you are using. Could you please report it to me?
Maggio 26, 2026 alle 2:12 pm in risposta a: Acquisizione analogica mixed tra diversi tipi di segnale #85628Sergio Bertana
Amministratore del forumSi vero, quando è attiva almeno una acquisizione di termocoppia su di un banco di ingressi analogici, il canale Ai04 per gli ingressi analogici A ed il canale Ai09 per gli ingressi analogici B è usato internamente dal modulo per la compensazione del giunto freddo (Cold Junction Compensation – CJC).
Ricordo la termocoppia misura una differenza di temperatura tra:
- Giunto Caldo (Giunto di misura): È il punto in cui i due metalli sono saldati ed è posizionato dove si vuole misurare la temperatura.
- Giunto Freddo (Giunto di riferimento): È il punto in cui i fili della termocoppia si collegano allo strumento di misura (es. un display, un PLC o una scheda elettronica).
La termocoppia non misura la temperatura assoluta del giunto caldo, ma la differenza di temperatura tra il giunto caldo e il giunto freddo. Poiché il giunto freddo non è normalmente a 0 °C, serve misurarne la temperatura per compensare il valore letto.
Sergio Bertana
Amministratore del forumIn our SlimLine systems two system time management functions are available:
SysDateGetS (time in seconds):
This function returns the system date and time in UTC expressed in seconds, using a 32-bit UDINT variable. The supported time range extends from 00:00:00 on January 1st, 1970 to 06:28:15 on February 7th, 2106.SysDateGetNs (time in nanoseconds):
This function returns the system date and time in UTC expressed in nanoseconds, using a 64-bit ULINT variable. The supported time range extends from 00:00:00 on January 1st, 1970 to 23:34:33.709 on July 21st, 2554.Both functions are therefore immune to the Year 2038 problem (Y2K38). The first overflow limitation occurs with SysDateGetS in 2106, while using SysDateGetNs extends the limit up to 2554.
However, the issue may arise from how the PLC program is implemented. If DATE and DATE_AND_TIME data types are used, the system may still be exposed to the Y2K38 problem. For this reason, we recommend using 64-bit data types in application development wherever possible.
More information is available in this article.
Maggio 19, 2026 alle 9:26 am in risposta a: Acquisizione analogica mixed tra diversi tipi di segnale #85531Sergio Bertana
Amministratore del forumIl modulo acquisizione analogica PCB126C130 è dotato di 10 (5 per banco) ingressi analogici differenziali di tipo Front-end, cioè in grado di acquisire segnali provenienti direttamente dal campo. In particolare il modulo è in grado di acquisire segnali 0-10Vdc/0-1Vdc, 0-20mA/4-20mA, PT100, PT1000, Ni1000, Termocoppie, Strain gauges e resistenze.
Ogni banco di ingressi è galvanicamente isolato dalla logica del sistema e dall’altro banco. Questo significa che i segnali connessi ai 5 ingressi di ogni banco possono avere riferimenti di massa diversi dall’altro banco e dalla alimentazione del sistema senza creare correnti parassite, loop di terra o interferenze che potrebbero compromettere la misura. La separazione galvanica aumenta inoltre la sicurezza elettrica e protegge il PLC da sovratensioni o anomalie provenienti dal campo. L’acquisizione avviene in modalità differenziale, quindi il modulo misura la differenza di tensione tra gli ingressi A0x+ e A0x−. Il valore massimo acquisibile dipende dal range impostato tramite i jumper LK:
- LK disinseriti: acquisizione differenziale 0…1 V
- LK inseriti: acquisizione differenziale 0…10 V
Quando i segnali analogici sono riferiti alla stessa massa del modulo ed il riferimento viene collegato all’ingresso AGnd, la tensione presente sugli ingressi coincide sostanzialmente con il range di acquisizione selezionato. Nel caso invece di segnali provenienti da dispositivi con masse di riferimento differenti, queste non devono essere collegate direttamente ad AGnd. In questa configurazione la misura differenziale continua a funzionare correttamente, ma la differenza di potenziale tra le diverse masse di riferimento applicate ai canali appartenenti allo stesso banco non deve superare 3.8 V.
Il limite di 3.8 V rappresenta quindi la massima tensione di modo comune ammessa tra le masse dei segnali acquisiti ed il riferimento del modulo. Superare tale valore può portare a errori di misura, saturazione degli ingressi o condizioni operative non garantite.
Venendo alla tua domanda, se i tuoi 6 ingressi analogici sono riferiti alla stessa massa puoi connetterne 5 su un banco del modulo, essendo segnali 0-10Volt avrai tutti gli LK inseriti mentre sull’altro banco utilizzi un ingresso configurato come termocoppia e 3 ingressi disponibili per acquisizione 0-10Volt. Ricordo che quando sono acquisite termocoppie l’ingresso 4 del banco non è più disponibile perchè utilizzato per la lettura della temperatura di compensazione giunto freddo (Posizione jumpers).
Sergio Bertana
Amministratore del forumSi quello che hai definito è corretto, nei sistemi SlimLine come in tutti i PLC gli I/O digitali sono gestiti in immagine di processo ed appoggiati in aree di memoria distinte tra ingressi ed uscite:
- Ingressi digitali area %IX seguita da indirizzo modulo (255 per modulo CPU) dopo il punto l’identificazione dell’ingresso sul modulo.
- Uscite digitali area %QX seguita da indirizzo modulo (255 per modulo CPU) dopo il punto l’identificazione della uscita sul modulo.
Nel caso si desideri gestirli da programma in parallelo alla immagine di processo è possibile utilizzare i blocchi funzione specifici:
- Ingressi digitali, FB SysGetPhrDI, definire indirizzo modulo (255 per modulo CPU), sono acquisiti tutti gli ingressi del modulo.
- Uscite digitali, FB SysSetPhrDO, definire indirizzo modulo (255 per modulo CPU), sono settate tutte le uscite d el modulo.
Gli I/O analogici devono essere gestiti da programma utilizzando i blocchi funzione specifici:
- Ingressi analogici, FB SysGetAnInp, definire indirizzo modulo (255 per modulo CPU) e canale di acquisizione sul modulo.
- Uscite analogiche, FB SysSetAnOut, definire indirizzo modulo (255 per modulo CPU) e canale di uscita sul modulo.
-
AutorePost