Ver Mensaje Individual
  #3  
Antiguo 25-08-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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:

Código Delphi [-]
 unit URS232;
 
 interface
 
 uses
     Windows, SysUtils;
 
 type
     TRS232 = class
     private
     sPuerto: string;
     hCommFile: THandle;
     public
     function LeerBuffer: string;
     procedure EscribirBuffer(lsMensaje: string);
     constructor Create(lsPuerto: string; liBanda: Cardinal;
       liByteSize, liParidad, liBitParada: Byte);
     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.

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.
Archivos Adjuntos
Tipo de Archivo: zip URS232.zip (1,1 KB, 354 visitas)
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 25-08-2005 a las 15:23:27. Razón: (actualización)
Responder Con Cita