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

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

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:

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 BRT_EV, cancela a transação de leitura corrente.

CHG_RD_ID

IN

BOOL

—

FALSE

—

Com BRT_EV ativo, habilita alterar o ID de comunicação (ou índice de IP/Porta) da próxima transação de leitura.

CHG_WR_ID

IN

BOOL

—

FALSE

—

Com BWT_EV ativo, habilita alterar o ID de comunicação (ou índice de IP/Porta) da próxima transação de escrita.

NEW_RD_ID

IN

UINT

—

0

—

Com BRT_EV ativo, define um ID de comunicação diferente do programado para a próxima leitura.

NEW_WR_ID

IN

UINT

—

0

—

Com BWT_EV ativo, define um ID de comunicação diferente do programado para a próxima escrita; o valor zero cancela a transação.

DMAP_ID

IN

USINT

—

0

—

Id do canal de mapeamento (Mapeamento de dados) associado ao bloco. Só pode ser alterado com o bloco inativo (START = FALSE).

COMM_SRC

IN

USINT

—

0

0 .. 23

Canal de comunicação para acesso ao equipamento Modbus (ex.: HILS.COM1_PORT_ID). Só pode ser alterado com o bloco inativo.

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 (SKIP_RD) ou alterar o endereço.

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

RD_ID

OUT

INT

—

-1

—

Id do item no canal de mapeamento da última aquisição. Atualizado com RD_EV.

RD_CID

OUT

INT

—

-1

—

Id de comunicação da última leitura no equipamento remoto. Atualizado com RD_EV.

RD_CODE

OUT

INT

—

0

Código de retorno

Código de retorno da última recepção remota. Atualizado com RD_EV (ver Códigos de retorno).

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

WR_CID

OUT

INT

—

-1

—

Id de comunicação da última escrita no equipamento remoto. Atualizado com WR_EV.

WR_CODE

OUT

INT

—

0

Código de retorno

Código de retorno da última escrita remota. Atualizado com WR_EV (ver Códigos de retorno).

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 SKIP_RD).

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_ID e COMM_SRC só podem ser alterados com o bloco inativo (START = FALSE); alterá-los em operação gera erro no processamento.

  • W_CACHE deve ser um vetor de INT com tamanho mínimo 1.

Observações

  • Com EN_SCAN inativa, 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_ID definem 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;