Vous êtes sur la page 1sur 10

1

Balanas de Pesagem
Abordagem prtica para balanas TOLEDO
por Victory Fernandes e Murilo Plnio
A automao atinge hoje indstrias, laboratrios, restaurantes e frigorficos, que utilizam balanas de pesagem destinadas s mais diversas aplicaes, desde balanas de alta preciso at balanas de pesagem de carga que suportam dezenas de toneladas. Alguns dos principais problemas dos desenvolvedores so: ? Como integrar as balanas de pesagem ao sistema gerencial automatizando o processo produtivo? ? Como fazer isso de forma transparente sem precisar conhecer a fundo a comunicao de baixo nvel com o hardware? ? Onde obter as informaes para comunicao, suporte e meios para efetuar testes de comunicao sem possuir o hardware necessrio no laboratrio de desenvolvimento? Tendo em vista estas e outras dificuldades, apresentamos este artigo descrevendo todo o processo de configurao, implementao e teste da comunicao com balanas de pesagem TOLEDO, seno o maior, um dos maiores fabricantes do setor no Brasil. Abordaremos desde a configurao dos registradores internos da balana, passando pela comunicao inicial e testes com o HyperTerminal, aplicativo demo de comunicao em Delphi, simulador da balana para testes em laboratrio sem a necessidade do equipamento, at a anlise de baixo nvel do protocolo de comunicao utilizado pelo fabricante.

Configurao dos Registradores da Balana


O primeiro passo para leitura das informaes da balana a partir do seu sistema fazer a correta configurao das opes dos registradores. Para tanto, coloque a balana no modo de programao digitando a seguinte seqncia de caracteres no indicador digital (A senha padro de fbrica 1234):
[F1] + 1 + SENHA + ENTER

Uma vez no modo de programao, utilize as teclas [ENTER] para avanar os registradores e [>T] para voltar. Localize ento os registradores de configurao da comunicao descritos a seguir e altere seus valores. Registrador C00 Modo de Operao As balanas podem operar em modo pesador d ou modo contador de unidades L. Configure inicialmente este registrador para o valor d, para efetuar os testes de pesagem. Registrador C03 Sensor de Movimento Permite que a indicao de peso s seja atualizada no display quando no houver movimento na plataforma de pesagem. Enquanto existir movimento o display ficar retido na ultima indicao de peso. Configure inicialmente este registrador para o valor d, inibindo o sensor de movimento, para efetuar os testes de pesagem. Registrador C12 CheckSum

Este registrador permite enviar o byte de checksum no pacote de dados pela sada serial. O valor d inibe o envio e o valor L ativa o envio do checksum. O clculo do checksum obtido atravs do complemento de 2(dois) da soma de todos os bytes recebidos do STX, inclusive a CR, como veremos no tpico Protocolo de Comunicao P03. Registrador C13 BaudRate Determina a velocidade de transmisso dos dados, e deve estar configurado para comunicao em 4800 Bauds. Registrador C14 Formato dos Dados Determina o tipo de pacote de dados enviados, e deve ser configurado para o valor P03, sada contnua de dados. Registrador C15 Transmisso Contnua Permite que os dados sejam transmitidos continuamente, modo contnuo L, ou que a transmisso s ocorra quando a tecla de transmisso for pressionada no indicador digital. Configure inicialmente este registrador para o valor d, modo demanda, para efetuar os testes de pesagem atravs do pressionamento do boto de transmisso.

Comunicao via HyperTerminal


Uma vez configurados os parmetros da balana, preciso verificar se a mesma est comunicando corretamente com o software padro de comunicao do Windows, o HyperTerminal. Para tanto, basta criar uma nova conexo do HyperTerminal e configur-la como segue: Bits por segundo: Bits de Dados: Paridade: Bits de Parada: Controle de Fluxo: 4800 8 Nenhum 2 Nenhum

Uma vez concluda a conexo, aps o pressionamento do boto de transmisso das informaes no indicador digital da balana, o HyperTerminal efetua a leitura da string na porta serial e o resultado final ser semelhante ao mostrado na Figura 01:

Figura 01: Comunicao com a balana via HyperTerminal e string lida da porta serial.

A string lida no HyperTerminal aparece segundo a interpretao em ASCII dos bytes enviados pela balana de acordo com o protocolo de comunicao. Portanto no se espante se os dados aparecerem truncados ou cheios de smbolos ilegveis; esse realmente o resultado esperado, e a traduo e interpretao desta string ilegvel para um formato amigvel justamente o trabalho da P03_Unit, que ser apresentada nos tpicos seguintes. A leitura das informaes da balana por parte do HyperTerminal garante que nosso hardware, configurao de drivers e software esto corretos, e que podemos prosseguir com os testes do aplicativo demo. Caso contrrio, se faz necessrio a verificao dos itens que estejam apresentando problemas antes de prosseguir. Alguns dos problemas mais comuns encontrados at essa etapa so: ? ? ? ? ? A configurao dos parmetros na balana est incorreta. A configurao dos parmetros no HyperTerminal est incorreta. A placa de comunicao serial da balana est com problemas. A porta serial do computador est com problemas fsicos ou de configurao de driver no sistema operacional. A configurao sugerida dos parmetros do HyperTerminal a default e no apresentou problemas nos modelos testados. Entre em contato com o fabricante para maiores informaes caso todos os itens anteriores aparentem estar operando corretamente e mesmo assim a comunicao no funcione corretamente.

