Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-01-2010
Avatar de BPL
BPL BPL is offline
Miembro
 
Registrado: ene 2009
Posts: 47
Poder: 0
BPL Va por buen camino
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...???

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 ;

Última edición por rgstuamigo fecha: 18-02-2010 a las 20:45:14. Razón: Estética de código
Responder Con Cita
  #2  
Antiguo 07-01-2010
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.168
Poder: 20
rretamar Va camino a la famarretamar Va camino a la fama
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 !
__________________
Lazarus Codetyphon : Desarrollo de aplicaciones Object Pascal, libre y multiplataforma.
Responder Con Cita
  #3  
Antiguo 08-01-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.272
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 17-02-2010
Keiso Keiso is offline
Miembro
 
Registrado: ago 2004
Ubicación: Bolivia
Posts: 20
Poder: 0
Keiso Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Socket en puerta 210 y 211 Paulao Varios 0 22-08-2008 16:39:47
Puerta Serial Paulao Varios 2 28-03-2008 13:37:33
Predicadores de puerta a puerta. marcoszorrilla La Taberna 5 01-09-2007 19:04:26
Lectura del serial de un disco duro. mlara Windows 4 22-12-2004 17:11:11
Necesito enviar datos de mi aplicacion a una puerta serial..como?? Serbok Varios 1 19-11-2003 22:26:06


La franja horaria es GMT +2. Ahora son las 16:23:26.


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
Copyright 1996-2007 Club Delphi