LR_MDB_BDG_RAK3172

Implementa uma bridge de comunicação entre os protocolos MODBUS e LORA (módulo RAK3172), permitindo subscrever e publicar tópicos em uma conexão LORA e trocá-los com equipamentos MODBUS remotos; os 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

                 LR_MDB_BDG_RAK3172
           +-----------------------------+
  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_END_CYC|---- BOOL
           |                             |
 USINT ----|MDB_COMM_SRC       MDB_CHG_EV|---- BOOL
           |                             |
  TIME ----|MDB_IPOLL_TME       MDB_RD_EV|---- BOOL
           |                             |
  TIME ----|MDB_IPACK_TME      MDB_RD_CHG|---- BOOL
           |                             |
 USINT ----|LORA_MODE           MDB_RD_ID|---- INT
           |                             |
 USINT ----|LORA_MAP_ID        MDB_RD_CID|---- INT
           |                             |
 USINT ----|LORA_COMM_SRC     MDB_RD_CODE|---- INT
           |                             |
 USINT ----|LORA_DEC_SEP        MDB_WR_EV|---- BOOL
           |                             |
           |                    MDB_WR_ID|---- INT
           |                             |
           |                   MDB_WR_CID|---- 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 --------------- |----
           |                             |
   INT ----|MDB_CACHE ------------------ |----
           |                             |
   INT ----|LORA_CACHE ----------------- |----
           +-----------------------------+

Para utilização deste bloco, o usuário deverá inicialmente, através do recurso 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. Todos os dados criados devem estar associados a variáveis globais exportadas.

Quando START está inativa, o bloco permanece desconectado da rede LORA: os tópicos não são publicados nem mantidos em cache. Ao ativar START, o bloco estabelece a conexão, subscreve os tópicos a receber e aguarda tópicos recebidos ou critérios de publicação. Os canais associados a MDB_MAP_ID e LORA_MAP_ID devem estar configurados, respectivamente, com os protocolos MODBUS e LORA; caso contrário o bloco gera um código de erro indicando que o recurso não foi encontrado.

Os itens a serem publicados no servidor LORA ou enviados ao equipamento MODBUS são inseridos, respectivamente, em LORA_CACHE e MDB_CACHE pela função COMM_NOTIFY_ITEM; o bloco é responsável por removê-los da cache e transmiti-los assim que possível.

Importante

Para a utilização deste bloco, o canal de comunicação associado ao LORA (LORA_COMM_SRC) é automaticamente vinculado ao módulo LORA pelo firmware.

Os identificadores de canal de comunicação (MDB_COMM_SRC e LORA_COMM_SRC) são valores numéricos:

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

Parâmetros

Nome

Direção

Tipo

Dimensão

Padrão

Faixa / Unidade

Descrição

START

IN

BOOL

—

FALSE

—

Inicia a operação da bridge; inativa, mantém o bloco desconectado.

MDB_EN_SCAN

IN

BOOL

—

TRUE

—

Habilita o polling de dados do equipamento MODBUS remoto.

MDB_SKIP_RD

IN

BOOL

—

FALSE

—

Quando ativada logo após um evento 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

0 .. 23

Canal de comunicação usado no acesso ao equipamento MODBUS (ex.: COM1_PORT_ID).

MDB_IPOLL_TME

IN

TIME

—

T#20ms

ms

Tempo de espera entre ciclos de comunicação do device MODBUS.

MDB_IPACK_TME

IN

TIME

—

T#10ms

ms

Tempo de espera entre pacotes de comunicação do device MODBUS.

LORA_MODE

IN

USINT

—

0

1 = OTAA · 2 = ABP

Modo de operação do LORA.

LORA_MAP_ID

IN

USINT

—

0

—

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

LORA_COMM_SRC

IN

USINT

—

0

0 .. 23

Canal de comunicação da interface LORA (vinculado automaticamente pelo firmware).

LORA_DEC_SEP

IN

USINT

—

46

código ASCII

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

LORA_DEV_EUI

IN_OUT

STRING

:*

—

16 caracteres

Device EUI do módulo LORA.

LORA_APP_EUI

IN_OUT

STRING

:*

—

16 caracteres

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

LORA_APP_KEY

IN_OUT

STRING

:*

—

32 caracteres

Chave da aplicação associada ao canal LORA.

MDB_CACHE

IN_OUT

INT

[*]

0

—

Cache de tópicos a serem enviados para o equipamento MODBUS.

LORA_CACHE

IN_OUT

INT

[*]

0

—

Cache de tópicos a serem publicados no servidor LORA.

MDB_ITEM_ID

OUT

INT

—

-1

—

Id do item enviado ao equipamento remoto MODBUS 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 quando uma nova transação de leitura MODBUS será iniciada (bloqueável por MDB_SKIP_RD).

MDB_END_CYC

OUT

BOOL

—

FALSE

—

Ativo ao término de um ciclo de aquisição de itens nos equipamentos remotos.

MDB_CHG_EV

OUT

BOOL

—

FALSE

—

Pulso indicando que um valor foi enviado ao canal MODBUS por alteração de valor.

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 no equipamento remoto.

MDB_RD_CID

OUT

INT

—

-1

—

Id de comunicação da última leitura no equipamento remoto.

MDB_RD_CODE

OUT

INT

—

0

código de retorno

Código de retorno da última recepção MODBUS 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_CID

OUT

INT

—

-1

—

Id de comunicação da última escrita no equipamento remoto.

MDB_WR_CODE

OUT

INT

—

0

código 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 indicando 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

código 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 publicação de um item no LORA.

LORA_PB_ID

OUT

INT

—

0

—

Id do item que foi transmitido.

LORA_PB_CODE

OUT

INT

—

0

código de retorno

Código de retorno da última publicação no LORA.

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 = sucesso; ? 0 = falha). Use os identificadores com o namespace HILS (ex.: HILS.MB_SUCCESS). Códigos mais comuns:

Código

Identificador

Significado

0

SUCCESS

Processo executado com sucesso.

23

RE_NOT_FOU

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

63

CO_CONEX_FAIL

Falha no processo de conexão.

70

CO_COM_ERR

Erro genérico de comunicação.

79

CO_REC_TMO

Timeout na recepção de frame.

100

MB_SUCCESS

Comando MODBUS executado com sucesso.

102

MB_ILLEGAL_DATA_ADDRESS

Endereço do dado inválido no comando MODBUS.

104

MB_SLAVE_DEVICE_FAILURE

Falha na execução do comando pelo equipamento remoto.

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

Pré-condições

  • Um canal Mapeamento de dados configurado com o protocolo MODBUS associado a MDB_MAP_ID e outro configurado com o protocolo LORA associado a LORA_MAP_ID.

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

  • LORA_DEV_EUI (16), LORA_APP_EUI (16) e LORA_APP_KEY (32) preenchidos com os identificadores do módulo/aplicação LORA.

Observações

  • MDB_BRT_EV, MDB_END_CYC, MDB_RD_* e MDB_WR_* refletem os eventos do gateway MODBUS interno (ver MDB_GATEWAY).

  • Os eventos de alteração (MDB_CHG_EV, LORA_CHG_EV) são pulsos de um scan, ativados apenas quando o valor recebido difere do valor anterior na base global.

  • LORA_DEC_SEP altera o separador decimal na conversão de reais para string (46 = ponto, 44 = vírgula).

Ver também

COMM_NOTIFY_ITEM, LR_GATEWAY_RAK3172, 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 modulo LORA *)
    APP_EUI       : STRING := '34677893AB65EFD0';               (* Application EUI *)
    APP_KEY       : STRING := '3445667778899033A4B56657E8F9D0'; (* Chave da aplicacao *)
    NEW_FROM_MDB  : INT := 0;                                   (* Contador de dados alterados via MODBUS *)
    NEW_FROM_LORA : INT := 0;                                   (* Contador de dados alterados via LORA *)
    CONNECTED     : BOOL := FALSE;                              (* Rede LORA conectada *)
    MDB_CACHE     : INT := 0;                                   (* Cache para escrita de variaveis MODBUS *)
    LORA_CACHE    : INT := 0;                                   (* Cache para publicacao de topicos *)
    BRIDGE        : HILS.LR_MDB_BDG_RAK3172;                    (* Instancia da 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

(* Apos ativar START, publica ciclicamente no servidor LORA os topicos do canal de
   mapeamento 2 e le ciclicamente os enderecos MODBUS do canal de mapeamento 1. *)
BRIDGE(
  START         := START,
  MDB_MAP_ID    := 1,
  MDB_COMM_SRC  := HILS.COM1_PORT_ID,
  LORA_MAP_ID   := 2,
  LORA_COMM_SRC := HILS.COM3_PORT_ID,
  LORA_DEV_EUI  := DEV_EUI,
  LORA_APP_EUI  := APP_EUI,
  LORA_APP_KEY  := APP_KEY,
  MDB_CACHE     := MDB_CACHE,
  LORA_CACHE    := LORA_CACHE
  );

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;