Vai al contenuto

Comportamento errato variabile BOOL allocata in DB100

Home Forum Controllori SlimLine e Netsyst (LogicLab) Comportamento errato variabile BOOL allocata in DB100

Stai visualizzando 3 post - dal 1 a 3 (di 3 totali)
  • Autore
    Post
  • #35606
    Luca Marani
    Partecipante

    Ho un problema con una variabile allocata in memoria. Se la alloco all’indirizzo MX100.3200 non mi funziona la logica, nel senso che anche se la forzo a FALSE, la logica la vede a TRUE.

    In questa area di memoria ci scrive il sistema ? Dove posso trovare una mappa delle aree di memoria utilizzate dal sistema, in modo da evitarle ?

    #38366
    Sergio Bertana
    Amministratore del forum

    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

    #38367
    Sergio Bertana
    Amministratore del forum

    Naturalmente cancellando la memoria perdi tutti i valori in backup, se vuoi risolvere velocemente il problema puoi inserire nella finestra di watch una variabile a Byte allocata allo stesso indirizzo di allocazione della tua variabile BOOL e così ne puoi settare il valore a “0” eliminando il problema (Screenshot).

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