DTC_FWRMAN

Escreve blocos de dados de uma cache de escrita em um arquivo: cria o arquivo se não existir, transfere os dados que a aplicação insere via DTC_PUSH e o fecha (ou não) ao final. É um bloco de função (requer instância).

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

Bloco de função

               DTC_FWRMAN
          +------------------+
  BOOL ---|START      FS_DIBS|--- DINT
          |                  |
  BOOL ---|CLOSE        READY|--- BOOL
          |                  |
  BOOL ---|DELETE          EV|--- BOOL
          |                  |
  BOOL ---|WAIT        RESULT|--- INT
          |                  |
 USINT ---|HYSTER     O_FLAGS|--- WORD
          |                  |
STRING ---|F_NAME ---------- |---
          |                  |
   INT ---|FS_CACHE -------- |---
          +------------------+

Como bloco de função, requer uma instância própria e mantém estado entre ciclos: os dados inseridos na cache via DTC_PUSH são transferidos ao arquivo conforme a histerese configurada, criando o arquivo quando necessário.

Parâmetros

Apenas a interface pública (as variáveis internas Local do bloco não são parâmetros):

Nome

Direção

Tipo

Padrão

Faixa / Unidade

Descrição

START

IN

BOOL

FALSE

—

Ativa e inicializa o bloco; ao concluir ativa READY. Desativar fecha o arquivo (se aberto).

CLOSE

IN

BOOL

FALSE

—

Se ativo, abre/fecha o arquivo a cada escrita; se inativo, mantém aberto entre escritas.

DELETE

IN

BOOL

FALSE

—

Elimina o arquivo F_NAME. Novo DTC_PUSH posterior recria o arquivo.

WAIT

IN

BOOL

FALSE

—

Suspende a escrita (se não estiver em execução); útil para sincronizar escrita e leitura do mesmo arquivo.

HYSTER

IN

USINT

1

blocos

Nº de blocos na cache para disparar a transferência ao arquivo (histerese). Alterável com o bloco ativo.

F_NAME

IN_OUT

STRING

—

= 64 caracteres

Caminho completo do arquivo (inicia com /). Não alterar com START ativo.

FS_CACHE

IN_OUT

INT [*]

—

vetor

Cache de escrita (fila de blocos a transferir). Ver a estrutura em DTC_MAN.

FS_DIBS

OUT

DINT

-1

blocos

Nº de blocos (DIB) no arquivo; -1 até o arquivo ser criado (primeiro dado inserido).

READY

OUT

BOOL

FALSE

—

Inicialização concluída; bloco apto a operar.

EV

OUT

BOOL

FALSE

—

Pulso ao fim de um ciclo (write/flush, delete ou fechamento); RESULT traz o resultado.

RESULT

OUT

INT

0

RET_CODE

Código de retorno da inicialização ou operação (ver Códigos de retorno).

O_FLAGS

OUT

WORD

16#0

bitmap

Flags de status da cache e do arquivo (ver O_FLAGS).

O_FLAGS

Mapa de bits de status:

Bit

Descrição

0

Cache de escrita vazia.

1

Cache de escrita cheia.

2

Não existe arquivo com o nome especificado neste momento.

8

Falha na inicialização do bloco (sistema de arquivo indisponível, sem mídia/SDCARD, diretório cheio ou em falha).

9

Tamanho do arquivo inválido (nº de bytes não é múltiplo de um bloco). Não interrompe o processo, apenas sinaliza.

Códigos de retorno

RESULT é do tipo RET_CODE: 0 ( HILS.SUCCESS ) indica sucesso; qualquer valor diferente de 0 indica falha na inicialização ou na operação (consulte o catálogo de códigos RET_CODE do ambiente). Para status detalhado de arquivo/cache, ver O_FLAGS.

Ver também

DTC_FRDMAN, DTC_PUSH, DTC_MAN

Exemplo

Clique aqui para baixar a tabela de variáveis

Código ST

VAR
    INSERT   : BOOL := FALSE;
    EN_FS    : BOOL := FALSE;
    HIST     : USINT := 1;
    DATA     : INT := 2468;
    RET      : INT;
    FS_CACHE : ARRAY [0..50] OF INT := 0;
    TS       : DT := DT#2020-06-25-15:36:55.36;
    ID       : INT := 123;
    INX      : UINT := 0;
    QNT      : UINT := 1;
    FS_WMAN  : HILS.DTC_FWRMAN;
    LOG_NAME : STRING := '/TL1.LOG';
END_VAR

(* Mantém o gerenciador operando (ativando a variável EN_FS) *)
FS_WMAN(
    START    := EN_FS,     (* [BOOL] Ativa o processo de escrita *)
    HYSTER   := HIST,      (* [USINT] Histerese de dados para salvar em arquivo *)
    F_NAME   := LOG_NAME,  (* [STRING] Nome do arquivo associado à cache (FS_CACHE) *)
    FS_CACHE := FS_CACHE   (* [INT] Cache usada internamente para escrita *)
    );

IF INSERT THEN
  (* Insere um dado na cache de escrita para ser transferido ao arquivo *)
  RET := HILS.DTC_PUSH(
          ID,       (* [INT] Identificador da mensagem *)
          FALSE,    (* [BOOL] Gera automaticamente o timestamp (ignora TS) *)
          TS,       (* [DT] Timestamp a associar ao dado *)
          INX,      (* [UINT] Índice inicial quando o dado for vetor *)
          QNT,      (* [UINT] Quantidade a partir do índice quando vetor *)
          DATA,     (* [] Dado ou vetor de dados *)
          FS_CACHE  (* [INT] Cache de escrita *)
          );
  INSERT := FALSE;
END_IF;