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.