MDB_GATEWAY_EX

Implementa um gateway de comunicação MODBUS que obtém valores de um ou mais equipamentos remotos e envia variáveis automaticamente segundo critérios de tempo ou de alteração de valor, utilizando os canais de mapeamento de dados; requer canais de comunicação configurados como MODBUS-TCP ou MODBUS-RTU. É 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

               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 --------------- |---
         +-------------------------+

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.

Para utilizá-lo, o usuário deve inicialmente, através do recurso Mapeamento de dados, criar um canal de mapeamento e associá-lo ao protocolo MODBUS. Em seguida, no canal criado, definir os itens a serem obtidos remotamente e os itens a serem enviados. Todos os itens criados devem estar associados a variáveis globais exportadas.

Na lista das variáveis a serem lidas, agrupe-as por endereço de comunicação (canal serial) ou por IP/Porta (canal ethernet). Assim, quando ocorrer um erro de comunicação na leitura de uma variável, as variáveis subsequentes com o mesmo endereço ou IP/Porta serão descartadas no ciclo de aquisição corrente, evitando a demora gerada pelo timeout de falha em cada transação.

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 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 TCP/IP 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:

  • 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.

O bloco permite alterar dinamicamente o canal de comunicação (COMM_SRC), o endereço MODBUS (DYN_ID), o IP (DYN_ETH_IP) e a porta ethernet (DYN_ETH_PORT) da próxima transação. Esses parâmetros devem ser alterados apenas quando a saída BTR_EV estiver ativa, indicando o início de uma nova transação; nesse instante TR_ID e RD_WR informam qual transação (item do canal de mapeamento e leitura/escrita) será realizada. Mantenha os parâmetros dinâmicos em ZERO para usar os valores definidos no canal de mapeamento. Para cancelar a transação corrente, atribua -1 a DYN_ID: é gerado um evento em ETR_EV e TR_CODE retorna HILS.GL_CMD_CAN.

Nota

O parâmetro DMAP_ID só pode ser alterado com o bloco inativo (START = FALSE). O canal de mapeamento associado deve estar configurado com o protocolo MODBUS, senão o bloco gera um código de erro indicando que o recurso não foi encontrado.

Dica

Assista aos vídeos tutoriais utilizando o bloco de função MDB_GATEWAY_EX:

Parâmetros

Nome

Direção

Tipo

Dimensão

Padrão

Retain

Faixa / Unidade

Descrição

START

IN

BOOL

—

FALSE

no_retain

—

Inicia a operação do gateway. Inativo, interrompe todas as transações e não aceita itens na cache de escrita.

DMAP_ID

IN

USINT

—

—

—

—

Id do canal de mapeamento de dados (protocolo MODBUS) associado ao bloco. Só alterável com o bloco inativo.

COMM_SRC

IN

USINT

—

—

—

0 .. 23

Canal serial ou socket ethernet usado para acesso aos equipamentos MODBUS (ex.: HILS.COM1_PORT_ID). Alterável dinamicamente.

DYN_ID

IN

INT

—

0

no_retain

—

Endereço MODBUS da próxima transação (0 = usar o do mapeamento; -1 = cancelar a transação corrente). Altere só com BTR_EV ativo.

DYN_ETH_IP

IN

UDINT

—

16#00000000

no_retain

—

IP da próxima transação (0 = usar o do mapeamento). Altere só com BTR_EV ativo.

DYN_ETH_PORT

IN

UINT

—

0

no_retain

—

Porta ethernet da próxima transação (0 = usar a do mapeamento). Altere só com BTR_EV ativo.

POLL_TME

IN

TIME

—

T#20ms

—

ms

Tempo aguardado entre ciclos de comunicação (lista completa de transações de leitura).

PACK_TME

IN

TIME

—

T#10ms

—

ms

Tempo aguardado entre cada transação de comunicação.

WR_CACHE

IN_OUT

INT

[*]

—

—

—

Cache dos IDs de itens a serem enviados ao equipamento remoto. Vetor de INT, tamanho mínimo 1; itens inseridos via COMM_NOTIFY_ITEM.

BTR_EV

OUT

BOOL

—

—

no_retain

—

Sinaliza o início de uma nova transação de leitura ou escrita (ativa por um ciclo).

ETR_EV

OUT

BOOL

—

—

no_retain

—

Sinaliza o fim da transação corrente (ativa por um ciclo); avalie TR_CODE neste instante.

RD_WR

OUT

BOOL

—

—

no_retain

—

Tipo da transação: FALSE = leitura, TRUE = escrita. Válido em BTR_EV ou ETR_EV.

RD_CHG_EV

OUT

BOOL

—

—

no_retain

—

A variável adquirida difere do valor anterior na base global. Sincronizado com ETR_EV.

TR_ID

OUT

INT

—

—

no_retain

—

Id do item no canal de mapeamento da transação corrente. Válido em BTR_EV ou ETR_EV.

TR_CODE

OUT

INT

—

—

no_retain

—

Código de retorno da transação encerrada. Válido na ativação de ETR_EV (ver Códigos de retorno).

TR_MDB_ID

OUT

INT

—

—

no_retain

—

Id de comunicação (endereço) do item da transação corrente. Válido na ativação de ETR_EV.

