MQTT_MDB_CEL_BRIDGE

Este bloco tem a função de executar uma bridge MODBUS-MQTT, sendo que a interface MQTT utiliza o módulo de modem de rede celular (3G ou NB-IoT)

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.

Após o bloco ser habilitado pela entrada EN, ficará aguardando uma transição de subida em START. Quando esta ocorrer, o bloco irá configurar o modem e posteriormente abrirá conexão com o broker (utilizando o bloco MODEM_RNB_U3G). Quando esta conexão é estabelecida o equipamento se conecta ao broker e entra em sua rotina padrão de publishing e subscribing das variáveis catalogadas no canal de Mapeamento de dados MQTT do projeto.

Analogamente habilita o bloco de MDB_GATEWAY para leitura e escrita dos dados refenciados no Mapeamento de dados MODBUS

Após a configuração do modem celular o valor da qualidade do sinal de rede é salva na variável de sistema 930 e pode ser acessada externamente pelo programa ou por dispositivos externos MODBUS.

Por fim, o bloco chama uma rotina que controla o led vermelho do equipamento na qual sinaliza os seguintes estados:

  • Led Vermelho ACESO: Equipamento configurando rede celular e em processo de abertura de conexão TCP com broker ou bloco desabilitado.

  • Led Vermelho PISCANDO: Equipamento conectado MQTT com broker e/ou aguardando cenexão com broker

  • Led Vermelho APAGADO: Equipamento operando, trocando dados com sucesso.

OBS: Este bloco é somente válido quando tem-se um Modem 3g/NB-IoT na ITF B do equipamento.

A entrada START deve permanecer em nível alto durante a execução do bloco. Os itens a seguir detalham o funcionamento do bloco.

Dica

Assista ao vídeo tutorial utilizando o bloco de função para aplicações envolvendo os protocolos MQTT, MODBUS e modem celular 3G: Tutorial MQTT_MDB_CEL_BRIDGE

Bloco

                   MQTT_MDB_CEL_BRIDGE
           +---------------------------------+
  BOOL ----|START                  MDB_BRT_EV|---- BOOL
           |                                 |
 USINT ----|MQTT_DMAP_ID          MDB_END_CYC|---- BOOL
           |                                 |
 USINT ----|MQTT_DEC_SEP            MDB_RD_EV|---- BOOL
           |                                 |
  BOOL ----|MQTT_HI_GATE           MDB_RD_CHG|---- BOOL
           |                                 |
  UINT ----|MQTT_FLAGS              MDB_RD_ID|---- INT
           |                                 |
  UINT ----|MQTT_KEEP_ALIVE        MDB_RD_CID|---- INT
           |                                 |
  BOOL ----|MDB_EN_SCAN           MDB_RD_CODE|---- INT
           |                                 |
  BOOL ----|MDB_SKIP_RD             MDB_WR_EV|---- BOOL
           |                                 |
 USINT ----|MDB_COMM_SRC            MDB_WR_ID|---- INT
           |                                 |
 USINT ----|MDB_DMAP_ID            MDB_WR_CID|---- INT
           |                                 |
  TIME ----|MDB_POLL_TME          MDB_WR_CODE|---- INT
           |                                 |
  TIME ----|MDB_PACK_TME      MQTT_CEL_RESULT|---- INT
           |                                 |
  BOOL ----|CEL_SIMSTK         MQTT_CONNECTED|---- BOOL
           |                                 |
           |                       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|---- INT
           |                                 |
           |                       MQTT_RT_ID|---- INT
           |                                 |
           |                     MQTT_RT_CODE|---- INT
           |                                 |
STRING ----|CEL_PIN ------------------------ |----
           |                                 |
STRING ----|CEL_APN ------------------------ |----
           |                                 |
STRING ----|CEL_USER ----------------------- |----
           |                                 |
STRING ----|CEL_PASSW ---------------------- |----
           |                                 |
STRING ----|CEL_IP ------------------------- |----
           |                                 |
STRING ----|CEL_PORT ----------------------- |----
           |                                 |
STRING ----|MQTT_CLIENT_ID ----------------- |----
           |                                 |
STRING ----|MQTT_W_TOPIC ------------------- |----
           |                                 |
STRING ----|MQTT_W_MSG --------------------- |----
           |                                 |
STRING ----|MQTT_USER ---------------------- |----
           |                                 |
STRING ----|MQTT_PASSW --------------------- |----
           |                                 |
   INT ----|MQTT_CACHE --------------------- |----
           |                                 |
   INT ----|MDB_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 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.

Na lista das variáveis a serem lidas, agrupe as variáveis por endereço de comunicação. Desta forma, quando o correr um erro de comunicação na leitura de uma determinada variável, as variáveis subsequentes que possuírem o mesmo endereço de comunicação serão descartadas no ciclo de aquisição corrente, evitando uma demora no processo gerada pelo timeout de falha em cada processo de leitura.

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.

Caso possua dúvidas sobre como configurar o socket assista ao tutorial: Configurando recursos de conectividade do equipamento.

Parâmetros

Nome

Classe

Tipo

Dim.

V. Ini.

Descrição

START

Entrada

BOOL

FALSE

Habilita operação do bloco

MQTT_DMAP_ID

Entrada

USINT

0

Id do mapeamento de dados associado ao bloco

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_FLAGS

Entrada

UINT

8

Flags de conexão com o broker

MQTT_KEEP_ALIVE

Entrada

UINT

300

Tempo em segundos para o broker validadar a conexão

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_DMAP_ID

Entrada

USINT

0

Id do mapeamento de dados associado ao bloco MQTT

MDB_POLL_TME

Entrada

TIME

T#40ms

Tempo entre um ciclo de comunicação

MDB_PACK_TME

Entrada

TIME

T#20ms

Tempo entre pacotes de comunicação

CEL_SIMSTK

Entrada

BOOL

FALSE

Chip Multioperadora: habilita SIM ToolKit (default: false)

CEL_PIN

Entrada/Saída

STRING

:*

PIN do SIM CARD

CEL_APN

Entrada/Saída

STRING

:*

APN da operadora do chip de rede celular

CEL_USER

Entrada/Saída

STRING

:*

Usuário da operadora de rede celular

CEL_PASSW

Entrada/Saída

STRING

:*

Senha da operadora de rede celular

CEL_IP

Entrada/Saída

STRING

:*

Endereço IP do broker a ser acessado

CEL_PORT

Entrada/Saída

STRING

:*

Porta de escuta do broker

MQTT_CLIENT_ID

Entrada/Saída

STRING

:*

MQTT_W_TOPIC

Entrada/Saída

STRING

:*

Nome do tópico associado a mensagem de desconexão (string:80)

MQTT_W_MSG

Entrada/Saída

STRING

:*

Mensagem de desconexão (string:140)

MQTT_USER

Entrada/Saída

STRING

:*

Nome do usuário/login de autenticação do broker mqtt (string:36) (opcional)

MQTT_PASSW

Entrada/Saída

STRING

:*

Senha de acesso do login de autenticação do broker mqtt (string:36) (opcional)

MQTT_CACHE

Entrada/Saída

INT

[*]

0

Cache de tópicos a serem enviados ao broker (deve ser fornecido um vetor de tipos INT)

MDB_CACHE

Entrada/Saída

INT

[*]

0

Cache de items a serem enviados ao equipamento remoto (deve ser fornecido um vetor de tipos INT[50])

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 (MODBUS)

MDB_RD_CHG

Saída

BOOL

FALSE

Indica que a variavel adquirida é diferente do valor anterior presente na base global (MODBUS)

MDB_RD_ID

Saída

INT

-1

Id do item da última aquisição do equipamento remoto (MODBUS)

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 (MODBUS)

MDB_WR_EV

Saída

BOOL

FALSE

Indica fim do processo de escrita de um item no equipamento remoto (MODBUS)

