TEL_BUF
Implementa a interface de dados (FIFO) entre o equipamento e o portal de telemetria da HI Tecnologia, mantendo os registros em um vetor exportado como Holding Registers para que o portal os leia e informe quantos remover. É 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
TEL_BUF
+--------------+
BOOL ----|EN ENO|---- BOOL
| |
BOOL ----|WR ELEM|---- UINT
| |
INT ----|REM TOTAL|---- UINT
| |
| EMPTY|---- BOOL
| |
| FULL|---- BOOL
| |
| RESULT|---- INT
| |
----|FIFO -------- |----
| |
----|DATA -------- |----
+--------------+
O bloco insere registros na FIFO (WR) e remove os registros já consumidos
pelo portal (REM), reportando o estado da fila (ELEM, TOTAL,
EMPTY, FULL). Opera em conjunto com o bloco HI_PORTAL,
que gerencia a inserção e a remoção de eventos para o portal de telemetria.
Importante
Comandos de remoção têm prioridade sobre o comando de inserção de dados: se executados simultaneamente, os registros são inicialmente removidos e, após esse processo, um novo registro é inserido na FIFO.
Parâmetros
Nome |
Direção |
Tipo |
Padrão |
Faixa / Unidade |
Descrição |
|---|---|---|---|---|---|
EN |
IN |
BOOL |
TRUE |
— |
Habilitação de entrada do bloco. |
WR |
IN |
BOOL |
FALSE |
— |
Solicita a escrita de um registro ( |
REM |
IN |
INT |
0 |
registros |
Número de elementos a remover do buffer. |
ENO |
OUT |
BOOL |
TRUE |
— |
Habilitação de saída do bloco. |
ELEM |
OUT |
UINT |
0 |
registros |
Número de elementos presentes na FIFO. |
TOTAL |
OUT |
UINT |
0 |
registros |
Número total de elementos suportados pela FIFO. |
EMPTY |
OUT |
BOOL |
FALSE |
— |
Indica que a FIFO está vazia. |
FULL |
OUT |
BOOL |
FALSE |
— |
Indica que a FIFO está cheia. |
RESULT |
OUT |
INT |
0 |
RET_CODE |
Código de retorno da última interação (ver Códigos de retorno). |
FIFO |
IN_OUT |
ANY |
— |
— |
Área onde são armazenados os registros (buffer de interface com o portal). |
DATA |
IN_OUT |
ANY |
— |
— |
Conteúdo do registro a ser inserido na FIFO. |
Códigos de retorno
RESULT é do tipo RET_CODE: 0 (HILS.SUCCESS) indica execução com
sucesso; qualquer valor diferente de 0 indica falha, e o valor identifica o
código de erro correspondente. Use os identificadores com o namespace HILS
(ex.: HILS.SUCCESS).
Lista completa dos códigos de retorno: RET_CODE - Códigos de retorno do firmware G5.
Pré-condições
A base de dados da FIFO deve ser definida com um contador de registros (
INT) seguido de um buffer denregistros (ARRAY OF UINT), dimensionado como múltiplo de 10 camposUINTpor registro.Cada registro (
DATA) deve ser do tipoTEL_V2_DATA_TYPE(formato V2, corrente) ouTEL_DATA_TYPE(formato V1, legado), ambos definidos nos tipos de dados da biblioteca HI_STD.
Observações
Estrutura da FIFO. A base de dados é composta por um contador de registros disponíveis (
INT) e um buffer comnregistros históricos (ARRAY OF UINT). Cada registro tem 10 camposUINT; para disponibilizar, por exemplo, 20 registros ao portal, o buffer precisa de20 * 10 = 200variáveisUINT. Exemplo de declaração:Nome
Tipo
Dimensão
Opções
Descrição
TEL_COUNT
INT
—
rent
Contador de registros de dados disponíveis para o portal.
TEL_BUFFER
UINT
[0..199]
rent
Buffer com até 20 registros de dados para o portal de telemetria.
Formato V2 (firmware G5, corrente). Registro do tipo
TEL_V2_DATA_TYPE, com 10 campos: 1º a 4º — timestamp (DataTime); 5º a 8º — valor numérico do dado (de 8 a 64 bits); 9º — tipo do valor numérico definido pelo portal (UINT); 10º — reserva para expansão.Formato V1 (firmware G3S, legado — não usar em novos desenvolvimentos). Registro do tipo
TEL_DATA_TYPE, com 10 campos: 1º a 7º — timestamp (ano, mês, dia, hora, minutos, segundos e milissegundos,UINT); 8º e 9º — valor numérico LSB e MSB (UINT); 10º — tipo do valor numérico definido pelo portal (UINT).
Ver também
Exemplo
Clique aqui para baixar a tabela de variáveis
Código ST
VAR
TEL_COUNT : INT; (* Contador de registros de dados para portal *)
TEL_BUFFER : ARRAY [0..239] OF UINT; (* Buffer de registros de dados para portal *)
TEL_DATA : TEL_DATA_TYPE; (* Registro de dados para inserção no buffer do portal *)
TB : HILS.TEL_BUF; (* Instancia do bloco de interface com portal de telemetria *)
p_insert : BOOL; (* Insere um único registro no buffer de dados *)
p_remove : INT; (* Remove vários registros no buffer de dados *)
END_VAR
(* Exemplo de remoção de registros *)
IF ((* ... *)) THEN (* OBS.: gerar condição para remover dados no buffer *)
p_remove := 2; (* ativa remoção de 2 registros de dados no buffer *)
END_IF;
(* ... *)
(* Exemplo de inserção de um registro *)
IF ((* ... *)) THEN (* OBS.: gerar condição para inserir dado no buffer *)
TEL_DATA.VALUE[0] := 1; (* valor LSB do dado a ser inserido *)
TEL_DATA.VALUE[1] := 0; (* valor MSB do dado a ser inserido *)
TEL_DATA.DATA_TYPE := 0; (* tipo de dado a ser inserido *)
p_insert := TRUE; (* ativa inserção de dado no buffer *)
END_IF;
(* ... *)
(* Bloco de gerência do buffer de registros para interface com o portal de telemetria *)
TB(WR := p_insert, REM := p_remove, FIFO := TEL_BUFFER, DATA := TEL_DATA);
(* ... *)
(* se executou alguma inserção ou remoção, atualiza o nro resultante de elementos no buffer *)
IF ((p_insert = TRUE) OR (p_remove > 0) OR (TEL_COUNT <> TB.ELEM)) THEN
(* atualiza nro de elementos disponíveis no buffer de interface com o portal *)
TEL_COUNT := TB.ELEM;
(* reseta solicitação de 1 ciclo de inserção no buffer *)
IF p_insert = TRUE THEN
p_insert := FALSE;
END_IF;
(* reseta solicitação de remoção de elementos no buffer *)
IF p_remove > 0 THEN
p_remove := 0;
END_IF;
END_IF;