FS_SEEK_FILE

Reposicionar o ponto de acesso para leitura/escrita de um arquivo de dados que foi aberto pela função “FS_OPEN_FILE”.

Nota

Antes de utilizar este bloco de função, consulte no manual do controlador utilizado se o mesmo possui suporte para sistema de arquivos no SDCARD.

Bloco

                                 FS_SEEK_FILE
                           +----------------------+
                  BOOL ----|START             DONE|---- BOOL
                           |                      |
                   INT ----|FD              RESULT|---- INT
                           |                      |
                 UDINT ----|OFFSET_IN   OFFSET_OUT|---- UDINT
                           |                      |
HILS.FS_SEEK_FILE_MODE ----|MODE                  |
                           +----------------------+

Parâmetros

Nome

Classe

Tipo

Dim.

V. Ini.

Descrição

START

Entrada

BOOL

FALSE

Ativação da função

FD

Entrada

INT

0

Descritor do arquivo a ser relizado o posicionamento de acesso

OFFSET_IN

Entrada

UDINT

0

Offset para a posição do arquivo

MODE

Entrada

HILS.FS_SEEK_FILE_MODE

0

Modo de posicionamento no arquivo

DONE

Saída

BOOL

FALSE

Puilso de fim de execução da função

RESULT

Saída

INT

0

Código de retorno da execução da função

OFFSET_OUT

Saída

UDINT

0

Offset absoluto para a posição do arquivo

Detalhamento dos Parâmetros

Parâmetro

Descrição

START

Deve ser colocado em “TRUE” para iniciar a execução. Caso seu valor seja alterado para “FALSE” antes do fim da operação, o bloco irá ser resetado.

FD

Descritor do arquivo a ser reposicionado o ponto de acesso.

MODE

O modo de posicionamento no arquivo deve ser do tipo “SEEK_FILE_MODE” com as seguites opções:

  • HILS.SEEK_FILE_INIT: Reposiciona o ponto de acesso para o início do arquivo. Parâmetro OFFSET_IN não é utilizado.

  • HILS.SEEK_FILE_CURRENT: Reposiciona o ponto de acesso ao arquivo considerando o offset (Parâmetro OFFSET_IN) a partir da posição corrente de acesso do arquivo.

  • HILS.SEEK_FILE_END: Reposiciona o ponto de acesso para o final do arquivo. Parâmetro OFFSET_IN não é utilizado.

OFFSET_IN

Este parâmetro é utilizado apenas no modo “HILS.SEEK_FILE_CURRENT”. Nos demais modos de posicionamento este parametro não é utilizado.

DONE

Pulso para indicar o término da execução da função. Após este pulso (fica ativo por apenas um ciclo de scan), o resultado da execução da função deve ser consultado no parâmetro de saída “RESULT”.

RESULT

Código de retorno associado a execução da função, 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 [3]

OFFSET_OUT

Posição do ponto de acesso no arquivo após o fim da execução da função.

Segue alguns exemplos de códigos de retorno:

RESULT

LABEL [4]

Descrição

0

HILS.SUCCESS

Função executada com sucesso.

1

HILS.FAIL

Erro genérico

5

HILS.GL_INV_PAR

Parâmetro(s) inválido(s).

7

HILS.GL_UNA_CMD

Comando não disponivel ou nao implementado.

8

HILS.GL_INV_STT

Estado corrente inválido.

10

HILS.GL_CMD_TMO

Timeout na execução do comando.

11

HILS.GL_CMD_CAN

Comando cancelado.

16

HILS.GL_CMD_PEND

Tratamento do comando pendente.

24

HILS.RE_NOT_AVA

Sem suporte para o sistema de arquivos ou SDCARD não detectado.

25

HILS.RE_INV_LEN

O offset em composição com o modo de posicionamento excede o tamanho do arquivo.

33

HILS.RE_NOT_INIT

Recurso não inicializado.

167

HILS.RC_FS_CORRUPT

Sistema de arquivo pode estar corrompido.

177

HILS.RC_FS_INVALID_HANDLE

Handle de arquivo aberto inválido.

Exemplo

Declaração de variáveis

Nome

Tipo

Valor Inicial

Descrição

MY_START

BOOL

FALSE

Ativação da função

FILE_FD

INT

Descritor do arquivo a ser posicionado

SEEK_MODE

FS_SEEK_FILE_MODE

Modo de posicionamento do arquivo

