CTD

Contador decrescente: a cada transição de subida de CD, decrementa CV a partir do valor de preset PV até atingir zero, ativando Q 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

              CTD
        +-------------+
BOOL ---|CD          Q|--- BOOL
        |             |
BOOL ---|LD         CV|--- INT
        |             |
 INT ---|PV           |
        +-------------+

A cada transição de subida (borda de subida) da entrada CD, o valor corrente CV é decrementado. Quando LD está em TRUE, ocorre a carga (load) do preset: CV recebe o valor de PV. A saída Q fica ativa (TRUE) enquanto CV for menor ou igual a zero.

Parâmetros

Nome

Direção

Tipo

Padrão

Faixa / Unidade

Descrição

CD

IN

BOOL

FALSE

—

Entrada de contagem: cada transição de subida decrementa CV.

LD

IN

BOOL

FALSE

—

Carga (load): em TRUE, faz CV igual a PV.

PV

IN

INT

0

—

Valor de preset carregado em CV quando LD está ativo.

Q

OUT

BOOL

FALSE

—

Ativa (TRUE) quando CV é menor ou igual a zero.

CV

OUT

INT

0

—

Valor corrente da contagem.

Observações

  • O bloco mantém estado entre scans; declare uma instância própria para cada contador.

  • Enquanto LD estiver ativo, as transições de CD não decrementam CV (a carga tem prioridade).

Exemplo

Clique aqui para baixar a tabela de variáveis

Código ST

VAR
    pulse      : BOOL; (* evento de contagem *)
    reset      : BOOL; (* reset do contador *)
    my_counter : CTD;  (* Instância do bloco CTD *)
END_VAR

(* Exemplo de ativação do bloco CTD dentro da POU *)

(* ... *)
my_counter(CD := pulse, LD := reset, PV := 100); (* Ativação da instância do bloco *)
IF my_counter.Q THEN (* testa se atingiu o valor da contagem *)
    (* trata contagem atingida *)
    (* ... *)
END_IF;
(* ... *)