Jump to content

Modbus RTU READ/WRITE


Recommended Posts

Posted

Buongiorno, ho un PLC collegato ad un azionamento Schneider ATV320 in modbus RTU.

Dal S7/1200 con versione 4.2 e CB1241 v.1.0 ho configurato i blocchi "Modbus_comm_load" e "Modbus_Master con mode 0. 

 

Ho creato un DB disabilitando l'accesso ottimizzato e leggo correttamente i vari valori dell' azionamento.

 

Se volessi creare anche una logica per avviarlo, quindi non solo lettura ma anche scrittura, devo creare un secondo blocco modbus master con mode 1 e indicare con il puntatore l'offset del DB che uso per la scrittura? E il REQ dei due blocchi come lo gestisco? Essendo l'RS485 half duplex non credo possa lanciare il REQ sia al blocco di lettura che di scrittura contemporaneamente.

 

Qualcuno saprebbe darmi qualche consiglio su come gestire la cosa. Grazie

 

Sarebbe inoltre interessante, capire come gestite i blocchi e la loro abilitazione quando si hanno più slave su cui leggere i dati 

pigroplc
Posted

Parametrizzi lo stesso blocco e ti crei una catena sequenziale che vada a leggere e scrivere in alternativa. Idem per altri componenti sempre con lo stesso blocco. Viene cervellotico? SI, infatti è uso comune mettere la schda profinet e si risparmia tempo, codice e nervoso.

Posted

Quindi te dici di cambiarli: mode, indirizzo registro e puntatore gestiti da una catena ciclica che cambia i dati e lancia successivamente il REQ?

 

Il puntatore come lo gestisco? Posso dichiararlo come variabile?

pigroplc
Posted
18 ore fa, abbio90 ha scritto:

Il puntatore come lo gestisco? Posso dichiararlo come variabile?

Al posto di dichiarare un parametro fisso dichiari una variabile che aggiorni di volta in volta:

 

passo 1 dichiari prima operazione aggiornando variabili + comando di esecuzipasso 5 come passo 2 per altro comando di esecuzioneone

passo 2 attendi completamento operazione bit "done" o altra diavoleria

passo 3 magari attendi un tempo di 100 msec che potrai togliere in fututo, ma in debug lo allunghi per vedere i tag aggiornati e gevolarti il debug 

passo 4 come passo 1 per altro comando di esecuzione

passo 5 come passo 2 per altro comando di esecuzione

passo 6 come passo 3 per altro comando di esecuzione

ecc.

ultimo segmento metti la call del modbus

 

Posted

Questo l'ho capito. Non ho capito però il puntatore come gestirlo. Se devo cambiare puntatore come lo dichiaro nelle variabili? C'è un data type apposito? Oppure come faccio?

 

Cioè nel campo DATA PTR se metto una variabile che data type deve avere? I dati che scrivo sono in un offset differente rispetto a quelli che leggo 

pigroplc
Posted

Sono in cantiere e non ho tempo di far prove e controllare, ma guarda che formati accetta il parametro. Se gli metti il mouse sopra dovrebbe apparirti il tooltip...

 

Posted

Ho fatto svariate prove ma non ho trovato la quadra. Intanto ho risolto temporaneamente usando due blocchi db master della stessa istanza e attivandoli in maniera sequenziale. Uno per la lettura e uno per la scrittura.

 

Ci sono molti video su internet che usano questa configurazione. 

Posted
2 ore fa, abbio90 ha scritto:

Uno per la lettura e uno per la scrittura.

Facile che io non abbia mai avuto questa necessità perché se ricordo bene ho sempre letto e mai scritto (ma è passato del tempo e il mio buffer di memoria è limitato). Di sicuro coi Sentron leggevo e basta, con altre diavolerie tipo regolatori di temperatura boh....

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...