LORA_GATEWAY

Este bloco implementa um gateway de comunicação para o protocolo LORA, permitindo subscrever e publicar tópicos LORA para um broker qualquer. Tópicos podem ser automaticamente enviados baseado em critérios de tempo ou de alteração de valores.

Bloco

                LORA_GATEWAY
           +---------------------+
  BOOL ----|EN                ENO|---- BOOL
           |                     |
  BOOL ----|START       CONNECTED|---- BOOL
           |                     |
  BOOL ----|EN_SCAN       RT_CODE|---- INT
           |                     |
 USINT ----|LORA_MODE       RT_ID|---- INT
           |                     |
 USINT ----|COMM_SRC       RT_CHG|---- BOOL
           |                     |
 USINT ----|DEC_SEP         RT_EV|---- BOOL
           |                     |
 USINT ----|DMAP_ID       PB_CODE|---- INT
           |                     |
           |                PB_ID|---- INT
           |                     |
           |                PB_EV|---- BOOL
           |                     |
       ----|T_CACHE ------------ |----
           |                     |
STRING ----|APP_KEY ------------ |----
           |                     |
STRING ----|APP_EUI ------------ |----
           |                     |
STRING ----|DEV_EUI ------------ |----
           +---------------------+

Para utilização deste bloco, o usuário deverá inicialmente, utilizando o recurso de Mapeamento de dados criar um canal de mapeamento e associá-lo ao protocolo LORA. Em seguida, no canal de mapeamento criado, definir os tópicos a serem subscritos e os tópicos a serem publicados. Note que todos os tópicos criados devem estar associados a variáveis globais exportadas.

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 LORA e o tamanho da cache de dados do socket dever ser de no mínimo 500 bytes (1460 max.)

Parâmetros

Nome

Classe

Tipo

Dim.

V. Ini.

Descrição

EN

Entrada

BOOL

TRUE

Habilitação do bloco

START

Entrada

BOOL

FALSE

Inicia operação do gateway

EN_SCAN

Entrada

BOOL

TRUE

Habilita o ciclo de notificacoes automaticas ao broker

LORA_MODE

Entrada

USINT

0

Modo de operação do Lora: OTAA[1] ou ABP[2]

COMM_SRC

Entrada

USINT

0

Canal de comunicação utilizado para acesso ou broker (ex: SOCK1_PORT_ID)

DEC_SEP

Entrada

USINT

46

Separador de casas decimais no processo de conversao dos valores reais para string (default = ponto)

DMAP_ID

Entrada

USINT

0

Id do mapeamento de dados associado ao bloco

T_CACHE

Entrada/Saída

ANY

Cache de tópicos a serem enviados ao broker (deve ser fornecido um vetor de tipos INT)

APP_KEY

Entrada/Saída

STRING

:32

Application KEY (string:32)

APP_EUI

Entrada/Saída

STRING

:32

Application ID (string:32)

DEV_EUI

Entrada/Saída

STRING

:16

Device ID (string:16)

ENO

Saída

BOOL

FALSE

Saída de habilitação

CONNECTED

Saída

BOOL

FALSE

Indica que o equipamento esta conectado com o broker

RT_CODE

Saída

INT

0

Código de retorno da ultima recepção de tópico do broker

RT_ID

Saída

INT

0

Id do item da última recepção de tópico do broker

RT_CHG

Saída

BOOL

FALSE

Indica que o tópico recebido é diferente do valor anterior presente na base global

RT_EV

Saída

BOOL

FALSE

Indica fim do processo de recepção de um tópico do broker

PB_CODE

Saída

INT

0

Código de retorno da ultima escrita no equipamento remoto

PB_ID

Saída

INT

-1

Id do item da última escrita no equipamento remoto

PB_EV

Saída

BOOL

FALSE

Indica fim do processo de escrita de um item no equipamento remoto

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.

START

Entrada de controle do bloco. Quando inativa o bloco se mantenhem desconectado do broker. Neste cenário os tópicos não serão publicados e nem mantidos em cache. Quando ativada esta entrada, o bloco estabelece conexão com o broker especificado, estando apto e subscrever os tópicos a serem recebidos do broker e aguardando um tópico do broker ou um critério para publicar um tópico para o broker.

EN_SCAN

