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:

  • 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 indica o respectivo código de erro. [2]

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.

Clique aqui para baixar a tabela de variáveis

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;

(* ... *)