Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Overview
O Modbus um protocolo industrial desenvolvido em 1979 para possibilitar a comunicao entre dispositivos de automao. Originalmente implementado como um protocolo de nvel de
aplicao destinado a transferir dados por uma camada serial, o Modbus foi ampliado para incluir implementaes em comunicaes seriais, TCP/IP e UDP (user datagram protocol). Este
documento oferece uma viso detalhada da implementao do protocolo.
Table of Contents
1. O que o protocolo Modbus?
2. Unidade de dados de protocolo
3. Unidade de dados de aplicao
4. Novos cdigos de funo
5. Camadas de rede
6. Modificaes da ADU
Bloco de memria
Tipo de dados
Acesso ao mestre
Acesso ao escravo
Coils
Booleano
Leitura/escrita
Leitura/escrita
Entradas discretas
Booleano
Somente leitura
Leitura/escrita
Registradores holding
Palavra no sinalizada
Leitura/escrita
Leitura/escrita
Registradores de entrada
Palavra no sinalizada
Somente leitura
Leitura/escrita
1/6
www.ni.com
Bloco de dados
Prefixo
Coils
Entradas discretas
Registradores de entrada
Registradores holding
4
Quadro 2. Prefixos das faixas de dados
Coils utilizam o prefixo 0. Isso significa que a referncia 4001 pode se referir ao registrador holding 1 ou ao coil 4001. Por esse motivo, recomendado que todas as implementaes novas
utilizem o endereamento de 6 dgitos com zeros na frente. Essa informao dever ser anotada na documentao. Dessa forma, o registrador holding 1 referenciado como 400.001 e o coil
4001 referenciado como 004.001.
Valores iniciais dos endereos de dados
A diferena entre endereos de memria e nmeros de referncia inclui uma complicao adicional, representada pela indexao selecionada por uma determinada aplicao. Como mencionado
anteriormente, o registrador holding 1 est localizado no endereo 0. Tipicamente, os nmeros de referncia so indexados em 1; nesse caso, o valor inicial de uma faixa ser 1. Dessa forma, a
traduo literal de 400.001 registrador holding 00001, que est no endereo 0. Algumas implementaes escolhem iniciar suas faixas em zero; dessa forma, 400.000 indica registrador holding
no endereo zero. O quadro 3 demonstra esse conceito.
Endereo
Nmero do registrador
400001
400000
400002
400001
400003
400002
Faixas indexadas em 1 so muito usadas e altamente recomendadas. De qualquer forma, o valor inicial de cada faixa sempre dever ser indicado na documentao.
Acesso a bit
Alm de permitir acesso a dados que vo alm das fronteira do registrador, alguns mestres Modbus permitem o uso de referncias a bits individuais dentro de um registrador. Com isso, os
dispositivos podem combinar dados de todos os tipos em uma mesma faixa de memria sem ter de separar dados binrios no coil e faixas de entrada discretas. Normalmente, esse recurso
indicado pelo uso de um ponto decimal e o ndice de bit ou nmero, dependendo da implementao. Ou seja, o primeiro bit do primeiro registrador pode ser 400.001.00 ou 400.001.01.
recomendado que toda documentao especifique o esquema de indexao utilizado.
Strings
Strings podem ser armazenadas facilmente em registradores Modbus. Por simplicidade, algumas implementaes requerem que os comprimentos de string sejam mltiplos de 2 e que qualquer
espao adicional seja preenchido por valores nulos. A ordem dos bytes tambm uma varivel nas interaes das strings. O formato das strings pode ou no incluir um NULL como valor final.
Como exemplo dessa variabilidade, alguns dispositivos podem armazenar dados como mostrado na figura 3.
2/6
www.ni.com
Cdigos de funo
Ao contrrio do modelo de dados, que pode variar significativamente de um dispositivo a outro, os cdigos de funo e seus dados so definidos explicitamente pela norma. Cada funo segue
um padro. Em primeiro lugar, o escravo valida entradas como, por exemplo, cdigo de funo, endereo dos dados e faixa de dados. Em seguida, ele executa a ao requisitada e envia a
resposta apropriada ao cdigo. Se qualquer etapa desse processo falhar, uma exceo ser enviada de volta ao requisitante. O transporte de dados dessas solicitaes a PDU.
A PDU do Modbus
A PDU formada por um cdigo de funo de 1 byte seguido por at 252 bytes de dados de funo.
Como o tamanho do pacote limitado a 254 bytes, os dispositivos so limitados com relao quantidade de dados que pode ser transferida. Os cdigos de funo mais comuns podem
transferir entre 240 e 250 bytes de dados do modelo de dados do escravo, dependendo do cdigo.
3/6
www.ni.com
Os cdigos da classe 0 so considerados em geral o mnimo para um dispositivo Modbus utilizvel, pois do a um mestre a capacidade de ler ou escrever no modelo de dados.
Cdigo
Descrio
16
Cdigos da classe 1
Os cdigos de funo da classe 1 compreendem outros cdigos necessrios para acessar todos os tipos do modelo de dados. Na definio original, essa lista inclua o cdigo de funo 7 (ler
exceo). Entretanto, esse cdigo definido pela especificao atual como cdigo somente serial.
Cdigo
Descrio
Read Coils
Cdigos da classe 2
Os cdigos de funo da classe 2 so funes mais especializadas, implementadas com menor frequncia. Por exemplo, Read/Write Multiple Registers pode ajudar a reduzir a quantidade total
de ciclos de requisio-resposta, mas o comportamento ainda pode ser implementado com cdigos de classe 0.
Cdigo
Descrio
15
20
21
22
23
24
Read FIFO
Quadro 6. Cdigos em conformidade com a classe 2
Excees
Os escravos usam excees para indicar diversas condies problemticas, de requisies mal formadas a entradas incorretas. Entretanto, as excees podem tambm ser geradas como
resposta no nvel da aplicao a uma requisio invlida. Os escravos no respondem a requisies emitidas com uma exceo. Nesses casos, o escravo ignora uma requisio incompleta ou
corrompida e comea a esperar pela chegada de uma nova mensagem.
Excees so relatadas em um formato de pacote definido. Em primeiro lugar, um cdigo de funo enviado de volta ao mestre solicitante igual ao cdigo de funo original com exceo de
seu conjunto de bits mais significativo. Isso equivale a incluir 0x80 ao valor do cdigo de funo original. Em vez dos dados normais associados resposta a uma determinada funo, as
respostas exceo incluem um nico cdigo de exceo.
No padro, os quatro cdigos de exceo mais comuns so 01, 02, 03 e 04. Esses cdigos so mostrados no quadro 7, com os significados padro para cada funo.
Cdigo de exceo
Significado
01
O cdigo de funo recebido no suportado. Para confirmar o cdigo de funo original, subtraia 0x80 do valor retornado.
02
A requisio tentou acessar um endereo invlido. No padro, isso pode acontecer somente se o endereo inicial e a quantidade de valores requisitada ultrapassar
216. Entretanto, alguns dispositivos podem limitar ainda mais esse espao de endereos em seus modelos de dados.
03
A requisio tem dados incorretos. Em alguns casos, isso significa que houve algum descasamento entre parmetros, por exemplo, entre o nmero de registradores
enviados e o campo "byte count". Mais comumente, o mestre solicitou mais dados do que permitido pelo escravo ou pelo protocolo. Por exemplo, um mestre pode
ler apenas 125 registradores holding por vez, e dispositivos com recursos limitados podem reduzir ainda mais esse nmero de registradores.
04
Ocorreu um erro no recupervel durante uma tentativa de processar a requisio. Esse um cdigo de exceo geral, que indica que a requisio era vlida, mas
o escravo no conseguiu execut-la.
Quadro 7. Cdigos comuns de exceo do Modbus
O diagrama de estado para cada cdigo de funo deve cobrir pelo menos o cdigo de exceo 01 e normalmente incluir os cdigos 04, 02 e 03; quaisquer outros cdigos de exceo definidos
so opcionais.
4/6
www.ni.com
Em primeiro lugar, isso traz uma desvantagem ao desempenho, pois o dispositivo precisa esperar o trmino desse tempo de guarda antes de processar o pacote. Um problema maior, entretanto,
foi o surgimento de outras tecnologias utilizadas em transferncias seriais e taxas de baud muito maiores do que as existentes quando o padro foi lanado. Ao utilizar um cabo de converso
USB-serial, por exemplo, voc no tem controle sobre o empacotamento e transferncia dos dados. Testes mostram que usar um cabo USB-serial com o driver NI-VISA introduz grandes lacunas
de tamanho varivel no feixe de dados, e essas lacunas perodos de silncio confundem o cdigo que segue a especificao, fazendo-o acreditar que a mensagem foi concluda. Como a
mensagem no est completa, isso normalmente leva a um CRC invlido e interpretao pelo dispositivo de que a ADU foi corrompida.
Alm dos problemas com a transmisso, as modernas tecnologias de drivers abstraem significativamente a comunicao serial e tipicamente requerem um mecanismo de polling do cdigo de
aplicao. Por exemplo, nem o .NET Framework 4.5 SerialPort Class nem o NI-VISA fornecem um mecanismo para detectar silncio em uma linha serial alm do polling em bytes na porta. Isso
resulta em uma escolha de baixo desempenho (se o polling for realizado lentamente demais) ou alta utilizao da CPU (se o polling for executado rapidamente demais).
Um mtodo muito usado para tratar desses problemas separar a camada de abstrao entre a PDU do Modbus e a camada de rede. Com isso, o cdigo serial interroga o pacote da PDU do
Modbus para determinar o cdigo de funo. Em conjunto com outros dados no pacote, o comprimento do pacote restante pode ser descoberto e utilizado para determinar o final do pacote.
Tendo essa informao, possvel usar um tempo de timeout muito maior, permitindo lacunas na transmisso, e o polling da aplicao pode ocorrer muito mais lentamente. Esse mecanismo
recomendado para novos desenvolvimentos. Caso o seu cdigo no empregue esse mecanismo, voc poder ter uma quantidade de pacotes "corrompidos" maior que a esperada.
ASCII
A ADU do ASCII mais complexa que a RTU mostrada na figura 8, mas tambm evita muitos dos problemas do pacote de RTU. Entretanto, ela tem suas prprias desvantagens.
Extenso do Modbus
O Modbus um padro relativamente simples e aberto, que pode ser modificado conforme as necessidades de uma determinada aplicao. Esse o protocolo mais usado na comunicao entre
uma IHM e CLP ou CPA, pois essa uma situao na qual uma nica organizao controla as duas pontas do protocolo. Os desenvolvedores de sensores, por exemplo, tm maior probabilidade
de aderir ao padro escrito, porque eles tipicamente somente controlam a implementao de seus escravos, e a interoperabilidade desejvel.
De forma geral, no recomendvel modificar o protocolo. Esta seo simplesmente fornecida como um reconhecimento dos mecanismos que outros j usaram para ajustar o comportamento
5/6
www.ni.com
De forma geral, no recomendvel modificar o protocolo. Esta seo simplesmente fornecida como um reconhecimento dos mecanismos que outros j usaram para ajustar o comportamento
do protocolo.
5. Camadas de rede
O Modbus pode ser executado em muitas camadas de rede alm de serial e TCP. Uma implementao potencial o UDP, por ser adequado ao estilo de comunicao do Modbus. O Modbus
basicamente um protocolo baseado em mensagem; assim, a capacidade da UDP de enviar um pacote bem definido de informao sem qualquer informao adicional no nvel da aplicao,
como um caractere inicial ou comprimento, torna a implementao do Modbus extremamente simples. Em vez de exigir uma ADU adicional ou reutilizar uma ADU existente, os pacotes de PDU
do Modbus podem ser enviados pelo uso de uma API de UDP e serem recebidos totalmente formados na outra extremidade. Embora o TCP seja vantajoso para alguns protocolos, devido ao seu
sistema interno de acknowledgement, o Modbus realiza esse acknowledgement na camada de aplicao. Entretanto, usar o UDP dessa maneira elimina o campo de identificador de transao da
ADU do TCP, o que impede a possibilidade de haver diversas transaes simultneas. Assim, o mestre deve ser sncrono ou o pacote do UDP deve ter um identificador que ajude o mestre a
organizar requisies e respostas. Uma sugesto de implementao seria usar a ADU do TCP/IP em uma camada de rede do UDP.
6. Modificaes da ADU
Para finalizar, uma aplicao pode escolher modificar uma ADU ou usar partes no utilizadas de uma ADU existente, como o TCP. Por exemplo, o TCP define um campo de 16 bits, um protocolo
de 16 bits e uma Unit ID de 8 bits. Dado que a maior PDU do Modbus tem 253 bytes, o maior byte do comprimento sempre zero. Para Modbus/TCP, o campo de protocolo e a Unit ID so
sempre zero. Uma extenso simples do protocolo poderia enviar trs pacotes simultaneamente alterando o campo de protocolo para um nmero diferente de zero e usando os dois bytes no
utilizados (Unit ID e maior byte do campo de comprimento) para o envio dos comprimentos das duas PDUs adicionais (veja a figura 9).
Recursos adicionais
Especificao do protocolo de aplicaes Modbus
Por que o OPC UA importante
Sobre o OPC
Tecnologia EtherNet/IPCIP em Ethernet
Suporte a Digi
Biblioteca Modbus para Java
6/6
www.ni.com