Главная страница
    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.035 c
4-1100260115
Sergio
2004-11-12 14:48
2004.12.26
Перехват нажатие клавиш с Word-а


4-1100093431
oleg_p
2004-11-10 16:30
2004.12.26
Не могу получить нули через COM-порт


1-1102588333
Tornado
2004-12-09 13:32
2004.12.26
Форма в DLL


14-1102492845
Суслик
2004-12-08 11:00
2004.12.26
Delphi 2005 и никаких клиент-серверов


1-1102919256
dream
2004-12-13 09:27
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский