MDB_GATEWAY_EX

Este bloco implementa um gateway de comunicação para o protocolo MODBUS, permitindo obter valores de um ou mais equipamentos remotos e enviar variáveis automaticamente baseado em critérios de tempo ou de alteração de valores.

Utiliza o recurso de mapeamento de dados através dos canais de mapeamento de dados.

Este bloco é uma evolução do bloco de função MDB_GATEWAY, possuindo todas as funcionalidades do bloco anterior e incorporando novos recursos para configuração dinâmica dos parâmetros de acesso aos dados remotos a serem obtidos.

Bloco

               MDB_GATEWAY_EX
         +-------------------------+
 BOOL ---|START              BTR_EV|--- BOOL
         |                         |
USINT ---|DMAP_ID            ETR_EV|--- BOOL
         |                         |
USINT ---|COMM_SRC            RD_WR|--- BOOL
         |                         |
  INT ---|DYN_ID          RD_CHG_EV|--- BOOL
         |                         |
UDINT ---|DYN_ETH_IP          TR_ID|--- INT
         |                         |
 UINT ---|DYN_ETH_PORT      TR_CODE|--- INT
         |                         |
 TIME ---|POLL_TME        TR_MDB_ID|--- INT
         |                         |
 TIME ---|PACK_TME       END_CYC_EV|--- BOOL
         |                         |
         |                POLL_FAIL|--- BOOL
         |                         |
  INT ---|WR_CACHE --------------- |---
         +-------------------------+

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 MODBUS. Em seguida, no canal de mapeamento. criado, definir os itens a serem obtidos remotamente e os itens a serem enviados. Note que todos os itens criados devem estar associados a variáveis globais exportadas.

Na lista das variáveis a serem lidas, agrupe as variáveis por endereço de comunicação se utilizado um canal serial ou por IP/Porta se utilizado um canal ethernet. Desta forma, quando o correr um erro de comunicação na leitura de uma determinada variável, as variáveis subsequentes que possuírem o mesmo endereço de comunicação ou IP/Porta serão descartadas no ciclo de aquisição corrente, evitando uma demora no processo gerada pelo timeout de falha em cada transação de leitura.

Importante

Para a utilização desse bloco, os canais de comunicação utilizados para acesso aos equipamentos devem possuir as seguintes configurações:

  • O protocolo de aplicação deve estar configurado como MODBUS-TCP ou MODBUS-RTU em função do equipamento remoto a ser acessado.

  • Se o canal for ethernet o socket associado deve estar configurado como cliente TCP/IP e com auto conexão desativada.

  • Se o canal for serial os parâmetros de baudrate, data bits, stop bits e paridade devem ser compatíveis com as configurações dos equipamentos a serem acessados. Adicionalmente configure o modo de operação do canal serial como MESTRE apenas.

É possível utilizar várias instâncias deste bloco em uma aplicação desde que o canal de comunicação associado não esteja operando simultaneamente em duas ou mais instâncias. Ou seja, se por exemplo a aplicação utilizar duas instâncias do MDB_GATEWAY_EX associadas ao canal COM1, estas instâncias não podem estar habilitadas simultaneamente.

Atenção

Se o bloco utilizar um socket como TCP/IP que estiver configurado como servidor escutando na porta default (502), ao ser ativado poderá bloquear os acessos de equipamentos externos via TCP/IP. Para evitar esta condição faça:

  • Se possível sempre programe o socket para operação como cliente TCP/IP.

  • Se necessária operação como servidor TCP/IP altere o número da porta de comunicação para um valor diferente do programado em todos os outros sockets configurados como servidor TCP/IP no equipamento;

Dica

Assista ao vídeo tutorial utilizando o bloco de função MDB_GATEWAY para o seu respectivo cenário:

Cenário de comunicação

Vídeo de exemplo

Comunicação em rede serial

Tutorial MDB_GATEWAY_EX Serial

Comunicação em rede ethernet

Tutorial MDB_GATEWAY_EX Ethernet

Caso tenha dúvidas sobre como configurar um socket assista ao tutorial: Configurando recursos de conectividade do equipamento.

Parâmetros

Nome

Classe

Tipo

