FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Ayudemos a utilizar Comport (Rs232)
Hola a todos
Estoy tratando de utilizar los componentes Comport para la captura de datos de una balanza electronica me he encontrado con una serie de problemas he revisado los ejemplos que traen estos componentes funcionan de maravilla pero aun no consigo hacer lo mismo con mis programas. Ejemplo utilizo el ejemplo Miniterm el cual es exactamente lo que quiero hacer pero en el evento de captura si no incluto un showmessage() el valor que envia no es el correcto he estado revisando y puede ser un problema de la cadena que envia el dato (estoy leyendo un articulo que encontre a la manera de tratar cierto tipo de cadenas ). Espero que personas con un mayor conocimiento puedan apoyar con un granito de arena al fin de poder saber todos como se deben utilizar estos o otros componetes de forma practica En espera de sus respuesta y sabiendo de su alto sentido de ayuda y apoyo quedo muy agradecido Nota : codigo que utilizo en la captura del dato Código PHP:
__________________
IVAND |
#2
|
||||
|
||||
Colaboremonos entonces...
Bueno, te cuento una buena.. tengo alguito de experiencia haciendo software para basculas, me facilitaria de harto saber si te estas comunicando directamente con la bascula o estas usando un indicador como intermediario...
Yo he hecho la mayoria de estos software en Delphicito y el Java, pero para serte sincero, nunca use ese componente que mencionas...(commport) ... Mejor te sale hacer una cosa, create tu propia libreria de captura de datos por el puerto Serial usando las instrucciones del Window (SDK)... a continuacion te mando el codigo de la unidad que podrias usar... Código:
unit URS232; interface uses Windows, SysUtils; type TRS232=class private hCommFile : THandle; sPuerto : String; public constructor Create(lsPuerto: String; liBanda:Cardinal; liByteSize, liParidad, liBitParada:Byte); function LeerBuffer: string; procedure EscribirBuffer(lsMensaje:string); end; implementation { TRS232 } constructor TRS232.Create(lsPuerto: String; liBanda:Cardinal; liByteSize, liParidad, liBitParada:Byte); var CommTimeouts : TCommTimeouts; CommConfig: TCommConfig; sizeConfig : Cardinal; begin sPuerto := lsPuerto; hCommFile := CreateFile(PChar(sPuerto), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); with CommTimeouts do begin ReadIntervalTimeout := 0; ReadTotalTimeoutMultiplier := 0; ReadTotalTimeoutConstant := 300; WriteTotalTimeoutMultiplier := 0; WriteTotalTimeoutConstant := 200; end; if not SetCommTimeouts(hCommFile, CommTimeouts) then raise Exception.Create(Problemas estableciendo CommTimeouts); GetCommConfig(hCommFile, CommConfig, sizeConfig); with CommConfig do begin dcb.BaudRate := liBanda;//9600;//38400;//<-- Se comunica a esa velocidad ???? dcb.ByteSize := liByteSize; //8; dcb.Parity := liParidad;//NOPARITY; //EVENPARITY; dcb.StopBits := liBitParada;; end; if not SetCommConfig(hCommFile, CommConfig, sizeConfig) then raise Exception.Create(Problemas al querer establecer la configuracion); end; procedure TRS232.EscribirBuffer(lsMensaje: string); var NumberWritten:dword; begin if hCommFile = INVALID_HANDLE_VALUE then raise Exception.Create('No se puede enviar los datos'); WriteFile(hCommFile, PChar(lsMensaje)^, Length(lsMensaje), NumberWritten, nil); end; function TRS232.LeerBuffer: string; var sTmp:string; c1:integer; chBuffer:array[0..255] of char; NumberOfBytesRead : dword; begin if hCommFile=INVALID_HANDLE_VALUE then exit; if not ReadFile (hCommFile, chBuffer, sizeof(chBuffer), NumberOfBytesRead, Nil) then raise Exception.Create('Imposible leer datos desde el puerto'); for c1:= 0 to NumberOfBytesRead - 1 do sTmp:= sTmp+chBuffer[c1]; result:=sTmp; end; end. Espero te sirva de ayuda cumpa, ami me funca... claro si es que estas trabajando en delphicito... ... cualquier cosa mantengamonos en contacto... Atte.. Jobev Lee |
#3
|
||||
|
||||
Hola,
Me he tomado la libertad de editar un tanto la unidad que ha publicado Jobev Lee para que esta compile (faltaban simplemente un par de comillas simples en alguna que otra cadena de caracteres) y para mostrarla dentro de las etiquetas DELPHI, tan oportunas en este caso como útiles para quien quiera echar un vistazo al código de la unidad que a continuación copio:
Actualización: Si a alguien le place, puede descargarse la unidad que puede verse más arriba en el archivo que se adjunta a este mensaje. Última edición por dec fecha: 25-08-2005 a las 15:23:27. Razón: (actualización) |
#4
|
|||
|
|||
Atentos como siempre
Gracias a todos x colaborar estoy probando la unidad que enviaron y la probare .. les comento que el dato es tomado directamente de la bascula en modo ininterrumpido es decir siempre la balanza esta enviado el dato por lo que se muestra en el display de esta se debe reflejar en la pantalla de mi pc Nuevamente gracias Espero que mas colaboren con nuevas ideas para avanzar todos De antemano, Gracias
__________________
IVAND |
#5
|
||||
|
||||
Ups.. gracias. cumpa por la correcciòn... jejeje... pero vale.....
|
#6
|
|||
|
|||
Gracias a la invalorable ayuda de mi amigo Fidel por fin he utilizado correctamente los componentes Comport ... con el permiso otorgado por Fidel cualquier compañero que necesite el codigo puede pedirmelo con gusto se los enviare
Atentamente, Iván Dávila
__________________
IVAND |
|
|
|