FS_LOG_FILE

Este bloco permite logar dados em um arquivo de dados. Através do tipo de comando (CMD) é possível logar dados em arquivos do tipo binário ou texto. Se o arquivo não existe, automaticamente cria-se o arquivo e escreve o dado no arquivo.

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_LOG_FILE
          +------------------+
  BOOL ---|START         DONE|--- BOOL
          |                  |
          |            RESULT|--- INT
          |                  |
   INT ---|CMD ------------- |---
          |                  |
STRING ---|DATA_FILE ------- |---
          |                  |
   ANY ---|DATA ------------ |---
          +------------------+

Parâmetros

Nome

Classe

Tipo

Dim.

V. Ini.

Opções

Descrição

START

Entrada

BOOL

FALSE

Ativação da função

CMD

Entrada/Saída

INT

Comando associado ao arquivo de dados

DATA_FILE

Entrada/Saída

STRING

:*

Caminho completo para o nome do arquivo de dados a serem logados

DATA

Entrada/Saída

ANY/STRING

Registro de dados a ser logado no arquivo

DONE

Saída

BOOL

Pulso de fim de execução da função

RESULT

Saída

INT

Código de retorno da execução da última função

Detalhamento dos Parâmetros

Parâmetro

Descrição

START

Quando ativado, inicia o processo de tratamento de um comando.

CMD

Este bloco trata os seguintes comandos associados ao arquivo de dados:

  • 1 : Comando para logar dados no arquivo em formato binário

  • 2 : Comando para logar dados no arquivo em formato texto

  • 10 : Comando para formatar o sistema de arquivo

  • 20 : Comando para eliminar o arquivo de dados

DATA_FILE

Este parâmetro deve ser especificado com o caminho completo para o nome do arquivo de log dos dados. O diretório raíz é identificado pelo caractere ‘/’, e desta forma este parâmetro deve sempre iniciar com este caractere.

  • Exemplo de arquivo: ‘/Dados.log’, ‘/Pasta_1/Dados.dat’, ‘/PASTA_1/PASTA_2/Historico.log’

  • O tamanho máximo permitido para o caminho do nome do arquivo é de 64 caracteres.

DATA

Registro de dados a ser logado no arquivo de dados.

  • Se CMD = 1 o registro de dados pode ser qualquer variável numérica ou estrutura de dados. Neste caso a aplicação pode criar uma estrutura de dados com os diversos campos de dados que deseja logar no arquivo com formato binário.

  • Se CMD = 2 o registro de dados deve ser necessariamente uma variável do tipo STRING. Neste caso, a aplicação é responsável por formatar todo o texto da string com o conteúdo desejado para ser logado no arquivo com formato texto.

DONE

Pulso de fim de execução da função.

  • TRUE = processo finalizado

  • FALSE = processo em andamento

RESULT

Código de retorno da execução da última 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 [2]

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”


Exemplo 1

Este exemplo ilustra a utilização deste bloco de função FS_LOG_FILE do sistema de arquivos do controlador para gerar arquivo de dados históricos tipo CSV (texto). Neste caso o registro de dados a ser logado corresponde a uma variável do tipo STRING cujo conteúdo deve conter os dados que se deseja logar.

Declaração de variáveis

Nome

Tipo

Valor Inicial

Descrição

TICK_LOG

HILS.TICK

Temporizador para logar dados periodicamente

LOG_FILE_CSV

HILS.FS_LOG_FILE

Função de LOG do sistema de arquivos

FILE_NAME_CSV

STRING

‘/Dados.csv’

Caminho para o nome para o arquivo de dados na raiz

CMD_LOG_CSV

INT

Comando para logar dados históricos

APP_DATA_CSV

STRING

Registro de dados a ser logado no arquivo

Clique aqui para baixar a tabela de variáveis

Código ST

(* ... *)

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

// Ativa log do dado histórico
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 históricos tipo CSV
LOG_FILE_CSV(
    START     := TRUE,          // [BOOL] Ativação da função
    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 a serem logados
    DATA      := APP_DATA_CSV   // [STRING] Registro de dados a ser logado no arquivo
    //DONE    => ,              // [BOOL] Pulso de fim de execução da função
    //RESULT  =>                // [INT] Código de retorno da execução da última função deste bloco de função
    );

(* ... *)

Exemplo 2

Este exemplo ilustra a utilização deste bloco de função FS_LOG_FILE do sistema de arquivos do controlador para gerar arquivo de dados históricos tipo DAT (binário). Neste caso o registro de dados a ser logado corresponde a uma estrutura de dados cujos campos contem os dados que se deseja logar.

Declaração de Tipos de dados

Definição do tipo de dados “HISTORY_DATA” referente ao registro de dados a ser logado no arquivo.

Nome do campo

Tipo Dado

Descrição

Timestamp

DT

Timestamp do registro de dados

Temperatura

REAL

Temperatura atual

Umidade

REAL

Umidade atual

Declaração de variáveis

Nome

Tipo

Valor Inicial

Descrição

TICK_LOG

HILS.TICK

Temporizador para logar dados periodicamente

LOG_FILE_DAT

HILS.FS_LOG_FILE

Função de LOG do sistema de arquivos

FILE_NAME_DAT

STRING

‘/Dados.dat’

caminho para o nome para o arquivo de dados

CMD_LOG_DAT

INT

Comando para logar dados históricos

APP_DATA_DAT

HISTORY_DATA

Registro de dados a ser logado no arquivo

Clique aqui para baixar a tabela de variáveis

Código ST

(* ... *)

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

// Ativa log do dado histórico
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 string no arquivo de dados históricos tipo DAT
LOG_FILE_DAT(
    START     := TRUE,           // [BOOL] Ativação da função
    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 a serem logados
    DATA      := APP_DATA_DAT    // [STRING] Registro de dados a ser logado no arquivo
    //DONE    => ,               // [BOOL] Pulso de fim de execução da função
    //RESULT  =>                 // [INT] Código de retorno da execução da última função deste bloco de função
    );

(* ... *)