Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 481 a 495 (di 4,379 totali)
  • Autore
    Post
  • in risposta a: Gateway Modbus TCP/RTU per lettura condizionatori #74206
    Sergio Bertana
    Amministratore del forum

    Il tuo progetto si può realizzare con i ns sistemi programmabili utilizzando il blocco funzione ModbusGateway. Questo blocco funzione oltre a operare come gateway tra diversi tipi di Modbus può:

    • Effettuare modifiche sui frames di comando ricevuti dal master prima di inviarle al sistema slave.
    • Effettuare modifiche sui frames di risposta ricevuti dal sistema slave prima di inviarle al sistema master.

    Quindi basterà utilizzare l’esempio ST_ModbusGateway riportato nella pagina del manuale FB a cui si dovrà aggiungere il codice per la modifica dei pacchetti di comando e di risposta. Ti posto un esempio del programma.

        // -------------------------------------------------------------------------
        // PACCHETTI MODBUS DI COMANDO RICEVUTI DA MODBUS TCP
        // -------------------------------------------------------------------------
        // Nodo e indirizzo registro per questi comandi sono in testa al frame.
        // 16#01 Read coil status
        // 16#02 Read input status
        // 16#03 Read holding registers
        // 16#04 Read input registers
        // 16#05 Force single coil
        // 16#06 Preset single register
        // 16#10 Preset multiple registers
        //
        //                +----+---+---+---+---
        //  Frame comando |Node|Cmd|Address|...
        //                +----+---+---+---+---
        // -------------------------------------------------------------------------
        // Modifica pacchetti comandi ricevuti da Modbus TCP.
        // L'indirizzo di nodo cambia in funzione dell'indirizzo registro.
    
        IF (ITrigger) THEN 
            ITrigger:=FALSE; //Trigger command (Input)
    
            // Controllo indirizzo e modifico il nodo di destinazione.
    
            ARAddress:=eGetBYTE(MdbGw.DFrame+2);
            ARAddress:=(ARAddress*256)+eGetBYTE(MdbGw.DFrame+3);
    
            CASE (ARAddress) OF
                1..15: i:=eSetBYTE(MdbGw.DFrame, 16#01);  CRAddress:=ARAddress-0; //Setto nodo 16#01
                16..31: i:=eSetBYTE(MdbGw.DFrame, 16#02); CRAddress:=ARAddress-16; //Setto nodo 16#02
            END_CASE;
    
            // Setto indirizzo registro.
    
            i:=eSetBYTE(MdbGw.DFrame+2, TO_BYTE(CRAddress/256)); //Setto MSB
            i:=eSetBYTE(MdbGw.DFrame+3, TO_BYTE(CRAddress)); //Setto LSB
        END_IF;
    
        // -------------------------------------------------------------------------
        // PACCHETTI MODBUS DI RISPOSTA RICEVUTI DA MODBUS RTU
        // -------------------------------------------------------------------------
        // Nodo per questi comandi è in testa al frame.
        // 16#01 Read coil status
        // 16#02 Read input status
        // 16#03 Read holding registers
        // 16#04 Read input registers
        //
        //                 +----+---+---
        //  Frame risposta |Node|Cmd|...
        //                 +----+---+---
        //
        // Nodo e indirizzo registro per questi comandi sono in testa al frame.
        // 16#05 Force single coil
        // 16#06 Preset single register
        // 16#10 Preset multiple registers
        //
        //                 +----+---+---+---+---
        //  Frame risposta |Node|Cmd|Address|...
        //                 +----+---+---+---+---
        // -------------------------------------------------------------------------
        // Nelle risposte l'indirizzo di nodo da ritornare è sempre 16#01.
    
        IF (OTrigger) THEN 
            OTrigger:=FALSE; //Trigger command (Output)
    
            i:=eSetBYTE(MdbGw.DFrame, 16#01); //Setto nodo 16#01
    
            // Setto indirizzo registro nei comandi in cui è previsto
    
            CASE (eGetBYTE(MdbGw.DFrame)) OF
                16#05, 16#06,16#10:
                i:=eSetBYTE(MdbGw.DFrame+2, TO_BYTE(ARAddress/256)); //Setto MSB
                i:=eSetBYTE(MdbGw.DFrame+3, TO_BYTE(ARAddress)); //Setto LSB
            END_CASE;
        END_IF;
    
    // [End of file]
    in risposta a: Multiple IP-series HMI over RS485 2W #74199
    Sergio Bertana
    Amministratore del forum

    On a 2 wire RS485 multidrop connection there must be only 1 master device. To connect multiple HMIs on the same connection the best way is to use the Modbus protocol and set the HMIs as “MODBUS Server”.

    Each HMI must have its unique Station number, and the PLC must act as a master Modbus interrogating the HMIs.

    in risposta a: Pannello cMT3152X con PLC M241 Schneider #74198
    Sergio Bertana
    Amministratore del forum

    L’errore “Device server disconnected” sembrerebbe un problema interno al funzionamento del pannello più che un problema di connessione con il PLC.

    Verifica se vi sono dei campionamenti dati nel tuo programma, in tal caso verificane la configurazione, non vorrei che campionamenti troppo ravvicinati possano dare origine al problema.

    in risposta a: Errore su connessione VNC #74194
    Sergio Bertana
    Amministratore del forum

    Sinceramente è un problema che non mi spiego è come se qualcuno si connettesse al pannello bloccandoti la connessione, oppure sembra che continuando ad utilizzare il servizio VNC connettendoti e sconnettendoti capiti qualcosa che blocchi le connessioni. Sicuramente non è un problema di connessione al router visto che agli altri dispositivi in rete riesci a connetterti.

    Visto che la connessione sembra funzionare per un pò di giorni quando riavvii il pannello un consiglio potrebbe essere di forzare dal PLC il reboot del pannello, puoi dare un’occhiata alla macro descritta in questo topic.

    Oppure anche solo reinizializzare il servizio VNC sul pannello, puoi disattivare il bit LB-12092 per disattivare il servizio e dopo alcuni secondi puoi riattivarlo. Ad esempio puoi utilizzare la funzione DataTransfer per appoggiare sul bit LB-12092 una variabili BOOL del PLC permettendone la gestione direttamente dal programma PLC.

    in risposta a: Errore A4153 in compilazione programma #74167
    Sergio Bertana
    Amministratore del forum

    L’errore indica che una variabile a 32 bit è stata allocata in memoria ad un indirizzo non allineato a 32 bit.

    Ricordo che nei sistemi con architettura ARM le variabili a 16 bit vanno allocate ad indirizzi divisibili per 2, e le variabili a 32 bit vanno allocate ad indirizzi divisibili per 4. Nelle variabili automatiche ci pensa il linker ad allocare correttamente le variabili, ma nelle variabili allocate nella DB100 l’allocazione deve essere curata dal programmatore.

    Se guardi la tabella di allocazione variabili trovi alcuni errori:

        Abil_Antigelo         AT %MX100.2151 : REAL; (* [42051] valore manuale temperatura antigelo *)
        Val_Bruciatore_C1     AT %MR100.2152 : REAL; (* [41076] valore percentuale funzionamento bruciatore *)
        Val_man_temp_mandata  AT %MR100.2166 : REAL; (* [41083) valore manuale temp mandata *)
        Val_man_temp_antigelo AT %MR100.2170 : REAL; (* [41085) valore manuale temp antigelo *)

    La variabile Abil_Antigelo è di tipo REAL quindi và dichiarata %MR100.xxxx e l’indirizzo 2151 non è divisibile per 4. Inoltre essendo di tipo REAL occupa 4 bytes quindi và a sovrapporsi alla variabile Val_Bruciatore_C1. Anche l’indirizzo Modbus [42051]  dichiarato come descrizione è errato ricordo che và utilizzato l’indirizzo di allocazione diviso per 2 a cui và sommato 40000.

    Le variabili Val_man_temp_mandata e Val_man_temp_antigelo non sono allocate ad indirizzi divisibili per 4.

     

    in risposta a: Accesso oggetto VNC Viewer da cMTViewer #74108
    Sergio Bertana
    Amministratore del forum

    L’oggetto VNC Viewer è utilizzabile solo dallo schermo del pannello non è possibile visualizzarlo da remoto con il cMTViewer.

    Puoi visualizzarlo se utilizzi WebView da un browser, avrai certo un pò di rallentamento dovuto al doppio accesso alla interfaccia grafica.

    in risposta a: Arrotondamento valori REAL nei calcoli #74091
    Sergio Bertana
    Amministratore del forum

    Ho dato una occhiata al tuo programma, con un valore di peso di 22085.2 i calcoli in REAL ritornano un valore di media di  22085.080 con un errore di 0,12. I calcoli in LREAL ritornano un valore di media di 22085.123 con un errore di 0,077.

    Se se fai una verifica di conversione dati da decimali a REAL IEE754 usando un calcolatore On-line, vedrai che già il valore 22085.2 in REAL corrisponde a 22085.19921875 con un errore di -0.00078125. Lo stesso arrotondamento si avrà per altri valori in gioco e quindi le operazioni eseguite su valori di partenza che già differiscono dal valore originale produrranno un errore.

    Nella tua soluzione con numeri LREAL solo i valori definiti (0,01 e 0,99) sono stati effettivamente convertiti in LREAL per le variabili hai solo convertito il valore REAL già con arrotondamento  ecco quindi che il risultato è un pò migliorato ma non è perfetto. Se usi questo programma vedrai che il risultato sarà perfetto.

    VAR
        Weigth : LREAL;  (* Weigth *)
        WeigthAvg : LREAL; (* Weigth average *)
    END_VAR
    
        WeigthAvg:=(Weigth*LREAL#0.01)+(WeigthAvg*LREAL#0.99);
    in risposta a: EasyWeb 2.0 vs EasyAccess 2.0 #74084
    Sergio Bertana
    Amministratore del forum

    Con EasyWeb Weintek identifica l’accesso tramite  pagina web ai setting/dashboard del pannello. La caratteristica disponibile solo sui pannelli serie cMT permette:

    • La configurazione del pannello tramite browser
    • L’operatività del pannello da browser (Stile VNC)

    In pratica è possibile attivare l’opzione WebView come homepage, in questo modo da browser digitando l’IP del pannello ne viene visualizzata l’immagine permettendone l’operatività direttamente dal browser.

    Detto questo è evidente che se si accede al pannello da rete locale o se si dispone di una VPN EasyAccess non è necessario. EasyAccess serve solo per poter accedere al pannello ed a altri dispositivi in rete al pannello (Tramite il Passthrough) da Internet, permettendo la teleassistenza degli impianti.

    in risposta a: Come risolvere “error G0271” in compilazione #74079
    Sergio Bertana
    Amministratore del forum

    L’errore deriva dal controllo più stringente sull’utilizzo dei puntatori.

    Nelle versioni precedenti di LogicLab era possibile utilizzare puntatori di tipo diverso dal dato effetivamente puntato. Per esempio era accettato che un puntatore di tipo STRING puntasse ad un BYTE.

    Per evitare l’errore occorre disabilitare il controllo:

    Project->Option->Code Generation->Strict pointers check

    Come riportato in questo articolo.

    in risposta a: Configurazione router Wifi #74064
    Sergio Bertana
    Amministratore del forum

    Di default è attivo anche l’access point WiFi ma è settato con canale a 40Mhz e questo può provocare difficoltà di connessione meglio impostarlo a 20Mhz (Screenshot).

    in risposta a: Problema su uscite digitali #74022
    Sergio Bertana
    Amministratore del forum

    Il modulo PCB124B100 è un modulo di uscite statiche, non deve presentare il problema che lamenti.

    Presumo che hai collegato l’alimentazione ai morsetti DOCom+ e DOCom- e che colleghi il carico tra il morsetto di uscita e il negativo della alimentazione (Lo stesso collegato al DOCom-).

    Che carico hai collegato sull’uscita?

    in risposta a: Configurazione rete PLC/Pannelli #73974
    Sergio Bertana
    Amministratore del forum

    Una soluzione potrebbe essere quella di collegare il cMT3152X con il driver specifico al PLC.

    Poi sull’HMI puoi abilitare OPC-UA server e creare la mappatura delle TAGs da condividere.

    A questo punto tutti gli altri pannelli useranno il protocollo OPC-UA client per agganciare il Server e leggere/scrivere le TAGs mappate.

    in risposta a: Problemi con modulo PCB122D100 #73973
    Sergio Bertana
    Amministratore del forum

    Si tratta di un problema di comunicazione del modulo CPU con il modulo di I/O. La comunicazione è su bus I2C ed il sistema controlla ogni pacchetto dati in comunicazione con un CRC ed in caso di errore  visualizza l’errore ed esegue una ritrasmissione del pacchetto.

    Se le ritrasmissioni sono molte viene segnalato l’errore di “Too retries” e viene reinizializzata l’esecuzione del programma.

    Credo vi sia un problema sul bus di comunicazione sul modulo CPU o sul modulo di estensione. L’unica soluzione è fare un RMA di riparazione di entrambi i moduli che li ricontrolliamo.

     

    in risposta a: Impossibile caricare firmware su MPS054 #73970
    Sergio Bertana
    Amministratore del forum

    Inizio con il dire che l’aggiornamento dei sistemi MPS054 è possibile anche da connessione Ethernet senza quindi dover agire su ponticelli (Vedi articolo).

    Tu invece hai scelto di eseguire l’upgrade da seriale o da USB, in tal caso occore seguire i punti come indicato.

    L’inserimento di LK9 esegue il reset completo del sistema e da questo momento l’aggiornamento è possibile solo più da seriale o USB.

    Il tuo problema è che probabilmente non stai utilizzando l’ultima versione di Toolly.

    in risposta a: Problema su uscite digitali #73967
    Sergio Bertana
    Amministratore del forum

    Quando tolgo il comando rimane la 24v sull’uscita

    Ma il LED relativo all’uscita si spegne?

    Non mi dici che tipo di moduli stai utilizzando…

    Il comportamento potrebbe indicare che stai utilizzanndo dei moduli con uscite SSR Zero-Crossing.

    Le uscite SSR si utilizzano solo in alternata, si attivano al passaggio della tensione sullo 0Volt ed essendo SSR rimangono eccitate fino al passaggio della tensione sullo 0Volt.

Stai visualizzando 15 post - dal 481 a 495 (di 4,379 totali)