WGATE_MAN

Interface de dados com o Portal de Telemetria da HI Tecnologia: mantém uma cache de mensagens em um vetor de INT exportado como Holding Registers, na qual a aplicação insere mensagens (via WGATE_SEND) que o portal lê e remove ao coletar com sucesso. Cada mensagem carrega identificador, valor e data/hora do evento. É um bloco de função (requer instância) e deve ser chamado no início do ciclo, antes de WGATE_SEND.

Nota

Evolução do bloco TEL_BUF (agora obsoleto); acrescenta suporte a mensagens STRING e saídas de status adicionais.

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

Bloco de função

             WGATE_MAN
          +--------------+
 BOOL ----|CLR      EMPTY|---- BOOL
          |              |
USINT ----|COMM      FULL|---- BOOL
          |              |
 TIME ----|TMO       LOST|---- BOOL
          |              |
          |          MSGS|---- INT
          |              |
          |         TOTAL|---- INT
          |              |
          |          PERC|---- UINT
          |              |
          |        RESULT|---- INT
          |              |
  INT ----|CACHE ------- |----
          +--------------+

Gerencia o armazenamento e o envio de mensagens para o Portal de Telemetria: a aplicação cria mensagens (identificador, valor e data/hora do evento) e as insere na cache, de onde o portal as coleta posteriormente.

Parâmetros

Nome

Direção

Tipo

Padrão

Faixa / Unidade

Descrição

CLR

IN

BOOL

FALSE

—

Quando ativo, limpa a cache (remove as mensagens ainda não coletadas).

COMM

IN

USINT

9

0 .. 23

Canal de comunicação conectado ao portal (ex.: HILS.SOCK1_PORT_ID). Ver Canais de comunicação.

TMO

IN

TIME

T#1m

tempo

Timeout para indicar desconexão: tempo máximo para o portal coletar uma mensagem pendente.

EMPTY

OUT

BOOL

FALSE

—

Não há mensagens a coletar.

FULL

OUT

BOOL

FALSE

—

Cache cheia; novas inserções via WGATE_SEND retornam erro.

LOST

OUT

BOOL

FALSE

—

Perda de conexão com o portal (ver Observações).

MSGS

OUT

INT

0

mensagens

Nº de mensagens presentes na cache para coleta.

TOTAL

OUT

INT

0

mensagens

Nº máximo de mensagens suportado pela cache.

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).

CACHE

IN_OUT

INT [*]

—

vetor

Vetor de INT usado como cache de mensagens. Ver Estrutura da cache.

Estrutura da cache (CACHE)

CACHE é um vetor de INT cuja capacidade em mensagens é:

MSGS = (TV - 1) / 10

MSGS = nº de mensagens suportadas pela cache
TV   = nº de elementos do vetor fornecido

Cada mensagem ocupa 10 INT (o primeiro elemento guarda o contador). A aplicação insere mensagens com WGATE_SEND; o portal as lê e remove ao coletar com sucesso.

Canais de comunicação (COMM)

Identificadores do tipo COMM_CHAN_ID (namespace HILS): COM1_PORT_ID .. COM8_PORT_ID = 0..7 (seriais); SOCK0_PORT_ID .. SOCK7_PORT_ID = 8..15 (Ethernet 1); ETH2_SOCK0_PORT_ID .. ETH2_SOCK7_PORT_ID = 16..23 (Ethernet 2). Cada equipamento suporta apenas um subconjunto — consulte o manual do equipamento.

Códigos de retorno

Quando RESULT é do tipo RET_CODE: 0 ( HILS.SUCCESS ) indica sucesso; qualquer valor diferente de 0 indica falha (consulte o catálogo de códigos RET_CODE do ambiente).

Pré-condições

  • A cache (CACHE) deve ser uma variável global exportada (endereço explícito), para que o portal a acesse.

  • Capacidade mínima de 15 mensagens ? o vetor deve ter no mínimo 151 elementos.

  • Chame o bloco no início do ciclo, antes de qualquer WGATE_SEND.

Observações

  • LOST é determinado por duas estratégias: (1) se o tempo para o portal coletar uma mensagem exceder TMO; (2) em conexão via socket Ethernet, se o bloco detectar que a conexão TCP/IP do canal COMM caiu. Em canal serial (ex.: modem interno), vale apenas TMO.

Ver também

WGATE_SEND, TEL_BUF

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 mensagens *)
    MY_ID    : INT := 1000;           (* identificador do dado no portal de telemetria *)
    RET      : INT;                   (* código de retorno do envio ao portal *)
    WCACHE   : ARRAY [0..200] OF INT; (* Cache com capacidade de 20 mensagens (acima do mínimo) *)
    WEB_GATE : HILS.WGATE_MAN;        (* Gerenciador de mensagens do portal de telemetria *)
END_VAR

(* Gerência das mensagens reportadas ao portal de telemetria.
   ATENÇÃO: chame este bloco no início do ciclo, antes de qualquer WGATE_SEND. *)
WEB_GATE(
  (* CLR := , *)                (* [BOOL] Limpa o conteúdo da cache *)
  COMM  := HILS.SOCK1_PORT_ID,  (* [USINT] Canal conectado ao portal *)
  TMO   := T#40s,               (* [TIME] Timeout de desconexão *)
  CACHE := WCACHE               (* [INT] Área de armazenamento dos registros *)
  );

(* Quando MY_EV e a cache com menos de 50%, envia MY_DATA ao 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;
(* ... *)