MQTT_MAP_PUBL
Este bloco utiliza o bloco MQTT_PUBLISH para publicar 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_pub.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, qos, retain, type, address, decimals
topic_A, 0, 0, BOOL, 0, 0
topic_B, 1, 0, INT, 4, 0
topic_C, 0, 0, UINT, 5, 0
topic_D, 1, 0, REAL, 6, 4
Nota
A primeira linha deve obrigatóriamente 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 /);
qos: QOS do tópico enviado (pode ser 0, 1 ou 2);
retain: Indica se o tópico deve ser mantido no broker ou descartado após ser publicado para os clientes;
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
decimals: nro de casas decimais do valor a serem convertidos para mensagem. Este campo é valido apenas para os tópicos com tipo igual a REAL. Deve ser 0 para os demais tipos. Os valores válidos deste campo para o tipo REAL estão entre 0 a 7.
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.
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 |
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.