MDB_GATEWAY

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.

Atenção

Este bloco existe na biblioteca para compatibilidade com aplicações já desenvolvidas. Para novos projetos, utilize o bloco de função MDB_GATEWAY_EX.

Bloco

               MDB_GATEWAY
          +-------------------+
 BOOL ----|START        BRT_EV|---- BOOL
          |                   |
 BOOL ----|EN_SCAN       RD_EV|---- BOOL
          |                   |
 BOOL ----|SKIP_RD      RD_CHG|---- BOOL
          |                   |
 BOOL ----|CHG_RD_ID     RD_ID|---- INT
          |                   |
 BOOL ----|CHG_WR_ID    RD_CID|---- INT
          |                   |
 UINT ----|NEW_RD_ID   RD_CODE|---- INT
          |                   |
 UINT ----|NEW_WR_ID    BWT_EV|---- BOOL
          |                   |
USINT ----|DMAP_ID       WR_EV|---- BOOL
          |                   |
USINT ----|COMM_SRC      WR_ID|---- INT
          |                   |
 TIME ----|IPOLL_TME    WR_CID|---- INT
          |                   |
 TIME ----|IPACK_TME   WR_CODE|---- INT
          |                   |
          |            END_CYC|---- BOOL
          |                   |
  INT ----|W_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 processo 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.

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 com 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 Serial

Comunicação em rede ethernet

Tutorial MDB_GATEWAY 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.

Descrição

START

Entrada

BOOL

FALSE

Inicia operação do gateway

EN_SCAN

Entrada

BOOL

TRUE

Habilita o polling de dados do equipamento remoto

SKIP_RD

Entrada

BOOL

FALSE

Quando habilitada imediatamente após um evento BRT_EV cancela a transação de leitura corrente

CHG_RD_ID

Entrada

BOOL

FALSE

Quando BRT_EV estiver ativo habilita alterar o ID de comunicação da proxima transação de leitura

CHG_WR_ID

Entrada

BOOL

FALSE

Quando BWT_EV estiver ativo habilita alterar o ID de comunicação da proxima transação de leitura

NEW_RD_ID

Entrada

UINT

0

Quando BRT_EV estiver ativo permite definir um ID de comunicação diferente do programado da proxima transação de leitura

NEW_WR_ID

Entrada

UINT

0

Quando BRT_EV estiver ativo permite definir um ID de comunicação diferente do programado da proxima transação de escrita

DMAP_ID

Entrada

USINT

0

Id do mapeamento de dados associado ao bloco

COMM_SRC

Entrada

USINT

0

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

IPOLL_TME

Entrada

TIME

T#20ms

Tempo entre um ciclo de comunicação

IPACK_TME

Entrada

TIME

T#10ms

Tempo entre pacotes de comunicação

W_CACHE

Entrada/Saída

INT

[*]

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

BRT_EV

Saída

BOOL

FALSE

Quando ativo, indica que uma nova transação de leitura será iniciada. Através da entrada SKIP_RD o usuário pode bloquear esta t

RD_EV

Saída

BOOL

FALSE

Indica fim do processo de aquisição de um item no equipamento remoto

RD_CHG

Saída

BOOL

FALSE

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

RD_ID

Saída

INT

-1

Id do item no canal de mapeamento da última aquisição do equipamento remoto

RD_CID

Saída

INT

-1

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

RD_CODE

Saída

INT

0

Código de retorno da ultima recepção remota

BWT_EV

Saída

BOOL

FALSE

Quando ativo, indica que uma nova transação de escrita será iniciada. Neste instante o usuário pode alterar o endereço de comun

WR_EV

Saída

BOOL

FALSE

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

WR_ID

Saída

INT

-1

Id do item no canal de mapeamento da última escrita no equipamento remoto

WR_CID

Saída

INT

-1

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

WR_CODE

Saída

INT

0

Código de retorno da ultima escrita no equipamento remoto

END_CYC

Saída

BOOL

FALSE

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

Entradas

START

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

EN_SCAN

Entrada de habilitação do ciclo de leitura remota. Quando inativa o bloco não executa nenhuma transação de leitura. O itens inseridos na cache para escrita são enviados normalmente bem como o ciclo de escrita de itens por tempo (quando configurado).

