Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Novembre 7, 2025 alle 5:40 pm in risposta a: Campionamento dati EBPro con sincronizzazione oraria #84369
Sergio Bertana
Amministratore del forumIl problema della sincronizzazione data/ora tra sistemi diversi (Esempio tra PLC e pannello) è un problema comune a molti. Per i nostri sistemi SlimLine abbiamo predisposto il blocco funzione WeintekHMIClock.
Per il tuo problema assodato che la data/ora tra pannello e PLC sia molto simile (Ad esempio entrambi si aggiornano con un server orario) il modo più immediato è attivare il comando da PLC qualche secondo prima della mezzanotte in modo da essere certi che il pannello ha ancora la data sullo stesso giorno. In questo caso perderesti il conteggio dei pezzi tra l’attivazione del comando e la mezzanotte.
Puoi anche gestire il comando tramite una macro da pannello (La LW 9020 ritorna il valore del giorno) quindi basta confrontarla con un valore memorizzato alla esecuzione precedente della macro e quando cambia forzare il comando di salvataggio. Ma anche in questo caso non sei certo che il giorno sia effettivamente cambiato anche sul PLC.
Sergio Bertana
Amministratore del forumA seguito della tua richiesta ho realizzato il programma di esempio ST_ModbusExchange che trovi in fondo a questo articolo.
Sergio Bertana
Amministratore del forumNon so se ho capito bene la tua domanda…
Mi sembra che tu debba gestire una connessione Modbus tra un PLC MPS056 e diversi apparecchi in RS485 e che durante la fase di messa in servizio tu debba accedere agli stessi apperecchi da un PC per configuare registri Modbus che sono utilizzati solo nella messa in servizio e quindi non sono coinvolti nella comunicazione con il PLC.
La prima considerazione è che avendo l’MPS056 solo una porta seriale RS232 immagino tu abbia utilizzato un convertitore Seriale/Seriale o in alternativa un convertitore Ethernet/Seriale per la comunicazioni in RS485.
Per venire alla tua necessità, non è possibile avere più di un master in una connessione RS485 Modbus, quindi non puoi parallelare la connessione PC con la connessione PLC. Vediamo come abilitare la comunicazione con il PC durante la messa in servizio:
- Ti connetti con il PC in parallelo alla linea RS85, e tramite un ingresso digitale e/o altro metodo disabiliti la comunicazione Modbus PLC in questo modo potrai gestire correttamente la comunicazione Modbus da PC. Terminata la messa in servizio sconnetti il PC e riabiliti la comunicazione sul PLC.
- Utilizzi in FB DataStreamExch per mettere in comunicazione un socket TCP con la porta seriale. Dal tuo PC comunichi in TCP con il PLC, quando il FB SysTCServer riceve la connessione dal PC ConnPeers diverso da 0, disabiliti i FB ModbusMaster ed attivi il FB DataStreamExch. In questo modo il PC potrà comunicare sulla RS485 con i dispositivi. Nota, la comunicazione Modbus su TCP dovrà utilizzare il protocollo Modbus RTU e non Modbus TCP, molti programmi quando attivi la connessione TCP utilizzano automaticamente il protocollo Modbus TCP. Per il test puoi utilizzare Toolly.
- Se utilizzi il FB ModbusGateway potrai gestire la connessione TCP per comunicare con i tuoi dispositivi RTU in seriale eseguendo anche la conversione del protocollo da ModbusTCP a Modbus RTU.
Novembre 3, 2025 alle 9:56 am in risposta a: Velocità acquisizione ingressi digitali per contaimpulsi #84328Sergio Bertana
Amministratore del forumEcco le risposte alle tue domande.
- Si la frequenza massima 10KHz vale per tutti gli ingressi del modulo CPU.
- Dato 10KHz la frequenza massima, la durata minima dell’impulso deve essere maggiore di 50uS.
- Se vengono acquisiti gli ingressi con il FB SysGetPhrDI la durata minima deve essere superiore al tempo di esecuzione del programma. Se eseguito in task Fast ad 1mS la durata minima è appunto 1mS. Ricordo che il tempo di esecuzione del task Fast sul tuo sistema può essere impostato con la funzione SysSetTaskLpTime al minimo a 100uS. Il modulo MPS056 può gestire fino a 4 counters hardware, se usi il counter puoi acquisire gli impulsi della tua ruota fonica alla massima frequenza (Quindi a 50uS). Tramite il FB SysGetCounter potrai acquisire il conteggio anche in task Back.
- Nella knowledge base trovi esempi di applicazione, il programma ST_DiameterCalc presente nella documentazione del FB SysGetPhrDI può già fare al caso tuo.
Ottobre 28, 2025 alle 2:52 pm in risposta a: Problema comunicazione tra terminale Mitos ed inverter Toshiba #84314Sergio Bertana
Amministratore del forumPer togliere l’errore si deve:
- Spostare gli switch dietro il Mitos in alto
- Impostare su inverter F802=1
- Impostare su inverter F829=1
- Spegnere l’inverter
- Riaccendere l’inverter
Ora la comunicazione dovrebbe essere attiva.
Ottobre 27, 2025 alle 9:11 am in risposta a: Accesso a database esterno funziona in simulazione #84302Sergio Bertana
Amministratore del forumLa gestione del database MySQL funziona anche con il simulatore.
Dopo aver avviato il simulatore e verificato lo stato connesso, esegui il comando di lettura per importare i dati?
Ottobre 22, 2025 alle 11:19 am in risposta a: Riportare sistema SlimLine alle condizioni di default di fabbrica #84279Sergio Bertana
Amministratore del forumI sistemi SlimLine possono essere resettati a default attuando la procedura di rcatch. La procedura è attivabile a partire dalla versione di firmware SFW198E050/SFW210B000 o superiore.
La procedura di rcatch si attiva collegando la porta seriale COM0 dello SlimLine al PC in cui viene eseguito un emulatore di terminale seriale (es.: il Terminal di Toolly) impostato a 115200,e,8,1.
Durante l’accensione dello SlimLine occorre inviare dal terminale in sequenza i caratteri che compongono la stringa rcatch (quindi inviando “r“, poi “c“, poi “a” etc.). Prima di inviare il carattere successivo occorre attendere l’echo da parte del sistema del carattere inviato.
La procedura di rcatch esegue le seguenti operazioni:
- Viene cancellato il programma PLC e le variabili tamponate di DB100 e RETAIN.
- Viene formattato il disco C cancellando quindi anche il sorgente PLC e perdendo le pagine web. Il caricamento delle pagine web andrà poi eseguito da FTP come indicato nella procedura di upgrade.
- Viene eseguito automaticamente il comando cfgcommit -d da utente Admin. Il comando ripristina la condizioni di default impostando la password Admin per l’utente amministratore.
Ottobre 20, 2025 alle 10:32 am in risposta a: Importazione vecchio progetto LogicLab in nuova versione ambiente di sviluppo #84267Sergio Bertana
Amministratore del forumApprofitto per evidenziare quanto riportato in questo topic, con le nuove versioni di LogicLab è stato introdotto il concetto di raccolta libererie (Package), aprendo un vecchio progetto ci si troverà con una serie di librerie incluse nel progetto. Ora si aprono due scenari
- Il vecchio progetto era riferito già ad un sistema con architettura XUnified, in tal caso è possibile ricompilare il progetto senza problemi.
- Il vecchio progetto era riferito ad un sistema XTarget, in tal caso passando ad un nuovo sistema XUnified (Vedi articolo) occorrerà aggiungere al progetto l’ultima versione della raccolta di librerie. Se nel progetto sono già incluse nostre librerie standard verranno generate warning del tipo Object is already defined. E’ possibile compilare il progetto senza problemi si si vuole rimuovere le warnings occorre eliminare le librerie incluse.
Come suggerimento consiglio di eliminare dal progetto le nostre librerie incluse e collegare al loro posto la raccolta librerie, in questo modo si ha la possibilità aggiornarnando la versione della raccolta collegata di utilizzare sempre le ultime versioni di tutti gli oggetti di libreria.
Sergio Bertana
Amministratore del forumSi utilizza il FB I2CBusManager per gestire dispositivi I2C tramite I/O digitali quando i dispositivi sono lontani dal modulo CPU e quindi non è possibile collegarli direttamente al bus di espansione e gestirli con la funzione SysI2CWrRd. Utilizzando gli I/O digitali inoltre si ha la separazione galvanica tra il sistema ed i dispositivi evitando che problemi sui dispositivi possano bloccare l’intero sistema.
Ora venendo alla tua domanda, non capisco cosa intendi per “cambiare l’indirizzo senza inizializzare I2C”. Riferendomi all’esempio ST_I2CBusManager come vedi l’istanza I2CBus è eseguita come una funzione passando direttamente i valori alla chiamata. Basterà aggiungere ai parametri anche il valore di I2CAddress per gestire dispositivi diversi. Ti allego un estratto del programma con la gestione di due stati per scrittura e lettura da due dispositivi diversi.
// ------------------------------------------------------------------------- // PROGRAM CASES // ------------------------------------------------------------------------- // Program cases management. CASE (CaseNr) OF // --------------------------------------------------------------------- // Gestione Write/Read address 60. 0: I2CBus(I2CAddress:=60, WrBuffer:=ADR(I2CWrite), WrBytes:=2, RdBuffer:=ADR(I2CRead), RdBytes:=1); IF NOT(I2CBus.Done) THEN RETURN; END_IF; IF (I2CBus.Fault) THEN Errors:=Errors+1; CaseNr:=0; RETURN; END_IF; CaseNr:=CaseNr+1; //Program case // --------------------------------------------------------------------- // Gestione Write/Read address 61. 1: I2CBus(I2CAddress:=61, WrBuffer:=ADR(I2CWrite), WrBytes:=2, RdBuffer:=ADR(I2CRead), RdBytes:=1); IF NOT(I2CBus.Done) THEN RETURN; END_IF; IF (I2CBus.Fault) THEN Errors:=Errors+1; CaseNr:=0; RETURN; END_IF; CaseNr:=0; //Program case END_CASE;Sergio Bertana
Amministratore del forumIl simulatore I/O serve proprio a comandare l’attivazione di ingressi digitali tramite interruttori, vediamo come funziona partendo proprio dal suo schema elettrico. Il simulatore dispone di:
- 16 deviatori a levetta a 3 posizioni di tipo (on)-off-(on) (Fissa, Fissa, Momentanea) (Da S1 a S16). I deviatori hanno una posizione fissa centrale a circuito aperto. Una posizione fissa verso l’alto a circuito chiuso (Interruttore). Una posizione momentanea verso il basso a circuito chiuso (Pulsante).
- 1 potenziometro da 1KOhm
- 1 potenziometro da 5KOhm
- 1 encoder rotativo
- 1 connettore IDC maschio a 20 poli
- 1 morsetto estraibile a 6 poli
- 1 connettore di alimentazione 2.1 mm
Come vedi dall schema elettrico i deviatori permettono di connettere la tensione UNRG verso 16 pin del connettore IDC, la connessione può essere stabile (interruttore) o momentanea (pulsante).
Con dei ponticelli è possibile connettere l’encoder rotativo in parallelo ai deviatori S11-S12 o S15-S16 per testare gli ingressi encoder dei moduli.
Con il potenziometro da 5KOhm è possibile generare una tensione in uscita variabile da 0 a 10V per il test degli ingressi analogici.
Il potenzionetro da 1KOhm è di libero utilizzo.
Ottobre 16, 2025 alle 11:13 am in risposta a: Potenziometro esterno per impostazione set velocità #84234Sergio Bertana
Amministratore del forumINVT non dà alcuna specifica in riferimento al valore del potenziometro da utilizzare.
Noi internamente usiamo e suggeriamo un range intorno a 10KOhm per tutte le famiglie di inverter.
Per gestire la velocità da potenzionetro esterno dovrai poi impostare i parametri:
- Selezionare comando di frequenza A da ingresso AI2 P00.06=2.
- Selezionare come sorgente di velocità comando di frequenza A P00.09=0.
Sergio Bertana
Amministratore del forumCome riportato in questo articolo tutte le librerie sono fornite in una raccolta, e vengono continuamente aggiornate per soluzionare BUGs e/o per implementare nuove funzioni o blocchi funzioni.
Durante gli aggiornamenti vengono aggiornate le pagine del manuale on-line con le nuove funzioni ma la raccolta librerie viene rilasciata solo dopo un certo tempo che le modifiche sono realizzate e testate. Durante il periodo di sviluppo viene rilasciata una versione beta della raccolta che è contraddistinta con il carattere “_” finale nel codice.
La versione beta della raccolta è disponibile per il download da questo link.
Ottobre 10, 2025 alle 10:43 am in risposta a: Compatibilità con Linux dei monitor industriali Exenta #84209Sergio Bertana
Amministratore del forumPer sicurezza ho chiesto al fornitore, che mi conferma che tutti i monitor della serie Exenta sono stati provati da loro anche su distribuzione Linux Ubuntu e funzionano correttamente.
I driver sono già inclusi nella distribuzione Linux Ubuntu.
Ottobre 9, 2025 alle 4:40 pm in risposta a: Cambio pagina automatico su pannello cMT-FHDX-820 #84201Sergio Bertana
Amministratore del forumPer gestire operazioni relative alla istanza che opera sul pannello (Display integrato o porta HDMI, App cMTViewer) occorre agire sulle private words (PLW).
Quindi volendo fare in modo che una certa operazione ad esempio il cambio pagina operi solo sull’istanza che la stà visualizzando devi utilizare una PLW.
Come vedi dallo screenshot crei un PLC Control in cui definisci il cambio pagina riferito al valore di una variabile PLW (Nel mio esempio è la PLW 10). Nel mio esempio ho effettuato un cambio pagina tra pagina 10 e pagina 20, ecco le operazioni:
- All’interno della pagina 10 ho inserito un Action Trigger che attende 5 secondi e poi scrive il valore 20 nella PLW 10. In questo modo si passa alla visualizzazione della pagina 20.
- All’interno della pagina 10 ho inserito un Action Trigger che attende 5 secondi e poi scrive il valore 10 nella PLW 10. In questo modo si passa alla visualizzazione della pagina 10.
- Il ciclo continua all’infinito.
Sergio Bertana
Amministratore del forumL’errore 9981201 come visibile dalla pagina elenco errori, indica “Errore impostazione modo counter” nel FB SysGetCounter.
Infatti tu hai definito Mode 16#00000000 sia per il CInp0[0] che per il CInp1[0], e 16#00000001 sia per il CInp0[1] che per il CInp1[1]. Come vedi dalla definizione di Mode nel FB SysGetCounter, la cifra meno significativa indica l’ingresso digitale da collegare al counter.
In questo modo tu hai asseegnato gli ingressi o e 1 ad entrambi i counters e questo genera l’errore. Devi modificare l’inizializzazionre dei counters in questo modo.
IF (SysFirstLoop) THEN // Imposta frequenza di esecuzione del task eTO_JUNK(SysSetTaskLpTime(ID_TASK_FAST, 1000)); // --- Config lettore 1 --- CInp0[0].Address := 255; CInp0[0].Channel := 0; CInp0[0].Mode := 16#00000000; CInp0[1].Address := 255; CInp0[1].Channel := 1; CInp0[1].Mode := 16#00000001; // --- Config lettore 2 --- CInp1[0].Address := 255; CInp1[1].Channel := 2; CInp1[0].Mode := 16#00000002; CInp1[1].Address := 255; CInp1[1].Channel := 3; CInp1[1].Mode := 16#00000003; END_IF;Inoltre il Task Fast è di default già eseguito ogni 1mS quindi la definizione.
eTO_JUNK(SysSetTaskLpTime(ID_TASK_FAST, 1000));
E’ inutile, si utilizza la funzione SysSetTaskLpTime solo per modificare il tempo di esecuzione di una task.
-
AutorePost