LR_GATEWAY_RAK3172

Implementa um gateway de comunicação para o protocolo LORA (via módulo RAK3172), permitindo subscrever e publicar tópicos LORA em um broker, com publicação automática por critério de tempo ou de alteração de valor. É um bloco de função (mantém estado entre scans; requer instância).

Biblioteca: HI_STD · Namespace: HILS · Tipo: bloco de função

Bloco de função

             LR_GATEWAY_RAK3172
           +---------------------+
  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. Os itens a serem publicados são inseridos na cache T_CACHE pela função COMM_NOTIFY_ITEM; o bloco remove cada item e o publica no broker assim que possível.

Nota

Este bloco foi desenvolvido para operar com o módulo de comunicação LORA-RAK3172.

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 deve ser de no mínimo 500 bytes (1460 max.).

Parâmetros

Nome

Direção

Tipo

Dimensão

Padrão

Faixa / Unidade

Descrição

START

IN

BOOL

—

FALSE

—

Inicia a operação do gateway. Inativa: bloco desconectado do broker (não publica nem mantém cache). Ativa: estabelece conexão, subscreve tópicos e aguarda recepção/critério de publicação.

EN_SCAN

IN

BOOL

—

TRUE

—

Habilita o ciclo de publicações automáticas no broker (por tempo ou por alteração de valor). Se TRUE (default), o processo de publicação é ativado automaticamente após START.

LORA_MODE

IN

USINT

—

0

1 = OTAA · 2 = ABP

Define o modo de operação LORA.

COMM_SRC

IN

USINT

—

0

ID do canal

Identificador do socket ethernet utilizado para acesso ao broker (ver tabela abaixo).

DEC_SEP

IN

USINT

—

46

código ASCII

Separador de casas decimais na conversão de valores reais para string. Default 46 (.); use 44 para vírgula.

DMAP_ID

IN

USINT

—

0

—

Id do canal de mapeamento de dados associado ao bloco. O canal deve estar configurado com o protocolo LORA, senão o bloco gera erro de recurso não encontrado.

T_CACHE

IN_OUT

ANY

[*]

—

—

Cache dos IDs dos itens a serem publicados no broker. Deve ser um vetor de INT dimensionado pela aplicação; cada ID mapeia uma linha do canal de mapeamento (variável global ? tópico LORA).

APP_KEY

IN_OUT

STRING

:*

—

32 caracteres

Application KEY (chave da aplicação associada ao canal LORA).

APP_EUI

IN_OUT

STRING

:*

—

16 caracteres

Application ID (Id da aplicação associada ao canal LORA).

DEV_EUI

IN_OUT

STRING

:*

—

16 caracteres

Device ID (Id do módulo LORA utilizado).

CONNECTED

OUT

BOOL

—

FALSE

—

Indica que a conexão com o broker foi estabelecida.

RT_CODE

OUT

INT

—

0

RET_CODE

Código de retorno da última recepção de tópico do broker (atualizado com RT_EV).

RT_ID

OUT

INT

—

0

—

Id do item da última recepção de tópico do broker (atualizado com RT_EV).

RT_CHG

OUT

BOOL

—

FALSE

—

Pulso (1 scan): a recepção de um tópico concluída com sucesso modificou o valor anterior da variável global associada. Sincronizado com RT_EV.

RT_EV

OUT

BOOL

—

FALSE

—

Pulso (1 scan) indicando o fim do processo de recepção de um tópico do broker.

PB_CODE

OUT

INT

—

0

RET_CODE

Código de retorno da última publicação de tópico no broker (atualizado com PB_EV).

PB_ID

OUT

INT

—

-1

—

Id do tópico da última publicação no broker (atualizado com PB_EV).

PB_EV

OUT

BOOL

—

FALSE

—

Pulso (1 scan) indicando o fim do processo de publicação de um tópico no broker.

O identificador do canal em COMM_SRC segue a numeração:

Identificador

Valor

