TEL_FS_GATEWAY

Implementa uma interface de dados (“gateway”) para o portal de telemetria da HI Tecnologia, armazenando registros em uma FIFO mapeada em vetor com transbordo automático para um arquivo no sistema de arquivos quando a FIFO enche; requer controlador com suporte a sistema de arquivos em SDCARD. É um bloco de função (mantém estado entre scans; requer instância).

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

Os registros de dados são inicialmente armazenados em uma CACHE de entrada e, posteriormente, transferidos para a FIFO. Se a FIFO ficar cheia, o arquivo de dados DATA_FILE é criado automaticamente e os dados da CACHE são transferidos para ele.

O portal de telemetria acessa os registros da FIFO lendo variáveis do tipo “Holding Register”; é responsável por ler os dados disponíveis e informar a quantidade efetiva de registros coletados para sua remoção da FIFO. À medida que o portal coleta os dados e existe um arquivo DATA_FILE com dados, os registros desse arquivo são transferidos automaticamente para a FIFO; quando todos são transferidos, o arquivo é eliminado.

O arquivo de dados é gerenciado internamente pelo bloco, de forma que a interface com o portal de telemetria é sempre realizada através da FIFO e a gerência do DATA_FILE é transparente para o portal.

Este bloco opera em conjunto com o bloco HI_FS_PUBLISH, que ativa a publicação do dado para o portal de telemetria.

Nota

Antes de utilizar este bloco de função, consulte no manual do controlador utilizado se o mesmo possui suporte para sistema de arquivos no SDCARD.

Nota

Para gerenciar mensagens mantidas na memória do equipamento, em vez do sistema de arquivos, utilize o bloco de função TEL_BUF.

Bloco de função

              TEL_FS_GATEWAY
           +------------------+
  BOOL ----|EN             ENO|---- BOOL
           |                  |
  BOOL ----|INS          EMPTY|---- BOOL
           |                  |
   INT ----|DEL         RESULT|---- INT
           |                  |
           |              FULL|---- BOOL
           |                  |
           |              ELEM|---- UINT
           |                  |
           |             TOTAL|---- UINT
           |                  |
   INT ----|CMD ------------- |----
           |                  |
STRING ----|DATA_FILE --------|----
           |                  |
   ANY ----|CACHE ----------- |----
           |                  |
   ANY ----|FIFO ------------ |----
           |                  |
   ANY ----|DATA ------------ |----
           +------------------+

As entradas EN e a saída ENO estão disponíveis apenas na linguagem ladder, não sendo utilizadas nas demais linguagens do controlador. EN é inicializada em TRUE e serve, no ladder, para otimizar o ciclo de execução quando o bloco está desabilitado.

A cada solicitação de inserção (INS = TRUE) transfere-se um único registro, especificado em DATA, para a CACHE de entrada. O comando de remoção (DEL) tem prioridade sobre a inserção: se INS e DEL forem ativados simultaneamente, os registros são primeiro removidos e depois um novo registro é inserido. É possível remover vários registros de uma só vez, mas inserir apenas um por vez.

A entrada CMD trata os seguintes comandos associados ao arquivo de dados:

  • 10 — formatar o sistema de arquivos;

  • 20 — eliminar o arquivo de dados;

  • 30 — reiniciar a leitura dos dados a partir do início do arquivo.

O vetor da FIFO deve ser múltiplo do tamanho do registro HILS.TEL_V2_DATA_TYPE e dimensionado conforme a quantidade máxima de eventos disponibilizada por ciclo de leitura do portal. Cada evento ocupa 10 variáveis UINT; por exemplo, para 24 eventos alocam-se 240 variáveis UINT, com dimensão [0..239].

O vetor da CACHE também deve ser múltiplo do tamanho de HILS.TEL_V2_DATA_TYPE e dimensionado conforme a quantidade máxima de eventos simultâneos de entrada. Por exemplo, para 10 eventos simultâneos alocam-se 100 variáveis UINT, com dimensão [0..99].

O registro DATA usa o formato HILS.TEL_V2_DATA_TYPE, composto por:

  • Timestamp do registro (tipo nativo DT);

  • Valor numérico do registro (tipo nativo W, D ou L);

  • Identificação do tipo de registro, definida pelo portal de telemetria (UINT).

Parâmetros

Nome

Direção

Tipo

Padrão

Faixa / Unidade

Descrição

EN

IN

BOOL

TRUE

—

Habilitação de entrada (apenas ladder).

INS

IN

BOOL

FALSE

—

A cada ativação, insere um registro de dados na FIFO.

DEL

IN

INT

0

—

Quantidade de registros a remover da FIFO.

CMD

IN_OUT

INT

0

10 · 20 · 30

Comando associado ao arquivo de dados (ver descrição acima).

DATA_FILE

IN_OUT

STRING

—

—

Nome do arquivo para armazenamento de dados.

CACHE

IN_OUT

ANY

—

—