Quando ativa habilita o ciclo de publicações automáticas no broker. Estas publicações podem ser por tempo ou por alteração de valor da variável associada. O valor default para esta entrada é TRUE fazendo com que, se não utilizada o processo de publicação estará automaticamente ativo após a entrada START ser ativada.

EN_SUBS

Quando ativa habilita o processo de subscrição dos tópicos a serem recebidos. O valor default para esta entrada é TRUE fazendo com que, se não utilizada o processo de subscrição estará automaticamente ativo após a entrada START ser ativada.

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:

Nome

Ident.

Descrição

HILS.COM1_PORT_ID

0

Canal serial COM1

HILS.COM2_PORT_ID

1

Canal serial COM2

HILS.COM3_PORT_ID

2

Canal serial COM3

HILS.COM4_PORT_ID

3

Canal serial COM4

HILS.COM5_PORT_ID

4

Canal serial COM5

HILS.COM6_PORT_ID

5

Canal serial COM6

HILS.COM7_PORT_ID

6

Canal serial COM7

HILS.COM8_PORT_ID

7

Canal serial COM8

HILS.SOCK0_PORT_ID

8

Controlador Ethernet 1: Socket 0

HILS.SOCK1_PORT_ID

9

Controlador Ethernet 1: Socket 1

HILS.SOCK2_PORT_ID

10

Controlador Ethernet 1: Socket 2

HILS.SOCK3_PORT_ID

11

Controlador Ethernet 1: Socket 3

HILS.SOCK4_PORT_ID

12

Controlador Ethernet 1: Socket 4

HILS.SOCK5_PORT_ID

13

Controlador Ethernet 1: Socket 5

HILS.SOCK6_PORT_ID

14

Controlador Ethernet 1: Socket 6

HILS.SOCK7_PORT_ID

15

Controlador Ethernet 1: Socket 7

HILS.ETH2_SOCK0_PORT_ID

16

Controlador Ethernet 2: Socket 0

HILS.ETH2_SOCK1_PORT_ID

17

Controlador Ethernet 2: Socket 1

HILS.ETH2_SOCK2_PORT_ID

18

Controlador Ethernet 2: Socket 2

HILS.ETH2_SOCK3_PORT_ID

19

Controlador Ethernet 2: Socket 3

HILS.ETH2_SOCK4_PORT_ID

20

Controlador Ethernet 2: Socket 4

HILS.ETH2_SOCK5_PORT_ID

21

Controlador Ethernet 2: Socket 5

HILS.ETH2_SOCK6_PORT_ID

22

Controlador Ethernet 2: Socket 6

HILS.ETH2_SOCK7_PORT_ID

23

Controlador Ethernet 2: Socket 7

Este texto pode ser utilizado como parâmetro pois esta definido no tipo COMM_CHAN_ID disponível na biblioteca HI_STD.

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.

KEEP_ALIVE

Valor em segundos a ser utilizado para notificar ao broker que o equipamento esta funcional quando não existirem mensagens sendo trocadas. O valor default deste parametro é 300 = 5 minutos.

LORA_FLAGS

Define os flags LORA utilizados no processo de conexão com o broker. O valores possíveis para este flag estão definidos no tipo de dados LORAFLAGS_T disponível na biblioteca HI_STD São eles:

Nome

Ident.

Descrição

HILS.WILL_QOS0

0

WILL MESSAGE com QOS0 [4]

HILS.WILL_QOS1

1

WILL MESSAGE com QOS1 [4]

HILS.WILL_QOS2

2

WILL MESSAGE com QOS2 [4]

HILS.WILL_RETAIN

4

WILL MESSAGE enviada pelo Broker com flag RETAIN ativo [5]

HILS.CLEAN_SECTION

8

Broker inicia uma sessão limpa

HILS.CLIENT_ID

16

Associa o nome do equipamento ao Client ID [6]

O valor default deste parametro é 8 = CLEAN_SECTION.

DEC_SEP

Esta entrada é utilizada caso seja necessário alterar o separador de casas decimais no processo de conversão de variáveis reais. O valor default utilizado na conversão é o ponto (ex: 2.45). Caso necessário modificar esta valor especifique nesta entrada o código ASCII do caracter a ser utilizado como separador de casas decimais.

Por exemplo, para gerar valores separados com vírgula (Ex: 2,45) especifique o valor 44 (código ASCII do caracter vírgula) nesta entrada.

BROKER_PORT

Especifica a porta de escuta do broker LORA a ser utilizada para conexão. O valor default é 1883.

