Sei sulla pagina 1di 7

TUTORIAL MODBUS NO MATLAB 1! ! !

INTRODUO

Tutorial referente ao desenvolvimento e uso do protocolo MODBUS no Matlab com

exemplo de comunicao com inversor de freqncia CFW 09 da WEG. 2 O PROTOCOLO MODBUS

O MODBUS um protocolo para comunicao industrial criado originalmente pela Modicom, um dos mais antigos e utilizados protocolos para integrao de CLP, IHM, inversores de freqncia, dispositivos, tem como principal caracterstica a simplicidade e flexibilidade de uso. Usualmente aplicado em meio fsico RS485 ou RS 232 sendo que no primeiro atinge at 1200 metros de distncia, tem arquitetura mestre-escravo com at 247 escravos. Tem as seguintes subdivises: RTU, ASCII, TCP e Plus, sendo que o Modbus RTU o objeto de estudo deste tutorial. 2.1 ESTRUTURA DO PROTOCOLO Trata-se de um protocolo serial com o seguinte datagrama:
Endereo Comando Endereo registradores Quantidade registradores 1 byte 1 byte 1 byte 1 byte 1 byte 1 byte CRC 1 byte 1 byte

Onde: Endereo: Endereo do escravo na rede; Comando: Funo a ser executada como leitura de bobina, escrita de varivel, etc. Vide tabela abaixo: COMANDO 01 02 03 04 05 06 07 08 15 16 DESCRIO Leitura de sada digital Leitura de sada digital Leitura de variveis retentivas (sadas analgicas ou memrias) Leitura de variveis de entrada (entradas analgicas) Escrita de uma sada digital Escrita de uma sada analgica Leitura de erros Funes de diagnstico Escrita de vrias sadas digitais Escrita de vrias sadas analgicas

ARTHUR SCHULER DA IGREJA!

Endereo registradores: Endereo que deseja-se ler ou escrever; Os endereos Modbus esto agrupados em faixas dependendo de sua funo especfica conforme segue: FUNO Bobinas Entradas Registradores de entrada Registradores retentivos FAIXA DE VALORES 00001 09999 10001 - 19999 30001 39999 40001 - 49999

Quantidade registradores: Para leitura: nmero de parmetros a serem lidos a partir do endereo inicial especificado. Para escrita: valor a ser escrito no endereo inicial especificado; CRC: Verificao de redundncia, algoritmo utilizado para certificar a integridade da mensagem trafegada, o CRC um valor calculado a partir dos valores que compe o datagrama at o campo - Quantidade registradores; O escravo apenas atua na rede quando recebe uma requisio do mestre, por exemplo: o mestre faz uma requisio de leitura, a resposta do escravo idntica mensagem do mestre, apenas o campo Quantidade registradores que na mensagem do mestre indica quantos parmetros sero lidos e na resposta do escravo contm o valor propriamente dito. Tambm o CRC diferente visto que o datagrama foi modificado. 3 MODBUS NO MATLAB

Tratando-se de um protocolo serial, possvel construir a estrutura necessria para a troca de mensagens em Modbus no Matlab. Com isso tornam-se possveis aplicaes industriais avanadas como o controle adaptativo de mquinas j que possvel a leitura de parmetros do comportamento de um inversor de freqncia pela rede, processamento das informaes pelas Toolbox do Matlab e posterior correo dos parmetros do inversor via Modbus. Alm disso pode-se integrar a leitura e escrita em interfaces interativas via GUI do Matlab, construindo-se uma espcie de sistema supervisrio. 3.1 COMUNICAO COM INVERSOR CFW 09 WEG

Para o presente exemplo, deseja-se iniciar o movimento, parar e alterar a velocidade de funcionamento de um inversor de freqncia CFW 09 da WEG. Este inversor tem o protocolo Modbus, meio fsico RS232 e deve estar com seus parmetros de comunicao e referncia configurados conforme o Anexo 1.

ARTHUR SCHULER DA IGREJA!

Figura 1 Inversor de freqncia CFW 09.

3.1.1 Alterao da velocidade do inversor No exemplo deseja-se alterar o parmetro de velocidade do inversor de freqncia (Varivel bsica 4), a converso do endereo para o CFW 09 d-se da seguinte maneira:

Ou seja, para a varivel bsica 04, o endereo ser 5004 (Decimal) ou 138C (Hexadecimal). O valor a ser escrito depende da velocidade final do motor, supondo a utilizao de um motor de 1800 RPM (Parmetro 208), deve-se utilizar a seguinte frmula: Varivel bsica 4 = (Velocidade_Rpm * 8191) / Pr.208 Para o exemplo deseja-se que o motor mova-se a 900 rpm, para isso a Varivel 4 assumir o valor 4096. Assumindo-se que o inversor esteja configurado com o endereo 1 na rede Modbus, tem-se as informaes necessrias para montar o datagrama Modbus.

ARTHUR SCHULER DA IGREJA!

3.1.2 Datagrama para alterao da velocidade do inversor no Matlab Deve-se obter o seguinte datagrama (valores decimais):
Endereo Comando Endereo registradores Quantidade registradores 01 06 19 140 16 0 65 CRC 101