CACHE (vetor UINT) para os registros de entrada a inserir na FIFO.

FIFO

IN_OUT

ANY

—

—

FIFO (vetor UINT) com os registros disponíveis ao portal de telemetria.

DATA

IN_OUT

ANY

—

—

Registro (HILS.TEL_V2_DATA_TYPE) a ser inserido na FIFO.

ENO

OUT

BOOL

FALSE

—

Habilitação de saída (apenas ladder).

EMPTY

OUT

BOOL

FALSE

—

FIFO vazia.

FULL

OUT

BOOL

FALSE

—

FIFO cheia.

ELEM

OUT

UINT

0

—

Número de registros presentes na FIFO.

TOTAL

OUT

UINT

0

—

Número total de registros suportado pela FIFO.

RESULT

OUT

INT

0

RET_CODE

Código de retorno da última operação (ver Códigos de retorno).

Códigos de retorno

RESULT é do tipo RET_CODE, com os identificadores no namespace HILS (ex.: HILS.SUCCESS):

  • 0 (HILS.SUCCESS) — função executada com sucesso;

  • diferente de 0 — falha na execução da função.

Lista completa dos códigos de retorno: RET_CODE - Códigos de retorno do firmware G5.

Pré-condições

  • O controlador deve possuir suporte a sistema de arquivos em SDCARD.

  • Os vetores CACHE e FIFO devem ter dimensão múltipla do tamanho do registro HILS.TEL_V2_DATA_TYPE (10 variáveis UINT por evento).

Observações

  • A inserção (INS) processa um único registro por ativação; a remoção (DEL) pode processar vários registros de uma só vez e tem prioridade sobre a inserção.

  • A gerência do arquivo DATA_FILE é transparente ao portal, que sempre acessa os dados através da FIFO.

Ver também

HI_FS_PUBLISH, TEL_BUF

Exemplo

Clique aqui para baixar a tabela de variáveis

Considerações sobre este exemplo:

  • Cada registro de dados é composto por 10 campos UINT (10 variáveis UINT por registro).

  • CACHE com suporte a até 50 registros de entrada simultâneos: 50 * 10 = 500 variáveis UINT.

  • FIFO com 24 registros para coleta pelo portal: 24 * 10 = 240 variáveis UINT.

Código ST

VAR
    FILE_NAME : STRING := 'Dados.dat';  (* Nome para o arquivo de dados *)
    TEL_COUNT : INT;                    (* Contador de registros disponíveis para coleta pelo portal (0..24) *)
    TEL_CACHE : ARRAY [0..499] OF UINT; (* Buffer da CACHE com até 50 registros de entrada *)
    TEL_FIFO  : ARRAY [0..239] OF UINT; (* Buffer da FIFO com até 24 registros para o portal *)
    TEL_DATA  : HILS.TEL_V2_DATA_TYPE;  (* Registro de dados para inserção na FIFO *)
    TEL_GTWAY : HILS.TEL_FS_GATEWAY;    (* Instancia do bloco de interface com o portal de telemetria *)
    p_insert  : BOOL;                   (* Insere um único registro de dados na FIFO *)
    p_delete  : INT;                    (* Remove vários registros de dados da FIFO *)
END_VAR

(* Exemplo de remoção de registros *)
IF ((* ... *)) THEN (* OBS.: gerar condição para remover dados na FIFO *)
  p_delete := 2;    (* ativa remoção de 2 registros de dados na FIFO *)
END_IF;
(* ... *)

(* Exemplo de inserção de um registro *)
IF ((* ... *)) THEN (* OBS.: gerar condição para inserir dado na FIFO/Arquivo *)
  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 := 123; (* tipo de dado a ser inserido      *)
  (* ... *)                  (* preencher demais campos do registro TEL_V2_DATA_TYPE *)
  p_insert := TRUE;          (* ativa inserção de dado           *)
END_IF;
(* ... *)

(* Bloco de gerência da FIFO com registros de dados usados na interface com o portal de telemetria *)
TEL_GTWAY(INS := p_insert, DEL := p_delete, DATA_FILE := FILE_NAME,
          CACHE := TEL_CACHE, FIFO := TEL_FIFO, DATA := TEL_DATA);
(* ... *)

(* Se executou alguma inserção ou remoção na FIFO, atualiza o nro. resultante de elementos *)
IF ((p_insert = TRUE) OR (p_delete > 0) OR (TEL_COUNT <> TEL_GTWAY.ELEM)) THEN

  (* atualiza nro. de elementos disponíveis na FIFO de interface com o portal *)
  TEL_COUNT := TEL_GTWAY.ELEM;

  (* reseta solicitação de 1 ciclo de inserção de dados na FIFO *)
  IF p_insert = TRUE THEN
    p_insert := FALSE;
  END_IF;

  (* reseta solicitação de remoção de dados da FIFO *)
  IF p_delete > 0 THEN
    p_delete := 0;
  END_IF;
END_IF;