quinta-feira, 19 de setembro de 2013

ModBUS

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