TEL_FS_GATEWAY

Este bloco implementa uma interface de dados (“gateway”) para o portal de telemetria da HI Tecnologia. Utiliza uma FIFO mapeada em um vetor onde armazena registros de dados, disponibilizando-os para coleta pelo portal de telemetria.

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

Estes registros de dados na FIFO podem ser acessados pelo portal de telemetria através da leitura de variáveis do tipo “Holding Register”. O portal de telemetria é responsável por ler os dados disponíveis na FIFO, e posteriormente informar a quantidade efetiva de registros coletados para sua respectiva remoção da FIFO.

A medida que o portal de telemetria coleta os dados da FIFO, e existe o arquivo DATA_FILE com dados, automaticamente os dados deste arquivo DATA_FILE são transferidos para a FIFO. Quando todos os dados do arquivo DATA_FILE são transferidos para a FIFO, o arquivo é automaticamente eliminado.

Este arquivo de dados é gerenciado internamente por este bloco de função, de tal forma que a interface com o portal de telemetria é realizada sempre através da FIFO, e a gerencia deste arquivo de dados DATA_FILE é transparente para o portal de telemetria.

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 ao invés do sistema de arquivo, utilize o bloco de função TEL_BUF.

Bloco

              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 ------------ |----
           +------------------+

Parâmetros

Nome

Parâmetro

Tipo Dado

V. Ini.

Descrição

EN

Entrada

BOOL

TRUE

Habilitação de entrada

INS

Entrada

BOOL

FALSE

Inseri um registro de dados na FIFO a cada ativação

DEL

Entrada

INT

0

Quantidade de registros de dados a remover da FIFO

CMD

Entrada/Saída

INT

0

Comando associado ao arquivo de dados

DATA_FILE

Entrada/Saída

STRING

Nome do arquivo para armazenamento de dados

CACHE

Entrada/Saída

ANY

CACHE para armazenar registros de dados de entrada a serem inseridos na FIFO

FIFO

Entrada/Saída

ANY

FIFO para armazenar os registros de dados disponiveis para o portal de telemetria

DATA

Entrada/Saída

ANY

Registro de dados a ser inserido na FIFO

ENO

Saída

BOOL

FALSE

Habilitação de saída

EMPTY

Saída

BOOL

FALSE

FIFO vazia

RESULT

Saída

INT

0

Código de retorno da execução da última função deste bloco de função

FULL

Saída

BOOL

FALSE

FIFO cheia

ELEM

Saída

UINT

0

Nro. de registros de dados presentes na FIFO

TOTAL

Saída

UINT

0

Nro. total de registros de dados suportado pela FIFO

Detalhamento dos Parâmetros

Parâmetro

Descrição

EN

A entrada “EN” e a saída “ENO” estão disponíveis apenas na linguagem ladder, não sendo utilizadas nas demais linguagens de programação do controlador. A entrada “EN” é inicializada como “true”, sendo utilizada na linguagem ladder para otimização do ciclo de execução quando o respectivo bloco está desabilitado.

INS

A cada solicitação de inserção com valor TRUE, transfere-se um único valor do registro de dados especificado no parâmetro DATA para a CACHE de dados de entrada.

DEL

O comando de remoção de dados da FIFO tem prioridade sobre o comando de inserção de dados, ou seja, se os comandos (INS e DEL) forem ativados simultaneamente, os registros serão inicialmente removidos e posteriormente um novo registro de dados será inserido na FIFO. Note que podemos remover (DEL) vários registros da FIFO de uma única vez, mas inserir (INS) apenas um único registro de dados por vez.

CMD

Este bloco trata os seguintes comandos associados ao arquivo de dados:
  • 10 : Comando para formatar o sistema de arquivo

  • 20 : Comando para eliminar o arquivo de dados

  • 30 : Comando para reiniciar a leitura dos dados a partir do inicio do arquivo de dados

FIFO

O array alocado para a FIFO deve ser múltiplo do tamanho do registro de dados “HILS.TEL_V2_DATA_TYPE”, Esta fifo deve ser dimensionada de acordo com a quantidade máxima de eventos que a aplicação deseja disponibilizar para cada ciclo de leitura pelo portal de telemetria. Por exemplo, se a aplicação deseja disponibilizar até 24 eventos para leitura pelo portal de telemetria, deve-se criar uma fifo com 24 eventos, e como cada evento possui tamanho de 10 variáveis UINT, é necessário alocar 240 variáveis UINT, especificando uma dimensão [0..239] para a fifo.

