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:
Tutorial MDB_GATEWAY_EX Serial — comunicação em rede serial.
Tutorial MDB_GATEWAY_EX Ethernet — comunicação em rede ethernet.
Configurando recursos de conectividade do equipamento — como configurar um socket.
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 |
— |
— |
— |
|
Canal serial ou socket ethernet usado para acesso aos equipamentos MODBUS (ex.: |
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 |
DYN_ETH_IP |
IN |
UDINT |
— |
16#00000000 |
no_retain |
— |
IP da próxima transação (0 = usar o do mapeamento). Altere só com |
DYN_ETH_PORT |
IN |
UINT |
— |
0 |
no_retain |
— |
Porta ethernet da próxima transação (0 = usar a do mapeamento). Altere só com |
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 |
RD_WR |
OUT |
BOOL |
— |
— |
no_retain |
— |
Tipo da transação: FALSE = leitura, TRUE = escrita. Válido em |
RD_CHG_EV |
OUT |
BOOL |
— |
— |
no_retain |
— |
A variável adquirida difere do valor anterior na base global. Sincronizado com |
TR_ID |
OUT |
INT |
— |
— |
no_retain |
— |
Id do item no canal de mapeamento da transação corrente. Válido em |
TR_CODE |
OUT |
INT |
— |
— |
no_retain |
— |
Código de retorno da transação encerrada. Válido na ativação de |
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 |
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 ( |
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_IDdeve 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_IDsó pode ser alterado com o bloco inativo (START= FALSE).WR_CACHEdeve 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 quandoBTR_EVestiver ativo; um valor diferente de ZERO permanece em uso nas transações seguintes até ser retornado a ZERO.POLL_FAILindica que ao menos uma transação do ciclo falhou; para identificá-las, trate osTR_CODEdos eventosETR_EV(TR_IDidentifica a transação com falha).O identificador de canal em
COMM_SRC(namespaceHILS) 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;