DTC_MAN

Gerencia uma cache de dados (fila FIFO de blocos de dados, DIB) mantida pela aplicação em um vetor de INT: reporta ocupação, sinaliza cheia/vazia/alterada e permite limpar o conteúdo. É um bloco de função (requer instância) e opera em conjunto com as funções DTC_PUSH / DTC_REMOVE / DTC_GET_INFO / DTC_GET_VALUE, que inserem e recuperam blocos da mesma cache.

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

Bloco de função

             DTC_MAN
         +--------------+
BOOL ----|START     CHNG|---- BOOL
         |              |
BOOL ----|CLR      EMPTY|---- BOOL
         |              |
         |          FULL|---- BOOL
         |              |
         |        BLOCKS|---- INT
         |              |
         |         TOTAL|---- INT
         |              |
         |          PERC|---- UINT
         |              |
         |        RESULT|---- INT
         |              |
 INT ----|CACHE ------- |----
         +--------------+

Sendo um bloco de função, DTC_MAN requer uma instância declarada pela aplicação e opera sobre o vetor CACHE (IN_OUT), reportando ocupação e sinalizando os estados cheia/vazia/alterada da cache de dados.

Parâmetros

Nome

Direção

Tipo

Dimensão

Padrão

Faixa / Unidade

Descrição

START

IN

BOOL

—

TRUE

—

Habilita o gerenciador. Com START inativo a cache não é alterada pelo bloco.

CLR

IN

BOOL

—

FALSE

—

Quando ativo, limpa a cache removendo todos os blocos.

CACHE

IN_OUT

INT

[*]

—

—

Vetor de INT usado como cache (FIFO de blocos). Ver Estrutura da cache.

CHNG

OUT

BOOL

—

FALSE

—

Indica que houve alteração na cache.

EMPTY

OUT

BOOL

—

FALSE

—

Não há blocos a coletar. Funcional mesmo com START inativo.

FULL

OUT

BOOL

—

FALSE

—

Cache cheia; novas inserções via DTC_PUSH retornam erro. Funcional mesmo com START inativo.

BLOCKS

OUT

INT

—

0

0 .. TOTAL

Nº de blocos (DIB) presentes na cache (um vetor/string ocupa mais de um bloco).

TOTAL

OUT

INT

—

0

blocos

Nº máximo de blocos suportado pela cache. Funcional mesmo com START inativo.

PERC

OUT

UINT

—

0

0 .. 100 %

Percentual de ocupação da cache.

RESULT

OUT

INT

—

0

RET_CODE

Código de retorno da última interação (ver Códigos de retorno).

Estrutura da cache (CACHE)

CACHE é um vetor de INT mantido como uma fila (FIFO) de blocos de dados (DIB). O primeiro elemento guarda o número de blocos inseridos; os demais são divididos em blocos de 10 INT:

CACHE : ARRAY [0..X] OF INT

+----------------------------------------------+   -----
| Nº 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
|               :                              |
+----------------------------------------------+
| Bloco de dados N                             |  (10 INT)
+----------------------------------------------+   -----

Número máximo de blocos: N = (X - 1) / 10, onde X é o número de elementos do vetor fornecido. Cada bloco (DIB) contém: identificador numérico do dado, valor (ou valores, se vetor), data/hora de geração e tipo de dado. Um escalar nativo (exceto STRING) ocupa 1 DIB; vetores e strings ocupam 2 ou mais DIB.

Códigos de retorno

RESULT é do tipo RET_CODE: 0 ( HILS.SUCCESS ) indica operação bem-sucedida; qualquer valor diferente de 0 indica falha na operação da cache (consulte o catálogo de códigos RET_CODE do ambiente).

Ver também

DTC_PUSH, DTC_REMOVE, DTC_GET_INFO, DTC_GET_VALUE

Exemplo

Clique aqui para baixar a tabela de variáveis

Código ST

VAR
    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  : ARRAY [0..200] OF INT; (* Cache com capacidade de 20 blocos. *)
    MAN     : HILS.DTC_MAN;          (* Gerenciador da cache de dados. *)
END_VAR

(* --- Gerenciador de blocos de dados --- *)
MAN(
  (* START := , *)   (* [BOOL] Ativa gerenciamento da cache *)
  (* CLR := ,   *)   (* [BOOL] Limpa o conteúdo 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 ao portal *)
IF (MY_EV AND (MAN.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;
(* ... *)