RAMP

Gera uma rampa linear da saída de X0 até X1 ao longo de um período TR, mantendo o rastreamento de X0 enquanto inativa. É 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

       RAMP
      +-----+
RUN---|     |---BUSY
      |     |
 X0---|     |---XOUT
      |     |
 X1---|     |
      |     |
 TR---|     |
      +-----+

Com RUN em FALSE, a saída XOUT acompanha (track) o valor de X0. Na transição de RUN para TRUE, o bloco inicia a rampa de XOUT a partir do valor corrente de X0 em direção a X1, percorrendo o intervalo no tempo TR. Durante o trajeto BUSY permanece em TRUE; ao alcançar X1, BUSY retorna a FALSE e XOUT passa a acompanhar X1.

Parâmetros

Nome

Direção

Tipo

Padrão

Faixa / Unidade

Descrição

RUN

IN

BOOL

FALSE

—

FALSE: rastreia X0; TRUE: executa a rampa até X1.

X0

IN

REAL

0.0

—

Valor inicial da rampa (valor rastreado enquanto RUN = FALSE).

X1

IN

REAL

0.0

—

Valor final da rampa (valor de destino/rastreado ao término).

TR

IN

TIME

T#0ms

—

Duração total da rampa.

BUSY

OUT

BOOL

FALSE

—

TRUE durante a execução da rampa.

XOUT

OUT

REAL

0.0

—

Valor de saída corrente da rampa.

Observações

  • Enquanto RUN estiver em FALSE, XOUT segue X0 (modo track).

  • TR define o tempo total do percurso de X0 a X1; com TR igual a T#0ms a saída assume X1 imediatamente.

Exemplo

Clique aqui para baixar a tabela de variáveis

Código ST

VAR
    my_RAMP  : RAMP;  (* Instancia do bloco RAMP *)
    RAMP_RUN : BOOL;  (* Comando de execucao da rampa *)
    RAMP_X0  : REAL;  (* Valor inicial da rampa *)
    RAMP_X1  : REAL;  (* Valor final da rampa *)
    RAMP_TR  : TIME;  (* Duracao da rampa *)
END_VAR

(* inicializa parametros para o bloco RAMP *)
(* por exemplo, rampa dos valores 0.0 a 100.0 em 30 seg. *)
RAMP_X0 := 0.0;   (* parametro X0 *)
RAMP_X1 := 100.0; (* parametro X1 *)
RAMP_TR := T#30s; (* parametro TR *)

(* executa o bloco RAMP *)
my_RAMP(
    RUN := RAMP_RUN,  (* RUN *)
    X0  := RAMP_X0,   (* X0  *)
    X1  := RAMP_X1,   (* X1  *)
    TR  := RAMP_TR    (* TR  *)
    );

(* testa se a rampa esta em andamento *)
IF my_RAMP.BUSY THEN
    IF my_RAMP.XOUT < 50.0 THEN
        (* ... *)
    END_IF;
ELSE
    (* ... *)
END_IF;