SKIP_RD

Esta entrada é normalmente mantida inativa (Default = FALSE). É utilizada quando a aplicação necessitar bloquear transações de leitura de itens específicos. Sempre que uma transação de leitura estiver pronta para ser executada, a saída BRT_EV é ativada para indicar esta condição e a saída RD_ID mantem o ID do item que será solicitado. Se no ciclo seguinte a entrada SKIP_RD for ativada a transação que iria iniciar é cancelada e o bloco passa a tratar o próximo item da tabela de canal de mapeamento associada ao bloco. Nesta condição, é gerado um evento na saída RD_EV com o código RD_CODE igual a HILS.GL_CMD_CANC.

CHG_RD_ID

Esta entrada é normalmente mantida inativa (Default = FALSE). É utilizada quando a aplicação necessitar em uma transação de leitura de dados, alterar o ID de comunicação ou IP/Porta do equipamento definido no canal de mapeamento ou cancelar a proxima transação de leitura. Imediatamente antes do início de uma transação de leitura a saída BRT_EV é ativada por um ciclo. Neste instante, se o canal associado for serial, o endereço de comunicação que será utilizado na próxima transação de leitura estará disponível na saída RD_ID. Se necessário alterar este valor a aplicação deverá ativar a entrada CHG_RD_ID e definir o novo endereço a ser utilizado na entrada NEW_RD_ID. Se o canal associado for ethernet, o índice da lista de IP´s e Porta ethernet do canal de mapeamento que será utilizado na próxima transação de leitura estará disponível na saída RD_ID. Note que este índice inicia em 1 para o primeiro valor da tabela. Se necessário alterar este valor a aplicação deverá ativar a entrada CHG_RD_ID e definir o novo índice a ser utilizado na entrada NEW_RD_ID.

NEW_RD_ID

Esta entrada deve ser utilizada para especificar um endereço de comunicação ou índice da tabela de IP/Porta para a próxima transação de leitura, diferente do endereço configurado no canal de mapeamento. Vide a documentação da entrada CHG_RD_ID para mais informações.

CHG_WR_ID

Esta entrada é normalmente mantida inativa (Default = FALSE). É utilizada quando a aplicação necessitar em uma transação de escrita de dados, alterar o ID de comunicação ou IP/Porta do equipamento definido no canal de mapeamento. Imediatamente antes do início de uma transação de escrita a saída BWT_EV é ativada por um ciclo. Se necessário alterar este valor a aplicação deverá ativar a entrada CHG_WR_ID e definir o novo endereço a ser utilizado na entrada NEW_WR_ID. Se o canal associado for ethernet, o índice da lista de IP´s e Porta ethernet do canal de mapeamento que será utilizado na próxima transação de leitura estará disponível na saída WR_ID. Note que este índice inicia em 1 para o primeiro valor da tabela. Se necessário alterar este valor a aplicação deverá ativar a entrada CHG_WR_ID e definir o novo índice a ser utilizado na entrada NEW_WR_ID. Independentemente se o canal for serial ou ethernet, se o usuário especificar o valor zero com no campo NEW_WR_ID a próxima transação de leitura será cancelada.

NEW_WR_ID

Esta entrada deve ser utilizada para especificar um endereço de comunicação ou índice da tabela de IP/Porta para a próxima transação de escrita, diferente do endereço configurado no canal de mapeamento. Se especificado o valor zero nesta condição a proxima transação de escrita será cancelada. Vide a documentação da entrada CHG_WR_ID para mais informações.

MAP_ID

Esta entrada define qual o canal de remapeamento esta 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 socket ethernet a ser utilizado para acesso ao broker. 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)

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.

