LORA_CONTROLLER
Este bloco tem por função implementar a interface com o módulo de comunicação LORA RAK811 da BreakBoard.
Bloco
LORA_CONTROLLER
+---------------------+
BOOL ----|EN ENO|---- BOOL
| |
BOOL ----|START CONNECTED|---- BOOL
| |
USINT ----|COMM_SRC R_EV|---- BOOL
| |
USINT ----|SEND R_PORT|---- USINT
| |
USINT ----|LORA_MODE R_CODE|---- INT
| |
USINT ----|S_PORT S_EV|---- BOOL
| |
| S_ID|---- USINT
| |
| S_CODE|---- INT
| |
STRING ----|DEV_EUI ------------ |----
| |
STRING ----|APP_EUI ------------ |----
| |
STRING ----|APP_KEY ------------ |----
| |
STRING ----|LORA_IMSG ----------- |----
| |
STRING ----|LORA_OMSG ----------- |----
+---------------------+
Possui as seguintes funções principais:
Estabelece conexão com o servidor LORA;
Gerencia eventuais quedas de conexão reconectando com servidor automaticamente;
Notifica uma conexão com sucesso com o servidor permitindo ao usuário iniciar iniciar a troca de dados;
Sinaliza a recepção de mensagens do servidor LORA disponibilizando o nome do tópico e a mensagem associada.
O processo é iniciado através da ativação da entrada START que deve permanecer ativa durante todo o tempo de execução.
Ao ser ativado o bloco inicia o processo de conexão com o broker pelo socket ethernet especificado. Concluido o processo com sucesso a saída CONNECTED se torna ativa indicando que o servidor LORA esta conectado ao broker e funcional.
Quando o servidor enviar uma mensagem para o cliente, a saída R_EV irá gerar um pulso e neste momento as saídas R_PORT e LORA_IMSG possuem o nro da porta e a mensagem associada respectivamente.
Parâmetros
Nome |
Classe |
Tipo |
Dim. |
V. Ini. |
Descrição |
EN |
Entrada |
BOOL |
TRUE |
Habilitação de entrada |
|
START |
Entrada |
BOOL |
FALSE |
Inicia o processo de gerencia de uma conexão MQTT com um broker (ativa na transição de subida) |
|
COMM_SRC |
Entrada |
USINT |
0 |
Canal de comunicação a ser utilizado |
|
SEND |
Entrada |
USINT |
0 |
Envia quando != 0 a veriavel do ID definido e o conteudo de LORA_OMSG para o servidor LORA conectado |
|
LORA_MODE |
Entrada |
USINT |
0 |
Modo de operação do Lora: OTAA[1] ou ABP[2] |
|
S_PORT |
Entrada |
USINT |
1 |
Porta de comunicacão associada a mensagem a ser enviada ao servidor LORA |
|
DEV_EUI |
Entrada/Saída |
STRING |
:16 |
Device EUI gerado pela application no LoraNertwork Server |
|
APP_EUI |
Entrada/Saída |
STRING |
:32 |
Application EUI gerado pela application no LoraNertwork Server |
|
APP_KEY |
Entrada/Saída |
STRING |
:32 |
App Key gerado pela application no LoraNertwork Server |
|
LORA_IMSG |
Entrada/Saída |
STRING |
Mensagem recebida do servidor LORA |
||
LORA_OMSG |
Entrada/Saída |
STRING |
Mensagem a ser enviada para o servidor LORA |
||
ENO |
Saída |
BOOL |
FALSE |
Saída de habilitação |
|
CONNECTED |
Saída |
BOOL |
FALSE |
Conexão com o broker estabelecida com sucesso |
|
R_EV |
Saída |
BOOL |
FALSE |
Gera um pulso ao receber uma mensagem do servidor LORA |
|
R_PORT |
Saída |
USINT |
0 |
Porta associada ao pacote recebido |
|
R_CODE |
Saída |
INT |
0 |
Último código de erro detectado no processo conexão ou recepção de mensagem do servidor LORA |
|
S_EV |
Saída |
BOOL |
FALSE |
Gera um pulso ao completar qualquer processo com erro |
|
S_ID |
Saída |
USINT |
0 |
ID do item que foi transmitido |
|
S_CODE |
Saída |
INT |
0 |
Último código de erro detectado no processo de envio de uma mensagem ao servidor LORA |
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 do canal de comunicação utilizado é especificado por um identificador (valor númerico) conforme indicado na tabela a seguir:
ID |
LABEL [3] |
Tipo de canal de comunicação [4] |
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. |
LORA_IMSG
Quando o servidor enviar uma mensagem para o equipaemnto, o saída R_EV irá gerar um pulso notificando a chegada da mensagem, e a saída R_CODE indicado o resultado do processo de recepção. Neste momento, o mensagem esta disponivel em LORA_IMSG. Note que este parâmetro deverá ser processado durante o evento de R_EV pois o mesmo poderá ser alterado nos ciclos seguintes.
Exemplo
Declaração de Variáveis
Nome |
Classe |
Tipo |
Dimensão |
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 associada ao tópico recebido do broker |
||
W_TOPIC |
Local |
STRING |
:80 |
Nome do tópico associado ao processo de desconexão do cliente (opcinal) |
|
W_MSG |
Local |
STRING |
:140 |
Mensagem associada ao processo de desconexão do cliente (opcinal) |
|
USER |
Local |
STRING |
:20 |
Nome do usuário (opcinal) |
|
PASSW |
Local |
STRING |
:16 |
Senha de acesso (opcinal) |
|
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_CONTROLLER
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
WTOPIC := W_TOPIC, // [STRING] Topico da mensagem de WILL
WMSG := W_MSG, // [STRING] Mensagem de WILL
USER := USER, // [STRING] Nome do usuário
PASSW := PASSW, // [STRING] Senha do usuário
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;