Home › Forum › Informazioni ambiente di sviluppo LogicLab › Pop-up con Program error in compilazione
- Questo topic ha 2 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 4 anni, 5 mesi fa da Sergio Bertana.
-
AutorePost
-
Marzo 21, 2017 alle 10:57 am #36119Sergio BertanaAmministratore del forum
Segnalo un bug in LogicLab codice PCK033H500 Pacchetto installazione suite IEC61131-3 Vers. 2.5.0 (LogicLab Ver. 4.4.0.16). Nella compilazione dei progetti per i targets:
SlimLine Mps054 XTarget 12.0
SlimLine Pcb137 XTarget 12.0Se compare un Pop-up con un errore di compilazione (Screenshot):
PROGRAM ERROR Module:armcodegen.cpp Line7079
Il problema può essere legato alla definizione di lunghezza delle stringhe, in generale per evitare il problema occorre che la dimensione della stringa (Sommando 1 per il codice tappo) sia un numero divisibile per 4. Nell’esempio 802+1=803 non è divisibile per 4. Per risolvere il problema basta definire lunghezza stringa 803.
Novembre 11, 2019 alle 1:07 pm #50923RuboxPartecipanteSono incappato in un messaggio di errore come quello riportato: la linea del codice cpp differente (7978), LogicLab Rel 5.0 versione 3.0.0.0 build 17/09/2018 5.8.0.17. Controllando con Toolly i logs ho notato un warning che non riesco a risolvere. La stringa di Toolly è la seguente:
[W] SFW198 [data/ora] 6000, User program error: 9932200
Ho individuato il programma che lo genera: esegue una richiesta HTTP di tipo POST. Se commento la parte in cui uso le SysLWVarsnprintf il warning sparisce. Quello che non capisco è perché salta fuori: la stringa su cui scrivo è definita di lunghezza 255. Ci scrivo dentro massimo 100 caratteri con comando del tipo:
i:=Sysmemset(ADR(richiesta),0,SIZEOF(richiesta));
i:=SysVarsnprintf(ADR(richiesta),SIZEOF(richiesta),’dato1=%4.2f’,REAL_TYPE,ADR(rDato1));i:=SysLWVarsnprintf(ADR(richiesta),SIZEOF(richiesta),’dato2=%4.2f’,REAL_TYPE,ADR(rDato2));Ho provato a mettere la dimensione della variabile “richiesta” invece della funziona SIZEOF ma non cambia nulla. Ho provato a commentare la linea con Sysmemset (che è superflua usando come prima funzione SysVarsnprintf) e non cambia nulla: c’è sempre quel warning.
Avevo appena modificato la lunghezza di alcune stringhe da 256 a 512 e da 512 a 1024. Adesso nel dubbio ho impostato tutte le stringhe come potenza di 2 meno 1, quindi 63, 257, 1023, 511 e via dicendo (anche se è stato sufficiente impostare quella più lunga a 1023 per far scomparire il messaggio in compilazione).
Mi conferma che anche l’errore che ho avuto io può esser dovuto alle stringhe, oppure devo cercare l’errore altrove? (un’indicazione in che direzione cercare sarebbe graditissima)
Novembre 11, 2019 alle 1:13 pm #50954Sergio BertanaAmministratore del forumSi è il fastidioso BUG sulla dimensione delle stringhe, BUG che è risolto sulla versione cha stiamo testando in azienda già da un mesetto e che rilasceremo a breve.
Ora l’unico Workaround è quello di definire la lunghezza stringa con un numero divisibile per 4, (Ricordo che alla lunghezza definita viene sommato 1 per il codice tappo). In pratica definendo la variabile
MyString : STRING[ 31 ]; (* A string variable *)
Lo spazio allocato è di 32 bytes. Infatti SIZEOF(MyString) ritorna 32.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.