Home › Forum › Programmazione IEC 61131 (LogicLab) › Acquisizione encoder e gestione del valore di quota
- Questo topic ha 4 risposte, 3 partecipanti ed è stato aggiornato l'ultima volta 9 anni, 5 mesi fa da Sergio Bertana.
-
AutorePost
-
Giugno 7, 2011 alle 8:56 am #35026PierluigiPartecipante
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 ?
Giugno 7, 2011 alle 9:00 am #36774Sergio BertanaAmministratore del forumPer 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_VARVAR_OUTPUT
Quote : UDINT; { DE:”Quote” }
END_VARVAR
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 *)Luglio 12, 2014 alle 8:31 am #38326Sergio BertanaAmministratore del forumAggiungo un link a questo topic dove viene trattato lo stesso argomento in maniera più esaustiva.
Ottobre 29, 2014 alle 8:13 am #38480AnonimoInattivoSono 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.
Ottobre 29, 2014 alle 8:16 am #38481Sergio BertanaAmministratore del forumPartendo 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).
-
AutorePost
- Devi essere connesso per rispondere a questo topic.