MOT_CYCLE

Controla a ciclagem da operação de um conjunto de motores, alternando qual motor fica ativo por tempo de ciclo, por evento de comutação (entrada SWITCH) ou pela desabilitação individual de canais (entrada DIS). É um bloco de função (mantém estado entre scans; requer instância).

Biblioteca: HI_STD · Namespace: HILS · Tipo: bloco de função

Bloco de função

                  MOT_CYCLE
           +----------------------+
  BOOL ----|RUN                EVT|---- BOOL
           |                      |
  BOOL ----|SWITCH       ON_CYC_SW|---- BOOL
           |                      |
  BOOL ----|ACK_CYC_SW        FAIL|---- BOOL
           |                      |
 USINT ----|MAX_CH         END_CYC|---- TIME
           |                      |
  BOOL ----|HOLD_TME              |
           |                      |
  TIME ----|CYC_TIME              |
           |                      |
BOOL[] ----|DIS ----------------- |----
           |                      |
   INT ----|SEL_OUT ------------- |----
           +----------------------+

Em condição normal de operação os motores (saída SEL_OUT) são ativados ciclicamente a cada intervalo definido por CYC_TIME. O critério de seleção do próximo canal é a busca do primeiro canal disponível em ordem crescente do número do motor, a partir do motor corrente. A saída SEL_OUT indica o canal ativo, com valores entre 0 e MAX_CH - 1, ou -1 quando nenhum motor está ativo.

Tempo de ciclo (CYC_TIME). Define por quanto tempo cada motor permanece ativo. O tempo só é contabilizado enquanto HOLD_TME estiver inativo:

    SEL_OUT=3  SEL_OUT=2  SEL_OUT=1  SEL_OUT=0  SEL_OUT=3  SEL_OUT=2  SEL_OUT=1
   |
   |----------+                                +----------+
   |          |                                |          |
M3 |          +--------------------------------+          +-----------------
   |
   |          +----------+                                +---------+
   |          |          |                                |         |
M2 |----------+          +--------------------------------+         +-------
   |
   |                     +----------+                               +-------
   |                     |          |                               |
M1 |---------------------+          +-------------------------------+
   |
   |                                +----------+
   |                                |          |
M0 +--------------------------------+          +---------------------------
                                    : CYC_TIME :

   Mn - Motor n ativo

Nota

O tempo mínimo aceito para CYC_TIME é de 5 segundos. Um valor menor é tratado como 5 segundos. Quando o parâmetro não é especificado pela aplicação, utiliza-se o tempo de ciclo default de 2 horas.

Comutação por evento (SWITCH). Sempre que SWITCH transiciona de inativo para ativo (borda de subida), uma nova comutação das saídas é acionada, mesmo que o tempo de ciclo ainda não tenha transcorrido. Ao ativar a nova saída selecionada, o tempo de ciclo é reinicializado:

       : CYC_TIME :                     : CYC_TIME :
       |----------+                     +----------+
       |SEL_OUT=3 |                     |SEL_OUT=3 |
    M3 |          +---------------------+          +-----------------
       |          SEL_OUT=2                        : CYC_TIME :
       |          +--+                             +----------+
       |          |  |                             |SEL_OUT=2 |
    M2 |----------+  +-----------------------------+          +------
       |             : CYC_TIME :
       |             +----------+                             +------
       |             |SEL_OUT=1 |                             |SEL_OUT=1
    M1 |-------------+          +-----------------------------+
       |                        SEL_OUT=0
       |                        +------+
       |                        |      |
    M0 +------------------------+      +-----------------------------
       |
       |             +--+              +-+
       |             |  |              | |
SWITCH +-------------+  +--------------+ +---------------------------

Desabilitação de canal (DIS). O vetor DIS define quais canais estão desabilitados para seleção. Quando o valor associado a um motor está ativo, esse motor não participa da seleção do próximo canal; se o motor desabilitado for o canal ativo, o bloco seleciona automaticamente o próximo canal disponível:

     |                >| CYC |<
     |-----+           +-----+        +-----+                 +-----+           +---
     |     |           |     |        |     |                 |     |           |
  M3 |     +-----------+     +--------+     +-----------------+     +-----------+
     |     +-----+           +-----+        +-----+                 +-----+
     |     |     |           |     |        |     |                 |     |
  M2 |-----+     +-----------+     +--------+     +-----------------+     +----------
     |                                            +-----+                 +-----+
     |                                            |     |                 |     |
  M1 |--------------------------------------------+     +-----------------+     +----
     |           +-----+           +--+
     |           |     |           |  |
  m0 +-----------+     +-----------+  +----------------------------------------------

     |
     |
DIS3 |-------------------------------------------------------------------------------
     |
     |
DIS2 |-------------------------------------------------------------------------------
     |        +-------------------------------+
     |        |<- falha no motor 1            |
DIS1 |--------+                               +--------------------------------------
     |                                +----------------------------------------------
     |                                |<- falha no motor 0
