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