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_INnão é utilizado).HILS.SEEK_FILE_CURRENT— reposiciona a partir da posição corrente, aplicandoOFFSET_IN.HILS.SEEK_FILE_END— reposiciona para o final do arquivo (OFFSET_INnã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 |
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
FDdeve 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_INsó tem efeito no modoHILS.SEEK_FILE_CURRENT; é ignorado emSEEK_FILE_INITeSEEK_FILE_END.Consulte
RESULTapenas após o pulso deDONE.
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;
(* ... *)