CACHE

O array alocado para a CACHE deve ser múltiplo do tamanho do registro de dados “HILS.TEL_V2_DATA_TYPE”, Esta cache deve ser dimensionada de acordo com a quantidade máxima de eventos simultâneos que a aplicação deseja disponibilizar para o portal de telemetria. Por exemplo, se a aplicação pode publicar até 10 eventos simultâneos para o portal de telemetria, deve-se criar uma cache com pelo menos 10 eventos, e como cada evento possui tamanho de 10 variáveis UINT, é necessário alocar 100 variáveis UINT, especificando uma dimensão [0..99] para a cache.

DATA

Este bloco de função utiliza o formato “HILS.TEL_V2_DATA_TYPE” para o registro de
  • Timestamp do registro de dados
    • 1o campo: Tipo nativo DT

  • Valor do registro de dados
    • 2o campo: Valor numérico do Tipo nativo W, D, L

  • Identificação do tipo de registro de dados
    • 3o campo: Tipo do valor numérico, definido pelo portal de telemetria (UINT)

RESULT

Código de retorno associado a execução da função, onde:
  • Se for igual a 0: Função executada com sucesso, código HILS.SUCCESS

  • Se for diferente de 0: Falha na execução da função [2]

Exemplo

Considerações sobre este exemplo de utilização:

  • Cada registro de dados é composto por 10 campos UINT, totalizando 10 variáveis UINT por registro de dados

  • Disponibilizar uma CACHE com suporte para armazenar até 50 registros de dados de entrada simultaneamente, totalizando então 50 * 10 = 500 variáveis do tipo UINT

  • Disponibilizar uma FIFO com 24 registros de dados para coleta pelo portal de telemetria, totalizando 24 * 10 = 240 variáveis do tipo UINT

Podemos definir as seguintes variáveis:

Declaração de Variáveis

Nome

Tipo

Dimensão

Valor Inicial

Opções

Descrição

FILE_NAME

STRING

‘Dados.dat’

Nome para o arquivo de dados

TEL_COUNT

INT

rent

Contador de registros de dados disponíveis para coleta pelo portal (0..24)

TEL_CACHE

UINT

[0..499]

rent

Buffer para CACHE com até 50 registros de dados de entrada

TEL_FIFO

UINT

[0..239]

rent

Buffer para FIFO com até 24 registros de dados para o portal telemetria

TEL_DATA

HILS.TEL_V2_DATA_TYPE

Registro de dados para inserção no buffer da FIFO

TEL_GTWAY

HILS.TEL_GATEWAY

Instancia do bloco de interface com portal de telemetria

p_insert

BOOL

Inseri um único registro de dados na FIFO

p_delete

INT

Remove vários registros de dados da FIFO

Clique aqui para baixar a tabela de variáveis

Código ST

(* Exemplo de remoção de registros *)
if ((* ... *)) (* OBS.: gerar condição para remover dados na FIFO *)
  p_remove := 2;    (* ativa remoção de 2 registros de dados na FIFO *)
end_if;
(* ... *)

(* Exemplo de inserção de um registro *)
if ((* ... *)) (* 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 tipo TEL_V2_DATA_TYPE *)
  p_insert := TRUE;          (* ativa inserção de dado           *)
end_if;
(* ... *)

(* Bloco de gerencia da FIFO com registros de dados utilizados para interfacear com o portal de telemetria *)
TEL_GTWAY(INS := p_insert, DEL := p_remove, DATA_FILE := FILE_NAME, CACHE := TEL_FIFO, FIFO := TEL_FIFO, DATA := TEL_DATA);
(* ... *)

(* se executou alguma inserção ou remoção na FIFO, atualiza o nro resultante de elementos na FIFO *)
if ((p_insert = TRUE) OR (p_remove > 0) OR (TEL_COUNT <> TB.ELEM)) then

  (* atualiza nro de elementos disponíveis na FIFO de interface com portal de telemetria *)
  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_remove > 0 then
    p_remove := 0;
  end_if;
end_if;