Dim.

V. Ini.

Opções

Descrição

START

Entrada

BOOL

n_retain

Inicia operação do gateway

DMAP_ID

Entrada

USINT

Id do mapeamento de dados associado ao bloco

COMM_SRC

Entrada

USINT

Canal de comunicação utilizado para acesso equipamento Modbus (ex: COM1_PORT_ID)

DYN_ID

Entrada

INT

0

n_retain

Quando BTR_EV estiver ativo permite definir um novo ID de comunicação para aproxima transação

DYN_ETH_IP

Entrada

UDINT

16#00000000

n_retain

Quando BTR_EV estiver ativo permite definir um novo IP para a proxima transação de comunicação

DYN_ETH_PORT

Entrada

UINT

0

n_retain

Quando BTR_EV estiver ativo permite definir uma nova PORTA ethernet para a proxima transação de comunicação

POLL_TME

Entrada

TIME

T#20ms

Tempo a ser aguardado entre um ciclo de comunicação (lista de transações de leitura)

PACK_TME

Entrada

TIME

T#10ms

Tempo a ser aguardado entre cada transação de comunicação

WR_CACHE

Entrada/Saída

INT

[*]

Cache de itens a serem enviados ao equipamento remoto (deve ser fornecido um vetor de tipos INT)

BTR_EV

Saída

BOOL

n_retain

Sinaliza o início de uma nova transação de leitura ou escrita.

ETR_EV

Saída

BOOL

n_retain

Sinaliza o fim da transação corrente.

RD_WR

Saída

BOOL

n_retain

Indica o tipo de transação em execução (0: leitura, 1: escrita)

RD_CHG_EV

Saída

BOOL

n_retain

Indica que a variavel adquirida é diferente do valor anterior presente na base global

TR_ID

Saída

INT

n_retain

Id do item no canal de mapeamento da transação corrente (na ativação de TR_EV)

TR_CODE

Saída

INT

n_retain

Código de retorno da transação corrente (na ativação de ETR_EV)

TR_MDB_ID

Saída

INT

n_retain

Id de comunicação da transação corrente (na ativação de BTR_EV)

END_CYC_EV

Saída

BOOL

n_retain

Quando ativo, indica que terminou um ciclo de aquisição de items nos equipamentos remotos

POLL_FAIL

Saída

BOOL

n_retain

Ativa quando ao final de um ciclo de comunicação ocorrer alguma transação com falha

Entradas

START

Entrada de controle do bloco. Quando inativa o bloco interrompe todas as transações de comunicação. Neste cenário itens não são enviados nem mantidos na WR_CACHE para envio. Quando ativada esta entrada, o bloco inicia o processo de polling de dados no equipamento remoto e aceita itens na WR_CACHE para serem enviados.

MAP_ID

Esta entrada define qual o canal de remapeamento está associado ao bloco. Note que este canal deve ser configurado com o protocolo MODBUS ou o bloco ira gerar um código de erro indicando que o recurso não foi encontrado.

Importante

Este parâmetro só pode ser alterado quando o bloco estiver inativo ou seja, o parâmetro START deve ser igual a FALSE.

Alterações neste parametro com o bloco em operação irão gerar erro no processamento do mesmo.

COMM_SRC

Identificador do canal serial ou do socket ethernet a ser utilizado para acesso aos equipapamentos remotos. Este canal de comunicação utilizado é especificado por um identificador (valor numérico) conforme indicado na tabela a seguir:

Nome [1]

Ident.

Descrição [3]

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

HILS.CBUS_ID

24

Interface CBUS (disponível no P7C)

O bloco MDB_GATEWAY_EX permite que a aplicação altere dinamicamente este parâmetro, possibilitando que uma única instância de comunicação utilize mais de um canal de comunicação para acesso aos equipamentos remotos. Quando necessário utilizar este recurso, o valor de COMM_SRC deve ser alterado apenas quando a saída BTR_EV estiver ativa, indicando que uma nova transação de comunicação ira iniciar. Neste instante, o parâmetro TR_ID irá informar para a aplicação qual a transação que será realizada através do número do item no canal de mapeamento de dados de leitura.

DYN_ID

