Acquisizione encoder e gestione del valore di quota

Attenzione !I messaggi sul forum potrebbero essere modificati dal nostro staff. La data e l'ora dei messaggi potrebbe non essere quella di invio ma quella di moderazione da parte dello staff. Grazie per l'attenzione.

Home Forum Programmazione IEC 61131 (LogicLab) Acquisizione encoder e gestione del valore di quota

Questo argomento contiene 4 risposte, ha 3 partecipanti, ed รจ stato aggiornato da  Sergio Bertana 4 anni, 3 mesi fa.

Stai vedendo 5 articoli - dal 1 a 5 (di 5 totali)
  • Autore
    Articoli
  • #35026

    Pierluigi
    Membro

    Devo acquisire un encoder con il blocco funzione SysGetEncoder, get encoder input, ma devo gestire un valore di quota che è superiore al valore massimo di 65535 (16 bits) ritornati dal blocco funzione.

    Inoltre vorrei se fosse possibile eseguire un preset del valore di quota su comando logico, avete un blocco funzione adatto allo scopo ?

    #36774

    Sergio Bertana
    Amministratore del forum

    Per gestire valori di quota con valori superiori a 16 bits, occorre gestire il contagiri dell’encoder, in pratica ad ogni roll-over della lettura quota encoder occorre aggiungere o sottrarre il valore di 65536.

    Attualmente non vi è un FB specifico, ma ne ho realizzato uno appositamente per questa richiesta, il FB oltre a gestire il contagiri, permette anche di effettuare su comando logico il preset di un valore di quota. Riporto il sorgente ST del blocco funzione ed il programma completo per il download.

        VAR_INPUT
        Preset : BOOL; { DE:”Preset command” }
        EQuote : UINT; { DE:”Encoder quote” }
        PQuote : UDINT; { DE:”Preset quote” }
        END_VAR

        VAR_OUTPUT
        Quote : UDINT; { DE:”Quote” }
        END_VAR

        VAR
        QMemo : UINT; { DE:”Quote memo” }
        Space : INT; { DE:”Spazio percorso” }
        END_VAR

        { CODE:ST }
        (* Calcolo spazio percorso in tacche. *)

        Space:=TO_INT(EQuote-QMemo); (* Spazio percorso *)
        QMemo:=EQuote; (* Quote memo *)
        IF (Space > 16#4000) THEN Space:=0-Space; END_IF;

        (* Comando preset, su attivazione quota è impostata al valore di preset. *)

        IF (Preset) THEN Space:=0; Quote:=PQuote; END_IF;
        Quote:=Quote+TO_UDINT(Space); (* Quote *)

    #38326

    Sergio Bertana
    Amministratore del forum

    Aggiungo un link a questo topic dove viene trattato lo stesso argomento in maniera più esaustiva.

    #38480

    Tiziano
    Membro

    Sono a richiedere esempio per visualizzare la quota di un encoder azzerando la quota in un determinato punto, voglio visualizzare la quota sia in positivo che in negativo su di un pannello operatore Weintek.

    #38481

    Sergio Bertana
    Amministratore del forum

    Partendo dall’esempio postato sopra, ho modificato il blocco funzione di calcolo quota per fare ritornare un valore DINT al posto di un UDINT, ed il gioco è fatto. Il valore Quote ritornato dal blocco funzione QuoteMng lo dovrai appoggiare in una variabile DINT allocata in memoria DB 100 per poterlo visualizzare sul pannello Weintek (Ecco la stampa del programma).

    Per permettere di poter memorizzare il valore di quota allo spegnimento del sistema ho inserito nel blocco funzione il parametro IQuote. In questo modo appoggiando sull’ingresso la variabile RETAIN del valore di quota si potrà alla abilitazione del blocco funzione iniziare il conteggio quota dal valore preesistente (Download programma).

Stai vedendo 5 articoli - dal 1 a 5 (di 5 totali)

Devi essere loggato per rispondere a questa discussione.