COM1_PORT_ID .. COM8_PORT_ID

0 .. 7

SOCK0_PORT_ID .. SOCK7_PORT_ID

8 .. 15

ETH2_SOCK0_PORT_ID .. ETH2_SOCK7_PORT_ID

16 .. 23

Códigos de retorno

RT_CODE e PB_CODE reportam o resultado das transações de recepção e publicação de tópicos. Use os identificadores com o namespace HILS (ex.: HILS.CO_SOCK_ERR). Códigos mais comuns:

Código

Identificador

Significado

0

SUCCESS

Transação executada com sucesso.

10

GL_CMD_TMO

Timeout na execução do comando.

23

RE_NOT_FOU

Recurso não encontrado (canal de mapeamento não configurado com LORA).

63

CO_CONEX_FAIL

Falha no processo de conexão com o broker.

64

CO_DEV_UNCONN

Desconexão realizada pelo equipamento remoto.

67

CO_SOCK_ERR

Erro de socket (não foi possível adquirir/usar o socket).

68

CO_TRA_BUF_OVL

Overflow no buffer de transmissão.

Lista completa: RET_CODE - Códigos de retorno do firmware G5.

Pré-condições

  • Socket configurado como cliente TCP-IP (sem conexão automática), protocolo LORA, cache de dados de no mínimo 500 bytes (máx. 1460).

  • Canal de Mapeamento de dados criado e associado ao protocolo LORA em DMAP_ID, com os tópicos a subscrever/publicar definidos e associados a variáveis globais exportadas.

  • T_CACHE deve ser um vetor de INT dimensionado pela aplicação.

Observações

  • RT_EV e PB_EV são pulsos de 1 scan que sinalizam, respectivamente, o fim das recepções e publicações de tópicos; RT_CODE/RT_ID e PB_CODE/PB_ID são atualizados junto com esses pulsos.

  • RT_CHG é sincronizado com RT_EV e indica que a recepção alterou o valor anterior da variável global associada.

  • Com START inativa, o bloco permanece desconectado e não publica nem mantém a cache.

Ver também

COMM_NOTIFY_ITEM, LR_MDB_BDG_RAK3172, MDB_GATEWAY

Exemplo

Clique aqui para baixar a tabela de variáveis

Código ST

VAR
    START     : BOOL := FALSE;                              (* Ativa operação do gateway *)
    NOTIFY    : BOOL := FALSE;                              (* Publica um tópico no broker (exemplo) *)
    DEV_EUI   : STRING := '0023003454665432';              (* Device ID *)
    APP_EUI   : STRING := '34677893AB65EFD0';              (* Application ID *)
    APP_KEY   : STRING := '3445667778899033A4B56657E8F9D0';(* Application KEY *)
    T_CACHE   : ARRAY [0..99] OF INT := 0;                 (* Cache para publicação de tópicos *)
    CONNECTED : BOOL := FALSE;                             (* Broker conectado *)
    PB_COUNT  : INT := 0;                                  (* Contador de topicos publicados *)
    RT_COUNT  : INT := 0;                                  (* Contador de topicos recebidos *)
    GTW_LORA  : HILS.LR_GATEWAY_RAK3172;                   (* Instancia do gateway *)
END_VAR

(* 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 é publicada no broker. Todos os tópicos subscritos são automaticamente
   atualizados nas variaveis associadas quando recebidos do broker. *)

(* Gateway LORA *)
GTW_LORA(
  START    := START,                  (* [BOOL]  Inicia operação do gateway *)
  DMAP_ID  := 2,                       (* [USINT] Id do mapeamento de dados associado ao bloco *)
  COMM_SRC := HILS.SOCK2_PORT_ID,      (* [USINT] Canal de comunicação para acesso ao broker *)
  T_CACHE  := T_CACHE                  (* [ANY]   Cache de tópicos a serem enviados ao broker *)
  );

CONNECTED := GTW_LORA.CONNECTED;

(* 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;