Errore “eGetBYTE => Funzione sconosciuta” in compilazione
Home › Forum › Programmazione IEC 61131 (LogicLab) › Errore “eGetBYTE => Funzione sconosciuta” in compilazione
- Questo topic ha 6 risposte, 3 partecipanti ed è stato aggiornato l'ultima volta 2 anni, 6 mesi fa da
George.
-
AutorePost
-
Ottobre 25, 2022 alle 3:55 pm #68346
Stefano
PartecipanteHo installato l’ultima versione di LogicLab e fatto un test su un piccolo progetto precedentemente compilato.
Il progetto utilizzava delle funzioni di conversione data/ora che però ho riscritto con le nuove logiche senza utilizzare la eLLabDTimeAdjLib. Alla compilazione però mi da l’errore
XUnifiedLibInit(6) – errore S1305: eGetBYTE => Funzione sconosciuta
Sembrerebbe qualcosa di interno alla eLLabXUnified12Lib.
Ottobre 26, 2022 alle 2:58 pm #68377Sergio Bertana
Amministratore del forumTra le varie novità introdotte con l’uscita della versione 5.22.x.xx di LogicLab è stato introdotta la definizione PVOID per i puntatori. Si utilizza per definire i puntatori che possono indirizzare qualsiasi tipo di variabile.
Nella libreria eLLabCommonLib poter accedere ai diversi tipi di variabili puntate da un puntatore PVOID sono state definite funzioni specifiche (Vedi manuale).
Dall’errore credo che il tuo problema sia il non avere inserito la libreria eLLabCommonLib nel progetto.
Ottobre 26, 2022 alle 2:59 pm #68378Stefano
PartecipanteHo eseguito il comando “Progetto -> Aggiorna sistema corrente” ed in automatico si è aggiunta la libreria eLLabCommonlib.
Ora non ho più quell’errore, ma non funzionano più le assegnazioni con puntatore (es: @Ptr:=Ch;) Il programma di test è una versione leggermente modificata di “LogicLab (Ptp116, ST_SerialDataReceive) Semplice protocollo seriale”, modificata il tanto che basta a fare il parsing della stringa con una logica diversa.
Le operazioni di accesso con i puntatori sono esattamente le stesse non toccate.
Ottobre 26, 2022 alle 3:31 pm #68382Sergio Bertana
Amministratore del forumIl programma che citi (Si trova in questo articolo) non era ancora stato corretto, quindi il pointer Ptr definito come @BYTE, in realtà punta ad una variabile stringa RxTxBuf, e nel tuo progetto probabilmenti hai la flag Project->Option->Code Generation->Strict pointers check attiva. Con la versione 5.22 di LogicLab il controllo sui pointer è più rigoroso e quindi genera errore.
Se togli come indicato in questo articolo la spunta sul controllo dei pointers il programma verrà compilato.
Ho comunque provveduto a modificare l’esempio convertendo Ptr in un pointer PVOID, ed utilizzando le funzioni di gestione void pointer.
Ottobre 26, 2022 alle 3:31 pm #68383Stefano
PartecipanteRisolto anche il problema dei puntatori, ora mi rimane questo, ho definito la variable
CNVDatetime : LDATETIMESTRUCT;
Usata come da esempio “LogicLab (Ptp116, ST_DateTimeOperators)”:
CNVDatetime:=TO_LDATE_AND_TIME(SysDateGetNs());
La compilazione riporta:
ST_SerialDataReceive(192) – warning G0065: CNVDatetime => Il tipo destinazione può essere troppo piccolo per contenere il risultato
ST_SerialDataReceive(192) – errore G0043: Module: armcodegen.cpp, line: 6299 => ERRORE INTERNO DEL GENERATORE DI CODICE
Ottobre 26, 2022 alle 4:04 pm #68389Sergio Bertana
Amministratore del forumMi sembra che non hai seguito bene l’esempio che citi, nell’esempio viene eseguita questa operazione:
LBDTime[0]:=TO_LDATE_AND_TIME(SysDateGetNs()); //Long date and time buffer
Ma la variabile di appoggio LBDTime[0] è di tipo LDATE_AND_TIME e non LDATETIMESTRUCT.
Per valorizzare una variabile LDATETIMESTRUCT (Che è una struttura dati) devi eseguire come nell’esempio l’operazione:
i:=SPLIT_DT(BDTime[0], ADR(LDTime[1].Year), ADR(LDTime[1].Month), ADR(LDTime[1].Day), ADR(LDTime[1].Hours), ADR(LDTime[1].Minutes), ADR(LDTime[1].Seconds));
Ottobre 29, 2022 alle 12:24 am #68455George
PartecipanteI think i solved the problem by upgrading the firmware to SFW198E060 (Pck051b060).
What is difference between Pck051b060 and PCK054A010?
-
AutorePost
- Devi essere connesso per rispondere a questo topic.