Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 361 a 375 (di 4,267 totali)
  • Autore
    Post
  • in risposta a: Programma con semplice comunicazione Modbus #74335
    Sergio Bertana
    Amministratore del forum

    Quello che ti serve è molto semplice ho modificato il tuo programma e l’ho testato con il tool Modbus slave, ecco il listato del programma TestModbus. Vediamo i punti da considerare nel programma:

    • Il programma và eseguito in task Back.
    • Attivato Absolute, in questo modo il FB non sottrae 1 all’indirizzo definito in Address. Il Modbus standard prevede come primo indirizzo 1 quindi per utilizzare tutti i registri a partire da 0 nel protocollo si sottrae 1. Ma il programma Modbus slave non segue questa regola. In alternativa puoi disabilitare Absolute e definire 40001 in Address come consigliato dal programma Modbus slave.
    • In Points la dimensione del buffer RHRegs và divisa per 2. Tu devi leggere 14 registri a 16 bits non 32 bytes.

    Vediamo la configurazione del programma Modbus slave (Screenshot):

    1. Impostare indirizzo 40000 il programma visualizzerà PLC Address=440001. Il 4 davanti all’indirizzo credo si riferisca alla vecchia definizione Modicon dell’area 4.
    2. Accettare le connessioni da tutti gli IP altrimenti lo SlimLine non potrà connettersi. L’avvenuta connessione la puoi controllare dal programma LogicLab mettendo in debug il FB SysTCPClient.
    3. Esegui un test del programma Modbus slave dal nostro programma Toolly. Nell’esempio è eseguito sullo stesso PC dove gira il programma ma puoi testarlo anche da un’altro PC.
    4. Attiva il Local echo e la modalità di visualizzazione HEX così si vedranno i pacchetti inviati e ricevuti.

    Per testare il funzionamento delle varie FB attiva la console di spionaggio ti darà informazioni utili, per eventuali errori fai riferimento alla pagina.

    in risposta a: Router WL-R220LFX-d non si collega all’accensione #74328
    Sergio Bertana
    Amministratore del forum

    Ti consiglio di eseguire l’aggiornamento di OpenWRT seguendo le istruzioni riportate in Aggiornamento router con OpenWrt 23.05.0-rc2 r23228 in testa all’articolo di cui ho postato il ink nel post precedente.

    Se con anche con la nuova versione di firmware hai gli stesi problemi puoi compilare l’RMA per la riparazione/sostituzione.

    in risposta a: Router WL-R220LFX-d non si collega all’accensione #74314
    Sergio Bertana
    Amministratore del forum

    Non mi dici che versione di router stai utilizzando:

    • (1a serie) con chip Atheros, riconoscibile dal SN che inizia con 1120R.
    • (2a serie) con chip Mediatek, riconoscibile dal SN che inizia con 2120R.

    Se è la 2a serie ti consiglio di effettuare l’aggiornamento alla nuova versione di OpenWRT (Vedi articolo).

    in risposta a: Dinamicizzare stringa GetData #74306
    Sergio Bertana
    Amministratore del forum

    Purtroppo attualmente l’indicizzazione sui protocolli simbolici, quindi agendo sulla definizione simbolica della Tag non è possibile.

    in risposta a: Gateway SMS per interfacciamento con dispositivi interni #74293
    Sergio Bertana
    Amministratore del forum

    Per l’invio dei messaggi SMS o per effettuare chiamate (Solo ring del telefono) il gateway SMS-GW3 mette a disposizione una serie di metodi ecco una nota applicativa come riportata sul sito web del costruttore.

    Tra i vari metodi possibili esiste proprio il metodo che hai citato, ossia la possibilità di invio direttamente con una chiamata GET indicando come parametri il numero a cui inviare il messaggio ed il testo del messaggio (Vedi topic).

    Per l’utilizzo di questo gateway occorre solo effettuare  una semplice configurazione ma se la tua esigenza non può adattarsi ai metodi che il gateway espone, ricordo che utilizzando i ns sistemi programmabili SlimLine puoi realizzare un programma in grado di accettare richieste TCP o HTTP e gestire un modem connesso alla porta seriale.

    in risposta a: Multiple IP-series HMI over RS485 2W #74276
    Sergio Bertana
    Amministratore del forum

    Exactly you have only one connection to the serial port.

    The connection is a multidrop RS485 on which the PLC acts as a Modbus master and all the HMIs act as a Modbus slave.

    in risposta a: Problema su ingressi digitali #74275
    Sergio Bertana
    Amministratore del forum

    Non mi dici se l’impianto prima funzionava e poi si è presentato il problema, oppure se è un problema nato all’avvio dell’impianto ed il tipo di modulo di espansione.

    Se l’impianto prima funzionava ed ora c’è il problema proprio non me lo sò spiegare…

    Se invece si è presentato al primo avvio, così come lo poni mi sembra prprio un problema di cablaggio, anche se tu dici di averlo controllato…

    Posso capire un contatto tra due ingressi, ma in tal caso si accenderebbero due ingressi con lo stesso segnale. Posso capire un ingresso guasto, ma in tal caso non si accenderebbe l’ingresso ma avere i segnali scambiati mi sembra impossibile come guasto.

    in risposta a: Sostituzione pannello serie iH con nuovo modello #74238
    Sergio Bertana
    Amministratore del forum

    Vediamo se riesco a rispondere alle tue domande.

    • I pannelli serie iH sono molto datati e tramite i canali ufficiali Weintek non sono più reperibili. Se cerchi su Internet potrai trovare dei pannelli usati o nuovi nei siti di commercio elettronico.
    • Per scaricare il programma dai pannelli serie iH devi utilizzare il programma EasyBuilder8000 (Scaricabile del ns sito). Ma è anche possibile che chi ha sviluppato il programma ne abbia protetto l’upload con password, in tal caso non è possibile scaricarlo.
    • Se l’upload non è protetto, lo puoi scaricare dal pannello e se chi ha sviluppato il programma lo ha protetto da password, lo potrai solo caricare su un’altro pannello MT8070iH.
    • Se il programma non è protetto da password, utilizzando EasyBuilderPro (Scaricabile dal ns sito) lo potrai importare e trasferirlo su un pannello della nuova serie. Ti consiglio il modello MT8072iP Terminale Touch screen 7″ TFT.
    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);
Stai visualizzando 15 post - dal 361 a 375 (di 4,267 totali)