
21.06.2012, 08:12
|
 |
Модератор
|
|
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
|
|
Вот, могу поделиться, cам писал и ЭТО работает:
Код:
function TCOMThread.OpenPort: boolean;
var
OldDCB:TDCB;
Timeouts:TCommTimeouts;
begin
Result:=False;
FComHandle:=CreateFile(PChar('\\.\'+FCOM), GENERIC_READ or GENERIC_WRITE,
0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (FComHandle=INVALID_HANDLE_VALUE) or (FComHandle=0) then
Exit;
if not(Windows.GetCommState(FComHandle,OldDCB)) then
Exit;
OldDCB.BaudRate:=19200;
OldDCB.Parity:=NOPARITY;
OldDCB.ByteSize:=8;
OldDCB.StopBits:=ONESTOPBIT;
if not(Windows.SetCommState(FComHandle,OldDCB)) then
Exit;
if Not SetupComm(FComHandle,ComBufferSize,ComBufferSize) then
Exit;
if GetCommTimeouts(FComHandle,Timeouts) then
begin
Timeouts.ReadIntervalTimeout:=MAXWORD;
Timeouts.ReadTotalTimeoutMultiplier:=0;
Timeouts.ReadTotalTimeoutConstant:=0;
Timeouts.WriteTotalTimeoutMultiplier:=0;
Timeouts.WriteTotalTimeoutConstant:=0;
if not SetCommTimeouts(FComHandle,Timeouts) then
Exit;
end
else
Exit;
if not(PurgeComm(FComHandle, PURGE_TXABORT or PURGE_RXABORT or PURGE_TXCLEAR or PURGE_RXCLEAR)) then
Exit;
EscapeCommFunction(FComHandle, CLRRTS);
if not SetCommMask(FComHandle, EV_RXCHAR) then
Exit;
Result:=True;
AddToLog('system','PORT IS OPEN');
end;
здесь:
переменные
Код:
FCOMHandle:THandle;
FCOM:string; //строка с именем порта "COM1" например
константа
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.
Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
|