Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Ottobre 10, 2025 alle 10:43 am in risposta a: Compatibilità con Linux dei monitor industriali Exenta #84209
Sergio 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.
Sergio Bertana
Amministratore del forumE’ possibile utilizzare un pulsante Combo Button o un Action Trigger con la funzione File transfer.
Così potrai trasferire un file da cartella FTP server sulla chiavetta USB inserita nel pannello. A questo punto se il file è un file immagine potrai usare l’oggetto Picture View per visualizzare immagine su schermo.
Sergio Bertana
Amministratore del forumCon il comando PLCCommand -pmbku File da connessione telnet puoi esportare tutta l’area ritentiva della DB100 in un file su disco. Collegandoti in FTP al sistema puoi scaricare il file e trasferirlo sul nuovo sistema. Il comando PLCCommand -pmres File eseguirà il restore dei dati valorizando l’area in DB100.
In alternativa puoi modificare il programma inserendo il FB MemoryBackup che ti permette di trasferire su file un’area di memoria a tua scelta. Anche qui con una connessione FTP potrai trasferire il file sul nuovo sistema dove sempre con il FB MemoryBackup potrai eseguirne il restore sia sulla stessa area che su area diversa.
Sergio Bertana
Amministratore del forumHo dato un’occhiata al media converter sembra che converta la RS232 in pacchetti ethernet che poi “veicola” su connessione in fibra.
A livello di conversione Seriale/Ethernet credo abbia un funzionamento equivalente al ns Convertitore Ethernet-seriale ATC-1200, che normalmente utilizziamo per trasportare comunicazioni Modbus su rete ethernet basta configurare un dispositivo come server TCP e l’altro come client TCP. Naturalmente dovendo i dispositivi creare pacchetti ethernet per lo scambio dati è importante definire correttamente i parametri di comunicazione seriale.
Un approccio diverso per la comunicazione in fibra ottica si ha utilizzando il ns Convertitore seriale-fibra ATC-277MM per fibra multimodale o il Convertitore seriale-fibra ATC-277SM-SC per fibra monomodale. Questi convertitori trasferiscono i livelli logici della seriale, non effettuano alcuna interpretazione sui dati infatti non hanno alcuna configurazione, sono completamente trasparenti.
Ora venendo al tuo problema visto che in connessione con il cavo i due PLC comunicano, farei una ferifica delle impostazioni dei media converter. Puoi testarne il funzionamento collegandone uno alla seriale di un PC e collegando sull’altro un loopback (Connetti tra di loro i pin 2 e 3 del connettore seriale). Se funzionano digitando un carattere su di un emulatore terminale (Esempio Toolly) devi riceverne l’echo. Quando sei riuscito ad ottenere questo sicuramente funzioneranno anche collegandoli ai 2 PLC.
Sergio Bertana
Amministratore del forumNo purtroppo non esiste alcuna implementazione di questo protocollo.
Settembre 29, 2025 alle 10:48 am in risposta a: Acquisire il nome di un file da una directory #84142Sergio Bertana
Amministratore del forumPurtroppo il FB FTPClient non esegue il listato directory del server FTP, nelle operazioni gestite Store, Rerieve e Delete occorre definire il nome completo del file non è possibile utilizzare *.jpg anche se nella cartella puntata esiste un solo file.
La soluzione più semplice se possibile è eseguire una applicazione sul server NAS che acquisisce il nome del file (Quindi la targa del veicolo) e poi la invia allo SlimLine con una connessione TCP.
Sergio Bertana
Amministratore del forumPuoi utilizzare l’esempio ST_SysGetPhrDI, se il modulo PCB124 ha indirizzo 0 dovrai modificarlo così:
DInp.Address:=0; //Module address DInp.Mode:=DI_MODE#DI_I_16_L; //Acquisition mode DInp(); //Digital input acquisition IF (DInp.Done) THEN InpValue:=DInp.Value; END_IF;
Nel post si parla di conteggio veloce su ingressi digitali quindi ho definito Mode con DI_MODE#DI_I_16_L in modo da escludere il debouncing hardware sul modulo che filtra l’ingresso a circa 5mS.
Se la tua necessità è di gestire 16 contatori uno per ogni ingresso del modulo dovrai come nell’esempio sopra eseguire il programma in task Fast, ma attenzione rispetto alla acquisizione dal modulo CPU in cui la SysGetPhrDI viene acquisita in 10uS una acquisizione da modulo di estensione necessita di circa 300uS quindi se imposti il tempo di esecuzione a 500mS come nel primo esempio del post dovrai verificare di avere tempo sufficente ad eseguire tutte le operazioni.
Ti ricordo che in debug puoi visualizzare le variabili di sistema SysTFastExTm e SysTFastExTmMax per controllare l’effettivo tempo di esecuzione.
Sergio Bertana
Amministratore del forumStò cercando di capire cosa può essere successo.
Quando dici “dopo la risposta ARP non vi erano altri pacchetti che facessero iniziare un ping o una connessione” immagino tu stessi spiando con Wireshark con il PC connesso ad una delle porte dello switch. E se sullo switch non hai abilitato il port mirroring quello che potevi spiare erano solo i pacchetti ARP inviati in broadcast perchè tutti gli altri individuato il MAC sarebbero stati inviati alla porta corretta dello switch e non alla porta in cui è connesso il PC.
Lo SlimLine invia i pacchetti ARP con un ritardo di ca 5 secondi, ma avendo 5 SlimLine sulla rete il tuo PC vedeva probabilmente i pacchetti ARP di tutti e 5 i sistemi.
Come sono impostati i sistemi, in DHCP o con IP statico?
Sergio Bertana
Amministratore del forumImmaginando che il file di targa sia l’unico presente nella cartella è posibile utilizzare il programma PlateRead come in esempio:
PROGRAM FileList VAR PathName : @STRING; (* Directory in cui cercare *) Plate : STRING[ 16 ]; (* Targa automezzo *) PNDList : STRING[ 32 ]; (* Directory list path *) PNFDelete : STRING[ 32 ]; (* Nome file da cancellare *) PTrigger : R_TRIG; (* Pulse trigger *) DList : SysGetFileInfos; (* Get file infos *) END_VAR // ***************************************************************************** // PROGRAM "PlateRead" // ***************************************************************************** // Eseguo lettura file di targa veicolo. // ----------------------------------------------------------------------------- // ------------------------------------------------------------------------- // INIZIALIZZAZIONE // ------------------------------------------------------------------------- // Program initializations. IF (SysFirstLoop) THEN PathName:=ADR('C:/CarIn'); //Directory in cui cercare DList.PathName:=ADR(PNDList); //Percorso di ricerca eTO_JUNK(SysVsnprintf(ADR(PNDList), SIZEOF(PNDList), ADR('%s/*.*'), STRING_TYPE, PathName)); END_IF; // ------------------------------------------------------------------------- // ESEGUO RICERCA FILE // ------------------------------------------------------------------------- // Ogni secondo eseguo ricerca 1° file presente in directory. PTrigger(CLK:=SysClock1000); IF (PTrigger.Q) THEN DList(Init:=TRUE); IF (DList.Found) THEN eTO_JUNK(Sysmemset(ADR(Plate), 16#00, SIZEOF(Plate))); eTO_JUNK(Sysmemmove(ADR(Plate), DList.Name, Sysstrlen(DList.Name))); // Cancello il file trovato. eTO_JUNK(SysVsnprintf(ADR(PNFDelete), SIZEOF(PNFDelete), ADR('%s/'), STRING_TYPE, PathName)); eTO_JUNK(SysCVsnprintf(ADR(PNFDelete), SIZEOF(PNFDelete), ADR('%s'), STRING_TYPE, DList.Name)); eTO_JUNK(SysFileRemove(ADR(PNFDelete))); END_IF; END_IF; // [End of file]
Sergio Bertana
Amministratore del forumIl comportamento dell’allrme STO è condizionato dal valore del parametro P08.52 STO lock.
- 0: STO alarm lock, Alarm-lock means STO alarm must be reset after state restoration when STO occurs.
- 1: STO alarm unlock Alarm-unlock means when STO occurs, after state restoration, STO alarm will disappear automatically.
Nel tuo inverter avrai il parametro settato a 0 quindi il comando del circuito STO genera un allarme che deve essere riconosciuto dal rest manuale. Impostando il parametro a 1 al ripristino del circuito STO l’allarme si resetta automaticamente.
Sergio Bertana
Amministratore del forumIntanto bisogna chiarire che errore compare perchè esiste un errore UV ed un errore OV2, ma non un errore UV2.
Se è un errore UV DC bus under-voltage:
Allarme di sottotensione, di solito si presenta quando la tensione di alimentazione dell’inverter è troppo bassa. Verifica se è effettivamente questa la causa. Strano che succeda attivando il freno, sembra che l’attivazione del freno provochi un abbassamento della tensione di linea. Puoi disabilitarne il controllo e quindi la comparsa dell’allarme impostando
- P11.00=0 (Phase loss protection) Input phase loss software protection disable
- P11.01=1 (Frequency drop at sudden power dip) Disabled
Se è un errore OV2 Over-voltage during deceleration:
Allarme di sovratensione durante la fase di decelerazione, di solito succede se la rampa di decelerazione è troppo veloce e quindi si ha una sovratensione sul bus DC. Per risolverlo puoi provare a rendere più lenta la rampa di decelerazione. Se ti serve invece arrestare il motore velocemente allora devi inserire una resistenza di frenatura per impedire cher la tensione del bus DC si alzi troppo.
Sergio Bertana
Amministratore del forumAxel has just informed me that this behaviour is a bug. They have opened ticket:
LL-3790: Invalid constant value for structured types.
A fix will be available in future versions of LogicLab.
Sergio Bertana
Amministratore del forumCollegare dispositivi I2C tramite I/O digitali rispetto alla connessione diretta degli stessi sul bus di espansione (Vedi funzione SysI2CWrRd) può essere utile per collegare dispositivi che si trovano lontani dal modulo CPU, in questo modo i segnali I2C sono optoisolati dal sistema ed il sistema è protetto da eventuali disturbi indotti sul bus.
Ma naturalmente ci sono delle controindicazioni, utilizzando gli I/O presenti sul modulo CPU il tempo di gestione è minore rispetto agli I/O dei moduli di estensione e questo permette di avere una gestione del bus I2C più veloce.
Ma la cosa più importante è che i segnali I2C devono essere open collector, quindi l’unico modo per gestirli con I/O digitali è che le uscite permettano questa gestione e solo uscite statiche di tipo MOS lo permettono. Il modulo PCB124 ha uscite a driver quindi non è possibile utilizzarlo.
Inoltre i segnali I2C sono tipicamente a 5Vdc e quindi occorre avere ingressi ed uscite in grado di gestire segnali a 5Vdc e solo gli I/O del modulo CPU hanno questa caratteristica.
-
AutorePost