LORA_MDB_BRIDGE

Implementa uma bridge de comunicação entre os protocolos MODBUS e LORA, permitindo subscrever e publicar mensagens em uma conexão LORA e trocar dados com equipamentos MODBUS remotos; tópicos podem ser enviados automaticamente 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

                   LORA_MDB_BRIDGE
           +-----------------------------+
  BOOL ----|EN                        ENO|---- BOOL
           |                             |
  BOOL ----|START             MDB_ITEM_ID|---- INT
           |                             |
  BOOL ----|MDB_EN_SCAN     LORA_TOPIC_ID|---- INT
           |                             |
  BOOL ----|MDB_SKIP_RD        MDB_BRT_EV|---- BOOL
           |                             |
 USINT ----|MDB_MAP_ID         MDB_BRT_ID|---- USINT
           |                             |
 USINT ----|MDB_COMM_SRC      MDB_END_CYC|---- BOOL
           |                             |
  TIME ----|MDB_IPOLL_TME      MDB_CHG_EV|---- BOOL
           |                             |
  TIME ----|MDB_IPACK_TME       MDB_RD_EV|---- BOOL
           |                             |
 USINT ----|LORA_MODE          MDB_RD_CHG|---- BOOL
           |                             |
 USINT ----|LORA_MAP_ID         MDB_RD_ID|---- INT
           |                             |
 USINT ----|LORA_COMM_SRC     MDB_RD_CODE|---- INT
           |                             |
 USINT ----|LORA_DEC_SEP        MDB_WR_EV|---- BOOL
           |                             |
           |                    MDB_WR_ID|---- INT
           |                             |
           |                  MDB_WR_CODE|---- INT
           |                             |
           |                    LORA_CONN|---- BOOL
           |                             |
           |                  LORA_CHG_EV|---- BOOL
           |                             |
           |                   LORA_RT_EV|---- BOOL
           |                             |
           |                  LORA_RT_CHG|---- BOOL
           |                             |
           |                   LORA_RT_ID|---- INT
           |                             |
           |                 LORA_RT_CODE|---- INT
           |                             |
           |                   LORA_PB_EV|---- BOOL
           |                             |
           |                   LORA_PB_ID|---- INT
           |                             |
           |                 LORA_PB_CODE|---- INT
           |                             |
STRING ----|LORA_DEV_EUI --------------- |----
           |                             |
STRING ----|LORA_APP_EUI --------------- |----
           |                             |
STRING ----|LORA_APP_KEY --------------- |----
           |                             |
       ----|MDB_CACHE ------------------ |----
           |                             |
       ----|LORA_CACHE ----------------- |----
           +-----------------------------+

Para utilizar este 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 dados a serem obtidos do canal LORA e os dados a serem enviados. Note que todos os dados criados devem estar associados a variáveis globais exportadas.

A entrada EN habilita o processamento do bloco e é usada tipicamente nas linguagens LADDER e FB para encadear blocos. A entrada START controla a operação: enquanto inativa o bloco permanece desconectado do broker; quando ativada, o bloco estabelece conexão e passa a subscrever e publicar tópicos. As caches MDB_CACHE e LORA_CACHE recebem, via função COMM_NOTIFY_ITEM, os IDs dos itens a serem enviados ao equipamento MODBUS e ao broker LORA, respectivamente; cada ID corresponde a uma linha do canal de mapeamento (uma variável global associada a um endereço/tópico). Ambas devem ser vetores de INT com o tamanho definido pela aplicação.

Atenção

Quando o bloco estiver ativado (pela entrada START), se a entrada EN for desativada durante o processo, o comportamento do bloco é indefinido. Portanto, EN só deve ser desativada se não existir nenhum processo pendente no bloco.

Parâmetros

Nome

Direção

Tipo

Dimensão

Padrão

Faixa / Unidade

Descrição

EN

IN

BOOL

—

TRUE

—

Habilitação do bloco. Quando inativa, o bloco não é processado.

START

IN

BOOL

—

FALSE

—

Inicia a operação da bridge (conexão com o broker LORA).

MDB_EN_SCAN

IN

BOOL

—

TRUE

—

Habilita o polling de dados do equipamento remoto MODBUS.

MDB_SKIP_RD

IN

BOOL

—

FALSE

—

Ativada imediatamente após MDB_BRT_EV, cancela a transação de leitura corrente.

MDB_MAP_ID

IN

USINT

—

0

—

Id do canal de mapeamento de dados associado ao protocolo MODBUS.

MDB_COMM_SRC

IN

USINT

—

0

—

Canal de comunicação para acesso ao equipamento MODBUS (ver tabela de canais).

MDB_IPOLL_TME

IN

TIME

—

T#20ms

ms

Tempo de espera entre ciclos de comunicação MODBUS (leitura de todos os itens do canal).

MDB_IPACK_TME

IN

TIME

—

T#10ms

ms

Tempo de espera entre pacotes (leitura de um bloco MODBUS).

LORA_MODE

IN

USINT

—

0

1 = OTAA · 2 = ABP

Modo de operação do canal LORA.

LORA_MAP_ID

IN

USINT

—

0

—

Id do canal de mapeamento de dados associado ao protocolo LORA.

LORA_COMM_SRC

IN

USINT

—

0

—

Canal de comunicação para acesso à interface LORA (ver tabela de canais).

LORA_DEC_SEP

IN

USINT

—

46

código ASCII

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

LORA_DEV_EUI

IN_OUT

STRING

:16

—

—

Device EUI do módulo LORA.

LORA_APP_EUI

IN_OUT

STRING

:32

—

—

Application EUI da aplicação associada ao canal LORA.

LORA_APP_KEY

IN_OUT

STRING

:32

—

—

Chave da aplicação associada ao canal LORA.

MDB_CACHE

IN_OUT

ANY

—

—

vetor de INT

Cache dos IDs de itens a serem enviados ao equipamento MODBUS.

LORA_CACHE

IN_OUT

ANY

—

—

vetor de INT

Cache dos IDs de tópicos a serem publicados no broker LORA.

ENO

OUT

BOOL

—

FALSE

—

Saída de habilitação (encadeamento em LADDER/FB).

MDB_ITEM_ID

OUT

INT

—

-1

—

Id do item enviado ao equipamento remoto por alteração.

LORA_TOPIC_ID

OUT

INT

—

-1

—

Id do tópico publicado no LORA por alteração.

MDB_BRT_EV

OUT

BOOL

—

FALSE

—

Ativo indica que uma nova transação de leitura será iniciada (bloqueável por MDB_SKIP_RD).

MDB_BRT_ID

OUT

USINT

—

0

—

Endereço de comunicação do equipamento remoto quando MDB_BRT_EV está ativo.

MDB_END_CYC

OUT

BOOL

—

FALSE

—

Ativo indica o fim de um ciclo de aquisição de itens nos equipamentos remotos.

MDB_CHG_EV

OUT

BOOL

—

FALSE

—

Pulso que indica que um valor recebido foi enviado ao canal MODBUS por alteração.

MDB_RD_EV

OUT

BOOL

—

FALSE

—

Indica o fim da aquisição de um item no equipamento remoto.

MDB_RD_CHG

OUT

BOOL

—

FALSE

—

Indica que a variável adquirida difere do valor anterior na base global.

MDB_RD_ID

OUT

INT

—

-1

—

Id do item da última aquisição do equipamento remoto.

MDB_RD_CODE

OUT

INT

—

0

ver Códigos de retorno

Código de retorno da última recepção remota.

MDB_WR_EV

OUT

BOOL

—

FALSE

—

Indica o fim da escrita de um item no equipamento remoto.

MDB_WR_ID

OUT

INT

—

-1

—

Id do item da última escrita no equipamento remoto.

MDB_WR_CODE

OUT

INT

—

0

ver Códigos de retorno

Código de retorno da última escrita no equipamento remoto.

LORA_CONN

OUT

BOOL

—

FALSE

—

Indica que o equipamento está conectado à rede LORA.

LORA_CHG_EV

OUT

BOOL

—

FALSE

—

Pulso que indica que um item foi publicado no LORA por alteração de valor.

LORA_RT_EV

OUT

BOOL

—

FALSE

—

Indica o fim da recepção de um tópico do LORA.

LORA_RT_CHG

OUT

BOOL

—

FALSE

—

Indica que o tópico recebido difere do valor anterior na base global.

LORA_RT_ID

OUT

INT

—

0

—

Porta associada ao pacote recebido pelo LORA.

LORA_RT_CODE

OUT

INT

—

0

ver Códigos de retorno

Código de retorno da última recepção de tópico do LORA.

LORA_PB_EV

OUT

BOOL

—

FALSE

—

Indica o fim da escrita de um item no LORA.

LORA_PB_ID

OUT

INT

—

0

—

Id do item que foi transmitido ao LORA.

LORA_PB_CODE

OUT

INT

—

0

ver Códigos de retorno

Código de retorno da última escrita no LORA.

Os canais de comunicação (MDB_COMM_SRC e LORA_COMM_SRC) são identificados por valor numérico:

Identificador

Valor

