HIWG_FSMAN

Implementa uma interface de dados com o Portal de Telemetria da HI Tecnologia, mantendo uma cache de dados (DTC_MAN) associada a um arquivo no sistema de arquivos que grava os dados publicados quando a cache enche e os recupera automaticamente à medida que são transferidos ao portal; requer SDCARD e opera em conjunto com HIWG_FSPUBLISH. É 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

                HIWG_FSMAN
          +--------------------+
  BOOL ---|START          READY|--- BOOL
          |                    |
  BOOL ---|CLR            RD_EV|--- BOOL
          |                    |
 USINT ---|WR_HYS         WR_EV|--- BOOL
          |                    |
 USINT ---|RD_HYS     RD_RESULT|--- INT
          |                    |
          |           WR_RESULT|--- INT
          |                    |
          |               EMPTY|--- BOOL
          |                    |
          |                FULL|--- BOOL
          |                    |
          |              BLOCKS|--- INT
          |                    |
          |               TOTAL|--- INT
          |                    |
          |                PERC|--- UINT
          |                    |
STRING ---|F_NAME ------------ |---
          |                    |
   INT ---|CACHE ------------- |---
          |                    |
   INT ---|WR_CACHE ---------- |---
          |                    |
   INT ---|RD_CACHE ---------- |---
          +--------------------+

O bloco mantém os dados inseridos pela aplicação (via HIWG_FSPUBLISH) em uma cache em memória (DTC_MAN) capaz de armazenar qualquer dos tipos nativos de dados suportados pelo HIstudio. Cada dado carrega um identificador, o valor associado e a data/hora em que foi gerado, permitindo que eventos identificados pela aplicação sejam reportados ao Portal de Telemetria com o instante correto de ocorrência, independentemente do momento em que a informação for coletada pelo portal.

Caso a cache em memória fique cheia, o bloco cria um arquivo no sistema de arquivos e passa a salvar nele os novos valores até que possam ser transferidos ao portal. Toda a criação e eliminação do arquivo e a inserção/remoção dos dados é gerenciada automaticamente pelo bloco.

Para que o Portal de Telemetria acesse as informações armazenadas, o parâmetro CACHE deve ser declarado como variável global exportada (com endereço explícito), e o primeiro endereço deste vetor deve ser especificado na configuração do conector associado no portal.

Importante

Este bloco possui uma variável interna retentiva que mantém a posição corrente do dado a ser lido do arquivo para envio ao portal. Este valor é inicializado com zero quando a entrada START está em FALSE. Portanto, para preservar o valor desta variável em quedas de energia ou reset do equipamento, a aplicação deverá sempre manter a entrada START ativada.

O processo de inicialização do SDCARD é mais demorado; se o bloco for ativado no início da aplicação, durante a inicialização, ele poderá reportar erro (HILS.RE_NOT_AVA = código 24) por algum tempo (1 a 2 segundos), até que o SDCARD esteja apto a operar.

Nota

Somente altere as entradas CLR, WR_HYS, RD_HYS e F_NAME com a entrada START inativa. As saídas RD_RESULT e WR_RESULT devem ser avaliadas sempre que, respectivamente, RD_EV ou WR_EV forem ativadas. O tamanho máximo do caminho completo em F_NAME é de 64 caracteres e deve iniciar por / (raiz), ex.: /Dados.log, /Pasta_1/Err.dat. A cache do portal (CACHE) deve ter no mínimo 101 inteiros (1 para o número de dados disponíveis + 100 para 10 blocos de dados). Consulte Estrutura da cache (CACHE), Parâmetros e Parâmetros.

Dica

Para conhecer melhor o recurso e suas funcionalidades acesse o vídeo tutorial: Buffer de dados no SD CARD

Parâmetros

Nome

Direção

Tipo

Dimensão

Padrão

Faixa / Unidade

Descrição

START

IN

BOOL

—

TRUE

—

Habilita a operação do gerenciador de acesso à cache de dados. Enquanto inativa, a cache não é alterada pelo bloco.

CLR

IN

BOOL

—

FALSE

—

Quando ativo, limpa a cache de blocos de dados e elimina o arquivo associado, se existir. Altere apenas com START inativo.

WR_HYS

IN

USINT

—

1

blocos

Nº de blocos que devem existir na cache de escrita para que o processo de gravação no arquivo ocorra. Altere apenas com START inativo.

RD_HYS

IN

USINT

—

1

blocos

Nº de blocos livres que devem existir na cache do portal para iniciar a leitura dos dados do arquivo. Altere apenas com START inativo.

F_NAME

IN_OUT

STRING

:*

—

—

Nome (caminho completo, iniciando por /) do arquivo usado para reter os dados. Máx. 64 caracteres. Nunca altere com START ativo.

CACHE

IN_OUT

INT

[*]

—

—

Vetor de inteiros que implementa a cache em memória dos dados do portal. Deve ser variável global exportada (mín. 101 inteiros).

WR_CACHE

IN_OUT

INT

[*]

—

—

Cache associada ao processo de escrita do arquivo.

RD_CACHE

IN_OUT

INT

[*]

—

—

Cache associada ao processo de leitura do arquivo.

READY

OUT

BOOL

—

FALSE

—

Indica que o bloco terminou a inicialização e está operacional (com RD_RESULT e WR_RESULT iguais a zero).

RD_EV

OUT

BOOL

—

FALSE

—

Indica a ocorrência de um evento de falha no processo de leitura do arquivo; o código é reportado em RD_RESULT.

