FS_RECIPE_FILE

Este bloco foi criado para gerenciar arquivos com receitas.

Disponibiliza comandos para criar um arquivo com diversas receitas, ler e escrever receitas deste respectivo 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_RECIPE_FILE
           +------------------+
   INT ----|ID            DONE|---- BOOL
           |                  |
           |            RESULT|---- INT
           |                  |
   INT ----|CMD ------------- |----
           |                  |
STRING ----|DATA_FILE --------|----
           |                  |
       ----|DATA ------------ |----
           +------------------+

Parâmetros

Nome

Classe

Tipo

Dim.

V. Ini.

Descrição

ID

Entrada

INT

0

Identificador da receita

CMD

Entrada/Saída

INT

0

Código do comando para o arquivo de receita

DATA_FILE

Entrada/Saída

STRING

Caminho completo para o nome do arquivo de receita

DATA

Entrada/Saída

ANY

Registro de dados da receita a ser manipulada no arquivo

DONE

Saída

BOOL

FALSE

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

RESULT

Saída

INT

0

Código de retorno

Detalhamento dos Parâmetros

Parâmetro

Descrição

ID

Parâmetro utilizado em alguns dos comandos “CMD” tratados por este bloco.

  • Durante a criação do arquivo especifica a quantidade máxima de receitas que serão armazenadas no arquivo. Note que a quantidade mínima de receitas armazenada é 1 (um), de tal modo que neste comando este parâmetro deve ser um valor maior que zero.

  • Durante a escrita ou leitura de uma receita do arquivo especifica o número da receita que se deseja acessar no arquivo de receitas. A primeira receita armazenada no arquivo é identificada com índice 1, e as demais são indexadas sequencialmente até a última receita do arquivo.

CMD

Este bloco trata os seguintes comandos:

  • 1 = Comando para forçar a criação de um arquivo de receitas. Se o arquivo já existe, o mesmo é eliminado e criado um novo arquivo. Cria o arquivo com o numero máximo de receitas especificado no parâmetro “ID”, inicializando todas as receitas com o valor especificado no parâmetro “DATA.

    • DATA_FILE : Nome do arquivo do receita.

    • ID : Quantidade máxima de receitas que serão armazenadas no arquivo. Valor mínimo de 1 receita.

    • DATA : Todas as receitas criadas no arquivo são inicializadas com o valor deste registro de dados.

  • 2 = Comando verifica se o arquivo já existe. Se existe não realiza nenhuma operação adicional, e caso não exista, cria um arquivo de receita com o numero máximo de receitas especificado no parâmetro “ID”, inicializando todas as receitas com o valor especificado no parâmetro “DATA.

    • DATA_FILE : Nome do arquivo do receita a ser verificado se já existe.

    • Se o arquivo de receitas não existe, são utilizados os seguintes parâmetros para criar o arquivo de receitas:

      • ID : Quantidade máxima de receitas que serão armazenadas no arquivo. Valor mínimo de 1 receita.

      • DATA : Todas as receitas criadas no arquivo são inicializadas com o valor deste registro de dados.

  • 3 = Comando para ler uma receita do arquivo

    • DATA_FILE : Nome do arquivo de receita a ser lido uma receita.

    • ID : Número da receita que deseja ler no arquivo de receita. A primeira receita possui índice 1.

    • DATA : Os dados da receita lidos do arquivo são armazenados neste registro de dados.

  • 4 = Comando para escrever uma receita no arquivo

    • DATA_FILE : Nome do arquivo de receita a ser escrito uma receita.

    • ID : Número da receita que deseja escrever no arquivo de receita. A primeira receita possui índice 1.

    • DATA : Os dados da receita a serem escritos no arquivo são obtidos deste registro de dados.

  • 10 = Comando para formatar todo o sistema de arquivos no SDCARD. Em uma condição onde o sistema de arquivos do SDCARD esteja corrompido, podemos utilizar este comando para formatar o SDCARD.

    • Não necessita de parâmetro adicional.

    • ATENÇÃO: Este comando inicializa todo o SDCARD, eliminando todos os seus arquivos.

  • 20 = Comando para eliminar o arquivo de receitas.

    • DATA_FILE : Nome do arquivo de receita a ser eliminado.