Aplicativo Demo
O aplicativo demo um programa que faz a leitura da string enviada pela balana e os entrega sob a forma de variveis do Delphi ao programador. Esta leitura e traduo so implementadas utilizando as funes da P03_Unit que, implementa internamente o tratamento completo das informaes do protocolo P03, protocolo padro de comunicao das balanas TOLEDO, tornando o processo como um todo muito mais simples.

Figura 02: Demo de Comunicao com balana de pesagem TOLEDO utilizando a P03_Unit

O demo j vem previamente configurado para os parmetros descritos na Comunicao via HyperTerminal. Sendo assim, basta clicar no boto Conectar para que ele passe a receber, assim como o HyperTerminal, a string enviada via porta serial pela balana no campo Texto Recebido. A principal diferena no entanto, que o demo apresenta separadamente no campo Texto Tratado, as informaes enviadas pela balana de uma forma legvel e de fcil interpretao. Caso deseje recompilar o programa demo para alterar seus valores ou implementar outras funcionalidades, necessrio copiar o arquivo P03_Unit.dcu para o diretrio Lib de instalao do Delphi, no caso do Delphi 6 por exemplo, C:\Arquivos de programas\Borland\Delphi6\Lib Agora vamos prosseguir, e saber como a comunicao, leitura e traduo da string lida implementada pelo demo.

Comunicao do Demo com a porta serial


A comunicao com a porta serial para a leitura da string enviada pela balana pode ser feita utilizando qualquer componente disponvel para este fim. Existem diversos componentes gratuitos para porta serial, disponveis para download na Internet, e voc pode utilizar aquele que achar melhor, ou at mesmo desenvolver seu prprio componente de comunicao. No demo utilizamos o componente gratuito TcommPortDriver para efetuar a comunicao por j estarmos familiarizados com o mesmo. O TCommPortDriver um componente gratuito para

Delphi que rene todo o cdigo de baixo nvel necessrio para o controle de portas seriais. Suas propriedades e mtodos de conexo e transmisso de dados possibilitam utilizar as portas seriais facilmente. Para instalar o componente TCommPortDriver descompacte o arquivo CommPortDriver.zip, que acompanha o demo em questo, na pasta desejada. No Delphi abra o arquivo ComDrv32.dpk na pasta de instalao do componente e clique no boto Compile e depois em Install para concluir a instalao. Depois de configurados os parmetros de comunicao descritos na Comunicao via HyperTerminal, o demo implementa o evento OnReceiveData do componente TCommPortDriver para fazer as chamadas das funes de traduo da P03_Unit, toda vez que o componente receber dados pela porta serial, como mostrado a seguir:
procedure TForm1.cpDrvReceiveData(Sender: TObject; DataPtr: Pointer; DataSize: Cardinal); var temp: string; //declarao de variaveis para uso em Trata_Variaveis SWA, SWB, SWC, Peso, Tara: string; //declarao de variaveis para uso em Trata_SWA display, incremento: string; paridade_par_SWA: boolean; //declarao de variaveis para uso em Trata_SWB peso_liquido, peso_negativo, sobrecarga, motion, auto_zerado, paridade_par_SWB: boolean; //declarao de variaveis para uso em Trata_SWC tecla_imprimir, expandido, paridade_par_SWC: boolean; begin //Captura dados lidos em formato string temp := StringOfChar(' ', DataSize); move(DataPtr^, pchar(temp)^, DataSize); //Remove caracteres invalidos da string lida temp := Remove_Invalidos(temp); //Caso o 15 bytes (sem checksum) no tenham sido todos lidos incrementa buffer if length(buffer) < 15 then begin buffer := buffer + temp; end; if length(buffer) >= 15 then begin //Limpa RichEdits RichEdit.Lines.Clear; RichEdited.Lines.Clear; //Acrescenta o string lida no primeiro RichEdit RichEdit.Lines.Append(buffer); //Trata string lida conforme protocolo P03 da Toledo Trata_Buffer(Buffer, SWA, SWB, SWC, Peso, Tara); Trata_SWA(SWA, display, incremento, paridade_par_SWA); Trata_SWB(SWB, peso_liquido, peso_negativo, sobrecarga, motion, auto_zerado, paridade_par_SWB); Trata_SWC(SWC, tecla_imprimir, expandido, paridade_par_SWC); //Adiciona variaveis tratadas ao segundo RichEdit with RichEdited.Lines do begin Append('SWA = ' + SWA); Append(' Display = ' + display); Append(' Incremento = ' + incremento); Append(' Paridade Par = ' + BoolToStr(paridade_par_SWA, True)); Append(''); Append('SWB = ' + SWB); Append(' Peso Liquido = ' + BoolToStr(peso_liquido, True)); Append(' Peso Negativo = ' + BoolToStr(peso_negativo, True)); Append(' Sobre Carga = ' + BoolToStr(sobrecarga, True)); Append(' Motion = ' + BoolToStr(motion, True)); Append(' Auto Zerado = ' + BoolToStr(auto_zerado, True)); Append(' Paridade Par = ' + BoolToStr(paridade_par_SWB, True)); Append('');