MDB_WR_ID

Saída

INT

-1

Id do item da última escrita no equipamento remoto (MODBUS)

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 (MODBUS)

MQTT_CEL_RESULT

Saída

INT

0

Resultado do processo de conexão MQTT via rede celular

MQTT_CONNECTED

Saída

BOOL

FALSE

Indica que o equipamento esta conectado com o broker

MQTT_SB_EV

Saída

BOOL

FALSE

Indica fim do processo de subscribe de um topico (MQTT)

MQTT_SB_ID

Saída

INT

0

Id do item da última aquisição do equipamento remoto (MQTT)

MQTT_SB_CODE

Saída

INT

0

Código de retorno da ultima recepção remota (MQTT)

MQTT_PB_EV

Saída

BOOL

FALSE

Indica fim do processo de escrita de um item no equipamento remoto (MQTT)

MQTT_PB_ID

Saída

INT

0

Id do item da última escrita no equipamento remoto (MQTT)

MQTT_PB_CODE

Saída

INT

0

Código de retorno da ultima escrita no equipamento remoto (MQTT)

MQTT_RT_EV

Saída

BOOL

FALSE

Indica fim do processo de recepção de um tópico do broker (MQTT)

MQTT_RT_CHG

Saída

INT

0

Indica que o tópico recebido é diferente do valor anterior presente na base global (MQTT)

MQTT_RT_ID

Saída

INT

0

Id do item da última recepção de tópico do broker (MQTT)

MQTT_RT_CODE

Saída

INT

0

Código de retorno da ultima recepção de tópico do broker (MQTT)

Entradas

CEL_SIMSTK

Parâmetro de entrada associado ao bloco de função MODEM_RNB_U3G:SIM_STK.

CEL_PIN

Parâmetro de entrada associado ao bloco de função MODEM_RNB_U3G:PIN.

CEL_APN

Parâmetro de entrada associado ao bloco de função MODEM_RNB_U3G:APN.

CEL_USER

Parâmetro de entrada associado ao bloco de função MODEM_RNB_U3G:USER.

CEL_PASSW

Parâmetro de entrada associado ao bloco de função MODEM_RNB_U3G:PASSW.

CEL_IP

String com o número do IP do Broker, ou host name destino. Ex: ‘54.227.237.88’. Parâmetro de entrada associado ao bloco de função MODEM_RNB_U3G:IP.

CEL_PORT

String com a PORTA do Broker. Ex: ‘1883’, por padrão. Parâmetro de entrada associado ao bloco de função MODEM_RNB_U3G:PORT.

MQTT_MAP_ID

Parâmetro de entrada associado ao bloco de função MQTT_GATEWAY:DMAP_ID.

MQTT_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_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_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_MQTT_CACHE

Parâmetro de entrada associado ao bloco de função MQTT_GATEWAY:MQTT_CACHE.

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.

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.

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_CEL_RESULT

Os erros gerados no processo de configuração e conexão do modem celular é acessado através da variável RESULT, a descrição dos códigos estão listados no blocos MODEM_CONN, U3G_CFG, RNB_CFG .

Exemplo

Base de variáveis globais da aplicação

Nome

Tipo

Endereço

V. Ini.

Descrição

BIT_MDB

BOOL

%MX0

FALSE

Variavel BOOL para escrita no device MODBUS

BIT_MQTT

BOOL

%MX1

FALSE

Variavel BOOL para escrita no broker MQTT

HUMID_RD

INT

%MW0

0

Variavel INT para leitura MQTT e escrita MDB: UMIDADE = 0 A 100 %

HUMID_WR

INT

%MW1

0

Variavel INT para escrita MQTT e leitura MDB: UMIDADE = 0 A 100 %

TEMP_RD

REAL

%MD2

0.0

Variavel REAL para leitura MQTT e escrita MDB: TEMPERATURA = -20,00 A 80,00 oC

TEMP_WR

REAL

%MD4

0.0

Variavel REAL para escrita MQTT e leitura MDB: TEMPERATURA = -20,00 A 80,00 oC

