MQTT_MDB_BRIDGE
Este bloco implementa uma bridge de comunicação entre os procotolos MODBUS e MQTT, permitindo subscrever e publicar tópicos MQTT para um broker qualquer. Tópicos podem ser automaticamente enviados baseado em critérios de tempo ou de alteração de valores.
Este bloco é parte da biblioteca de comunicação do protocolo MQTT V1.3.1.
Para mais informações sobre o protocolo e os blocos disponíveis no HIstudio consulte o protocolo MQTT.
Dica
Assista ao vídeo tutorial utilizando o bloco de função para aplicações envolvendo os protocolos MQTT e MODBUS: Tutorial MQTT_MDB_BRIDGE
Bloco
MQTT_MDB_BRIDGE
+--------------------------------+
BOOL ----|START MDB_BRT_EV|---- BOOL
| |
USINT ----|MDB_MAP_ID MDB_END_CYC|---- BOOL
| |
BOOL ----|MDB_EN_SCAN MDB_RD_EV|---- BOOL
| |
BOOL ----|MDB_SKIP_RD MDB_RD_CHG|---- BOOL
| |
USINT ----|MDB_COMM_SRC MDB_RD_ID|---- INT
| |
TIME ----|MDB_POLL_TME MDB_RD_CID|---- INT
| |
TIME ----|MDB_PACK_TME MDB_RD_CODE|---- INT
| |
USINT ----|MQTT_MAP_ID MDB_WR_EV|---- BOOL
| |
USINT ----|MQTT_COMM_SRC MDB_WR_ID|---- INT
| |
UINT ----|MQTT_FLAGS MDB_WR_CID|---- INT
| |
USINT ----|MQTT_DEC_SEP MDB_WR_CODE|---- INT
| |
BOOL ----|MQTT_HI_GATE MDB_CHG_EV|---- INT
| |
UINT ----|MQTT_KEEP_ALIVE MDB_ITEM_ID|---- INT
| |
UINT ----|MQTT_BROKER_PORT MQTT_SB_EV|---- BOOL
| |
| MQTT_SB_ID|---- INT
| |
| MQTT_SB_CODE|---- INT
| |
| MQTT_PB_EV|---- BOOL
| |
| MQTT_PB_ID|---- INT
| |
| MQTT_PB_CODE|---- INT
| |
| MQTT_RT_EV|---- BOOL
| |
| MQTT_RT_CHG|---- BOOL
| |
| MQTT_RT_ID|---- INT
| |
| MQTT_RT_CODE|---- INT
| |
| MQTT_CHG_EV|---- BOOL
| |
| MQTT_CONN|---- BOOL
| |
| MQTT_TOPIC_ID|---- INT
| |
STRING ----|MQTT_BROKER_IP ---------------- |----
| |
STRING ----|MQTT_CLIENT_ID ---------------- |----
| |
STRING ----|MQTT_W_TOPIC ------------------ |----
| |
STRING ----|MQTT_W_MSG -------------------- |----
| |
STRING ----|MQTT_USER --------------------- |----
| |
STRING ----|MQTT_PASSW -------------------- |----
| |
INT ----|MDB_CACHE --------------------- |----
| |
INT ----|MQTT_CACHE -------------------- |----
+--------------------------------+
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 MQTT. 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 MQTT deve ser previamente configurado para operação como cliente TCP/IP (sem conexão automática) com protocolo MQTT e o tamanho da cache de dados do socket dever ser de no mínimo 500 bytes (1460 max.)
Caso possua dúvidas sobre como configurar o socket assista ao tutorial: Configurando recursos de conectividade do equipamento
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 MODBUS. Em seguida, no canal de mapeamento criado, definir os itens a serem obtidos remotamente e os itens a serem enviados. Note que todos os itens criados devem estar associados a variáveis globais exportadas.
Importante
Para a utilização desse bloco, os canais de comunicação utilizados para acesso aos equipamentos devem possuir as seguintes configurações:
O protocolo de aplicação deve estar configurado como MODBUS-TCP ou MODBUS-RTU em função do equipamento remoto a ser acessado.
Se o canal for ethernet o socket associado deve estar configurado como cliente TCP/IP e com auto conexão desativada.
Se o canal for serial os parâmetros de baudrate, data bits, stop bits e paridade devem ser compatíveis com as configurações dos equipamentos a serem acessados.
Parâmetros
Nome |
Classe |
Tipo |
Dim. |
V. Ini. |
Descrição |
START |
Entrada |
BOOL |
FALSE |
Inicia operação do gateway |
|
MDB_MAP_ID |
Entrada |
USINT |
0 |
Id do mapeamento de dados associado ao protocolo MODBUS |
|
MDB_EN_SCAN |
Entrada |
BOOL |
TRUE |
Habilita o polling de dados do equipamento remoto |
|
MDB_SKIP_RD |
Entrada |
BOOL |
FALSE |
Quando habilitada imediatamente após um evento BRT_EV cancela a transação de leitura corrente |
|
MDB_COMM_SRC |
Entrada |
USINT |
0 |
Canal de comunicação utilizado para acesso equipamento Modbus (ex: COM1_PORT_ID) |
|
MDB_POLL_TME |
Entrada |
TIME |
T#20ms |
Tempo entre um ciclo de comunicação |
|
MDB_PACK_TME |
Entrada |
TIME |
T#10ms |
Tempo entre pacotes de comunicação |
|
MQTT_MAP_ID |
Entrada |
USINT |
0 |
Id do mapeamento de dados associado ao protocolo MQTT |
|
MQTT_COMM_SRC |
Entrada |
USINT |
0 |
Canal de comunicação utilizado para acesso ou broker (ex: SOCK1_PORT_ID) |
|
MQTT_FLAGS |
Entrada |
UINT |
8 |
Flags de conexão com o broker |
|
MQTT_DEC_SEP |
Entrada |
USINT |
46 |
Separador de casas decimais no processo de conversao dos valores reais para string (default = ponto) |
|
MQTT_HI_GATE |
Entrada |
BOOL |
FALSE |
Se TRUE e conectado ao Portal da HI Tecnologia, notifica que é um equipamento HI e sincroniza o relógio automaticamente. |
|
MQTT_KEEP_ALIVE |
Entrada |
UINT |
300 |
Tempo em segundos para o broker validadar a conexão |
|
MQTT_BROKER_PORT |
Entrada |
UINT |
1883 |
Porta de escuta do broker |
|
MQTT_BROKER_IP |
Entrada/Saída |
STRING |
:* |
Endereço IP do broker a ser acessado |
|
MQTT_CLIENT_ID |
Entrada/Saída |
STRING |
:* |
Endereço IP do broker a ser acessado |
|
MQTT_W_TOPIC |
Entrada/Saída |
STRING |
:* |
Nome do tópico associado a mensagem de desconexão (opc) |
|
MQTT_W_MSG |
Entrada/Saída |
STRING |
:* |
Mensagem de desconexão (opc) |
|
MQTT_USER |
Entrada/Saída |
STRING |
:* |
Nome do usuário (opc) |
|
MQTT_PASSW |
Entrada/Saída |
STRING |
:* |
Senha de acesso (opc) |
|
MDB_CACHE |
Entrada/Saída |
INT |
[*] |
0 |
Cache de tópicos a serem enviados para o equipamento MODBUS |
MQTT_CACHE |
Entrada/Saída |
INT |
[*] |
0 |
Cache de tópicos a serem enviados para o broker |
MDB_BRT_EV |
Saída |
BOOL |
FALSE |
Quando ativo, indica que uma nova transação de leitura será iniciada. Através da entrada SKIP_RD o usuário pode bloquear esta t |
|
MDB_END_CYC |
Saída |
BOOL |
FALSE |
Quando ativo, indica que terminou um ciclo de aquisição de items nos equipamentos remotos |
|
MDB_RD_EV |
Saída |
BOOL |
FALSE |
Indica fim do processo de aquisição de um item no equipamento remoto |
|
MDB_RD_CHG |
Saída |
BOOL |
FALSE |
Indica que a variavel adquirida é diferente do valor anterior presente na base global |
|
MDB_RD_ID |
Saída |
INT |
-1 |
Id do item da última aquisição do equipamento remoto |
|
MDB_RD_CID |
Saída |
INT |
-1 |
Id de comunicação da última leitura no equipamento remoto |
|
MDB_RD_CODE |
Saída |
INT |
0 |
Código de retorno da ultima recepção remota |
|
MDB_WR_EV |
Saída |
BOOL |
FALSE |
Indica fim do processo de escrita de um item no equipamento remoto |
|
MDB_WR_ID |
Saída |
INT |
-1 |
Id do item da última escrita no equipamento remoto |
|
MDB_WR_CID |
Saída |
INT |
-1 |
Id de comunicação da última escrita no equipamento remoto |
|
MDB_WR_CODE |
Saída |
INT |
0 |
Código de retorno da ultima escrita no equipamento remoto |
|
MDB_CHG_EV |
Saída |
INT |
0 |
Notifica que uma variavel lida via MODBUS foi alterada e publicada no broker |
|
MDB_ITEM_ID |
Saída |
INT |
-1 |
Id do item enviado para o equipamento remoto por alteração |
|
MQTT_SB_EV |
Saída |
BOOL |
FALSE |
Indica fim do processo de subscribe de um topico |
|
MQTT_SB_ID |
Saída |
INT |
0 |
Id do item da última aquisição do equipamento remoto |
|
MQTT_SB_CODE |
Saída |
INT |
0 |
Código de retorno da ultima recepção remota |
|
MQTT_PB_EV |
Saída |
BOOL |
FALSE |
Indica fim do processo de escrita de um item no equipamento remoto |
|
MQTT_PB_ID |
Saída |
INT |
0 |
Id do item da última escrita no equipamento remoto |
|
MQTT_PB_CODE |
Saída |
INT |
0 |
Código de retorno da ultima escrita no equipamento remoto |
|
MQTT_RT_EV |
Saída |
BOOL |
FALSE |
Indica fim do processo de recepção de um tópico do broker |
|
MQTT_RT_CHG |
Saída |
BOOL |
FALSE |
Indica que o tópico recebido é diferente do valor anterior presente na base global |
|
MQTT_RT_ID |
Saída |
INT |
0 |
Id do item da última recepção de tópico do broker |
|
MQTT_RT_CODE |
Saída |
INT |
0 |
Código de retorno da ultima recepção de tópico do broker |
|
MQTT_CHG_EV |
Saída |
BOOL |
FALSE |
Notifica que uma variavel lida via do broker MQTT foi alterada e publicada no equipamento remoto via MODBUS |
|
MQTT_CONN |
Saída |
BOOL |
FALSE |
Indica que o equipamento esta conectado com o broker |
|
MQTT_TOPIC_ID |
Saída |
INT |
-1 |
Id do topico publicado no broker por alteração |
|
LSTART |
Local |
BOOL |
FALSE |
Flag para detectar transição do START |
Entradas
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.
MDB_EN_SCAN
Parâmetro de entrada associado ao bloco de função MDB_GATEWAY:EN_SCAN.
MDB_SKIP_RD
Parâmetro de entrada associado ao bloco de função MDB_GATEWAY:SKIP_RD.
MDB_DMAP_ID
Parâmetro de entrada associado ao bloco de função MDB_GATEWAYD:MAP_ID.
MDB_COMM_SRC
Parâmetro de entrada associado ao bloco de função MDB_GATEWAY:COMM_SRC.
MDB_POLL_TME
Parâmetro de entrada associado ao bloco de função MDB_GATEWAY:IPOLL_TME.
MDB_PACK_TME
Parâmetro de entrada associado ao bloco de função MDB_GATEWAY:IPACK_TME.
MDB_CACHE
Parâmetro de entrada/saída associado ou bloco de função MDB_GATEWAY:W_CACHE.
MQTT_MAP_ID
Parâmetro de entrada associado ao bloco de função MQTT_GATEWAY:DMAP_ID.
MQTT_COMM_SRC
Parâmetro de entrada associado ao bloco de função MQTT_GATEWAY:COMM_SRC.
MQTT_KEEP_ALIVE
Parâmetro de entrada associado ao bloco de função MQTT_GATEWAY:KEEP_ALIVE.
MQTT_MQTT_FLAGS
Parâmetro de entrada associado ao bloco de função MQTT_GATEWAY:MQTT_FLAGS.
MQTT_DEC_SEP
Parâmetro de entrada associado ao bloco de função MQTT_GATEWAY:DEC_SEP.
MQTT_HI_GATE
Parâmetro de entrada associado ao bloco de função MQTT_GATEWAY:HI_GATE.
MQTT_BROKER_PORT
Parâmetro de entrada associado ao bloco de função MQTT_GATEWAY:BROKER_PORT.
MQTT_BROKER_IP
Parâmetro de entrada associado ao bloco de função MQTT_GATEWAY:BROKER_IP.
MQTT_W_TOPIC
Parâmetro de entrada associado ao bloco de função MQTT_GATEWAY:W_TOPIC.
MQTT_W_MSG
Parâmetro de entrada associado ao bloco de função MQTT_GATEWAY:W_MSG.
MQTT_USER
Parâmetro de entrada associado ao bloco de função MQTT_GATEWAY:USER.
MQTT_PASSW
Parâmetro de entrada associado ao bloco de função MQTT_GATEWAY:PASSW.
MQTT_CACHE
Parâmetro de entrada associado ao bloco de função MQTT_GATEWAY:MQTT_CACHE.
Saídas
MDB_BRT_EV
Parâmetro de saída associado ao bloco de função MDB_GATEWAY:BRT_EV.
MDB_END_CYC
Parâmetro de saída associado ao bloco de função MDB_GATEWAY:END_CYC.
MDB_RD_EV
Parâmetro de saída associado ao bloco de função MDB_GATEWAY:RD_EV.
MDB_RD_CHG
Parâmetro de saída associado ao bloco de função MDB_GATEWAY:RD_CHG.
MDB_RD_ID
Parâmetro de saída associado ao bloco de função MDB_GATEWAY:RD_ID.
MDB_RD_CID
Parâmetro de saída associado ao bloco de função MDB_GATEWAY:RD_ID.
MDB_RD_CODE
Parâmetro de saída associado ao bloco de função MDB_GATEWAY:RD_CODE.
MDB_WR_EV
Parâmetro de saída associado ao bloco de função MDB_GATEWAY:WR_EV.
MDB_WR_ID
Parâmetro de saída associado ao bloco de função MDB_GATEWAY:WR_ID.
MDB_WR_CID
Parâmetro de saída associado ao bloco de função MDB_GATEWAY:WR_ID.
MDB_WR_CODE
Parâmetro de saída associado ao bloco de função MDB_GATEWAY:WR_CODE.
MDB_CHG_EV
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 valor modbus foi finalizado com sucesso, modificou o valor anterior da variável global associada e foi inserido na cache de publicação do broker.
TOPIC_ID
Id do tópico a ser publicado pelo broker por alteração. Este valor é válido na ocorrência do evento MDB_CHG_EV.
MQTT_SB_EV
Parâmetro de saída associado ao bloco de função MQTT_GATEWAY:SB_EV.
MQTT_SB_ID
Parâmetro de saída associado ao bloco de função MQTT_GATEWAY:SB_ID.
MQTT_SB_CODE
Parâmetro de saída associado ao bloco de função MQTT_GATEWAY:SB_CODE.
MQTT_PB_EV
Parâmetro de saída associado ao bloco de função MQTT_GATEWAY:PB_EV.
MQTT_PB_ID
Parâmetro de saída associado ao bloco de função MQTT_GATEWAY:PB_ID.
MQTT_PB_CODE
Parâmetro de saída associado ao bloco de função MQTT_GATEWAY:PB_CODE.
MQTT_RT_EV
Parâmetro de saída associado ao bloco de função MQTT_GATEWAY:RT_EV.
MQTT_RT_CHG
Parâmetro de saída associado ao bloco de função MQTT_GATEWAY:RT_CHG.
MQTT_RT_ID
Parâmetro de saída associado ao bloco de função MQTT_GATEWAY:RT_ID.
MQTT_RT_CODE
Parâmetro de saída associado ao bloco de função MQTT_GATEWAY:RT_CODE.
MQTT_CONN
Parâmetro de saída associado ao bloco de função MQTT_GATEWAY:CONNECTED.
MQTT_CHG_EV
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 valor pelo broker MQTT foi finalizado com sucesso, modificou o valor anterior da variável global associada e foi inserido na cache de publicação do gateway MODBUS.
ITEM_ID
Id da variável a ser enviada via MODBUS por alteração. Este valor é válido na ocorrência do evento MQTT_CHG_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 MQTT_GATEWAY para disponibilizar um gateway de comuncação para o protocolo MQTT.
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 |
Valor Inicial |
Descrição |
|---|---|---|---|---|
GV_ALARME |
Externa |
BOOL |
FALSE |
Alarme de temperatura alta |
GV_SETPOINT |
Externa |
REAL |
20.00 |
Setpoint para alarme |
GV_TEMP |
Externa |
REAL |
25.00 |
Temperatura do processo |
START |
Local |
BOOL |
FALSE |
Flag para habilitar a bridge |
BROKER_IP |
Local |
STRING |
‘192.168.0.80’ |
IP de escuta do broker |
BROKER_PORT |
Local |
UDINT |
1883 |
Porta de escuta do broker |
WILL_T |
Local |
STRING |
‘W_TOPIC’ |
Nome do tópico de WILL |
WILL_M |
Local |
STRING |
‘W_MSG’ |
Mensagem de WILL |
USER |
Local |
STRING |
‘JOAO’ |
Usuário de autenticação no broker |
PASSW |
Local |
STRING |
‘123’ |
Senha de autenticação no broker |
NEW_FROM_MDB |
Local |
INT |
0 |
Dado alterado pelo broker |
NEW_FROM_MQTT |
Local |
INT |
0 |
Dado alterado pelo equipamento remoto |
CONNECTED |
Local |
BOOL |
FALSE |
Broker conectado |
MDB_CACHE |
Local |
INT |
0 |
Cache para escrita de variaveis modbus |
MQTT_CACHE |
Local |
INT |
0 |
Cache para publicação de tópicos |
BRIDGE |
Local |
MQTT_MDB_BRIDGE |
Bride MQTT MODBUS |
Código ST
// Este código, após a ativação da entrada START, publica no broker ciclicamente os
// tópicos definidos no canal de mapeamento 2 e, le ciclicamente os endreços MODBUS
// definidos no canal de mapeamento 1.
// Publica no broker os tópicos definidos no canal de 2 e envia via o canal MODBUS
// as variáveis definidas no canal de mapeamento 1.
// Bridge MQTTT MODBUS
BRIDGE( // MQTT_MDB_BRIDGE
START := START, // [BOOL] Inicia operação do gateway
//EN_SCAN := // [BOOL] Habilita o polling de dados do equipamento remoto
//SKIP_RD := // [BOOL] Quando habilitada imediatamente após um evento BRT_EV cancela a transação de leitura corrente
MDB_MAP_ID := 1, // [BOOL] Id do mapeamento de dados associado ao protocolo MODBUS
MDB_COMM_SRC := HILS.COM1_PORT_ID, // [USINT] Canal de comunicação utilizado para acesso equipamento Modbus (ex: COM1_PORT_ID)
//IPOLL_TME := , // [TIME] Tempo entre um ciclo de comunicação
//IPACK_TME := , // [TIME] Tempo entre pacotes de comunicação
MDB_CACHE := MDB_CACHE, // [] Cache de tópicos a serem enviados para o equipamento MODBUS
MQTT_MAP_ID := 2, // [USINT] Id do mapeamento de dados associado ao protocolo MQTT
MQTT_COMM_SRC := HILS.SOCK2_PORT_ID, // [USINT] Canal de comunicação utilizado para acesso ou broker (ex: SOCK1_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)
MQTT_CACHE := MQTT_CACHE // [] Cache de tópicos a serem enviados para o broker
);