LR_GATEWAY_RAK3172
Este bloco implementa um gateway de comunicação para o protocolo LORA, permitindo subscrever e publicar tópicos LORA para um broker qualquer. Tópicos podem ser automaticamente enviados baseado em critérios de tempo ou de alteração de valores.
Nota
Este bloco foi desenvolvido para operar como o módulo de comunicação LORA-RAK3172
Bloco
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.
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 dever ser de no mínimo 500 bytes (1460 max.)
Parâmetros
Nome |
Classe |
Tipo |
Dim. |
V. Ini. |
Descrição |
START |
Entrada |
BOOL |
FALSE |
Inicia operação do gateway |
|
EN_SCAN |
Entrada |
BOOL |
TRUE |
Habilita o ciclo de notificacoes automaticas ao broker |
|
LORA_MODE |
Entrada |
USINT |
0 |
Modo de operação do Lora: OTAA[1] ou ABP[2] |
|
COMM_SRC |
Entrada |
USINT |
0 |
Canal de comunicação utilizado para acesso ou broker (ex: SOCK1_PORT_ID) |
|
DEC_SEP |
Entrada |
USINT |
46 |
Separador de casas decimais no processo de conversao dos valores reais para string (default = ponto) |
|
DMAP_ID |
Entrada |
USINT |
0 |
Id do mapeamento de dados associado ao bloco |
|
T_CACHE |
Entrada/Saída |
ANY |
Cache de tópicos a serem enviados ao broker (deve ser fornecido um vetor de tipos INT) |
||
APP_KEY |
Entrada/Saída |
STRING |
:* |
Application KEY |
|
APP_EUI |
Entrada/Saída |
STRING |
:* |
Application ID |
|
DEV_EUI |
Entrada/Saída |
STRING |
:* |
Device ID |
|
CONNECTED |
Saída |
BOOL |
FALSE |
Indica que o equipamento esta conectado com o broker |
|
RT_CODE |
Saída |
INT |
0 |
Código de retorno da ultima recepção de tópico do broker |
|
RT_ID |
Saída |
INT |
0 |
Id do item da última recepção de tópico do broker |
|
RT_CHG |
Saída |
BOOL |
FALSE |
Indica que o tópico recebido é diferente do valor anterior presente na base global |
|
RT_EV |
Saída |
BOOL |
FALSE |
Indica fim do processo de recepção de um tópico do broker |
|
PB_CODE |
Saída |
INT |
0 |
Código de retorno da ultima escrita no equipamento remoto |
|
PB_ID |
Saída |
INT |
-1 |
Id do item da última escrita no equipamento remoto |
|
PB_EV |
Saída |
BOOL |
FALSE |
Indica fim do processo de escrita de um item no equipamento remoto |
START
Entrada de controle do bloco. Quando inativa o bloco se mantenhem desconectado do broker. Neste cenário os tópicos não serão publicados e nem mantidos em cache. Quando ativada esta entrada, o bloco estabelece conexão com o broker especificado, estando apto e subscrever os tópicos a serem recebidos do broker e aguardando um tópico do broker ou um critério para publicar um tópico para o broker.
EN_SCAN
Quando ativa habilita o ciclo de publicações automáticas no broker. Estas publicações podem ser por tempo ou por alteração de valor da variável associada. O valor default para esta entrada é TRUE fazendo com que, se não utilizada o processo de publicação estará automaticamente ativo após a entrada START ser ativada.
LORA_MODE
Define o modo de operação LORA a ser selecionado para utilização. O valor 1 especifica operação no modo OTAA e o valor 2 define operação no modo ABP.
COMM_SRC
Identificador do socket ethernet a ser utilizado para acesso ao broker. Este canal de comunicação utilizado é especificado por um identificador (valor númerico) conforme indicado na tabela a seguir:
Nome |
Ident. |
Descrição |
HILS.COM1_PORT_ID |
0 |
Canal serial COM1 |
HILS.COM2_PORT_ID |
1 |
Canal serial COM2 |
HILS.COM3_PORT_ID |
2 |
Canal serial COM3 |
HILS.COM4_PORT_ID |
3 |
Canal serial COM4 |
HILS.COM5_PORT_ID |
4 |
Canal serial COM5 |
HILS.COM6_PORT_ID |
5 |
Canal serial COM6 |
HILS.COM7_PORT_ID |
6 |
Canal serial COM7 |
HILS.COM8_PORT_ID |
7 |
Canal serial COM8 |
HILS.SOCK0_PORT_ID |
8 |
Controlador Ethernet 1: Socket 0 |
HILS.SOCK1_PORT_ID |
9 |
Controlador Ethernet 1: Socket 1 |
HILS.SOCK2_PORT_ID |
10 |
Controlador Ethernet 1: Socket 2 |
HILS.SOCK3_PORT_ID |
11 |
Controlador Ethernet 1: Socket 3 |
HILS.SOCK4_PORT_ID |
12 |
Controlador Ethernet 1: Socket 4 |
HILS.SOCK5_PORT_ID |
13 |
Controlador Ethernet 1: Socket 5 |
HILS.SOCK6_PORT_ID |
14 |
Controlador Ethernet 1: Socket 6 |
HILS.SOCK7_PORT_ID |
15 |
Controlador Ethernet 1: Socket 7 |
HILS.ETH2_SOCK0_PORT_ID |
16 |
Controlador Ethernet 2: Socket 0 |
HILS.ETH2_SOCK1_PORT_ID |
17 |
Controlador Ethernet 2: Socket 1 |
HILS.ETH2_SOCK2_PORT_ID |
18 |
Controlador Ethernet 2: Socket 2 |
HILS.ETH2_SOCK3_PORT_ID |
19 |
Controlador Ethernet 2: Socket 3 |
HILS.ETH2_SOCK4_PORT_ID |
20 |
Controlador Ethernet 2: Socket 4 |
HILS.ETH2_SOCK5_PORT_ID |
21 |
Controlador Ethernet 2: Socket 5 |
HILS.ETH2_SOCK6_PORT_ID |
22 |
Controlador Ethernet 2: Socket 6 |
HILS.ETH2_SOCK7_PORT_ID |
23 |
Controlador Ethernet 2: Socket 7 |
Este texto pode ser utilizado como parâmetro pois esta definido no tipo COMM_CHAN_ID disponível na biblioteca HI_STD. |
|
Cada equipamento possui um sub-conjunto dos recursos de comunicação indicados na tabela acima. Para identificar quais recursos estão disponíveis em um dado equipamento, consulte o manual do mesmo. |
DEC_SEP
Esta entrada é utilizada caso seja necessário alterar o separador de casas decimais no processo de conversão de variáveis reais. O valor default utilizado na conversão é o ponto (ex: 2.45). Caso necessário modificar esta valor especifique nesta entrada o código ASCII do caracter a ser utilizado como separador de casas decimais.
Por exemplo, para gerar valores separados com vírgula (Ex: 2,45) especifique o valor 44 (código ASCII do caracter vírgula) nesta entrada.
DMAP_ID
Esta entrada define qual o canal de mapeamento de dados esta associado ao bloco. Note que este canal deve ser configurado com o protocolo LORA ou o bloco irá gerar um código de erro indicando que o recurso não foi encontrado.
T_CACHE
Este parâmetro fornece para o bloco uma cache onde serão inseridos os ID’s dos items a serem publicados ao broker. Um ID representa o valor númerico associado a linha do canal de mapeamento. Cada ID consequentemente mapeia uma variável global da aplicação com um nome de tópico LORA. Esta cache portanto deve ser um vetor de tipos INT com o tamanho definido pela aplicação. Os items a serem publicados para o broker são inseridos nesta cache através da função COMM_NOTIFY_ITEM. Uma vez inserido um item, o bloco é responsavél por remover este item e publica-lo no broker assim que possível.
DEV_EUI
Esta string especifica o Id do módulo LORA utilizado. O tamanho para esta string é de 16 caracteres.
APP_EUI
Esta string especifica o Id da aplicação associada ao canal LORA. O tamanho para esta string é de 16 caracteres.
APP_KEY
Esta string especifica a chave da aplicação associada ao canal LORA. O tamanho para esta string é de 32 caracteres.
CONNECTED
Saída lógica que indica quando ativa que a conexão com o broker foi estabelecida.
PB_EV
Saída lógica que gera um pulso (se mantém ativa por em um ciclo de scan da aplicação) para indicar fim do processo de publicação de um tópico no broker.
PB_ID
Saída que especifica o Id do tópico associado ao último processo de publicação de um tópico no broker. É atualiza com a saída PB_EV.
PB_CODE
Saída que especifica código de retorno do processo de publicação de um tópico no broker. É atualiza com a saída PB_EV.
RT_EV
Saída lógica que gera um pulso (se mantém ativa por em um ciclo de scan da aplicação) para indicar fim do processo de recepção de um tópico do broker.
RT_ID
Saída que especifica o Id do item associado ao último processo de recepção de um tópico do broker. É atualiza com a saída RD_EV.
RT_CODE
Saída que especifica código de retorno do último processo de recepção de um tópico do broker. É atualiza com a saída RD_EV.
RT_CHG
Saída lógica que gera um pulso (se mantém ativa por em um ciclo de scan da aplicação) para indicar que o processo de recepção de um tópico do broker finalizado com sucesso, modificou o valor anterior da variável global associada. Este sinal quando ocorrer é sincronizado com a saída RT_EV.
Ver também
Bloco de função COMM_NOTIFY_ITEM para inserir um tópico a ser enviado pelo gateway para o broker.
Bloco de função LR_MDB_BDG_RAK3172 para criar uma bridge de comunicação para os protocolos LORA e MODBUS.
Bloco de função MDB_GATEWAY para disponibilizar um gateway de comuncação para o protocolo MODBUS.
Exemplo
Declaração de Variáveis
Nome |
Classe |
Tipo |
Dimensão |
Valor Inicial |
Descrição |
|---|---|---|---|---|---|
START |
Local |
BOOL |
FALSE |
Ativa operação do gateway |
|
SCAN |
Local |
BOOL |
Habilita publicação automatica de tópicos |
||
NOTIFY |
Local |
BOOL |
FALSE |
Publica um tópico no broker (exemplo) |
|
DEV_EUI |
Local |
STRING |
‘0023003454665432’ |
Nome do tópico de WILL |
|
APP_EUI |
Local |
STRING |
‘34677893AB65EFD0’ |
Mensagem de WILL |
|
APP_KEY |
Local |
STRING |
‘3445667778899033A4B56657E8F9D0’ |
Usuário de autenticação no broker |
|
T_CACHE |
Local |
INT |
[0..99] |
0 |
Cache para publicação de tópicos |
CONNECTED |
Local |
BOOL |
FALSE |
Broker conectado |
|
PB_COUNT |
Local |
INT |
0 |
Contador de topicos publicados |
|
RT_COUNT |
Local |
INT |
0 |
Contador de topicos recebidos |
|
LORA_GAT |
Local |
LR_GATEWAY_RAK3172 |
Instancia do gateway |
Código ST
// 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
START := START, // [BOOL] Inicia operação do gateway
//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)
//DEC_SEP := , // [USINT] Separador de casas decimais no processo de conversao dos valores reais para string (default = ponto)
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;