Inicia-se com a obteno dos valores de velocidade:


vel = 4096; %% Velocidade levando-se em conta a caracterstica do motor rpm = dec2hex(vel) %% Converso do valor de decimal para hexadecimal rpm = num2str(rpm) %% Converso de nmero para String

O campo Quantidade registradores deve ser escrito em 2 bytes, para tal deve-se separar o valor da velocidade ao meio, para isso, converteu-se o valor para uma cadeira de caracteres (String) e em seguida separa-se em 2 variveis:
if length(rpm)==3 %% Caso o valor tenha apenas 3 caracteres, adicionar 0 no incio rpm(1,4)=rpm(1,3) %% Salva valor unitrio rpm(1,3)=rpm(1,2) %% Salva valor da dezena rpm(1,2)=rpm(1,1) %% Salva valor da centena rpm(1,1)='0'; %% Acrescenta 0 no primeiro caractere end rpm1=strcat(rpm(1,1),rpm(1,2)) %% Concatena primeiros 2 valores rpm1=hex2dec(rpm1) %% Converte para decimal novamente rpm2=strcat(rpm(1,3),rpm(1,4)) %% Concatena ltimos 2 valores rpm2=hex2dec(rpm2) %% Converte para decimal novamente

Obtido o valor, basta unir esta informao com o restante do datagrama antes do clculo do CRC:
message=[01 06 19 140 rpm1 rpm2] %% Datagrama antes do CRC

Onde o campo Endereo registradores foi meramente convertido de hexadecimal para decimal, o endereo da Varivel bsica 4 138C, fazendo a converso: 13 (Hexadecimal) = 19 (Decimal) e 8C (Hexadecimal) = 140 (Decimal). 3.1.2 Clculo do CRC O clculo do CRC foi obtido utilizando-se uma funo disponvel no site da Mathworks (http://www.mathworks.com/matlabcentral/leexchange/14275), como o datagrama bsico est pronto, basta utiliz-lo como argumento da funo:

ARTHUR SCHULER DA IGREJA!

%% Incio do clculo do CRC N = length(message); crc = hex2dec('ffff'); polynomial = hex2dec('a001'); for i = 1:N crc = bitxor(crc,message(i)); for j = 1:8 if bitand(crc,1) crc = bitshift(crc,-1); crc = bitxor(crc,polynomial); else crc = bitshift(crc,-1); end end end lowByte = bitand(crc,hex2dec('ff')); highByte = bitshift(bitand(crc,hex2dec('ff00')),-8); amsg = message; amsg(N+1) = lowByte; amsg(N+2) = highByte; mensagem=amsg; %% Fim do clculo do CRC

Onde a varivel mensagem o datagrama completo desejado:

>> mensagem mensagem = 1 6 19 140 16 0 65 101

3.1.3 Comunicando com o inversor Para envio da mensagem:


s= serial('COM1'); %% Criao da porta serial no Matlab s = serial('COM1','BaudRate',9600,'Parity','none','StopBits',2); %% Configurao do protocolo RS232 em concordncia com o inversor fopen(s) %% Abertura da porta serial fwrite(s,mensagem) %% Envio da mensagem fclose(s) %% Fecha porta serial

Caso todos os passos anteriores forem seguidos rigorosamente a referncia de velocidade ter sido alterada via rede Modbus. 3.1.4 Partida do motor Para que o inversor comece a funcionar deve-se habilitar os parmetros de Gira/ Pra e Habilita geral, so variveis do tipo bobina, segue datagrama para esta funo:

ARTHUR SCHULER DA IGREJA!

gira = hex2dec({'01' '05' '00' '65' 'FF' '00' '9C' '25'}); %% Datagrama para incio do movimento habilita=hex2dec({'01' '05' '00' '64' 'FF' '00' 'CD' 'E5'}); %%Datagrama para habilita geral do inversor

Basta enviar tais datagramas na porta serial que o movimento inicia-se. 3.1.4 Parada do motor Segue datagrama para parada do motor:
parada = hex2dec({'01' '05' '00' '65' '00' '00' 'DD' 'D5'}); %% Datagrama para parada do movimento

3.1.5 Leitura de mensagens Para realizar a leitura de valores, deve-se enviar uma mensagem do mestre como requisio e em seguida ler o canal serial no Matlab atravs do comando:
fread(s); %% Leitura da porta serial

ARTHUR SCHULER DA IGREJA!

ANEXO 1 CONFIGURAES DO INVERSOR DE FREQUNCIA PARMETRO 220 221 222 223 224 225 226 227 228 308 DESCRIO Seleo Local/Remoto Seleo da referncia local Seleo da referncia remota Seleo do sentido de giro local Seleo do gira/pra local Seleo do JOG local Seleo do sentido de giro remoto Seleo do gira/pra remoto Seleo do JOG remoto Endereo do inversor na rede VALOR 6 9 9 5 2 3 5 2 3 1-30

ARTHUR SCHULER DA IGREJA!

Potrebbero piacerti anche