Modbus

Modbus é um Protocolo de comunicação de dados utilizado em sistemas de automação industrial. Criado originalmente no final da década de 1970, mais especificamente em 1979,[1] pela fabricante de equipamentos Modicon. É um dos mais antigos e até hoje mais utilizados[2] protocolos em redes de Controladores lógicos programáveis (PLC) para aquisição de sinais(0 ou 1) de instrumentos e comandar atuadores. A Schneider Electric (atual controladora da Modicon) transferiu os direitos do protocolo para a Modbus Organization (Organização Modbus[3]) em 2004 e a utilização é livre de taxas de licenciamento.[1] Por esta razão, e também por se adequar facilmente a diversos meios físicos, é utilizado em milhares de equipamentos existentes e é uma das soluções de rede mais baratas a serem utilizadas em Automação Industrial.

Características técnicas

[editar | editar código-fonte]

O Modbus é um protocolo de comunicação da camada de aplicação (modelo OSI) e pode utilizar o RS-232, RS-485 ou Ethernet como meios físicos - equivalentes camada de enlace (ou link) e camada física do modelo. O protocolo possui comandos para envio de dados discretos (entradas e saídas digitais) ou numéricos (entradas e saídas analógicas).

Modelo de comunicação

[editar | editar código-fonte]

O protocolo Modbus especifica que o modelo de comunicação é do tipo mestre-escravo (ou servidor-cliente). Assim, um escravo não deve iniciar nenhum tipo de comunicação no meio físico enquanto não tiver sido requisitado pelo mestre. Por exemplo, a estação mestre (geralmente um PLC) envia mensagens solicitando dos escravos que enviem os dados lidos pela instrumentação ou envia sinais a serem escritos nas saídas, para o controle dos atuadores ou nos registradores. A imagem abaixo mostra um exemplo de rede Modbus com um mestre (PLC) e três escravos (módulos de entradas e saídas, ou simplesmente E/S). Em cada ciclo de comunicação, o PLC lê e escreve valores em cada um dos escravos.

Exemplo de uma rede Modbus com quatro dispositivos
Exemplo de uma rede Modbus com quatro dispositivos

Acesso ao meio

[editar | editar código-fonte]

No entanto, ainda é possível haver colisões durante o acesso ao meio compartilhado, e o protocolo não é específico em como solucioná-las. Como ilustração de um problema possível, suponha que, em uma dada aplicação do protocolo Modbus sobre um barramento RS-485, o mestre requisita seus escravos em sequência. Suponha também que o mestre, após um tempo específico, passa a requisitar o escravo seguinte, tendo recebido ou não uma resposta do escravo anterior. Nesse caso, se o primeiro escravo demora mais tempo para responder do que o tempo que o mestre espera, pode acontecer de o primeiro escravo responder bem no período em que o mestre resolveu fazer a requisição ao escravo seguinte, ou no período em que o segundo escravo já tinha iniciado sua resposta – havendo colisão no meio. Não há nada especificado no protocolo para resolver esse tipo de problema. Cabe inteiramente à aplicação – através de hardware ou software - implementar de forma correta o acesso ao meio, os parâmetros de time-out etc.

Basicamente, uma comunicação em Modbus obedece a um frame que contém o endereço do escravo, o comando a ser executado, uma quantidade variável de dados complementares e uma verificação de consistência de dados (CRC).

Exemplo-1: Se o PLC precisa ler as 10 primeiras entradas analógicas (do endereço 0000 ao 0009) no módulo 2. Para isso é preciso utilizar o comando de leitura de múltiplos registros analógicos (comando 3). O frame de comunicação utilizado é mostrado abaixo (os endereços são mostrados em sistema hexadecimal):

endereço comando end. dos registros quant. de registros CRC
02 03 00 00 00 0A 2 caracteres

A resposta do escravo seria um frame semelhante composto das seguintes partes: O endereço do escravo, o número do comando, os dez valores solicitados e um verificador de erros (CRC). Em caso de erros de resposta (por exemplo um dos endereços solicitados não existe) o escravo responde com um código de erro.


A resposta para a pergunta acima seria a seguinte:

Mas antes uma pequena recordação!

Para se entender este frame de resposta, antes precisamos saber corretamente o que é um byte.

Cada palavra tem as seguintes formas, - bit, - nibble, - byte e - word.

Segue abaixo uma tabela representação de cada formato.

Bit Nibble Byte Word
1 = 4 bits = 8 bits = 16 bits

Agora que ja sabemos o que é byte podemos então decifrar o frame da rede modbus.

Exemplo-2: Reposta da pergunta citada no exemplo-1.


RX 02 03 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (xx xx CRC)

O primeiro byte(02) é o nó do escravo; O segundo byte(03) é a função utilizada para leitura, sendo essa um Holding Register; O terceiro byte é a quantidade de endereços que o Slave(escravo) está enviando ao Master, sendo que a cada 2 bytes se forma uma Word que significa uma palavra de 16 bit, por isso este frame tem 14 (hexadecimal) = 20 bytes que é = 10 word ou 10 palavras de 16 bits que tem seu range mínimo de -32768 ate 32767.

Com isso entendemos que o Slave(Escravo) respondeu 10 endereços a ao master e todos com o valor zero.

Comandos do MODBUS

[editar | editar código-fonte]

Os principais comandos do Modbus são mostrados na tabela abaixo:

