Привет! Мне нужно найти скорость передачи в бодах и другие настройки для последовательного порта. Глядя в Интернете, похоже, что я должен использовать GetCommConfig , Это возвращает запись TCommConfig с тем, что я Предположим, это данные, которые мне нужны. Проблема в том, что функция, которую я использую, возвращает неправильные значения.
Приведенный ниже код выглядит так, как будто он работает, но скорость передачи данных всегда равна 1200, что неправильно в диспетчере устройств Windows (и в изменении настроек порта).
Я пытался назвать это так:
ComPort('com1');
ComPort('COM1');
ComPort('COM1:');
ComPort('COM4');
ComPort('COM9');
первые 4 действительны, но возвращают 1200, а 5-й недействителен и возвращает 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;
Шагая по коду, первые 4 всегда попадают в строку Результат: = CommConfig; , поэтому GetCommConfig перенастраивает правильный код, поэтому я должен что-то упустить.
Я пробовал много других вещей, таких как установка длины записи dcb, но все они имеют тот же результат, что и 1200 бод.
Кто-нибудь знает, где я иду не так?