LORA_MDB_BRIDGE
Implementa uma bridge de comunicação entre os protocolos MODBUS e LORA, permitindo subscrever e publicar mensagens em uma conexão LORA e trocar dados com equipamentos MODBUS remotos; tópicos podem ser enviados automaticamente 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
LORA_MDB_BRIDGE
+-----------------------------+
BOOL ----|EN ENO|---- BOOL
| |
BOOL ----|START MDB_ITEM_ID|---- INT
| |
BOOL ----|MDB_EN_SCAN LORA_TOPIC_ID|---- INT
| |
BOOL ----|MDB_SKIP_RD MDB_BRT_EV|---- BOOL
| |
USINT ----|MDB_MAP_ID MDB_BRT_ID|---- USINT
| |
USINT ----|MDB_COMM_SRC MDB_END_CYC|---- BOOL
| |
TIME ----|MDB_IPOLL_TME MDB_CHG_EV|---- BOOL
| |
TIME ----|MDB_IPACK_TME MDB_RD_EV|---- BOOL
| |
USINT ----|LORA_MODE MDB_RD_CHG|---- BOOL
| |
USINT ----|LORA_MAP_ID MDB_RD_ID|---- INT
| |
USINT ----|LORA_COMM_SRC MDB_RD_CODE|---- INT
| |
USINT ----|LORA_DEC_SEP MDB_WR_EV|---- BOOL
| |
| MDB_WR_ID|---- INT
| |
| MDB_WR_CODE|---- INT
| |
| LORA_CONN|---- BOOL
| |
| LORA_CHG_EV|---- BOOL
| |
| LORA_RT_EV|---- BOOL
| |
| LORA_RT_CHG|---- BOOL
| |
| LORA_RT_ID|---- INT
| |
| LORA_RT_CODE|---- INT
| |
| LORA_PB_EV|---- BOOL
| |
| LORA_PB_ID|---- INT
| |
| LORA_PB_CODE|---- INT
| |
STRING ----|LORA_DEV_EUI --------------- |----
| |
STRING ----|LORA_APP_EUI --------------- |----
| |
STRING ----|LORA_APP_KEY --------------- |----
| |
----|MDB_CACHE ------------------ |----
| |
----|LORA_CACHE ----------------- |----
+-----------------------------+
Para utilizar este 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 dados a serem obtidos do canal LORA e os dados a serem enviados. Note que todos os dados criados devem estar associados a variáveis globais exportadas.
A entrada EN habilita o processamento do bloco e é usada tipicamente nas linguagens
LADDER e FB para encadear blocos. A entrada START controla a operação: enquanto
inativa o bloco permanece desconectado do broker; quando ativada, o bloco estabelece
conexão e passa a subscrever e publicar tópicos. As caches MDB_CACHE e LORA_CACHE
recebem, via função COMM_NOTIFY_ITEM, os IDs dos itens a serem enviados ao
equipamento MODBUS e ao broker LORA, respectivamente; cada ID corresponde a uma linha do
canal de mapeamento (uma variável global associada a um endereço/tópico). Ambas devem ser
vetores de INT com o tamanho definido pela aplicação.
Atenção
Quando o bloco estiver ativado (pela entrada START), se a entrada EN for
desativada durante o processo, o comportamento do bloco é indefinido. Portanto, EN
só deve ser desativada se não existir 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 da bridge (conexão com o broker LORA). |
MDB_EN_SCAN |
IN |
BOOL |
— |
TRUE |
— |
Habilita o polling de dados do equipamento remoto MODBUS. |
MDB_SKIP_RD |
IN |
BOOL |
— |
FALSE |
— |
Ativada imediatamente após |
MDB_MAP_ID |
IN |
USINT |
— |
0 |
— |
Id do canal de mapeamento de dados associado ao protocolo MODBUS. |
MDB_COMM_SRC |
IN |
USINT |
— |
0 |
— |
Canal de comunicação para acesso ao equipamento MODBUS (ver tabela de canais). |
MDB_IPOLL_TME |
IN |
TIME |
— |
T#20ms |
ms |
Tempo de espera entre ciclos de comunicação MODBUS (leitura de todos os itens do canal). |
MDB_IPACK_TME |
IN |
TIME |
— |
T#10ms |
ms |
Tempo de espera entre pacotes (leitura de um bloco MODBUS). |
LORA_MODE |
IN |
USINT |
— |
0 |
1 = OTAA · 2 = ABP |
Modo de operação do canal LORA. |
LORA_MAP_ID |
IN |
USINT |
— |
0 |
— |
Id do canal de mapeamento de dados associado ao protocolo LORA. |
LORA_COMM_SRC |
IN |
USINT |
— |
0 |
— |
Canal de comunicação para acesso à interface LORA (ver tabela de canais). |
LORA_DEC_SEP |
IN |
USINT |
— |
46 |
código ASCII |
Separador de casas decimais na conversão de reais para string (46 = ponto; 44 = vírgula). |
LORA_DEV_EUI |
IN_OUT |
STRING |
:16 |
— |
— |
Device EUI do módulo LORA. |
LORA_APP_EUI |
IN_OUT |
STRING |
:32 |
— |
— |
Application EUI da aplicação associada ao canal LORA. |
LORA_APP_KEY |
IN_OUT |
STRING |
:32 |
— |
— |
Chave da aplicação associada ao canal LORA. |
MDB_CACHE |
IN_OUT |
ANY |
— |
— |
vetor de INT |
Cache dos IDs de itens a serem enviados ao equipamento MODBUS. |
LORA_CACHE |
IN_OUT |
ANY |
— |
— |
vetor de INT |
Cache dos IDs de tópicos a serem publicados no broker LORA. |
ENO |
OUT |
BOOL |
— |
FALSE |
— |
Saída de habilitação (encadeamento em LADDER/FB). |
MDB_ITEM_ID |
OUT |
INT |
— |
-1 |
— |
Id do item enviado ao equipamento remoto por alteração. |
LORA_TOPIC_ID |
OUT |
INT |
— |
-1 |
— |
Id do tópico publicado no LORA por alteração. |
MDB_BRT_EV |
OUT |
BOOL |
— |
FALSE |
— |
Ativo indica que uma nova transação de leitura será iniciada (bloqueável por |
MDB_BRT_ID |
OUT |
USINT |
— |
0 |
— |
Endereço de comunicação do equipamento remoto quando |
MDB_END_CYC |
OUT |
BOOL |
— |
FALSE |
— |
Ativo indica o fim de um ciclo de aquisição de itens nos equipamentos remotos. |
MDB_CHG_EV |
OUT |
BOOL |
— |
FALSE |
— |
Pulso que indica que um valor recebido foi enviado ao canal MODBUS por alteração. |
MDB_RD_EV |
OUT |
BOOL |
— |
FALSE |
— |
Indica o fim da aquisição de um item no equipamento remoto. |
MDB_RD_CHG |
OUT |
BOOL |
— |
FALSE |
— |
Indica que a variável adquirida difere do valor anterior na base global. |
MDB_RD_ID |
OUT |
INT |
— |
-1 |
— |
Id do item da última aquisição do equipamento remoto. |
MDB_RD_CODE |
OUT |
INT |
— |
0 |
ver Códigos de retorno |
Código de retorno da última recepção remota. |
MDB_WR_EV |
OUT |
BOOL |
— |
FALSE |
— |
Indica o fim da escrita de um item no equipamento remoto. |
MDB_WR_ID |
OUT |
INT |
— |
-1 |
— |
Id do item da última escrita no equipamento remoto. |
MDB_WR_CODE |
OUT |
INT |
— |
0 |
ver Códigos de retorno |
Código de retorno da última escrita no equipamento remoto. |
LORA_CONN |
OUT |
BOOL |
— |
FALSE |
— |
Indica que o equipamento está conectado à rede LORA. |
LORA_CHG_EV |
OUT |
BOOL |
— |
FALSE |
— |
Pulso que indica que um item foi publicado no LORA por alteração de valor. |
LORA_RT_EV |
OUT |
BOOL |
— |
FALSE |
— |
Indica o fim da recepção de um tópico do LORA. |
LORA_RT_CHG |
OUT |
BOOL |
— |
FALSE |
— |
Indica que o tópico recebido difere do valor anterior na base global. |
LORA_RT_ID |
OUT |
INT |
— |
0 |
— |
Porta associada ao pacote recebido pelo LORA. |
LORA_RT_CODE |
OUT |
INT |
— |
0 |
ver Códigos de retorno |
Código de retorno da última recepção de tópico do LORA. |
LORA_PB_EV |
OUT |
BOOL |
— |
FALSE |
— |
Indica o fim da escrita de um item no LORA. |
LORA_PB_ID |
OUT |
INT |
— |
0 |
— |
Id do item que foi transmitido ao LORA. |
LORA_PB_CODE |
OUT |
INT |
— |
0 |
ver Códigos de retorno |
Código de retorno da última escrita no LORA. |
Os canais de comunicação (MDB_COMM_SRC e LORA_COMM_SRC) são identificados por valor
numérico:
Identificador |
Valor |
|---|---|
|
0 .. 7 |
|
8 .. 15 |
|
16 .. 23 |
Códigos de retorno
As saídas MDB_RD_CODE, MDB_WR_CODE, LORA_RT_CODE e LORA_PB_CODE carregam o
código de retorno da última transação correspondente (0 = SUCCESS; valores diferentes
de zero indicam falha ou condição operacional). A lista completa de identificadores e
significados está em RET_CODE - Códigos de retorno do firmware G5.
Pré-condições
Um canal de mapeamento (Mapeamento de dados) configurado com o protocolo LORA em
LORA_MAP_IDe outro com o protocolo MODBUS emMDB_MAP_ID; caso contrário o bloco gera código de erro de recurso não encontrado.Todos os dados mapeados devem estar associados a variáveis globais exportadas.
MDB_CACHEeLORA_CACHEdevem ser vetores deINTdimensionados pela aplicação.
Observações
Os itens são inseridos nas caches pela função COMM_NOTIFY_ITEM; o bloco remove cada item e o publica/envia assim que possível.
As saídas
*_CHG_EVgeram um pulso (ativo por um ciclo de scan) quando o valor recebido difere do valor anterior presente na base global.Para gerar valores decimais separados por vírgula, informe
44(código ASCII) emLORA_DEC_SEP.
Ver também
Exemplo
Clique aqui para baixar a tabela de variáveis
Código ST
VAR
START : BOOL := FALSE; (* Flag para habilitar a bridge *)
DEV_EUI : STRING := '0023003454665432'; (* Device EUI do módulo LORA *)
APP_EUI : STRING := '34677893AB65EFD0'; (* Application EUI *)
APP_KEY : STRING := '3445667778899033A4B56657E8F9D0'; (* Chave da aplicação *)
NEW_FROM_MDB : INT := 0; (* Dado alterado pelo equipamento MODBUS *)
NEW_FROM_LORA : INT := 0; (* Dado alterado pelo servidor LORA *)
CONNECTED : BOOL := FALSE; (* Rede LORA conectada *)
MDB_CACHE : INT := 0; (* Cache para escrita de variaveis MODBUS *)
LORA_CACHE : INT := 0; (* Cache para publicação de tópicos LORA *)
BRIDGE : HILS.LORA_MDB_BRIDGE; (* Bridge LORA-MODBUS *)
END_VAR
VAR_EXTERNAL
GV_ALARME : BOOL := FALSE; (* Alarme de temperatura alta *)
GV_SETPOINT : REAL := 20.00; (* Setpoint para alarme *)
GV_TEMP : REAL := 25.00; (* Temperatura do processo *)
END_VAR
(* Após a ativação de START, publica ciclicamente no servidor LORA os tópicos definidos
no canal de mapeamento 2 e lê ciclicamente os endereços MODBUS definidos no canal 1. *)
BRIDGE( (* LORA_MDB_BRIDGE *)
START := START, (* Inicia operação do gateway *)
MDB_MAP_ID := 1, (* Id do mapeamento associado ao protocolo MODBUS *)
MDB_COMM_SRC := HILS.COM1_PORT_ID, (* Canal de comunicação MODBUS *)
LORA_MAP_ID := 2, (* Id do mapeamento associado ao protocolo LORA *)
LORA_COMM_SRC := HILS.COM3_PORT_ID, (* Canal de comunicação LORA *)
LORA_DEV_EUI := DEV_EUI,
LORA_APP_EUI := APP_EUI,
LORA_APP_KEY := APP_KEY,
MDB_CACHE := MDB_CACHE, (* Cache de itens enviados ao equipamento MODBUS *)
LORA_CACHE := LORA_CACHE (* Cache de tópicos publicados no broker LORA *)
);
CONNECTED := BRIDGE.LORA_CONN;
IF BRIDGE.MDB_CHG_EV THEN
NEW_FROM_MDB := NEW_FROM_MDB + 1;
END_IF;
IF BRIDGE.LORA_CHG_EV THEN
NEW_FROM_LORA := NEW_FROM_LORA + 1;
END_IF;