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

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

Clique aqui para baixar a tabela de variáveis

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;