Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Lectura Puerta Serial--- (https://www.clubdelphi.com/foros/showthread.php?t=65701)

BPL 07-01-2010 21:49:37

Lectura Puerta Serial---
 
hola a todos....

primero le cuento cual es mi problema ;
tengo un balanza la cual esta conectada al pc por el puerto serial,
Con las rutinas que estan a continuacion logro configurar leer y limpiar el puerto, pero existen ocaciones en que no lee del todo bien, por ejemplo
se esta pesando un bulto de 14.5 y trae 714.5 o
14.0 y trae 714 o
25.5 y trae 985825.5
que podria estar pasando que no siempre me lee bien el puerto...???:confused:

ojala alguien me ayude.....
abajo estan todas las rutinas obvio en delphi

Código Delphi [-]
Function ConfigurarPuerto:Boolean ;
var
NombrePuerto : String ; // nombre puerto elegido
ValDCB : DCB ; // estructura en api de windows para comunicacion
dwError : DWORD ; // Captura el nºerror devuelto x GetlastError()
v_Result : Boolean ; // que captura culequier error.
Begin
Result := False ;
Windows.CloseHandle(HCom) ; // cierre el puerto.
HCom := Windows.CreateFile(pChar('Com1'),GENERIC_READ or
GENERIC_WRITE,0,nil,OPEN_EXISTING,0,0) ;
if (HCom=INVALID_HANDLE_VALUE) then begin 
dwError := GetLastError() ;
ShowMessage('Error al configurar el puesto:'+IntToStr(dwError)) ;
Exit ;
end ;
Result := GetCommState(HCom,ValDCB) ; 
if not result then begin
ShowMessage('el estado del puerto no es corecto o eta desabilitado');
exit ;
end ;
ValDCB.BaudRate := 9600 ;
ValDCB.ByteSize := 7 ;
ValDCB.Parity := 2 ;
ValDCB.StopBits := 0 ;
 
{seteo la estructura para configurar el puerto}
if not SetCommState(HCom,ValDCB) then begin
ShowMessage('no es posible configurar el puerto con estos valores');
Exit ;
end ;
Result := True ;
End ;
otra para leer

Código Delphi [-]
Function LeerPuerto :String ;
Var
Cadena : String ; 
TamanoLectura : DWORD ; 
EstadoLectura : COMSTAT ; 
Error : DWORD ; 
v_Result : Boolean ;
Begin
Cadena := '' ;
v_Result:= False ;
if windows.ClearCommError(Hcom,Error,@EstadoLectura) then begin
if (EstadoLectura.cbInQue>0) Then begin
SetLength(Cadena,(EstadoLectura.cbInQue+1)) ; 
v_Result := Windows.ReadFile(hCom,Pchar(Cadena) 
^,EstadoLectura.cbInQue,TamanoLectura,nil); 
end ;
end ;
if v_Result Then begin
SetLength(Cadena,TamanoLectura);
Result := LimpiarCadena(Cadena) ;
end ;
end ;
y limpiar

Código Delphi [-]
 
Function LimpiarCadena(Bus : String):String ;
Var v_j : Integer ;
Bus2 : String ;
Begin
Bus := UpperCase(Bus) ;
For v_j := 1 To Length(Bus) do Begin
if Bus[v_j] in ['0','1','2','3','4','5','6','7','8','9'] then
Bus2 := Bus2 + Bus[v_j]
else if Bus[v_j]='.' then
Bus2 := Bus2 + Bus[v_j]
else if Bus[v_j]= 'K' then Break ;
end ;
Result := Bus2;
Bus := '' ;
Bus2 := '' ;
End ;

rretamar 07-01-2010 23:03:59

Hola.
Mi humilde consejo es que no pierdas más tiempo intentando acceder al puerto "a pelo" y uses los componentes Async Pro, que son una gozada y además se trata de software libre. Se pueden descargar aquí:

http://sourceforge.net/projects/tpapro/

Valen la pena; es impresionante la cantidad de cosas que se pueden hacer y la excelente documentación que los acompaña. Cualquier consulta sobre estos componentes, no dudes en hacerla aquí.

Saludos ! :)

Neftali [Germán.Estévez] 08-01-2010 10:14:28

Coincide con rretamar.
Salvo que debas hacerlo así de forma obligatoria, es mejor que utilices algun componentes. Los que te ha propuesto él o en Torry puedes encontrar algunos más.

Por favor, utiliza TAG's cuando coloques código Delphi.

Keiso 17-02-2010 21:25:20

Tal vez deberías conseguir la documentración de la balanza, ya que suelen tener un protocolo de comunicaciones en el cual explica como procesar los datos que se envían a la PC mediante el puerto serie; algunos bits son la escala, otros son comandos, sobrecarga, signo, etc.


La franja horaria es GMT +2. Ahora son las 18:59:15.

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