MQTT_MAP_SUBS

Este bloco utiliza o bloco MQTT_SUBSCRIBE para subscrever uma lista de tópicos obtidos de um arquivo. Quando utilizado, o usuário deverá criar no diretório do projeto corrente, um arquivo com o nome mqtt_map_sub.csv. Neste arquivo o usuário poderá definir uma lista de tópicos associados a variáveis globais exportadas.

O formato do arquivo deve ser o seguinte::

topic_name,   max_qos,   type,   address
topicA,       0,         BOOL,   0
topicB,       1,         INT,    4
topicC,       0,         UINT,   5
topicD,       1,         REAL,   6

Nota

  • A primeira linha deve obrigatópiamente possuir os textos das colunas conforme especificado acima;

  • As demais linhas devem possuir as informações de:

    • topic_name: Nome definido para o tópico (pode ser composto de letras e/ou numeros e os caracteres _ e /);

    • max_qos: QOS máximo que o tópico pode ser reenviado pelo broker (pode ser 0, 1 ou 2);

    • type: Tipo IEC associado a variável exportada. São permitidos os tipos, BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, LINT, ULINT, LWORD e REAL

    • address: endereço da variável exportada

  • São permitidas linhas em branco (ignoradas no processsamento do arquivo)

Importante

O delimitador de lista utilizado deve ser compatível com as configurações da versão e idioma utilizado pelo Windows.

Máquinas com Windows em português normalmente utilzam como delimitador de lista o caracter ‘;’ enquanto que Windows em inglês utilizam o caracter ‘,’.

Cada tópico irá referenciar uma variável exportada. O bloco ao ser ativado irá subscrever no broker todos os tópicos especificados no arquivo. Quando o broker publicar para o equipamento um destes tópicos, o valor do mesmo será atualizado na variável exportada associada automaticamente. Adicionalmente, a ocorrencia deste evento é sinalizada pelo bloco indicando qual foi a variável atualizada pelo broker.

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_SUBS
           +--------------------+
  BOOL ----|EN               ENO|---- BOOL
           |                    |
  BOOL ----|START       SUB_DONE|---- BOOL
           |                    |
 USINT ----|COMM_SRC      SUB_EV|---- BOOL
           |                    |
  BOOL ----|SUBSCRIBE     SUB_ID|---- INT
           |                    |
  BOOL ----|B_PUB       SUB_CODE|---- INT
           |                    |
           |              PUB_EV|---- BOOL
           |                    |
           |              PUB_ID|---- INT
           |                    |
           |            PUB_CODE|---- INT
           |                    |
STRING ----|B_TOPIC ----------- |----
           |                    |
STRING ----|B_MSG ------------- |----
           +--------------------+

Este bloco opera em conjunto com o bloco MQTT_CONTROLLER e 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.

O processo de assinatura dos tópicos (Subscribe) é iniciado ativando a entrada SUBSCRIBE. A conclusão deste processo é notificada pela ativação da saída SUB_DONE. Durante este processo, para cada tópico subscrito no broker a saida SUB_EV é ativada, o id do tópico é indicado na saida SUB_ID e o resultado do processo apresentado na saída SUB_CODE.

Uma vez, terminado o processo de assinatura dos tópicos a entrada SUBSCRIBE deverá se manter ativa e o bloco entra no estado de tratamento das publicações do broker. Neste cenário, as entradas P_PUB, B_TOPIC e B_MSG devem ser respectivamente associadas as saídas TOP_EV, BROKER_TOPIC e BROKER_MSG do bloco de função MQTT_CONTROLLER.

Desta forma, quando o bloco MQTT_CONTROLLER notificar a chegada de um tópico publicado pelo broker, este será processado e o valor do tópico recebido será atribuido automaticamente à variável associada ao tópico no arquivo mqtt_map_sub.csv. Ao final deste processamento saída PUB_EV é ativada, o id do tópico é indicado na saida PUB_ID e o resultado do processo apresentado na saída PUB_CODE.

Ver também

O bloco de função MQTT_MAP_PUBL em conjunto com a função MQTT_PUB_ID podem ser utilizados para gerar publicações de tópicos especificados a partir de uma lista em um arquivo .csv.

A partir da versão 1.2.22 do HIstudio é possível configurar a lista de tópicos diretamente em um editor do ambiente que automaticamente gera o arquivo .csv.

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

SUBSCRIBE

Entrada

BOOL

FALSE

Ativa o processo de registro dos itens

B_PUB

Entrada

BOOL

FALSE

Notificação de evento publicado pelo broker

B_TOPIC

Entrada/Saída

STRING

Topico publicado pelo broker

B_MSG

Entrada/Saída

STRING

Mensagem publicada pelo broker

ENO

Saída

BOOL

FALSE

Saída de habilitação

SUB_DONE

Saída

BOOL

FALSE

Fim do processo de registro de tópicos

SUB_EV

Saída

BOOL

FALSE

Sinalização de tópico subscrito no broker

SUB_ID

Saída

INT

0

Id do topico subscrito no broker (quando SUB_EV estiver ativo)

SUB_CODE

Saída

INT

0

Código de retorno do tópico subscrito no broker (quando SUB_EV estiver ativo)

PUB_EV

Saída

BOOL

FALSE

Sinalização de tópico publicado pelo broker

PUB_ID

Saída

INT

0

Id do tópico publicado pelo broker (quando PUB_EV estiver ativo)

PUB_CODE

Saída

INT

0

Código de retorno do tópico recebido do broker (quando PUB_EV estiver ativo)

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

B_TOPIC

Esta string especifica o nome do tópico recebido do broker quando a entrada B_TOP estiver ativa. Na implementação corrente, o tamanho máximo do nome de um tópico é de 80 caracteres. Nomes de tópicos maiores que 80 caracteres, irão gerar erro no processamento do bloco retornando do código 28 (RC_RE_FIL_OVF) e não serão tratados.

B_MSG

Esta string contem a mensagem associada a um tópico recebido do broker quando a entrada B_TOP estiver ativa.

Exemplo

Declaração de Variáveis

Nome

Classe

Tipo

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

PUBLISHED_TOPICS

Local

UINT

Número de topicos publicados pelo broker

MQTT_CT

Local

HILS.MQTT_CONTROLLER

Bloco de controle do MQTT

MQTT_BDG_S

Local

MQTT_MAP_SUBS

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

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 registro e gerencia de publicações do broker
// Os tópicos a serem subscritos estao especificados no arquivo mqtt_map_sub.csv
// presente no diretório do projeto corrente
MQTT_BDG_S(                         // MQTT_MAP_SUBSCRIBER
  //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
  SUBSCRIBE  := MQTT_CT.CONNECTED,  // [BOOL] Ativa o processo de registro dos itens
  B_PUB      := MQTT_CT.TOP_EV,     // [BOOL] Notificação de evento publicado pelo broker
  B_TOPIC    := REC_TOPIC,          // [STRING] Topico publicado pelo broker
  B_MSG      := REC_MSG             // [STRING] Mensagem publicada pelo broker
  );

Ver também

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

Bloco de função MQTT_MAP_PUBL para encaminhar as publicações de tópicos no protocolo MQTT a partir de em uma lista em um arquivo .csv.

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