MQTT_PUBLISH
Este bloco permite que tópicos sejam publicados (PUBLISH) para um broker MQTT.
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.
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_PUBLISH
+------------------+
BOOL ----|START DONE_EV|---- BOOL
| |
USINT ----|COMM_SRC RESULT|---- INT
| |
BOOL ----|RETAIN |
| |
USINT ----|QOS |
| |
STRING ----|TOPIC ----------- |----
| |
STRING ----|MESSAGE --------- |----
+------------------+
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 publicação do tópico.
São especificados os seguintes parâmetros:
identificador do socket ethernet associado ao broker;
nome do tópico a ser publicado;
mensagem associada ao tópico a ser publicado;
QOS (Quality of service) associado ao tópico a ser publicado;
Flag notificando ao broker para manter a mensagem publicada;
Ao final do processo de publicação, a saída DONE_EV gera um pulso de conclusão especifica em RESULT o código de retorno do processo.
Nota
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 código de retorno 28 (RC_RE_FIL_OVF).
Parâmetros
Nome |
Classe |
Tipo |
Dim. |
V. Ini. |
Descrição |
START |
Entrada |
BOOL |
FALSE |
Inicia o processo de publicação de um tópico QTT (ativa na transição de subida) |
|
COMM_SRC |
Entrada |
USINT |
0 |
Canal de comunicação a ser utilizado |
|
RETAIN |
Entrada |
BOOL |
FALSE |
Notifica o broker para manter a mensagem enviada |
|
QOS |
Entrada |
USINT |
0 |
QOS (Quality of service) (0, 1 ou 2) |
|
TOPIC |
Entrada/Saída |
STRING |
:* |
Nome do topico a ser publicado |
|
MESSAGE |
Entrada/Saída |
STRING |
:* |
Mensagem associado ao topico a ser publicado |
|
DONE_EV |
Saída |
BOOL |
FALSE |
Gera um pulso no final do processo ou se detectada falha no processo |
|
RESULT |
Saída |
INT |
0 |
Resultado do processo de publicação |
COMM_SRC
Identificador do socket ethernet a ser utilizado para acesso ao broker. Este do canal de comunicação utilizado é especificado por um identificador (valor númerico) conforme indicado na tabela a seguir:
ID |
LABEL [4] |
Tipo de canal de comunicação [5] |
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 |
Cada equipamento possui um sub-conjunto dos recursos de comunicação indicados na tabela acima. Para identificar quais recursos estão disponíveis em um dado equipamento, consulte o manual do mesmo. |
TOPIC
Esta string especifica o nome do tópico a ser publicado para o broker. 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.
MESSAGE
Esta string especifica o valor do tópico a ser publicado para o broker.
QOS
Define tipo de reconhecimento a ser utilizado no processo de publicação. São suportados QOS 0, 1 e 2. O valor default para este parametro é QOS = 0.
RETAIN
Notifica ao broker para manter a mensagem publicada de forma que, caso um cliente assine este tópico posteriormente esta mensagem ser reportada para o mesmo.
RESULT
Tipo Dado |
Descrição |
INT |
Código de retorno na execução da função, do tipo RET_CODE, onde:
|
Para consultar a lista completa dos códigos de retorno acesse: RET_CODE - Códigos de retorno do firmware G5. |
Exemplo
Declaração de Variáveis
Nome |
Classe |
Tipo |
Valor Inicial |
Descrição |
|---|---|---|---|---|
BROKER_IP |
Local |
STRING |
‘192.168.0.58’ |
IP do Broker |
BROKER_PORT |
Local |
UDINT |
1883 |
porta de escuta do broker |
MQTT_CT |
Local |
HILS.MQTT_CONTROLLER |
bloco de controle do protocolo MQTT |
|
START |
Local |
BOOL |
1 |
Habilita protocolo |
REC_TOPIC |
Local |
STRING |
Nome do tópico recebido do broker |
|
REC_MSG |
Local |
STRING |
Mensagem assocada ao tópico recebido do broker |
|
WILL |
Local |
STRING |
WILL message de conexão |
|
USER |
Local |
STRING |
Usuario e senha de conexao |
|
MQTT_PUB |
Local |
HILS.MQTT_PUBLISH |
bloco de publicação do protocolo MQTT |
|
PUB_ITEM |
Local |
BOOL |
FALSE |
Flag para publicar um item |
PUB_TOPIC |
Local |
STRING |
‘temp’ |
nome do tópico a ser publicado |
PUB_MSG |
Local |
STRING |
‘123.oC’ |
valor do tópico a ser publicado |
MQTT_SUB |
Local |
HILS.MQTT_SUBSCRIBE |
bloco de assinatura do protocolo MQTT |
|
SUB_TOPIC |
Local |
STRING |
‘temp’ |
nome do tópico a ser assinado |
Código ST
// Este código, abre conexão com o broker MQTT, assina o tópico 'temp' e a cada
// ativação da variavel PUB_ITEM, publica o tópico 'temp' com valor '123.oC'.
// Note que, como o tópico é publicado tem o mesmo nome do tópico assinado, após
// a publicação, o topico é recebido do broker.
// Abre uma conexão (Clean section com Keep Alive = 5 min)
MQTT_CT( // MQTT_ENGINE
START := START, // [BOOL] Inicia o processo de gerencia de uma conexão MQTT com um broker (ativa na transição de subida)
COMM_SRC := HILS.SOCK1_PORT_ID, // [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
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
);
// Assim que a conexao com o broker for realizada assina um tópico
MQTT_SUB( // MQTT_SUBSCRIBE
START := MQTT_CT.CONNECTED, // [BOOL] Inicia o processo de publicação de um tópico QTT (ativa na transição de subida)
COMM_SRC := HILS.SOCK1_PORT_ID, // [USINT] Canal de comunicação a ser utilizado
TOPIC := SUB_TOPIC // [STRING] Nome do topico a ser assinado
);
IF MQTT_CT.TOP_EV THEN
// Tratar aqui o tópico recebido do broker
END_IF;
IF PUB_ITEM THEN
MQTT_PUB( // MQTT_PUBLISH
START := PUB_ITEM, // [BOOL] Inicia o processo de publicação de um tópico QTT (ativa na transição de subida)
COMM_SRC := HILS.SOCK1_PORT_ID, // [USINT] Canal de comunicação a ser utilizado
RETAIN := FALSE, // [BOOL] Notifica o broker para manter a mensagem enviada
QOS := 0, // [USINT] QOS (Quality of service) (0, 1 ou 2)
TOPIC := PUB_TOPIC, // [STRING] Nome do topico a ser publicado
MESSAGE := PUB_MSG // [STRING] Mensagem associado ao topico a ser publicado
);
IF MQTT_PUB.DONE_EV THEN
PUB_ITEM := FALSE;
END_IF;
END_IF;