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 |
RD |
IN |
BOOL |
FALSE |
— |
Inicia a leitura do bloco referenciado por |
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 |
FS_CACHE |
IN_OUT |
INT [*] |
— |
vetor |
Cache de leitura (= 11 |
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 |
EV |
OUT |
BOOL |
FALSE |
— |
Pulso ao fim de um ciclo (leitura ou fechamento); |
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
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;