FS_FLUSH_FILE

Grava (flush) no arquivo os dados pendentes na cache interna do sistema de arquivos do SDCARD, preservando as alterações em caso de reinicialização, sem fechar o arquivo. É 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_FLUSH_FILE
         +--------------+
BOOL ----|START     DONE|---- BOOL
         |              |
 INT ----|FD      RESULT|---- INT
         +--------------+

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.

Quando a aplicação abre um arquivo e o mantém aberto, escrevendo dados periodicamente, as informações alteradas ficam armazenadas em uma cache interna do sistema de arquivos e só são transferidas ao arquivo quando a cache se completa. FS_FLUSH_FILE força essa transferência a qualquer momento, salvando o conteúdo da cache no arquivo. A execução inicia na ativação de START e é concluída com um pulso de DONE (ativo por um único scan); nesse instante, RESULT indica o estado da operação.

Nota

A função FS_CLOSE_FILE já realiza automaticamente esse flush da cache para o arquivo antes de fechá-lo.

Parâmetros

Nome

Direção

Tipo

Padrão

Faixa / Unidade

Descrição

START

IN

BOOL

FALSE

—

Ativa (TRUE) a execução. Se voltar a FALSE antes do término, o bloco é resetado.

FD

IN

INT

0

—

Descritor do arquivo no qual será realizado o flush de dados.

DONE

OUT

BOOL

FALSE

—

Pulso de término da execução (ativo por um único scan); então consulte RESULT.

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.FS_INVALID_HANDLE). 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

Recurso não disponível (sem suporte a sistema de arquivos ou SDCARD não detectado).

33

RE_NOT_INIT

Recurso não inicializado.

167

FS_CORRUPT

Sistema de arquivos pode estar corrompido.

170

FS_WRITE_LOCK

Arquivo aberto para escrita (bloqueio de escrita).

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 (consulte o manual do equipamento).

  • FD deve referir-se a um arquivo previamente aberto e ainda válido.

Observações

  • DONE fica ativo por apenas um ciclo de scan; leia RESULT nesse mesmo scan.

  • O flush preserva no arquivo os dados da cache, evitando perda em caso de reinicialização, sem fechar o arquivo.

Ver também

FS_CLOSE_FILE, FS_WRITE_DATA_FILE, FS_OPEN_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 realizado o flush *)
    FLUSH_FILE : HILS.FS_FLUSH_FILE; (* Instância do bloco "FS_FLUSH_FILE" *)
END_VAR

(* 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 *)
(* ... *)

(* Ativação do bloco de função FS_FLUSH_FILE *)
FLUSH_FILE(
  START := MY_START, (* [BOOL] Ativação da função *)
  FD    := FILE_FD   (* [INT] Descritor do arquivo *)
  );

(* Aguarda término da execução da função do sistema de arquivos *)
IF FLUSH_FILE.DONE THEN

  MY_START := FALSE; (* reseta ativação da função *)

  (* Testa código de retorno da execução da função *)
  IF FLUSH_FILE.RESULT = HILS.SUCCESS THEN
    (* ... Função executada com sucesso *)
  ELSE
    (* ... Erro na execução da função *)
  END_IF;

END_IF;

(* ... *)