Modbus é um Protocolo de comunicação
de dados utilizado em sistemas de automação
industrial. Criado originalmente na década de 1970, mais especificamente em 19791 ,
pela fabricante de equipamentos Modicon. É um dos mais antigos e até hoje mais utilizados2 protocolos
em redes de Controladores
lógicos programáveis (PLC) para
aquisição de sinais de instrumentos e comandar atuadores. A Schneider
Electric (atual controladora da Modicon) transferiu os direitos do
protocolo para a Modbus Organization (Organização Modbus3 )
em 2004 e a utilização é livre de taxas de licenceamento4 .
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
O modbus equivale a uma camada de aplicação 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
O protocolo Modbus especifica que o modelo de
comunicação é do tipo mestre-escravo (ou cliente-servidor). 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.
Acesso ao meio
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.
Frames
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
|
||
2
|
3
|
0
|
0
|
0
|
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, - nible, - byte e - word.
Segue
abaixo uma tabela representação de cada formato.
Bit
|
Nible
|
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 = 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
Os principais comandos
do Modbus são mostrados na tabela abaixo:
código do comando
|
descrição
|
1
|
Lê um número variável1 de
saídas digitais (bobinas)
|
2
|
Lê um número variável1 de
entradas digitais
|
3
|
Lê um número variável1 de
registros retentivos (saídas analógicas ou memórias)
|
4
|
Lê um número variável1 de
registros de entrada (entradas analógicas)
|
5
|
Força uma única bobina (altera o
estado de uma saída digital)
|
6
|
Preset de um único registro (altera o
estado de uma saída analógica)
|
7
|
Lê exceções2 (registros
de erro)
|
8
|
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.
Modbus
serial
Em
redes seriais baseadas em RS-485 ou RS-232 o Modbus pode ter dois modos de
transmissão: RTU e ASCII.
Modbus RTU
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
Endereço do Escravo
|
Código da Função
|
Dados
|
CRC
|
1 byte
|
1 byte
|
0 a 252 bytes
|
2 bytes (CRC-16)
|
Modbus ASCII
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
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)
|
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.
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.
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.
Nenhum comentário:
Postar um comentário