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 (DATA) no buffer.

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 de n registros (ARRAY OF UINT), dimensionado como múltiplo de 10 campos UINT por registro.

  • Cada registro (DATA) deve ser do tipo TEL_V2_DATA_TYPE (formato V2, corrente) ou TEL_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 com n registros históricos (ARRAY OF UINT). Cada registro tem 10 campos UINT; para disponibilizar, por exemplo, 20 registros ao portal, o buffer precisa de 20 * 10 = 200 variáveis UINT. 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

HI_PORTAL

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;