Declaração de variáveis

Nome

Classe

Tipo

Dimensão

Valor Inicial

Descrição

START

Local

BOOL

FALSE

Inicia operação do bloco principal

PUB_BIT_NOW

Local

BOOL

FALSE

Forca publicação do BIT_WR instantaneamente

MQTT_CONNECTED

Local

BOOL

FALSE

Sinaliza que equipamento conectado ao broker

BIT_MDB

Externa

BOOL

FALSE

Variavel BOOL para escrita no device MODBUS

BIT_MQTT

Externa

BOOL

FALSE

Variavel BOOL para escrita no broker MQTT

BRIDGE_RESULT

Local

UINT

0

Resultado da conexão com broker MQTT

SIG_QLTY

Local

USINT

0

Qualidade do sinal da rede 3G

MDB_COUNT

Local

INT

0

Contador de ciclos de escrita no device modbus

RD_ID

Local

INT

-1

Ultimo codigo associado ao ultimo ciclo de leitura

MQTT_COUNT

Local

INT

0

Contador de ciclos de escrita no broker MQTT

WR_ID

Local

INT

-1

Ultimo codigo associado ao ultimo ciclo de escrita

CEL_PIN

Local

STRING

:4

‘’

PIN do SIM Card da rede celular

CEL_APN

Local

STRING

:31

‘java.claro.com.br’

APN da rede celular

CEL_USER

Local

STRING

:15

‘claro’

Usuario da rede celular

CEL_PASS

Local

STRING

:10

‘claro’

Senha da rede celular

MQTT_MSG

Local

STRING

:14

0

Mensagem de desconexão (WILL Message)

MQTT_TOPIC

Local

STRING

:80

Nome do tópico associado a mensagem de desconexão (WILL Message)

MQTT_USER

Local

STRING

:20

‘ze’

Nome do usuário para login no Broker MQTT

MQTT_PASS

Local

STRING

:16

‘oi’

Senha de acesso para login no Broker MQTT

BRK_IP

Local

STRING

:40

‘50.16.187.132’

Endereço IP do Broker

BRK_PORT

Local

STRING

:6

‘1883’

Porta de escuta do broker

MDB_CACHE

Local

INT

[0..49]

0

Cache para escrita de variaveis modbus

MQTT_CACHE

Local

INT

[0..49]

0

Cache de tópicos a serem enviados ao broker

BRIDGE

Local

HILS.MQTT_MDB_CEL_BRIDGE

Instancia do bloco BRIDGE MQTT-MDB

Clique aqui para baixar a tabela de variáveis

Código ST

//------------------------------------------------------------------------------
// Instancia do bloco MQTT_MDB_CEL_BRIDGE
//
// Uma vez carregada a aplicação, ative a variavel START para habilitar a
// operação da bridge MQTT-MDB-CEL.
//------------------------------------------------------------------------------

