L’errore indica che una variabile a 32 bit è stata allocata in memoria ad un indirizzo non allineato a 32 bit.
Ricordo che nei sistemi con architettura ARM le variabili a 16 bit vanno allocate ad indirizzi divisibili per 2, e le variabili a 32 bit vanno allocate ad indirizzi divisibili per 4. Nelle variabili automatiche ci pensa il linker ad allocare correttamente le variabili, ma nelle variabili allocate nella DB100 l’allocazione deve essere curata dal programmatore.
Se guardi la tabella di allocazione variabili trovi alcuni errori:
Abil_Antigelo AT %MX100.2151 : REAL; (* [42051] valore manuale temperatura antigelo *)
Val_Bruciatore_C1 AT %MR100.2152 : REAL; (* [41076] valore percentuale funzionamento bruciatore *)
Val_man_temp_mandata AT %MR100.2166 : REAL; (* [41083) valore manuale temp mandata *)
Val_man_temp_antigelo AT %MR100.2170 : REAL; (* [41085) valore manuale temp antigelo *)
La variabile Abil_Antigelo è di tipo REAL quindi và dichiarata %MR100.xxxx e l’indirizzo 2151 non è divisibile per 4. Inoltre essendo di tipo REAL occupa 4 bytes quindi và a sovrapporsi alla variabile Val_Bruciatore_C1. Anche l’indirizzo Modbus [42051] dichiarato come descrizione è errato ricordo che và utilizzato l’indirizzo di allocazione diviso per 2 a cui và sommato 40000.
Le variabili Val_man_temp_mandata e Val_man_temp_antigelo non sono allocate ad indirizzi divisibili per 4.