Tutta la data block 100 è disponibile al programma utente, non vi sono zone utilizzate dal sistema. Il problema che tu riscontri è un problema che è stato risolto con l’ultima versione di LogicLab la Vers. 2.3.0 scaricabile dal sito.
Cerco di spiegarti il problema, la memoria DB100 a partire dall’indirizzo 2048 fino alla fine (Indirizzo 4095) è utilizzata come memoria ritentiva, quindi i valori presenti in questa area non vengono mai azzerati. Le variabili BOOL utilizzano un byte (8 Bit) di memoria, nel momento in cui tu allochi una variabile BOOL in questa zona, stai in realtà utilizzando una locazione di memoria che in un programma precedente era utilizzata da una variabile di tipo diverso (USINT, UINT, ecc.) e quindi contiene un valore.
Nel debug LogicLab quando visualizza e/o scrive variabili BOOL controlla solo il bit 0 del byte di allocazione mentre nella esecuzione del programma viene controllato l’intero byte. Ecco quindi che se la locazione contiene un valore pari (2, 4, 6, ecc) da debug viene considerata FALSE ma nel programma è considerata TRUE. E anche se ne modifichi il valore da debug vai ad agire solo sul bit 0 quindi puoi portarla ad esempio dal valore 2 al valore 3 ma non puoi mai azzerarla.
La soluzione corretta è eseguire un azzeramento dell’intera memoria tampone, questa operazione è possibile da Telnet (Vedi Manuale riferimento comandi Telnet CPU SlimLine) con i comandi.
PLCCommand -stop, arresta esecuzione programma PLC
PLCCommand -cm, esegue la cancellazione dell’intera memoria