FDB_WR
Escreve um registro de dados DATA com índice REC_NUM da tabela TAB_ID no banco de dados em flash.
Dica
Assista ao vídeo tutorial para aprender a utilizar os blocos de função relacionados a memória flash: Banco de dados em flash.
A função retorna resultado do tipo “UINT” como um valor do tipo RET_CODE, podendo este ser HILS.SUCCESS se executada com sucesso, caso contrário, indica o respectivo código de erro.
Atenção
O intervalo entre duas escritas consecutivas em um mesmo registro da tabela no banco de dados deve ser maior que 2 segundos. Caso ocorra mais de uma escrita no mesmo registro em um intervalo de 2 segundos, é retornado código de erro HILS.RE_BLOCKED, e a partir deste instante todas as operações de escrita no banco de dados são bloqueadas.
Este bloqueio refere-se apenas às operações de escrita visando preservar a vida útil associada aos acessos de escrita no banco de dados em flash rom do controlador, e desta forma não se aplica as operações de leitura no banco de dados que permanecem disponíveis para a aplicação. Uma vez bloqueada a operação de escrita, a mesma somente é debloqueada após o controlador ser reinicializado.
Bloco
FDB_WR
+---------------+
INT ---|TAB_ID |--- INT
| |
UINT ---|REC_NUM |
| |
ANY ---|DATA --------- |---
+---------------+
Parâmetro
Nome |
Classe |
Tipo |
Descrição |
TAB_ID |
Entrada |
INT |
Identificador da tabela a ser acessada. |
REC_NUM |
Entrada |
UINT |
Nro do registro de dados a ser acessado |
DATA |
Entrada/Saída |
ANY |
Data a ser atualizado na tabela do banco |
Retorno
Tipo Dado |
Descrição |
INT |
Código de retorno na execução da função, do tipo RET_CODE, onde:
|
A tabela abaixo ilustra alguns dos possíveis código de retorno desta 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). Por exemplo, TAB_ID inválida, Tamanho do parâmetro DATA inválido. |
41 |
HILS.RE_BLOCKED |
Acesso de escrita ao banco de dados bloqueado. |
Este LABEL pode ser utilizado no código fonte pois está definido no tipo RET_CODE disponível na biblioteca HI_STD |
Exemplo
Declaração de Tipos de Dados
Exemplo de declaração de uma estrutura de dados definida pelo usuário, a ser utilizada para especificar os registros de dados a serem lidos/escritos na tabela em flash.
Tipos de Dados |
Derivação |
Nome |
Tipo |
Dimensão |
Descrição |
DBF_DATA |
Estrutura |
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 |
Declaração de Variáveis
Nome |
Tipo |
Descrição |
|---|---|---|
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 |
Código ST
(* Preenche registro de dados a ser salvo na tabela em flash *)
(* ... *)
data_base.enable := TRUE; (* valor do campo "enable" do registro a ser escrito na flash *)
data_base.setpoint := 150.0; (* valor do campo "setpoint" do registro a ser escrito na flash *)
data_base.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, obtida da função "FDB_INIT" *)
reg_idx := 0; (* Indice 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 escrita do registro 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, obtida da função "FDB_INIT" *)
reg_idx := 1; (* Indice 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 escrita do registro com sucesso na flash *)
(* trata registro salvo com sucesso na flash *)
(* ... *)
end_if;
(* ... *)