Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.26;
Скачать: CL | DM;

Вниз

Не могу получить нули через 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 вся ветка

Текущий архив: 2004.12.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
1-1103032756
mega
2004-12-14 16:59
2004.12.26
раскрытие MenuItem


14-1102401897
Кудесник
2004-12-07 09:44
2004.12.26
Существуют ли мелкие бесперебойники для питания свичей?


3-1101453999
gantoxa
2004-11-26 10:26
2004.12.26
Подскажите, как определить тип поля и его длину


6-1097488022
Кодер
2004-10-11 13:47
2004.12.26
Сокеты и многопоточность


9-1093018611
Ландграф Павел
2004-08-20 20:16
2004.12.26
Помогите с геометрией 9-го класса