CTUD
Contador crescente/decrescente: a cada transição de subida de CU incrementa CV (até o máximo do tipo INT) e a cada transição de subida de CD decrementa CV (até zero), ativando QU quando CV for maior ou igual a PV e QD quando CV for menor ou igual a zero. É um bloco de função (mantém estado entre scans; requer instância).
Biblioteca: IEC_STD · Namespace: IEC · Tipo: bloco de função
Bloco de função
CTUD
+-------------+
BOOL ---|CU QU|--- BOOL
| |
BOOL ---|CD QD|--- BOOL
| |
BOOL ---|R CV|--- INT
| |
BOOL ---|LD |
| |
INT ---|PV |
+-------------+
A contagem é bidirecional sobre o valor corrente CV: transições de subida em CU incrementam e transições de subida em CD decrementam. A entrada LD (preset) carrega CV com PV e a entrada R (reset) zera CV. A saída QU acompanha a condição CV >= PV (limite superior atingido) e QD a condição CV <= 0 (limite inferior atingido).
Como bloco de função da IEC 61131-3, CTUD é chamado sem prefixo de namespace (CTUD(...)).
Parâmetros
Nome |
Direção |
Tipo |
Padrão |
Faixa / Unidade |
Descrição |
|---|---|---|---|---|---|
CU |
IN |
BOOL |
FALSE |
— |
Entrada de contagem crescente (avaliada por transição de subida). |
CD |
IN |
BOOL |
FALSE |
— |
Entrada de contagem decrescente (avaliada por transição de subida). |
R |
IN |
BOOL |
FALSE |
— |
Reset: quando ativa, faz |
LD |
IN |
BOOL |
FALSE |
— |
Preset (load): quando ativa, faz |
PV |
IN |
INT |
0 |
— |
Valor de preset comparado com |
QU |
OUT |
BOOL |
FALSE |
— |
Ativa quando |
QD |
OUT |
BOOL |
FALSE |
— |
Ativa quando |
CV |
OUT |
INT |
0 |
— |
Valor corrente da contagem. |
Observações
CUeCDsão avaliadas por transição de subida (edge), não por nível.LDeRtêm prioridade sobre a contagem no scan em que são ativadas.
Ver também
Exemplo
Clique aqui para baixar a tabela de variáveis
Código ST
VAR
pulse_up : BOOL; (* evento de contagem crescente *)
pulse_dn : BOOL; (* evento de contagem decrescente *)
preset : BOOL; (* preset do contador *)
reset : BOOL; (* reset do contador *)
my_counter : CTUD; (* Instância do bloco CTUD *)
END_VAR
(* Ativação da instância do bloco *)
my_counter(CU := pulse_up, CD := pulse_dn, R := reset, LD := preset, PV := 100);
IF my_counter.QU THEN (* testa se atingiu o valor da contagem *)
(* trata contagem atingida *)
;
END_IF;