Поиск:

Ответ в темуСоздание новой темы Создание опроса
> COM порт не принимает 11h, 13h 
V
    Опции темы
Usper
Дата 14.4.2007, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Еще раз: что ты ожидаешь, когда прийдут эти самые коды? Что делает функция caserbyte? TMemo не может отобразить 11h и 13h. ReadFile читает все, что приходит на ком порт.


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
black_priest
Дата 14.4.2007, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 19.3.2007
Где: Minsk

Репутация: нет
Всего: нет



Пиши в файл все что ловишь, и там смотри, если по-другому у тебя не получается. Стопудова там увидишь, если передаешь. Файл естественно смотри в двоичном режиме, а не в текстовом. Или еще лучше редактором шестнадцатиричным. Не первый год занимаюсь подобными вещами и смею тебя уверить, что ком-порт передает и принимает любые коды. Просто не туда куда-то смотришь. 
Если хочешь, выложи именно свой исходник и расскажи как конкретно ты не видишь свои заколдованные символы, попробую помочь.

ЗЫ: Интересно, как люди с модемами в нет лазят, когда 
Цитата
функция API ReadFile, не пропускае парочку кодов
  smile 

Это сообщение отредактировал(а) black_priest - 14.4.2007, 10:09
PM MAIL   Вверх
Usper
Дата 14.4.2007, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Вот тебе простейший искуственный пример:

Код

