Protocolo Modbus: Fundamentos e Aplicações

protocolo modbus
Este post faz parte da série Protocolo Modbus. Leia também os outros posts da série:

O protocolo Modbus é uma estrutura de mensagem aberta desenvolvida pela Modicon na década de 70, utilizada para comunicação entre  dispositivos mestre-escravo / cliente-servidor. A Modicon foi posteriormente adquirida pela Schneider e os direitos sobre o protocolo foram liberados pela Organização Modbus. Muitos equipamentos industriais utilizam o Modbus como protocolo de comunicação, e graças às suas características, este protocolo também tem sido utilizado em uma vasta gama de aplicações como:

 

  • Instrumentos e equipamentos de laboratório;
  • Automação residencial;
  • Automação de navios.

 

 

Sobre o Protocolo Modbus

 

O Modbus é um dos protocolos mais utilizados em automação industrial, graças à sua simplicidade e facilidade de implementação, podendo ser utilizado em diversos padrões de meio físico, como:

 

  • RS-232;
  • RS-485;
  • Ethernet TCP/IP (MODBUS TCP).

 

A velocidade de comunicação varia em cada um desses padrões, bem como o comprimento máximo da rede e o número máximo de dispositivos conectados.

 

O padrão RS-232 (Recommendad Standart-232) ou EIA-232 (Electronic Industries Alliance-232) é utilizado apenas em comunicações do tipo ponto a ponto, ou seja, só admite dois dispositivos na rede, que no caso do protocolo Modbus representa o mestre e 1 escravo. A velocidade máxima desse padrão está em torno de 115Kbps, mas em alguns casos podem ser encontradas taxas um pouco maiores, a distância máxima entre os dispositivos da rede está em torno de 30m.

 

O padrão RS-485 (Recommendad Standart-485) ou EIA-485 (Electronic Industries Alliance-485) é muito utilizado na indústria e sem dúvida é um dos padrões mais utilizados pelo protocolo Modbus. Esse padrão permite trabalhar com taxas de comunicação que podem chegar a 12Mbps e em alguns casos até 50Mbps, vale lembrar que quanto maior o comprimento da rede menor será a velocidade de comunicação, a distância máxima da rede está em torno de 1200m, e o número máximo de dispositivos no barramento da rede é de 32.

 

RS485 protocolo modbus
Figura 1 - RS485 para protocolo Modbus

 
O padrão Ethernet no protocolo Modbus possui algumas variações, podendo chegar a 100Mbps ou até 10Gbps. A distância máxima pode variar de 100m até próximo de 200m dependendo do tipo de cabo utilizado e das condições de instalação do mesmo. 

protocolo modbus
Figura 2 - Uso do padrão Ethernet no Protocolo Modbus

 

Em alguns casos é possível utilizar redes em fibra ótica, fato que permite alcançar distâncias maiores e melhores taxas de comunicação, bem como utilizar comunicação wireless.

 

Em uma próxima oportunidade irei abordar o assunto de padrões físicos com mais detalhes. É importante não confundir protocolo de comunicação com padrões físicos. Alguns protocolos possuem seu padrão físico definido como é o caso da rede ASI e da rede CAN, sendo que nesses casos o padrão físico é definido junto ao protocolo e não é possível alterá-lo. 

 

Na figura abaixo vemos um exemplo de rede com o protocolo Modbus, com  um gateway fazendo a conexão entre os dois tipos de Modbus, o serial em RS-485 e o TCP/IP em ethernet. No mercado ainda existe a opção do gateway Modbus wireless. O mestre da rede, que nesse caso é um CLP (Controlador Lógico Programável) envia e recebe dados dos escravos, que são posteriormente um inversor de frequência, uma IHM (Interface Homem Máquina), um controlador de temperatura e uma interface de I/O remota Modbus.

 

protocolo modbus
Figura 3 - Exemplo de rede com o protocolo Modbus

 

 

A estação mestre inicia a comunicação solicitando que os escravos enviem seus dados. Os escravos, por sua vez, recebem a requisição do mestre e retornam os dados solicitados. Os dados transmitidos podem ser discretos ou numéricos, ou seja, é possível enviar valores numéricos como temperatura e pressão ou enviar um bit para ligar e desligar um motor. Na figura a seguir podemos observar como é constituído o quadro de mensagens no protocolo Modbus.

 

protocolo modbus
Figura 4 - Quadro de mensagens para Protocolo Modbus

 

Ao utilizar  o meio físico Ethernet o protocolo MODBUS opera com  o mecanismo de controle de acesso CSMA-CD, que é próprio da rede Ethernet, com mensagens no modelo cliente-servidor.

 

 

Modos de transmissão

 

Na especificação do protocolo estão definidos dois modos de transmissão:

 

  • ASCII;
  • RTU.

 

Os modos definem a forma como são transmitidos os bytes da mensagem, e como a informação da mensagem será empacotada na mensagem e descompactada. Não é possível utilizar os dois modos de transmissão na mesma rede. O modo de transmissão pode ser selecionado com outros parâmetros da porta de comunicação serial, mas existem equipamentos que não permitem essa seleção, pois possuem modo de transmissão fixo, como por exemplo alguns CLP's e inversores de frequência que utilizam o modo RTU por padrão.

 

 

Endereços

 

Ao todo o protocolo Modbus possui 256 endereços onde:

 

  • 0 - (Zero) é o endereço de Broadcast, quando o mestre envia uma mensagem para o endereço zero, todos os escravos recebem a mensagem;
  • 1 até 247 -Endereços disponíveis para os escravos;
  • 248 até 255 Endereços reservados.

 

 

O mestre não possui endereço, somente os escravos devem possuir endereço definido.

 

 

Código da Função

 

É onde o mestre especifica o tipo de serviço ou função solicitada ao escravo (leitura, escrita, etc). No protocolo Modbus, cada função é utilizada para acessar um tipo específico de dado.

 

Tabela1: funções no Protocolo Modbus 

Código da função

Descrição

1

  Leitura de bloco de bits do tipo coil(saída discreta).

2

  Leitura de bloco de bits do tipo entradas discretas.

3

  Leitura de bloco de registradores do tipo holding.

4

  Leitura de bloco de registradores do tipo input.

5

  Escrita em um único bit do tipo coil(saída discreta).

6

  Escrita em um único registrador do tipo holding.

7

  Ler o conteúdo de 8 estados de exceção.

8

  Prover uma série de testes para verificação da comunicação e erros       internos.

11

  Obter o contador de eventos.

12

  Obter um relatório de eventos.

15

  Escrita em bloco de bits do tipo coil(saída discreta).

16

  Escrita em bloco de registradores do tipo holding.

17

  Ler algumas informações do dispositivo.

20

  Ler informações de um arquivo.

21

  Escrever informações em um arquivo.

22

  Modificar o conteúdo de registradores de espera através de operações   lógicas.

23

  Combina ler e escrever em registradores numa única transação.

24

  Ler o conteúdo da fila FIFO de registradores.

43

  Identificação do modelo do dispositivo.

 

 

 

Modo de transmissão ASCII

 

Quando os equipamentos são configurados para se comunicarem em uma rede Modbus usando ASCII (American Standard Code for Information Interchange), cada byte em uma mensagem é enviado como dois caracteres ASCII. Apesar de gerar mensagens legíveis pela tabela ASCII esse modo consome mais recursos da rede. A principal vantagem dessa modalidade é  que permite que os intervalos de tempo sejam cerca de um segundo para correr entre os caracteres sem causar erro. 

 

Os dispositivos monitoram constantemente a rede para o início de uma mensagem. Quando uma mensagem é iniciada pelo mestre, todos  os dispositivos da rede decodificam o campo de endereço para determinar qual escravo deve receber a mensagem. O inicio de uma mensagem é reconhecido pelo caractere (:) "dois pontos".

 

O formato para cada byte em modo ASCII é:

 

  •  Codificação do sistema: Hexadecimal, caracteres ASCII 0-9, A-F,  um caractere hexadecimal contido em cada caractere ASCII da mensagem;
  • Bits por Byte:

              1 bit de início 

              7 bits de dados, bit menos significativo primeiro 
              1 bit para paridade par / ímpar,  ou sem bit de paridade
              1 bit de parada, se a paridade é usado; 2 bits se sem paridade

 

  • 16 bits Campo Erro check : Longitudinal Redundancy Check (LRC)

 

protocolo modbus

 

Intervalos de até um segundo podem decorrer entre caracteres dentro da mensagem.  Se ocorrer um intervalo maior, o dispositivo receptor assume que ocorreu um erro. O campo de checagem de erros é baseado no método LRC (Longitudinal Redundancy Check).

 

 

Modo de transmissão RTU (Remote Terminal Unit)

 

No modo RTU (Remote Terminal Unit), cada mensagem de 8 bits contém dois caracteres hexadecimais de 4 bits. A principal vantagem desse modo é que sua maior densidade de caracteres permite um melhor processamento de dados do que o modo ASCII para o mesmo baudrate (velocidade de comunicação). Cada mensagem deve ser transmitida em um fluxo contínuo de caracteres.

 

protocolo modbus

 

No modo RTU não existe um caractere específico que indique o início ou o fim de um telegrama. A indicação de quando uma nova mensagem começa ou quando ela termina é feita pela ausência de transmissão de dados na rede, por um tempo mínimo de 3,5 vezes o tempo de transmissão de um byte de dados. Sendo assim, caso um telegrama tenha iniciado após a decorrência desse tempo mínimo, os elementos da rede irão assumir que o primeiro caractere recebido representa o início de um novo telegrama. E da mesma forma, os elementos da rede irão assumir que o telegrama chegou ao fim quando, recebidos os bytes do telegrama, este tempo decorra novamente.

 

Se durante a transmissão de um telegrama o tempo entre os bytes for maior que este tempo mínimo, o telegrama será considerado inválido, pois o controlador irá descartar os bytes já recebidos e montará um novo telegrama com os bytes que estiverem sendo transmitidos. O tempo para transmitir uma palavra do quadro varia de 573us para taxas de comunicação acima de 19200bits/s e 9 ms para a taxa de 1200bits/s.

 

O campo de checagem de erros é baseado no método CRC (Cyclical Redundancy Checking).

 

 

MODBUS TCP

 

Modbus TCP é uma implementação do protocolo Modbus baseado em TCP/IP. Utiliza a pilha TCP/IP para comunicação e adiciona ao quadro Modbus um cabeçalho específico chamado MBAP  (MODBUS Application Protocol). O modelo de mensagem Modbus TCP/IP fica da seguinte forma:  

 

protocolo modbus

 

O cabeçalho MBAP tem tamanho de 7 bytes, e é composto pelos seguintes campos:

 

  • Transaction identifier: usado para identificação da resposta para a transação (2 bytes);
  • Protocol identifier: 0 (zero) indica Modbus (2 bytes);

  • Length: contagem de todos os próximos bytes (2 bytes);

  • Unit identifier: utilizado para identificar o escravo remoto em uma rede Modbus RTU (1 byte).

 

Modbus TCP não acrescenta ao quadro um campo de checagem de erros, entretanto o frame ethernet já utiliza CRC-32 tornando desnecessário outro campo de checagem. O cliente Modbus TCP deve iniciar uma conexão TCP com o servidor a fim de enviar as requisições. A porta TCP 502 é a porta padrão para conexão com servidores Modbus TCP.

 

O vídeo abaixo é muito interessante, e apresenta as características do protocolo Modbus serial e TCP. Apesar de estar em inglês, o vídeo é de fácil compreensão.

 

 

 

 

No próximo artigo veremos exemplos que utilizam protocolo Modbus, além de conhecer simuladores desse protocolo de comunicação.

 

Outros artigos da série

Protocolo Modbus: Exemplos e Simuladores >>
Este post faz da série Protocolo Modbus. Leia também os outros posts da série:
NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Carlos Márcio Freitas
Engenheiro eletricista trabalha a 13 anos com sistemas microprocessados para automação industrial e eletrônica automotiva (com certificação ASE), atualmente trabalha com automação na industria de óleo e gás.
recentes antigos mais votados
Notificar
Emerson Araujo
Visitante
Emerson Araujo

Boa noite,

Gostaria de entender como funciona a integração do ModBus com ferramentas de monitoramento TCP/IP como o Zabbix.

Ronaldo Dei Tos
Visitante
Ronaldo

Ola Carlos, Gostaria de utilizar o Arduino ou Msp430G2553 (texas) para implementar transdutores de pressão que funcionem em uma rede modbus RTU. Ja utilizei a saida serial tanto do arduino e Msp 430G2553 para me comunicar com um PC via Hiperterminal. Apenas enviava mensagem pro PC e lia de volta pela saida serial e Hiperterminall do pc. O que preciso fazer com que meu arduino ou Msp430G2553 opere no padrao RS485 numa rede rede ModBus? O projeto do trandutor de pressao no Arduino ou MSp430G com a serial ativa eu sei fazer, mas como isso poderia virar um produto com… Leia mais »

Charles Roberto
Visitante
Charles Roberto

Boa noite Carlos
A rede de inversores Schneider tem protocolo Modbus rtu que já vem padrão
Tentamos controlar os inversores pela rede mais só apresenta falhas,com 1 inversor só funciona muito bem.
Quando aumento quantidade fica muito ruim .
Até separamos em 2 canais onde
1-inversores da vacon
2-schneider
Mesmo assim cai muito
Testei com modscan na cara de cada inversor e percebi quando aumento a quantidade e distância ferra toda rede.
Sabe de algum software para gerenciar esse tipo de rede .
Ou recomenda trocar o protocolo para Modbus TCP/IP

Adriano Michelon
Visitante
Adriano Michelon

Bom dia!

Preciso muito aprender o protocolo

Gabriel Carneiro
Visitante
Gabriel Carneiro

Boa tarde Carlos, recentemente instalamos uma central de alarme em nossa empresa, e a solução foi aplicada com o o gateway ModBus TCP, temos ferramentas de monitoramento de vários sensores espalhados nos outros ativos sendo utilizadas, que dão suporte ao ModBus TCP como por exemplo o Zabbix e o StruxureWare Data Center Expert(Schneider/APC), a dúvida é: Funciona bem para monitoramento em tempo real dos sensores e estado dos alarmes? Grato

Carlos Márcio Freitas
Visitante
Carlos Márcio Freitas

Provavelmente deve funcionar bem, mas dependendo do modelo do gateway pode ocorrer alguns problemas, pois nem todos são compatíveis, tenho boas experiencias com o lantronix, http://www.lantronix.com, recomendo fazer os testes com vários modelos.
Um abraço.

Emerson Araujo
Visitante
Emerson Araujo

Boa tarde Gabriel,
Preciso monitorar uma maquina na fabrica da empresa onde trabalho, como fizeram a integração do modbus com o zabbix ?

Ramon Oliveira
Visitante
SUNNYTEC - Ramon

Alguém poderia me dar um exemplo de como montar o pacote de dados para Modbus RTU utilizando Python?

Fabio_Souza_Embarcados
Visitante
Fabio_Souza_Embarcados

Olá Ramon, dá um olhada nesse projeto: https://github.com/bashwork/pymodbus

