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
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; dcb.ByteSize := liByteSize; dcb.Parity := liParidad; 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.