Problemi di compilazione
Home › Forum › Informazioni ambiente di sviluppo LogicLab › Problemi di compilazione
- Questo topic ha 5 risposte, 4 partecipanti ed è stato aggiornato l'ultima volta 4 anni, 6 mesi fa da
Sergio Bertana.
-
AutorePost
-
Ottobre 30, 2018 alle 10:27 am #45721
Paolo
PartecipanteSe compilo la mia applicazione che utilizza il FB FileMemoryDump con Logiclab 4.0+libreria eLLabLogLib_B200 ottengo il risultato:
compilazione: OK.
compilazione con simulatore attivato:FileMemoryDump(286) – error G1546: Accumulator => Converting a number into a string
FileMemoryDump(286) – error G0057: JMPCN => Boolean operand requiredCon Logiclab 4.0+libreria eLLabLogLib_B310 ottengo il risultato:
compilazione: OK.
compilazione con simulatore attivato: errore ma senza descrizione dell’errore.Con Logiclab 5.0+libreria eLLabLogLib_B200 ottengo il risultato:
\Program Files (x86)\Elsist\LogicLab\Libraries\eLLabLogLib_B200.plclib(286) – error G1799: $$Accumulator$$ => Converting a string into a number
Con Logiclab 5.0+libreria eLLabLogLib_B310:
DEVO MODIFICARE IL CODICE PER RISPETTARE DELLE RESTRIZIONI NELLA DICHIARAZIONE DEI PUNTATORI.
esito compilazione: OK.
esito compilazione con simulatore attivato:\Program Files (x86)\Elsist\LogicLab5\Libraries\eLLabLogLib_B310.plclib(88) – error G0129: NULL => Comparison between reference and non-reference
\Program Files (x86)\Elsist\LogicLab5\Libraries\eLLabLogLib_B310.plclib(280) – error G0129: NULL => Comparison between reference and non-referenceProblemi simili si verificano utilizzando le versioni eLLabUtyLib_C040 e C060 di modbusMaster. Mi chiedo è un problema del simulatore?
Ottobre 30, 2018 alle 10:37 am #45728Sergio Bertana
Amministratore del forumNell’evolversi delle versioni di LogicLab a seguito anche di variazioni sulla specifiche IEC61131 sono state introdotte maggiori restrizioni sul controllo del codice. E può succedere che il compliatore per il target sia meno restrittivo del compilatore per il simulatore o viceversa. Ad esempio l’errore JMPCN potrebbe nascere dal codice:
IF (Var) THEN …. END_IF;
Dove Var non è un BOOL. Questo prima era accettato poi non lo è più stato. Ora non stò ad elencarti tutte le restrizioni che si sono aggiunte nel tempo. Diciamo che come buona regola è di usare sempre l’ultima versione di LogicLab con l’ultima versione delle librerie.
Ma siccome siamo fallaci, può anche essere che in alcune funzioni e/o FB di una libreria vi siano ancora condizioni che determinano la comparsa di warnings o peggio di errori in compilazione. Appena ci vengono segnalate provvediamo a risolverle.
Nota, solitamente le librerie sono testate sul target reale, può essere che nel simulatore si generino warnings ed errori che nel target non compaiono. Inoltre sul simulatore si possono utilizzare solo alcune funzioni ed FB.
Novembre 21, 2018 alle 1:08 pm #45899Alessandro Campodonico
PartecipanteBuonasera, Mi sono ritrovato con un problema simile dopo l’aggiornamento a LogicLab 5 in compilazione con il FB EMailSend, questo è l’errore che mi da in compilazione:
GESTIONE_MAIL(35) – errore G1799: $$Accumulator$$ => Conversione di una stringa in un numero
e questa è la riga di comando “incriminata”:
i:=TO_UINT(SysVarsnprintf(Subject, SIZEOF(Subject), ‘SANIBOX: %s’, STRING_TYPE, ADR(NOME_SANIBOX)));
Dove la variabile “nome_sanibox” è una variabile globale STRING 32 passata dal Pannellino HMI che mi riporta il nome dell’HMI appunto. La variabile “Subject” è una variabile string Locale nel PROGRAMMA “gestione_mail”. La variabile “i” è una INT sempre locale.
la riga di comando l’ho copiata dal vostro esempio di utilizzo del FB emailsend e adattata alle mie esigenze. Poi collego la variabile “subject” all’ingresso del FB emailsend cosi’
MAIL.Subject:=ADR(Subject);
Quello che vorrei ottenere è nelle email che manda il sistema, la parte del oggetto sia SANIBOX: “NOME_SANIBOX” cosi in base al nome che imposto sulle varie macchine avrò delle email divise nell’oggetto per nome.
Con LogicLab 4 tutto funzionava.
Novembre 21, 2018 alle 1:18 pm #45905Sergio Bertana
Amministratore del forumCome dicevo prima sono state introdotte maggiori restrizioni sul controllo del codice, nel tuo caso il prototipo della funzione SysVarsnprintf (Lo vedi posizionando il mouse sul nome funzione) è:
(@USINT, UDINT, STRING, USINT, UDINT)
Quindi il primo parametro deve essere un indirizzo, ora passando l’oggetto Subject con LogicLab4 visto che si trattava di una variabile stringa considerava per default il suo indirizzo, ora lo devi specificare. Quindi devi scrivere:
i:=TO_UINT(SysVarsnprintf(ADR(Subject), SIZEOF(Subject), ‘SANIBOX: %s’, STRING_TYPE, TO_UDINT(ADR(NOME_SANIBOX))));
Ottobre 7, 2020 alle 8:32 am #57827Marcooo
PartecipanteCompilo il mio programma e mi visualizza questo errore:
HWgHTemp485.File – error A4108: eFILEP => Base object not found
Quale significato ha?
Ottobre 7, 2020 alle 8:42 am #57830Sergio Bertana
Amministratore del forumCon il passaggio alla versione XUnified (Vedi articolo) abbiamo modificato i nomi di alcuni oggetti (Funzioni e FB) e di alcune dichiarazioni di tipo, nel tuo caso il file pointer da FILEP è diventato eFILEP.
Tu probabilmente stai realizzando un programma per un sistema XTarget12 ma stai utilizzando il FB HWgHTemp485 preso dalla libreria eLLabUtyLib della nuova distribuzione di LogicLab che è già convertita per l’utilizzo su sistemi XUnified.
Abbiamo previsto per questi casi e per tutti i casi in cui si desideri utilizzare gli esempi del manuale on line sui sistemi XTarget12 una libreria apposita, devi inserire nel tuo progetto la libreria eLLabXTargetAdjLib.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.