Abraços

Ramon Oliveira
Visitante
SUNNYTEC - Ramon

Qual arquivo em específico?

Paulo Henrik
Visitante
Paulo Henrik

Prezado Carlos, teria alguma desvantagens para o modbus? E quanto seria o custo de tudo?

Carlos Márcio Freitas
Visitante
Carlos Márcio Freitas

Olá Paulo, O custo do protocolo Modbus é o mais baixo entre todos os protocolos de uso industrial, pois é um padrão aberto e com muita documentação disponível, além de não exigir conectores específicos. Quanto a desvantagem o modbus é muito eficiente para todas aplicações, porém para sistemas em tempo real o protocolo profibus pode ter um desempenho mais apropriado.

Victor Evangelista
Visitante
Victor Evangelista

Bom dia, Carlos. Primeiramente, parabéns e obrigado pela disponibilização do material informativo. Estou implementando um painel de demonstração de medidores de energia elétrica e utilizarei o padrão RS 485 a 2 fios para a configuração do medidor mestre com três medidores escravos. Gostaria de saber se há um cabo específico e indispensável para essa comunicação ou se nessa configuração a 2 fios para um painel pequeno posso utilizar cabos normais de 1,5 mm de diâmetro de fio de cobre. Outra dúvida é quanto ao endereçamento dos dispositivos. Utilizarei um dispositivo mestre ligado à um switch da rede Ethernet, juntamente com… Leia mais »

Carlos Márcio Freitas
Visitante
Carlos Márcio Freitas

Olá Victor, diversos fabricantes de cabos possuem cabos apropriados para o padrão RS-485, mas isso não é uma regra, o mais importante é observar a bitola do cabo(recomendo pelos menos 1mm2) e a malha de proteção contra interferência que deve ser aterrada por apenas um lado. Recentemente o Embarcados publicou um artigo sobre Profibus onde o padrão RS485 foi abordado com mais detalhes. https://www.embarcados.com.br/fundamentos-protocolo-profibus/ Quanto ao endereçamento vai depender muito do dispositivo, o endereçamento pode ser feito por hardware com chaves micro-switchs, também pode ser configurado com algum display que o equipamentos tenha ou pode ser feito através de um… Leia mais »

Bruno C. Borba
Visitante
Bruno C. Borba

Como implementar a função de leitura e escrita em uma única transação, em PLC que não dispõe deste recurso?

Carlos Márcio Freitas
Visitante
Carlos Márcio Freitas

Na maioria dos CLP's a função de comunicação realmente deve ser criada utilizando vários blocos de comunicação como no exemplo da figura, e cada ação deve ser feita após a outra, a única opção seria utilizar os registradores do programa do CLP responsáveis pelo envio e recepção dos dados.

Não sei exatamente se a dúvida era essa, mas nos colocamos a disposição.

Um abraço.

Bruno C. Borba
Visitante
Bruno C. Borba

Claro que me ajudou, mas não sei fazer. Exemplificando, tenho um IHM que faz read/write para um endereço modbus de um PLC. Queria saber como implementar este recurso de função para comunicação entre PLC que dispõe apenas de funções Read e Write independentes.

Carlos Márcio Freitas
Visitante
Carlos Márcio Freitas

Ok, vou precisar saber a marca e o modelo da IHM e do CLP. A versão do modbus é serial ou TCP?

Bruno C. Borba
Visitante
Bruno C. Borba

IHM iX-T7F e PLC DUO, ambos da ALTUS. IHM >> PLC, consigo fazer pois é recurso da própria IHM, todavia entre os PLC >> PLC ainda não.

Modbus RTU.

Carlos Márcio Freitas
Visitante
Carlos Márcio Freitas

Em termos de velocidade e confiabilidade na troca de dados por Ethernet os protocolos Profinet e Ethercat se mostraram um pouco mais confiáveis em alguns testes.