FS_READ_DATA_FILE
Lê um bloco de dados no formato binário de um arquivo do sistema de arquivos do
SDCARD, exigindo que o arquivo esteja previamente aberto no modo
OPEN_FILE_READ. É 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_READ_DATA_FILE
+-------------------+
BOOL ----|START DONE|---- BOOL
| |
INT ----|FD READED|---- INT
| |
INT ----|DATA_LEN RESULT|---- INT
| |
----|DATA_VALUE --------|----
+-------------------+
A execução é iniciada colocando START em TRUE. Se START retornar a FALSE
antes do término da operação, o bloco é resetado. Ao concluir, DONE emite um
pulso de um único ciclo de scan; nesse instante o resultado deve ser consultado
em RESULT e a quantidade de bytes efetivamente lidos em READED. Os dados
lidos são depositados na estrutura conectada a DATA_VALUE.
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 da função; retornar a FALSE antes do término reseta o bloco. |
FD |
IN |
INT |
0 |
— |
Descritor do arquivo (aberto em |
DATA_LEN |
IN |
INT |
0 |
bytes |
Quantidade de bytes a serem lidos do arquivo. |
DATA_VALUE |
IN_OUT |
ANY |
— |
— |
Estrutura/variável onde os dados lidos do arquivo serão armazenados. |
DONE |
OUT |
BOOL |
FALSE |
— |
Pulso (um ciclo de scan) que sinaliza o término da execução. |
READED |
OUT |
INT |
0 |
bytes |
Quantidade de bytes efetivamente lidos do arquivo. |
RESULT |
OUT |
INT |
0 |
RET_CODE |
Código de retorno da execução (ver Códigos de retorno). |
Códigos de retorno
RESULT é do tipo RET_CODE. Use os identificadores com o namespace HILS
(ex.: HILS.RE_RES_EMP). RESULT = 0 (SUCCESS) indica sucesso; qualquer
valor diferente de 0 indica falha. Códigos mais comuns deste bloco:
Código |
Identificador |
Significado |
|---|---|---|
0 |
SUCCESS |
Leitura executada com sucesso. |
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. |
27 |
RE_RES_EMP |
Buffer do recurso vazio, indicando fim de arquivo. |
31 |
RE_READ_ERR |
Falha no processo de leitura do recurso. |
33 |
RE_NOT_INIT |
Recurso não inicializado. |
167 |
FS_CORRUPT |
Sistema de arquivos pode estar corrompido. |
168 |
FS_INV_OPER_MODE |
Modo de operação incompatível com o estado do arquivo. |
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 possuir suporte a sistema de arquivos no SDCARD.
O arquivo deve estar aberto no modo
OPEN_FILE_READeFDdeve conter o descritor válido retornado na abertura.
Observações
DONEfica ativo por apenas um ciclo de scan; leiaRESULTeREADEDnesse mesmo ciclo.DATA_VALUEaceita variáveis escalares, vetores e estruturas definidas pelo usuário;DATA_LENdeve corresponder ao tamanho, em bytes, do dado a ser lido.
Ver também
FS_OPEN_FILE, FS_CLOSE_FILE, FS_WRITE_DATA_FILE, FS_READ_DATA_TEXT, FS_SEEK_FILE
Exemplo
Clique aqui para baixar a tabela de variáveis
Código ST
TYPE
REG_DATA : STRUCT (* Estrutura criada pelo usuário *)
ALARME : BOOL := FALSE;
RUN : BOOL := FALSE;
MODO_OPERACAO : INT := 0;
CICLO_CORRENTE : INT := 0;
CICLO_TOTAL : INT := 0;
ORDEM_SERVICO : UINT := 0;
CODIGO_PRODUTO : UINT := 0;
TEMPERATURA : REAL := 0;
UMIDADE : REAL := 0;
PRESSAO : REAL := 0;
VAZAO : REAL := 0;
VELOCIDADE : REAL := 0;
END_STRUCT;
END_TYPE
VAR
TEMPERATURA : REAL := 0; (* Variável tipo REAL *)
ACIONAMENTO : ARRAY [0..3] OF INT; (* Vetor de INT *)
DATA_USER : REG_DATA; (* Estrutura criada pelo usuário *)
VET_USER : ARRAY [0..3] OF REG_DATA; (* Vetor de uma estrutura criada pelo usuário *)
MY_START : BOOL := FALSE; (* Ativação da função *)
FILE_FD : INT; (* Descritor do arquivo a ser realizado a leitura de dados *)
READ_FILE : HILS.FS_READ_DATA_FILE; (* Instancia do bloco "FS_READ_DATA_FILE" *)
END_VAR
//======================================================
// Exemplo de leitura de uma variável REAL
//======================================================
// 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
(* ... *)
// Exemplo de ativação do bloco de função FS_READ_DATA_FILE
READ_FILE(
START := MY_START, // [BOOL] Ativação da função
FD := FILE_FD, // [INT] Descritor do arquivo
DATA_LEN := 4, // [INT] Tamanho de dados a serem lidos do arquivo (bytes)
DATA_VALUE := TEMPERATURA // [ANY] Base de dados p/ armazenar os dados lidos do arquivo
);
// Aguarda término da execução da função do sistema de arquivos
if (READ_FILE.DONE) then
MY_START := FALSE; // reseta ativação da função
// Testa código de retorno da execução da função
if (READ_FILE.RESULT = HILS.SUCCESS) then
// ... Função executada com sucesso
// ... Leitura completa, variável atualizada
else
// ... Erro na execução da função
end_if;
end_if;
(* ... *)
//======================================================
// Exemplo de leitura de um vetor de INT
//======================================================
// 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
(* ... *)
// Exemplo de ativação do bloco de função FS_READ_DATA_FILE
READ_FILE(
START := MY_START, // [BOOL] Ativação da função
FD := FILE_FD, // [INT] Descritor do arquivo
DATA_LEN := 8, // [INT] Tamanho de dados a serem lidos do arquivo (bytes)
DATA_VALUE := ACIONAMENTO // [ANY] Base de dados p/ armazenar os dados lidos do arquivo
);
// Aguarda término da execução da função do sistema de arquivos
if (READ_FILE.DONE) then
MY_START := FALSE; // reseta ativação da função
// Testa código de retorno da execução da função
if (READ_FILE.RESULT = HILS.SUCCESS) then
// ... Função executada com sucesso
// ... Leitura completa, vetor atualizado
else
// ... Erro na execução da função
end_if;
end_if;
(* ... *)
//===========================================================
// Exemplo de leitura de uma estrutura criada pelo usuário
//===========================================================
// 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
(* ... *)
// Exemplo de ativação do bloco de função FS_READ_DATA_FILE
READ_FILE(
START := MY_START, // [BOOL] Ativação da função
FD := FILE_FD, // [INT] Descritor do arquivo
DATA_LEN := 32, // [INT] Tamanho de dados a serem lidos do arquivo (bytes)
DATA_VALUE := DATA_USER // [ANY] Base de dados p/ armazenar os dados lidos do arquivo
);
// Aguarda término da execução da função do sistema de arquivos
if (READ_FILE.DONE) then
MY_START := FALSE; // Reseta ativação da função
// Testa código de retorno da execução da função
if (READ_FILE.RESULT = HILS.SUCCESS) then
// ... Função executada com sucesso
// ... Leitura completa, estrutura atualizada
(* ... *)
else
// ... Erro na execução da função
end_if;
end_if;
(* ... *)
//======================================================================
// Exemplo de leitura de um vetor de uma estrutura criada pelo usuário
//======================================================================
// 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
(* ... *)
// Exemplo de ativação do bloco de função FS_READ_DATA_FILE
READ_FILE(
START := MY_START, // [BOOL] Ativação da função
FD := FILE_FD, // [INT] Descritor do arquivo
DATA_LEN := 128, // [INT] Tamanho de dados a serem lidos do arquivo (bytes)
DATA_VALUE := VET_USER // [ANY] Base de dados p/ armazenar os dados lidos do arquivo
);
// Aguarda término da execução da função do sistema de arquivos
if (READ_FILE.DONE) then
MY_START := FALSE; // Reseta ativação da função
// Testa código de retorno da execução da função
if (READ_FILE.RESULT = HILS.SUCCESS) then
// ... Função executada com sucesso
// ... Leitura completa, vetor de estrutura atualizado
(* ... *)
else
// ... Erro na execução da função
end_if;
end_if;
(* ... *)