Configurazione Modbus Slave su SlimLine
Home › Forum › Programmazione IEC 61131 (LogicLab) › Configurazione Modbus Slave su SlimLine
- Questo topic ha 5 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 3 mesi, 3 settimane fa da
info.
-
AutorePost
-
Dicembre 18, 2024 alle 12:29 pm #79154
info
PartecipanteSto cercando di capire come utilizzare FB ModbusSlave lato comandi specifici (ok per il resto indirizzi, porte, etc…).
Ho una apparecchiatura che chiede lo stato di 8 ingressi all’indirizzo 0 (con comando 2) e scrive lo stato di 8 uscite sempre all’indirizzo 0 (con comando 15)
Ho guardato tutti i vari post ed esempi ma non capisco come rispondere ai 2 comandi perchè vedo che nel FB c’è solo un area di memoria che penso sia l’area di scambio. Penso di aver capito che con il Done posso leggere la memoria per capire che comando mi è stato inviato ed in caso di scrittura prendo i valori inviati e facce le mie operazioni, ma se il comando è la lettura dove scrivo i valori e come attivo la risposta? o la risposta la gestisce sempre la FB automaticamente ma in questo caso da dove prende i valori da restituire?
Grazie spero di essere stato abbastanza chiaro.
Dicembre 19, 2024 alle 8:37 am #79158Sergio Bertana
Amministratore del forumIl FB ModbusSlave permette di gestire in modo autonomo le funzioni Modbus supportate (FCode) agendo sull’area di memoria definita nei parametri. Forse riesco a darti una spiegazione più chiara rispondendo alla tue necessità.
Partiamo con l’indirizzo, Modbus standard parte da indirizzo 1 ma sottrae 1 nel frame di richiesta, quindi in realtà chiede indirizzo 0. Ci sono molti dispositivi che utilizzano un Modbus zero based dove l’indirizzo definito è l’indirizzo inviato nel frame Modbus. Visto che mi parli di indirizzo 0 mi sembra di capire che il tuo dispositivo appartenga a questa categoria. Il FB ModbusSlave ha l’ingresso Absolute che permette di gestire questa differenza.
“Chiede lo stato di 8 ingressi all’indirizzo 0 (con comando 2)”: Al FB arriverà un frame di richiesta con codice 16#02 Read input status con indirizzo 0. Il FB sottrae dall’indirizzo il valore di Offset, che quindi dovrai impostare a 0. Leggerà lo stato di 8 variabili BOOL dal buffer di memoria definito in Buffer e ne ritornerà il valore in un frame Modbus di risposta al tuo dispositivo.
“Scrive lo stato di 8 uscite all’indirizzo 0 (con comando 15)”: Al FB arriverà un frame di richiesta con codice 16#0F Force Multiple Coils con indirizzo 0. Il FB sottrae dall’indirizzo il valore di Offset, che quindi dovrai impostare a 0. Scriverà lo stato di 8 variabili BOOL nel buffer di memoria definito in Buffer con i valori presenti nel frame Modbus di comando ed invierà un frame Modbus di risposta al tuo dispositivo.
La stranezza è che il tuo dispositivo legge e scrive le stesse 8 variabili BOOL, quindi in pratica è lui che si autoaggiorna. Mi sembrava più logico che leggesse e scrivesse ad indirizzi diversi.
Dicembre 19, 2024 alle 9:03 am #79164Sergio Bertana
Amministratore del forumAggiungo per gli esperti di Modbus la possibilità d utilizzare il FB ModbusGateway per modificare i frame Modbus ricevuti da un dispositivo prima di inoltrarli ad un’altro dispositivo. Il FB gestisce due stream di comunicazione, i frame Modbus ricevuti da IFile con il tipo di protocollo definito in IType sono elaborati ed inviati in uscita su OFile con con il tipo di protocollo definito in OType.
Volendo utilizzare il gateway per comunicare con il FB ModbusSlave sullo stesso modulo SlimLine dovrai gestire una connessione socket in localhost dove OFile del gateway è connesso ad un SysTCPClient che si connette all’indirizzo 127.0.0.1 di un SysTCPServer cui connetti il File della FB ModbusSlave. In questo modo i dati in IFile del gateway che arrivano dal tuo dispositivo verranno rediretti alla FB ModbusSlave.
Ora volendo modificare gli indirizzi di lettura e scrittura potrai eseguire le modifiche sui frame in ingresso collegandoti ad ITrigger e modificare i frame in risposta collegandoti a OTrigger.
Dicembre 19, 2024 alle 1:13 pm #79175info
PartecipanteMa in realtà lavorando con schede IO remote è normale che la scrittura delle uscite e la lettura degli ingressi sia sullo stesso indirizzo perchè il comando ovviamente fa una operazione diversa.
Qui mi pare di intuire che il FB lavora autonomamente sul buffer indicato quindi sia che uso un comando Force Multiple Coil o Write Multiple Register ottengo i dati nella stessa posizione (a parte la dimensione).
In questo modo però se per la lettura il FB legge sempre dalla stessa memoria in modo autonomo io non so che dati sono stati richiesti per preparare lo stato degli ingressi o lo stato di registri da mettere nel buffer in risposta al comando di lettura.
Se è così purtroppo devo cambiare sistema oppure realizzare completamente il protocollo con la semplice connessione TCP.
Dicembre 24, 2024 alle 8:01 am #79179Sergio Bertana
Amministratore del forumQuindi se ho ben capito tu vuoi utilizzare un modulo SlimLine come I/O remoto di un dispositivo Modbus master che legge/scrive gli I/O utilizzando i comandi 16#02 Read input status e 16#0F Force Multiple Coils mappandoli sempre ad indirizzo 0.
Se è così purtroppo è come hai giustamente detto tu, il FB opera in modo autonomo operando sempre sullo stesso buffer di memoria quindi non è possibile intercettare i comandi di lettura/scrittura per aggiornare gli I/O.
Dicembre 24, 2024 alle 5:21 pm #79180info
PartecipanteSi esatto, speravo, come ho trovato su tanti altri plc, bus coupler, etc.., che il modbus gestito in automatico dal sistema rispondesse con lo stato degli ingressi fisici e mi permettesse di scrivere le uscite fisiche.
Peccato, in questo modo devo vedere se mi costa meno fare una gestione completa dei comandi modbus che mi servono o cambiare sistema.
Grazie comunque delle informazioni.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.