LR_GATEWAY_RAK3172
Implementa um gateway de comunicação para o protocolo LORA (via módulo RAK3172), permitindo subscrever e publicar tópicos LORA em um broker, com publicação automática por critério de tempo ou de alteração de valor. É 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
LR_GATEWAY_RAK3172
+---------------------+
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 utilização deste bloco, o usuário deverá inicialmente, utilizando o recurso de
Mapeamento de dados, criar um canal de mapeamento e associá-lo ao protocolo LORA. Em seguida,
no canal de mapeamento criado, definir os tópicos a serem subscritos e os tópicos a serem
publicados. Note que todos os tópicos criados devem estar associados a variáveis globais
exportadas. Os itens a serem publicados são inseridos na cache T_CACHE pela função
COMM_NOTIFY_ITEM; o bloco remove cada item e o publica no broker
assim que possível.
Nota
Este bloco foi desenvolvido para operar com o módulo de comunicação LORA-RAK3172.
Importante
Para a utilização desse bloco, o socket utilizado 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 max.).
Parâmetros
Nome |
Direção |
Tipo |
Dimensão |
Padrão |
Faixa / Unidade |
Descrição |
|---|---|---|---|---|---|---|
START |
IN |
BOOL |
— |
FALSE |
— |
Inicia a operação do gateway. Inativa: bloco desconectado do broker (não publica nem mantém cache). Ativa: estabelece conexão, subscreve tópicos e aguarda recepção/critério de publicação. |
EN_SCAN |
IN |
BOOL |
— |
TRUE |
— |
Habilita o ciclo de publicações automáticas no broker (por tempo ou por alteração de valor). Se TRUE (default), o processo de publicação é ativado automaticamente após |
LORA_MODE |
IN |
USINT |
— |
0 |
1 = OTAA · 2 = ABP |
Define o modo de operação LORA. |
COMM_SRC |
IN |
USINT |
— |
0 |
ID do canal |
Identificador do socket ethernet utilizado para acesso ao broker (ver tabela abaixo). |
DEC_SEP |
IN |
USINT |
— |
46 |
código ASCII |
Separador de casas decimais na conversão de valores reais para string. Default 46 ( |
DMAP_ID |
IN |
USINT |
— |
0 |
— |
Id do canal de mapeamento de dados associado ao bloco. O canal deve estar configurado com o protocolo LORA, senão o bloco gera erro de recurso não encontrado. |
T_CACHE |
IN_OUT |
ANY |
[*] |
— |
— |
Cache dos IDs dos itens a serem publicados no broker. Deve ser um vetor de INT dimensionado pela aplicação; cada ID mapeia uma linha do canal de mapeamento (variável global ? tópico LORA). |
APP_KEY |
IN_OUT |
STRING |
:* |
— |
32 caracteres |
Application KEY (chave da aplicação associada ao canal LORA). |
APP_EUI |
IN_OUT |
STRING |
:* |
— |
16 caracteres |
Application ID (Id da aplicação associada ao canal LORA). |
DEV_EUI |
IN_OUT |
STRING |
:* |
— |
16 caracteres |
Device ID (Id do módulo LORA utilizado). |
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 do broker (atualizado com |
RT_ID |
OUT |
INT |
— |
0 |
— |
Id do item da última recepção de tópico do broker (atualizado com |
RT_CHG |
OUT |
BOOL |
— |
FALSE |
— |
Pulso (1 scan): a recepção de um tópico concluída com sucesso modificou o valor anterior da variável global associada. Sincronizado com |
RT_EV |
OUT |
BOOL |
— |
FALSE |
— |
Pulso (1 scan) indicando o 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 de tópico no broker (atualizado com |
PB_ID |
OUT |
INT |
— |
-1 |
— |
Id do tópico da última publicação no broker (atualizado com |
PB_EV |
OUT |
BOOL |
— |
FALSE |
— |
Pulso (1 scan) indicando o fim do processo de publicação de um tópico no broker. |
O identificador do canal em COMM_SRC segue a numeração:
Identificador |
Valor |
|---|---|
|
0 .. 7 |
|
8 .. 15 |
|
16 .. 23 |
Códigos de retorno
RT_CODE e PB_CODE reportam o resultado das transações de recepção e publicação de
tópicos. Use os identificadores com o namespace HILS (ex.: HILS.CO_SOCK_ERR).
Códigos mais comuns:
Código |
Identificador |
Significado |
|---|---|---|
0 |
SUCCESS |
Transação executada com sucesso. |
10 |
GL_CMD_TMO |
Timeout na execução do comando. |
23 |
RE_NOT_FOU |
Recurso não encontrado (canal de mapeamento não configurado com LORA). |
63 |
CO_CONEX_FAIL |
Falha no processo de conexão com o broker. |
64 |
CO_DEV_UNCONN |
Desconexão realizada pelo equipamento remoto. |
67 |
CO_SOCK_ERR |
Erro de socket (não foi possível adquirir/usar o socket). |
68 |
CO_TRA_BUF_OVL |
Overflow no buffer de transmissão. |
Lista completa: RET_CODE - Códigos de retorno do firmware G5.
Pré-condições
Socket configurado como cliente TCP-IP (sem conexão automática), protocolo LORA, cache de dados de no mínimo 500 bytes (máx. 1460).
Canal de Mapeamento de dados criado e associado ao protocolo LORA em
DMAP_ID, com os tópicos a subscrever/publicar definidos e associados a variáveis globais exportadas.T_CACHEdeve ser um vetor de INT dimensionado pela aplicação.
Observações
RT_EVePB_EVsão pulsos de 1 scan que sinalizam, respectivamente, o fim das recepções e publicações de tópicos;RT_CODE/RT_IDePB_CODE/PB_IDsão atualizados junto com esses pulsos.RT_CHGé sincronizado comRT_EVe indica que a recepção alterou o valor anterior da variável global associada.Com
STARTinativa, o bloco permanece desconectado e não publica nem mantém a cache.
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 *)
NOTIFY : BOOL := FALSE; (* Publica um tópico no broker (exemplo) *)
DEV_EUI : STRING := '0023003454665432'; (* Device ID *)
APP_EUI : STRING := '34677893AB65EFD0'; (* Application ID *)
APP_KEY : STRING := '3445667778899033A4B56657E8F9D0';(* Application KEY *)
T_CACHE : ARRAY [0..99] OF INT := 0; (* Cache para publicação de tópicos *)
CONNECTED : BOOL := FALSE; (* Broker conectado *)
PB_COUNT : INT := 0; (* Contador de topicos publicados *)
RT_COUNT : INT := 0; (* Contador de topicos recebidos *)
GTW_LORA : HILS.LR_GATEWAY_RAK3172; (* 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 é publicada no broker. Todos os tópicos subscritos são automaticamente
atualizados nas variaveis associadas quando recebidos do broker. *)
(* Gateway LORA *)
GTW_LORA(
START := START, (* [BOOL] Inicia operação do gateway *)
DMAP_ID := 2, (* [USINT] Id do mapeamento de dados associado ao bloco *)
COMM_SRC := HILS.SOCK2_PORT_ID, (* [USINT] Canal de comunicação para acesso ao broker *)
T_CACHE := T_CACHE (* [ANY] Cache de tópicos a serem enviados ao broker *)
);
CONNECTED := GTW_LORA.CONNECTED;
(* 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;