Universidade de Aveiro Departamento de Engenharia Mecânica Informática Industrial 2010/2011 5 PROTOCOLO DE COMUNICAÇÃO MODBUS 5.1 Protocolo de comunicação MODBUS Este protocolo foi proposto em 1979 pela empresa Modicon para permitir a comunicação entre os seus autómatos. Em 2004 este protocolo passou a ser público, todos os equipamentos, de todas as marcas, passaram a poder usar livremente este protocolo. Apesar de este protocolo não definir o tipo de ligações físicas entre equipamentos, nem o tipo de sinais eléctricos, ópticos ou outros, define um conjunto de mensagens (sequências de bytes) que todos os equipamentos que respeitem este protocolo saberão interpretar e executar. Estas mensagens permitem, por exemplo, monitorizar ou controlar as saídas e entradas dos equipamentos remotos. Como este protocolo não define uma rede física para transmitir as suas mensagens, os equipamentos que respeitarem este protocolo tem de implementar também um protocolo de comunicação como o Rs232, Rs485, Ethernet ou outro para transmitir as mensagens MODBUS entre eles. Cada byte desta mensagem é enviado para os outros equipamentos MODBUS através de por exemplo, uma palavra série Rs232 ou Rs485. Cada palavra série é composta por um start, 8 s de dados, um de paridade, e um stop. Por isso, para uma comunicação Rs232 ou Rs485 com de paridade e 1 stop são enviados 11 s para a linha por cada byte da mensagem MODBUS. Tempo de envio de um byte MODBUS Cada byte de uma mensagem MODBUS demora um tempo conhecido a ser enviado, por exemplo, se os equipamentos estiverem ligados através de uma ligação Rs232 ou Rs485, além dos 8 s de um byte MODBUS é enviado para o barramento um start, 1 de paridade e 1 stop, ou seja, são enviados 11 s para o barramento por cada byte MODBUS. Se a taxa de transferência for de 9600 /s, cada demora 1/9600 segundos a ser enviado. Logo, 11 s demoram 11/9600 segundos a enviar. T byte MODBUS = 11/9600 = 1,145 ms Tempo máximo de espera entre bytes MODBUS Todos os bytes da mesma mensagem RTU têm ser enviados consecutivamente, e preferencialmente sem tempo de espera entre eles. Se o tempo decorrido entre o envio de um byte e o byte seguinte exceder 1,5 vezes o tempo de envio de um byte essa mensagem é ignorada. Por outras palavras, o tempo espera entre bytes tem de ser menor que 1,5 x T bytemodbus. Com uma taxa de transferência de 9600 bps o tempo máximo de espera entre bytes é de 1,71 ms. T EsperaEntreBytes 1,5 x T bytemodbus 1,71 ms Informática Industrial 2010/2011 41
Tempo mínimo de espera entre envio de mensagens MODBUS Pelo contrário, entre mensagens RTU tem de existir um tempo de silêncio igual ou superior a 3,5 vezes o tempo de envio de um byte MODBUS. Por outras palavras, o tempo de espera entre mensagens MODBUS tem de ser maior ou igual a 3,5 x T byte MODBUS. Com uma taxa de transferência de 9600 bps o tempo mínimo de espera entre mensagens MODBUS é de 4 ms T Espera entre mensagens MODBUS 3,5 x T bytemodbus 4 ms O protocolo MODBUS define também o tipo diálogo entre os equipamentos, define por exemplo quem pode enviar dados e em que altura. O protocolo MODBUS permite também resolver algumas limitações de outros protocolos, nomeadamente do protocolo Rs485. Recorda-se de no capítulo anterior, ter constatado que o protocolo Rs485 não define os endereços de cada equipamento, nem o tipo de mensagens que devem ser transmitidas entre eles, nem o momento em que cada equipamento pode enviar os seus dados. Ao contrário dos protocolos Rs232 ou Rs485 que são implementados pelo hardware de cada equipamento (amplificadores operacionais, ou amplificadores diferenciais), o protocolo MODBUS é implementado por software. Têm de ser os programas dos PLCs ou de outros equipamentos programáveis a respeitar e a implementar o protocolo MODBUS. Por vezes esses programas já vêm de fábrica, gravados em EPROMs e nessa altura diz-se que são implementados por Firmware. 5.1.1 Tipo de diálogo/partilha do meio de transmissão (Master-Slave) O tipo de diálogo entre equipamentos definido por este protocolo é o master slave. Ao contrário de outros protocolos que permitem a cada equipamento enviar os seus dados para o meio de comunicação sempre que o desejarem, podendo ocorrer colisões de dados quando dois ou mais tentarem enviar dados em simultâneo, o protocolo MODBUS prevê um diálogo do tipo master slave. Num diálogo deste tipo apenas um dos equipamentos assume o papel de master e só ele pode enviar dados para todos os outros sempre que quiser. Os outros equipamentos actuam como slaves só podendo enviar dados como resposta a um pedido prévio do master. O equipamento master pode enviar uma mensagem MODBUS para um determinado equipamento unicast ou para todos os equipamentos ligados ao barramento broadcast. Algumas mensagens do master pressupõem uma resposta do slave, outras não. Se a mensagem do master for do tipo leitura de entradas, saídas ou memórias do slave, o slave depois de a receber e processar responde ao master com outra mensagem contendo itens pedidos pelo master. Se a mensagem do master for do tipo escrita no slave essa mensagem não pressupõem resposta do slave. O slave limita-se a actualizar as suas posições de memória ou as suas saídas com os valores indicados pelo master. Informática Industrial 2010/2011 42
5.1.2 Estrutura das mensagens MODBUS As mensagens MODBUS são compostas por vários campos, neste exemplo 4 campos: Endereço (1 byte), Função (1 byte), Dados (comprimento variável), CRC/LRC (2 bytes). 1 byte 1byte Comprimento variável: 0 a 252 2 bytes Endereço Função Dados CRC/LRC Endereço O primeiro campo da mensagem e também o primeiro a ser enviado é o campo de endereço, com o endereço do equipamento MODBUS a quem se destina a mensagem. Esse endereço é codificado com 8 s, por esta razão apenas podem existir 255 endereços e alguns destes endereços estão reservados. Se a mensagem tiver um endereço de destino 0 destina-se a todos os equipamentos e é forçosamente uma mensagem de escrita. Os equipamentos que actuam como slaves podem ter endereços de 1 a 247. Os endereços de 248 a 255 estão reservados. Função Cada mensagem MODBUS tem uma função específica, pode por exemplo, ter por função activar uma saída digital de um equipamento remoto. A função que cada mensagem desempenha é codificada em 8 s. Antes de analisar as diferentes funções compreendidas pelo protocolo MODBUS e as suas mensagens é importante compreender o tipo de itens que este protocolo reconhece num equipamento remoto. Em cada equipamento podem existir: Entradas digitais (discrete inputs): As entradas digitais podem ser lidas pelos equipamentos remotos através da troca de mensagens MODBUS. Uma entrada digital X0 de um PLC é um exemplo de uma entrada deste tipo. Saídas digitais (coils): As saídas digitais podem ser controladas remotamente ou apenas lidas pelos equipamentos remotos através da troca de mensagens MODBUS entre esses equipamentos. A saída digital Y0 de um PLC é um exemplo de uma saída digital que pode ser controladas remotamente ou apenas lidas, através de mensagens MODBUS. Posições de memória só de leitura (input registers): São posições de memória de 16 s. Os s destas posições de memória reflectem o estado das entradas digitais ou analógicas do equipamento. Estas memórias podem ser lidas pelo master através de mensagens MODBUS. Por exemplo, a posição de memória D4072 do PLC - FATEK contém o valor da sua entrada analógica CH0 e pode assumir valores de 0 a 16380, consoante a tensão externa analógica aplicada a esta entrada variar de 0 a 10Volt. Este tipo de memória pode ser lido remotamente através das mensagens MODBUS, mas, naturalmente, este protocolo não prevê nenhuma mensagem para escrever neste tipo de memórias. Posições de memória de leitura ou escrita (holding registers): são posições de memória de 16 s que podem ser lidas ou escritas pelos equipamentos remotos, para isso existem mensagens MODBUS específicas. As posições de memória dos PLCs do tipo D, por exemplo a D100, são posições de memória que podem ser escritas ou lidas remotamente através das mensagens MODBUS. Informática Industrial 2010/2011 43
Código da Função Dec Hex Binário 1 1 00000001 Leitura do estado das saídas digitais do equipamento remoto (on/off) 2 2 00000010 Leitura de entradas digitais do equipamento remoto (on/off) 3 3 00000011 Leitura de posições de memória do equipamento remoto (2 bytes) 4 4 00000100 Leitura de posições de memória (2 bytes) 5 5 00000101 Activa/Desactiva uma saída digital 6 6 00000110 Escreve numa posição de memória do equipamento remoto 7 7 00000111 8 8 00001000 Mensagem de teste que o equipamento remoto deve apenas devolver ao emissor 15 0F 00001111 Activa/Desactiva um conjunto de saídas digitais consecutivas 16 10 00010000 Escreve em várias posições de memória Detecção de erro de transmissão Durante a transmissão da mensagem MODBUS entre equipamentos podem existir erros devido a interferências electromagnéticas, por essa razão o protocolo MODBUS prevê um mecanismo para detectar se a mensagem foi bem transmitida. Esse mecanismo consiste no envio de dois bytes adicionais, no final da mensagem MODBUS, com um valor que é calculado em função de todos os bytes da mensagem. Quando um equipamento envia uma mensagem MODBUS calcula dois bytes adicionais, em função de todos os outros bytes da mensagem. O equipamento receptor faz o mesmo, calcula esses dois bytes, em função de todos os bytes que recebeu nessa mensagem. Se a mensagem tiver sido transmitida correctamente o valor calculado pelo receptor é igual ao valor enviado pelo emissor. Existem duas formas de calcular esses dois bytes: um dos algoritmos chama-se CRC - Cyclical Redundancy Checking o outro chama-se LRC Longitudinal Redundancy Checking. Informática Industrial 2010/2011 44
Mensagens MODBUS do tipo RTU Remote Terminal Unit As mensagens MODBUS podem ser de dois tipos: RTU ou ASCII. No modo RTU cada byte da mensagem MODBUS (o byte do endereço de destino, o byte de função e os bytes de dados da mensagem) é codificado em 8 s e cada byte MODBUS é transmitido numa palavra série Rs232 ou Rs485 Endereço 1 byte Função 1byte Comprimento variável:0 a 252 2 bytes 0x12 0x15 Dados CRC O número 12 hexadecimal corresponde ao valor binário 00010010 O número 15 hexadecimal corresponde ao valor binário 00010101 A seguir ao, o menos significativo de cada número é o primeiro a ser enviado para o barramento. 01001000 0x12 10101000 0x15 Dados CRC Cyclical Redundancy Checking O equipamento emissor utiliza o algoritmo CRC16 para gerar os últimos dois bytes da mensagem MODBUS-RTU. O equipamento receptor utiliza o mesmo algoritmo para calcular localmente o CRC16 da mensagem recebida e compara os 16 s calculados com CRC16 enviado pelo emissor. Informática Industrial 2010/2011 45
Mensagens MODBUS do tipo ASCII American Standard Code for Information Interchange Cada byte da mensagem MODBUS RTU contém um número, por exemplo o endereço de destino conter o número 12, o código de função pode conter o número 15. Cada número destes tem, ou pode, ter dois dígitos. Endereço 1 byte Função 1byte Comprimento variável:0 a 252 2 bytes 12 15 Dados LRC 1º passo - No modo MODBUS-ASCII, o número contido em cada byte é previamente dividido a meio e cada metade, cada dígito, é codificado em 7 s de acordo com a tabela ASCII. O dígito 1 corresponde ao valor binário 0110001 O dígito 2 corresponde ao valor binário 0110010 O dígito 5 corresponde ao valor binário 0110101 Endereço (2 chars) Função (2chars) Comprimento variável 2 chars 1000110 0100110 1000110 1010110 Dados 2 x 252 LRC Além disso as mensagens MODBUS-ASCII começam sempre pelo carácter : e terminam sempre com os caracteres CR e LF. De acordo com a tabela ASCII O caracter : corresponde ao valor binário 0111010 O caracter CR corresponde ao valor binário 0001101 O caracter LF corresponde ao valor binário 0001010 3º passo - cada caracter, codificado com 7 s, é enviado numa palavra série para o equipamento remoto. O menos significativo de cada caracter é o primeiro a ser enviado para o barramento logo a seguir ao. 0101110 Char : 1000110 Char 1 0100110 Char 2. Cada byte MODBUS-RTU corresponde no modo MODBUS-ASCII a duas palavras série, cada uma com 10 s. LRC Longitudinal Redundancy Checking O algoritmo LRC8 gera um resultado de 8 s, os 4 s mais significativos representam um número de 0 a F e os 4 s menos significativos também representam um número de 0 a F. Cada um desses números é considerado um caracter de 0 a F, é codificado em 7 s de acordo com a tabela ASCII e cada um é enviado numa palavra série para o barramento. De acordo com o algoritmo LRC8, o equipamento emissor calcula a soma de todos os bytes da mensagem, excepto os bytes correspondentes aos 3 caracteres :, CR, LF. Depois de somar Informática Industrial 2010/2011 46
todos os outros bytes obtém um resultado de 8 s. Cada um desses s é negado e depois o emissor incrementa o resultado de uma unidade. Este resultado final tem 8 s, os 4 s mais significativos representam um número de 0 a F e os 4 s menos significativos também representam um número de 0 a F. Cada um desses números é considerado um carácter, é codificado em 7 s de acordo com a tabela ASCII e cada conjunto de 7 s é enviado numa palavra série para o barramento. Os 7 s mais significativos são enviados primeiro Informática Industrial 2010/2011 47