Vai al contenuto
PLC Forum


Comunicazione Modbus Tra Due S7 400h - Informazioni per funzionamento Master/Slave


Sifeld

Messaggi consigliati

Salve a tutti!

Ho un piccolo problema nel capire una cosa riguardante la comunicazione Modbus Master/Slave tra due schede CP341 montate su due S7 414-4H.

Mi è stato dato un programma che svolge la comunicazione tra le due CP341, e mi è stato detto di capire come funziona il tutto per apportare delle modifiche al SW da installare sulla macchina, ho delle perplessità circa le richieste che il Master fa allo Slave.

Ho capito che il Master è quello che gestisce il tutto e tramite gli FB7 e FB8 manda e riceve i pacchetti d/allo slave (sullo slave è presente il blocco FB80) , ma questo avviene solo se allo slave viene comunicato un codice che comprende ADDRESS | NUMERO DELLA FUNZIONE | INDIRIZZO DI PARTENZA/OFFSET | QUANTITA' DI REGISTRI LETTI.

Fin qui ho testato e inserendo Address = Indirizzo dello slave, Numero della funzione = 3 (leggi le word), Indirizzo di partenza/offset =0, Quantità di registri =64, tutto mi funziona alla perfezione ed ho capito come lavora. (tutti i numeri sono espressi i DEC)

In una particolare condizione dell'impianto i parametri inviati allo slave cambiano e si modificano nel seguente modo: Address = lo stesso di prima, Numero della funzione = 16 (scrvi le word), Indirizzo di partenza/offset =512, Quantità di registri =64

La mia domanda è, quel 512 che viene messo nell'idirizzo di partenza/offset cosa fa di preciso?

Sul manuale c'è scritto che mi shifta la DB dalla 11 alla 12 ma nel mio programma non esiste una db 12 e quindi mi chiedo come faccia a funzionare in questo caso.

Un'altra cosa che sul manuale c'è ma che ne programma pare non esserci è il fatto che nella funzione 16 la richiesta dei dati è composta da: ADDR| FUNC| start_register| quantity |byte_count n |n-DATA (High,Low) e sempre nel mio caso vengono praticamente tralasciate le ultime 2 word della richiesta da parte del master allo slave.

Ringrazio in Anticipo per i chiarimenti che (spero :) ) mi verranno dati.

Andrea

Link al commento
Condividi su altri siti


Salve,

il codice funzione 16, permette di effettuare la scrittura di un certo numero di dati all'interno di un DB,

La mia domanda è, quel 512 che viene messo nell'idirizzo di partenza/offset cosa fa di preciso?

Il valore assegnato al registro starting address nell'header di comunicazione Modbus,

rappresenta per la funzione 16, il numero del DB e la word di partenza da dove si inizierà a "scrivere" i dati per la lunghezza specificata nel registro quantity.

Sul manuale c'è scritto che mi shifta la DB dalla 11 alla 12 ma nel mio programma non esiste una db 12 e quindi mi chiedo come faccia a funzionare in questo caso.
.

Per comprendere il significato del registro di starting address bisogna fare un passo indietro, nel tuo caso non vi è nessuna attinenza tra il valore 512 con DB11 o DB12, ora non so quale manuale hai consultato, però quello in lngua inglese spiega in modo sufficientemente chiaro come interpretare il codice 16.

Per sapere di preciso con il valore 512, in quale DB andrai ad effetuare la scrittura, devi conoscere il numero del DB di base che è stato assegnato nella configurazione hardware della scheda in esame.

Per maggior chiarezza allego immagine:

immaginepq.png

una volta venuto a conoscenza del valore del Base DB number la cosa è fatta.

Supponiamo che sia stato assegnato il valore 10 al Base DB number.

Lo starting address, è una word dove nei primi nove bit [bit0.....bit8] viene assegnata il numero della word di partenza che vedremo in seguito come viene calcolata, mentre nei bit9.......bit15 viene assegnato il numero del DB che si calcola in questo modo:

il valore 512 in binario sarà 0000001 000000000

partendo dal bit 9 che vale come peso"1", sommo il valore assegnato nella Base DB number che è 10. Quindi il numero della DB dove si andrà a scrivere i dati sarà: 10+1=DB11.

Ulteriore esempio, se al posto di 512 era scritto 1536 in bin= 0000011 000000000

partendo dal bit 9 il valore in dec. risulta 3 che sommato all'offset fisso del Base DB number corrisponde al DB13.

Per la determinazione della word di partenza, avendo impostato 512, i bit da 0 a 9 sono tutti a zero per cui la DW di partenza sarà la zero.

Devi ricordare poi che il valore riferito alla word di partenza, deve essere moltiplicato sempre per 2, questo perchè essendo la scrittura fatta su delle word=2 byte, il valore inizi sempre dal byte pari che corripsonde all'inizo della word.

Supponiamo per esempio che nello starting adress venga scritto il valore 1538=0000011 000000010

Questo significa che andremo a scrivere sul DB13 come da precedente esempio, partendo però dalla DW4.

Questo perchè il bit 1 ha valenza 2 in decimale, che moltiplicato per la costante 2 di cui sopra appena parlato, si ottiene 2*2= DW4

Allego i link web per il download dei manuali in inglese per modbus slave e master della CP341.

Modbus Slave e Modbus Master

Modificato: da cagliostro
Link al commento
Condividi su altri siti

Grazie mille! Chiarissimo nella spiegazione.

Il punto che mi mancava era quello della DB di base per riuscire a capire il tutto. Praticamente non sapevo che mi "shiftava" la db che era stata messa nella configurazione HW. Il fatto che mi ha tratto in inganno è stato che la db viene impostata per la funzione 3, e quindi credevo venisse presa quella come riferimento.

Grazie ancora dell'aiuto!

Modificato: da Sifeld
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...