Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: COM-port  (Прочитано 7464 раз)
0 Пользователей и 1 Гость смотрят эту тему.
flare
Гость
« : 22-12-2003 10:40 » 

Кто-нить знает, почему при чтении из СОМ порта съедаются байты, в которых записан 0х00?
флаг fNull в структуре DCB равен false
могет быть еще что-то влияет на процесс чтения?
Записан
Lex
Специалист

ru
Offline Offline

WWW
« Ответ #1 : 22-12-2003 10:46 » 

посмотри чему равен флаг fBinary. должен быть 1
Записан

Megabyte be with you!
flare
Гость
« Ответ #2 : 22-12-2003 10:48 » 

fBinary==true
Записан
GlukSoft
Главный специалист

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 22-12-2003 11:20 » 

flare, скинь кусок кода по инициализации порта, в частности DCB.
Записан

Fatal error C1: Brain expected
flare
Гость
« Ответ #4 : 22-12-2003 11:27 » 

m_hComm=CreateFile(lpCommPort,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
   
   if(m_hComm==INVALID_HANDLE_VALUE)
      return FALSE;
   DCB dcb;
   dcb.BaudRate = 115200;
   dcb.ByteSize = 8;
   dcb.DCBlength = sizeof(DCB);
   dcb.Parity = false;
   dcb.fBinary = true;
   dcb.fOutxCtsFlow = false;
   dcb.fOutxDsrFlow = false;
   dcb.fDtrControl = DTR_CONTROL_DISABLE;
   dcb.fDsrSensitivity = false;
   dcb.fTXContinueOnXoff = false;
   dcb.fOutX = false;
   dcb.fInX = false;
   dcb.ErrorChar = false;
   dcb.fNull = false;
   dcb.fRtsControl = RTS_CONTROL_DISABLE;
   dcb.fAbortOnError = false;
   dcb.StopBits = 2;
   COMMTIMEOUTS TimeOuts;
   TimeOuts.ReadIntervalTimeout = 1;
   TimeOuts.ReadTotalTimeoutConstant = 10;
   TimeOuts.ReadTotalTimeoutMultiplier = 1;
   TimeOuts.WriteTotalTimeoutConstant = 3;
   TimeOuts.WriteTotalTimeoutMultiplier = 1;
   SetCommTimeouts(m_hComm,&TimeOuts);
   SetCommState(m_hComm,&dcb);
   memset(&rxOverLapp,0,sizeof(rxOverLapp));
   rxOverLapp.hEvent = CreateEvent(NULL,false,false,NULL);
   memset(&txOverLapp,0,sizeof(txOverLapp));
   txOverLapp.hEvent = CreateEvent(NULL,false,false,NULL);
   SetupComm(m_hComm,0x4000,0x4000);
   SetCommMask(m_hComm,EV_RXCHAR|EV_TXEMPTY|EV_BREAK);
   PurgeComm(m_hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);
Записан
Mouse
Молодой специалист

ru
Offline Offline

« Ответ #5 : 22-12-2003 11:51 » 

Попробуй включить DtrControl и RtsControl. Еще у меня стоповый бит был 1.
Если честно, я особо с этим не разбирался, просто у меня с такой конфигурацией все работает...  :oops:
Записан
GlukSoft
Главный специалист

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 22-12-2003 12:14 » 

flare, Microsoft рекомендует DCB инициализировать следующим образом
FillMemory(&dcb, sizeof(dcb), 0);
GetCommState(hComm, &dcb);
dcb.DCBlength = sizeof(dcb);
и т.д.
зачем у тебя dcb.fTXContinueOnXoff = false; думаешь что комп не успеет обработать?
Записан

Fatal error C1: Brain expected
Lex
Специалист

ru
Offline Offline

WWW
« Ответ #7 : 22-12-2003 12:35 » 

fDtrControl и fRtsControl влияют только на линии RTS и DTR соответственно.

Рекомендация использую вместо числовых значений предопределенные константы.
и обрати внимание что есть два поля fParity(TRUE|FALSE) и Parity(EVENPARITY|ODDPARITY|NOPARITY|MARKPARITY|SPACEPARITY). У тебя Parity = false.
еще одно замечание false и FALSE не одно и тоже. false это значение тип boolean. FALSE define определенный как 0.
Записан

Megabyte be with you!
flare
Гость
« Ответ #8 : 23-12-2003 21:30 » 

ЗАРАБОТАЛО!!!!!!!!!!!!!!!
Вся попа была в том, что поле dcb.StopBits = 1 вовсе не значит, что стоповый бит будет 1, как я это предполагал. На самом деле нужно было
dcb.StopBits = ONESTOPBIT, который по дефайну определяется в ноль.

Спасибо Всем, а в особенности Lex'y за рекомендацию про константы
Записан
Anonymous
Гость
« Ответ #9 : 24-12-2003 17:13 » 

Цитата

Вся попа была в том, что

Вот так всегда, ищешь в одном месте, а оно вон как вылазит  Вот такой я вот
Записан
FoxVID
Гость
« Ответ #10 : 30-12-2003 21:04 » 

flare, а так ли необходимо определять все параметры структуры DCB?
Цитата
Попробуй включить DtrControl и RtsControl. Еще у меня стоповый бит был 1.
Если честно, я особо с этим не разбирался, просто у меня с такой конфигурацией все работает...

Вообще-то конкретная реализация обмена через порт может исключать DTS || RTS. С этим, к примеру я столкнулся при исследовании ККМ Меркурий 112Ф. Тут вообще используются только RX & TX.
Так что, уважаемый Arhangel, вы бы лучше не давали этот совет. Абы как бы все могут, а по существу...  Вот такой я вот
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #11 : 30-12-2003 22:06 » 

FoxVID, да необходимо, ибо их могла сменить другая программа до тебя отработавшая и ты грубо говоря будешь долго думать - почему ты не имеешь, что хотел , а имеешь то , что имеешь  Отлично
Записан

А птичку нашу прошу не обижать!!!
FoxVID
Гость
« Ответ #12 : 02-01-2004 08:21 » 

Цитата

их могла сменить другая программа до тебя отработавшая

Что да, то да. На эти грабли я и наступил. :oops: Век живи, век учись, и все равно   Вот такой я вот
PS Вообще-то мне интересно, есть ли люди, которые учатся не на своих ошибках :?:   Ага
Записан
flare
Гость
« Ответ #13 : 04-01-2004 20:47 » 

А мы тут, собственно, чем занимаемся? Улыбаюсь
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #14 : 04-01-2004 21:27 » new

FoxVID, практически нету Улыбаюсь
Так и говорят - умный учится на чужих ошибках, что бы можно опознав свою - знать что делать, а дурак - совершая свои ошибки не понимает, что это ошибка и продолжает их делать не один раз пока не поймет  Ага
Записан

А птичку нашу прошу не обижать!!!
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines