FDB_WR

Escreve o registro de dados DATA de índice REC_NUM na tabela TAB_ID do banco de dados em memória flash; escritas consecutivas no mesmo registro exigem intervalo maior que 2 segundos. É uma função.

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

Função

             FDB_WR
        +---------------+
 INT ---|TAB_ID         |--- INT
        |               |
UINT ---|REC_NUM        |
        |               |
 ANY ---|DATA --------- |---
        +---------------+

A função retorna um valor do tipo RET_CODE: 0 ( HILS.SUCCESS ) quando a escrita é concluída com sucesso, ou o respectivo código de erro caso contrário.

Atenção

O intervalo entre duas escritas consecutivas em um mesmo registro da tabela deve ser maior que 2 segundos. Caso ocorra mais de uma escrita no mesmo registro dentro de 2 segundos, é retornado o código HILS.RE_BLOCKED e, a partir desse instante, todas as operações de escrita no banco de dados são bloqueadas.

O bloqueio refere-se apenas às operações de escrita, preservando a vida útil associada aos acessos de escrita na flash rom do controlador; não se aplica às operações de leitura, que permanecem disponíveis para a aplicação. Uma vez bloqueada, a escrita só é desbloqueada após o controlador ser reinicializado.

Dica

Assista ao vídeo tutorial para aprender a utilizar os blocos de função relacionados à memória flash: Banco de dados em flash.

Parâmetros

Nome

Direção

Tipo

Padrão

Faixa / Unidade

Descrição

TAB_ID

IN

INT

—

—

Identificador da tabela a ser acessada (obtido em FDB_INIT).

REC_NUM

IN

UINT

—

—

Número do registro de dados a ser escrito.

DATA

IN_OUT

ANY

—

—

Dado a ser atualizado na tabela do banco de dados.

Códigos de retorno

A função retorna um valor do tipo RET_CODE. Use os identificadores com o namespace HILS (ex.: HILS.RE_BLOCKED). Códigos mais comuns desta função:

Código

Identificador

Significado

0

SUCCESS

Função executada com sucesso.

5

GL_INV_PAR

Parâmetro(s) inválido(s) (ex.: TAB_ID inválida ou tamanho de DATA inválido).

6

GL_INV_CMD

Comando inválido.

41

RE_BLOCKED

Acesso de escrita ao banco de dados bloqueado.

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

Retorno / Saídas

  • INT — código de retorno do tipo RET_CODE: 0 (HILS.SUCCESS) em caso de sucesso; diferente de 0 indica o respectivo código de erro.

Pré-condições

  • A tabela TAB_ID deve ter sido inicializada por FDB_INIT.

  • O tipo/tamanho de DATA deve corresponder ao registro definido para a tabela.

Observações

  • Respeite o intervalo mínimo de 2 segundos entre escritas no mesmo registro para evitar o bloqueio permanente da escrita (HILS.RE_BLOCKED).

Ver também

FDB_INIT, FDB_RD, FDB_GET_INFO

Exemplo

Clique aqui para baixar a tabela de variáveis

Código ST

TYPE
    DBF_DATA : STRUCT       (* Estrutura de especificação do registro de dados *)
        enable    : BOOL;   (* Habilitação do controle *)
        setpoint  : REAL;   (* Valor do set point *)
        histerese : REAL;   (* Histerese do set point *)
        tempoON   : TIME;   (* Tempo de operação da máquina *)
    END_STRUCT;
END_TYPE

VAR
    data_user : DBF_DATA; (* Variável com tipo de dados do usuário *)
    reg_idx   : INT;      (* Índice do registro dentro da tabela em flash *)
    tab_code  : UINT;     (* Identificador da tabela a ser acessada *)
    ret_code  : INT;      (* Código de retorno da execução da função *)
END_VAR

(* Preenche registro de dados a ser salvo na tabela em flash *)
data_user.enable    := TRUE;  (* valor do campo "enable" do registro a ser escrito na flash    *)
data_user.setpoint  := 150.0; (* valor do campo "setpoint" do registro a ser escrito na flash  *)
data_user.histerese := 1.5;   (* valor do campo "histerese" do registro a ser escrito na flash *)

(* Salva o primeiro registro de dados do tipo "data_user" na tabela em flash *)
tab_code := 0;  (* identificador da tabela acessada na flash, obtido da função "FDB_INIT" *)
reg_idx  := 0;  (* Índice do primeiro registro dentro da tabela em flash *)
ret_code := HILS.FDB_WR(TAB_ID := tab_code, REC_NUM := reg_idx, DATA := data_user);
if (ret_code = HILS.SUCCESS) then    (* testa se registro escrito com sucesso na flash *)
  (* trata registro salvo com sucesso na flash *)
  ;
end_if;

(* Salva o segundo registro de dados do tipo "data_user" na tabela em flash *)
tab_code := 0;  (* identificador da tabela acessada na flash, obtido da função "FDB_INIT" *)
reg_idx  := 1;  (* Índice do segundo registro dentro da tabela em flash *)
ret_code := HILS.FDB_WR(tab_code, reg_idx, data_user);
if (ret_code = HILS.SUCCESS) then    (* testa se registro escrito com sucesso na flash *)
  (* trata registro salvo com sucesso na flash *)
  ;
end_if;