Sifeld Inserito: 2 luglio 2010 Segnala Share Inserito: 2 luglio 2010 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 =64La 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 More sharing options...
cagliostro Inserita: 4 luglio 2010 Segnala Share Inserita: 4 luglio 2010 (modificato) 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: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 000000000partendo 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 000000000partendo 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 000000010Questo 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: 4 luglio 2010 da cagliostro Link al commento Condividi su altri siti More sharing options...
Sifeld Inserita: 5 luglio 2010 Autore Segnala Share Inserita: 5 luglio 2010 (modificato) 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: 5 luglio 2010 da Sifeld Link al commento Condividi su altri siti More sharing options...
cagliostro Inserita: 5 luglio 2010 Segnala Share Inserita: 5 luglio 2010 Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora