A automação atinge hoje indústrias, laboratórios, restaurantes e frigoríficos, que utilizam balanças de pesagem destinadas às mais diversas aplicações, integradas aos mais diversos tipos de equipamentos. Tais balanças são aplicadas em inúmeros processos produtivos, desde balanças de alta precisão até balanças de pesagem de carga que suportam dezenas de toneladas.
Alguns dos principais problemas dos desenvolvedores são:
- Como integrar as balanças de pesagem ao sistema gerencial
automatizando o processo produtivo?
- Como fazer isso de forma transparente sem precisar conhecer
a fundo a comunicação de baixo nível com o hardware?
- Onde obter as informações para comunicação, suporte e meios
para efetuar testes de comunicação sem possuir o hardware necessário no
laboratório de desenvolvimento?
Tendo em vista estas e outras dificuldades, apresentamos este artigo descrevendo
todo o processo de configuração, implementação e testes de comunicação com
balanças de pesagem ALFA (
www.alfainstrumentos.com.br ), muito encontradas nos ambientes industriais
integradas a diversas máquinas e equipamentos..
Abordaremos desde a configuração dos registradores internos da balança, passando
pela comunicação inicial e testes com o HyperTerminal, aplicativo demo de
comunicação em Delphi, simulador da balança para testes em laboratório sem a
necessidade do equipamento, até a análise de baixo nível do protocolo de
comunicação utilizado pelo fabricante.
Apesar do protocolo de comunicação do fabricante dispor de inúmeras
funcionalidades de comunicação e programação do equipamento, este artigo mantém
seu foco principal na leitura de informações acerca do peso dos objetos
colocados sob a balança. Os resultados apresentados aqui foram obtidos em testes
com balança ALFA Mod.3102 acoplada a uma máquina recuperadora de plástico da
Carnevale numa empresa produtora do pólo plásticos de Camaçari-Ba.
A Balança ALFA e o indicador Mod.3102
Estão disponíveis portas de comunicação do tipo serial RS232, RS422
(selecionáveis através de jumper interno) e Paralela padrão Centronics, todas
acessadas através de prensa-cabo com a fiação conectada diretamente na placa do
equipamento.
Optamos por trabalhar com a comunicação serial RS232, devido a sua simplicidade
e facilidade de integrar com computadores e outros dispositivos que já trazem
tal porta de comunicação integrada.
O primeiro passo para leitura das informações da balança a partir do sistema, é
fazer a correta configuração dos jumpers internos para o padrão de comunicação
escolhido e a ligação correta do cabo de dados. Para isso é necessário abrir os
parafusos laterais do indicador, conforme mostrado na Figura 01 a seguir, de
forma que teremos acesso à placa do equipamento.

Figura 01: Indicador digital ALFA
Mod.3102. Remoção de parafusos laterais para acesso à placa
Uma vez removida a tampa frontal,
temos acesso à placa do equipamento onde deve ser configurado o jumper para
comunicação RS232, conforme ponto circulado em vermelho mostrado na Figura 02 a
seguir. Além disso, devemos conectar os fios do nosso cabo serial, conforme
mostrado nas setas coloridas da Figura02, TxD (vermelho), RxD (verde) e GND
(azul) respectivamente.

Figura 02: Placa do equipamento
ALFA Mod.3102. Configuração e conexão RS232
O cabo serial de comunicação com o
equipamento deve ser confeccionado e conectado ao equipamento, conforme mostrado
na Figura 03 a seguir.

Figura 03: Cabo de comunicação
seria RS232 conector DB9 e conexão na placa do equipamento.
A interface serial não possui nenhum
sinal de controle, e permite apenas a ligação ponto a ponto. A cada 250
milisegundos, é enviado um pacote de informações a uma taxa de 9600 bauds, 8
bits de dados, 1 stop-bit e sem paridade, contendo, dentre outros parâmetros,
informações do peso do objeto colocado sobre a balança.
O formato do pacote da mensagem enviada é, conforme apresentado na Figura 04 a
seguir, onde os bits estarão indicando sua função ativada quando apresentarem
nível lógico 1.

Figura 04: Formato do pacote de
dados enviado pelo equipamento.
|
Byte |
Definição |
|
STX |
Início do pacote de comunicação
(02 h); |
|
STATUS 1 |
bit 7 = 1
bit 6 - Alarme de sobrecarga
bit 5 - Alarme de saturação
bit 4 - Detecção de movimento de peso
bit 3 - Peso negativo (relativo a P4 até P0)
bit 2, 1 e 0 - Posição do ponto decimal em binário |
|
STATUS 2 |
bit 7 = 1
bit 6 = TR3
bit 5 = TR2
bit 4 = TR1
bit 3 = Set-point 3
bit 2 = Set-point 2
bit 1 = Set-point 1
Bit 0 = (livre); |
|
PESO+TARA |
P4 até P0: Peso apresentado no
visor do indicador (em ASCII);
T4 até T0: Peso relativo à tara (em ASCII); |
|
ETX |
Final do pacote de comunicação
(03 h); |
|
BCC |
Checksum dos dados enviados.
Cálculo de OU
EXCLUSIVO de STX A ETX inclusive; |
Os campos relativos aos set-points
dizem respeito a 3 saídas em coletor aberto, opto-isoladas, com capacidade de
300 miliamperes / 30 volts entre VI+ e VI- (alimentação externa). Estas saídas
são controladas por valores de set-points anteriormente programados, podendo ser
usadas para controles de dispositivos diversos do equipamento, como abertura e
fechamento de válvulas bem como ter seus valores lidos pelo computador.
Os campos TR1, TR2 e TR3 dizem respeito ao tipo de acionamento das travas. A
opção 0 (zero) configura a saída como acionamento sem trava, ou seja, ativa a
saída quando o peso líquido passa pelo ponto programado e desativa quando o peso
for menor que o programado, descontado a histerese.
Para maiores informações sobre set-points e travas deve-se consultar o manual do
fabricante.
Uma vez configurado o equipamento, feitas as devidas conexões, e conhecendo o
formato de dados dos pacotes transmitidos, passamos agora para a comunicação com
o computador e tratamento das informações lidas.
Comunicação via HyperTerminal
Após configuração dos parâmetros da balança, é preciso verificar se a mesma
está comunicando corretamente com o software padrão de comunicação do Windows, o
HyperTerminal. Para tanto, abra o HyperTerminal no Windows, seguindo em Iniciar>
Programas> Acessórios> Comunicação> HyperTerminal, e crie uma nova conexão
configurada como segue:
Porta Serial: Selecione a
porta serial onde o equipamento estiver conectado
Bits por segundo: 9600
Bits de Dados: 8
Paridade: Nenhum
Bits de Parada: 1
Controle de Fluxo: Nenhum
Utilize sempre o HyperTerminal como o
primeiro teste para garantir a efetividade da comunicação pois o mesmo é um
programa oficial da Microsoft que acompanha o Windows e, somente se os dados
estiverem chegando corretamente, passamos para a próxima etapa: integrar a
comunicação ao nosso aplicativo.
Uma vez concluída a conexão, após o pressionamento do botão de transmissão das
informações no indicador digital da balança, o HyperTerminal efetua a leitura da
string na porta serial e o resultado final será semelhante ao mostrado na Figura
05:

Figura 05: Comunicação com a
balança via HyperTerminal e string lida da porta serial.
A string lida no HyperTerminal
aparece segundo a interpretação em ASCII dos bytes enviados pela balança, de
acordo com o protocolo de comunicação. Portanto, não se espante se os dados
aparecerem truncados ou cheios de símbolos ilegíveis; esse é realmente o
resultado esperado, e a tradução e interpretação desta string ilegível para um
formato amigável é justamente o trabalho das funções que você terá que
implementar para tratar o protocolo. Outra forma de poupar todo o tempo de
implementação destas funções é usar a ALFA_Unit, que será apresentada nos
tópicos seguintes e já implementa tal tratamento.
A leitura das informações da balança por parte do HyperTerminal garante que o
hardware, as configurações de drivers e o software estão corretos, e que podemos
prosseguir com os testes do aplicativo demo. Caso contrário, se faz necessário a
verificação dos itens que estejam apresentando problemas antes de prosseguir.
Alguns dos problemas mais comuns encontrados até essa etapa são:
- A configuração dos parâmetros na balança está incorreta.
- A configuração dos parâmetros no HyperTerminal está incorreta.
- A placa de comunicação serial da balança está com problemas.
- A porta serial do computador está com problemas físicos ou de configuração de
driver no sistema operacional.
- A configuração sugerida dos parâmetros do HyperTerminal é a default e não
apresentou problemas nos modelos testados. Caso todos os itens anteriores
aparentem estar operando corretamente e ,mesmo assim, a comunicação não funcione
corretamente, entre em contato com o fabricante para maiores informações.
Aplicativo Demo
O aplicativo demo é um programa que faz a leitura da string enviada pela balança
e os entrega sob a forma de variáveis do Delphi, ao programador. Esta leitura e
tradução são implementadas utilizando as funções da ALFA_Unit. Esta unit
implementa internamente o tratamento completo das informações do protocolo
padrão de comunicação das balanças ALFA (conforme documento Protocolo de
Comunicação Serial Alfa Instrumentos versão 2.0), o que torna o processo como um
todo muito mais simples.

Figura 06: Demo de comunicação com
balança de pesagem ALFA utilizando a ALFA_Unit
O demo já vem previamente configurado
para os parâmetros descritos na Comunicação via HyperTerminal. Sendo assim,
basta clicar no botão Conectar para que ele passe a receber, assim como o
HyperTerminal, a string enviada via porta serial pela balança no campo Texto
Recebido.
A principal diferença no entanto, é que o demo apresenta separadamente no campo
Texto Tratado, as informações enviadas pela balança de uma forma legível e de
fácil interpretação.
Caso deseje recompilar o programa demo para alterar seus valores ou implementar
outras funcionalidades, é necessário copiar o arquivo ALFA_Unit.dcu para o
diretório Lib de instalação do Delphi, no caso do Delphi 6 por exemplo,
C:\Arquivos de programas\Borland\Delphi6\Lib
Agora vamos prosseguir, e saber como a comunicação, leitura e tradução da string
lida é implementada pelo demo.
Comunicação do Demo com a porta
serial
A comunicação com a porta serial para a leitura da string enviada pela balança
pode ser feita utilizando qualquer componente disponível para este fim. Existem
diversos componentes gratuitos para porta serial, disponíveis para download na
Internet, e você pode utilizar aquele que achar melhor, ou até mesmo desenvolver
seu próprio componente de comunicação.
No demo, utilizamos o componente gratuito TcommPortDriver para efetuar a
comunicação, por já estarmos familiarizados com o mesmo. O TCommPortDriver é um
componente gratuito para Delphi que reúne todo o código de baixo nível
necessário para o controle de portas seriais. Suas propriedades e métodos de
conexão e transmissão de dados possibilitam utilizar as portas seriais
facilmente.
Para instalar o componente TCommPortDriver, descompacte o arquivo
CommPortDriver.zip, que acompanha o demo em questão, na pasta desejada. No
Delphi, abra o arquivo ComDrv32.dpk na pasta de instalação do componente e
clique no botão Compile e depois em Install, para concluir a instalação.
Depois de configurados os parâmetros de comunicação descritos na Comunicação via
HyperTerminal, o demo implementa o evento OnReceiveData do componente
TCommPortDriver para fazer as chamadas das funções de tradução da ALFA_Unit,
toda vez que o componente receber dados pela porta serial, como mostrado a
seguir:

ALFA_Unit –Tratamento do protocolo
de comunicação da balança
No evento de OnReceiveData, descrito no código anterior, após fazer a leitura, a
string lida da porta serial é armazenada na variável Buffer. São feitas então
4(quatro) chamadas às funções de tratamento do protocolo presentes na ALFA_Unit.
São elas:
procedure
Trata_Buffer(Buffer: String; var STATUS1, STATUS2, Peso, Tara, CK_SUM: String);
procedure Trata_STATUS1(STATUS1: string; var display : string; var peso_negativo,
sensor_movimento, saturacao, sobrecarga: boolean);
procedure Trata_STATUS2(STATUS2: string; var TR1, TR2, TR3, SP1, SP2, SP3:
boolean);
Como veremos no tópico Protocolo de
Comunicação – ALFA, a string lida se divide em 4 bytes de dados principais que
contêm as informações enviadas pela balança: STATUS1, STATUS2, Peso+Tara e
CheckSum.
Então, a primeira chamada feita à função Trata_Buffer passa a string lida como
parâmetro, e serve para “quebrar” a string nessas 4(três) partes principais,
retornando as mesmas em 5 variáveis, STATUS1, STATUS2, Peso, Tara, CK_SUM
respectivamente.
Como também veremos a seguir no tópico Protocolo de Comunicação – ALFA, as
partes denominadas STATUS1 e STATUS2 devem então ser subdivididas, para que se
possa retirar delas as outras informações que elas contêm. Para isso são feitas
as chamadas às funções Trata_STATUS1 e Trata_STATUS2 passando como parâmetros as
partes respectivas, e recebendo como retorno as variáveis relativas aos dados
contidos dentro de cada uma dessas partes.
Pronto! Está feita, de forma simples e muito rápida, a comunicação e
interpretação dos valores transmitidos pela balança ALFA, através da chamada de
apenas 3(três) funções de tratamento, sem que fosse necessário conhecer o
tratamento de baixo nível do protocolo em questão. Logo podemos ressaltar como
vantagens na utilização a ALFA_Unit:
- Tratamento completo do protocolo ALFA com abstração total da camada de baixo
nível.
- Velocidade na implementação da comunicação com a balança.
- Facilidade na obtenção das informações transmitidas.
- Demo de comunicação com a balança.
- Fontes em Delphi totalmente comentados.
- FAQ de implementação e uso.
A ALFA possui no mercado uma infinidade de modelos de balanças, e muitas pessoas
se questionam sobre a compatibilidade da ALFA_Unit com esse ou aquele modelo. É
importante lembrar que a compatibilidade da ALFA_Unit não é função,
necessariamente do modelo, e sim do formato do pacote de dados transmitido
durante a comunicação e utilizado pelo modelo da balança que o desenvolvedor
tiver em mãos. Sendo assim, consulte o manual da sua balança e verifique o
formato de dados. Caso seja o mesmo apresentado aqui o produto será 100%
compatível!
Simulador de Balanças ALFA
Agora que já vimos como fazer a comunicação utilizando a balança,
apresentamos uma solução para uma das maiores dificuldades encontradas por
implementadores nesta área: a necessidade de ter uma balança disponível no
laboratório de desenvolvimento para fazer testes.
O simulador, mostrado na Figura 07, possibilita realizar os testes de
implementação do seu software para comunicação com balanças ALFA, sem que, para
isso, seja necessário ter a balança, bastando que este esteja sendo executado em
um outro computador conectado pela porta serial.

Figura 07: Simulador de Balanças
ALFA – Envio de informações
Na aba Configuração, podem-se
configurar todas as opções de valores transmitidos e, após clicar em Conectar, o
simulador, além de transmitir as informações pela porta serial, exibe no campo
String Tratada todos os parâmetros enviados e seus valores atribuídos, tais como
Peso, Tara e etc. Isso facilita as atividades de batimento entre informações
enviadas e recebidas pelo implementador, que tem todas as informações exibidas
em tela, ao contrário da própria balança que somente informa o peso no display.

Figura 08: Simulador de balanças
TOLEDO – Configurações do simulador
É importante ressaltar que algumas
funcionalidades como modo de transmissão contínua e sensor de movimento, não
estão implementadas nesta versão. Desta forma o simulador não envia dados
continuamente com intervalos de 250 milisegundos entre cada envio, como é feito
pela balança, sendo necessário efetuar o clique no botão de enviar para que as
informações sejam enviadas.
O cabo de comunicação para uso do simulador deve ser confeccionado conforme a
Figura 09 a seguir retirada do site
http://www.rogercom.com/PortaSerial/PortaSerial.htm (FONTE)

Figura 09: Cabo serial para uso
com o Simulador de Balanças ALFA conexão PC-PC
Protocolo de Comunicação – ALFA
Agora que já vimos como fazer a implementação da comunicação com a balança,
vamos aprofundar um pouco mais o nosso estudo, e entender a forma como as
informações são enviadas ao computador.
A balança transmite as informações para o computador obedecendo a um protocolo
de comunicação do fabricante definido no documento Protocolo de Comunicação
Serial Alfa Instrumentos versão 2.0. Este protocolo define as posições das
variáveis na seqüência binária transmitida, bem como os valores assumidos pelas
mesmas.
O formato básico da seqüência binária transmitida que será recebida pelo
computador é mostrado abaixo:
STX,STATUS1,STATUS2,P4,P3,P2,P1,P0,T4,T3,T2,T1,T0,ETX,BCC
Na seqüência binária mostrada, os bits, ou grupo de bits indicam configurações
ou estados da balança. Vamos agora analisar cada parte da seqüência e o seu
significado na comunicação.
STX – Start of Text
Assume o valor 02 em hexadecimal e é apenas um byte de sincronia da comunicação,
indicando o início de uma nova mensagem
STATUS1
Os bits 2, 1, 0 indicam a posição do ponto decimal em binário e podem assumir os
valores:
0 : Append(' Display = 1');
1 : Append(' Display = 0.1');
2 : Append(' Display = 0.01');
000 = x 1
011 = x 0.1
010 = x 0.01
O bit 3 indica peso negativo e pode assumir os valores:
0 = Peso Positivo
1 = Peso Negativo
O bit 4 indica deteção de movimento de peso e pode assumir os valores:
0 = Não há detecção de movimento de peso
1 = Há detecção de movimento de peso
O bit 5 indica alarme de saturação e pode assumir os valores:
0 = Não há alarme de saturação
1 = Háá alarme de saturação
O bit 6 indica alarme de sobrecarga e pode assumir os valores:
0 = Não há alarme de sobrecarga
1 = Háá alarme de sobrecarga
O bit 7 assume sempre valor 1 e deve ser desconsiderado
STATUS2
O bit 0 é livre e deve ser desconsiderado.
Os bits 3, 2, 1 indicam o estado do set-point e podem assumir os valores:
0 = Set-point desativado
1 = Set-point ativado
Os bits 3, 2, 1 indicam o estado das travas e podem assumir os valores onde em
TRx, a letra “x” indica a trava respectiva:
0 = Trava ao atingir o set-point TRx desligada
1 = Trava ao atingir o set-point TRx ligada
O bit 7 assume sempre valor 1 e deve ser desconsiderado
Px – Peso Líquido ou Bruto.
Os bits de P4 a P0 informam o exato peso apresentado no display do equipamento,
onde em Px, a letra “x” indica a posição do bit no nibble.
Tx – Tara.
Os bits de T4 a T0 informam a tara configurada na balança, onde em Tx, a letra
“x” indica a posição do bit no nibble.
.
ETX – End of Text
Assume o valor 03 em hexadecimal e é apenas um byte de sincronia da comunicação
indicando o fim de uma mensagem.
BCC – CheckSum
O checksum dos dados transmitidos é enviado pela balança, e com ele podemos
garantir a consistência dos dados recebidos. O byte de checksum é formado pelo
complemento de 2 da soma de todos os bytes recebidos, exceto o próprio BCC,
conforme mostrado na Figura 04.
Percebe-se então 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.
- 4 partes principais que contêm as informações enviadas pela balança, STATUS1,
STATUS2, Peso, Tara que devem ser tratadas separadamente para a obtenção das
informações transmitidas.
- 1 Byte de CheckSum, que pode ser usado para identificar erros na string lida
através da comparação dos valores.
O que é a ALFA_Unit?
A ALFA_Unit é um produto criado com base na experiência da TKS Software (
www.igara.com.br ) no
desenvolvimento de aplicativos, para integração com equipamentos de hardware de
terceiros, seguindo a linha de produtos já consagrados como, por exemplo, de
integração com balanças de pesagem TOLEDO.
O produto constitui uma solução que visa facilitar e agilizar o processo de
integração com balanças ALFA, com base na documentação fornecida pelo
fabricante, possibilitando que o desenvolvedor abstraia quase que completamente
a camada de comunicação com o equipamento, uma vez que, ao adquirir o produto, o
mesmo é fornecido com código fonte e todas as funcionalidades prontas para serem
utilizadas e importadas para o aplicativo final desejado.
Maiores informações sobre a ALFA_Unit em:
http://www.igara.com.br/produto.php?cod_produto=110
Maiores informações sobre o simulador de balanças ALFA em:
http://www.igara.com.br/produto.php?cod_produto=111
Considerações Finais
Esperamos com este artigo exemplificar o processo, esclarecer dúvidas e
abrir novas possibilidades aos leitores, facilitando a implementação de sistemas
para operação em conjunto com os diversos modelos de balança ALFA, bem como
facilitando a implementação 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, Professor do Departamento de Engenharia da
UNIFACS – Universidade Salvador, e desenvolvedor sócio da TKS Software -
Soluções de Automação e Softwares Dedicados.
Pode ser contatado em victory@igara.com.br
, ou através dos sites
www.igara.com.br –
www.igara.com.br/victory
Murilo Plínio é Engenheiro Mestrando em Mecatrônica, Técnico em
Informática e desenvolvedor da TKS Software - Soluções de Automação e Softwares
Dedicados.
Pode ser contactado em
muriloplinio@yahoo.com
|