Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema con balanza digital (https://www.clubdelphi.com/foros/showthread.php?t=85312)

philadelfia2006 28-02-2014 04:54:46

Problema con balanza digital
 
Buena noche,
de antemano agradezco la colaboración que me puedan brindar, tengo una aplicación para una pequeña tienda y me han pedido que la aplicación reciba el peso de una balanza digital, por suerte encontré el manual, la balanza en una CAS modelo AD-1 y dice lo siguiente: FOR THE SERIAL INTERFACES
A. 1 THE COMMUNICATION AGREEMENTS
l.BAUD RATE -> 9,600 EPS
2.DATA BIT -> 8 BIT
3.STOP BIT -> 1 BIT
4.PARITY BIT -> NO
5.COMMUNICATION LEVEL -> RS-232C LEVEL
6.DATA FORMAT -> ASCII
7.THE COMMAND DEFINITIONS
7-1."ENQ" -> 05H 7-7. "EOT" -> 04H
7-2."ACK" -> 06H 7-8. "DC1" -> 1IH
7-3."NAK" -> 15H 7-9. "DC2" -> 12H
7-4."SOH" -> 01H 7-10."DC3" -> 13H
7-5."STX" -> 02H 7-11. "DC4" -> 14H
7-6."ETX" -> 03H

A. 2 THE PROTOCOL
SCALE SIDE
COMPUTER SIDE
<-------"ENQ(05H)"---------- 1. computer sends "ENQ"
2. scale sends "ACK" --------"ACK(06H)"--------->
cuando, no hay respuesta
desde el computador en 3
segundos SCALE anula esta
solicitud
<--------------------------- 3. computer sends "DC1" or "DC2"
"DC1" para el dato del peso
"DC2" para todos los datos
4. SCALE sends data blocks ------------------------------
------------------------------

estoy utilizando el ejemplo del componente comport para obtener el peso
configuro los parametros de port, baud rate, data bits, stop bits, partity como se describe arriba 'COM1', 9600, 8, 1, NONE
con este procedimiento abro el puerto
procedure TForm1.Button_OpenClick(Sender: TObject);
begin
if ComPort.Connected then
ComPort.Close
else
ComPort.Open;
end;


con este procedimiento quiero pedir el peso pero no obtengo resultado
procedure TForm1.btnMandarComandoClick(Sender: TObject);
begin
ComPort.WriteStr(#5); //es el codigo ascii de ENQ
Sleep(2000);
ComPort.WriteStr(#17); //es el codigo ascii de DC1
end;



con este procedimiento debo leer lo que llega del puerto
procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
var
Str: String;
begin
ComPort.ReadStr(Str, Count);
edPeso.Text := Str;
end;

nota: cuando abro el puerto y la pesa está en ceros 0.00 y coloco algún objeto en la balanza ese valor lo logro capturar en el evento onrxchar, pero si deseo obtener nuevante otro peso, la balanza debe volver a cero 0.00, y eso no es practico porque si lo que deseo es recalcular el peso sin bajar los artículos ya no puedo por que la verdad no entiendo muy bien el protocolo,

Casimiro Notevi 28-02-2014 09:02:24

Haz una búsqueda por "balanza", creo que hace un par de días se trató un tema similar, aunque encontrarás otros parecidos.

Por cierto, no olvides poner el código fuente entre las etiquetas pertienentes, ejemplo:



Gracias :)

newtron 28-02-2014 09:17:12

Hola.

Aparte de lo que te dice Casimiro te comento que yo uso un componente que igual te resulta más fácil manejar, el CommPortDriver, que lo abres y está continuamente recibiendo lo que la balanza envía. También, claro, es posible que no tengas la balanza configurada para enviar datos cosa que tendrías que comprobar.

Saludos

Neftali [Germán.Estévez] 28-02-2014 10:12:20

Te aconsejo (y ya lo he hecho tras veces) olvidarte en principio de componentes y primero intentar ver si la báscula se comunica contigo. Para eso es muy útil el Hyperterminal de Windows. Una vez consigas comunicarte y sepas que esa comunicación es correcta, ya te pelearás con uno u otro componentes.

http://www.clubdelphi.com/foros/show...=hyperterminal
http://www.clubdelphi.com/foros/show...=hyperterminal
http://www.clubdelphi.com/foros/show...=hyperterminal

Y este, aunque el aparato es diferente, la comunicación es similar.
http://www.clubdelphi.com/foros/showthread.php?t=60871

philadelfia2006 02-03-2014 04:24:47

buena noche, probé con el hiperterminal escribiendo lo siguiente enq, y alt5 que es el código ascii del carácter de control(enq), pero sigo sin obtener el peso de la balanza, solo me aparece cuando la balanza está en cero y cambia a cualquier otro valor, pero si quiero pedirle el peso con el comando que dice el manual, la balanza no me responde.


La franja horaria es GMT +2. Ahora son las 11:29:52.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi