Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
FreezeAnti
0 / 0 / 0
Регистрация: 05.12.2008
Сообщений: 5
#1

Общение с com-портом - C++

05.12.2008, 09:45. Просмотров 1696. Ответов 8
Метки нет (Все метки)

Здравствуйте.

Мне нужно передавать и принимать информацию через компорт. Как это делалось в Win98, я знаю, делал программу. Нужно это сделать для WinXP, причем в среде разробтчика Dev-C++, там используется компилятор gcc. Не могли бы вы мне подсказать, чем отличается опрос порта в 98 и в ХР или посоветовать интернет литературу для этого.

ЗЫ в гугле нашел только примеры практически идентичные тому, что я делал для 98, и они не работают в ХР. Возможно, что-то делаю не так, но не пойму - что.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2008, 09:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Общение с com-портом (C++):

Общение между диалогами - C++
Здравствуйте. У меня такая ситуация: Имеется диалог: скажем CmyDlg. На нём к примеру две вкладки: CPage1 и CPage2. На CPage1...

Общение двух exe - C++
Доброго времени суток! Я столкнулся с проблемой "общения" двух exe. Не знаю в какую сторону рыть. Нужно подтверждение коннекта, передача...

Общение игрострой TCP/UDP - C++
Привет всем! Как написать чат, сериализовывать и десериализовывать я знаю. Передавать файлы по FTP. Тоже НЕ могу понять что передавать...

Работа с COM портом - C++
Доброго времени суток, уважаемые форумчане! Помогите разобраться с COM портом. Хотя бы с чего начать. :help: На большинстве ресурсов...

работа с COM портом - C++
здравствуйте всем,я в форумах в первие ,и просил бы не судить очень строго. помогите пожалуйста , хочу реализовать приложение работающую с...

Работа с COM портом - C++
Добрый день! Решил поработать с COM портом. в строке Port=CreateFile("COM2",GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);...

8
CheshireCat
Эксперт С++
2893 / 1242 / 78
Регистрация: 27.05.2008
Сообщений: 3,379
05.12.2008, 10:04 #2
Ничем не отличаются.
Ты сделал правильный вывод: что-то ты делаешь не так. Но мы тоже не сможем понять, что именно ты делаешь не так, пока ты не приведешь проблемный код.
0
FreezeAnti
0 / 0 / 0
Регистрация: 05.12.2008
Сообщений: 5
05.12.2008, 10:26  [ТС] #3
К сожалению, того самого кода, который работал под 98 и не работал под ХР, у меня не осталось. Сейчас привожу кусок кода, который не работает и который сделал по рекомендациям из интернета.

Код
     char address;
     std::cout << "Enter address\n";
     std::cin >> address;
     HANDLE hCom;
     COMMTIMEOUTS lpTo;
     COMMCONFIG lpCC;
     char str_com[10];
     unsigned short no_com = 0;
     hCom = 
          CreateFile("COM2, 
               GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 
               FILE_FLAG_OVERLAPPED, NULL);
     GetCommState(hCom, &lpCC.dcb);
     lpCC.dcb.BaudRate = CBR_19200;
     lpCC.dcb.ByteSize = 8;
     lpCC.dcb.StopBits = ONESTOPBIT;
     lpCC.dcb.Parity = MARKPARITY;
     lpCC.dcb.fDtrControl = DTR_CONTROL_DISABLE;
     lpCC.dcb.fRtsControl = RTS_CONTROL_DISABLE;
     SetCommState(hCom, &lpCC.dcb);
     SetupComm(hCom, 2048, 2048);
     WriteFile(hCom, &address, 1, NULL, NULL);
     CloseHandle(hCom);
