Vai al contenuto
PLC Forum


Cp341 Comunicazione Modbus S7-300


mariodipiu

Messaggi consigliati

Buongiorno a tutti,

ho un dubbio sulla comunicazione modbus..Dal sito siemens ho scaricato l'esempio MODMASTER 317 e MODSLAve 318 per s7-300.

Sono in attesa dell'arrivo della cp 341 RS 485 con relativa chiave hardware.

L'esempio siemens, sia lato master che lato slave, è completo di tutti i blocchi; manca solo il driver (la chiave hardware) che si acquista a parte.

Io dorvrò comunicare, come slave, in una rete modbus, comandata da un master non Siemens.

Ho deciso di creare una DB dati, per esempio lunga 100 word, nella quale vado a copiare tutti gli ingressi-uscite digitali/analogici, i vari merker, i vari valori di conteggio, timer ecc.. A questo punto io dovrei chiamare la FB 80 (con istanza DB80) e parametrizzare nell'hardware la FC03 (oppure la FC04??) con DB che inizia, per esempio, dalla DB900DW0 ( commence at DB 900 DW0).

Suppongo di avere 100 word da trasmettere ( che rappresentano tutto lo stato dei miei ingressi-uscite e non solo), il master non siemens, quando vorrà ricevere questi informazioni, dove le andrà a leggere? Lo start_register andrà da zero a 50 (in decimale), questo significa che ad indirizzo 0 vi è la word zero e ad indirizzo 50 la word 100?

Se il master fosse stato un s7-300, come illustrato su esempio Siemens, avrei trovato nella DB43 tutti i dati inviati dallo slave..In un mondo non siemens dove troverò queste word?

Se usassi una FC01 (sempre lato SLAVE), parametrizzandola in questo modo : From 0 to 2047 commence at memory bit M 1000.0, cosa significa che il Merker M1000.5 corrisponderà l'indirizzo assoluto 5? Il master dove lo trovo lo stato del mio merker? Cosa rappresenta l'indirizzo assoluto 5?

Grazie per le risposte, scusatemi ma conosco solo siemens..

A presto

Link al commento
Condividi su altri siti


Gianmario Pedrani

se hai caricato il software modbas sul tuo step7 troverai che nella parte configurazione hardware sotto la voce cp un tasto con scritto parametrizza e li gia ti fa vedere i vari merche in che db andranno e cosi i vari ingressi ed uscite e prenderando poi anche il codice

modbus, se non hai fatto questo o non hai caricato il software modbus, l'esempio è un po confusionato..

prima carica il software

poi vai a configurare la scheda

e poi guardi l'esempio.

Link al commento
Condividi su altri siti

Ciao GianMario, grazie per l'aiuto.

La parametrizzazione hardware l'ho vista e credo di averla capita.

Se caricassi i due esempi master-slave in due differenti cpu s7-300 con cp341 per entrambe, il master riceverebbe lo stato di quello che ho parametrizzato con la fc01 nei primi 20 byte dal lato slave ( mi sembra siano richiesti dal master 20 byte, se ricordo bene).

Io devo comunicare con un master non-Siemens, devo fornire una tabella di corrispondenza in cui associo ai miei ingressi-uscite dei nomi-indirizzi modbus..la tabella la allego come file pdf..vorrei sapere se è corretta, supponendo di utilizzare la DB800 in cui copio le PAW/PEW (con la fc03 il master dovrebbe chiedermi di inviare queste informazioni). Dovrebbe dunque chiedermi 11 word? La word 0 che lui riceverà da qualche parte, sarà la mia PEW256?

Poi parametrizzo la FC01 inviando su 48 "indirizzi" (da 0 a 47) lo stato di ingressi/uscite digitali..anche qui il master dovrebbe richiedere il codice 01 nellla sua DB 42 (function_code B#16#1) per ottenere N byte (count_high + low che è la lunghezza dati,m cioè quanti byte esso richiede allo slave). In questo caso dovrebbe richiedere credo 5 byte (dovrebbe porre start_address"HIGH" e "LOW" entrambi a zero, perchè parto dal merker 80.0)

Io credo di aver capito come funziona la comunicazione, l'esempio mi è chiaro.. Non riesco ad immaginare cosa accade ad un master non Siemens. Ci saranno delle analoghe funzioni send-receive e "un'analoga DB" (DB 43 nell'esempio) dove si riceveranno i vari byte o word( a seconda della FC chiamata) trasmessi dallo slave? ù

Se è così cosa serve la tabella di corrispondenza che ho creato? Per me è importante anche capire se quella tabella che ho creato è corretta o meno.

Grazie a tutti per l'aiuto.

db_modbus.pdf

Link al commento
Condividi su altri siti

Reverendo bit

ciao Mario,

la prima cosa che ti consiglio, è di leggere per beneil manuale modbus siemens, ti aiuterà a chierirti alcuni aspetti del protocolo.

il modbus è diventato uno standard per la comunicazione tra apparecchi di marche diverse, quindi se il master fosse stato siemens di certo non avresti usato il modbus per comunicare.

ho messo su molte comunicazioni mosbus tra plc siemens e master di tutte le marche, e ti garantisco che una volta messa su la comunicazione lavora che è una meraviglia, ma a primo colpo c'è sempre qualcosa che va storto.

io ti dico i passi da seguire per evitare o ridurre i problemi dopo.

quello che devi chiedere a chi configura il master è:

parametri di comunicazione

il function code che vorrà utilizzare, a volte mi è capitato che usavano solo il 3

se hanno un range prestabilito di indirizzi alla quale dovrai allineati.

fatto questo se il master non mi da vincoli, per comodità configuro sempre tutto su fc3 sia analogici che digitali, creo la mappa modbus da dare al master e mi testo tutto con il simulatore master modbus per testsre la mappa.

quello che accade lato master ignoralo, ogni marca gestisce le variabili a modo suo.

se ti servono altre info fammi sapere.

saluti

Inviato dall'app. Mobile di PLC Forum da GT-I9300

Link al commento
Condividi su altri siti

Ciao Reverendo bit,

avrei bisogno di sapere se quello che ho fatto è corretto.. Puoi farmi un esempio di uso della FC03, da parte dello slave che, copia i suoi ingressi uscite (analogiche e digitali) su una DB Dati e la passa al master, il quale userà la sua FC03 su una DB collegata alla funzione di ricezione dei dati e una DB dove fisicamente riceverà i dati..

Supponiamo di avere 2 word di ingressi digitali, 2 word di uscite digitali, 2 word di ingressi analogici, 2 word di uscite analogiche. In tutto 8 word e di usare, nel primo programma Slave, la parametrizzazione della CP su FC03 con DB800. Al master dirò che i miei ingressi-uscite sono 8 word, word0,word1 (ingressi digitali)...fino alla word6-word7 (uscite analogiche dei 2 canali).

Nel mio programma slave, dopo la parametrizzazione così fatta, creo la DB 800, copio tutto lo stato dei miei ingressi-uscite nelle prime 8 word..poi abilito la comunicazione come nell'esempio siemens e chiamo la FB 80.

Dunque se ho ben capito, avrei finito la mia gestione della comunicazione..sarà la CP341 a farsi carico di spedire i dati, su richiesta del master..il mio slave può ritornare all'esecuzione del suo programma locale..eventualmente ciclicamente andrà ad aggiornare lo stato degli ingressi-uscite nella DB.

Per piacere, mi puoi dire se è corretta quella tabella che ho compilato ed allegato?

Il master, riceverà le 8 word (sotto l'ipotesi di aver concordato di richiedere 8word) e nell'ordine leggerà ingressi digitali....fino alle uscite analogiche? E' corretto?

Addirittura posso simulare una comunicazione modbus su PLC s7-300? Posso simulare la rete?

Ciao Reverendo bit, grazie per il tuo supporto.

Grazie a tutti.

Link al commento
Condividi su altri siti

Reverendo bit

Per piacere, mi puoi dire se è corretta quella tabella che ho compilato ed allegato?

Non vedo nessun alleagto

avrei bisogno di sapere se quello che ho fatto è corretto.. Puoi farmi un esempio di uso della FC03, da parte dello slave che, copia i suoi ingressi uscite (analogiche e digitali) su una DB Dati e la passa al master, il quale userà la sua FC03 su una DB collegata alla funzione di ricezione dei dati e una DB dove fisicamente riceverà i dati..

Iniziamo con alcuni concetti di base:

La DB sulla quale appoggi i tuoi dati, digitali o analogiche che sia, non la passi al master ma bensi la metti a disposizione del master. Siagnifica che lo slave essendo passivo risponde alle richieste del master.

Dando per scontato che tu abbia configurato il driver correttamente, e la DB800 è il DB di start addres avrai una mappa di questo tipo:

PLC MASTER

DB800.DBW0 Registro 0

DB800.DBW2 Registro 1

DB800.DBW4 Registro 2

DB800.DBW6 Registro 3

.

.

.

.

DB800.DBW255 Registro 255

se tu ad esempio appoggi la PEW100 (livello vasca xy) sulla DB800.DBW4, sulla mappa dovrai dire al master che il registro 2 per lui e il livello vasca xy.

se invece appogi dei digitali su una word attenzione che su step7 i byte sono invertiti ad esempio:

supponiamo che la DB800.DBW6 si una word utilizzata per impacchettare dei digitali (DI DO o MERKER che siano) la corrispondenza per il DCS sarà:

word bit registro bit sul master

DB800.DBW6 DB800.DBX6.7 3 BIT15

DB800.DBW6 DB800.DBX6.6 3 BIT14

DB800.DBW6 DB800.DBX6.5 3 BIT13

DB800.DBW6 DB800.DBX6.4 3 BIT12

DB800.DBW6 DB800.DBX6.3 3 BIT11

DB800.DBW6 DB800.DBX6.2 3 BIT10

DB800.DBW6 DB800.DBX6.1 3 BIT9

DB800.DBW6 DB800.DBX6.0 3 BIT8

DB800.DBW6 DB800.DBX7.7 3 BIT7

DB800.DBW6 DB800.DBX7.6 3 BIT6

DB800.DBW6 DB800.DBX7.5 3 BIT5

DB800.DBW6 DB800.DBX7.4 3 BIT4

DB800.DBW6 DB800.DBX7.3 3 BIT3

DB800.DBW6 DB800.DBX7.2 3 BIT2

DB800.DBW6 DB800.DBX7.1 3 BIT1

DB800.DBW6 DB800.DBX7.0 3 BIT0

sarà la CP341 a farsi carico di spedire i dati, su richiesta del master

Sarà il driver a fare da tramite tra la richiesta del master ed il registro della db che hai mappato.

Ti consiglio ancora una volta di leggere il manuale ti chiarira le idee, e supratutto troverai la formula di conversione tra la richiesta del master ed il registro che il driver restituisce.

Good luck :thumb_yello:

Modificato: da Reverendo bit
Link al commento
Condividi su altri siti

Ciao Reverendo bit, grazie per il tuo aiuto.

Leggerò con attenzione la tua risposta.. Il file allegato è un pdf: db_modbus.pdf presente alla discussione #3, da me postato ieri..basta che scorri in alto la pagina..

Mi puoi dire se quello che ho fatto è corretto, per piacere.

Grazie. Ci sentiamo domani.

A presto

Link al commento
Condividi su altri siti

Reverendo bit

Allora se il file allegato è la mappa che devi dare al master c'è da dire che:

per quanto riguarda l'fc3 le informazioni che interessano al master sono indirizzo modbus (colonna a sinistra) e servizio della Pew (es. livello temp. etc) tutto il resto non serve.

Invece per l'fc1 sei fuori strada perché io vedo solo gli indirizzi assoluti del PLC.

Se invece sono le configurazioni del driver allora vanno bene.

anche se non capisco perché hai mappato gli ingressi su fc1 anziché il 2

Inviato dall'app. Mobile di PLC Forum da GT-I9300

Link al commento
Condividi su altri siti

Ciao Reverendo bit,

mille grazie per il tuo aiuto..Si sapevo della gestione invertita dei byte da parte di Siemens.. Ti chiedo ancora un pò di pazienza, ho bisogno di qualche ulteriore "dritta", con la promessa che leggerò il manuale della comunicazione Modbus, appena trovo un pò di tempo...

Il Master, continuando con lo stesso esempio come da tabella pdf allegata, quando vorrà leggere lo stato dei miei ingressi-uscite digitali, si troverà a dover richiedere 3 word.

Riceverà le tre word, così nell'ordine:

Word0 High : E124.7---E124.0

Word 0 Low : E125.7---E125.0

Word1 High : E126.7---E126.0

Word 1 Low : A124.7---A124.0

Word2 High: A125.7---A125.0 (nel pdf vi è un errore, l'MB84 sono le A125 e non le A124, ho copiato la riga e non ho aggiornato il contenuto)..

Wor2 Low : 00000000 (completata con 8 zero)

Utilizzando la FC01, il Master riceverà sempre una word per ogni registro, oppure un Byte per ogni resgitro? Quello che ho scritto è corretto, sotto l'ipotesi che il master Richieda 3 word allo slave?

Utilizzo la Fc01, (potrei anche utilizzare la FC02), vado a copiare tutti gli ingressi-uscite digitali nei merker, byte 80...84

Un'ultima cosa vorrei sapere: la funzione Fc03(Read Output Registers) abilita la lettura di registri individuali dal parte del Master, verso lo Slave.

Quale è la differenza con la Fc04? Qual'è la differenza tra un registro di ingresso e di uscita?

Infine, se volessi scrivere una word in una DB, per comandare per esempio un'analogica di uscita dello Slave, dovrei usare la Fc05?

Grazie Reverendo bit per il tuo aiuto.

Grazie a tutti per il supporto.

A presto

Saluti

Mario

Link al commento
Condividi su altri siti

Ciao a tutti,

scrivo qui per non aprire altri post visto che l'argomento è quasi lo stesso.

******** nota del moderatore********

dal regolamento del forum:

s) Vietato pubblicare lo stesso messaggio più volte.
Vietato accodarsi alle discussioni di altri utenti, anche con apparente eguaglianza del problema.

Se vuoi puoi porre la tuia domanda in una nuova discussione.

Modificato: da Livio Orsini
Link al commento
Condividi su altri siti

Reverendo bit
Funzione Descrizione
01 Read Coil Status
02 Read Input Status
03 Read Holding Registers
04 Read Input registers
05 Force Single Coil
06 Prese! Single register
07 Read Status
15 Force multiple Coils
16 Preset Multiple Registers

Il Master, continuando con lo stesso esempio come da tabella pdf allegata, quando vorrà leggere lo stato dei miei ingressi-uscite digitali, si troverà a dover richiedere 3 word.

No, quello che mappi su FC01 viene letto come bit e non come registri.

Poniamo il caso che tu sulla scheda dell'FC01-05-15 mappi:

From 0

To 39

Commence at MB80.

Significa che tu hai mappato 40 singoli bit da 0 a 40 con 40 bit del tuo PLC, che in questo caso sono:

Indirizzo 0 = MB80.0

Indirizzo 39 = MB84.7

Significa che il Master potra chiederti un singolo bit come potrà chiederti tutti e 40 bit con un'unica richiesta, naturalmente la richiesta dovrà essere fatta con il function code 1 o 5 per la lettura oppure il 15 se il master vorrà scrivere.

Se tu con questa mappatura vuoi dare al Master il valore di ingressi fisici allora alla configurazione sopra descritta dovrà seguire il seguente codice:

L EB 124

T MB 80

L EB 125

T MB 81

L EB 126

T MB 82

L AB 124

T MB 83

L AB 125

T MB 84

Fatto questo il Master Potrà leggere lo stati di ingressi uscite con il FC01

Utilizzando la FC01, il Master riceverà sempre una word per ogni registro, oppure un Byte per ogni resgitro?

Come ho detto già il FC01 richiede bit non registri, una unità con questo FC è 1 bit, e poi per definizione un registro è = a 16 bit quindi se parli di registri parli di word e niente altro.

Un'ultima cosa vorrei sapere: la funzione Fc03(Read Output Registers) abilita la lettura di registri individuali dal parte del Master, verso lo Slave.

03 Read Holding Registers si può solo leggere

Infine, se volessi scrivere una word in una DB, per comandare per esempio un'analogica di uscita dello Slave, dovrei usare la Fc05?

NO, l'FC05 Force Single Coil, il Master per scrivere un singolo registro utilizza l'FC06 se vuole scrivere più registri contemporaneamente utilizza l'FC16.

Quando mappi un DB nella scheda FC03-06-16 il DB per il master già è in lettura scrittura, se tu invece vuoi proteggere il DB da scrittura nella scheda Limt devi mettere Min=0 e Max=0

Infine se il DB è in lettura scrittura la differenza è che i dati che il Master dovrà leggere dovranno essere seguite dal seguente codice:

Cosi il Master leggerà la PEW

L PEW 100

T DB800.DBW0

Se vuoi settare un'uscita analogica o un set point o qualsiasi cosa il Master dovrà scrivere, sarà:

L DB800.DBW10

T PAW 100

Link al commento
Condividi su altri siti

  • 2 weeks later...

Ciao Reverendo bit,

domani arriva la cp341. Vorrei testare la comunicazione modbus per il mio slave siemens..

Ho installato il simulatore master modbus sul Pc e con esso, interconnesso via 485 con la cp341, mi collego al plc e con la fc03 provo a leggere i regisitri di cui parlavamo le scorse settimane..

Io nel software PLC del mio slave, quando chiamo la funzione modb_341, ho parametrizzato LADDR come 272( stesso valore che scrivo nella configurazione hardware)..

Il mio indirizzo, sarà 272? il master quando vuole comunicare passerà alla sua funzione l'indirizzo 272?

Dalla sala di controllo,oggi mi hanno detto che il mio indirizzo da slave sarà 11, dunque dovrò scrivere 11 nella funzione modb_341 alla voce LADDR?

Devo cambiare l'indirizzo, aggiornandolo con 11, anche nella configurazione hardware?

Grazie Reverendo bit,

domani ti faccio sapere se funge la comunicazione con il PC simulato master

CIAO

Link al commento
Condividi su altri siti

Reverendo bit

Ciao Mario,

si vede che i consigli non servono, se avessi dato una lettura al manuale tutti questi non li avresti.

quello che ti serve è capire la filosofia della comunicazione modbus ed ancor prima come configurare l' hardware siemens.

l' indirizzo che dai che n pasto all'fb80 è l'indirizzo fisico della scheda, è serve solo all'fb80 per scambiarsi i dati tra cpu e scheda.

cosa ben diversa è l'indirizzo modbus visibile al master, è quello lo imposti sui parametri del modbus.

l'unica cosa che puoi fare quando ti arriva la scheda è quella di prendere l'esempio contenuto nel manuale, e seguirlo passo passo, se dopo aver fatto questo hai ancora dei dubbi fatti sentire.

saluti

Inviato dall'app. Mobile di PLC Forum da GT-I9300

Link al commento
Condividi su altri siti

Ciao Reverendo bit,

i consigli servono..e non posso che condividere ciò che dici..

ma in questo periodo sono preso dal lavoro, sto cercando di imparare il più possibile, nel minor tempo possbiile e non trovo il tempo, non sempre, per approfondire tutto...sto lavorando, sto imparando la comunicazione profibus con gli inverter, con encoder incrementali..in un mese sono passato dallo step7 al tia portal v12,sto studiando progetti fatti dai miei colleghi,scritti in ladder più awl, con centinaia di fb e fc...più il progetto wincc... poi la sera, sto portando avanti la teleassistenza con s7-300, cp 343-1, Scalance e vpn... infine webserver.. finisco le giornate stanco distrutto...ma contento perchè mi piace questo lavoro...quindi scusami se non riesco a trovare i tempo per approfondire sul modbus..mi piacerebbe, ma va così..almeno per adesso...spero che le cose un po' alla volta si infilino, e quello che oggi mi sembra molto difficile, con la pratica, l'esercizio ed il tempo, possa diventare un po' piu' meccanico, meno stancante per il cervello e dunque più semplice..sono solo 2 mesi che ho iniziato questo nuovo lavoro, voglio essere fiducioso..

Grazie reverendo bit.

A presto

Saluti

Mario

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...