Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
14-1102083278
Igor_thief
2004-12-03 17:14
2004.12.26
Delphi 2005 и RAVE


14-1102197978
olookin
2004-12-05 01:06
2004.12.26
Авангард - Ак Барс


6-1097421215
Delphis
2004-10-10 19:13
2004.12.26
Поиск сервера


1-1102661392
Илья
2004-12-10 09:49
2004.12.26
Пустая строка


4-1100009768
Anonimus
2004-11-09 17:16
2004.12.26
Миниатюра как для файлов Фотошопа





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский