![]() |
|
|
|
|
#1
|
||||
|
||||
|
Здравствуйте, не могу открыть COM порт.
Вот это мне не подходит: Код:
var f : file of byte; ... AssignFile(f, 'COMx'); Rewrite(f); Write(f, ....); CloseFile(f); Код:
FHandle := CreateFile('COMx', GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
// FHandle = INVALID_HANDLE_VALUE |
|
#2
|
||||
|
||||
|
-какую ошибку возвращает CreateFile?
-'\\.\COM0' |
|
#3
|
||||
|
||||
|
Код:
CreateFile('\\.\COM5', GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);
ShowMessage(SysErrorMessage(GetLastError())); // Не удается найти указанный файл |
|
#4
|
||||
|
||||
|
Вот, могу поделиться, 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" например Код:
ComBufferSize = 2048; |