LR_MDB_BDG_RAK3172
Implementa uma bridge de comunicação entre os protocolos MODBUS e LORA (módulo RAK3172), permitindo subscrever e publicar tópicos em uma conexão LORA e trocá-los com equipamentos MODBUS remotos; os 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
LR_MDB_BDG_RAK3172
+-----------------------------+
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_END_CYC|---- BOOL
| |
USINT ----|MDB_COMM_SRC MDB_CHG_EV|---- BOOL
| |
TIME ----|MDB_IPOLL_TME MDB_RD_EV|---- BOOL
| |
TIME ----|MDB_IPACK_TME MDB_RD_CHG|---- BOOL
| |
USINT ----|LORA_MODE MDB_RD_ID|---- INT
| |
USINT ----|LORA_MAP_ID MDB_RD_CID|---- INT
| |
USINT ----|LORA_COMM_SRC MDB_RD_CODE|---- INT
| |
USINT ----|LORA_DEC_SEP MDB_WR_EV|---- BOOL
| |
| MDB_WR_ID|---- INT
| |
| MDB_WR_CID|---- 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 --------------- |----
| |
INT ----|MDB_CACHE ------------------ |----
| |
INT ----|LORA_CACHE ----------------- |----
+-----------------------------+
Para utilização deste bloco, o usuário deverá inicialmente, através do recurso 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. Todos os dados criados devem estar associados a variáveis globais exportadas.
Quando START está inativa, o bloco permanece desconectado da rede LORA: os tópicos
não são publicados nem mantidos em cache. Ao ativar START, o bloco estabelece a
conexão, subscreve os tópicos a receber e aguarda tópicos recebidos ou critérios de
publicação. Os canais associados a MDB_MAP_ID e LORA_MAP_ID devem estar
configurados, respectivamente, com os protocolos MODBUS e LORA; caso contrário o bloco
gera um código de erro indicando que o recurso não foi encontrado.
Os itens a serem publicados no servidor LORA ou enviados ao equipamento MODBUS são
inseridos, respectivamente, em LORA_CACHE e MDB_CACHE pela função
COMM_NOTIFY_ITEM; o bloco é responsável por removê-los da cache e transmiti-los
assim que possível.
Importante
Para a utilização deste bloco, o canal de comunicação associado ao LORA
(LORA_COMM_SRC) é automaticamente vinculado ao módulo LORA pelo firmware.
Os identificadores de canal de comunicação (MDB_COMM_SRC e LORA_COMM_SRC) são
valores numéricos:
Identificador |
Valor |
|---|---|
|
0 .. 7 |
|
8 .. 15 |
|
16 .. 23 |
Parâmetros
Nome |
Direção |
Tipo |
Dimensão |
Padrão |
Faixa / Unidade |
Descrição |
|---|---|---|---|---|---|---|
START |
IN |
BOOL |
— |
FALSE |
— |
Inicia a operação da bridge; inativa, mantém o bloco desconectado. |
MDB_EN_SCAN |
IN |
BOOL |
— |
TRUE |
— |
Habilita o polling de dados do equipamento MODBUS remoto. |
MDB_SKIP_RD |
IN |
BOOL |
— |
FALSE |
— |
Quando ativada logo após um evento |
MDB_MAP_ID |
IN |
USINT |
— |
0 |
— |
Id do canal de mapeamento de dados associado ao protocolo MODBUS. |
MDB_COMM_SRC |
IN |
USINT |
— |
0 |
0 .. 23 |
Canal de comunicação usado no acesso ao equipamento MODBUS (ex.: |
MDB_IPOLL_TME |
IN |
TIME |
— |
T#20ms |
ms |
Tempo de espera entre ciclos de comunicação do device MODBUS. |
MDB_IPACK_TME |
IN |
TIME |
— |
T#10ms |
ms |
Tempo de espera entre pacotes de comunicação do device MODBUS. |
LORA_MODE |
IN |
USINT |
— |
0 |
1 = OTAA · 2 = ABP |
Modo de operação do LORA. |
LORA_MAP_ID |
IN |
USINT |
— |
0 |
— |
Id do canal de mapeamento de dados associado ao protocolo LORA. |
LORA_COMM_SRC |
IN |
USINT |
— |
0 |
0 .. 23 |
Canal de comunicação da interface LORA (vinculado automaticamente pelo firmware). |
LORA_DEC_SEP |
IN |
USINT |
— |
46 |
código ASCII |
Separador de casas decimais na conversão de valores reais em string (46 = ponto; 44 = vírgula). |
LORA_DEV_EUI |
IN_OUT |
STRING |
:* |
— |
16 caracteres |
Device EUI do módulo LORA. |
LORA_APP_EUI |
IN_OUT |
STRING |
:* |
— |
16 caracteres |
Application EUI da aplicação associada ao canal LORA. |
LORA_APP_KEY |
IN_OUT |
STRING |
:* |
— |
32 caracteres |
Chave da aplicação associada ao canal LORA. |
MDB_CACHE |
IN_OUT |
INT |
[*] |
0 |
— |
Cache de tópicos a serem enviados para o equipamento MODBUS. |
LORA_CACHE |
IN_OUT |
INT |
[*] |
0 |
— |
Cache de tópicos a serem publicados no servidor LORA. |
MDB_ITEM_ID |
OUT |
INT |
— |
-1 |
— |
Id do item enviado ao equipamento remoto MODBUS 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 quando uma nova transação de leitura MODBUS será iniciada (bloqueável por |
MDB_END_CYC |
OUT |
BOOL |
— |
FALSE |
— |
Ativo ao término de um ciclo de aquisição de itens nos equipamentos remotos. |
MDB_CHG_EV |
OUT |
BOOL |
— |
FALSE |
— |
Pulso indicando que um valor foi enviado ao canal MODBUS por alteração de valor. |
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 no equipamento remoto. |
MDB_RD_CID |
OUT |
INT |
— |
-1 |
— |
Id de comunicação da última leitura no equipamento remoto. |
MDB_RD_CODE |
OUT |
INT |
— |
0 |
código de retorno |
Código de retorno da última recepção MODBUS 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_CID |
OUT |
INT |
— |
-1 |
— |
Id de comunicação da última escrita no equipamento remoto. |
MDB_WR_CODE |
OUT |
INT |
— |
0 |
código 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 indicando 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 |
código 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 publicação de um item no LORA. |
LORA_PB_ID |
OUT |
INT |
— |
0 |
— |
Id do item que foi transmitido. |
LORA_PB_CODE |
OUT |
INT |
— |
0 |
código de retorno |
Código de retorno da última publicação no LORA. |
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 = sucesso;
? 0 = falha). Use os identificadores com o namespace HILS (ex.:
HILS.MB_SUCCESS). Códigos mais comuns:
Código |
Identificador |
Significado |
|---|---|---|
0 |
SUCCESS |
Processo executado com sucesso. |
23 |
RE_NOT_FOU |
Recurso não encontrado (canal de mapeamento não configurado com o protocolo esperado). |
63 |
CO_CONEX_FAIL |
Falha no processo de conexão. |
70 |
CO_COM_ERR |
Erro genérico de comunicação. |
79 |
CO_REC_TMO |
Timeout na recepção de frame. |
100 |
MB_SUCCESS |
Comando MODBUS executado com sucesso. |
102 |
MB_ILLEGAL_DATA_ADDRESS |
Endereço do dado inválido no comando MODBUS. |
104 |
MB_SLAVE_DEVICE_FAILURE |
Falha na execução do comando pelo equipamento remoto. |
Lista completa: RET_CODE - Códigos de retorno do firmware G5.
Pré-condições
Um canal Mapeamento de dados configurado com o protocolo MODBUS associado a
MDB_MAP_IDe outro configurado com o protocolo LORA associado aLORA_MAP_ID.Todos os dados mapeados devem estar associados a variáveis globais exportadas.
LORA_DEV_EUI(16),LORA_APP_EUI(16) eLORA_APP_KEY(32) preenchidos com os identificadores do módulo/aplicação LORA.
Observações
MDB_BRT_EV,MDB_END_CYC,MDB_RD_*eMDB_WR_*refletem os eventos do gateway MODBUS interno (ver MDB_GATEWAY).Os eventos de alteração (
MDB_CHG_EV,LORA_CHG_EV) são pulsos de um scan, ativados apenas quando o valor recebido difere do valor anterior na base global.LORA_DEC_SEPaltera o separador decimal na conversão de reais para string (46 = ponto, 44 = vírgula).
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 modulo LORA *)
APP_EUI : STRING := '34677893AB65EFD0'; (* Application EUI *)
APP_KEY : STRING := '3445667778899033A4B56657E8F9D0'; (* Chave da aplicacao *)
NEW_FROM_MDB : INT := 0; (* Contador de dados alterados via MODBUS *)
NEW_FROM_LORA : INT := 0; (* Contador de dados alterados via LORA *)
CONNECTED : BOOL := FALSE; (* Rede LORA conectada *)
MDB_CACHE : INT := 0; (* Cache para escrita de variaveis MODBUS *)
LORA_CACHE : INT := 0; (* Cache para publicacao de topicos *)
BRIDGE : HILS.LR_MDB_BDG_RAK3172; (* Instancia da 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
(* Apos ativar START, publica ciclicamente no servidor LORA os topicos do canal de
mapeamento 2 e le ciclicamente os enderecos MODBUS do canal de mapeamento 1. *)
BRIDGE(
START := START,
MDB_MAP_ID := 1,
MDB_COMM_SRC := HILS.COM1_PORT_ID,
LORA_MAP_ID := 2,
LORA_COMM_SRC := HILS.COM3_PORT_ID,
LORA_DEV_EUI := DEV_EUI,
LORA_APP_EUI := APP_EUI,
LORA_APP_KEY := APP_KEY,
MDB_CACHE := MDB_CACHE,
LORA_CACHE := LORA_CACHE
);
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;