MQTT_AUTO_PUBL

Este bloco utiliza o bloco MQTT_MAP_PUBL para, baseado na configuração definda na aplicação, gerar publicações automáticas dos tópicos definidos. Quando utilizado, o usuário deverá configurar no form de mapeamento MQTT os critérios para que cada tópico definido seja automaticamente enviado para o broker.

Cada tópico irá referenciar uma variável exportada.

Para publicar um tópico, o usuário deverá utilizar a função MQTT_PUB_ID que insere na cache do bloco (parâmetro TOPIC_CACHE) o índice do tópico a ser publicado. Este índice é definido pela ordem dos tópicos na lista fornecida, iniciando com zero para o primeiro tópico da lista.

O processo de compilação da aplicação que possui este bloco de função gera no diretório do projeto um arquivo com o nome mqtt_id_enum.csv que pode ser importado por um tipo enumerado para criar uma listas de identificadores para cada um dos tópicos listados no projeto. O nome do id gerado é o nome do tópico com o sufixo ‘_id’, por exemplo, o tópico ‘temp_1’ irá gerar o id ‘temp_1_id’.

Este bloco é parte da biblioteca de comunicação do protocolo MQTT V1.3.1.

Importante

Para a utilização desse bloco, o socket utilizado para acesso ao broker 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.)

Bloco

              MQTT_MAP_PUBL
          +--------------------+
 BOOL ----|EN               ENO|---- BOOL
          |                    |
 BOOL ----|START         PUB_EV|---- BOOL
          |                    |
USINT ----|COMM_SRC      PUB_ID|---- UINT
          |                    |
USINT ----|DEC_SEP        ERROR|---- INT
          |                    |
      ----|TOPIC_CACHE ------- |----
          +--------------------+

Este bloco opera em conjunto com o bloco MQTT_CONTROLLER e com a função MQTT_PUB_ID. Só deve ser ativado após a saída CONNECTED do bloco MQTT_CONTROLLER se tornar ativa, indicando que a conexão com o broker foi executada com sucesso.

Nesta condição o processo é iniciado através da ativação da entrada START que deve permanecer ativa durante todo o tempo de operação do bloco.

Os tópicos a serem publicados são especificados utilizando-se a função MQTT_PUB_ID que deve compartilhar na sua chamada o mesmo parâmetro TOPIC_CACHE do bloco.

Sempre que um tópico for encaminhado pelo driver MQTT para o broker, a saída PUB_EV gera um evento indicando em PUB_ID o identificaodr do tópico enviado e em PUB_ERROR o código de erro do processo (0 indicacao processo executado com sucesso).

Parâmetros

Nome

Parâmetro

Tipo Dado

V. Ini.

Descrição

EN

Entrada

BOOL

TRUE

Habilitação de entrada

START

Entrada

BOOL

FALSE

Inicia o processo de registro de tópicos e tratamento de publish do broker

COMM_SRC

Entrada

USINT

0

Canal de comunicação a ser utilizado

DEC_SEP

Entrada

USINT

46

Separador de casas decimais

TOPIC_CACHE

Entrada/Saída

ANY

Fila de tópicos a serem publicados

ENO

Saída

BOOL

FALSE

Saída de habilitação

PUB_EV

Saída

BOOL

FALSE

Notificação de resultado de um apublicção de topico

PUB_ID

Saída

UINT

0

Id do tópico publicado

ERROR

Saída

INT

0

Código de retorno do processo corrente

EN

Entrada de habilitação do bloco. Quando inativa o bloco não é processado. Esta entrada é usualmente utilizada apenas nas linguagens LADDER e FB para encadear os blocos de funções.

Atenção

Quando o bloco for ativado (pela entrada START) se a entrada EN for desativada durante o processo o comportamento do bloco é indefinido. Portanto, a entrada EN deve ser desativada apenas se não existir nenhum processo pendente no bloco.

COMM_SRC

Identificador do socket ethernet a ser utilizado para acesso ao broker. Este canal de comunicação utilizado é especificado por um identificador (valor númerico) conforme indicado na tabela a seguir:

ID

LABEL [1]

Tipo de canal de comunicação [3]

8

HILS.SOCK0_PORT_ID

Identificador do socket 0

9

HILS.SOCK1_PORT_ID

Identificador do socket 1

10

HILS.SOCK2_PORT_ID

Identificador do socket 2

11

HILS.SOCK3_PORT_ID

Identificador do socket 3

12

HILS.SOCK4_PORT_ID

Identificador do socket 4

13

HILS.SOCK5_PORT_ID

Identificador do socket 5

14

HILS.SOCK6_PORT_ID

Identificador do socket 6

15

HILS.SOCK7_PORT_ID

Identificador do socket 7

DEC_SEP