END_CYC_EV

OUT

BOOL

—

—

no_retain

—

Pulso (um ciclo de scan) que indica o fim de um ciclo de aquisição de todos os itens de leitura.

POLL_FAIL

OUT

BOOL

—

—

no_retain

—

Ativa quando, ao final de um ciclo de comunicação, ocorreu alguma transação com falha.

Códigos de retorno

A saída TR_CODE (avaliada na ativação de ETR_EV) informa o resultado da transação encerrada: 0 = sucesso (variável global atualizada); valor diferente de 0 indica falha. Use os identificadores com o namespace HILS (ex.: HILS.MB_ILLEGAL_DATA_ADDRESS). Códigos mais comuns deste bloco:

Código

Identificador

Significado

0

SUCCESS

Transação executada com sucesso.

10

GL_CMD_TMO

Timeout na execução do comando.

11

GL_CMD_CAN

Transação cancelada pela aplicação (DYN_ID = -1).

23

RE_NOT_FOU

Recurso não encontrado (canal de mapeamento ou item inexistente).

63

CO_CONEX_FAIL

Falha no processo de conexão.

67

CO_SOCK_ERR

Erro de socket.

70

CO_COM_ERR

Erro genérico de comunicação.

79

CO_REC_TMO

Timeout na recepção do frame de resposta.

101

MB_ILLEGAL_FUNCTION

Função MODBUS ilegal (exceção 1 do protocolo).

102

MB_ILLEGAL_DATA_ADDRESS

Endereço do dado inválido (exceção 2 do protocolo).

103

MB_ILLEGAL_DATA_VALUE

Valor do dado inválido (exceção 3 do protocolo).

104

MB_SLAVE_DEVICE_FAILURE

Falha na execução do comando pelo equipamento remoto (exceção 4 do protocolo).

106

MB_SLAVE_DEVICE_BUSY

Equipamento remoto ocupado (exceção 6 do protocolo).

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

Pré-condições

  • O canal de mapeamento indicado em DMAP_ID deve existir e estar associado ao protocolo MODBUS.

  • Os canais de comunicação usados devem estar configurados como MODBUS-TCP ou MODBUS-RTU (sockets ethernet como cliente TCP/IP com auto conexão desativada; canais seriais em modo MESTRE).

  • DMAP_ID só pode ser alterado com o bloco inativo (START = FALSE).

  • WR_CACHE deve ser declarado com tamanho mínimo 1, mesmo que o bloco não envie itens.

  • Um mesmo canal de comunicação não pode estar em uso simultâneo por duas instâncias habilitadas.

Observações

  • Os parâmetros dinâmicos (COMM_SRC, DYN_ID, DYN_ETH_IP, DYN_ETH_PORT) só devem ser alterados quando BTR_EV estiver ativo; um valor diferente de ZERO permanece em uso nas transações seguintes até ser retornado a ZERO.

  • POLL_FAIL indica que ao menos uma transação do ciclo falhou; para identificá-las, trate os TR_CODE dos eventos ETR_EV (TR_ID identifica a transação com falha).

  • O identificador de canal em COMM_SRC (namespace HILS) segue a tabela:

Identificador

Valor

Interface

COM1_PORT_ID .. COM8_PORT_ID

0 .. 7

Canais seriais

SOCK0_PORT_ID .. SOCK7_PORT_ID

8 .. 15

Sockets Ethernet 1

ETH2_SOCK0_PORT_ID .. ETH2_SOCK7_PORT_ID

16 .. 23

Sockets Ethernet 2

Ver também

MDB_DATA_COMM_EX, COMM_NOTIFY_ITEM, MDB_GATEWAY, MQTT_MDB_BRIDGE, MDB_MDB_CEL_BRIDGE

Exemplo

Clique aqui para baixar a tabela de variáveis

Código ST

VAR
    COM_START       : BOOL := 0;           (* Controla a ativação do bloco *)
    COM_CACHE       : ARRAY [0..9] OF INT; (* Cache para escrita de itens no equipamento remoto *)
    COM_CNT_SUCCESS : DINT;                (* Contador de transações de comunicação com sucesso *)
    COM_CNT_ERROR   : DINT;                (* Contador de transações de comunicação com falha *)
    COM_LAST_ERROR  : DINT;                (* Código da última mensagem de falha *)
    GTW_MDB_COM     : HILS.MDB_GATEWAY_EX; (* Gateway MODBUS *)
END_VAR

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// GATEWAY MODBUS operando no canal serial COM1 utilizando 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 está rodando no MESTRE MDB e lê as variáveis:
//     DEV_2_SEC  -> MW30050 : valor do segundo do relógio 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 relógio do controlador com ID = 4
//     DEV_4_SN   -> MW30003 : nro de série do controlador com ID = 4
//
//  Esta lista está 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
  WR_CACHE  := COM_CACHE          // [INT] Cache de itens a serem enviados ao equipamento
  );

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

if GTW_MDB_COM.ETR_EV then // aguarda o término 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
  else
    // falha na transação corrente
    COM_CNT_ERROR   := COM_CNT_ERROR + 1;    // Incrementa contador de falhas
    COM_LAST_ERROR  := GTW_MDB_COM.TR_CODE;  // Registra o código de erro
  end_if;

end_if;