IPOLL_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 items configurados no canal de mapeamento de dados associado. O valor default para esta entrada é de 20 ms (T#20ms).

IPACK_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 modbus. O valor default para esta entrada é de 10 ms (T#10ms).

Saídas

BRT_EV

Esta saída permanece ativa durante 1 ciclo imediatamente antes do início de uma nova transação de leitura de dados. É utilizada para permitir ao programa de aplicação cancelar a transação corrente (através da entrada SKIP_RD) ou alterar o endereço de comunicação utilizado (através das entradas CHG_RD_ID e NEW_RD_ID).

BWT_EV

Esta saida permanece ativa durante 1 ciclo imediatamente antes do início de uma nova transação de escrita de dados. É utilizada para permitir ao programa de aplicação alterar o endereço de comunicação utilizado (através da entrada CHG_WR_ID e NEW_WR_ID) ou cancelar a mesma especificando o valor zero para o campo NEW_WR_ID.

RD_EV

Saída lógica que gera um pulso (se mantém ativa por um ciclo de scan da aplicação) para indicar fim do processo de aquisição de um item no equipamento remoto.

RD_ID

Saída que especifica o ID do item no canal de mapeamento associado ao último processo de leitura do equipamento remoto. É atualizada no momento que a saída RD_EV for sinalizada.

RD_CID

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

RD_CODE

Saída que especifica código de retorno do último processo de leitura do equipamento remoto. É atualizada no momento que a saída RD_EV for sinalizada.

RD_CHG

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

WR_EV

Saída lógica que gera um pulso (se mantém ativa por um ciclo de scan da aplicação) para indicar fim do processo de escrita de um item no equipamento remoto.

WR_ID

Saída que especifica o Id do canal de mapeamento do item associado ao último processo de escrita no equipamento remoto. É atualizada no momento que a saída WR_EV for sinalizada.

WR_CID

Saída que especifica o Id de comunicação do item associado ao último processo de escrita no equipamento remoto. É atualizada no momento que a saída WR_EV for sinalizada.

WR_CODE

Saída que especifica código de retorno do último processo de escrita no equipamento remoto. É atualizada no momento que a saída WR_EV for sinalizada.

END_CYC

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 items de leitura da lista do canal de mapeamento associado ao bloco).

Entradas/Saídas

W_CACHE

Este parâmetro fornece para o bloco uma cache onde serão inseridos os ID’s dos items 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 items a serem enviados para os equipamentos remotos são 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 pera o equipamento remoto.

Nota

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

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

Valor Inicial

START

Local

BOOL

FALSE

NOTIFY

Local

BOOL

FALSE

RD_ERR

Local

INT

-1

WR_ERR

Local

INT

-1

RD_COUNT

Local

INT

0

WR_COUNT

Local

INT

0

W_CACHE

Local

INT [0..19]

GTW_MDB

Local

HILS.MDB_GATEWAY

Clique aqui para baixar a tabela de variáveis

Código ST

// Este código, após a ativação da entrada START, adquire ciclicamente as
// variáveis definidas no canal de mapeamento 1.
// Ao ser ativada a variável NOTIFY a variável de escrita com ID 1 do canal de mapeamento será
// enviada para o equipamento remoto.

// Gateway MODBUS

GTW_MDB(  // MDB_GATEWAY
  START     := START,  // [BOOL] Inicia operação do gateway
  EN_SCAN   := SCAN,  // [BOOL] Habilita o polling de dados do equipamento remoto
  //SKIP_RD   := ,  // [BOOL] Quando habilitada imediatamente após um evento BRT_EV cancela a transação  de leitura corrente
  DMAP_ID    := 1,  // [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)
  //IPOLL_TME := ,  // [TIME] Tempo entre um ciclo de comunicação
  //IPACK_TME := ,  // [TIME] Tempo entre pacotes de comunicação
  W_CACHE   := W_CACHE   // [] Cache de items a serem enviados ao equipamento remoto (deve ser fornecido um vetor de tipos INT)
  );

// Mantem um contador de variáveis lidas nos equipamento remotos
IF GTW_MDB.RD_EV THEN
  RD_ERR   := GTW_MDB.RD_CODE;
  RD_COUNT := RD_COUNT + 1;
END_IF;

// Mantem um contador de variáveis escritas nos equipamento remotos
IF GTW_MDB.WR_EV THEN
  WR_ERR   := GTW_MDB.WR_CODE;
  WR_COUNT := WR_COUNT + 1;
END_IF;

// Escreve a variável associada ao ID = 1 no equipamento remoto
IF NOTIFY THEN
  HILS.COMM_NOTIFY_ITEM(1, W_CACHE);
  NOTIFY := FALSE;
END_IF;