BROKER_IP

Especifica o IP do servidor que hospeda o broker LORA. Este valor é uma string no formato a.b.c.d (Ex: ‘192.168.0.57’).

W_TOPIC

Esta string especifica o nome do tópico associado a mensagem WILL. Esta mensagem é opcional e enviada aos clientes que assinaram este tópico quando o cliente se desconecta do broker. O tamanho máximo para o nome do tópico é de 80 caracteres.

W_MSG

Esta string especifica a mensagem (WILL) associada a ser utilizada. Esta mensagem é opcional e enviada aos clientes que assinaram o tópico W_TOPIC quando o cliente se desconecta do broker. O tamanho máximo para esta mensagem é de 140 caracteres.

USER

Esta string especifica o nome do usuário utilizado no processo de autenticação na conexão com o broker. Esta mensagem é opcional e quando utilizada permite que o broker autentique a conexao com os parâmetros enviados. O tamanho máximo para o nome do usuário é de 20 caracteres.

PASSW

Esta string especifica a senha utilizada no processo de autenticação na conexão com o broker. Esta mensagem é opcional e quando utilizada permite que o broker autentique a conexao com os parâmetros enviados. Se for especificada uma senha o nome do usuário deve obrigatoriamente exisitir. O tamanho máximo para a senha de autenticação deve ser de 16 caracteres.

T_CACHE

Este parâmetro fornece para o bloco uma cache onde serão inseridos os ID’s dos items a serem publicados ao broker. Um ID representa o valor númerico associado a linha do canal de mapeamento. Cada ID consequentemente mapeia uma variável global da aplicação com um nome de tópico LORA. Esta cache portanto deve ser uma vetor de tipos INT com o tamanho definido pela aplicação. Os items a serem publicados para o broker são inseridos nesta cache através da função COMM_NOTIFY_ITEM. Uma vez inserido um item, o bloco é responsavél por remover este item e publica-lo no broker assim que possível.

CONNECTED

Saída lógica que indica quando ativa que a conexão com o broker foi estabelecida.

SUBSCRIBED

Saída lógica que indica quando ativa que o processo de subscrição dos tópicos a serem recebidos do broker foi concluido. As saida SB_EV, SB_CODE e SB_ID podem ser utilizadas para rastrar condições de erro neste processo.

SB_EV

Saída lógica que gera um pulso (se mantém ativa por em um ciclo de scan da aplicação) para indicar fim do subscrição de um tópico LORA no broker.

SB_ID

Saída que especifica o Id do tópico associado ao último processo de subscrição de tópico no broker. É atualiza com a saída SB_EV.

SB_CODE

Saída que especifica código de retorno do último processo de subscrição de tópico no broker. É atualiza com a saída SB_EV.

PB_EV

Saída lógica que gera um pulso (se mantém ativa por em um ciclo de scan da aplicação) para indicar fim do processo de publicação de um tópico no broker.

PB_ID

Saída que especifica o Id do tópico associado ao último processo de publicação de um tópico no broker. É atualiza com a saída PB_EV.

PB_CODE

Saída que especifica código de retorno do processo de publicação de um tópico no broker. É atualiza com a saída PB_EV.

RT_EV

Saída lógica que gera um pulso (se mantém ativa por em um ciclo de scan da aplicação) para indicar fim do processo de recepção de um tópico do broker.

RT_ID

Saída que especifica o Id do item associado ao último processo de recepção de um tópico do broker. É atualiza com a saída RD_EV.

RT_CODE

Saída que especifica código de retorno do último processo de recepção de um tópico do broker. É atualiza com a saída RD_EV.

RT_CHG

Saída lógica que gera um pulso (se mantém ativa por em um ciclo de scan da aplicação) para indicar que o processo de recepção de um tópico do broker finalizado com sucesso, modificou o valor anterior da variável global associada. Este sinal quando ocorrer é sincronizado com a saída RT_EV.

Ver também

Bloco de função COMM_NOTIFY_ITEM para inserir um tópico a ser enviado pelo gateway para o broker.

Bloco de função LORA_MDB_BRIDGE para criar uma bridge de comunicação para os protocolos LORA e MODBUS.

Bloco de função MDB_GATEWAY para disponibilizar um gateway de comuncação para o protocolo MODBUS.

Exemplo

Declaração de Variáveis

Nome

