Форум: "WinAPI";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
ВнизНе могу получить нули через COM-порт Найти похожие ветки
← →
oleg_p (2004-11-10 16:30) [0]Работаю в Delphi. Нужно получить двоичные данные с устройства через com-порт. Заполняю TDCB, признак dcb_NullStrip(fNull) стоит в 0. При чтении из порта получаю все данные, кроме символа NUL (эти символы просто пропускаются). Точно знаю, что внешнее устройство их передаёт. Облазил разные форумы-ничего конкретного на эту тему. Помогите !!!
Так я заполняю DCB:
FillChar(dcb,sizeOf(dcb),0);
dcb.DCBlength := sizeOf(dcb);
dcb.Flags := dcb_Binary or dcb_RtsControlEnable;
dcb.BaudRate := Win32BaudRates[FComPortBaudRate];
case FComportHwHandshaking of
hhNONE : ;
hhRTSCTS:
dcb.Flags := dcb.Flags or dcb_OutxCtsFlow or dcb_RtsControlHandshake;
end;
case FComportSwHandshaking of
shNONE : ;
shXONXOFF:
dcb.Flags := dcb.Flags or dcb_OutX or dcb_Inx;
end;
dcb.XonLim := FComportInputBufferSize div 4;
dcb.XoffLim := 1;
dcb.ByteSize := 5 + ord(FComportDataBits);
dcb.Parity := ord(FComportParity);
dcb.StopBits := ord(FComportStopBits);
dcb.XonChar := #17;
dcb.XoffChar := #19;
← →
Reindeer Moss Eater © (2004-11-10 16:41) [1]Дампануть DCB после заполнения на диск и убедиться что флаг действительно сброшен.
← →
wal © (2004-11-10 16:42) [2]В флагах есть такая штука, как
DWORD fNull: 1; // enable null stripping
Проверь на всякий случай.
С уважением.
← →
Reindeer Moss Eater © (2004-11-10 16:56) [3]В "родном" windows.pas нет многих констант для установки флагов в DCB.
Значит они объявлены в пользовательских модулях и могут иметь ошибки.
Да и результат SetCommState может быть False.
← →
oleg_p (2004-11-11 08:22) [4]После SetCommState сделал GetCommState - DCB именно такой, какой я установил (fNull сброшен). Константы для флагов проверял. Результат SetCommState - True. Проблема остается...
← →
oleg_p (2004-11-11 08:37) [5]...и ещё вопрос: Почему описание DCB в Windows SDK help и в файле windows.pas различаются; как SetCommState понимает какую структуру ей дают на вход ?
← →
Reindeer Moss Eater © (2004-11-11 08:43) [6]Ничем они не отличаются.
Надо внимательно рассматривать описание структуры в SDK.
← →
Reindeer Moss Eater © (2004-11-11 08:43) [7]Чему равно выражение DCB.Flags and $00000800 ?
Что возвращает SetCommState ?
← →
oleg_p (2004-11-11 09:12) [8]DCB.Flags and $00000800 = 0
Я работаю с Flags = 4097($1001). SetCommState возвращает True в LongBool, то есть 1 в DWORD.
← →
Reindeer Moss Eater © (2004-11-11 09:45) [9]Значит либо девайс нули не шлет, либо тебе только кажется, что ты не получаешь нули из порта.
← →
oleg_p (2004-11-11 11:21) [10]Как не стыдно признать, но ты прав - компонент, который я использовал (скачал из сети) читал полученные символы так:
ReadFile(.....);
temp := temp + PChar(Buffer);-здесь символ #0 и пропадал
а я так надеялся на его надёжность...
Спасибо тебе Reinder Moss Eater !!!
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.04 c