Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 16 a 30 (di 4,232 totali)
  • Autore
    Post
  • in risposta a: Error on using structured variable in a Method of an Interface #81774
    Sergio Bertana
    Amministratore del forum

    Hi 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?

    in risposta a: How to initialize a structured type variable #81754
    Sergio Bertana
    Amministratore del forum

    Following 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.

    in risposta a: Errore di compilazione TON #81745
    Sergio Bertana
    Amministratore del forum

    Il 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.

    in risposta a: Intervento interruttore differenziale #81684
    Sergio Bertana
    Amministratore del forum

    L’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.

    in risposta a: Cambiare lingua menù da Cinese ad Inglese #81678
    Sergio Bertana
    Amministratore del forum

    Gli 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).

    in risposta a: Eseguire un trasferimento stringa da PC a terminale #81651
    Sergio Bertana
    Amministratore del forum

    Devi 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.

    in risposta a: Indicizzare indirizzamento variabili #81635
    Sergio Bertana
    Amministratore del forum

    Puoi 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
    in risposta a: Elenco indirizzi Modbus su GD20 #81634
    Sergio Bertana
    Amministratore del forum

    Se 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.

    in risposta a: Indicizzare indirizzamento variabili #81618
    Sergio Bertana
    Amministratore del forum

    Per 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).

    in risposta a: Indicizzare indirizzamento variabili #81612
    Sergio Bertana
    Amministratore del forum

    Comincio 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…

    in risposta a: Errore in compilazione dopo aver aggiornato LogicLab #81606
    Sergio Bertana
    Amministratore del forum

    Aggiungo 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).

    in risposta a: Indicizzare indirizzamento variabili #81584
    Sergio Bertana
    Amministratore del forum

    Accidenti 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.

    in risposta a: Comando spegnimento/accensione router su disconnessione #81381
    Sergio Bertana
    Amministratore del forum

    La disconnessione dei modem e dei router dalla rete è un problema noto, se cerchi in internet troverai informazioni tipo:

    Tutte le disconnessioni di un router LTE dalla rete sono riconducibili a u­na politica ben precisa degli ope­ratori Internet. L’operatore telefonico sgancia tutte le connessioni che non effettua­no traffico (o che ne effettuano molto poco).

    Quindi l’operazione di spegnere e riaccendere il router serve proprio a riagganciarlo alla cella ripristinando la connessione. Esiste anche la possibilità di configuare il router con l’utility Ping restart, quasi tutti i router ne sono provvisti. In pratica il router esegue un ping all’indirizzo indicato e in caso di errore ne esegue il restart. Ma il gestirlo dallo SlimLine è sicuramente più robusta.

    Ho dato una occhiata al tuo programma e la prima cosa che salta all’occhio è non è possibile utilizzare una stessa uscita in più rami. Per usarla devi utilizzare gli operatori SET e RESET. Ho realizzato un programma di esempio dai una occhiata (Screenshot).

    1. Controllo connessione, se non connesso dopo il tempo di controllo impostato nel timer comando lo spegnimento del router. Avendo inserito l’uscita Q in serie all’ingresso IN se non si ha la connessione si continua a riavviare il router. Il tempo di controllo deve essere abbastanza lungo da garantire alla accensione del router la connessione direi 2 o più minuti.
    2. Comando spegnimento router, su attivazione comando viene attivata l’uscita per il tempo definito nel timer. L’uscita si attiva per spegnere il router questo comporta il comando di un relè in uscita usando un contatto NC. Consiglio di usare questa tecnica se si desidera accedere da remoto al sistema per la programmazione. In fase di programmazione si arresta il programma spegnendo tutte le uscite. se si usa l’uscita attiva per alimentare il router questo si spegne impedendo l’accesso da remoto. Se non devi accedere da remoto in programmazione puoi anche usare direttamente l’uscita del modulo per comandare l’alimentazione del router, in questo caso devi definire una uscita negata.
    in risposta a: Modalità Tablet PC Exenta con Windows11 #81369
    Sergio Bertana
    Amministratore del forum

    Se il PC che hai acquistato è il CTXN120R-J608256W11IWF-00, il PC ha un touchscreen resistivo e quindi la tastiera non viene visualizzata automaticamente al tocco, ma deve essere richiamata.

    Questo è un comportamento diverso dai modelli provvisti di touchscreen capacitivo dove la tastiera viene visualizzata automaticamente al tocco.

    in risposta a: Blocco invio eMail e notifiche in fase di manutenzione #81364
    Sergio Bertana
    Amministratore del forum

    Si certo se la variabile BOOL di allarme viene utilizzata anche per la gestione di segnalazioni grafiche su HMI e vuoi che queste segnalazioni siano attive anche in fase di manutenzione non puoi usare la tecnica che ho suggerito.

    Quindi l’unica soluzione è aggiungere una seconda variabile BOOL per la gestione dell’allarme e corrispondente notifica. Poi realizzi un programma ladder che copia la variabile della segnalazione sulla variabile di allarme ma condizioni la copia allo stato di OnMaintenance.

Stai visualizzando 15 post - dal 16 a 30 (di 4,232 totali)