Привет, мне нужно найти скорость передачи и другие настройки для последовательного порта. Оглядываясь на веб-интерфейс, похоже, что я должен использовать GetCommConfig. Это возвращает запись TCommConfig с тем, что Я предполагаю, что мне нужны данные. Проблема в том, что функция I wote возвращает неправильные значения.Найдите настройки последовательного порта в Delphi
Код выглядит так, как будто он работает, но скорость в бодах всегда равна 1200, что выглядит в диспетчере устройств Windows (и изменении настроек порта).
Я попытался назвать его так:
ComPort('com1');
ComPort('COM1');
ComPort('COM1:');
ComPort('COM4');
ComPort('COM9');
первый 4 действительны, но вернуть 1200 и пятый является недействительным и возвращает 0
function ComPort(l_port:String):TCommConfig;
{Gets the comm port settings}
var
ComFile: THandle;
PortName: array[0..80] of Char;
size: cardinal;
CommConfig:TCommConfig;
begin
FillChar(Result, SizeOf(TCommConfig), 0);//blank return value
try
StrPCopy(PortName,l_port);
ComFile := CreateFile(PortName,GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,0{ FILE_ATTRIBUTE_NORMAL},0);
try
if (ComFile <> INVALID_HANDLE_VALUE) then
begin
FillChar(CommConfig, SizeOf(TCommConfig), 0);//blank record
CommConfig.dwSize := sizeof(TCommConfig);//set size
//CommConfig.dcb.DCBlength := SizeOf(_dcb);
size := sizeof(TCommConfig);
if (GetCommConfig(ComFile,CommConfig,size)) then
begin
Result := CommConfig;
end;
end;
finally
CloseHandle(ComFile);
end;
except
Showmessage('Unable to open port ' + l_port);
end;
end;
Stepping через код, первый 4 всегда попадает в строку Результат: = CommConfig;, поэтому GetCommConfig перенастраивает действительный код, поэтому мне что-то не хватает.
Я судимое Verious другие вещи, такие как настройка длины записи ДСВ, но все они имеют один и тот же результат, как и в бодах 1200.
Кто-нибудь знает, где я неправильно?
Вы пробовали GetCommState? http://msdn.microsoft.com/en-us/library/aa363260%28VS.85%29.aspx – stukelly
Да, тот же результат, насколько я могу судить, GetCommConfig использует GetCommState для заполнения записи DCB. – Re0sless