Esta entrada é utilizada quando:

  • A aplicação necessitar configurar dinamicamente o endereço de comunicação MODBUS do equipamento a ser acessado na próxima transação de comunicação. Se o endereço de comunicação for o definido no canal de mapeamento, apenas mantenha esta entrada com o valor ZERO.

  • Quando o usuário necessitar ignorar a transação corrente.

Quando necessário utilizar este recurso, o valor de DYN_ID deve ser alterado apenas quando a saída BTR_EV estiver ativa, indicando que uma nova transação de comunicação irá iniciar. Neste instante, o parâmetro TR_ID juntamente com o parâmetro RD_WR informarão para a aplicação qual a transação que será realizada através do número do item no canal de mapeamento de dados recebidos (se RD_WR igual a FALSE), ou no canal de mapeamento de dados enviados (se RD_WR igual a TRUE). Altere DYN_ID com o endereço de comunicação a ser utilizado na transação a ser iniciada. Note que, quando este parâmetro for alterado para um valor diferente de ZERO nas transações seguintes (de leitura ou escrita) o valor de DYN_ID continuará a ser utilizado, até que seja retornado para ZERO novamente e, neste caso o endereço de comunicação a ser utilizado será o valor presente no campo Com. Id definido na especificação da transação no canal de mapeamento.

Se o usuário necessitar cancelar a transação corrente basta colcar o valor -1 no campo DYN_ID. Nesta condição, é gerado um evento na saída ETR_EV e a saída TR_CODE retornará o valor HILS.GL_CMD_CANC.

DYN_ETH_PORT

Esta entrada é utilizada quando a aplicação necessitar configurar dinamicamente o valor da porta ethernet para acesso ao equipamento remoto na próxima transação de comunicação. Se a porta ethernet for a definida no canal de mapeamento, apenas mantenha esta entrada com o valor ZERO.

Quando necessário utilizar este recurso, o valor de DYN_ETH_PORT deve ser alterado apenas quando a saída BTR_EV estiver ativa, indicando que uma nova transação de comunicação irá iniciar. Neste instante, o parâmetro TR_ID juntamente com o parâmetro RD_WR informarão para a aplicação qual a transação que será realizada através do número do item no canal de mapeamento de dados recebidos (se RD_WR igual a FALSE), ou no canal de mapeamento de dados enviados (se RD_WR igual a TRUE). Altere DYN_ETH_PORT com o número da porta ethernet a ser utilizada na transação a ser iniciada. Note que, quando este parâmetro for alterado para um valor diferente de ZERO nas transações seguintes (de leitura ou escrita) o valor de DYN_ETH_PORT continuará a ser utilizado, até que seja retornado para ZERO novamente e, neste caso a porta a ser utilizada será o valor presente no campo Acesso TCP/IP definido na especificação da transação no canal de mapeamento.

DYN_ETH_IP

Esta entrada é utilizada quando a aplicação necessitar configurar dinamicamente o valor do IP para acesso ao equipamento remoto na próxima transação de comunicação. Se o IP a ser utilizado for o definida no canal de mapeamento, apenas mantenha esta entrada com o valor ZERO.

Quando necessário utilizar este recurso, o valor de DYN_ETH_IP deve ser alterado apenas quando a saída BTR_EV estiver ativa, indicando que uma nova transação de comunicação irá iniciar. Neste instante, o parâmetro TR_ID juntamente com o parâmetro RD_WR informarão para a aplicação qual a transação que será realizada através do número do item no canal de canal de mapeamento de dados recebidos (se RD_WR igual a FALSE), ou no canal de mapeamento de dados enviados (se RD_WR igual a TRUE). Altere DYN_ETH_IP com o número do IP a ser utilizado na transação a ser iniciada. Note que, quando este parâmetro for alterado para um valor diferente de ZERO nas transações seguintes (de leitura ou escrita) o valor de DYN_ETH_IP continuará a ser utilizado, até que seja retornado para ZERO novamente e, neste caso o IP a ser utilizada será o valor presente no campo Acesso TCP/IP definido na especificação da transação no canal de mapeamento.

POLL_TME

