LORA_GATEWAY
Implementa um gateway de comunicação para o protocolo LORA, permitindo subscrever e publicar tópicos LORA em um broker, com envio automático por critério de tempo ou de alteração de valor; requer um canal Mapeamento de dados associado ao protocolo LORA. É um bloco de função (mantém estado entre scans; requer instância).
Biblioteca: HI_STD · Namespace: HILS · Tipo: bloco de função
Bloco de função
LORA_GATEWAY
+---------------------+
BOOL ----|EN ENO|---- BOOL
| |
BOOL ----|START CONNECTED|---- BOOL
| |
BOOL ----|EN_SCAN RT_CODE|---- INT
| |
USINT ----|LORA_MODE RT_ID|---- INT
| |
USINT ----|COMM_SRC RT_CHG|---- BOOL
| |
USINT ----|DEC_SEP RT_EV|---- BOOL
| |
USINT ----|DMAP_ID PB_CODE|---- INT
| |
| PB_ID|---- INT
| |
| PB_EV|---- BOOL
| |
----|T_CACHE ------------ |----
| |
STRING ----|APP_KEY ------------ |----
| |
STRING ----|APP_EUI ------------ |----
| |
STRING ----|DEV_EUI ------------ |----
+---------------------+
Para utilizar este bloco, o usuário deve primeiro criar um canal de mapeamento com o recurso Mapeamento de dados e associá-lo ao protocolo LORA. Em seguida, nesse canal, definir os tópicos a serem subscritos e os a serem publicados. Todos os tópicos criados devem estar associados a variáveis globais exportadas.
A entrada START inicia a operação: ao ser ativada, o bloco estabelece conexão com o
broker, subscreve os tópicos a receber e passa a aguardar tópicos do broker ou critérios
para publicar. Enquanto START estiver inativa, o bloco permanece desconectado e nenhum
tópico é publicado ou mantido em cache. EN_SCAN habilita o ciclo de publicações
automáticas (por tempo ou por alteração de valor); com valor padrão TRUE, o processo
de publicação fica automaticamente ativo após START.
Os itens a publicar são inseridos na cache T_CACHE — um vetor de INT cujo tamanho
é definido pela aplicação — através da função COMM_NOTIFY_ITEM. Cada elemento é o
Id (linha do canal de mapeamento) que associa uma variável global a um tópico LORA. Uma vez
inserido, o bloco remove o item da cache e o publica no broker assim que possível.
O canal de comunicação em COMM_SRC é indicado por um identificador numérico (namespace
HILS):
Identificador |
Valor |
Meio |
|---|---|---|
|
0 .. 7 |
Seriais |
|
8 .. 15 |
Ethernet 1 |
|
16 .. 23 |
Ethernet 2 |
Importante
O socket usado para acesso ao broker deve ser previamente configurado para operação como cliente TCP-IP (sem conexão automática) com protocolo LORA, e o tamanho da cache de dados do socket deve ser de no mínimo 500 bytes (1460 máx.).
Atenção
Quando o bloco estiver ativado (entrada START), desativar EN durante o processo
resulta em comportamento indefinido. Desative EN apenas quando não houver nenhum
processo pendente no bloco.
Parâmetros
Nome |
Direção |
Tipo |
Dimensão |
Padrão |
Faixa / Unidade |
Descrição |
|---|---|---|---|---|---|---|
EN |
IN |
BOOL |
— |
TRUE |
— |
Habilitação do bloco; quando inativa o bloco não é processado. |
START |
IN |
BOOL |
— |
FALSE |
— |
Inicia a operação do gateway; ao ser ativada estabelece conexão com o broker. |
EN_SCAN |
IN |
BOOL |
— |
TRUE |
— |
Habilita o ciclo de publicações automáticas ao broker (por tempo ou por alteração). |
LORA_MODE |
IN |
USINT |
— |
0 |
1 = OTAA · 2 = ABP |
Modo de operação LORA. |
COMM_SRC |
IN |
USINT |
— |
0 |
ver Canais de comunicação |
Canal (socket Ethernet) usado para acesso ao broker. |
DEC_SEP |
IN |
USINT |
— |
46 |
código ASCII |
Separador decimal na conversão de reais para string (46 = ponto). |
DMAP_ID |
IN |
USINT |
— |
0 |
— |
Id do mapeamento de dados (DataMap) associado ao bloco. |
T_CACHE |
IN_OUT |
ANY |
[*] |
— |
— |
Cache de tópicos a publicar; deve ser um vetor de |
APP_KEY |
IN_OUT |
STRING |
:32 |
— |
— |
Application Key. |
APP_EUI |
IN_OUT |
STRING |
:32 |
— |
— |
Application ID (EUI). |
DEV_EUI |
IN_OUT |
STRING |
:16 |
— |
— |
Device ID (EUI). |
ENO |
OUT |
BOOL |
— |
FALSE |
— |
Saída de habilitação (encadeamento em LADDER/FBD). |
CONNECTED |
OUT |
BOOL |
— |
FALSE |
— |
Indica que a conexão com o broker foi estabelecida. |
RT_CODE |
OUT |
INT |
— |
0 |
RET_CODE |
Código de retorno da última recepção de tópico (ver Códigos de retorno). |
RT_ID |
OUT |
INT |
— |
0 |
— |
Id do item da última recepção de tópico do broker. |
RT_CHG |
OUT |
BOOL |
— |
FALSE |
— |
Pulso: o tópico recebido difere do valor anterior na base global. |
RT_EV |
OUT |
BOOL |
— |
FALSE |
— |
Pulso: fim do processo de recepção de um tópico do broker. |
PB_CODE |
OUT |
INT |
— |
0 |
RET_CODE |
Código de retorno da última publicação no broker (ver Códigos de retorno). |
PB_ID |
OUT |
INT |
— |
-1 |
— |
Id do item da última publicação no broker. |
PB_EV |
OUT |
BOOL |
— |
FALSE |
— |
Pulso: fim do processo de publicação de um tópico no broker. |
Códigos de retorno
RT_CODE e PB_CODE reportam o resultado das últimas recepção e publicação de tópico,
respectivamente. Use os identificadores com o namespace HILS (ex.: HILS.CO_SOCK_ERR).
Códigos mais comuns:
Código |
Identificador |
Significado |
|---|---|---|
0 |
SUCCESS |
Processo executado com sucesso. |
10 |
GL_CMD_TMO |
Timeout na execução do comando. |
63 |
CO_CONEX_FAIL |
Falha no processo de conexão. |
67 |
CO_SOCK_ERR |
Erro de socket. |
68 |
CO_TRA_BUF_OVL |
Overflow no buffer de transmissão. |
69 |
CO_REC_BUF_OVR |
Overrun no buffer de recepção. |
70 |
CO_COM_ERR |
Erro genérico de comunicação. |
87 |
CO_COM_BRO |
Comunicação interrompida. |
Lista completa dos códigos de retorno: RET_CODE - Códigos de retorno do firmware G5.
Pré-condições
Um canal Mapeamento de dados associado ao protocolo LORA, com os tópicos a subscrever e a publicar definidos e associados a variáveis globais exportadas.
Socket configurado como cliente TCP-IP (sem conexão automática) com protocolo LORA e cache de dados de no mínimo 500 bytes (1460 máx.).
T_CACHEdeve ser um vetor deINTdimensionado pela aplicação.
Observações
As saídas
RT_EV,PB_EVeRT_CHGgeram um pulso (permanecem ativas por um ciclo de scan) e sincronizam os respectivos*_IDe*_CODE.Desativar
ENcom processo pendente leva a comportamento indefinido.
Ver também
Exemplo
Clique aqui para baixar a tabela de variáveis
Código ST
VAR
START : BOOL := FALSE; (* Ativa operação do gateway *)
SCAN : BOOL; (* Habilita publicação automatica de tópicos *)
SUBS : BOOL; (* Habilita subscrição de tópicos *)
NOTIFY : BOOL := FALSE; (* Publica um tópico no broker (exemplo) *)
BROKER_IP : STRING[15] := '192.168.0.58'; (* IP do broker *)
BROKER_PORT : UDINT := 1883; (* Porta do broker *)
WILL_T : STRING[80] := 'W_TOPIC'; (* Topico de desconexão *)
WILL_M : STRING[140] := 'W_MSG'; (* Mensagem de desconexão *)
USER : STRING[20] := 'JOAO'; (* Usuário *)
PASSW : STRING[16] := '123'; (* Senha *)
T_CACHE : ARRAY [0..99] OF INT := 0; (* Cache para publicação de tópicos *)
CONNECTED : BOOL := FALSE; (* Broker conectado *)
SUBSCRIBED : BOOL := FALSE; (* Tópicos subscritos *)
PB_COUNT : INT := 0; (* Contador de topicos publicados *)
SB_COUNT : INT := 0; (* Contador de topicos subscritos *)
RT_COUNT : INT := 0; (* Contador de topicos recebidos *)
GTW_LORA : HILS.LORA_GATEWAY; (* Instancia do gateway *)
END_VAR
// Este código, após a ativação da entrada START, publica ciclicamente os
// tópicos definidos no canal de mapeamento 2.
// Ao ser ativada a variavel NOTIFY a variavel de escrita com ID 1 do canal de mapeamento será
// publicada no broker. Todas os tópicos subscritos são automaticamente atualizados nas
// variveis associadas quando recebidos do broker.
// Gateway LORA
GTW_LORA( // LORA_GATEWAY
//EN := , // [BOOL] Habilitação do bloco
START := START, // [BOOL] Inicia operação do gateway
//EN_SUBS := , // [BOOL] Habilita subscricao de topicos
//EN_SCAN := , // [BOOL] Habilita o polling de dados do equipamento remoto
DMAP_ID := 2, // [USINT] Id do mapeamento de dados associado ao bloco
COMM_SRC := HILS.SOCK2_PORT_ID, // [USINT] Canal de comunicação utilizado para acesso equipamento Modbus (ex: COM1_PORT_ID)
FLAGS := HILS.CLIENT_ID + HILS.CLEAN_SECTION, // [USINT] Flags de conexão com o broker
//DEC_SEP := , // [USINT] Separador de casas decimais no processo de conversao dos valores reais para string (default = ponto)
//KEEP_ALIVE := , // [UINT] Tempo em segundos para o broker validadar a conexão
BROKER_PORT := BROKER_PORT, // [UINT] Porta de escuta do broker
BROKER_IP := BROKER_IP, // [STRING] Endereço IP do broker a ser acessado (string:15)
W_TOPIC := WILL_T, // [STRING] Nome do tópico associado a mensagem de desconexão (string:80)
W_MSG := WILL_M, // [STRING] Mensagem de desconexão (string:140)
USER := USER, // [STRING] Nome do usuário (string:20)
PASSW := PASSW, // [STRING] Senha de acesso (string:16)
T_CACHE := T_CACHE // [ANY] Cache de tópicos a serem enviados para o broker
);
CONNECTED := GTW_LORA.CONNECTED;
SUBSCRIBED := GTW_LORA.SUBSCRIBED;
// Mantem um contador de tópicos subscritos no broker
IF GTW_LORA.SB_EV THEN
SB_COUNT := SB_COUNT + 1;
END_IF;
// Mantem um contador de tópicos publicados no broker
IF GTW_LORA.PB_EV THEN
PB_COUNT := PB_COUNT + 1;
END_IF;
// Mantem um contador de tópicos recebidos do broker
IF GTW_LORA.RT_EV THEN
RT_COUNT := RT_COUNT + 1;
END_IF;
// Publica a variavel associada ao ID = 1 no broker
IF NOTIFY THEN
HILS.COMM_NOTIFY_ITEM(1, T_CACHE);
NOTIFY := FALSE;
END_IF;