Vai al contenuto

Problema con FB datata su revamping di impianto

Home Forum Programmazione IEC 61131 (LogicLab) Problema con FB datata su revamping di impianto

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Autore
    Post
  • #85733
    Anonimo
    Inattivo

    Stò eseguendo il revamping di un impianto nel quale utilizzo il Vs PLC SlimLine, il PLC è connesso in ModbusTCP con un azionamento Schneider, nel programma utilizzavo un primissima versione della FB di gestione Modbus che si chiama ModbusMaster. Nella stessa azienda ci sono altre 4 macchine che usano lo stesso FB e funzionano perfettamente quindi per uniformità anche per questa macchina volevo usare questo FB.

    Compilando il progetto con l’ultima versione di LogicLab viene generato un errore di compilazione proprio quando arriva alla FB ModbusMaster, ecco l’errore:

    ModbusMaster(60) – error G0101: Str => Type mismatch in assignment

    Ho visto che nelle Vs librerie la versione più recente del FB di gestione Modbus è la ModbusMaster_v3 ma per mantenere una coerenza con le altre macchine più vecchie vorrei usare la stessa utilizzata negli altri progetti…

    Non so se è possibile però, il problema credo sia dovuto alla versione di CPU, o sbaglio?

    Ho inviato il progetto alla Vs eMail di supporto, potete verificare il problema?

    #85736
    Sergio Bertana
    Amministratore del forum

    Sia noi che Axel (Che sviluppa LogicLab) cerchiamo sempre di mantenere con gli upgrade di LogicLab la compatibilità con i progetti esistenti. Proprio per questo nella raccolta di librerie forniamo la libreria eLLabObsoleteLib che contiene tutte le versione datate dei vari ogetti rilasciati.

    Nel tuo caso stai utilizzando davvero un FB “preistorico” ma nonostante questo è presente nella raccolta, ma se non lo fosse ricordo che grazie alla funzione Import di LogicLab è sempre possibile importare oggetti (FB, funzioni, strutture, ecc) da qualsiasi progetto esistente.

    L’errore che lamenti nasce da un controllo più “stringente” che LogicLab ha introdotto sull’utilizzo dei puntatori. Nelle ultime versioni del compilatore per evitare errori quando si utilizza un puntatore ne viene controllato il tipo, quindi un puntatore non può puntare a variabili di tipo diverso dal tipo definito. Vediamo un esempio:

    VAR
        Buffer : @BYTE; (* Buffer pointer *)
        BYArray : ARRAY[0..3] OF BYTE; (* BYTE buffer *)
        UDArray : ARRAY[0..3] OF UDINT; (* UDINT buffer *)
    END_VAR
    
        Buffer:=ADR(BYArray);
        Buffer:=ADR(UDArray); //error G0271: Buffer => Invalid operation on different pointed types

    Compilando il programma avremo l’errore nella riga indicata, questo perchè si stà valorizzando il pointer Buffer con l’indirizzo di un array di tipo diverso da BYTE.

    Per risolvere il problema occorre nelle impostazioni di LogicLab menù Project->Options->Code generation togliere la spunta sul campo Strict pointers check (Screenshot). In questo modo LogicLab non controllerà più il tipo di variabili a cui il puntatore punta.

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