SEEK_FILE

FS_SEEK_FILE

Instancia do bloco “FS_SEEK_FILE”

Clique aqui para baixar a tabela de variáveis

Código ST

//==========================================================
// Exemplo de FS_SEEK_FILE no modo HILS.SEEK_FILE_INIT
//==========================================================

// Exemplo de ativação do bloco de função FS_SEEK_FILE para
// posicionar no "INICIO" do arquivo, por exemplo, para iniciar a leitura
// a partir do início do arquivo.

// Preenche parâmetros para a chamada do bloco de função
FILE_FD   := 0;                    // Descritor do arquivo
MY_START  := TRUE;                 // Ativação do bloco da função
SEEK_MODE := HILS.SEEK_FILE_INIT;  // Modo de acesso do arquivo
(* ... *)

SEEK_FILE(                   // FS_SEEK_FILE
  START     := MY_START,     // [BOOL] Ativação da função
  FD        := File_FD,      // [INT] Descritor do arquivo
  MODE      := SEEK_MODE     // [SEEK_FILE_MODE] Modo de posicionamento no arquivo
  );

// Aguarda término da execução da função do sistema de arquivos
if (SEEK_FILE.DONE) then

  MY_START := FALSE;     // Reseta ativação da função

  // Testa código de retorno da execução da função
  if (SEEK_FILE.RESULT = HILS.SUCCESS) then
    // ... Função executada com sucesso
  else
    // ... Erro na execução da função
  end_if;

end_if;

(* ... *)

//==========================================================
// Exemplo de FS_SEEK_FILE no modo HILS.SEEK_FILE_CURRENT
//==========================================================

// Exemplo de ativação do bloco de função FS_SEEK_FILE para
// posicionar o acesso a partir da posição corrente, até no máximo ao "FIM" do arquivo,
// por exemplo, para saltar alguns registros de dados no arquivo e realizar a leitura
// a partir deste determinado offset. No exemplo a seguir, o offset é de 32 bytes, logo se
// a posição corrente for de 32 bytes, ao fim da execução da função a nova posição será de 64 bytes.

// Preenche parâmetros para a chamada do bloco de função
FILE_FD   := 0;                       // Descritor do arquivo
MY_START  := TRUE;                    // Ativação do bloco da função
SEEK_MODE := HILS.SEEK_FILE_CURRENT;  // Modo de acesso do arquivo

SEEK_FILE(                   // FS_SEEK_FILE
  START     := my_START,     // [BOOL] Ativação da função
  FD        := File_FD,      // [INT] Descritor do arquivo
  OFFSET_IN := 32,           // [UDINT] Offset para a posição do arquivo
  MODE      := SEEK_MODE     // [SEEK_FILE_MODE] Modo de posicionamento no arquivo
  );

// Aguarda término da execução da função do sistema de arquivos
if (SEEK_FILE.DONE) then

  MY_START := FALSE;     // Reseta ativação da função

  // Testa código de retorno da execução da função
  if (SEEK_FILE.RESULT = HILS.SUCCESS) then
    // ... Função executada com sucesso
  else
    // ... Erro na execução da função
  end_if;

end_if;

//==========================================================
// Exemplo de FS_SEEK_FILE no modo HILS.SEEK_FILE_END
//==========================================================

// Exemplo de ativação do bloco de função FS_SEEK_FILE para
// posicionar no "FIM" do arquivo, por exemplo, para iniciar a escrita
// a partir do final do arquivo.

// Preenche parâmetros para a chamada do bloco de função
FILE_FD   := 0;                       // Descritor do arquivo
MY_START  := TRUE;                    // Ativação do bloco da função
SEEK_MODE := HILS.SEEK_FILE_END;      // Modo de acesso do arquivo

SEEK_FILE(                   // FS_SEEK_FILE
  START     := MY_START,     // [BOOL] Ativação da função
  FD        := File_FD,      // [INT] Descritor do arquivo
  MODE      := SEEK_MODE     // [SEEK_FILE_MODE] Modo de posicionamento no arquivo
  );

// Aguarda término da execução da função do sistema de arquivos
if (SEEK_FILE.DONE) then

  MY_START := FALSE;     // reseta ativação da função

  // Testa código de retorno da execução da função
  if (SEEK_FILE.RESULT = HILS.SUCCESS) then
    // ... Função executada com sucesso
  else
    // ... Erro na execução da função
  end_if;

end_if;

(* ... *)