Главная страница
    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.46 MB
Время: 0.036 c
14-1102089960
Шишкин Илья
2004-12-03 19:06
2004.12.26
Почта


4-1100285274
AndroiD
2004-11-12 21:47
2004.12.26
дескриптор приложения


14-1102590544
DiamondShark
2004-12-09 14:09
2004.12.26
Радикальное решение.


1-1102643108
Oitxr
2004-12-10 04:45
2004.12.26
Командная строка


4-1099640478
Boban
2004-11-05 10:41
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский