FS_LEN_FILE

Obtém o tamanho, em bytes, de um arquivo no sistema de arquivos do SDCARD, identificando o arquivo pelo seu descritor (FD) ou pelo seu nome/caminho (NAME), conforme o modo selecionado em ACCESS. É um bloco de função (mantém estado entre scans; requer instância) e exige controlador com suporte a sistema de arquivos.

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

Bloco de função

                                FS_LEN_FILE
                             +---------------+
                    BOOL ----|START      DONE|---- BOOL
                             |               |
HILS.FS_TYPE_ACCESS_FILE ----|ACCESS   RESULT|---- INT
                             |               |
                     INT ----|FD          LEN|---- LINT
                             |               |
                  STRING ----|NAME --------- |----
                             +---------------+

Coloque START em TRUE para iniciar a operação; se START voltar a FALSE antes do término, o bloco é resetado. O parâmetro ACCESS seleciona como o arquivo é identificado: HILS.ACCESS_FILE_BY_FD usa o descritor em FD (não requer NAME); HILS.ACCESS_FILE_BY_NAME usa o caminho em NAME (não requer FD). Ao final, DONE gera um pulso de um scan indicando que o resultado já pode ser consultado em RESULT e o tamanho em LEN.

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 a execução do bloco; retornar a FALSE antes do término reseta o bloco.

ACCESS

IN

HILS.FS_TYPE_ACCESS_FILE

0

ACCESS_FILE_BY_FD / ACCESS_FILE_BY_NAME

Modo de especificação do arquivo: por descritor (FD) ou por nome (NAME).

FD

IN

INT

0

—

Descritor do arquivo. Necessário quando ACCESS = HILS.ACCESS_FILE_BY_FD.

NAME

IN_OUT

STRING

—

—

Caminho completo do arquivo (inicia com /, máx. 64 caracteres). Necessário quando ACCESS = HILS.ACCESS_FILE_BY_NAME.

DONE

OUT

BOOL

FALSE

—

Pulso de fim de execução (ativo por um scan); nesse instante consulte RESULT e LEN.

RESULT

OUT

INT

0

RET_CODE

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

LEN

OUT

LINT

0

bytes

Tamanho do arquivo, em bytes.

Códigos de retorno

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

Código

Identificador

Significado

0

SUCCESS

Função 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.

33

RE_NOT_INIT

Recurso não inicializado.

174

FS_NOTFOUND

O arquivo não foi encontrado.

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.

  • Quando ACCESS = HILS.ACCESS_FILE_BY_NAME, NAME deve conter o caminho completo, iniciando com / (diretório raiz) e com no máximo 64 caracteres. Exemplos: '/Dados.dat', '/Pasta_1/Dados.dat', '/PASTA_1/PASTA_2/Receita.cfg'.

  • Quando ACCESS = HILS.ACCESS_FILE_BY_FD, FD deve conter um descritor válido de arquivo aberto.

Observações

  • O sistema de arquivos não é case sensitive: 'DADOS.DAT', 'Dados.Dat' e 'dados.dat' referem-se ao mesmo arquivo.

  • DONE fica ativo por apenas um ciclo de scan; consulte RESULT e LEN nesse instante.

Ver também

FS_FILE_INFO, FS_OPEN_FILE, FS_READ_DATA_FILE, FS_SEEK_FILE

Exemplo

Clique aqui para baixar a tabela de variáveis

Código ST

VAR
    FILE_DADOS  : STRING := '/DADOS.DAT';     (* Constante string com o nome do arquivo a ser obtido o tamanho *)
    MY_START    : BOOL := FALSE;              (* Ativação da função *)
    FILE_FD     : INT;                        (* Descritor do arquivo a ser obtido o tamanho *)
    ACCESS_MODE : HILS.FS_TYPE_ACCESS_FILE;   (* Modo de especificação do acesso ao arquivo *)
    FILE_NAME   : STRING;                     (* Nome do arquivo, limitado a 64 caracteres *)
    LEN_FILE    : HILS.FS_LEN_FILE;           (* Instancia do bloco "FS_LEN_FILE" *)
END_VAR

//============================================================================
// Exemplo de parametrização 1: Obtem tamanho no modo HILS.ACCESS_FILE_BY_FD
//============================================================================

// Preenche parâmetros para a chamada do bloco de função
FILE_FD     := 0;                      // Descritor do arquivo a ser acessado
ACCESS_MODE := HILS.ACCESS_FILE_BY_FD; // Modo de acesso ao arquivo pelo seu FD

(* ... *)

//============================================================================
// Exemplo de FS_LEN_FILE no modo HILS.ACCESS_FILE_BY_FD
//============================================================================

// Preenche parâmetros para a chamada do bloco de função
MY_START := TRUE;        // Ativação do bloco da função
(* ... *)

// Exemplo de ativação do bloco de função FS_LEN_FILE
LEN_FILE(
  START  := MY_START,     // [BOOL] Ativação da função
  ACCESS := ACCESS_MODE,  // [TYPE_ACCESS_FILE] Tipo de especificação de acesso ao arquivo
  FD     := FILE_FD       // [INT] Descritor do arquivo
  );

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

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

  // Testa código de retorno da execução da função
  if (LEN_FILE.RESULT = HILS.SUCCESS) then
    // ... Função executada com sucesso (tamanho disponível em LEN_FILE.LEN)
  else
    // ... Erro na execução da função
  end_if;

end_if;

(* ... *)

//============================================================================
// Exemplo de parametrização 2: Obtem tamanho no modo HILS.ACCESS_FILE_BY_NAME
// de arquivo na raiz do sistema de arquivo
//============================================================================

// Preenche parâmetros para a chamada do bloco de função
FILE_NAME   := FILE_DADOS;               // Nome do arquivo '/DADOS.DAT' na raiz
ACCESS_MODE := HILS.ACCESS_FILE_BY_NAME; // Modo de acesso ao arquivo pelo nome do arquivo

(* ... *)

//============================================================================
// Exemplo de parametrização 3: Obtem tamanho no modo HILS.ACCESS_FILE_BY_NAME
// de arquivo dentro de um ou mais diretórios do sistema de arquivo
//============================================================================

// Preenche parâmetros para a chamada do bloco de função
FILE_NAME   := '/Pasta_1/Dados.dat';     // Nome do arquivo 'Dados.Dat' dentro do diretório "/Pasta_1"
ACCESS_MODE := HILS.ACCESS_FILE_BY_NAME; // Modo de acesso ao arquivo pelo nome do arquivo

(* ... *)

//============================================================================
// Exemplo de FS_LEN_FILE no modo HILS.ACCESS_FILE_BY_NAME
//============================================================================

// Preenche parâmetros para a chamada do bloco de função
MY_START    := TRUE;                     // Ativação do bloco da função
(* ... *)

// Exemplo de ativação do bloco de função FS_LEN_FILE
LEN_FILE(
  START  := MY_START,         // [BOOL] Ativação da função
  ACCESS := ACCESS_MODE,      // [TYPE_ACCESS_FILE] Tipo de especificação de acesso ao arquivo
  NAME   := FILE_NAME         // [STRING] Nome do arquivo a ser acessado
  );

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

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

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

end_if;

(* ... *)