Форум: "WinAPI";
Текущий архив: 2005.10.30;
Скачать: [xml.tar.bz2];
ВнизРабота с COM портом, не пойму где ошибка. Найти похожие ветки
← →
_silver © (2005-08-23 22:35) [0]При асинхронной работе программа читает не все данные, которые посылает устройство.
Т.е. посылается, например:
xxx
yyy
Программа читает только xxx, а yyy нет. Т.е. такое ощущение, что ClearCommError считает, что переход на новую строку есть конец передаваемых данных. При этом при синхронном режиме читается всё полностью.
Вот код:
procedure TReadThread.Execute;
var
ComStat : TComStat;
dwMask, dwError : DWORD;
begin
FreeOnTerminate := True;
while not Terminated do
begin
if not WaitCommEvent(FComPort.FPort, dwMask, @FOverRead) then
begin
if GetLastError = ERROR_IO_PENDING then
WaitForSingleObject(FOverRead.hEvent, INFINITE)
else
raise EComPortError.Create("Error waiting port " + FComPort.PortName+ " event");
end;
if not Terminated then
if not ClearCommError(FComPort.FPort, dwError, @ComStat) then
raise EComPortError.Create("Error clearing port " + FComPort.PortName);
FRead := ComStat.cbInQue;
if FRead > 0 then
begin
if dwError = 0 then
begin
FError := dwError;
Synchronize(DoOnError);
end;
if not ReadFile(FComPort.FPort, FBuf, FRead, FRead, @FOverRead) then
raise EComPortError.Create("Error reading port " + FComPort.PortName);
Synchronize(DoRead);
end;
end; {while}
end;
ps
Устройство посылаеи эхо ответ на комманды посылаемые ему. Т.е. если ему послать xxx оно вернёт
xxx //эхо ответ
yyy //это сам ответ устройства.
Так вот, yyy как раз не читается. dwError, при этом, равно 0, но GetLastError возвращает то, что ошибок нет.
Помогите, где я не прав?
← →
Defunct © (2005-08-24 00:44) [1]> Помогите, где я не прав?
очевидно устройство не формирует yyy ответ на запрос xxx.
попробуйте послать устройству вместо xxx - zzz.
← →
_silver © (2005-08-24 09:04) [2]Defunct © (24.08.05 0:44) [1]
очевидно устройство не формирует yyy ответ на запрос xxx.
> При этом при синхронном режиме читается всё полностью.
← →
Reindeer Moss Eater © (2005-08-24 15:03) [3]Не понятно почему не проверяешь результат функции ожидания.
Непонятно что делает DoRead.
После ReadFile не проверяется сколько именно байт считано.
И так далее.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.10.30;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.038 c