DTC_MAN
Este bloco implementa uma interface para gerenciamento, inserção e remoção de dados em uma cache de dados.
Bloco
DTC_MAN
+--------------+
BOOL ----|START CHNG|---- BOOL
| |
BOOL ----|CLR EMPTY|---- BOOL
| |
| FULL|---- BOOL
| |
| BLOCKS|---- INT
| |
| TOTAL|---- INT
| |
| PERC|---- UINT
| |
| RESULT|---- INT
| |
INT ----|CACHE ------- |----
+--------------+
Parâmetros
Nome |
Classe |
Tipo |
Dim. |
V. Ini. |
Descrição |
START |
Entrada |
BOOL |
TRUE |
Habilita operação do gerenciador de acesso a cache de dados |
|
CLR |
Entrada |
BOOL |
FALSE |
Limpa o conteudo da cache de dados |
|
CACHE |
Entrada/Saída |
INT |
[*] |
0 |
Vetor de inteiros reservados para armazenar os blocos de dados |
CHNG |
Saída |
BOOL |
FALSE |
Indica alteração na cache |
|
EMPTY |
Saída |
BOOL |
FALSE |
Cache de mensagens vazia |
|
FULL |
Saída |
BOOL |
FALSE |
Cache de mensagens cheia |
|
BLOCKS |
Saída |
INT |
0 |
Nro. de blocos de dados presentes na cache |
|
TOTAL |
Saída |
INT |
0 |
Nro total de mensagens suportados pela cache |
|
PERC |
Saída |
UINT |
0 |
Percentual de utilização da cache (0..100%) |
|
RESULT |
Saída |
INT |
0 |
Código de retorno da última interação |
|
LBLOCKS |
Local |
INT |
-1 |
Ultimo valor do nro de mensagens na cache |
Entradas
START
Habilita operação do gerenciador da acesso a cache de dados. Enquanto esta entrada estiver inativa a cache de dados não será alterada pelo bloco.
CLR
Quando ativo, limpa a cache de dados removendo todas os blocos de dados presentes na cache.
Saídas
EMPTY
Quando ativa indica que não existem blocos de dados na cache de dados para serem obtidos.
Nota
Esta saída é funcional mesmo com a entrada START for igual a false.
FULL
Quando ativa indica que o número máximo de blocos de dados suportadas pela cache de dados foi atingido. Nova inserções de mensagens através da função DTC_PUSH retornarão erro indicando que não existe mais espaço.
Nota
Esta saída é funcional mesmo com a entrada START for igual a false.
BLOCKS
Nro. de blocos de dados presentes na cache de dados. Note que 1 bloco de dado pode não ser uma variável pois vetores utilizam mais de um bloco de dados na cache.
TOTAL
Indica o número máximo de mensagens suportadas na cache de dados.
Nota
Esta saída é funcional mesmo com a entrada START for igual a false.
PERC
Especifica o percentual da cache de dados ocupado com blocos de dados a serem coletados. Este parâmetro pode ser útil quando a aplicação deseja alterar os crítérios para inserção de blocos de dados, quando a cache de dados se aproxima de limite de mensagens.
RESULT
Tipo Dado |
Descrição |
INT |
Código de retorno na execução da função, do tipo RET_CODE, onde:
|
Entradas / Saídas
CACHE
A função desta cache é de manter informações sobre um dado qualquer da aplicação. Este parâmetro deve receber um vetor de variáveis do tipo INT que que será utilizado como uma cache de dados.
Esta cache é mantida em memória como uma fila dos blocos de dados (DIB). A formada por uma estrutura de dados do tipo FIFO, implementada em um vetor do tipo INT com a seguinte estrutura:
CACHE INT [0..X]
+- - - - - - - - - - - - - - - - - - - - - - - + -----
| Nro de blocos inseridos na cache (0..N) | (1 INT) |
+- - - - - - - - - - - - - - - - - - - - - - - + |
| | |
| Bloco de dados 1 | (10 INT) |
| | |
+- - - - - - - - - - - - - - - - - - - - - - - + |
| | |
| Bloco de dados 2 | (10 INT) |
| | |
+- - - - - - - - - - - - - - - - - - - - - - - + N = (X - 1) / 10 (INT)
| | |
| : | |
| | |
+- - - - - - - - - - - - - - - - - - - - - - - + |
| | |
| bloco de dados N | (10 INT) |
| | |
+- - - - - - - - - - - - - - - - - - - - - - - + -----
O nro. máximo de blocos de dados disponíveis para utilzação é calculado da seguinte forma:
N = (X - 1) / 10 onde:
N = nro de blocos de dados (DIB) suportados pela cache
X = nro de elementos do vetor fornecido para o bloco
Cada bloco de dados (DIB) contem as seguintes informações:
Indentificador numérico associado ao dado;
Valor do dado (ou valores do vetor de dados);
Data/hora associada a geração do dado;
Tipo de dado;
Cada dado escalar nativo (com exceção do tipo STRING) necessita de um uma única DIB na cache para manter todas as informações acima.
Dados vetoriais ou strings podem ser inseridos na cache, porém ocupam 2 ou mais DIB’s.
Através da função DTC_PUSH a aplicação insere dados na cache de dados.
Através da função DTC_REMOVE a aplicação remove o bloco de dado mais antigo cache de dados.
Através da função DTC_GET_INFO a aplicação obtem as informações do dado mais antigo inserido na cache de dados.
Através da função DTC_GET_VALUE a aplicação obtem o valor do dado mais antigo inserido na cache de dados.
Exemplo
Declaração de Variáveis
Nome |
Tipo |
Dimensão |
Valor Inicial |
Opções |
Descrição |
|---|---|---|---|---|---|
MY_EV |
BOOL |
FALSE |
Flag para inserção de dado na cache |
||
MY_DATA |
UDINT |
1234 |
valor a ser inserido na cache de dados |
||
MY_ID |
INT |
1000 |
identificador do dado no portal de telemetria |
||
RET |
INT |
código de retorno da função de envio de dados para o portal |
|||
WCACHE |
INT |
[0..200] |
rent |
Cache do mensagens com capacidade de 20 mensagens. |
|
MAN |
HILS.DMB_MAN |
Gerenciador da cache de dados. |
Código ST
(* --- Gerenciador de blocos de dados ----- *)
MAN( // DTC_MAN
//START := , // [BOOL] Ativa gerenciamento da cache
//CLR := , // [BOOL] Limpa o conteudo da cache de dados
CACHE := WCACHE // [INT] FIFO - área onde serão armazenados os registros
);
(* Quando MY_EV for true e a cache estiver com menos de 50% envia MY_DATA para o portal *)
if (MY_EV AND (WEB_GATE.PERC < 50)) THEN
RET := HILS.WGATE_SEND(ID := MY_ID, DATA := MY_DATA, MSGS := WCACHE);
IF RET = 0 THEN
MY_EV := FALSE;
END_IF;
END_IF;
(* ... *)