0
CheshireCat
Эксперт С++
2893 / 1242 / 78
Регистрация: 27.05.2008
Сообщений: 3,379
05.12.2008, 10:53 #4
Хорошо. А дальше? Что означает "не работает"? В чем именно это проявляется?
0
FreezeAnti
0 / 0 / 0
Регистрация: 05.12.2008
Сообщений: 5
05.12.2008, 10:58  [ТС] #5
Имеется прибор. Он при получении определенного сигнала моргает лампочками. После исполнения этой программы ничего не происходит. При помощи программы COM Port Toolkit v 0.175 проверялось, что дело не в приборе.
0
CheshireCat
Эксперт С++
2893 / 1242 / 78
Регистрация: 27.05.2008
Сообщений: 3,379
05.12.2008, 11:26 #6
Тьфу, черт! А отладчик у тебя для чего? Ладно. Побуй вот такой код (только не забудь обработать ошибки):
Код
     char address;
     std::cout << "Enter address\n";
     std::cin >> address;
     HANDLE hCom;
     COMMTIMEOUTS lpTo;
     COMMCONFIG lpCC;
     char str_com[10];
     
     unsigned short no_com = 0;
     hCom = 
          // и под Win9x, и под WinNT имя файла должно быть таким, хотя Win9x понимает и просто "COM2"
          CreateFile("\\\\.\\COM2", 
               GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 
               FILE_ATTRIBUTE_NORMAL, NULL);
               // нафига тебе FILE_FLAG_OVERLAPPED? Где overlapped-структура?
     
     if (hCom != INVALID_HANDLE_VALUE)   // а вдруг порта нет или он занят уже кем-то?
     {
         if (GetCommState(hCom, &lpCC.dcb) == FALSE)
         {
             /*обработать ошибку, например:
             CloseHandle(hCom);
             return;
             */
             ;
         }
         
         lpCC.dcb.BaudRate = CBR_19200;
         lpCC.dcb.ByteSize = 8;
         lpCC.dcb.StopBits = ONESTOPBIT;
         lpCC.dcb.Parity = MARKPARITY;
         lpCC.dcb.fDtrControl = DTR_CONTROL_DISABLE;
         lpCC.dcb.fRtsControl = RTS_CONTROL_DISABLE;
         if (SetCommState(hCom, &lpCC.dcb) == FALSE)
         {
             /*обработать ошибку*/;
         }
         
         if (SetupComm(hCom, 2048, 2048) == FALSE)
         {
            /*обработать ошибку*/;
         }
         if (PurgeComm(0hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR) == FALSE)
         {
            /*обработать ошибку*/;
         }
         
         // А таймауты кто ставить будет? поставить.
         
         DWORD dwBytesWritten = 0;
         if (WriteFile(hCom, &address, sizeof(address), &dwBytesWritten, NULL) == FALSE)
         {
            /*обработать ошибку*/;
         }
         if (dwBytesWritten != sizeof(address))
         {
            /*обработать ошибку*/;
         }
         CloseHandle(hCom);
     }
1
FreezeAnti
0 / 0 / 0
Регистрация: 05.12.2008
Сообщений: 5
08.12.2008, 15:35  [ТС] #7
Вылетает на исполнении функции WriteFile.

Отладчик запустить не смог. Любой другой проект нормально олаживается, а этот ни в какую не хочет. Повторюсь, что использую Dev-C++.
0
CheshireCat
Эксперт С++
2893 / 1242 / 78
Регистрация: 27.05.2008
Сообщений: 3,379
08.12.2008, 15:38 #8
Как именно вылетает? С какими симптомами, сообщениями об ошибках?

Ну почему из тебя надо все клещами под пытками вытаскивать??? Ты думаешь, участникам форума больше нужно заниматься твоим кодом, чем тебе самому???
0
FreezeAnti
0 / 0 / 0
Регистрация: 05.12.2008
Сообщений: 5
08.12.2008, 16:25  [ТС] #9
Извиняюсь, сам затупил. Ошибку уже нашел. В общем, огромное спасибо, все работает.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2008, 16:25
Привет! Вот еще темы с ответами:

Работа с COM - портом - C++
Не могу сделать чтобы, при работе с соm - портом возможно было выбирать как автоматические настройки по(default), так и ручные настройки....

Работа с СОМ-портом - C++
Пишу программу для работы с устройством через COM-порт. Я отсылаю устройству запрос так: WriteFile(hComPort, buff, buffSize,...

работа с ком портом? - C++
Добрый день! Я ещё только учусь. Но мне очень бы хотелось научиться работать с ком портами в винде. посылка прием данных, и пр. ...

Управление LPT портом - C++
Нужно управлять LPT портом в BORLAND C++ 3.1 Подскажите каким образом осуществлять ввод и запись в порт информации.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
08.12.2008, 16:25
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru