MDB_GATEWAY
Implementa um gateway de comunicação MODBUS que obtém valores de um ou mais equipamentos remotos e envia variáveis automaticamente com base em critérios de tempo ou de alteração de valor, usando um canal de mapeamento (Mapeamento de dados) associado ao protocolo MODBUS; é um bloco de função (mantém estado entre scans; requer instância).
Biblioteca: HI_STD · Namespace: HILS · Tipo: bloco de função
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 de função
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 ocorrer 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.
Sempre que uma transação de leitura estiver pronta, a saída BRT_EV é ativada
por um ciclo e a saída RD_ID mantém o ID (ou índice de IP/Porta) que será
solicitado; nesse instante a aplicação pode cancelar a transação via SKIP_RD
(gerando um evento RD_EV com RD_CODE = HILS.GL_CMD_CAN) ou alterar o
endereço via CHG_RD_ID/NEW_RD_ID. De forma análoga, BWT_EV antecede
uma transação de escrita, permitindo alterar o endereço via CHG_WR_ID/
NEW_WR_ID ou cancelá-la especificando o valor zero em NEW_WR_ID. As saídas
RD_ID/RD_CID/RD_CODE e WR_ID/WR_CID/WR_CODE são atualizadas
no instante em que RD_EV / WR_EV são sinalizadas.
O canal de comunicação em COMM_SRC é identificado por um valor numérico do
namespace HILS:
Identificador |
Valor |
Meio |
|---|---|---|
|
0 .. 7 |
Canais seriais |
|
8 .. 15 |
Sockets Ethernet 1 |
|
16 .. 23 |
Sockets Ethernet 2 |
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.
Nota
A declaração de W_CACHE deverá incluir um tamanho mínimo de 1, mesmo que
não seja utilizada para enviar itens. Os itens a serem enviados são inseridos
na cache através da função COMM_NOTIFY_ITEM; uma vez
inserido um item, o bloco é responsável por removê-lo e enviá-lo ao
equipamento remoto.
Dica
Assista ao vídeo tutorial utilizando o bloco de função MDB_GATEWAY para o seu respectivo cenário:
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 |
Direção |
Tipo |
Dimensão |
Padrão |
Faixa / Unidade |
Descrição |
|---|---|---|---|---|---|---|
START |
IN |
BOOL |
— |
FALSE |
— |
Inicia a operação do gateway. Quando inativa, interrompe todas as transações; itens não são enviados nem mantidos em cache. |
EN_SCAN |
IN |
BOOL |
— |
TRUE |
— |
Habilita o polling (leitura) de dados do equipamento remoto. As escritas continuam sendo enviadas normalmente. |
SKIP_RD |
IN |
BOOL |
— |
FALSE |
— |
Ativada logo após um evento |
CHG_RD_ID |
IN |
BOOL |
— |
FALSE |
— |
Com |
CHG_WR_ID |
IN |
BOOL |
— |
FALSE |
— |
Com |
NEW_RD_ID |
IN |
UINT |
— |
0 |
— |
Com |
NEW_WR_ID |
IN |
UINT |
— |
0 |
— |
Com |
DMAP_ID |
IN |
USINT |
— |
0 |
— |
Id do canal de mapeamento (Mapeamento de dados) associado ao bloco. Só pode ser alterado com o bloco inativo ( |
COMM_SRC |
IN |
USINT |
— |
0 |
|
Canal de comunicação para acesso ao equipamento Modbus (ex.: |
IPOLL_TME |
IN |
TIME |
— |
T#20ms |
ms |
Tempo aguardado ao concluir um ciclo de comunicação (leitura de todos os itens do canal de mapeamento). |
IPACK_TME |
IN |
TIME |
— |
T#10ms |
ms |
Tempo aguardado ao concluir uma transação de comunicação (leitura de um bloco MODBUS). |
W_CACHE |
IN_OUT |
INT |
[*] |
— |
— |
Cache de itens a serem enviados ao equipamento remoto (vetor de INT, tamanho mínimo 1). Itens inseridos via COMM_NOTIFY_ITEM. |
BRT_EV |
OUT |
BOOL |
— |
FALSE |
— |
Ativa por 1 ciclo imediatamente antes de uma nova transação de leitura; permite cancelar ( |
RD_EV |
OUT |
BOOL |
— |
FALSE |
— |
Pulso (1 ciclo) indicando fim do processo de aquisição de um item no equipamento remoto. |
RD_CHG |
OUT |
BOOL |
— |
FALSE |
— |
Pulso indicando que a aquisição concluída com sucesso modificou o valor anterior da variável global; sincronizado com |
RD_ID |
OUT |
INT |
— |
-1 |
— |
Id do item no canal de mapeamento da última aquisição. Atualizado com |
RD_CID |
OUT |
INT |
— |
-1 |
— |
Id de comunicação da última leitura no equipamento remoto. Atualizado com |
RD_CODE |
OUT |
INT |
— |
0 |
Código de retorno |
Código de retorno da última recepção remota. Atualizado com |
BWT_EV |
OUT |
BOOL |
— |
FALSE |
— |
Ativa por 1 ciclo imediatamente antes de uma nova transação de escrita; permite alterar o endereço ou cancelar a transação. |
WR_EV |
OUT |
BOOL |
— |
FALSE |
— |
Pulso (1 ciclo) indicando fim do processo de escrita de um item no equipamento remoto. |
WR_ID |
OUT |
INT |
— |
-1 |
— |
Id do item no canal de mapeamento da última escrita. Atualizado com |
WR_CID |
OUT |
INT |
— |
-1 |
— |
Id de comunicação da última escrita no equipamento remoto. Atualizado com |
WR_CODE |
OUT |
INT |
— |
0 |
Código de retorno |
Código de retorno da última escrita remota. Atualizado com |
END_CYC |
OUT |
BOOL |
— |
FALSE |
— |
Pulso indicando o final de um ciclo de aquisição (todos os itens de leitura da lista do canal de mapeamento). |
Códigos de retorno
As saídas RD_CODE e WR_CODE retornam o código da última transação remota.
Use os identificadores com o namespace HILS (ex.: HILS.MB_SUCCESS).
Códigos mais comuns deste bloco:
Código |
Identificador |
Significado |
|---|---|---|
0 |
SUCCESS |
Processo executado com sucesso. |
11 |
GL_CMD_CAN |
Transação de leitura cancelada (ex.: via |
23 |
RE_NOT_FOU |
Recurso não encontrado (canal de mapeamento/protocolo MODBUS não localizado). |
63 |
CO_CONEX_FAIL |
Falha no processo de conexão. |
79 |
CO_REC_TMO |
Timeout na recepção do frame de resposta. |
100 |
MB_SUCCESS |
Comando MODBUS executado com sucesso. |
101 |
MB_ILLEGAL_FUNCTION |
Função MODBUS ilegal (código 1 do protocolo MODBUS). |
102 |
MB_ILLEGAL_DATA_ADDRESS |
Endereço do dado inválido (código 2 do protocolo MODBUS). |
103 |
MB_ILLEGAL_DATA_VALUE |
Valor do dado inválido (código 3 do protocolo MODBUS). |
104 |
MB_SLAVE_DEVICE_FAILURE |
Falha na execução do comando pelo equipamento remoto (código 4 do protocolo MODBUS). |
106 |
MB_SLAVE_DEVICE_BUSY |
Equipamento remoto ocupado (código 6 do protocolo MODBUS). |
Lista completa dos códigos de retorno: RET_CODE - Códigos de retorno do firmware G5.
Pré-condições
Um canal de mapeamento (Mapeamento de dados) deve estar criado e associado ao protocolo MODBUS, com os itens de leitura e de escrita definidos e vinculados a variáveis globais exportadas.
Os canais de comunicação devem estar configurados como MODBUS-TCP ou MODBUS-RTU; sockets ethernet como cliente TCP/IP com auto conexão desativada.
DMAP_IDeCOMM_SRCsó podem ser alterados com o bloco inativo (START= FALSE); alterá-los em operação gera erro no processamento.W_CACHEdeve ser um vetor de INT com tamanho mínimo 1.
Observações
Com
EN_SCANinativa, o bloco não executa transações de leitura, mas as escritas por cache e por tempo continuam ocorrendo normalmente.Para canais serial,
NEW_RD_ID/NEW_WR_IDdefinem o endereço de comunicação; para canais ethernet, definem o índice da lista de IP/Porta do canal de mapeamento (índice iniciando em 1).
Ver também
MDB_GATEWAY_EX, MDB_DATA_COMM_EX, COMM_NOTIFY_ITEM, MQTT_MDB_BRIDGE, MDB_MDB_CEL_BRIDGE, Mapeamento de dados
Exemplo
Clique aqui para baixar a tabela de variáveis
Código ST
VAR
START : BOOL := FALSE;
SCAN : BOOL := FALSE;
NOTIFY : BOOL := FALSE;
RD_ERR : INT := -1;
WR_ERR : INT := -1;
RD_COUNT : INT := 0;
WR_COUNT : INT := 0;
W_CACHE : INT [0..19];
GTW_MDB : HILS.MDB_GATEWAY;
END_VAR
// 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, // Inicia operação do gateway
EN_SCAN := SCAN, // Habilita o polling de dados do equipamento remoto
DMAP_ID := 1, // Id do mapeamento de dados associado ao bloco
COMM_SRC := HILS.COM1_PORT_ID, // Canal de comunicação (ex.: COM1_PORT_ID)
W_CACHE := W_CACHE // Cache de itens a serem enviados (vetor de INT)
);
// Mantém um contador de variáveis lidas nos equipamentos remotos
IF GTW_MDB.RD_EV THEN
RD_ERR := GTW_MDB.RD_CODE;
RD_COUNT := RD_COUNT + 1;
END_IF;
// Mantém um contador de variáveis escritas nos equipamentos 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;