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.: |
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 |
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 |
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 excederTMO; (2) em conexão via socket Ethernet, se o bloco detectar que a conexão TCP/IP do canalCOMMcaiu. Em canal serial (ex.: modem interno), vale apenasTMO.
Ver também
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;
(* ... *)