Classe

Tipo

Dimensão

Valor Inicial

Descrição

START

Local

BOOL

FALSE

Ativa operação do gateway

SCAN

Local

BOOL

Habilita publicação automatica de tópicos

SUBS

Local

BOOL

Habilita subscrição de tópicos

NOTIFY

Local

BOOL

FALSE

Publica um tópico no broker (exemplo)

BROKER_IP

Local

STRING

:15

‘192.168.0.58’

IP do broker

BROKER_PORT

Local

UDINT

1883

Porta do broker

WILL_T

Local

STRING

:80

‘W_TOPIC’

Topico de desconexão

WILL_M

Local

STRING

:140

‘W_MSG’

Mensagem de desconexão

USER

Local

STRING

:20

‘JOAO’

Usuário

PASSW

Local

STRING

:16

‘123’

Senha

T_CACHE

Local

INT

[0..99]

0

Cache para publicação de tópicos

CONNECTED

Local

BOOL

FALSE

Broker conectado

SUBSCRIBED

Local

BOOL

FALSE

Tópicos subscritos

PB_COUNT

Local

INT

0

Contador de topicos publicados

SB_COUNT

Local

INT

0

Contador de topicos subscritos

RT_COUNT

Local

INT

0

Contador de topicos recebidos

LORA_GAT

Local

LORA_GATEWAY

Instancia do gateway

Clique aqui para baixar a tabela de variáveis

Código ST

// Este código, após a ativação da entrada START, publica ciclicamente os
// tópicos definidos no canal de mapeamento 2.
// Ao ser ativada a variavel NOTIFY a variavel de escrita com ID 1 do canal de mapeamento será
// publicada no broker. Todas os tópicos subscritos são automaticamente atualizados nas
// variveis associadas quando recebidos do broker.

// Gateway LORA

GTW_LORA(  // LORA_GATEWAY
  //EN          := ,          // [BOOL] Habilitação do bloco
  START       := START,       // [BOOL] Inicia operação do gateway
  //EN_SUBS     := ,          // [BOOL] Habilita subscricao de topicos
  //EN_SCAN     := ,          // [BOOL] Habilita o polling de dados do equipamento remoto
  DMAP_ID     := 2,           // [USINT] Id do mapeamento de dados associado ao bloco
  COMM_SRC    := HILS.SOCK2_PORT_ID,  // [USINT] Canal de comunicação utilizado para acesso equipamento Modbus  (ex: COM1_PORT_ID)
  FLAGS       := HILS.CLIENT_ID + HILS.CLEAN_SECTION,  // [USINT] Flags de conexão com o broker
  //DEC_SEP     := ,          // [USINT] Separador de casas decimais no processo de conversao dos valores reais para string (default = ponto)
  //KEEP_ALIVE  := ,          // [UINT] Tempo em segundos para o broker validadar a conexão
  BROKER_PORT := BROKER_PORT, // [UINT] Porta de escuta do broker
  BROKER_IP   := BROKER_IP,   // [STRING] Endereço IP do broker a ser acessado (string:15)
  W_TOPIC     := WILL_T,      // [STRING] Nome do tópico associado a mensagem de desconexão (string:80)
  W_MSG       := WILL_M,      // [STRING] Mensagem de desconexão (string:140)
  USER        := USER,        // [STRING] Nome do usuário (string:20)
  PASSW       := PASSW,       // [STRING] Senha de acesso (string:16)
  T_CACHE     := T_CACHE      // [ANY] Cache de tópicos a serem enviados para o broker
  );

CONNECTED := GTW_LORA.CONNECTED;
SUBSCRIBED := GTW_LORA.SUBSCRIBED;

// Mantem um contador de tópicos subscritos no broker
IF GTW_LORA.SB_EV THEN
  SB_COUNT := SB_COUNT + 1;
END_IF;

// Mantem um contador de tópicos publicados no broker
IF GTW_LORA.PB_EV THEN
  PB_COUNT := PB_COUNT + 1;
END_IF;

// Mantem um contador de tópicos recebidos do broker
IF GTW_LORA.RT_EV THEN
  RT_COUNT := RT_COUNT + 1;
END_IF;

// Publica a variavel associada ao ID = 1 no broker
IF NOTIFY THEN
  HILS.COMM_NOTIFY_ITEM(1, T_CACHE);
  NOTIFY := FALSE;
END_IF;