verticale128 Inserito: 23 giugno 2020 Segnala Share Inserito: 23 giugno 2020 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 More sharing options...
max.riservo Inserita: 23 giugno 2020 Segnala Share Inserita: 23 giugno 2020 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 More sharing options...
verticale128 Inserita: 23 giugno 2020 Autore Segnala Share Inserita: 23 giugno 2020 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 More sharing options...
max.riservo Inserita: 24 giugno 2020 Segnala Share Inserita: 24 giugno 2020 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 More sharing options...
verticale128 Inserita: 24 giugno 2020 Autore Segnala Share Inserita: 24 giugno 2020 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 More sharing options...
verticale128 Inserita: 26 giugno 2020 Autore Segnala Share Inserita: 26 giugno 2020 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 More sharing options...
zanellatofabio Inserita: 26 giugno 2020 Segnala Share Inserita: 26 giugno 2020 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 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