WR_EV

OUT

BOOL

—

FALSE

—

Indica a ocorrência de um evento de falha no processo de escrita no arquivo; o código é reportado em WR_RESULT.

RD_RESULT

OUT

INT

—

0

RET_CODE

Código de retorno da última interação com falha na cache de leitura do arquivo (avaliar quando RD_EV ativa).

WR_RESULT

OUT

INT

—

0

RET_CODE

Código de retorno da última interação com falha na cache de escrita do arquivo (avaliar quando WR_EV ativa).

EMPTY

OUT

BOOL

—

—

—

Ativa quando não há blocos de dados na cache para serem obtidos.

FULL

OUT

BOOL

—

—

—

Ativa quando o número máximo de blocos suportado pela cache foi atingido. Novas inserções via DTC_PUSH retornam erro de falta de espaço.

BLOCKS

OUT

INT

—

0

—

Número de blocos de dados disponíveis na cache do portal.

TOTAL

OUT

INT

—

—

—

Número máximo de blocos de dados suportado pela cache do portal.

PERC

OUT

UINT

—

—

0 .. 100 %

Percentual da cache ocupado com blocos de dados a serem coletados.

Códigos de retorno

As saídas RD_RESULT e WR_RESULT carregam códigos de retorno (identificadores do namespace HILS, ex.: HILS.RE_NOT_AVA), avaliados quando RD_EV / WR_EV ativam. Códigos mais comuns deste bloco:

Código

Identificador

Significado

0

SUCCESS

Processo executado com sucesso.

24

RE_NOT_AVA

Recurso não disponível (ex.: SDCARD ainda em inicialização).

26

RE_RES_FUL

Buffer do recurso cheio (cache sem espaço).

27

RE_RES_EMP

Buffer do recurso vazio.

167

FS_CORRUPT

Sistema de arquivos corrompido.

173

FS_INVALIDNAME

Nome de arquivo inválido.

174

FS_NOTFOUND

Arquivo não encontrado.

176

FS_OPEN_LIMIT

Número máximo de arquivos abertos alcançado.

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

Pré-condições

  • O equipamento deve possuir um SDCARD operacional; durante sua inicialização o bloco pode reportar RE_NOT_AVA (24) por 1 a 2 segundos.

  • CACHE deve ser declarado como variável global exportada (com endereço explícito), com no mínimo 101 inteiros.

  • F_NAME deve conter o caminho completo iniciando por / (máx. 64 caracteres).

  • Altere CLR, WR_HYS, RD_HYS e F_NAME apenas com START inativo.

Observações

  • Para preservar a posição de leitura retentiva em quedas de energia/reset, mantenha START sempre ativado.

  • Opera em conjunto com HIWG_FSPUBLISH, responsável por inserir na cache os dados a serem transferidos ao portal.

Ver também

HIWG_FSPUBLISH, DTC_MAN, DTC_PUSH, DTC_FRDMAN, DTC_FWRMAN

Exemplo

Clique aqui para baixar a tabela de variáveis

Código ST

VAR
    RUN      : BOOL;                       (* Ativa o bloco *)
    PUB      : BOOL;                       (* Publica um dado no portal *)
    CLR      : BOOL;                       (* Limpa a cache do portal *)
    PUB_RET  : INT;                        (* Código de retorno da publicação *)
    DATA     : REAL := 123.456;            (* Dado a ser publicado *)
    CACHE    : ARRAY [0..50] OF INT;       (* Cache do portal *)
    RD_CACHE : ARRAY [0..30] OF INT;       (* Cache de leitura *)
    WR_CACHE : ARRAY [0..30] OF INT;       (* Cache de escrita *)
    ID       : INT := 456;                 (* ID do dado *)
    WGFSMAN  : HILS.HIWG_FSMAN;            (* Gerenciador de acesso ao portal *)
    F_NAME   : STRING[10] := '/TESTE.LOG'; (* Nome do arquivo associado ao portal *)
END_VAR

WGFSMAN(  (* HIWG_FSMAN *)
  START    := RUN,       (* [BOOL] Habilita operação do gerenciador de acesso à cache *)
  CLR      := CLR,       (* [BOOL] Limpa o conteúdo da cache de dados *)
  WR_HYS   := 2,         (* [USINT] Histerese de blocos para salvar os dados no arquivo *)
  RD_HYS   := 3,         (* [USINT] Histerese de blocos na RAM para iniciar a leitura *)
  F_NAME   := F_NAME,    (* [STRING] Nome do arquivo associado *)
  CACHE    := CACHE,     (* [INT] Vetor reservado para armazenar os blocos de dados *)
  WR_CACHE := WR_CACHE,  (* [INT] Cache de escrita no arquivo *)
  RD_CACHE := RD_CACHE   (* [INT] Cache de leitura do arquivo *)
  );

IF PUB THEN
  PUB_RET := HILS.HIWG_FSPUBLISH(
              ID,                     (* ID [INT] Identificador da mensagem no portal *)
              0,                      (* ATRIB [INT] Atributo associado ao dado *)
              FALSE,                  (* GEN_TS [BOOL] Gera o timestamp automaticamente *)
              HILS.GET_UTC_SYSTIME(), (* TS [DT] Timestamp associado ao dado *)
              DATA,                   (* DATA Dado ou vetor de dados enviado ao portal *)
              WGFSMAN                 (* Instância do gerenciador *)
              );
  PUB := FALSE;
END_IF;