Trocar dados com outros equipamentos por Modbus

Quando o controlador precisa ler valores de outro equipamento (um inversor, um medidor, outro CLP) ou enviar valores a ele, você não precisa programar cada mensagem Modbus. Basta montar uma tabela dizendo qual variável do controlador corresponde a qual endereço do equipamento remoto (o canal de mapeamento) e colocar no programa um bloco que percorre essa tabela sozinho. Esta página mostra o caminho com o bloco MDB_GATEWAY_EX da biblioteca HI_STD. O funcionamento completo, incluindo MQTT e LoRa, está em Recurso de mapeamento de dados.

Antes de começar

  • Saiba, para cada dado remoto, o ID Modbus do equipamento, o endereço Modbus do dado e, em rede ethernet, o IP e a porta do equipamento (em geral 502).

  • Decida por qual interface do controlador sai a comunicação: um socket ethernet ou uma porta serial.

  • Configure essa interface no controlador (ver Alterar o endereço IP e a comunicação do equipamento):

    • ethernet: o socket usado como cliente TCP/IP (Modo de Roteamento CLIENT) e com a autoconexão desabilitada;

    • serial: a porta com o protocolo Modbus em modo MESTRE e a mesma velocidade, paridade e bits do equipamento remoto.

1. Criar as variáveis que recebem e enviam os dados

Cada dado trocado precisa de uma variável global com endereço de exportação no controlador.

  1. Em Variáveis Globais, crie uma variável para cada dado (por exemplo Vazao_Medidor : REAL).

  2. Em Endereço, use Sugerir endereço e Aplicar endereço sugerido.

Veja Usar entradas, saídas e variáveis globais.

2. Criar o canal de mapeamento

  1. Na árvore do projeto, clique com o botão direito em Mapeamento de Dados e escolha Adicionar Canal.

  2. Escolha o Tipo de Canal MODBUS, informe o ID do Canal (por exemplo 1) e uma Descrição.

  3. Clique no canal na árvore para abrir a aba dele.

  4. Em rede ethernet, abra a aba Acesso Ethernet e use Adicionar acesso para cada equipamento remoto (IP e porta). O botão Procurar dispositivos na rede preenche o endereço de equipamentos da HI Tecnologia encontrados na rede.

Anote o ID do Canal: o programa vai usá-lo.

3. Mapear os dados

  1. Na aba Dados recebidos, adicione uma linha para cada dado a ler do equipamento remoto: a Variável Exportada que recebe o valor, o ID de Comun. (ID Modbus do remoto), o Endereço remoto e, em ethernet, o Acesso TCP/IP.

  2. Na aba Dados enviados, faça o mesmo para os dados a escrever no remoto e escolha quando enviar: Publ. ao Iniciar, Publ. em Intervalos (com o Tempo) ou, nas bridges, Publ. ao Alterar.

Agrupe na lista os dados de um mesmo equipamento: se ele não responder, o bloco pula os dados seguintes do mesmo endereço naquele ciclo, em vez de esperar o tempo limite de cada um.

O OnStudio confere o canal ao salvar e recusa endereços inválidos ou repetidos, com os detalhes na aba SAÍDA.

4. Colocar o gateway no programa

No programa que vai cuidar da comunicação, declare uma instância de HILS.MDB_GATEWAY_EX e chame-a a cada ciclo:

VAR
    gateway : HILS.MDB_GATEWAY_EX;
    envios : ARRAY[0..9] OF INT;   (* fila dos itens a enviar *)
END_VAR

gateway(START := TRUE,
        DMAP_ID := 1,                     (* ID do Canal criado no passo 2 *)
        COMM_SRC := HILS.SOCK0_PORT_ID,   (* socket 0; HILS.COM1_PORT_ID para a COM1 *)
        POLL_TME := T#500ms,              (* pausa entre uma volta na lista e a próxima *)
        PACK_TME := T#10ms,               (* pausa entre duas transações *)
        WR_CACHE := envios);

Com START em TRUE o bloco percorre a lista de Dados recebidos sem parar, esperando POLL_TME entre uma volta e outra. Os demais parâmetros e as saídas de evento e de erro estão em MDB_GATEWAY_EX.

5. Compilar, implantar e conferir

  1. Compile e implante (ver Compilar e implantar a aplicação).

  2. Abra a depuração e adicione as variáveis mapeadas (ver Monitorar e alterar variáveis com o equipamento rodando). Os valores lidos do equipamento remoto passam a aparecer nelas.

  3. Acompanhe as saídas TR_CODE e POLL_FAIL do bloco para saber se alguma transação falhou.

Se algo der errado

  • Nenhum dado chega: confira se o socket está como CLIENT e se o equipamento remoto responde no IP, porta e ID informados.

  • Outros equipamentos deixaram de acessar o controlador pela porta 502: o socket usado pelo gateway estava como servidor na porta padrão. Use um socket como cliente.

  • Ao excluir uma linha do meio da tabela, o OnStudio avisa que os IDs das linhas seguintes mudam. Se o código usa esses IDs (por exemplo com HILS.COMM_NOTIFY_ITEM), revise-o antes de confirmar.