O protocolo Modbus é um protocolo de comunicação desenvolvido pela empresa americana Modicon (atualmente Schneider Electric) em 1979. O seu objetivo é utilizar um par entrançado para conseguir a comunicação entre vários dispositivos. O Modbus tornou-se rapidamente o padrão de facto na indústria de automação, e a Modicon lançou-o ao público sem cobrar quaisquer taxas de patente. Através do protocolo Modbus, a comunicação entre dispositivos de controlo (tais como PLC, conversores de frequência e DCS) de diferentes fabricantes pode ser facilmente conseguida.
Método de comunicação do protocolo Modbus
O protocolo Modbus adopta um método de comunicação de pergunta e resposta, que tem as vantagens da simplicidade, hardware barato, grande versatilidade, fácil utilização e fácil desenvolvimento e implementação. O Modbus RTU tornou-se quase o protocolo de comunicação preferido para os autómatos domésticos e os conversores de frequência.
O protocolo Modbus não requer um módulo de comunicação especializado. A pilha e os mecanismos de protocolo necessários para a comunicação são implementados em software e pertencem ao nível 7 do modelo de referência ISO-OSI. Outra vantagem é que pode comunicar através de qualquer meio de transmissão, incluindo pares entrançados, comunicações sem fios, fibra ótica, Ethernet, modems telefónicos, telemóveis e micro-ondas. Isto facilita o estabelecimento de uma ligação Modbus numa instalação nova ou existente.
Modbus ASCII, Modbus RTU e Modbus TCP
Existem três versões do Modbus atualmente em uso: Modbus ASCII, Modbus RTU e Modbus TCP. O protocolo Modbus ASCII necessita de converter um byte de dados em dois bytes de código ASCII antes de os enviar. Os dados do protocolo Modbus RTU são codificados em binário, e cada byte de dados requer apenas um byte de comunicação.
A comunicação Modbus RTU adopta o modo mestre-escravo e pode transmitir até 255 bytes de dados. Um dispositivo mestre comunica com um ou mais dispositivos escravos. Os dispositivos principais típicos são o PLC, o PC, o DCS (sistema de controlo distribuído) ou a RTU (unidade terminal remota). Os dispositivos escravos Modbus RTU são geralmente dispositivos de campo.
Quando um dispositivo mestre Modbus RTU pretende obter dados de um dispositivo escravo, o dispositivo mestre envia uma mensagem que contém o endereço da estação do dispositivo escravo, os dados necessários e um código de verificação CRC utilizado para detetar erros. Todos os outros dispositivos na rede podem receber esta mensagem, mas apenas o dispositivo secundário cujo endereço é especificado responderá. Os dispositivos escravos numa rede Modbus não podem iniciar a comunicação, apenas podem responder quando o dispositivo mestre fala com eles.
O Modbus TCP pode ser entendido como Modbus na Ethernet. O Modbus TCP utiliza simplesmente a norma TCP/IP para simplesmente empacotar e comprimir os pacotes de informação Modbus. Isto permite que os dispositivos Modbus TCP se liguem e comuniquem através de redes Ethernet e de fibra ótica. Em comparação com a interface RS-485, o Modbus TCP também permite a utilização de mais endereços, pode adotar uma arquitetura multi-mestre e a taxa de transmissão pode atingir o nível GB/s. O número de estações secundárias na rede Modbus TCP é apenas limitado pelas capacidades da camada física da rede. Normalmente, o número de estações secundárias é de cerca de 1024.
O Modbus RTU utiliza um código de verificação de redundância cíclica (CRC) de 16 bits. Através de um procedimento complexo de ORing e shifting dos dados, o CRC é gerado pelo dispositivo mestre e verificado pelo dispositivo recetor. Se os valores CRC calculados por ambas as partes não coincidirem, o dispositivo escravo solicitará a retransmissão da informação. O protocolo Modbus RTU divide-se em protocolo mestre Modbus RTU e protocolo escravo Modbus RTU. Comunicação Modbus é controlada por códigos de função e a estação principal acede diretamente à área de dados da estação secundária.
Método de cálculo do código de verificação CRC Modbus RTU
Apenas 8 bits de dados, o bit de início e o bit de paragem são utilizados no cálculo do CRC. Se houver um bit de paridade, incluindo o bit de paridade, estes não são envolvidos no cálculo CRC.
O método de cálculo do CRC é o seguinte:
- Carregue um registo de 16 bits com um valor de 0XFFFF. Este registo é o registo CRC.
- XOR os primeiros dados binários de 8 bits (ou seja, o primeiro byte do quadro de informações de comunicação) com o registo CRC de 16 bits, e o resultado do XOR é ainda armazenado no registo CRC.
- Deslocar o conteúdo do registo CRC um bit para a direita, preencher o bit mais alto com 0 e detetar se o bit deslocado é 0 ou 1.
- Se o bit deslocado for zero, repita o terceiro passo (deslocar novamente um bit para a direita); se o bit deslocado for 1, o registo CRC é XORED com 0XA001.
- Repita os passos 3 e 4 até que o deslocamento à direita seja efectuado 8 vezes, de modo a que todos os dados de 8 bits sejam processados.
- Repetir os passos 2 e 5 para processar o byte seguinte do quadro de informações de comunicação.
- Depois de todos os bytes do quadro de informações de comunicação serem calculados de acordo com os passos acima, os bytes alto e baixo do registo CRC de 16 bits obtido são trocados.
- O conteúdo final do registo CRC é: Código de verificação CRC.