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

Clique aqui para baixar a tabela de variáveis

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
  );