OBS 1: Após iniciada a execução de um comando, este não poderá ser interrompido. O comando continuará executando até o fim de seu processo independente de alterações que possam vir a ocorrer em “CMD” ou “EN”.

OBS 2: O valor do parâmetro “CMD” é automaticamente zerado ao fim da execução do respectivo comando.

DATA_FILE

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

Exemplo de arquivo: ‘/Receitas.dat’, ‘/Pasta_1/Dados.dat’, ‘/PASTA_1/PASTA_2/Receita.cfg’

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

DATA

Registro de dados de uma receita a ser lida ou escrita no arquivo.

  • Na criação do arquivo de receita utiliza este parâmetro para inicializar todas as receitas do arquivo criado

  • No comando de leitura, armazena a receita lida do arquivo neste registro de dados

  • No comando de escrita, obtém deste registro de dados a receita a ser escrita no arquivo

DONE

Pulso para indicar o término da execução da função. Após este pulso (fica ativo por apenas um ciclo de scan), o resultado da execução da função deve ser consultado no parâmetro de saída “RESULT”.

RESULT

Código de retorno associado a execução da 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 [3]

A tabela abaixo ilustra alguns dos possíveis código de retorno deste bloco de função.

RESULT

LABEL [4]

Descrição

0

HILS.SUCCESS

Função executada com sucesso.

6

HILS.RC_GL_INV_CMD

Comando inválido.

5

HILS.GL_INV_PAR

Parâmetro(s) inválido(s).

7

HILS.GL_UNA_CMD

Comando não disponível ou não implementado.

10

HILS.GL_CMD_TMO

Timeout na execução do comando.

16

HILS.GL_CMD_PEND

Tratamento do comando pendente.

24

HILS.RE_NOT_AVA

Sem suporte para o sistema de arquivos ou SDCARD não detectado.

25

HILS.RE_INV_LEN

Índice da receita inválido.

27

HILS.RE_RES_EMP

Buffer do recurso vazio.

31

HILS.RE_READ_ERR

Falha no processo de leitura do recurso.

32

HILS.RE_WRITE_ERR

Falha no processo de escrita do recurso.

33

HILS.RE_NOT_INIT

Recurso não inicializado.

39

HILS.RC_RE_INV_ADDR

Índice da receita não existe no arquivo.

167

HILS.RC_FS_CORRUPT

Sistema de arquivo pode estar corrompido.

168

HILS.RC_FS_INV_OPER_MODE

Modo de operação incompatível com estado do arquivo.

170

HILS.RC_FS_WRITE_LOCK

Arquivo já está aberto para escrita.

173

HILS.RC_FS_INVALIDNAME

Texto especificado no parâmetro “NAME” inválido.

174

HILS.RC_FS_NOTFOUND

O arquivo não foi encontrado.

176

HILS.RC_FS_OPEN_LIMIT

Numero máximo de arquivos abertos.

178

HILS.RC_FS_INVALID_DIR

O diretório não existe.

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

Declaração de Tipos de Dados

Exemplo de declaração de uma estrutura de dados definida pelo usuário, utilizada para mapear o conteúdo das receitas a serem lidas/escritas no arquivo de receitas.

Tipos de Dados

Derivação

Nome

Tipo

Dimensão

Valor Inicial

Descrição

RECIPE_DATA

Estrutura

Estrutura criada pelo usuário

SP_TEMPERATURA

REAL

25.5

NIVEL_TANQUE

REAL

90.5

QUANTIDADE_PRODUTO

REAL

55.25

TEMPO_AQUECIMENTO

TIME

T#20M

TEMPO_MISTURA

TIME

T#20M

TEMPO_RESFRIAMENTO

TIME

T#20M

TEMPO_ENXAGUE

TIME

T#20M

HABILITA_DESCARREGAR

BOOL

TRUE

HABILITA_LIMPEZA_FINAL

BOOL

FALSE

Declaração de variáveis

Nome

Tipo

Valor Inicial

Descrição

RECIPE_FILE

FS_RECIPE_FILE

Instância do bloco “FS_RECIPE_FILE”

ID_RECIPE

INT

Identificador da receita

CMD_RECIPE

INT

Comando

FILE_NAME_RECIPE

STRING

‘Receitas.dat’

Nome do arquivo

APP_DATA_RECIPE

RECIPE_DATA

Estrutura criada pelo usuário

Clique aqui para baixar a tabela de variáveis

Código ST

//======================================================
// Exemplo de execução onde CMD = 2
//======================================================

// Preenche parâmetros para a chamada do bloco de função
ID_RECIPE := 20;               // [INT] Quantidade de receitas
CMD_RECIPE := 2;               // [INT] Comando  verifica se o arquivo já existe, caso não exista, cria um arquivo de receitas

// Neste caso será criado um arquivo FILE_NAME_RECIPE com 20 receitas, tendo como base
// a estrutura e os valores de APP_DATA_RECIPE.

(* ... *)

// Exemplo de ativação do bloco de função FS_RECIPE_FILE
RECIPE_FILE(
  EN        := TRUE,              // [BOOL] Habilitação de entrada
  ID        := ID_RECIPE,         // [INT] Identificador da receita
  CMD       := CMD_RECIPE,        // [INT] Comando
  DATA_FILE := FILE_NAME_RECIPE,  // [STRING] Nome do arquivo
  DATA      := APP_DATA_RECIPE    // [ANY] Registro com dados da receita
  );

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

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

end_if;

(* ... *)

//======================================================
// Exemplo de execução onde CMD = 3
//======================================================

// Preenche parâmetros para a chamada do bloco de função
ID_RECIPE := 10;               // [INT] Identificador da receita
CMD_RECIPE := 3;               // [INT] Comando para ler uma receita

// Neste caso será lido no arquivo FILE_NAME_RECIPE a receita com ID_RECIPE = 10

(* ... *)

// Exemplo de ativação do bloco de função FS_RECIPE_FILE
RECIPE_FILE(
  EN        := TRUE,              // [BOOL] Habilitação de entrada
  ID        := ID_RECIPE,         // [INT] Identificador da receita
  CMD       := CMD_RECIPE,        // [INT] Comando
  DATA_FILE := FILE_NAME_RECIPE,  // [STRING] Nome do arquivo
  DATA      := APP_DATA_RECIPE    // [ANY] Registro com dados da receita
  );

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

  // Testa código de retorno da execução da função
  if (RECIPE_FILE.RESULT = HILS.SUCCESS) then
    // ... Função executada com sucesso

    // Dados lidos disponíveis na estrutura APP_DATA_RECIPE

  else
    // ... Erro na execução da função
  end_if;

end_if;

(* ... *)

//======================================================
// Exemplo de execução onde CMD = 4
//======================================================

// Preenche parâmetros para a chamada do bloco de função
ID_RECIPE := 15;               // [INT] Identificador da receita
CMD_RECIPE := 4;               // [INT] Comando para escrever uma receita

// Neste caso será escrito o registro APP_DATA_RECIPE no arquivo
// FILE_NAME_RECIPE na receita com ID_RECIPE = 15

(* ... *)

// Exemplo de ativação do bloco de função FS_RECIPE_FILE
RECIPE_FILE(
  EN        := TRUE,              // [BOOL] Habilitação de entrada
  ID        := ID_RECIPE,         // [INT] Identificador da receita
  CMD       := CMD_RECIPE,        // [INT] Comando
  DATA_FILE := FILE_NAME_RECIPE,  // [STRING] Nome do arquivo
  DATA      := APP_DATA_RECIPE    // [ANY] Registro com dados da receita
  );

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

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

end_if;

(* ... *)