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...???
ojala alguien me ayude.....
abajo estan todas las rutinas obvio en delphi
Código Delphi
[-]Function ConfigurarPuerto:Boolean ;
var
NombrePuerto : String ;
ValDCB : DCB ;
dwError : DWORD ;
v_Result : Boolean ;
Begin
Result := False ;
Windows.CloseHandle(HCom) ;
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 ;
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 ;