TEL_BUF
Este bloco implementa uma interface de dados com o portal de telemetria da HI Tecnologia. Implementa uma FIFO em um vetor de registros exportados como Holding Registers. Registros de dados podem ser inseridos nesta FIFO e o portal é responsável para ler os registros e informar quantos devem ser removidos.
Bloco
TEL_BUF
+--------------+
BOOL ----|EN ENO|---- BOOL
| |
BOOL ----|WR ELEM|---- UINT
| |
INT ----|REM TOTAL|---- UINT
| |
| EMPTY|---- BOOL
| |
| FULL|---- BOOL
| |
| RESULT|---- INT
| |
----|FIFO -------- |----
| |
----|DATA -------- |----
+--------------+
Este bloco, opera em conjunto com o bloco HI_PORTAL que gerencia a o processo de inserção e remoção de eventos para o portal de telemetria da HI Tecnologia.
Formatos de dados
Existem 2 implementações de dados para utilização com este bloco. Em ambas, cada mensagem é composta por um vetor de 10 variáveis do tipo UINT.
Formato da versão V2
Esta versão foi desenvolvida para operação com o firmware G5 e é versão corrente para acesso ao Portal
O formato da base de dados do portal de telemetria para versão V2 é:
Cada registro de dados deve ser definido com tipo de dados “TEL_V2_DATA_TYPE” (definido nos tipos de dados da biblioteca HI_STD).
Este tipo é composto por 10 campos, descritos a seguir:
Timestamp (tipo DataTime)
1o .. 4o campos: Valor da data/hora associado ao evento
Valor do registro de dados
5o .. 8o campos: Valor numérico do dado associado. Pode ser qualquer valor numérico de 8 a 64 bits
Especificação do registro de dados
9o campo: Tipo do valor numérico, definido pelo portal de telemetria (UINT)
Reserva para expansão
10o campo.
Formato da versão V1
Esta versão foi desenvolvida para operação com o firmware G3S e não deve ser utilizada para novos desenvolvimentos.
O formato da base de dados do portal de telemetria para versão V1 é:
Cada registro de dados deve ser definido com tipo de dados “TEL_DATA_TYPE” (definido nos tipos de dados da biblioteca HI_STD).
Este tipo é composto por 10 campos, descritos a seguir:
Timestamp do registro de dados
1o campo: Ano (UINT)
2o campo: Mes (UINT)
3o campo: Dia (UINT)
4o campo: Hora (UINT)
5o campo: Minutos (UINT)
6o campo: Segundos (UINT)
7o campo: Milisegundos (UINT)
Valor do registro de dados
8o campo: Valor numérico LSB (UINT)
9o campo: Valor numérico MSB (UINT)
Especificação do registro de dados
10o campo: Tipo do valor numérico, definido pelo portal de telemetria (UINT)
Base de dados associada ao bloco (FIFO)
A base de dados definida para interface de troca de dados entre o equipamento e o portal de telemetria da HI Tecnologia deve possuir a seguinte estrutura:
Numero de registros de dados históricos (INT)
Buffer com “n” registros de dados históricos (ARRAY UINT)
Por exemplo, considerando que cada registro de dados é composto por 10 campos UINT, e se desejarmos disponibilizar um buffer com 20 registros de dados para o portal de telemetria, totalizamos 20 * 10 = 200 variáveis UINT. Podemos então definir as seguintes variáveis para a interface com o portal de telemetria:
Nome |
Tipo |
Dimensão |
V.Inic. |
Opçoes |
Descrição |
|---|---|---|---|---|---|
TEL_COUNT |
INT |
rent |
Contador de registros de dados disoníveis para portal |
||
TEL_BUFFER |
UINT |
[0..199] |
rent |
Buffer com até 20 registros de dados para portal telemetria |
Importante
Comandos de remoção tem prioridade sobre o comando de inserção de dados, ou seja, se executados simultâneamente, os registros serão inicialmente removidos e após este processo um novo registro de dados será inserido na FIFO.
Parâmetros
Nome |
Parâmetro |
Tipo Dado |
V. Ini. |
Descrição |
|---|---|---|---|---|
EN |
Entrada |
BOOL |
TRUE |
Habilitação de entrada |
WR |
Entrada |
BOOL |
FALSE |
Escrita de um registro no buffer |
REM |
Entrada |
INT |
0 |
Nro. de elementos a remover do buffer |
ENO |
Saída |
BOOL |
TRUE |
Habilitação de saída |
ELEM |
Saída |
UINT |
0 |
Nro. de elementos presentes na FIFO |
TOTAL |
Saída |
UINT |
0 |
Nro total de elementos suportados pela FIFO |
EMPTY |
Saída |
BOOL |
FALSE |
FIFO vazia |
FULL |
Saída |
BOOL |
FALSE |
FIFO cheia |
RESULT |
Saída |
INT |
0 |
Código de returno da última interação |
FIFO |
Entrada/Saída |
ANY |
FIFO - área onde serão armazenados os registros |
|
DATA |
Entrada/Saída |
ANY |
Conteúdo do registro a ser inserido na FIFO |
RESULT
Tipo Dado |
Descrição |
INT |
Código de retorno na execução da função, do tipo RET_CODE, onde:
|
Exemplo
Declaração de Variáveis
Nome |
Tipo |
Dimensão |
Opções |
Descrição |
|---|---|---|---|---|
TEL_COUNT |
INT |
rent |
Contador de registros de dados para portal |
|
TEL_BUFFER |
UINT |
[0..239] |
rent |
Buffer de registros de dados para portal |
TEL_DATA |
TEL_DATA_TYPE |
Registros 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 |
Inseri um onico registro no buffer de dados |
||
p_remove |
INT |
Remove vários registros no buffer de dados |
Código ST
(* Exemplo de remoção de registros *)
if ((* ... *)) (* 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 ((* ... *)) (* 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 gerencia do buffer de registros de dados utilizado para interfacear 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 no buffer, 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 portal de telemetria *)
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;