Vai al contenuto

Come mantenere in backup il valore di un counter

Home Forum Controllori SlimLine e Netsyst (LogicLab) Come mantenere in backup il valore di un counter

Stai visualizzando 6 post - dal 1 a 6 (di 6 totali)
  • Autore
    Post
  • #35401
    Alessandro
    Partecipante

    Volevo chiedere una cosa, forse scontata, sui Counter CTU dello SlimLine. Come è possibile mantenere il valore di CTU.CV memorizzato in modo da mantenerlo se spengo e accendo la macchina ?

    Ho fatto un pò di prove, ma senza risultato, ogni volta che spengo e riaccendo mi resetta a 0 il CTU.CV.

    #37738
    Sergio Bertana
    Amministratore del forum

    Se usi il blocco funzione CTU, Counter Up per gestire il counter non puoi mantenere in backup il valore di conteggio CV. Esiste una soluzione molto semplice per realizzare contatori che mantengono il loro valore di conteggio allo spegnimento, basta utilizzare l’operando ADD, ecco un semplice ramo ladder che ne mostra l’uso.

    In pratica viene abilitato l’operando ADD sul fronte di attivazione di un ingresso digitale tramite l’operando -]P[-, ad ogni fronte di attivazione viene sommato 1 al valore della variabile Counter ed il risultato è salvato nella variabile Counter. Basterà definire la variabile con l’attributo RETAIN oppure allocarla nella memoria ritentiva (A partire da DB 100.2048) per mantenere il valore memorizzato allo spegnimento, allego un progetto per il download.

    #37739
    Sergio Bertana
    Amministratore del forum

    Aggiungo ricordando che di questi rami è possibile farne tutti quelli che si necessitano, in questo post un esempio di più contatori con acquisizione del loro valore da Modbus.

    #37743
    Alessandro
    Partecipante

    Grazie mille…. però questo è un workaround, Ok, modifico il programma.

    Se io volessi utilizzare CTU, usando una variabile di appoggio di backup, posso caricare il valore della variabile di appoggi in CTU.CV al primo loop ? Che funzione/sistema uso per gestire il primo loop ?

    #37744
    Sergio Bertana
    Amministratore del forum

    Il blocco funzione CTU è stato fatto in accordo alle specifiche della IEC61131, ma è sicuramente possibile modificarlo per ottenere quello che si desidera. Il blocco funzione CTU è realizzato in ST ecco il codice sorgente.

      IF (CU AND NOT CUMemo) THEN
        IF (CV < PV) THEN CV:=CV+1; END_IF;
      END_IF;

      CUMemo:=CU; (* CU status memo *)
      IF R THEN CV:=0; END_IF; (* Reset command *)
      Q:=(CV >= PV); (* Output management *)

    In merito alla tua domanda, non è possibile in nessun modo presettare il valore di CTU.CV in quanto si tratta di una variabile di uscita dal FB.

    #37745
    Sergio Bertana
    Amministratore del forum

    A scopo didattico ecco il sorgente ST di un nuovo FB che prevede anche il preset, l’ho chiamato CTUPreset.

      IF (CU AND NOT CUMemo) THEN
          IF (CV < PV) THEN CV:=CV+1; END_IF;
      END_IF;

      CUMemo:=CU; (* CU status memo *)
      IF P THEN CV:=Preset; END_IF; (* Preset command *)
      IF R THEN CV:=0; END_IF; (* Reset command *)
      Q:=(CV >= PV); (* Output management *)

    Come vedi ho aggiunto due ingressi P (BOOL) e Preset (UDINT) che permettono su comando di presettare il valore in uscita. Inoltre già che ho modificato ho anche modificato le variabili di conteggio in UDINT, in questo modo il counter può contare fino a 4294967295.

    Allego stampa e progetto sorgente, come vedi nel programma LD al primo loop forzo il preset del CTU con la variabile Pieces che è anche la variabile valorizzata con il valore CV del CTU. Naturalmente questa variabile andrà allocata in una zona RETAIN.

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