6
Append('SWC = ' + SWC); Append(' Tecla Imprimir = ' + BoolToStr(tecla_imprimir, True)); Append(' Expandido = ' + BoolToStr(expandido, True)); Append(' Paridade Par = ' + BoolToStr(paridade_par_SWC, True)); Append(''); Append('Peso = ' + Peso); Append('Peso Formatado = ' + floattostr(strtofloat(Peso) * strtofloat(display))); Append('Tara = ' + Tara); end; Buffer := ''; end; end;

P03_Unit Tratamento do protocolo de comunicao da balana


No evento de OnReceiveData descrito no cdigo anterior, aps fazer a leitura, a string lida da porta serial armazenada na varivel Buffer, so feitas ento 4(quatro) chamadas s funes de tratamento do protocolo presentes na P03_Unit, so elas:
procedure Trata_Buffer(Buffer: String; var SWA, SWB, SWC, Peso, Tara: String); procedure Trata_SWA(SWA: String; var display, incremento: string; var paridade_par: boolean); procedure Trata_SWB(SWB: String; var peso_liquido, peso_negativo, sobrecarga, motion, auto_zerado, paridade_par: boolean); procedure Trata_SWC(SWB: String; var tecla_imprimir, expandido, paridade_par: boolean);

Como veremos no tpico Protocolo de Comunicao P03, a string lida se divide em 5 partes principais que contm as informaes enviadas pela balana: SWA, SWB, SWC, Peso e Tara. Ento, a primeira chamada feita funo Trata_Buffer passa a string lida como parmetro, e serve para quebrar a string nessas 5(cinco) partes principais, retornando as mesmas em 5 variveis respectivamente. Como tambm veremos a seguir no tpico Protocolo de Comunicao P03, as partes denominadas SWA, SWB e SWC devem ento ser subdivididas para que se possa retirar delas as outras informaes que elas contm. Para isso ento so feitas as chamadas s funes Trata_SWA, Trata_SWB e Trata_SWC passando como parmetros as partes respectivas, e recebendo como retorno as variveis relativas aos dados contidos dentro de cada uma dessas partes. Pronto! Est feita de forma simples e muito rpida a comunicao e interpretao dos valores transmitidos pela balana TOLEDO, atravs da chamada de apenas 4(quatro) funes de tratamento, sem que fosse necessrio conhecer o tratamento de baixo nvel do protocolo em questo. Logo podemos ressaltar como vantagens na utilizao a P03_Unit: ? ? ? ? ? ? Tratamento completo do protocolo P03 com abstrao total da camada de baixo nvel. Velocidade na implementao da comunicao com a balana. Facilidade na obteno das informaes transmitidas. Demo de comunicao com a balana. Fontes em Delphi totalmente comentados. FAQ de implementao e uso.

A TOLEDO possui no mercado uma infinidade de modelos de balanas, e muitas pessoas se questionam sobre a compatibilidade da P03_Unit com esse ou aquele modelo. importante lembrar que a compatibilidade da P03_Unit no funo necessariamente do modelo, e sim do protocolo de comunicao utilizado entre a balana e o computador.

A unit est implementada para interpretar o protocolo de comunicao P03, utilizado no modelo mostrado na Figura 02 e em diversos outros. No entanto, sugiro que o desenvolvedor entre em contato com o suporte do fabricante e confirme se o seu modelo utiliza o protocolo P03, para s ento realizar os testes de comunicao com o demo disponibilizado.

Simulador de Balanas TOLEDO


Agora que j vimos como fazer a comunicao utilizando a balana, apresentamos uma soluo para uma das maiores dificuldades encontradas por implementadores nesta rea: a necessidade de ter uma balana disponvel no laboratrio de desenvolvimento para fazer testes. O simulador, mostrado na Figura 03, possibilita realizar os testes de implementao do seu software para comunicao com balanas TOLEDO, sem que para isso seja necessrio ter a balana, bastando que este esteja sendo executado em um outro computador conectado pela porta serial.