Esta entrada é utilizada caso seja necessário alterar o separador de casas decimais no processo de conversão de variaveis reais. O valor default utilzado na conversão é o ponto (ex: 2.45). Caso necessario modificar esta valor especifique nesta entrada o código ASCII do caracter a ser utilizado como separador de casas decimais.

Poe exemplo, para gerar valore separados com vírgula (Ex: 2,45) especifique o valor 44 (código ASCII do caracter vírgula) nesta entrada.

Exemplo

Declaração de Variáveis

Nome

Classe

Tipo

Dimensão

Valor Inicial

Descrição

START

Local

BOOL

FALSE

Habilita teste

BROKER_IP

Local

STRING

‘192.168.0.58’

IP de acesso ao broker

BROKER_PORT

Local

UDINT

1883

Porta de escuta do broker

FLAGS

Local

USINT

0

Flags de conexao

WILL

Local

STRING

‘WTOPIC|W_NEON’

Parametros de conexao

USER

Local

STRING

‘JOAO|123’

Usuário e senha

REC_TOPIC

Local

STRING

Topico recebido do broker

REC_MSG

Local

STRING

Mensagem associada do topico recebido do broker

COM_PORT

Local

USINT

Socket ethernet utilizado para acesso ao broker

PUB_ID

Local

UINT

ID do tópico a ser publicado

MQTT_CT

Local

HILS.MQTT_CONTROLLER

Bloco de controle do MQTT

MQTT_BDG_P

Local

MQTT_MAP_PUBL

Bloco de publicação do MQTT por ID’s

TOPIC_CACHE

Local

UINT

[0..99]

Cache para manter os tópicos a serem publicados

Clique aqui para baixar a tabela de variáveis

Código ST

// Este código, após a ativação da variável START, abre conexão com o broker MQTT
// rondando no IP e porta especificados e assina todos os tópicos definidos no arquivo mqtt_map_sub.csv
// presente no diretório do projeto.
// Após este processo, trata as publicações do broker a atualiza os tópicos reecebidos na variáveis associadas.

// Ativa controlador MQTT
COM_PORT := HILS.SOCK1_PORT_ID;
FLAGS    := HILS.CLIENT_ID + HILS.CLEAN_SECTION;

MQTT_CT(                        // MQTT_CONTROLLER
  //EN           := ,           // [BOOL] Habilitação de entrada
  START        := START,        // [BOOL] Inicia o processo de gerencia de uma conexão MQTT com um broker (ativa na transição de subida)
  COMM_SRC     := COM_PORT,     // [USINT] Canal de comunicação a ser utilizado
  BROKER_IP    := BROKER_IP,    // [STRING] IP de conexão com o broker 192.168.0.80
  BROKER_PORT  := BROKER_PORT,  // [UINT] Porta de conexao com o broker
  KEEP_ALIVE   := 300,          // [UINT] Keep alive time em segundos (default = 5 min)
  MQTT_FLAGS   := FLAGS,        // [USINT] Flags de conexão com o broker (default = clean section)
  WILL_P       := WILL,         // [STRING] Topico e mensagem de WILL (separados por |)
  USER_P       := USER,         // [STRING] Nome e senha do usuário (separados por |)
  BROKER_TOPIC := REC_TOPIC,    // [STRING] Nome do topico recebido
  BROKER_MSG   := REC_MSG       // [STRING] Mensagem associada ao tópico recebido
  );

// Ativa Bridge MQTT-MODBUS para envio de publicações para o broker
// Os tópicos a serem publicados estao especificados no arquivo mqtt_map_pub.csv
// presente no diretório do projeto corrente.
MQTT_BDG_P(                   // MQTT_MAP_PUBLISHER
  //EN        := ,            // [BOOL] Habilitação de entrada
  START       := START,       // [BOOL] Inicia o processo de registro de tópicos e tratamento de publish do broker
  COMM_SRC    := COM_PORT,    // [USINT] Canal de comunicação a ser utilizado
  TOPIC_CACHE := TOPIC_CACHE  // [INT] Fila de tópicos a serem publicados
  );

// Exemplo de publicaçao de um tópico pela aplicação. Especifique o id do tópico em PUB_ID.
IF PUB_ID THEN
  IF (MQTT_PUB_ID(PUB_ID, TOPIC_CACHE) = 0) THEN
    // Topico encaminhado com sucesso para publicação

    PUB_ID := 0;
  END_IF;
END_IF;

Ver também

Bloco de função MQTT_PUB_ID para publicar um topico no protocolo MQTT através de um ID.

Bloco de função MQTT_MAP_SUBS para assinar tópicos no protocolo MQTT a partir de em uma lista em um arquivo .csv..

Bloco de função MQTT_CONTROLLER para controlar o acesso ao broker MQTT e receber publicações do mesmo.