Vai al contenuto
PLC Forum


Area length error in FB 641


Messaggi consigliati

Inserito:

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?

image.png.b533c33601ad2474944928524778ed6c.png

 

Se dall'OB "tolgo" il blocco che mi gestisce la comunicazione, la CPU torna operativa e l'errore si resetta.

 


Inserita:

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

Inserita:
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

image.thumb.png.9483ba67e61676a63800bcc8c78bc538.png

Inserita: (modificato)

Magari nei parametri di interfaccia (Input,Output, InOut) dai al  FB641 una area dati errata.

Io scommetto sul DATA_PTR .

Modificato: da drn5
Inserita:
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:
Il 05/07/2025 alle 15:51 , Elettro19 ha scritto:

image.png.b533c33601ad2474944928524778ed6c.png

 

 

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.

Inserita:
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:

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.

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

image.thumb.png.0344ac245c39018da79572f0fc1dbc88.png

Viene richiamato in tutti questi segmenti, 9 richieste..

di seguito un esempio...

image.png.ed231015e688232a480ef58f8f3439d7.png

image.png.ff723cb210cf93d46e89997acb50a60a.png

dina_supertramp
Inserita:

Immagino stai usando un modulo di comunicazione CM PtP giusto?

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

Inserita:

image.png.0f0d05db22226e2ba04216d0baf021e2.png

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:

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:

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.

Inserita:
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:

image.thumb.png.66b121f3fe66be8b816025f55ca52dc4.png

ma a quanto pare è iniziato a non piacergli...

dina_supertramp
Inserita:
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.

Inserita:
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:

Hai una mappa dei registri del device che devi leggere scrivere? che dispositivo è? Magari riusciamo ad aiutarti.

 

Inserita:
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!!!!!!!!

image.png.7763e730c0be6156edbff8325cca76be.pngimage.png.dc85005cded41adf91f8dad1535315b0.png

 

dina_supertramp
Inserita: (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: da dina_supertramp
Inserita:

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

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