Vai al contenuto

Errore “eGetBYTE => Funzione sconosciuta” in compilazione

Home Forum Programmazione IEC 61131 (LogicLab) Errore “eGetBYTE => Funzione sconosciuta” in compilazione

Stai visualizzando 7 post - dal 1 a 7 (di 7 totali)
  • Autore
    Post
  • #68346
    Stefano
    Partecipante

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

    #68377
    Sergio Bertana
    Amministratore del forum

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

    #68378
    Stefano
    Partecipante

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

    #68382
    Sergio Bertana
    Amministratore del forum

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

    #68383
    Stefano
    Partecipante

    Risolto 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

    #68389
    Sergio Bertana
    Amministratore del forum

    Mi 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));
    #68455
    George
    Partecipante

    I think i solved the problem by upgrading the firmware to SFW198E060 (Pck051b060).

    What is difference between Pck051b060 and PCK054A010?

Stai visualizzando 7 post - dal 1 a 7 (di 7 totali)
  • Devi essere connesso per rispondere a questo topic.