Modbus
Origem: Wikipédia, a enciclopédia livre.
Modbus é um protocolo de comunicação de dados utilizado em sistemas de automação industrial. Criado na década de 1970 pela Modicon. É um dos mais antigos protocolos utilizados em redes de Controladores lógicos programáveis (PLC) para aquisição de sinais de instrumentos e comandar actuadores. A Modicon (actualmente parte do grupo Schneider Electric) colocou as especificações e normas que definem o Modbus em domínio público. Por esta razão é utilizado em milhares de equipamentos existentes e é uma das soluções de rede mais baratas a serem utilizadas em automação industrial.
[editar] Características técnicas
O modbus utiliza o RS-232, RS-485 ou Ethernet como meio físico. O mecanismo de controle de acesso é mestre-escravo. 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. O protocolo possui comandos para envio de dados discretos (entradas e saídas digitais) ou numéricos (entradas e saídas analógicas).
A imagem acima 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. Como o sistema de controle de acesso é do tipo mestre-escravo, nenhum dos módulos escravos inicia comunicação a não ser para responder às solicitações do mestre.
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).
Vejamos um exemplo: Se o PLC precisa ler as 10 primeiras entradas analógicas (do endereço 0000 ao 0010) 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.
Os principais comandos do Modbus são mostrados na tabela abaixo:
código do comando | descrição |
01 | Lê um número variável1 de saídas digitais (bobinas) |
02 | Lê um número variável1 de entradas digitais |
03 | Lê um número variável1 de registros retentivos (saídas analógicas ou memórias) |
04 | Lê um número variável1 de registros de entrada (entradas analógicas) |
05 | Força uma única bobina (altera o estado de uma saída digital) |
06 | Preset de um único registro (altera o estado de uma saída analógica) |
07 | Lê exceções2 (registros de erro) |
08 | Várias funções de diagnóstico |
15 | Força uma quantidade variável1 de bobinas (saídas digitais) |
16 | 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.
[editar] Variações
Em redes seriais baseadas em RS-485 ou RS-232 o Modbus pode ter duas variações: RTU e ASCII.
Modbus RTU - Neste modo os dados são transmitidos em formato binário de oito bits, permitindo a compactação dos dados em pequenos pacotes. RTU é a sigla inglesa para Remote Terminal Unit.
Modbus ASCII - Transmite os dados codificados em caracteres ASCII de sete bits. Apesar de gerar mensagens legíveis por pessoas este modo consome mais recursos da rede.
No modo RTU, os endereços e valores podem ser representados em formato binário. 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).
Modbus/TCP - 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.
Modbus Plus - 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.
[editar] Ligações externas
Links em inglês:
- Descritivo do protocolo
- A íntegra da especificação do protocolo
- Site da Modbus-IDA - associação de fabricantes
- Site da Schneider Automation
- como Modbus trabalha
Software gratuito para Modbus:
- Software do teste do programa demostrativo de Modbus Simply Modbus
- Código fonte do protocolo para microcontrolador PIC
- Projetos de código aberto no Freshmeat
- Projetos de código aberto no Sourceforge
- Software para simulação e testes em Modbus