![]() |
|
#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; Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |