MQTT_RNB_U3G

Conecta o equipamento a um broker MQTT através de um modem celular 3G/NB-IoT instalado na ITF B, publicando e assinando as variáveis catalogadas no canal de Mapeamento de dados do projeto. É um bloco de função (mantém estado entre scans; requer instância).

Biblioteca: HI_STD · Namespace: HILS · Tipo: bloco de função

Este bloco faz parte da biblioteca de comunicação do protocolo MQTT V1.3.1. Para mais informações sobre o protocolo e os blocos disponíveis, consulte o protocolo MQTT.

Bloco de função

                  MQTT_RNB_U3G
           +------------------------+
  BOOL ----|START             STATUS|---- USINT
           |                        |
  BOOL ----|EN_SCAN           RESULT|---- INT
           |                        |
  BOOL ----|EN_SUBS        CONNECTED|---- BOOL
           |                        |
 USINT ----|DMAP_ID            SB_EV|---- BOOL
           |                        |
  UINT ----|FLAGS              SB_ID|---- INT
           |                        |
 USINT ----|DEC_SEP          SB_CODE|---- INT
           |                        |
  BOOL ----|HI_GATE            PB_EV|---- BOOL
           |                        |
  BOOL ----|MODEM_SIMSTK       PB_ID|---- INT
           |                        |
  UINT ----|KEEP_ALIVE       PB_CODE|---- INT
           |                        |
           |                   RT_EV|---- BOOL
           |                        |
           |                  RT_CHG|---- BOOL
           |                        |
           |                   RT_ID|---- INT
           |                        |
           |                 RT_CODE|---- INT
           |                        |
STRING ----|CLIENT_ID ------------- |----
           |                        |
STRING ----|W_TOPIC --------------- |----
           |                        |
STRING ----|W_MSG ----------------- |----
           |                        |
STRING ----|USER ------------------ |----
           |                        |
STRING ----|PASSW ----------------- |----
           |                        |
       ----|T_CACHE --------------- |----
           |                        |
STRING ----|BRQ_IP ---------------- |----
           |                        |
STRING ----|BRQ_PORT -------------- |----
           |                        |
STRING ----|MODEM_PIN ------------- |----
           |                        |
STRING ----|MODEM_APN ------------- |----
           |                        |
STRING ----|MODEM_USR ------------- |----
           |                        |
STRING ----|MODEM_PSW ------------- |----
           +------------------------+

Após ser habilitado pela entrada START, o bloco aguarda uma transição de subida em START para configurar o modem e, em seguida, abrir a conexão com o broker (usando o bloco MODEM_RNB_U3G). Estabelecida a conexão, o equipamento entra na rotina padrão de publishing e subscribing das variáveis do canal de Mapeamento de dados. A entrada START deve permanecer em nível alto durante toda a execução do bloco.

Após a configuração do modem, o valor da qualidade do sinal de rede é salvo na variável de sistema 930, acessível pelo programa ou por dispositivos externos MODBUS.

O bloco também controla o led vermelho do equipamento para sinalizar o estado:

  • Led vermelho ACESO: configurando a rede celular ou bloco desabilitado.

  • Led vermelho PISCANDO: em processo de abertura de conexão TCP.

  • Led vermelho APAGADO: operando, trocando dados com sucesso.

Nota

Na inicialização o bloco identifica o canal serial de interface com o modem (COM1 nos modelos Ethernet, COM3 nos modelos serial) e configura a base de setup do modem para operar com o protocolo MQTT. Essa configuração exige um reset do equipamento, que o próprio bloco executa.

Importante

Este bloco só é válido quando há um modem 3G/NB-IoT instalado na ITF B do equipamento.

Dica

Assista ao vídeo tutorial do uso do bloco em aplicações com o protocolo MQTT e modem celular 3G: Tutorial MQTT_RNB_U3G

Parâmetros

Nome

Direção

Tipo

Dimensão

Padrão

Faixa / Unidade

Descrição

START

IN

BOOL

—

FALSE

—

Habilita a operação do bloco (deve permanecer alto durante a execução).

EN_SCAN

IN

BOOL

—

TRUE

—

Habilita o ciclo de notificações automáticas ao broker.

EN_SUBS

IN

BOOL

—

TRUE

—

Ativa o processo de registro (subscribe) dos itens.

DMAP_ID

IN

USINT

—

0

—

Id do mapeamento de dados associado ao bloco MQTT.

FLAGS

IN

UINT

—

8

—

Flags de conexão com o broker (padrão 8 = clean session).

DEC_SEP

IN

USINT

—

46

—

Separador decimal na conversão de valores reais para string (46 = ponto).

HI_GATE

IN

BOOL

—

FALSE

—

Se TRUE e conectado ao Portal da HI Tecnologia, notifica que é um equipamento HI e sincroniza o relógio automaticamente.

MODEM_SIMSTK

IN

BOOL

—

FALSE

—

Chip multioperadora: habilita o SIM ToolKit.

