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:
|
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. |
Este LABEL pode ser utilizado no código fonte pois está definido no tipo RET_CODE disponível na biblioteca HI_STD |
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” |
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;
(* ... *)