FS_LOG_FILE

Registra (loga) dados em um arquivo do sistema de arquivos do controlador, em formato binário ou texto conforme o comando (CMD), criando o arquivo automaticamente caso ele ainda não exista. É um bloco de função (mantém estado entre scans; requer instância).

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

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 de função

              FS_LOG_FILE
          +------------------+
  BOOL ---|START         DONE|--- BOOL
          |                  |
          |            RESULT|--- INT
          |                  |
   INT ---|CMD ------------- |---
          |                  |
STRING ---|DATA_FILE ------- |---
          |                  |
   ANY ---|DATA ------------ |---
          +------------------+

Ao ativar START o bloco inicia o tratamento do comando indicado em CMD:

  • 1 : loga o dado em DATA no arquivo em formato binário (DATA pode ser qualquer variável numérica ou estrutura de dados).

  • 2 : loga o dado em DATA no arquivo em formato texto (DATA deve ser obrigatoriamente uma variável do tipo STRING, já formatada pela aplicação).

  • 10 : formata o sistema de arquivos.

  • 20 : elimina o arquivo de dados.

DATA_FILE deve conter o caminho completo do arquivo de log, sempre iniciando pelo caractere '/' (diretório raiz) — por exemplo '/Dados.log', '/Pasta_1/Dados.dat' ou '/PASTA_1/PASTA_2/Historico.log'. O tamanho máximo do caminho é de 64 caracteres. Se o arquivo não existir, ele é criado automaticamente antes da escrita.

Ao término do processamento, DONE emite um pulso (TRUE = finalizado; FALSE = em andamento) e RESULT indica o resultado da última execução.

Dica

Recomendações para nomes de arquivos e diretórios:

Apesar do sistema de arquivos aceitar qualquer caracter para definição de um nome de arquivo ou diretório, recomenda-se utilizar apenas os tipos:

  • Caracteres alfabéticos de A-Z ou a-z

  • Caracteres numéricos de 0 - 9

  • Caracteres especiais . (ponto decimal) ou _ (underline)

  • O tamanho máximo permitido para nome do arquivo ou diretório é de 64 caracteres.

  • Apesar de permitir caracteres em minúscula e maiúscula na nomenclatura, o sistema não é “case sensitive”, ou seja, os nomes ‘DADOS.DAT’, ‘Dados.Dat’ e ‘dados.dat’ referem-se ao mesmo arquivo.

Essa recomendação é sugerida, pois quando o arquivo for eventualmente transferido para o computador, o arquivo/diretório deve obedecer as regras de nomeação do sistema operacional do PC.

Exemplos de nomes recomendados:

  • ‘PASTA’

  • ‘/Pasta_1/Pasta_2’

  • ‘dados.dat’

  • ‘abc_123.txt’

Exemplos de nomes não recomendados:

  • ‘teste abc’

  • ‘áãç’

  • ‘abc’ e ‘ABC’ (considerados como o mesmo arquivo pelo sistema operacional windows)

Instruções de acesso para arquivos e diretórios:

O diretório inicial default do sistema de arquivo é o diretório raiz.

Para acessar diretamente o diretório raiz, utilizar ‘/’ antes do nome do arquivo ou diretório.

Exemplos de caminho completo para diretórios:
  • ‘/’ : Diretório raiz do sistema de arquivo

  • ‘/PASTA_1’ : Diretório “PASTA_1” localizado na raiz do sistema de arquivo

  • ‘/PASTA_1/PASTA_2’ : Caminho completo para diretório “PASTA_2” a partir da “PASTA_1” localizado na raiz do sistema de arquivo

  • ‘/p1/p2/p3’ : Caminho completo para diretório “p3” a partir dos diretórios “/p1/p2”

Exemplos de caminho completo para arquivos:
  • ‘/dados.dat’ : Arquivo “dados.dat” localizado na raiz do sistema de arquivo

  • ‘/PASTA_1/Log.dat’ : Arquivo “Log.dat” localizado dentro do diretório “/PASTA_1”

  • ‘/DADOS/Jan/Dados.bak’ : Arquivo “Dados.bak” localizado dentro dos diretórios “/DADOS/Jan”

  • ‘/P1/P2/P3/SETUP.CFG’ : Arquivo “SETUP.CFG” localizado dentro dos diretórios “/P1/P2/P3”

Parâmetros

Nome

Direção

Tipo

Dimensão

Padrão

Faixa / Unidade

Descrição

START

IN

BOOL

—

FALSE

—

Quando em TRUE, inicia o tratamento do comando associado ao arquivo.

CMD

IN_OUT

INT

—

—

1, 2, 10, 20

Comando associado ao arquivo de dados (ver Bloco de função).

DATA_FILE

IN_OUT

STRING

:*

—

máx. 64 caracteres

Caminho completo do arquivo de log; deve iniciar com '/'.

DATA

IN_OUT

ANY

—

—

—

Registro de dados a logar (numérico/estrutura para CMD=1; STRING para CMD=2).

DONE

OUT

BOOL

—

—

—

Pulso de fim de execução (TRUE = processo finalizado).

RESULT

OUT

INT

—

—

RET_CODE

Código de retorno da última 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_NOTFOUND). 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).

6

GL_INV_CMD

Comando inválido ou não reconhecido.

51

SO_ALO_ERR

Sem memória disponível no equipamento.

167

FS_CORRUPT

Sistema de arquivo corrompido.

173

FS_INVALIDNAME