KEEP_ALIVE

IN

UINT

—

0

s

Tempo, em segundos, para o broker validar a conexão.

CLIENT_ID

IN_OUT

STRING

:*

—

—

Nome do cliente na conexão com o broker (opcional).

W_TOPIC

IN_OUT

STRING

:*

—

—

Nome do tópico associado à mensagem de desconexão.

W_MSG

IN_OUT

STRING

:*

—

—

Mensagem de desconexão.

USER

IN_OUT

STRING

:*

—

—

Nome do usuário/login de autenticação do broker MQTT (opcional).

PASSW

IN_OUT

STRING

:*

—

—

Senha de acesso do login de autenticação do broker MQTT (opcional).

T_CACHE

IN_OUT

ANY

[*]

—

—

Cache de tópicos a serem enviados ao broker (fornecer um vetor de INT).

BRQ_IP

IN_OUT

STRING

:*

—

—

Endereço IP ou host name do broker (ex.: ‘54.227.237.88’).

BRQ_PORT

IN_OUT

STRING

:*

—

—

Porta de escuta do broker (ex.: ‘1883’).

MODEM_PIN

IN_OUT

STRING

:*

—

—

PIN do SIM CARD.

MODEM_APN

IN_OUT

STRING

:*

—

—

APN da operadora do chip de rede celular.

MODEM_USR

IN_OUT

STRING

:*

—

—

Usuário da operadora de rede celular.

MODEM_PSW

IN_OUT

STRING

:*

—

—

Senha da operadora de rede celular.

STATUS

OUT

USINT

—

0

—

Status do processo do bloco (ver Observações).

RESULT

OUT

INT

—

0

—

Código de erro da configuração/conexão do modem (ver Códigos de retorno).

CONNECTED

OUT

BOOL

—

FALSE

—

Indica que o equipamento está conectado ao broker.

SB_EV

OUT

BOOL

—

FALSE

—

Indica o fim do processo de subscribe de um tópico.

SB_ID

OUT

INT

—

0

—

Id do item da última aquisição do equipamento remoto.

SB_CODE

OUT

INT

—

0

—

Código de retorno da última recepção remota.

PB_EV

OUT

BOOL

—

FALSE

—

Indica o fim do processo de escrita de um item no equipamento remoto.

PB_ID

OUT

INT

—

0

—

Id do item da última escrita no equipamento remoto.

PB_CODE

OUT

INT

—

0

—

Código de retorno da última escrita no equipamento remoto.

RT_EV

OUT

BOOL

—

FALSE

—

Indica o fim do processo de recepção de um tópico do broker.

RT_CHG

OUT

BOOL

—

FALSE

—

Indica que o tópico recebido difere do valor anterior na base global.

RT_ID

OUT

INT

—

0

—

Id do item da última recepção de tópico do broker.

RT_CODE

OUT

INT

—

0

—

Código de retorno da última recepção de tópico do broker.

Códigos de retorno

RESULT reporta os erros de configuração e conexão do modem celular. Os identificadores usam o namespace HILS (ex.: HILS.CN_NO_NET). Códigos mais comuns deste bloco:

Código

Identificador

Significado

0

SUCCESS

Processo executado com sucesso.

63

CO_CONEX_FAIL

Falha no processo de conexão.

80

CO_EQP_TMO

Timeout na resposta do equipamento externo (modem).

180

CN_PIN_ERR

PIN inválido ou bloqueado.

181

CN_SIM_CARD_ERR

SIM CARD inválido ou não encontrado.

182

CN_NO_NET

Não detectou rede celular.

183

CN_REGISTER_DENIED

Registro na rede celular negado.

184

CN_INV_AUTH_DATA

Dados de autenticação da rede celular inválidos (APN, USER ou PASSW).

185

CN_AUTH_DENIED

Autenticação na rede celular negada.

Os códigos de configuração e conexão do modem também são detalhados em MODEM_CONN, U3G_CFG e RNB_CFG. Lista completa: RET_CODE - Códigos de retorno do firmware G5.

Pré-condições

  • Modem 3G/NB-IoT instalado na ITF B do equipamento.

  • T_CACHE deve receber um vetor de tipos INT.

  • Os parâmetros do modem (MODEM_PIN, MODEM_APN, MODEM_USR, MODEM_PSW) e do broker (BRQ_IP, BRQ_PORT) devem estar preenchidos antes da transição de subida de START.

Observações

  • Os parâmetros MODEM_PIN, MODEM_APN, USER e PASSW correspondem, respectivamente, às entradas PIN, APN, USER e USER do bloco MODEM_RNB_U3G.

  • BRQ_IP é uma string com o IP ou host name do broker (ex.: ‘54.227.237.88’); BRQ_PORT é uma string com a porta do broker (‘1883’, por padrão).

  • Para os demais parâmetros do MQTT (DMAP_ID, DEC_SEP, HI_GATE, KEEP_ALIVE, USER, PASSW, T_CACHE, W_TOPIC, W_MSG) consulte a documentação do bloco MQTT_GATEWAY.

  • A saída STATUS retorna o código de operação do bloco:

    Valor

    Descrição

    0

    Inativo.

    1, 2, 3

    Aguardando configuração e conexão do modem celular.

    4

    Aguardando conexão MQTT com o broker.

    5

    Conexão com o broker estabelecida; equipamento trocando dados.

    > 5

    Estados de desconexão com o broker MQTT.

