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:

  • Se for igual a 0: Função executada com sucesso - código HILS.SUCCESS

  • Se for diferente de 0: Falha na execução da função indica o respectivo código de erro. [2]

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:

  • Não disponível no equipamento

  • Sistema de arquivo sem memória de massa (sem SDCARD) etc.

  • Diretório cheio ou em falha etc.

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’

Clique aqui para baixar a tabela de variáveis

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;