código do comando descrição
0x01 Lê um número variável1 de saídas digitais (bobinas)
0x02 Lê um número variável1 de entradas digitais
0x03 Lê um número variável1 de registros retentivos (saídas analógicas ou memórias)
0x04 Lê um número variável1 de registros de entrada (entradas analógicas)
0x05 Força uma única bobina (altera o estado de uma saída digital)
0x06 Preset de um único registro (altera o estado de uma saída analógica)
0x07 Lê exceções2 (registros de erro)
0x08 Várias funções de diagnóstico
0x0F Força uma quantidade variável1 de bobinas (saídas digitais)
0x10 Preset de uma quantidade variável1 de registros (saídas analógicas)
1 A quantidade de variáveis a ler é definida no frame de solicitação
2 Oito bits previamente configurados. Não é necessário fornecer parâmetros de endereçamento com este comando pois o escravo vai enviar sempre os oito bits pré configurados.

Para alguns comandos de diagnóstico, tais como reinício de comunicação, reset do módulo ou sincronização de relógio, podem ser utilizados comunicações do tipo broadcast, ou seja, destinada a todos os escravos simultaneamente.

Modbus serial

[editar | editar código-fonte]

Em redes seriais baseadas em RS-485 ou RS-232 o Modbus pode ter dois modos de transmissão: RTU e ASCII.

O termo RTU, do inglês Remote Terminal Unit, refere-se ao modo de transmissão onde endereços e valores são representados em formato binário. Neste modo para cada byte transmitido são codificados dois caracteres. Números inteiros variando entre -32768 e 32767 podem ser representados por 2 bytes. O mesmo número precisaria de quatro caracteres ASCII para ser representado (em hexadecimal). O tamanho da palavra no modo RTU é de 8 bits.

Formato do pacote RTU

[editar | editar código-fonte]
Endereço do Escravo Código da Função Dados CRC
1 byte 1 byte 0 a 252 bytes 2 bytes (CRC-16)

Os dados são dados codificados e transmitidos através de caracteres ASCII - cada byte é transmitido através de dois caracteres. Apesar de gerar mensagens legíveis por pessoas este modo consome mais recursos da rede. Por exemplo, para transmitir o byte 0x5B este deverá ser codificado em dois caracteres ASCII: 0x35 (“5”) e 0x42 (“B”). O tamanho da palavra no modo ASCII é de 7 bits. Somente são permitidos caracteres contidos nos intervalos

  • 0-9
  • A-F

Intervalo entre duas mensagens deve ser de 3,5 caracteres.

Formato do pacote ASCII

[editar | editar código-fonte]
Início Endereço Função Dados LRC Final
":" (ASCII 0x3Ah) 2 caracteres 2 caracteres 0 a 2 x 252 caracteres 2 caracteres CR+LF (ASCII 0x0Dh + 0x0Ah)

Aqui os dados são encapsulados em formato binário em frames TCP para a utilização do meio físico Ethernet (IEEE 802.3). Quando o Modbus/TCP é utilizado, o mecanismo de controle de acesso é o CSMA-CD (Próprio da rede Ethernet) e as estações utilizam o modelo cliente-servidor.

Retrocompatibilidade e Conversores

Suponha que um PLC precisa trocar dados usando o protocolo Modbus-TCP com dispositivos antigos, que não suportam esse protocolo, e estão conectados em um barramento RS-485. Nesse caso, existem no mercado conversores Modbus-TCP<->Modbus Serial RS-232/485. Esses dispositivos diferem de um conversor puramente físico, que somente converteria os sinais elétricos de um protocolo físico para outro. Eles, em vez disso, implementam os protocolos TCP e IP, além de implementar também o protocolo Modbus.

Isso é necessário, pois é preciso haver uma conexão TCP entre o conversor e o PLC, já que essa conexão não pode existir diretamente com os equipamentos antigos. O conversor precisa, portanto, implementar o protocolo TCP e aceitar conexões através de sockets etc. Caso contrário, a comunicação não seria possível.

Além disso, o conversor precisará tirar os dados Modbus – que estão dentro do pacote IP, que por sua vez está dentro do quadro Ethernet – para enviar ao escravo correto no barramento RS-485.

Há também conversores com várias saídas seriais. Nesse caso, é possível separar os escravos em vários barramentos distintos, cada um em uma porta. No primeiro barramento, podem ser colocados os escravos cujos endereços vão de 1 ao 10; no segundo, de 11 a 20, e por aí em diante – isso é só um exemplo.

Nessa configuração, o conversor precisaria ler o pacote Modbus, interpretá-lo ao ponto de saber qual é o endereço do escravo de destino, para então enviá-lo à porta de saída correta.

Versão que possui vários recursos adicionais de roteamento, diagnóstico, endereçamento e consistência de dados. Esta versão ainda é mantida sob domínio da Schneider Electric e só pode ser implantada sob licença deste fabricante.

Referências

  1. a b Modbus Organization, Inc. «Modbus FAQ» (em inglês). Consultado em 30 de agosto de 2012 
  2. ControlDesign.com. «Three Variants Dominate Industrial Ethernet» (em inglês). Consultado em 12 de outubro de 2012 
  3. Modbus Organization, Inc. «Modbus Organization» (em inglês). Consultado em 7 de setembro de 2012 

Ligações externas

[editar | editar código-fonte]

Links em inglês:

Links em português:


Software gratuito para Modbus:



Ícone de esboço Este artigo sobre redes de computadores é um esboço. Você pode ajudar a Wikipédia expandindo-o.