Elettro19 Inserito: 5 luglio Segnala Inserito: 5 luglio Ciao a tutti, ho la CPU in errore con il seguente errore:Area length error in FB 641 . Premesso che qualche giorno fa ho configurato una comunicazione RS485 tra PLC e dispositivo. Ora dopo qualche giorno, avendo spento e riaccesso il quadro elettrico è apparso l'errore. Prima funzionava tutto senza problemi. A Qualcuno è successo lo stesso problema? Se dall'OB "tolgo" il blocco che mi gestisce la comunicazione, la CPU torna operativa e l'errore si resetta.
drn5 Inserita: 5 luglio Segnala Inserita: 5 luglio Stai scrivendo in un'area dati che non esiste. Tipo indirizzi dinamicamente un vettore con un indice oltre la sua definizione, oppre con PUT o GET scrivi o leggi tramite puntatore ad un area (di un DB?) oltre le dimensioni del DB stesso... sono i primi due esempi che mi saltano alla mente..
Elettro19 Inserita: 6 luglio Autore Segnala Inserita: 6 luglio 18 ore fa, drn5 ha scritto: Stai scrivendo in un'area dati che non esiste. Tipo indirizzi dinamicamente un vettore con un indice oltre la sua definizione, oppre con PUT o GET scrivi o leggi tramite puntatore ad un area (di un DB?) oltre le dimensioni del DB stesso... sono i primi due esempi che mi saltano alla mente.. grazie della risposta. No non mi sembra di far nulla di tutto ciò. L FB641 è il Modbus_Master che uso per la comunicazione RTU
drn5 Inserita: 6 luglio Segnala Inserita: 6 luglio (modificato) Magari nei parametri di interfaccia (Input,Output, InOut) dai al FB641 una area dati errata. Io scommetto sul DATA_PTR . Modificato: 6 luglio da drn5
Elettro19 Inserita: 6 luglio Autore Segnala Inserita: 6 luglio 1 ora fa, drn5 ha scritto: Magari nei parametri di interfaccia (Input,Output, InOut) dai al FB641 una area dati errata. Io scommetto sul DATA_PTR . provo ad andare ancora in simulazione e verificare.Spero tanto tu abbia ragione,non so più che santi chiamare..
dina_supertramp Inserita: 7 luglio Segnala Inserita: 7 luglio Il 05/07/2025 alle 15:51 , Elettro19 ha scritto: Stai accendendo ad un area che non esiste nel DB16, tramite l'FB 641. area : DB area, addr: 16 come detto da @drn5 quasi sicuramente hai appoggiato all'FB641, un area del DB 16 che non esiste, oppure che esiste ma è più corta di quello che l'FB641 ci va a scrivere/leggere.
Elettro19 Inserita: 7 luglio Autore Segnala Inserita: 7 luglio 2 ore fa, dina_supertramp ha scritto: Stai accendendo ad un area che non esiste nel DB16, tramite l'FB 641. area : DB area, addr: 16 come detto da @drn5 quasi sicuramente hai appoggiato all'FB641, un area del DB 16 che non esiste, oppure che esiste ma è più corta di quello che l'FB641 ci va a scrivere/leggere. Grazie ma non è così,nel senso che l'errore si ripete con vari indirizzi.. addr:16..adrr:0 ecc ecc. L?FB 641 è il Modbus_Master della comunicazione. non ci capisco più niente...
dina_supertramp Inserita: 7 luglio Segnala Inserita: 7 luglio Quante volte hai richiamato l'FB 641? Metti uno screen di dove viene richiamato l'FB641, che si vedano tutti gli ingressi e tutte le uscite appoggiate.
Elettro19 Inserita: 7 luglio Autore Segnala Inserita: 7 luglio 8 minuti fa, dina_supertramp ha scritto: Quante volte hai richiamato l'FB 641? Metti uno screen di dove viene richiamato l'FB641, che si vedano tutti gli ingressi e tutte le uscite appoggiate. Viene richiamato in tutti questi segmenti, 9 richieste.. di seguito un esempio...
dina_supertramp Inserita: 7 luglio Segnala Inserita: 7 luglio Prova a seguire questa guida: Master-Slave Communication via a CM PtP using the Modbus RTU Protocol - ID: 68202723 - Industry Support Siemens
dina_supertramp Inserita: 7 luglio Segnala Inserita: 7 luglio Immagino stai usando un modulo di comunicazione CM PtP giusto?
Elettro19 Inserita: 7 luglio Autore Segnala Inserita: 7 luglio 1 ora fa, dina_supertramp ha scritto: Immagino stai usando un modulo di comunicazione CM PtP giusto? ciao sto usando un s7 1200 con una scheda CB 1241 per comunicare in RS 485.
dina_supertramp Inserita: 7 luglio Segnala Inserita: 7 luglio Tutorial - Come realizzare Comunicazione MODBUS RTU con S7-1200 con esempio applicativo - Domenico Madeo
Elettro19 Inserita: 7 luglio Autore Segnala Inserita: 7 luglio Forse ho risolto, andando a cambiare da 1 a 2 il DATA_LEN di tutti i richiami, la CPU non è più in errore ( ora sono in simulazione ). LA cosa strana che vi giuro che quando ci ho lavorato erano tutti su 1 e funzionava senza errori. Vi aggiorno appena vado da Cliente. Grazie infinite del supporto!!!!!
dina_supertramp Inserita: 7 luglio Segnala Inserita: 7 luglio Avevi dichiarato una lunghezza dei dati a cui accedere sbagliata.... Come da manuale dell'istruzione: Data Length: Specifies the number of bits or words to be accessed in this request. See the Modbus functions table below for valid lengths. Devi fare riferimento alla tabella che trovi qui: Modbus_Master (Communicate using SIPLUS I/O or the PtP port as Modbus RTU master) instruction • S7-1200 Programmable controller • Reader • TIA Portal Information System Per capire come impostare correttamente il DATA_LEN sulla base del MODE usato (il mode riferisce ai codici MODBUS FUNCTION). Table 3. Modbus functions MODE Modbus function Data length Operation and data Modbus address 0 01 1 to 2000 1 to 1992 1 Read output bits: 1 to (1992 or 2000) bits per request 1 to 9999 0 02 1 to 2000 1 to 1992 1 Read input bits: 1 to (1992 or 2000) bits per request 10001 to 19999 0 03 1 to 125 1 to 124 1 Read Holding registers: 1 to (124 or 125) words per request 40001 to 49999 or 400001 to 465535 0 04 1 to 125 1 to 124 1 Read input words: 1 to (124 or 125) words per request 30001 to 39999 104 04 1 to 125 1 to 124 1 Read input words: 1 to (124 or 125) words per request 00000 to 65535 1 05 1 Write one output bit: One bit per request 1 to 9999 1 06 1 Write one holding register: 1 word per request 40001 to 49999 or 400001 to 465535 1 15 2 to 1968 2 to 1960 1 Write multiple output bits: 2 to (1960 or 1968) bits per request 1 to 9999 1 16 2 to 123 2 to 122 1 Write multiple holding registers: 2 to (122 or 123) words per request 40001 to 49999 or 400001 to 465535 2 15 1 to 1968 2 to 1960 1 Write one or more output bits: 1 to (1960 or 1968) bits per request 1 to 9999 2 16 1 to 123 1 to 122 1 Write one or more holding registers: 1 to (122 or 123) words per request 40001 to 49999 or 400001 to 465535 11 11 0 Read the slave communication status word and event counter. The status word indicates busy (0 – not busy, 0xFFFF - busy). The event counter is incremented for each successful completion of a message. Both the DATA_ADDR and DATA_LEN operands of the Modbus_Master instruction are ignored for this function. 80 08 1 Check slave status using data diagnostic code 0x0000 (Loopback test – slave echoes the request) 1 word per request 81 08 1 Reset slave event counter using data diagnostic code 0x000A 1 word per request 3 to 10, 12 to 79, 82 to 255 Reserved
dina_supertramp Inserita: 7 luglio Segnala Inserita: 7 luglio Il "codice funzione modbus", l'indirizzo di partenza, e la lunghezza dei dati da scrivere vanno di pari passo. 😉 Li devi impostare in base a ciò che devi leggere/scrivere.
Elettro19 Inserita: 7 luglio Autore Segnala Inserita: 7 luglio 1 ora fa, dina_supertramp ha scritto: Il "codice funzione modbus", l'indirizzo di partenza, e la lunghezza dei dati da scrivere vanno di pari passo. 😉 Li devi impostare in base a ciò che devi leggere/scrivere. Beh ma io avevo messo cosi: ma a quanto pare è iniziato a non piacergli...
dina_supertramp Inserita: 7 luglio Segnala Inserita: 7 luglio 19 minuti fa, Elettro19 ha scritto: ma a quanto pare è iniziato a non piacergli... Strano.... Non è che può andare per un po' e poi smettere...sarebbe da indagare più a fondo se hai tempo, anche per tua istruzione che non fa mai male. Con DATA_LEN = 2 vuol dire che stai scrivendo due registri a partire dal registro 40004 (come nello screen che hai allegato), cad. richiesta.
Elettro19 Inserita: 7 luglio Autore Segnala Inserita: 7 luglio 1 ora fa, dina_supertramp ha scritto: Strano.... Non è che può andare per un po' e poi smettere...sarebbe da indagare più a fondo se hai tempo, anche per tua istruzione che non fa mai male. Con DATA_LEN = 2 vuol dire che stai scrivendo due registri a partire dal registro 40004 (come nello screen che hai allegato), cad. richiesta. son passato ora dal cliente. NON va comunque. Perchè lo strumento slave la lunghezza è di 1 e non accetta 2.
dina_supertramp Inserita: 8 luglio Segnala Inserita: 8 luglio Hai una mappa dei registri del device che devi leggere scrivere? che dispositivo è? Magari riusciamo ad aiutarti.
Elettro19 Inserita: 8 luglio Autore Segnala Inserita: 8 luglio 47 minuti fa, dina_supertramp ha scritto: Hai una mappa dei registri del device che devi leggere scrivere? che dispositivo è? Magari riusciamo ad aiutarti. Il dispositivo è un Eurotherm 2604. Termoregolatore. I Registi a cui devo puntare li ho presi dal software dello strumento. MA ad esempio da manuale c'è l'indirizzo 0013 che io dovrei leggere. O da softeware il 351-352-353 per il PID. GRAZIE MILLE!!!!!!!!
dina_supertramp Inserita: 8 luglio Segnala Inserita: 8 luglio (modificato) Se dovessi leggere l'indirizzo 00013 farei cosi: DATA_ADDR = 00013 (indirizzo) DATA_LEN = 1 (mi sembra una word, perché l'indirizzo dopo parte dal 00014. In teoria la lunghezza o comunque il tipo di dato da cui poi capisci la lunghezza, da qualche parte deve essere scritto! Cos'è un intero, un reale in virgola mobile?) MODE = 104 (sempre presumendo che devi leggere una word) (vedi tabella che ho allegato --> Read input words: 1 to (124 or 125) word per request. Modbus address 00000 to 65535). Modificato: 8 luglio da dina_supertramp
Elettro19 Inserita: lunedì alle 20:13 Autore Segnala Inserita: lunedì alle 20:13 Ho riscritto la parte di programma che gestisce la comunicazione RS485. In simulaizone la CPU non è in errore, mercoledì sarò dal Cliente e provo. Non Ho cambiato nie nte rispetto alla "vecchia" versione.Vi aggiorno! Buona serata
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