O protocolo de comunicação Modbus é utilizado para comunicação serial e foi desen- volvido pela Modiconr para permitir a comunicação entre dispositivos interligados em
uma rede de campo.
Ele utiliza os meios físicos EIA-232, EIA-485, ou Ethernet, baseando-se no paradigma mestre/escravo para acessar os dados nos dispositivos (MODICON, Inc., 1996).
Neste protocolo apenas o dispositivo mestre pode iniciar uma transação, e os disposi- tivos escravos respondem enviando os dados solicitados pelo mestre.
Devido à sua versatilidade, atualmente esse protocolo é aplicado em diferentes tipos de redes como pode ser observado na Figura 3.1.
Figura 3.1: Pilha de Comunicação Modbus. Fonte: (ROZA, 2004)
Esse protocolo é bastante empregado na indústria, sendo aplicado em 40% das aplica- ções industriais, tais como CLP e instrumentos inteligentes, devido à sua fácil extensibi- lidade, suas várias funcionalides, sua fácil implementação e o seu baixo custo (SIDENG et al., 2008).
Esse protocolo pode ser utilizado em diferentes meios de transmissão, como o cabeado quando a rede de campo possui uma distância relativa ou wireless quando os equipamen- tos de campo localizam-se em ambientes muito remotos.
Uma aplicação foi a apresentada por Roza (2004) em que ele utiliza modems wireless sobre a infraestrutura de dados celular interligando equipamentos de campo que utilizam modbus com o supervisório localizado a grande distância.
Esses fatores contribuíram para a sua escolha devido à necessidade do sistema de detecção de vazamento realizar o processamento de grande quantidade de informação localmente, possuindo o dispositivo de processamento quantidade de memória limitada.
O protocolo Modbus define três tipos de quadro de dados:
Quadro de solicitação É empregado quando o mestre solicita informação a algum dis- positivo;
Quadro de resposta Serve para o envio de dados solicitado pelo mestre;
Quadro de resposta excepcional É utizado pelo dispositivo para informar que tipo de erro ocorre durante a comunicação ou execução da ação especificada pela função. Na checagem de erro, o protocolo Modbus utiliza dois tipos: a paridade que pode ser opcionalmente aplicada em cada caracter do quadro; e a checagem do quadro que pode
ser o Longitudinal Redundancy Check (LRC) ou o Cyclical Redundancy Check (CRC) dependendo do modo de transmissão.
O mestre no protocolo é configurado pelo usuário para aguardar um intervalo de tempo limite pré-determinado antes de abortar a transação quando ocorrer alguma falha na co- municação.
Esse intervalo é definido para ser um tempo suficiente para qualquer escravo para responder normalmente.
Se o escravo detecta um erro de transmissão, a mensagem não será respondida. O escravo não vai construir uma resposta para o mestre.
Assim, o tempo de espera irá expirar e permitir que o programa mestre lide com o erro. Uma mensagem dirigida a um dispositivo escravo que não existe também irá causar um timeout.
O protocolo Modbus possui dois modos de transmissão para a comunicação serial, o ASCII e o RTU. O modo selecionado e os parâmetros da comunicação serial devem ser o mesmo para todos os dispositivos em uma rede Modbus (MODICON, Inc., 1996).
3.7.1
Modo ASCII
O modo ASCII usa para a transmissão de dados em uma rede, os dados codificados em código ASCII. A cada 8 bits em um quadro, esses bits são enviados como dois caracteres ASCII.
A quantidade de bits por cada palavra de dados para modo ASCII é sempre igual a 10, independetente dos parâmetros de comunicação.
O formato do quadro é mostrado na Figura 3.2 e descrito nos tópicos seguintes.
Figura 3.2: Quadro de dados do modbus ASCII.
Início de Framing Esse campo da mensagem começa com um caracter ASCII : (hex 0x3A);
Endereço do escravo Esse campo possui dois caracteres ASCII, que possui um range de 0 à 127 (decimal) dispositivos escravos;
Função Modbus Esse campo também possui dois caracteres ASCII, onde os códigos válidos variam de 1 à 255 (decimal) indicando a função correspondente;
Dados para o escravo Esse campo pode possuir n caracteres ASCII, dependendo da so- licitação do dispositivo mestre;
Checksum Esse campo possui 2 caracteres ASCII e seu valor é encontrado pelo LRC,
que calcula esse valor pelo conteúdo da mensagem, excluindo o começo e o final do quadro;
Fim de Framing Esse campo termina com dois caracteres ASCII CRLF (Carriage Re- turn - Line Feed) (hex 0x0D e 0x0A).
3.7.2
Modo RTU
O modo RTU diferente do modo ASCII, não possui bytes que indiquem o ínicio e o fim do quadro para a comunicação entre o mestre e o escravo.
Para identificar o quadro do modo RTU, não deve existir transmissão de dados por um período mínimo de 3,5 vezes o tamanho da palavra de dados do maior quadro, entre o começo e o final do quadro, conforme a Equação 3.1 (MODICON, Inc., 1996).
A principal vantagem deste modo é a sua maior densidade de caracteres, permitindo uma melhor transferência de dados que o modo ASCII para a mesma taxa de transmissão.
intervalo = n
ode bytes × palavra × 3,5
taxa de transferência (3.1)
Para o modo RTU a quantidade de bits por cada palavra de dados deve ser sempre igual a 11, independetente dos parâmetros de comunicação.
O quadro do modo RTU é apresentado na Figura 3.3 e descrito a seguir.
Endereço do escravo O campo de endereço possui 8 bits que indica de 0 à 127 (decimal) dispositivos escravos, sendo o valor 0 usado para broadcast;
Função Modbus O campo função possui 8 bits que varia de 1 à 255 (decimal), indicando a função solicitada pelo dispositivo mestre;
Dados para o escravo O campo de dados é formado por n x 8 bits, de acordo com a solicitação do mestre;
Checksum O campo de checksum contém em seu campo 16 bits que são implementados
como 2 bytes. Esse cálculo é realizado pelo método CRC no conteúdo do quadro, o bytede menor ordem vem primeiro no quadro e o de maior ordem é o último byte do quadro;
O Quadro 3.3 apresenta as principais funções do protocolo Modbus.
Função Descrição
0x01H Lê o status ON/OFF de saídas discretas.
0x02H Lê o status ON/OFF de entradas discretas.
0x03H Lê o conteúdo de registradores de uso geral. 0x04H Lê o conteúdo de registradores de entradas.
0x05H Escreve na saída discreta o valor ON ou OFF.
0x06H Escreve um valor em um único registrador de uso geral.
0x0FH Escreve o valor ON ou OFF em múliplas saídas discretas em sequência.
0x10H Escreve valores em uma sequência de registradores de uso geral. Quadro 3.3: Funções do Modbus.
Quando ocorre alguma exceção no escravo, este monta um quadro de retorno expli- cando o que ocorreu, no campo da função os códigos do Quadro 3.3 são usados, contudo o seu bit mais significativo passa a ter seu valor igual a 1.
O campo de dados deve conter o código que motivou a exceção. Os principais códigos estão mostrados no Quadro 3.4.
Exceção Descrição
0x01H Função inválida
0x02H Registrador inválido
0x03H Valor do dado inválido
0x04H Falha do escravo
0x05H Estado de espera
0x06H Escravo ocupado