BRIDGE(  // MQTT_MDB_CEL_BRIDGE
  //EN              := ,                // [BOOL] Entrada habilitadora
  START           := START,             // [BOOL] Habilita operação do bloco
  MQTT_DMAP_ID    := 1,                 // [USINT] Id do mapeamento de dados associado ao bloco
  //MQTT_DEC_SEP    := ,                // [USINT] Separador de casas decimais no processo de conversao dos valores reais para string (default = ponto)
  //MQTT_FLAGS      := ,                // [USINT] Flags de conexão com o broker
  MQTT_KEEP_ALIVE := 300,               // [UINT] Tempo em segundos para o broker validadar a conexão
  //MDB_EN_SCAN     :=,                 // [BOOL] Habilita o polling de dados do equipamento remoto
  //MDB_SKIP_RD     :=,                 // [BOOL] Quando habilitada imediatamente após um evento BRT_EV cancela a transação  de leitura corrente
  MDB_COMM_SRC    := HILS.COM2_PORT_ID, // [USINT] Canal de comunicação utilizado para acesso equipamento Modbus  (ex: COM1_PORT_ID)
  MDB_DMAP_ID     := 2,                 // [USINT] Id do mapeamento de dados associado ao bloco MQTT
  MDB_POLL_TME    := T#2s,              // [TIME] Tempo entre um ciclo de comunicação
  MDB_PACK_TME    := T#500ms,           // [TIME] Tempo entre pacotes de comunicação
  MDB_CACHE       := MDB_CACHE,         // [INT] Cache de items a serem enviados ao equipamento remoto (deve ser fornecido um vetor de tipos INT[50])
  MQTT_CACHE      := MQTT_CACHE,        // [INT] Cache de tópicos a serem enviados ao broker (deve ser fornecido um vetor de tipos INT)
  CEL_PIN         := CEL_PIN,           // [STRING] PIN do SIM CARD
  CEL_APN         := CEL_APN,           // [STRING] APN da operadora do chip de rede celular
  CEL_USER        := CEL_USER,          // [STRING] Usuário da operadora de rede celular
  CEL_PASSW       := CEL_PASS,          // [STRING] Senha da operadora de rede celular
  //CEL_SIMSTK      := ,                // [BOOL] Chip Multioperadora: habilita SIM ToolKit  (default: false)
  CEL_IP          := BRK_IP,            // [STRING] Endereço IP do broker a ser acessado
  CEL_PORT        := BRK_PORT,          // [STRING] Porta de escuta do broker
  MQTT_USER       := MQTT_USER,         // [STRING] Nome do usuário/login de autenticação do broker mqtt  (opcional)
  MQTT_PASSW      := MQTT_PASS,         // [STRING] enha de acesso do login de autenticação do broker mqtt  (opcional)
  MQTT_W_TOPIC    := MQTT_TOPIC,        // [STRING] Nome do tópico associado a mensagem de desconexão (string:80)
  MQTT_W_MSG      := MQTT_MSG           // [STRING] Mensagem de desconexão (string:140)
  );

// Lê a qualidade do sinal da Rede Celular 3G (0..100%)
SIG_QLTY := HILS.GET_SYSVAR(930);

// Status de conexão do equipamento ao broker
BRIDGE_RESULT := BRIDGE.MQTT_CEL_RESULT;
IF ((BRIDGE_RESULT = 0) AND (START = TRUE))  THEN
  MQTT_CONNECTED := TRUE;
ELSE
  MQTT_CONNECTED := FALSE;
END_IF;

// Contabiliza ciclos de escritas no device modbus
IF BRIDGE.MDB_WR_EV THEN
  IF (BRIDGE.MDB_WR_CODE = 0) THEN
    MDB_COUNT := MDB_COUNT + 1;   // contador
END_IF;
END_IF;

// Contabiliza ciclos de dados piblicados no broker MQTT
IF BRIDGE.MQTT_PB_EV THEN
  IF (BRIDGE.MQTT_PB_CODE = 0) THEN
    MQTT_COUNT := MQTT_COUNT + 1;   // contador
  END_IF;
END_IF;

// Força a publicação do BIT_MQTT e BIT_MDB quando PUB_BIT_NOW = TRUE
IF (PUB_BIT_NOW) THEN
  // publica topico 1 (bit) no broker mqtt
  HILS.COMM_NOTIFY_ITEM(
        1,        // ID [INT] = ID do ITEM associado ao canal de mapeameto 1
        MQTT_CACHE   // CACHE [] = Cache do canal de mapeamento 1
        );

  // escreve variavel modbus 1 (coil 5) no device modbus
  HILS.COMM_NOTIFY_ITEM(
        1,        // ID [INT] = ID do ITEM associado ao canal de mapeameto 1
        MDB_CACHE   // CACHE [] = Cache do canal de mapeamento 1
        );

  PUB_BIT_NOW := FALSE;

  BIT_MDB  := NOT BIT_MDB;  // toggle bit
  BIT_MQTT := NOT BIT_MQTT; // toggle bit
END_IF;