Esta entrada define o tempo a ser aguardado sempre que for concluído um ciclo de comunicação. Este ciclo compreende a leitura de todos os itens configurados no canal de mapeamento de dados recebidos. O valor default para esta entrada é de 20 ms (T#20ms).

PACK_TME

Esta entrada define o tempo a ser aguardado sempre que for concluída uma transação de comunicação ou seja a leitura de um bloco de dados de um equipamento remoto. O valor default para esta entrada é de 10 ms (T#10ms).

Entradas/Saídas

WR_CACHE

Este parâmetro fornece para o bloco uma cache onde serão inseridos os ID’s dos itens a serem enviados para os equipamentos remotos pelo canal MODBUS associado ao bloco. Um ID representa o valor numérico associado a linha do canal de mapeamento. Cada ID consequentemente mapeia uma variável global da aplicação com um endereço MODBUS de um dado equipamento remoto. Esta cache portanto deve ser um vetor de tipos INT com o tamanho definido pela aplicação. Os itens a serem enviados para os equipamentos remotos devem ser inseridos nesta cache através da função COMM_NOTIFY_ITEM. Uma vez inserido um item, o bloco é responsável por remover este item e enviá-lo para o equipamento remoto.

Importante

A declaração de WR_CACHE deverá incluir um tamanho mínimo de 1, mesmo que o bloco não seja utilizado para enviar itens.

Saídas

BTR_EV

Sinaliza o início do uma nova transação de comunicação. Esta saída permanece ativa durante o ciclo imediatamente antes do início de uma nova transação de leitura ou escrita de dados. Através da saída RD_WR pode-se identificar se a transação foi de leitura (RD_WR = FALSE) ou de escrita (RD_WR = TRUE).

É utilizada para permitir ao programa de aplicação:

  • Cancelar a transação corrente;

  • Alterar o canal de comunicação a ser utilizado na próxima transação de comunicação;

  • Alterar o endereço de comunicação a ser utilizado na próxima transação de comunicação;

  • Alterar a porta ethernet a ser utilizado na próxima transação de comunicação, quando o canal associado for um sockt ethernet;

  • Alterar o IP a ser utilizado na próxima transação de comunicação, quando o canal associado for um sockt ethernet.

ETR_EV

Sinaliza o fim da transação de comunicação corrente. Esta saída permanece ativa durante o ciclo imediatamente após o término da transação de leitura ou escrita de dados corrente. Através da saída RD_WR pode-se identificar se a transação foi de leitura (RD_WR = FALSE) ou de escrita (RD_WR = TRUE).

Neste instante a aplicação consegue obter o resultado da transação encerrada, interpretando o valor presente na saída TR_CODE.

RD_WR

Indica o tipo de transação que será iniciada ou foi encerrada (0: leitura, 1: escrita). Este parâmetro deve ser avaliado apenas na ocorrência do evento BTR_EV ou ETR_EV.

TR_ID

Informa o número da transação de comunicação que será iniciada ou foi encerrada. Este parâmetro deve ser avaliado apenas na ocorrência do evento BTR_EV ou ETR_EV.

TR_CODE

Informa o resultado da transação de comunicação que foi encerrada. Este parâmetro deve ser avaliado apenas na ocorrência do evento ETR_EV. O valor ZERO indica que a transação de comunicação foi executada com sucesso e, neste caso o valor da variável global associada a transação foi atualizada. Valores diferentes de ZERO indicam uma condição de erro na transação. Consulte RET_CODE - Códigos de retorno do firmware G5 para mais informações.

TR_MDB_ID

Saída que especifica o ID de comunicação do item associado ao último processo de leitura do equipamento remoto. É valido no momento que a saída ETR_EV for sinalizada.

RD_CHG_EV

Indica que a variavel adquirida na transação de leitura corrente é diferente do valor anterior presente na base de variaveis globais. No instante que este evento for sinalizado, o parâmetro TR_ID fornecerá a informação do item associado na base de dados recebidos do canal de mapeamento. Esta saída, quando ocorrer é sincronizada com o a saída ETR_EV e portando os parâmetros TR_ID e TR_CODE estão disponíveis para serem avaliados pela aplicação.

END_CYC_EV

Saída lógica que gera um pulso (se mantém ativa por um ciclo de scan da aplicação) para indicar o final de um ciclo de aquisição (aquisição de todos os itens de leitura da lista do canal de mapeamento de dados recebido associado ao bloco).

POLL_FAIL

Esta saída quando ativa, indica que, no processo de polling de leitura pelo menos uma das transações ocorreu com falha. Para identificar quais transações ocorreram com falha a aplicação deve tratar os códigos de retorno fornecidos pelo bloco (TR_CODE) nos eventos de ETR_EV. Nesta condição ao parâmetro TR_ID identifica a transação com falha.

Ver também

Bloco de função MDB_DATA_COMM_EX para enviar e receber um pacote MODBUS por um canal de comunicação.

Bloco de função COMM_NOTIFY_ITEM para inserir um item a ser enviado pelo gateway.

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

Bloco de função MDB_MDB_CEL_BRIDGE para criar uma bridge de comunicação MODBUS via rede celular.

Exemplo

Declaração de Variáveis

Nome

Classe

Tipo

Dimensão

Valor Inicial

Descrição

COM_START

Local

BOOL

0

Controla a ativação do bloco

COM_CACHE

Local

INT

[0..9]

Cache para escrita de itens no equipameto remoto

COM_CNT_SUCCESS

Local

DINT

Contador de transações de comunicação com sucesso

COM_CNT_ERROR

Local

DINT

Contador de transações de comunicação com falha

COM_LAST_ERROR

Local

DINT

Código da ultima mensagem de falha

GTW_MDB_COM

Local

HILS.MDB_GATEWAY_EX

Gateway MODBUS

Clique aqui para baixar a tabela de variáveis

Código ST

// - - - - -  - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - -
// GATEWAY MODBUS operando no canal serial COM1 utilzando o canal de mapeamento nro 3
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

//   Cenário de teste
//   +------------+
//   | MESTRE MDB |
//   |            |         RS485
//   |       COM1 |-----------+-----------------+
//   |            |           |                 |
//   |   ID=1     |    +------+------+   +------+------+
//   +------------+    | ESCRAVO MDB |   | ESCRAVO MDB |
//                     |             |   |             |
//                     |   ID=2      |   |    ID=4     |
//                     +-------------+   +-------------+
//
//   A aplicação esta rodando no MESTRE MDB e le as variaveis:
//     DEV_2_SEC  -> MW30050 : valor do segundo do relogio do controlador com ID = 2
//     DEV_2_SN   -> MW30003 : nro de série do controlador com ID = 2
//     DEV_4_SEC  -> MW30050 : valor do segundo do relogio do controlador com ID = 4
//     DEV_4_SN   -> MW30003 : nro de série do controlador com ID = 4
//
//  Esta lista esta configurada no canal de mapeamento nro 3

GTW_MDB_COM(  // MDB_GATEWAY_EX
  START     := COM_START,         // [BOOL] Inicia operação do gateway
  DMAP_ID   := 3,                 // [USINT] Id do mapeamento de dados associado ao bloco
  COMM_SRC  := HILS.COM1_PORT_ID, // [USINT] Canal de comunicação utilizado para acesso equipamento Modbus  (ex: COM1_PORT_ID)
  WR_CACHE  := COM_CACHE          // [INT] Cache de itens a serem enviados ao equipamento (deve ser fornecido um vetor de tipos INT)
  );

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//  Avalia o resultado de cada transação de comunicação e reporta o nro de transações
//  OK e o com Falha e o ultimo código de falha obtido
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

if  GTW_MDB_COM.ETR_EV then // aguarda o termino de uma transação (escrita ou leitura)

  // Fim de transação
  if GTW_MDB_COM.TR_CODE = 0 then
    // sucesso na transação corrente
    COM_CNT_SUCCESS := COM_CNT_SUCCESS + 1;  // Incrementa contador de sucesso para o ID atual
  else
    // falha na transação corrente
    COM_CNT_ERROR   := COM_CNT_ERROR + 1;      // Incrementa contador de falhas para o ID atual
    COM_LAST_ERROR  := GTW_MDB_COM.TR_CODE;    // Registra o código de erro
  end_if;

end_if;