O nome de arquivo é inválido.

174

FS_NOTFOUND

O arquivo não foi encontrado.

178

FS_INVALID_DIR

Diretório inválido ou inexistente.

Lista completa dos códigos de retorno: RET_CODE - Códigos de retorno do firmware G5.

Pré-condições

  • O controlador utilizado deve possuir suporte a sistema de arquivos em SDCARD (consulte o manual do equipamento).

  • DATA_FILE deve iniciar com '/' e ter no máximo 64 caracteres.

  • Para CMD=2 (texto), DATA deve ser uma STRING já formatada pela aplicação.

Observações

  • Se o arquivo não existir, ele é criado automaticamente na primeira escrita.

  • RESULT é atualizado ao encerramento de cada comando; DONE sinaliza o fim do processamento por pulso.

Ver também

FS_WRITE_DATA_FILE, FS_WRITE_DATA_TEXT, FS_FORMAT, FS_DELETE_FILE_DIR

Exemplo

Exemplo 1 — log em arquivo CSV (texto)

Gera um arquivo de dados históricos tipo CSV (texto). O registro a ser logado é uma variável do tipo STRING cujo conteúdo é formatado pela aplicação.

Clique aqui para baixar a tabela de variáveis

VAR
    TICK_LOG      : HILS.TICK;              (* Temporizador para logar dados periodicamente *)
    LOG_FILE_CSV  : HILS.FS_LOG_FILE;       (* Funcao de LOG do sistema de arquivos *)
    FILE_NAME_CSV : STRING := '/Dados.csv'; (* Caminho para o nome do arquivo de dados na raiz *)
    CMD_LOG_CSV   : INT;                    (* Comando para logar dados historicos *)
    APP_DATA_CSV  : STRING;                 (* Registro de dados a ser logado no arquivo *)
END_VAR

(* ... *)

// Temporizador para logar os dados periodicamente a cada 30 seg
TICK_LOG(TM := T#30s);

// Ativa log do dado historico
IF(TICK_LOG.EV) THEN
  // Formata string a ser escrita no arquivo CSV
  (* ... *)
  APP_DATA_CSV := CONCAT((* ... *), (* ... *)); // OBS.: montar aqui a string a ser logada
  (* ... *)
  // Ativa comando para logar string no arquivo CSV
  CMD_LOG_CSV := 2;
END_IF;

// Loga string no arquivo de dados historicos tipo CSV
LOG_FILE_CSV(
    START     := TRUE,          // [BOOL] Ativacao da funcao
    CMD       := CMD_LOG_CSV,   // [INT] Comando associado ao arquivo de dados
    DATA_FILE := FILE_NAME_CSV, // [STRING] Caminho completo para o nome do arquivo de dados
    DATA      := APP_DATA_CSV   // [STRING] Registro de dados a ser logado no arquivo
    //DONE    => ,              // [BOOL] Pulso de fim de execucao da funcao
    //RESULT  =>                // [INT] Codigo de retorno da execucao da ultima funcao
    );

(* ... *)

Exemplo 2 — log em arquivo DAT (binário)

Gera um arquivo de dados históricos tipo DAT (binário). O registro a ser logado é uma estrutura de dados (HISTORY_DATA) cujos campos contêm os dados desejados.

Clique aqui para baixar a tabela de variáveis

TYPE
    HISTORY_DATA : STRUCT
        Timestamp   : DT;   (* Timestamp do registro de dados *)
        Temperatura : REAL; (* Temperatura atual *)
        Umidade     : REAL; (* Umidade atual *)
    END_STRUCT;
END_TYPE

VAR
    TICK_LOG      : HILS.TICK;              (* Temporizador para logar dados periodicamente *)
    LOG_FILE_DAT  : HILS.FS_LOG_FILE;       (* Funcao de LOG do sistema de arquivos *)
    FILE_NAME_DAT : STRING := '/Dados.dat'; (* Caminho para o nome do arquivo de dados *)
    CMD_LOG_DAT   : INT;                    (* Comando para logar dados historicos *)
    APP_DATA_DAT  : HISTORY_DATA;           (* Registro de dados a ser logado no arquivo *)
END_VAR

(* ... *)

// Temporizador para logar os dados periodicamente a cada 5 seg
TICK_LOG(TM := T#5s);

// Ativa log do dado historico
IF(TICK_LOG.EV) THEN
  // Monta registro de dados a ser escrito no arquivo DAT
  (* ... *)
  APP_DATA_DAT.Timestamp   := HILS.GET_SYSTIME();
  APP_DATA_DAT.Temperatura := 25.0;
  APP_DATA_DAT.Umidade     := 45.0;
  (* ... *)
  // Ativa comando para logar estrutura de dados no arquivo DAT
  CMD_LOG_DAT := 1;
END_IF;

// Loga estrutura no arquivo de dados historicos tipo DAT
LOG_FILE_DAT(
    START     := TRUE,           // [BOOL] Ativacao da funcao
    CMD       := CMD_LOG_DAT,    // [INT] Comando associado ao arquivo de dados
    DATA_FILE := FILE_NAME_DAT,  // [STRING] Caminho completo para o nome do arquivo de dados
    DATA      := APP_DATA_DAT    // [ANY] Registro de dados a ser logado no arquivo
    //DONE    => ,               // [BOOL] Pulso de fim de execucao da funcao
    //RESULT  =>                 // [INT] Codigo de retorno da execucao da ultima funcao
    );

(* ... *)