Figura 03: Simulador de Balanas TOLEDO Envio de informaes

Na aba Configurao, podem-se configurar todas as opes de valores transmitidos, e a ps clicar em Conectar, o simulador, alm de transmitir as informaes p ela porta serial, exibe no campo String Tratada todos os parmetros enviados e seus valores atribudos, tais como Peso, Tara e etc. Isso facilita as atividades de batimento entre informaes enviadas e recebidas pelo implementador, que tem todas as informaes exibidas em tela, ao contrrio da prpria balana que somente informa o peso no display.

Figura 04: Simulador de balanas TOLEDO Configuraes do simulador

importante ressaltar que algumas funcionalidades como modo de transmisso contnua e sensor de movimento, no esto implementadas nesta verso, ficando assim fixado o modo transmisso sob demanda e sensor de movimento desabilitado.

Protocolo de Comunicao P03


Agora que j vimos como fazer a implementao d comunicao com a balana, vamos a aprofundar um pouco mais o nosso estudo, e entender a forma como as informaes so enviadas ao computador. A balana transmite as informaes para o computador obedecendo a um protocolo de comunicao do fabricante chamado P03. Este protocolo define as posies das variveis na seqncia binria transmitida bem como os valores assumidos pelas mesmas. O formato bsico da seqncia binria transmitida que ser recebida pelo computador mostrado abaixo:
STX,SWA,SWB,SWC,I,I,I,I,I,I,T,T,T,T,T,T,CR,(CS)

Na seqncia binria mostrada, os bits, ou grupo de bits indicam configuraes ou estados da balana. Vamos agora analisar cada parte da seqncia e o seu significado na comunicao. STX Start of Text Assume o valor 02 e apenas um byte de sincronia da comunicao.

SWA Status Word A Os bits 2, 1, 0 indicam a configurao de preciso da balana e podem assumir os valores:
001 010 011 100 101 110 = = = = = = x x x x x x 10 1 0.1 0.01 0.001 0.0001

Os bits 4 e 3 indicam a configurao de tamanho do incremento da balana e podem assumir os valores:


01 = Tamanho do Incremento 1 10 = Tamanho do Incremento 2 11 = Tamanho do Incremento 5

Os bits 5 e 6 assumem sempre o valor 01. O bit 7 indica a configurao de paridade da comunicao serial da balana e assume os valores:
0 = Paridade mpar 1 = Paridade Par

SWB Status Word B


Bit Bit Bit Bit Bit Bit Bit Bit 0 1 2 3 4 5 6 7 = = = = = = = = Peso Lquido = 1 Peso Negativo = 1 Sobrecarga = 1 Motion = 1 Sempre = 1 Sempre = 1 Se AUTO Zerado = 1 Paridade Par

SWC Status Word C


Bit Bit Bit Bit Bit Bit Bit Bit 0 1 2 3 4 5 6 7 = = = = = = = = Sempre = 0 Sempre = 0 Sempre = 0 Tecla Imprimir = 1 Expandido = 1 Sempre = 1 Sempre = 1 Paridade Par

I Peso indicado no display (Lquido ou Bruto). Se existir sobrecarga da balana, o campo de peso IIIIII apresentar 000000. T Tara configurada na balana. CR Carriage Return Assume o valor 0DH (10 em Hexadecimal) e precede a informao de CheckSum. CS CheckSum Caso o registrador C12 da balana esteja configurado como = L, o checksum dos dados enviado pela balana. Percebe-se ento que a string lida se divide em: ? 1 Byte de sincronia STX que pode ser usado para subdividir a string recebida, caso o envio ou recebimento seja concatenado. ? 5 partes principais que contm as informaes enviadas pela balana, SWA, SWB, SWC, Peso e Tara que devem ser tratadas separadamente para a obteno das informaes transmitidas.

10

1 Byte de CheckSum , que pode ser usado para identificar erros na string lida atravs da comparao dos valores.

Consideraes Finais
Esperamos com este artigo exemplificar o processo, esclarecer dvidas e abrir novas possibilidades aos leitores, facilitando a implementao de sistemas para operao em conjunto com os diversos modelos de balana TOLEDO, bem como facilitando a implementao para modelos de outros fabricantes, uma vez que o paradigma apresentado , em muito, semelhante aos demais utilizados no mercado.
Victory Fernandes Engenheiro Mestrando em Redes de Computadores, e desenvolvedor scio da TKS Software - Solues de Automao e Softwares Dedicados. Pode ser contatado em victory@igara.com.br, ou atravs dos sites www.igara.com.br - www.victory.hpg.com.br

Murilo Plnio estudante de Eng. Mecatrnica, Tcnico em Informtica e desenvolvedor da TKS Software. Pode ser contactado em muriloplinio@yahoo.com