Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с COM портами, Не могу открыть порт 
:(
    Опции темы
JiMKE
Дата 4.12.2008, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет всем.

Ситуация такая.
Написал небольшую программу в качестве эксперимента работы с COM портами, для дальнейшей разработки более серьезного приложения.

Код

// COM_EX.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>
#include <tchar.h>

 
void check_port (){
    HANDLE hCOM=CreateFile(_T("COM3:"),GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); 
if (hCOM!=INVALID_HANDLE_VALUE) { 
    printf("COM PORT IS OPEN");
    char buffer[30]; 
    memset(buffer,0,sizeof(buffer)); 
    strcpy(buffer,"HELLO WORLD!"); 
    DWORD nb; 
    OVERLAPPED ov; 
    WriteFile(hCOM,buffer,sizeof(buffer),&nb,&ov); 
    CloseHandle(hCOM); 
} else {
    printf("ERROR OPEN COM PORT\n");
    printf("%d",hCOM);
}

}
int _tmain(int argc, _TCHAR* argv[])
{
    //printf("Hello World!\n");
    check_port();
    return 0;
}




И сразу же столкнулся с неприятностью.
HANDLE hCOM возвращает -1, почему может происходить подобная ситуация?

Заранее спасибо.
PM MAIL   Вверх
Dmi3ev
Дата 4.12.2008, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



у меня вот такая ситуация встречалась как-то:
http://forum.codenet.ru/showthread.php?t=5605
 smile


Это сообщение отредактировал(а) Dmi3ev - 4.12.2008, 23:01


--------------------

PM MAIL   Вверх
UniBomb
Дата 4.12.2008, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



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

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



JiMKE, на первый взгляд ты неправильно задаёш имя порта. Не нужно двоеточие. Да и потом - ты уверен, что в системе присутсвует третий ком-порт?
PM MAIL ICQ Skype   Вверх
JiMKE
Дата 4.12.2008, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(UniBomb @  4.12.2008,  23:04 Найти цитируемый пост)
JiMKE, на первый взгляд ты неправильно задаёш имя порта. Не нужно двоеточие. Да и потом - ты уверен, что в системе присутсвует третий ком-порт? 

Дело в том, что пробовал как с двоеточием так и без него, и нумерацию портов меня от 0 до 9.

Добавлено через 6 минут и 35 секунд
Вот попробовал указывать имя порта немного другим способом
Код

// COM_EX.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>
#include <tchar.h>
char strComPort[5];
 
void check_port (){
    strcpy((char *)strComPort,"COM1:");
    HANDLE hCOM=CreateFile((LPCTSTR)strComPort,GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); 
if (hCOM!=INVALID_HANDLE_VALUE) { 
    printf("COM PORT IS OPEN");
    char buffer[30]; 
    memset(buffer,0,sizeof(buffer)); 
    strcpy(buffer,"HELLO WORLD!"); 
    DWORD nb; 
    OVERLAPPED ov; 
    WriteFile(hCOM,buffer,sizeof(buffer),&nb,&ov); 
    CloseHandle(hCOM); 
} else {
    printf("ERROR OPEN COM PORT\n");
    printf("%d",hCOM);
}

}
int _tmain(int argc, _TCHAR* argv[])
{
    //printf("Hello World!\n");
    check_port();
    return 0;
}


Проблема осталась.
PM MAIL   Вверх
vinick
Дата 4.12.2008, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(JiMKE @  4.12.2008,  23:11 Найти цитируемый пост)

[code=cpp]
char strComPort[5];
....
strcpy((char *)strComPort,"COM1:");

"COM1:" не влезет в strComPort[5], не забываем про завершающий ноль.

из MSDN
Код

    hCom = CreateFile( TEXT("\\\\.\\COM1"),
        GENERIC_READ | GENERIC_WRITE,
        0,    // exclusive access 
        NULL, // default security attributes 
        OPEN_EXISTING,
        FILE_FLAG_OVERLAPPED,
        NULL 
        );

PM MAIL ICQ Jabber   Вверх
Severyanin
Дата 5.12.2008, 05:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 31.7.2007
Где: Россия, Омск

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



и до того, как писать в порт, его надо инициализировать. Задать ему таймауты с помощью функций settCommTimeouts и параметры самого портта - скоростьпередачи, контроль четности и т д. Поищите, mrbrooks ыкладывал мануал по ком-порту в разделе по Builder


--------------------
"Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл
"Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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