HANDLE PortInit (char *PortName)
//функция инициализации порта, возвращает хэндл порта или INVALID_HANDLE_VALUE
//в случае ошибки
//в функцию пердать: номер порта (COM1 или COM2 или др, если есть др)
{
  HANDLE port;
  DCB dcb;
  BOOL fSuccess;
  COMMTIMEOUTS TimeOuts;
  TimeOuts.ReadIntervalTimeout = 1;
  TimeOuts.ReadTotalTimeoutMultiplier = 1;
  TimeOuts.ReadTotalTimeoutConstant = 1000;
  TimeOuts.WriteTotalTimeoutMultiplier = 2;
  TimeOuts.WriteTotalTimeoutConstant = 1000;
  port=CreateFile(PortName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
  if (port==INVALID_HANDLE_VALUE) return INVALID_HANDLE_VALUE;
  fSuccess=GetCommState(port,&dcb);
  if (!fSuccess) return INVALID_HANDLE_VALUE;
  dcb.BaudRate=CBR_9600;
  dcb.ByteSize=8;
  dcb.Parity=EVENPARITY;
  dcb.StopBits=ONESTOPBIT;
  fSuccess=SetCommState(port,&dcb);
  if (!fSuccess) return INVALID_HANDLE_VALUE;
  SetCommTimeouts(port,&TimeOuts);
  PurgeComm(port, PURGE_TXABORT|PURGE_TXCLEAR|PURGE_RXABORT|PURGE_RXCLEAR);
  return port;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  HANDLE port;
  unsigned long BR;
  char buf_in;
  port=PortInit("COM5"); //открываем порт 5 (имя порта писать заглавными буквами)
  while (1==1) //бесконечный цикл !!!
  {
     ReadFile(port,&buf_in,1,&BR,NULL);
     if(BR!=0)  //если приняли не ноль байтов
     {
       if((unsigned char)(buf_in)==255) break;  //выходим из цикла если приняли 255
       Memo1->Lines->Add(IntToHex((unsigned char)(buf_in),2));
     }
     Application->ProcessMessages();
  }
}  



На форме кнопка и TMemo. Функцию PortInit() взял из своего проекта, что не нужно из нее выкинуть, что нужно - добавить. Пример рабочий - проверял.


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
Ivan.
Дата 15.4.2007, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 2.11.2004

Репутация: нет
Всего: 2



Цитата(ZPavel @  8.4.2007,  13:06 Найти цитируемый пост)
Поискал в интернете tcomport, и нашел только за деньги, что делать, где найти даром? И еще, есть ли, описание tcomport на русском?

Пока искал наткнулся на новую версию:
http://kent.dl.sourceforge.net/sourceforge.../cport-3.10.zip
Возможны проблемы с компиляцией, Пишите объясню.
Библиотека с открытым кодом, в прошлых версиях нужно было немного подправить, в этой незнаю.


--------------------
Я могу ВСЁ, вопрос - сколько времени у меня это займет!
PM MAIL ICQ   Вверх
ZPavel
Дата 15.4.2007, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 31.3.2007

Репутация: нет
Всего: нет



Все, ничего не понимаю. Выкладываю свой проект. только сильно не смейтесь, это моя первая программа на си++. В ней все работает, что мне нужно, только вот нет приема 11н и 13н. Кодировка для передачи символов у меня своя, мне так удобней. Под кодами 11 и 13 у меня находятся символы 'г' и 'д'. Чтобы включить прием текста, нужно нажать кнопку - читать текст, программа пошлет число 252 микроконтроллеру, а он в ответ передаст текст, во время приема, программа его перекодируети выводит в мемо. те для проверки нажимаете - перадать текст - и можете посылать коды на ком порт.

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  10strwin.zip 85,72 Kb
PM MAIL   Вверх
Usper
Дата 15.4.2007, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Да, сорри. Мой пример тоже не принимает 11h и 13h :( Перепутал системы счисления.

Это сообщение отредактировал(а) Usper - 15.4.2007, 18:09


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
ZPavel
Дата 15.4.2007, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 31.3.2007

Репутация: нет
Всего: нет



Вывод, функция API ReadFile, не пропускает коды 11h и 13h, грусно.
PM MAIL   Вверх
Usper
Дата 15.4.2007, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Погоди паниковать, возможно еще не все потеряно. Порой справку на предмет DCB. К сожалению мои знания английского не позволяют разобраться :(. 


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
Usper
Дата 16.4.2007, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



У меня или глюки, или одно из двух  smile Сегодня мой пример работает  smile (то есть принимает 11h и 13h).


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
Anikmar
Дата 16.4.2007, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



А может глюки? 11Н и 13Н принимает, а 0DH и 0AH нет?  smile 
PM MAIL ICQ   Вверх
Usper
Дата 16.4.2007, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Спокуха, все принимает. 11 в десятичной с.с. = 0Bh  smile 


Это сообщение отредактировал(а) Usper - 16.4.2007, 20:33


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
Anikmar
Дата 16.4.2007, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(Usper @  16.4.2007,  20:31 Найти цитируемый пост)
Спокуха, все принимает. 11 в десятичной с.с. = 0Bh   

Да я прикололся - просто символы конца строки 0d и 0A  smile 
очень рад за вас, что мучения закончились.
PM MAIL ICQ   Вверх
korotkov
Дата 20.4.2007, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 17.6.2006

Репутация: нет
Всего: нет



первое что пришло в голову: в структуре DCB установи fBinary = TRUE; а ты все-таки установи smile

что-то похожее было лет 8 назад ;) попытаюсь посмотреть архивы своих трудов ;)
PM MAIL WWW ICQ   Вверх
korotkov
Дата 20.4.2007, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 17.6.2006

Репутация: нет
Всего: нет



Код


// настройка и открытие COM порта
...
    FComControl = ccRS_485;
...
    SetComControl(FComControl);
    SetBaudRate(FBaudRate); //!!!!!! //SetBaud(FBaud);
    SetParity(FParity);
    SetStopBits(FStopBits);
    SetDataBits(FDataBits);

    SetFNull(false);

    FOpen = true;
...

void CACOMPort::SetComControl(TComControl Value)
{
  FComControl = Value;
  if( IsEnabled() ){
    GetCommState( FCommHandle, &FDCB );
    DWORD flags = DCB_BINARY;
    switch( FComControl ){
      case ccSoft: flags |= SOFT_FLOW;  break;
      case ccHard: flags |= HARD_FLOW;  break;
      case ccRS_485: flags |= RS485_FLOW;  break;
    }
    DWORD *tmp = (DWORD *)(&FDCB);
    tmp[2] = flags;
    SetCommState(FCommHandle, &FDCB);
  }
}


уже не помню почему было сделано так черех tmp ;) но ключевое тут DCB_BINARY.

а вообще есть подозрение что ихнеправильно смотришь или они не приходят, смотри отладчиком ...


PM MAIL WWW ICQ   Вверх
Usper
Дата 20.4.2007, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



fBinary и так по умолчнаию равно true.
Цитата

  FBinary - Режим двоичного обмена. Win32 не поддерживает недвоичный режим, поэтому данное поле всегда должно быть равно TRUE.

Взято здесь: http://www.firststeps.ru/


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1114 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.