DTC_FRDMAN

Lê blocos de dados de um arquivo para uma cache de leitura, um dado por ciclo, que a aplicação recupera com DTC_GET_INFO / DTC_GET_VALUE. O processo pode prosseguir até que todo o conteúdo do arquivo seja lido. É um bloco de função (requer instância).

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

Bloco de função

                DTC_FRDMAN
           +-------------------+
  BOOL ----|START      TOT_BLKS|---- DINT
           |                   |
  BOOL ----|RD            READY|---- BOOL
           |                   |
  BOOL ----|CLOSE            EV|---- BOOL
           |                   |
           |             RESULT|---- INT
           |                   |
           |            O_FLAGS|---- WORD
           |                   |
  DINT ----|BLK_OFS ---------- |----
           |                   |
STRING ----|F_NAME ----------- |----
           |                   |
   INT ----|FS_CACHE --------- |----
           +-------------------+

Cada pulso em RD lê o bloco referenciado por BLK_OFS para a cache e avança BLK_OFS para o próximo dado; EV pulsa ao fim de cada ciclo com o resultado em RESULT.

Parâmetros

Nome

Direção

Tipo

Padrão

Faixa / Unidade

Descrição

START

IN

BOOL

FALSE

—

Inicializa o bloco; ao concluir ativa READY. Desativar fecha o arquivo (se aberto).

RD

IN

BOOL

FALSE

—

Inicia a leitura do bloco referenciado por BLK_OFS e o transfere para a cache.

CLOSE

IN

BOOL

FALSE

—

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

BLK_OFS

IN_OUT

DINT

0

bloco

Offset do bloco inicial a ler; atualizado para o próximo dado após leitura bem-sucedida.

F_NAME

IN_OUT

STRING

—

= 64 caracteres

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

FS_CACHE

IN_OUT

INT [*]

—

vetor

Cache de leitura (= 11 INT para um escalar; maior para vetores/strings).

TOT_BLKS

OUT

DINT

0

blocos

Nº de blocos (DIB) no arquivo (não é o nº de valores; strings/vetores usam >1 DIB).

READY

OUT

BOOL

FALSE

—

Inicialização concluída; com RESULT = 0 o bloco está apto a ler.

EV

OUT

BOOL

FALSE

—

Pulso ao fim de um ciclo (leitura ou fechamento); RESULT traz o resultado.

RESULT

OUT

INT

0

RET_CODE

Código de retorno da inicialização ou leitura (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

8

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

9

Falha no posicionamento do cursor do arquivo para leitura do bloco.

10

Tamanho do arquivo inválido (nº de bytes não é múltiplo de um bloco de dados). 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 leitura (consulte o catálogo de códigos RET_CODE do ambiente). Para status detalhado de arquivo/cache, ver O_FLAGS.

Ver também

DTC_FWRMAN, DTC_GET_INFO, DTC_GET_VALUE, DTC_MAN

Exemplo

Clique aqui para baixar a tabela de variáveis

Código ST

VAR
    RUN      : BOOL;
    RD       : BOOL;
    CLOSE    : BOOL;
    OFS      : UDINT;
    GET      : BOOL;
    RET      : INT;
    DATA     : INT;
    TS       : DT;
    ID       : INT;
    STR      : BOOL;
    SIZE     : UINT;
    ELEM     : UINT;
    CLEAR    : BOOL;
    ERR_CODE : INT;
    LRUN     : BOOL;
    FS_CACHE : ARRAY [0..20] OF INT; (* Comporta 2 blocos de dados *)
    FS_RMAN  : HILS.DTC_FRDMAN;
    LOG_NAME : STRING := '/TL1.LOG';
END_VAR

IF CLEAR THEN
  HILS.DATA_CLEAR(FS_CACHE);  (* Limpa a cache para o teste *)
  CLEAR := FALSE;
END_IF;

(* Mantém o gerenciador de leitura de um arquivo *)
FS_RMAN(
  START    := RUN,       (* [BOOL] Ativa o processo *)
  RD       := RD,        (* [BOOL] Efetua uma leitura de dados do arquivo p/ a cache *)
  CLOSE    := CLOSE,     (* [BOOL] Fecha o arquivo se aberto *)
  BLK_OFS  := OFS,       (* [DINT] Offset do bloco de dados inicial a ser lido *)
  F_NAME   := LOG_NAME,  (* [STRING] Nome do arquivo associado *)
  FS_CACHE := FS_CACHE   (* [INT] Cache de dados de leitura do arquivo *)
  );

(* Salva o código de retorno ao final do processo de leitura *)
IF RD AND FS_RMAN.EV THEN
  ERR_CODE := FS_RMAN.RESULT;
  RD := FALSE;
END_IF;

(* Transfere o dado lido do arquivo para uma variável da aplicação *)
IF GET THEN
  RET := HILS.DTC_GET_INFO(FS_CACHE, TS, ID, STR, SIZE, ELEM);
  IF RET = 0 THEN
    RET := HILS.DTC_GET_VALUE(FS_CACHE, DATA);
  END_IF;
  GET := FALSE;
END_IF;

LRUN := RUN;