Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Ottobre 4, 2023 alle 4:36 pm in risposta a: Gateway Modbus TCP/RTU per lettura condizionatori #74206
Sergio Bertana
Amministratore del forumIl 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]Sergio Bertana
Amministratore del forumOn 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.
Sergio Bertana
Amministratore del forumL’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.
Sergio Bertana
Amministratore del forumSinceramente è 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.
Sergio Bertana
Amministratore del forumL’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.
Sergio Bertana
Amministratore del forumL’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.
Sergio Bertana
Amministratore del forumHo 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);Sergio Bertana
Amministratore del forumCon 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.
Sergio Bertana
Amministratore del forumL’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.
Sergio Bertana
Amministratore del forumDi 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).
Sergio Bertana
Amministratore del forumIl 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?
Sergio Bertana
Amministratore del forumUna 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.
Sergio Bertana
Amministratore del forumSi 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.
Sergio Bertana
Amministratore del forumInizio 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.
Sergio Bertana
Amministratore del forumQuando 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.
-
AutorePost