|
constructor TSerialPortS.Create(AOwner: TComponent);
begin
inherited;
FActive:=false;
GetCommState(port,dc);
dc.DCBlength:=SizeOf(DCB);
dc.Flags:=1;//12305;
dc.wReserved:=0;
dc.ByteSize:=8;
dc.Parity:=0;
dc.StopBits:=0;
dc.XonChar:=#17;
dc.XoffChar:=#19;
dc.ErrorChar:=#0;
dc.EofChar:=#0;
dc.EvtChar:=char(13);
dc.wReserved1:=65;
timeouts.ReadIntervalTimeout:=200;//3
timeouts.ReadTotalTimeoutMultiplier:=200;//5
timeouts.ReadTotalTimeoutConstant:=1000; //5
timeouts.WriteTotalTimeoutMultiplier:=300;
timeouts.WriteTotalTimeoutConstant:=300;
end;
function TSerialPortS.OpenPort: boolean;
begin
port := CreateFile(PChar(FPortName), GENERIC_READ or GENERIC_WRITE,
0, nil, OPEN_EXISTING,0, 0);
if port = INVALID_HANDLE_VALUE then
begin
OpenPort:= false;
if Assigned(FOpenPortError) then FOpenPortError(self)
else raise Exception.Create('Îøèáêà ïðè îòêðûòè ïîðòà');
exit;
end;
if FBaud=0 then
begin
if Assigned(FBaudSetError) then FBaudSetError(self)
else
raise Exception.Create('Íåâåðíûå óñòàíîâêè ñêîðîñòè ïîðòà!');
OpenPort:=false;
exit;
end;
dc.BaudRate:= FBaud;
if not SetCommState(port, dc) then
begin
CloseHandle(port);
OpenPort:= false;
if Assigned(FDCBSetError) then FDCBSetError(self)
else
raise Exception.Create('Error in DCB struct');
exit;
end;
if not SetCommTimeouts(port,timeouts) then
begin
CloseHandle(port);
OpenPort:= false;
if Assigned(FTimeOutSetError) then FTimeOutSetError(self)
else
raise Exception.Create('Error in CommTimeouts struct');
exit;
end;
if not PurgeComm(port,(PURGE_TXABORT or PURGE_RXABORT or PURGE_TXCLEAR or PURGE_RXCLEAR))
then begin
CloseHandle(port);
OpenPort:= false;
if Assigned(FTimeOutSetError) then FTimeOutSetError(self)
else
raise Exception.Create('PurgeComm Error');
exit;
end;
OpenPort:= true;
FActive := true;
end;
E-mail: info@telesys.ru