HILS.COM1_PORT_ID .. HILS.COM8_PORT_ID

0 .. 7

HILS.SOCK0_PORT_ID .. HILS.SOCK7_PORT_ID

8 .. 15

HILS.ETH2_SOCK0_PORT_ID .. HILS.ETH2_SOCK7_PORT_ID

16 .. 23

Códigos de retorno

As saídas MDB_RD_CODE, MDB_WR_CODE, LORA_RT_CODE e LORA_PB_CODE carregam o código de retorno da última transação correspondente (0 = SUCCESS; valores diferentes de zero indicam falha ou condição operacional). A lista completa de identificadores e significados está em RET_CODE - Códigos de retorno do firmware G5.

Pré-condições

  • Um canal de mapeamento (Mapeamento de dados) configurado com o protocolo LORA em LORA_MAP_ID e outro com o protocolo MODBUS em MDB_MAP_ID; caso contrário o bloco gera código de erro de recurso não encontrado.

  • Todos os dados mapeados devem estar associados a variáveis globais exportadas.

  • MDB_CACHE e LORA_CACHE devem ser vetores de INT dimensionados pela aplicação.

Observações

  • Os itens são inseridos nas caches pela função COMM_NOTIFY_ITEM; o bloco remove cada item e o publica/envia assim que possível.

  • As saídas *_CHG_EV geram um pulso (ativo por um ciclo de scan) quando o valor recebido difere do valor anterior presente na base global.

  • Para gerar valores decimais separados por vírgula, informe 44 (código ASCII) em LORA_DEC_SEP.

Ver também

COMM_NOTIFY_ITEM, LORA_GATEWAY, MDB_GATEWAY

Exemplo

Clique aqui para baixar a tabela de variáveis

Código ST

VAR
    START         : BOOL := FALSE;                              (* Flag para habilitar a bridge *)
    DEV_EUI       : STRING := '0023003454665432';               (* Device EUI do módulo LORA *)
    APP_EUI       : STRING := '34677893AB65EFD0';               (* Application EUI *)
    APP_KEY       : STRING := '3445667778899033A4B56657E8F9D0'; (* Chave da aplicação *)
    NEW_FROM_MDB  : INT := 0;                                   (* Dado alterado pelo equipamento MODBUS *)
    NEW_FROM_LORA : INT := 0;                                   (* Dado alterado pelo servidor LORA *)
    CONNECTED     : BOOL := FALSE;                              (* Rede LORA conectada *)
    MDB_CACHE     : INT := 0;                                   (* Cache para escrita de variaveis MODBUS *)
    LORA_CACHE    : INT := 0;                                   (* Cache para publicação de tópicos LORA *)
    BRIDGE        : HILS.LORA_MDB_BRIDGE;                       (* Bridge LORA-MODBUS *)
END_VAR
VAR_EXTERNAL
    GV_ALARME     : BOOL := FALSE;                              (* Alarme de temperatura alta *)
    GV_SETPOINT   : REAL := 20.00;                              (* Setpoint para alarme *)
    GV_TEMP       : REAL := 25.00;                              (* Temperatura do processo *)
END_VAR

(* Após a ativação de START, publica ciclicamente no servidor LORA os tópicos definidos
   no canal de mapeamento 2 e lê ciclicamente os endereços MODBUS definidos no canal 1. *)

BRIDGE(  (* LORA_MDB_BRIDGE *)
  START         := START,                (* Inicia operação do gateway *)
  MDB_MAP_ID    := 1,                    (* Id do mapeamento associado ao protocolo MODBUS *)
  MDB_COMM_SRC  := HILS.COM1_PORT_ID,    (* Canal de comunicação MODBUS *)
  LORA_MAP_ID   := 2,                    (* Id do mapeamento associado ao protocolo LORA *)
  LORA_COMM_SRC := HILS.COM3_PORT_ID,    (* Canal de comunicação LORA *)
  LORA_DEV_EUI  := DEV_EUI,
  LORA_APP_EUI  := APP_EUI,
  LORA_APP_KEY  := APP_KEY,
  MDB_CACHE     := MDB_CACHE,            (* Cache de itens enviados ao equipamento MODBUS *)
  LORA_CACHE    := LORA_CACHE            (* Cache de tópicos publicados no broker LORA *)
  );

CONNECTED := BRIDGE.LORA_CONN;

IF BRIDGE.MDB_CHG_EV THEN
  NEW_FROM_MDB := NEW_FROM_MDB + 1;
END_IF;

IF BRIDGE.LORA_CHG_EV THEN
  NEW_FROM_LORA := NEW_FROM_LORA + 1;
END_IF;