MQTT_QC1

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

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

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 no HIstudio consulte o protocolo MQTT.

Bloco de função

                   MQTT_QC1
           +----------------------+
  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
           |                      |
  UINT ----|KEEP_ALIVE       PB_ID|---- INT
           |                      |
  BOOL ----|SYNC_RTC       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 --------------- |----
           |                      |
   INT ----|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; quando esta ocorre, configura o modem e abre a conexão com o broker (utilizando o bloco MODEM_QC1). Estabelecida a conexão, o equipamento entra na rotina padrão de publishing e subscribing das variáveis catalogadas no canal de Mapeamento de dados. START deve permanecer em nível alto durante toda a execução do bloco.

Na inicialização o bloco identifica o canal serial de interface com o modem (COM1 nos modelos Ethernet; COM3 nos modelos seriais) e configura sua base de setup para operar com o protocolo MQTT — para isso é necessário um reset do equipamento, executado pelo próprio bloco.

Após a configuração do modem, o valor da qualidade do sinal de rede celular é 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, sinalizando os estados:

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

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

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

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 em nível alto).

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: Clean session).

DEC_SEP

IN

USINT

—

46

—

Separador decimal na conversão de valores reais para string (padrão = 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.

KEEP_ALIVE

IN

UINT

—

300

s

Tempo (segundos) para o broker validar a conexão.

SYNC_RTC

IN

BOOL

—

FALSE

—

Sincroniza o relógio calendário do controlador pela rede celular.

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

INT

[*]

0

—

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 a ser acessado. Ex.: '54.227.237.88'.

BRQ_PORT

IN_OUT

STRING

:*

—

—

Porta de escuta do broker. Ex.: '1883' (padrão).

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 de processo do bloco (ver Observações).

RESULT

OUT

INT

—

0

RET_CODE

Resultado da operação do bloco (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 (publish) 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 é diferente 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

Os erros do processo de configuração e conexão do modem celular são reportados em RESULT. A descrição completa dos códigos está no bloco MODEM_QC1. Códigos mais comuns (identificadores no namespace HILS, ex.: HILS.CN_PIN_ERR):

Código

Identificador

Significado

0

SUCCESS

Processo executado com sucesso.

10

GL_CMD_TMO

Timeout na execução do comando.

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 PIN 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.

Lista completa dos códigos de retorno: RET_CODE - Códigos de retorno do firmware G5.

Pré-condições

  • O equipamento deve possuir um Modem 4G (CAT-M) na ITF B.

  • Nos modelos Ethernet o modem deve estar na COM1; nos modelos seriais, na COM3.

  • O canal de Mapeamento de dados referenciado por DMAP_ID deve estar configurado.

Observações

  • A entrada SYNC_RTC e os parâmetros MODEM_PIN, MODEM_APN, MODEM_USR e MODEM_PSW correspondem aos parâmetros homônimos do bloco MODEM_QC1 (ver também PIN, APN, USER e PASSW).

  • Para os parâmetros DMAP_ID, DEC_SEP, HI_GATE, KEEP_ALIVE, USER, PASSW, T_CACHE, W_TOPIC e W_MSG consulte também a documentação do bloco MQTT_GATEWAY.

  • A saída STATUS retorna o código de operação corrente 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_QC1, MQTT_GATEWAY, MQTT_Q4GA1, 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 cliente da conexão com o broker (opcional) *)
    MQTT_USER       : STRING;                    (* 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 no processo de conversao dos valores reais para string (default = ponto) *)
    MQTT_KEEP_ALIVE : UINT := 300;               (* Tempo em segundos para o broker validadar 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_QC1;             (* Instância do bloco MQTT_QC1 *)
END_VAR

MODEM_MQTT(  (* MQTT_4G *)
  START        := START,           (* [BOOL] Habilita operação do bloco *)
  DMAP_ID      := MQTT_DMAP_ID,     (* [USINT] Id do mapeamento de dados associado ao bloco MQTT *)
  CLIENT_ID    := MQTT_CLI_ID,      (* [STRING] Nome do cliente na conexão com o broker (opcional) *)
  USER         := MQTT_USER,        (* [STRING] 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 INT) *)
  DEC_SEP      := MQTT_DEC_SEP,     (* [USINT] Separador de casas decimais (default = ponto) *)
  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;