Vai al contenuto

Rispondi a: Problema con funzione SysVarsnprintf

Home Forum Programmazione IEC 61131 (LogicLab) Problema con funzione SysVarsnprintf Rispondi a: Problema con funzione SysVarsnprintf

#38957
Sergio Bertana
Amministratore del forum

Non è un tuo errore ma è una anomalia del compilatore LogicLab, il problema tira in ballo la gestione dell’immagine di processo degli I/O digitali. Questo argomento lo abbiamo già trattato in altri topics (Vedi questoquesto e questo).

In pratica tu stai gestendo correttamente la funzione SysVarsnprintf in una task in Back mentre gli I/O sono automaticamente acquisiti in Slow, quindi tu visualizzi non l’ingresso reale ma la sua immagine di processo ricreata automaticamente da LogicLab prima di eseguire i programmi della task Slow. Il bug è che il compilatore avendo tu utilizzato l’attributo ADR per la variabile non si accorge del’uso della stessa ed in una eccessiva ottimizzazione non esegue l’aggiornamento della immagine di processo lasciando la variabile sempre a 0.

Workaround, puoi semplicemente dichiarare una variabile Dummy di tipo BOOL ed aggiungere nel tuo programma in Back il codice

IF (FALSE) THEN Dummy:=PresenzaTensione; END_IF;

Se hai piu ingressi, nella IF puoi copiare ogni ingresso sempre su Dummy, tanto non conta che la copia sia eseguita (La IF non viene mai eseguita) ma il compilatore “vede” l’utilizzo della variabile allocata sull’ingresso reale e provvede automaticamente ad aggiornare l’immagine di processo. Provvedo ad informare Axel del problema.