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 |
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 |
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 |
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_CHdeve ser = 2; valores menores ativamFAILe mantêm o bloco inativo.O vetor
DISdeve ter tamanho igual ou maior que ``MAX_CH``.Ao menos um canal deve estar habilitado em
DISpara que exista motor ativo.
Observações
Enquanto
RUNestá 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 contraDIS(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_TMEpermanecer indefinidamente ativo, a comutação por tempo de ciclo é desabilitada, restando apenas a comutação porSWITCHouDIS.ON_CYC_SWeACK_CYC_SWpermitem sincronizar a troca: quandoON_CYC_SWativa, o bloco só comuta a saída no próximo ciclo seACK_CYC_SWestiver ativa.As condições que ativam
FAILsão:MAX_CHinválido (menor que 2); tamanho do vetorDISmenor queMAX_CH; ou todos os canais desabilitados porDIS.
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 *)
);