Ver também

MODEM_RNB_U3G, MQTT_QC1, MQTT_GATEWAY, MODEM_CONN, U3G_CFG, RNB_CFG, protocolo MQTT

Exemplo

Clique aqui para baixar a tabela de variáveis

Código ST

VAR
    START           : BOOL := FALSE;             (* Habilita operação do bloco *)
    CEL_PIN         : STRING := '1010';          (* PIN do SIM CARD *)
    CEL_APN         : STRING := 'tim.com.br';    (* APN da operadora do chip de rede celular *)
    CEL_USER        : STRING := 'timtim';        (* Usuário da operadora de rede celular *)
    CEL_PASSW       : STRING := 'timtim';        (* Senha da operadora de rede celular *)
    IP_BRQ          : STRING := '54.227.237.88'; (* Endereço IP do broker a ser acessado *)
    PORT_BRQ        : STRING := '1883';          (* Porta de escuta do broker *)
    MQTT_CLI_ID     : STRING := 'DEV_ID';        (* Nome do cliente da conexão com o broker (opcional) *)
    MQTT_USER       : STRING;                    (* Nome do usuário/login de autenticação do broker mqtt (opcional) *)
    MQTT_PASSW      : STRING;                    (* Senha de acesso do login de autenticação do broker mqtt (opcional) *)
    MQTT_W_TOPIC    : STRING;                    (* Nome do tópico associado a mensagem de desconexão (string:80) *)
    MQTT_W_MSG      : STRING;                    (* Mensagem de desconexão (string:140) *)
    MQTT_CACHE      : INT := 0;                  (* Cache de tópicos a serem enviados ao broker (deve ser fornecido um vetor de tipos INT) *)
    MQTT_DMAP_ID    : USINT := 0;                (* Id do mapeamento de dados associado ao bloco *)
    MQTT_DEC_SEP    : USINT := 46;               (* Separador de casas decimais na conversao dos valores reais para string (default = ponto) *)
    MQTT_KEEP_ALIVE : UINT := 300;               (* Tempo em segundos para o broker validar a conexão *)
    MQTT_CEL_RESULT : INT := 0;                  (* Resultado da operação do bloco de conexão MQTT via rede celular *)
    MODEM_MQTT      : HILS.MQTT_RNB_U3G;         (* Instância do bloco MQTT_RNB_U3G *)
END_VAR

MODEM_MQTT(
  START        := START,           (* [BOOL] Habilita operação do bloco *)
  DMAP_ID      := MQTT_DMAP_ID,     (* [USINT] Id do mapeamento de dados associado ao bloco MQTT *)
  MODEM_SIMSTK := FALSE,            (* [BOOL] Chip Multioperadora: habilita SIM ToolKit *)
  CLIENT_ID    := MQTT_CLI_ID,      (* [STRING] Nome do cliente na conexão com o broker (opcional) *)
  USER         := MQTT_USER,        (* [STRING] Nome do usuário/login de autenticação do broker mqtt (opcional) *)
  PASSW        := MQTT_PASSW,       (* [STRING] Senha de acesso do login de autenticação do broker mqtt (opcional) *)
  T_CACHE      := MQTT_CACHE,       (* [INT] Cache de tópicos a serem enviados ao broker (vetor de tipos INT) *)
  DEC_SEP      := MQTT_DEC_SEP,     (* [USINT] Separador de casas decimais na conversao dos valores reais para string *)
  KEEP_ALIVE   := MQTT_KEEP_ALIVE,  (* [UINT] Tempo em segundos para o broker validar a conexão *)
  BRQ_IP       := IP_BRQ,           (* [STRING] Endereço IP do broker a ser acessado *)
  BRQ_PORT     := PORT_BRQ,         (* [STRING] Porta de escuta do broker *)
  W_TOPIC      := MQTT_W_TOPIC,     (* [STRING] Nome do tópico associado a mensagem de desconexão *)
  W_MSG        := MQTT_W_MSG,       (* [STRING] Mensagem de desconexão *)
  MODEM_PIN    := CEL_PIN,          (* [STRING] PIN do SIM CARD *)
  MODEM_APN    := CEL_APN,          (* [STRING] APN da operadora do chip de rede celular *)
  MODEM_USR    := CEL_USER,         (* [STRING] Usuário da operadora de rede celular *)
  MODEM_PSW    := CEL_PASSW         (* [STRING] Senha da operadora de rede celular *)
  );

MQTT_CEL_RESULT := MODEM_MQTT.RESULT;