Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Maggio 2, 2025 alle 8:43 am in risposta a: Acquisizione sensore analogico con dispositivo STE2 #81821
Sergio Bertana
Amministratore del forumSì, è possibile acquisire qualsiasi sensore con interfaccia 4-20mA attraverso l’utilizzo di questo convertitore 4-20mA/1Wire.
Il convertitore è dotato di doppia interfaccia 1-Wire e, in tal modo, permette la connessione Daisy-chain evitando di impegnare un porta 1-Wire di STE2 R2.
Per il set-up è richiesto l’utilizzo del calibratore 1-Wire UNI USB, che permette di abbinare al valore dell’ingresso analogico il corrispondente valore dell’unità ingegneristica acquisita.
Aprile 30, 2025 alle 4:43 pm in risposta a: Problemi su aggiornamento firmware SlimLine Cortex M7 #81796Sergio Bertana
Amministratore del forumIl software è relativo alla architettura XTarget12 ed è molto datato, in quella versione di firmware non era utilizzato il file system di tipo FAT quindi le directories erano predefinite come vedi dallo screenshot di FileZilla. E non era possibile creare nuove directories, ecco perchè il comando MKD non funziona.
Quindi per eseguire l’upgrade di quel sistema devi necessariamente eseguirlo da porta seriale o USB seguendo le informazioni riportate nella pagina di upgrade quindi non puoi eseguirlo da remoto ma solo da locale. Come detto l’upgrade alla nuova versione di firmware trasforma il file system in FAT. Terminato l’upgrade occorre eseguire il comando di Format sia sul disco C: che D: se presente. Attenzione il comando cancellerà tutti i dati presenrti sul disco quindi se hai dati utili esegui un download con FileZilla prima di iniziare la procedura di upgrade. Avendo eseguito il format verrà persa la configurazione, il sistema non avrà più l’indirizzo IP definito ma si imposterà in DHCP client. Ecco le operazioni da eseguire:
Nell’eseguire l’upgrade hai 2 possibilità.
Mantenere l’architettura XTarget12: In questo modo hai la completa compatibilità del programma sviluppato. Ecco le operazioni da eseguire:
- Esegui il download dalla pagina di upgrade del firmware per architettura XTarget12.
- Esegui l’upgrade del sistema da porta seriale o da USB.
- Esegui il comando di Format sia sul disco C: che D: se presente.
- Utilizza la procedura di Discoverer per impostare l’indirizzo IP.
- Da connessione telnet con Toolly esegui il comando Cfgcommit -d per reimpostare il tutto a default.
- Utilizzando un client FTP esegui l’upgrade delle pagine web.
- Utilizzando un client FTP crea le eventuali tue cartelle e ricarica gli eventuali files precedentemente salvati.
- Ora potrai collegare LogicLab al sistema, ricompilare e ricaricare il tuo programma.
Passare ad architettura XUnified: In questo modo hai l’aggiornamento alla versione più aggiornata del sistema operativo. Ecco le operazioni da eseguire:
- Esegui il download dalla pagina di upgrade del firmware per architettura XUnified.
- Esegui l’upgrade del sistema da porta seriale o da USB.
- Esegui il comando di Format sia sul disco C: che D: se presente.
- Utilizza la procedura di Discoverer per impostare l’indirizzo IP.
- Da connessione telnet con Toolly esegui il comando Cfgcommit -d per reimpostare il tutto a default.
- Utilizzando un client FTP esegui l’upgrade delle pagine web.
- Utilizzando un client FTP crea le eventuali tue cartelle e ricarica gli eventuali files precedentemente salvati.
- Per mantenere la compatibilità con il tuo programma (Vedi articolo) dovrai modificare il tuo progetto LogicLab utilizzando la raccolta librerie.
- Dal menù Project – Library manager inserire nel progetto la libreria eLLabXUnifiedAdjLib. La trovi nella raccolta.
- Ora potrai collegare LogicLab al sistema, ricompilare e ricaricare il tuo programma.
Sergio Bertana
Amministratore del forumThe IEC 61131 norm requires that all functions have a return value and that the return value must transferred to a variable of the same type.
This forces to define variables only to store the return values from the functions even if these values are not useful in the development of the program.
The eTO_JUNK instruction (Present in the library package version from PCK055A030) allows to discard the return value of the functions without generating warnings or compilation errors.
Aprile 29, 2025 alle 4:05 pm in risposta a: Error on using structured variable in a Method of an Interface #81774Sergio Bertana
Amministratore del forumHi George I’ve tried to recreate the same behaviour you report in the TestInterface program (Download).
In the screenshot you can see the program structure.
Can you verify if the program I made recreate exactly your situation?
Sergio Bertana
Amministratore del forumFollowing your example in the Init value field of the sVar declation you must define the init values as reported
VAR sVar : str := ( x:=(a:=100, b:=1.7), y:=(c:=TRUE, d:=16#12345678) ); END_VAR
In the screenshot you can see the program with the declaration and during the program execution the values on watch window.
As you see I used the variable sVar in the program to enable LogicLab to init it. If not used in the program it has not initialized. The variable sVar.x.a is increased at first program loop execution so it init value of 100 has becomed 101.
Sergio Bertana
Amministratore del forumIl problema è nel dispositivo che essendo ancora di tipo XTarget non supporta il tipo TIME di definizione tempo.
Quindi se vuoi mantenere l’architettura XTarget devi utilizzare la vecchia versione del timer eTON dove il tempo era definito in mS con una variabile di tipo UDINT. Il FB eTON si trova nella libreria eLLabObsoleteLib.
Il mio consiglio è di eseguire un upgrade del sistema (Vedi articolo) utilizzando la nuova architettura XUnified, modificare il progetto utilizzando la raccolta librerie ed a questo punto potrai utilizzare tutte le ultime funzioni ed FB disponibili.
Sergio Bertana
Amministratore del forumL’intervento dell’interrutore differenziale può essere causato dal filtro EMC all’ingresso dell’inverter, che è adatto per i sistemi di distribuzione con neutro a terra.
Nel caso in cui la presenza del filtro provochi l’intervento dell’interrutore differenziale e non sia possibile aumentare la corrente di intervento è possibile escludere il filtro. Ricordo che escludendo il filtro l’inverter non è più conforme alla classe C3 IEC61800-3.
- Nei modelli con potenza inferiore ai 4Kw il filtro non è presente nell’inverter và montato esternamente.
- Nei modelli con potenza superiore ai 4Kw il filtro è interno all’inverter, per escluderlo occorre rimuovere il jumper J10 (Vedi foto).
Le informazioni sul filtro si trovano al capitolo C.6 del manuale, ne consiglio la lettura.
Sergio Bertana
Amministratore del forumGli inverter hanno di default la lingua del menù impostata in Inglese, strano che ti trovi il menù in Cinese.
Ma siccome è successo che per errore qualche cliente cercando l’Italiano ha per errore impostato il Cinese, abbiamo realizzato un video che illustra come passare dalla lingua Cinese all’Inglese (Download video).
Aprile 22, 2025 alle 2:08 pm in risposta a: Eseguire un trasferimento stringa da PC a terminale #81651Sergio Bertana
Amministratore del forumDevi istanziare due dispositivi server, uno è il tuo PLC Siemens mentre l’altro è un dispositivo generico Modbus RTU.
Poi programmi un trasferimento ciclico a tempo dal dispositivo Modbus RTU al tuo PLC Siemens.
Unico problema potrebbe essere l’endianness dei due sistemi specie se la variabile è più lunga di 2 bytes oppure se è un dato REAL. In tal caso dovrai preoccuparti di eseguire le corrette rotazioni del valore acquisito sul PLC.
Sergio Bertana
Amministratore del forumPuoi definire un array di puntatori a stringa così li puoi indicizzare, ecco un esempio.
VAR i : UDINT; (* Auxiliary variable *) IPAddress : ARRAY[0..3] OF @STRING; TCPClient : SysTCPClient; (* TCP client management *) END_VAR IF (SysFirstLoop) THEN IPAddress[0]:=ADR('10.0.4.111'); IPAddress[1]:=ADR('10.0.4.112'); IPAddress[2]:=ADR('10.0.4.113'); IPAddress[3]:=ADR('10.0.4.114'); END_IF; TCPClient.PeerAdd:=IPAddress[i]; //Peer address
Sergio Bertana
Amministratore del forumSe scarichi il manuale utente dell’inverter nel capitolo 7 troverai tutte le informazioni sia quelle dettagliate sul protocollo Modbus RTU che l’elenco dei registri con le relative funzioni.
Sergio Bertana
Amministratore del forumPer la risposta alla domanda sul nome dinamico alle variabili prova a dare una occhiata a questo programma FBD.
Come vedi ho immaginato di avere i valori in array (Se segui il mio consiglio avrai un array di strutture) ma in pratica dovrai passare nella variabile Nr l’indice dell’array (Nel tuo caso il numero del dispositivo).
Per le variabili in ingresso al FB se devi passare un indirizzo utilizzi l’operando ADR() se invece devi passare un valore puoi utilizzare la funzione eGetWORD (O quella relativa al tipo di variabile da pasare).
Per le variabili in uscita dal FB devi utilizzare la funzione eSetDWORD (O quella relativa al tipo di variabile da pasare).
Sergio Bertana
Amministratore del forumComincio ad intuire anche se non ho una visione esatta di quello che desideri… Mi sembra di capire che stai gestendo 25 dispositivi in Modbus ognuno dei quali ha 5 variabili.
Devi gestire una connessione TCP ai 25 indirizzi IP dei dispositivi ma non mi dici se le 5 variabili che acquisisci dai dispositivi in Modbus sono in registri contigui (Quindi puoi fare un’unica acquisizione di n registri, oppure se sono ad indirizzi distanti tra di loro e quindi devi eseguire 5 acquisizioni in cascata da ogni dispositivo).
Se le variabili che acquisisci per ogni dispositivo puoi definire una struttura dati con le 5 variabili e definire un array di strutture nell’area DB100. Non ti preoccupare dell’indirizzamento perchè puoi utilizzare l’indirizzamento simbolico con il convertitore di simboli globali.
Per la gestione delle acquisizioni Modbus di ogni dispositivo ti consiglio di utilizzare il FB ACModbus, che tiene già conto degli errori.
Io creerei un mio FB (Magari in linguaggio ST) che gestisce 1 dispositivo, lo devi realizzare con la tecnica batch poi potrai iterare sulla esecuzione del FB a cui devi passare l’IP del dispositivo e l’indice dell’array di strutture dati.
Purtroppo sapendo bene quello che devi fare mi sembra più facile farlo che spiegarlo…
Aprile 17, 2025 alle 2:48 pm in risposta a: Errore in compilazione dopo aver aggiornato LogicLab #81606Sergio Bertana
Amministratore del forumAggiungo che l’errore:
SysSetTaskLpTime(H:5) – error C16389: syntax error, unexpected “TIME”, expecting “identifier” or “END_VAR” => Syntax Error
Deriva dal nome del parametro di definizione tempo che nelle prime versione della funzione SysSetTaskLpTime era definito con il nome di Time. Il nome Time nelle ultime versioni di LogicLab è diventato un nome riservato quindi ecco il perchè dell’errore.
Puoi risolvere semplicemente utilizzando nel progetto l’ultima versione del package di librerie (Vedi articolo).
Sergio Bertana
Amministratore del forumAccidenti non capisco la tua domanda… Magari se spieghi la tua nessità vediamo se c’è una soluzione.
Intanto perchè devi utilizzare variabili allocate in DB100, le devi forse accedere da Modbus? perchè inb caso contrario puoi semplicemente dichiarare variabili con un nome in allocazione automatica e quindi puoi definire un array utilizzando come indice il valore di velocità.
In merito al tipo di variabile una variabile MW è intesa come WORD.
-
AutorePost