DTC_FRDMAN
Este bloco implementa uma interface para leitura de blocos de dados em um arquivo. Utiliza uma cache de dados onde a aplicação recebe um dado por vez, que pode ser obtido pela função DTC_GET_VALUE. Este processo pode continuar até que todo o conteúdo do arquivo especificado seja obtido.
Para mais informações sobre a cache de leitura, consulte a função DTC_GET_VALUE.
Bloco
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 --------- |----
+-------------------+
Parâmetros
Nome |
Classe |
Tipo |
Dim. |
V. Ini. |
Descrição |
START |
Entrada |
BOOL |
FALSE |
Inicializa o processo de leitua do dado no sistema de arquivo |
|
RD |
Entrada |
BOOL |
FALSE |
Remove um dado do sistema de arquivo e transfere para a cache de dados |
|
CLOSE |
Entrada |
BOOL |
FALSE |
Indica para fechar o arquivo se o mesmo estiver aberto |
|
BLK_OFS |
Entrada/Saída |
DINT |
0 |
Offset do bloco de dados a ser lido no arquivo |
|
F_NAME |
Entrada/Saída |
STRING |
Nome do arquivo associado |
||
FS_CACHE |
Entrada/Saída |
INT |
[*] |
0 |
Cache de dados de leitura capaz de ler 1 dado |
TOT_BLKS |
Saída |
DINT |
0 |
Nro de blocos de dados no arquivo |
|
READY |
Saída |
BOOL |
FALSE |
Sinaliza que o bloco terminou o processo de incialização |
|
EV |
Saída |
BOOL |
FALSE |
Sinaliza fim de um ciclo de leitura |
|
RESULT |
Saída |
INT |
0 |
Código de retorno do processo de inicializacao ou de leitura |
|
O_FLAGS |
Saída |
WORD |
16#0 |
Flags de status da cache e do arquivo associado |
Entradas
START
Habilita operação do bloco. Enquanto esta entrada estiver inativa a cache de leitura associada não será alterada pelo bloco e o arquivo associado, caso exista não será acessado. Ao ser ativada o bloco executa um processo de incialização e, quando concluído ativa a saída READY com o resultado do processo sendo apresentado na saída RESULT. Quando a entrada START for desativada, se o arquivo associado estiver aberto o mesmo será fechado e o sinal READY será desativado apenas após o arquivo ser fechado.
RD
Esta entrada quando ativa, inicia o processo de leitura de um dado no arquivo associado. O parâmeto de entrada/saída BLK_OFS deve indicar qual é o bloco de dados inicial associado ao dado a ser obtido. Ao final do processo a saída EV gera um pulso e o resultado da operação estará disponível da saída RESULT. Se a operação foi bem sucedida, o valor do dado indicado estará disponível na cache de leitura e o parâmetro BLK_OFS será atualizado para referenciar o proximo dado a ser lido no arquivo.
CLOSE
Esta entrada, se mantida ativada, para cada ciclo de leitura o bloco irá abrir o arquivo ler o dado referenciado pelo parâmetro BLK_OFS, transferir o conteudo para a cache de leitura e fechar novamente o arquivo. Quando a entrada estiver inativa, após o primeiro ciclo de leitura o arquivo é mantido aberto otimizando o tempo no acesso subsequentes. Quando a entrada for ativada o arquivo será fechado novamente.
F_NAME
Define o nome do arquivo a ser utilizado no processo de leitura. Este parâmetro deve ser especificado com o caminho completo. O diretório raiz é identificado pelo caractere ‘/’, e desta forma este parâmetro deve sempre iniciar com este caractere.
Exemplos de nomes de arquivo origem: ‘/Dados.log’, ‘/Pasta_1/Err.dat’
O tamanho máximo permitido para o caminho completo do nome do arquivo é de 64 caracteres.
Importante
Nunca altere este parâmetro enquando a entrada START estiver ativa.
FS_CACHE
Cache de dados de leitura mantida em memória como uma fila dos blocos de dados para receberem o conteúdo lido do arquivo. O tamanho desta cache deve ser o suficiente para ler um único dado.
Importante
Observe que, quando o dado armazanado é um valor escalar qualquer (exceto STRING) a informação necessita de apenas um bloco de dados e neste caso uma cache formada por um vetor de 11 INT´s será suficiente.
Quando o arquivo possuir vetores de dados ou STRINGS o nro de blocos para armazenar a informação é variável e dependente do tamanho do vetor do da string armazenada.
A chave deverá possuir espaço suficiente para suportar o maior dado que o arquivo possuir.
Para mais informações consulte CACHE.
Saídas
TOT_BLKS
Informa o número de blocos de dados disponíveis no arquivo.
Nota
Observe que o número de blocos de dados (DIB) não é necessárimente o número de valores que estão no arquivo, visto que podem exisitir dados que necessitam de mais de uma DIB para serem armazenados (ex: strings e vetores de variáveis).
READY
Quando ativada indica que o bloco terminou o processo de inicialização e, caso a saída RESULT possuir o valor zero o bloco esta apto a iniciar os ciclos de leitura.
EV
Sinaliza com um pulso o fim de um ciclo de leitura. Neste momento o resultado da operação inciada é reportado no parâmetro RESULT. Caso o valor de result seja zero o processo iniciado foi concluido com sucesso. Este processo pode se referir a uma leitura ou ao um processo de fechamento do arquivo solicitado pela ativação da entrada CLOSE.
RESULT
Tipo Dado |
Descrição |
INT |
Código de retorno na execução da função, do tipo RET_CODE, onde:
|
O_FLAGS
Este parâmetro mapeia em bits as seguintes informaçôes:
BIT |
Descrição |
8 |
Quando em 1 indica que ocorreu falha no processo de inicializacao do bloco. Esta condição pode ocorrer se houver algum problema com o acesso ao sistema de arquivo do equipamento:
|
9 |
Quando em 1 indica que ocorreu falha no processo de pocisionamento do cursor do arquivo para leitura do bloco de dados. |
10 |
Quando em 1 indica que o tamanho do arquivo associado é invalido ou seja, o número de bytes do arquivo não é multiplo de um bloco de dados. Neste caso, o bloco não paraliza o processo, apenas indica esta condição. |
Exemplo
Declaração de Variáveis
Nome |
Classe |
Tipo |
Dimensão |
Valor Inicial |
Descrição |
|---|---|---|---|---|---|
RUN |
Local |
BOOL |
|||
RD |
Local |
BOOL |
|||
CLOSE |
Local |
BOOL |
|||
OFS |
Local |
UDINT |
|||
GET |
Local |
BOOL |
|||
RET |
Local |
INT |
|||
DATA |
Local |
INT |
|||
TS |
Local |
DT |
|||
ID |
Local |
INT |
|||
STR |
Local |
BOOL |
|||
SIZE |
Local |
UINT |
|||
ELEM |
Local |
UINT |
|||
CLEAR |
Local |
BOOL |
|||
ERR_CODE |
Local |
INT |
|||
LRUN |
Local |
BOOL |
|||
FS_CACHE |
Local |
INT |
[0..20] |
Comporta 2 blocos de dados |
|
FS_RMAN |
Local |
DTC_FRDMAN |
|||
LOG_NAME |
Local |
STRING |
‘/TL1.LOG’ |
||
Código ST
IF CLEAR THEN
HILS.DATA_CLEAR(FS_CACHE); // Limpa a cache para o teste
CLEAR := FALSE;
END_IF;
// Mantem o gerenciador de leitura de um arquivo
FS_RMAN( // DTC_FRDMAN
RUN := RUN, // [BOOL] Ativa o processo de inserção do dado
RD := RD, // [BOOL] Efetua um processo de leitura de dados do arquivo e transfere para a cache
CLOSE := CLOSE, // [BOOL] Indica para fechar o arquivo se o mesmo estiver aberto
BLK_OFS := OFS, // [UDINT] 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, // CACHE [INT] = Cache de blocos de dados utilizada
TS, // TS [DT] = Timestamp do 1o bloco de dados salvo na cache
ID, // ID [INT] = Identificador do 1o bloco de dados salvo na cache
STR, // STR [BOOL] = Indicador se o dado no 1o bloco de dados salvo na cache é uma string
SIZE, // SIZE [UINT] = Tamanho do dado localizado no 1o bloco de dados salvo na cache(no caso de string, é o tamanho da string)
ELEM // ELEM [UINT] = Numero de elementos associados ao dado(no caso de vetores)
);
IF RET = 0 THEN
RET := HILS.DTC_GET_VALUE(
FS_CACHE, // CACHE [INT] = Cache de blocos de dados utilizada
DATA // DATA [] = Dado ou vetor de dados a ser lido da cache de bloco de dados
);
END_IF;
GET := FALSE;
END_IF;
LRUN := RUN;