FS_SEEK_FILE

Reposiciona o ponto de acesso de leitura/escrita de um arquivo de dados previamente aberto por FS_OPEN_FILE, conforme o modo de posicionamento selecionado. É um bloco de função (mantém estado entre scans; requer instância).

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

Bloco de função

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

Ative START para iniciar a operação; caso START volte a FALSE antes do término, o bloco é resetado. O ponto de acesso é reposicionado no arquivo indicado por FD de acordo com MODE:

  • HILS.SEEK_FILE_INIT — reposiciona para o início do arquivo (OFFSET_IN não é utilizado).

  • HILS.SEEK_FILE_CURRENT — reposiciona a partir da posição corrente, aplicando OFFSET_IN.

  • HILS.SEEK_FILE_END — reposiciona para o final do arquivo (OFFSET_IN não é utilizado).

A saída DONE emite um pulso de um scan ao término da execução; nesse momento RESULT indica o resultado e OFFSET_OUT traz a posição absoluta resultante.

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.

Parâmetros

Nome

Direção

Tipo

Padrão

Faixa / Unidade

Descrição

START

IN

BOOL

FALSE

—

Ativa (TRUE) a execução; voltar a FALSE antes do fim reseta o bloco.

FD

IN

INT

0

—

Descritor do arquivo (obtido em FS_OPEN_FILE) a reposicionar.

OFFSET_IN

IN

UDINT

0

bytes

Offset aplicado apenas no modo HILS.SEEK_FILE_CURRENT.

MODE

IN

FS_SEEK_FILE_MODE

HILS.SEEK_FILE_INIT

—

Modo de posicionamento no arquivo.

DONE

OUT

BOOL

FALSE

—

Pulso (um scan) de término da execução.

RESULT

OUT

INT

0

RET_CODE

Código de retorno da execução (ver Códigos de retorno).

OFFSET_OUT

OUT

UDINT

0

bytes

Posição absoluta do ponto de acesso após a execução.

Códigos de retorno

RESULT é do tipo RET_CODE. Use os identificadores com o namespace HILS (ex.: HILS.RE_INV_LEN). Códigos mais comuns deste bloco:

Código

Identificador

Significado

0

SUCCESS

Função executada com sucesso.

1

FAIL

Erro genérico.

5

GL_INV_PAR

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

7

GL_UNA_CMD

Comando não disponível ou não implementado.

8

GL_INV_STT

Estado corrente inválido.

10

GL_CMD_TMO

Timeout na execução do comando.

11

GL_CMD_CAN

Comando cancelado.

16

GL_CMD_PEND

Tratamento do comando pendente.

24

RE_NOT_AVA

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

25

RE_INV_LEN

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

33

RE_NOT_INIT

Recurso não inicializado.

167

FS_CORRUPT

Sistema de arquivo pode estar corrompido.

177

FS_INVALID_HANDLE

Handle de arquivo aberto inválido.

Lista completa dos códigos de retorno: RET_CODE - Códigos de retorno do firmware G5.

Pré-condições

  • O controlador deve ter suporte a sistema de arquivos em SDCARD (consulte o manual do modelo).

  • O arquivo deve ter sido aberto por FS_OPEN_FILE, e FD deve conter o descritor válido.

  • No modo HILS.SEEK_FILE_CURRENT, o offset combinado com a posição corrente não pode exceder o tamanho do arquivo.

Observações

  • OFFSET_IN só tem efeito no modo HILS.SEEK_FILE_CURRENT; é ignorado em SEEK_FILE_INIT e SEEK_FILE_END.

  • Consulte RESULT apenas após o pulso de DONE.

Ver também

FS_OPEN_FILE, FS_CLOSE_FILE, FS_READ_DATA_FILE, FS_WRITE_DATA_FILE, FS_LEN_FILE

Exemplo

Clique aqui para baixar a tabela de variáveis

Código ST

VAR
    MY_START  : BOOL := FALSE;          (* Ativação da função *)
    FILE_FD   : INT;                    (* Descritor do arquivo a ser posicionado *)
    SEEK_MODE : HILS.FS_SEEK_FILE_MODE; (* Modo de posicionamento do arquivo *)
    SEEK_FILE : HILS.FS_SEEK_FILE;      (* Instancia do bloco "FS_SEEK_FILE" *)
END_VAR

//==========================================================
// 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;

(* ... *)