DIS0 +--------------------------------+

Importante

O vetor fornecido em DIS deve ter tamanho igual ou maior que MAX_CH. Caso contrário o bloco mantém SEL_OUT em -1 e ativa FAIL, indicando condição inválida de operação.

Parâmetros

Nome

Direção

Tipo

Dimensão

Padrão

Faixa / Unidade

Descrição

RUN

IN

BOOL

—

FALSE

—

Desativa (0) ou ativa (1) o controle. Inativo, congela SEL_OUT e a contagem do ciclo.

SWITCH

IN

BOOL

—

FALSE

—

Força uma troca de saída por borda de subida (inativo ? ativo).

ACK_CYC_SW

IN

BOOL

—

TRUE

—

Autoriza a comutação do motor por tempo (usado junto com ON_CYC_SW).

MAX_CH

IN

USINT

—

2

= 2

Número de canais (motores) a serem tratados pelo bloco.

HOLD_TME

IN

BOOL

—

FALSE

—

Congela o tempo de ciclo do canal corrente enquanto ativo.

CYC_TIME

IN

TIME

—

T#2h

= 5 s

Tempo de ciclo das saídas de controle.

DIS

IN_OUT

BOOL

[*]

FALSE

—

Desabilita a seleção da saída associada. Tamanho deve ser = MAX_CH.

SEL_OUT

IN_OUT

INT

—

0

-1 .. MAX_CH-1

Número do canal de saída ativo; -1 se nenhuma saída ativa. Pode ser escrito para forçar um canal.

EVT

OUT

BOOL

—

FALSE

—

Pulso de evento gerado a cada alteração da saída ativa.

ON_CYC_SW

OUT

BOOL

—

FALSE

—

Indica que o tempo de troca programada foi atingido e o motor será comutado por tempo.

FAIL

OUT

BOOL

—

FALSE

—

Falha no processamento do bloco (condição não operacional; todas as saídas inativas).

END_CYC

OUT

TIME

—

T#0ms

—

Tempo restante para o fim do ciclo corrente.

Pré-condições

  • MAX_CH deve ser = 2; valores menores ativam FAIL e mantêm o bloco inativo.

  • O vetor DIS deve ter tamanho igual ou maior que ``MAX_CH``.

  • Ao menos um canal deve estar habilitado em DIS para que exista motor ativo.

Observações

  • Enquanto RUN está inativo, o bloco não processa: SEL_OUT é preservado e a contagem do tempo de ciclo fica congelada.

  • Ao escrever SEL_OUT, o valor é consistido com os limites válidos e verificado contra DIS (canal habilitado). Em caso de falha na validação, o valor é ignorado e o canal corrente é mantido; validado, a saída associada é ativada e o ciclo reinicializado.

  • Se HOLD_TME permanecer indefinidamente ativo, a comutação por tempo de ciclo é desabilitada, restando apenas a comutação por SWITCH ou DIS.

  • ON_CYC_SW e ACK_CYC_SW permitem sincronizar a troca: quando ON_CYC_SW ativa, o bloco só comuta a saída no próximo ciclo se ACK_CYC_SW estiver ativa.

  • As condições que ativam FAIL são: MAX_CH inválido (menor que 2); tamanho do vetor DIS menor que MAX_CH; ou todos os canais desabilitados por DIS.

Exemplo

Clique aqui para baixar a tabela de variáveis

Código ST

VAR
    CYC     : HILS.MOT_CYCLE;                                     (* Bloco de controle *)
    DIS     : ARRAY [0..3] OF BOOL := [FALSE, FALSE, FALSE, FALSE]; (* Vetor de desabilitação dos canais *)
    RUN     : BOOL := FALSE;                                      (* Habilitação do bloco *)
    SWITCH  : BOOL := FALSE;                                      (* Entrada de chaveamento da saída *)
    MAX_CH  : USINT := 4;                                         (* Nro máximo de motores *)
    CUR_CHN : INT := -1;                                          (* Nro do motor ativo *)
END_VAR

(* Ativa o bloco de controle de ciclo com os parâmetros definidos *)
CYC(
  RUN        := RUN,       (* [BOOL] Desativa (0) / Ativa (1) controle *)
  SWITCH     := SWITCH,    (* [BOOL] Força uma troca de saída *)
  ACK_CYC_SW := TRUE,      (* [BOOL] Autoriza a comutação do motor por tempo *)
  MAX_CH     := MAX_CH,    (* [USINT] Nro de canais a serem utilizados *)
  HOLD_TME   := FALSE,     (* [BOOL] Congela o tempo de ciclo do canal corrente *)
  CYC_TIME   := T#30m,     (* [TIME] Tempo de ciclo das saídas de controle *)
  DIS        := DIS,       (* [BOOL] Desabilita seleção da saída associada *)
  SEL_OUT    := CUR_CHN    (* [INT] Nro do canal de saída ativo; -1 se nenhuma saída ativa *)
  );