Vai al contenuto
PLC Forum


Modicon M262, Modbus TCP e Tabelle di rilocazione


verticale128

Messaggi consigliati

Buongiorno. Trovandomi a dover mettere in comunicazione un Modicon M262 con un sistema HMI realizzato in Visual Basic, ed avendo scelto, su richiesta dei programmatori, la comunicazione via Modbus TCP, non riesco ad inquadrare correttamente la problematica.

Da quanto ho capito dal manuale, questa CPU dovrebbe avere già integrato un Server Modbus accessibile all'ID 255 (fisso e non configurabile). Quello che non capisco è l'ìindirizzamento delle %MW cui dovrei accedere dal supervisore in lettura e scrittura (servono circa 1000 W per lettura e altrettante in scrittura).

Spulciando nella Guida di Programmazione di questa CPU, mi sono imbattuto in alcune pagine a me poco chiare sulla mappatura della memoria interna, in particolare delle Aree %MW60000 e %MW62000, che sembrerebbero dedicate proprio alla comunicazione Modbus per lo scambio di dati con altri Device, tramite quelle che sono definite "Tabelle di Rilocazione". Di seguito i link relativi:

 

https://product-..schneider-electric.com/Machine Expert/V1.2/it/m262prg/index.htm#t=m262prg%2FM2xx_-_Memory_Mapping%2FM2xx_-_Memory_Mapping-4.htm%23XREF_D_SE_0081016_1

 

https://product-..schneider-electric.com/Machine Expert/V1.2/it/m262prg/index.htm#t=m262prg%2FM2xx_-_Memory_Mapping%2FM2xx_-_Memory_Mapping-6.htm%23XREF_D_SE_0004337_1

 

Se però all'interno del mio progetto dichiaro degli array di Word contigui nelle aree di cui sopra, ottengo errori di allocazione di memoria (out of range) al momento del download.

 

A questo punto vorrei capire se le aree in oggetto sono riservate o accessibili alla programmazione, e se per il mio scopo sto facendo riferimento alle aree giuste o sono fuori strada. In altre discussioni vedo che per la comunicazione su Modbus TCP viene suggerito di usare le aree a partire dalla %MW0, che corrisponderebbero ai canali dal 40000 in su nell'indirizzamento Modbus.

 

Grazie. Saluti.

 

Link al commento
Condividi su altri siti


Non uso (ancora) M262 però mi sento di dirti che l'area di memoria da 0 a 59999 è quella che ti serve.

L'area di rilocazione serve per avere delle word consecutive da leggere ma va, credo configurata, tramite M262 (ovvero supponendo che tu voglia leggere %MW0 e % MW1374, per farlo hai bisogno di 2 letture distinte ma se li rimappi al %MW60000 e %MW60001 allora li puoi leggere con una unica lettura - poi dove tu debba fare questa rimappatura non lo so).

Da VB6 (con VB.net mi sento di dirti che è uguale) devi richiedere gli indirizzi partendo da 0, il 40000 serve per altri strumenti/PLC (in genere di marca diversa da SCH).

 

Link al commento
Condividi su altri siti

Grazie per la risposta. Ho fatto dei test con un programmino per Windows per il test del Modbus TCP, e risulta esattamente come riferisci tu...gli holding registers che vengono letti e scritti dal programmino partono dall'area %MW0, per 65535 posizioni. Per i miei scopi, la Relocation Table e le aree di cui chiedevo risultano perfettamente inutili.

Quindi, da quanto ho capito il tipo di indirizzamento adottato dovrebbe corrispondere al secondo indicato in questa scheda (quello esteso):

 

https://en.wikipedia.org/wiki/Modbus

 

in cui gli Holding Registers vanno dall'indirizzo 400001 al 465536, corrispondenti nell'indirizzamento Schneider alle aree %MW0 - %MW65535.

 

L'informazione che ho fatto molta fatica a trovare è quella inerente al nodo Modbus del Server integrato (e che non necessita di configurazione), che corrisponde al 255 (mentre la porta è la tradizionale 502 del Modbus TCP). Non avevo idea di quale numero di nodo impostare, e di dove farlo.

 

Grazie ancora per il supporto, Max.

 

Saluti.

 

Link al commento
Condividi su altri siti

Interrogando i vari PLC SCH tramite Modbus TCP/IP e VB6 non mi sono mai preoccupato dell'indirizzo del server (il famoso 255) : ti serve l'IP del PLC e la porta 502.

Per quanto riguarda le variabili, vado a memoria, non dovresti avere l'offset di 1, quindi se vuoi leggere %MW0 richiedi il registro 0 e non l'1 ... fai comunque una verifica perché la memoria inizia a perdere colpi.

 

Ciao.

 

Link al commento
Condividi su altri siti

Ti ringrazio, Max. Forse è solo il programmino di test Modbus per Windows che sto usando che necessita del numero di nodo 255...so che senza questa impostazione tutti i miei test precedenti di lettura/scrittura non andavano a buon fine. Per ora non è stato fatto ancora nessun test dal supervisore vero e proprio, dato che la cosa compete ad altri.

Grazie di nuovo per il prezioso supporto.

 

Saluti.

Link al commento
Condividi su altri siti

Ultima domanda: ma per la gestione degli Holding Registers di cui sopra, i codici Modbus disponibili sono solo il 3 (Read Holding Registers), il 6 (Write Single Holding Register), e il 16 (Write Holding Registers), o sbaglio? Non esistono codici per la lettura/scrittura a singolo bit, come quelli utilizzabili per le altre aree Modbus (Coils e Discrete Inputs)?

Da quanto riporta la documentazione online sul Modbus, sembra di no:

 

<<You cannot read just one bit from a holding register. There is no way to do that - Modbus protocol simply does not provide that function. You must read all 16 bits, and then test the individual bit you are interested in for true or false (1 or 0).>>

 

Grazie. Saluti.

Link al commento
Condividi su altri siti

zanellatofabio
1 ora fa, verticale128 ha scritto:

Ultima domanda: ma per la gestione degli Holding Registers di cui sopra, i codici Modbus disponibili sono solo il 3 (Read Holding Registers), il 6 (Write Single Holding Register), e il 16 (Write Holding Registers), o sbaglio? Non esistono codici per la lettura/scrittura a singolo bit, come quelli utilizzabili per le altre aree Modbus (Coils e Discrete Inputs)?

Da quanto riporta la documentazione online sul Modbus, sembra di no:

 

<<You cannot read just one bit from a holding register. There is no way to do that - Modbus protocol simply does not provide that function. You must read all 16 bits, and then test the individual bit you are interested in for true or false (1 or 0).>>

 

Grazie. Saluti.

Solo 3 6 e 16 in questo fantastico plc.

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...