Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> асинхронный режим com port, com port 
:(
    Опции темы
Annuta
Дата 16.12.2006, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Добрый вечер!
  Я пытаюсь написать прогу для работы с ком портом в асинхронном режиме, вот навояла код
Код

/ Com_ProjectDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Com_Project.h"
#include "Com_ProjectDlg.h"
#include ".\com_projectdlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
    CAboutDlg();

// Dialog Data
    enum { IDD = IDD_ABOUTBOX };

    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

// Implementation
protected:
    DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()


// CCom_ProjectDlg dialog



CCom_ProjectDlg::CCom_ProjectDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CCom_ProjectDlg::IDD, pParent)
{
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CCom_ProjectDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_COMBO1, n_com);
    DDX_Control(pDX, IDC_EDIT2, m_ed);
}

BEGIN_MESSAGE_MAP(CCom_ProjectDlg, CDialog)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    //}}AFX_MSG_MAP
    ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
END_MESSAGE_MAP()


// CCom_ProjectDlg message handlers

BOOL CCom_ProjectDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

 



Это сообщение отредактировал(а) Annuta - 16.12.2006, 17:52
PM MAIL   Вверх
Mad
Дата 16.12.2006, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Annuta, а кто будет настраивать com ?
теперь по коду

Цитата(Annuta @  16.12.2006,  15:12 Найти цитируемый пост)
            if(WaitCommEvent(hCommPort,&dwEvtMask,&ov))    
            {    
     
        if(WaitForSingleObject(ov.hEvent,INFINITE) == WAIT_OBJECT_0)

Цитата(MSDN)
If the overlapped operation cannot be completed immediately, the function returns FALSE and the GetLastError function returns ERROR_IO_PENDING, indicating that the operation is executing in the background. When this happens, the system sets the hEvent member of the OVERLAPPED structure to the not-signaled state before WaitCommEvent returns, and then it sets it to the signaled state when one of the specified events or an error occurs. The calling process can use one of the wait functions to determine the event object's state and then use the GetOverlappedResult function to determine the results of the WaitCommEvent operation. GetOverlappedResult reports the success or failure of the operation, and the variable pointed to by the lpEvtMask parameter is set to indicate the event that occurred.

т.е код жолжен быть таким
Код

if(!WaitCommEvent(hCommPort,&dwEvtMask,&ov))    
{    
    GetOverlappedResult(hCommPort, &ov, &dwEvtMask, TRUE);
}
  
if (dwEvtMask & EV_RXCHAR)    
{    
     s="Go!!!";    
}    
if (dwEvtMask & EV_CTS)    
{    
     s="Stop!!!";    
}



--------------------
user posted image
PM MAIL   Вверх
witex
Дата 16.12.2006, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



в упор не вижу настройки структуры DCB.
И код не понтяно, воспользуйся тегом код. 
--------------------
Я не волшебник, я только учусь."Шлёпни в Гугл" - Афтор Былов Ю.М. 
PM MAIL   Вверх
Annuta
Дата 16.12.2006, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



...вот код 
Код

#include "stdafx.h"
#include "Com_Project.h"
#include "Com_ProjectDlg.h"
#include ".\com_projectdlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
    CAboutDlg();

// Dialog Data
    enum { IDD = IDD_ABOUTBOX };

    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

// Implementation
protected:
    DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()


// CCom_ProjectDlg dialog



CCom_ProjectDlg::CCom_ProjectDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CCom_ProjectDlg::IDD, pParent)
{
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CCom_ProjectDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_COMBO1, n_com);
    DDX_Control(pDX, IDC_EDIT2, m_ed);
}

BEGIN_MESSAGE_MAP(CCom_ProjectDlg, CDialog)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    //}}AFX_MSG_MAP
    ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
END_MESSAGE_MAP()


// CCom_ProjectDlg message handlers

BOOL CCom_ProjectDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    // Add "About..." menu item to system menu.

    // IDM_ABOUTBOX must be in the system command range.
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOU



Это сообщение отредактировал(а) Annuta - 16.12.2006, 17:46
--------------------
Программист - это комбинация лени и логики !
PM MAIL   Вверх
Mad
Дата 16.12.2006, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Цитата(Annuta @  16.12.2006,  15:56 Найти цитируемый пост)
Посл того как я весла в код рекомендуемы измеения, прога после коннекта с портом просто виснет, так как выполяется .. if(!WaitCommEvent(hCommPort,&dwEvtMask,&ov)) 

правильно, WaitCommEvent возвращает FALSE, и прога содиться на блок тут GetOverlappedResult(hCommPort, &ov, &dwEvtMask, TRUE);

если у тебя есть реальное общение по порту (т.е в порт щас что-то передаеться), и с блока не сходит, значит порт просто не настроен (скорость, битность и т.д)
для настройки надо 
Код

GetCommState(hCom, &dcb);
// Fill in DCB: 57,600 bps, 8 data bits, no parity, and 1 stop bit.

dcb.BaudRate = CBR_57600;     // set the baud rate
dcb.ByteSize = 8;             // data size, xmit, and rcv
dcb.Parity = NOPARITY;        // no parity bit
dcb.StopBits = ONESTOPBIT;    // one stop bit

SetCommState(hCom, &dcb);



--------------------
user posted image
PM MAIL   Вверх
witex
Дата 16.12.2006, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



закрывающий тег [/code]  поставь! а тоже самое что написано в первом посте!.
--------------------
Я не волшебник, я только учусь."Шлёпни в Гугл" - Афтор Былов Ю.М. 
PM MAIL   Вверх
Annuta
Дата 16.12.2006, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Я вписала настройки, но прга виснет сразу после коннекта... не дожидаясь инфы..! 
GetOverlappedResult(hCommPort, &ov, &dwEvtMask, TRUE);.. она не ждёт пока к ней придёт инфа! 
--------------------
Программист - это комбинация лени и логики !
PM MAIL   Вверх
Mad
Дата 16.12.2006, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Попробуй так
Код

if(!WaitCommEvent(hCommPort,&dwEvtMask,&ov))     
{
    DWORD dwRet = GetLastError();
    if( ERROR_IO_PENDING == dwRet)
    {
        GetOverlappedResult(hCommPort, &ov, &dwEvtMask, TRUE);    
    }
    else
    {
        char msg[256];
        sprintf(msg, "Wait failed with error %d.\n", GetLastError());
        s = msg;
    }
}    
    
if (dwEvtMask & EV_RXCHAR)     
{     
     s="Go!!!";     
}     
if (dwEvtMask & EV_CTS)     
{     
     s="Stop!!!";     
}

и скажи что прога выдаст


--------------------
user posted image
PM MAIL   Вверх
Annuta
Дата 16.12.2006, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



..я поставила ваш код, прога ничего не выдала - я так подозреваю потому, что я эту функцию реализую по щелчку на кнопке.... или она всё равно должна сработать ??? 
--------------------
Программист - это комбинация лени и логики !
PM MAIL   Вверх
serge_mok
Дата 18.12.2006, 05:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня что то с глазами или что...не вижу кода, о чём речь вообще?smile
стандартную  инициализацию диалог приложения зачем прислала?, её проверять не надо, пиши код инициализации порта
и механизм отправки/приёма данных...,а уж потом вопросы...
PM MAIL   Вверх
witex
Дата 18.12.2006, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Я  так понимаю, она сделала интрефейс, и умает,.. что он так всё красиво сделала. То просто при щелчке на кнопку будет работать с ком портом!
--------------------
Я не волшебник, я только учусь."Шлёпни в Гугл" - Афтор Былов Ю.М. 
PM MAIL   Вверх
serge_mok
Дата 18.12.2006, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Annuta, 
Куда пропала?, код давай!...smile

PM MAIL   Вверх
takedo
Дата 19.12.2006, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Чего то вы тут совсем крутые как со стороны то посмотреть... Сами то давно ли отвыкли спрашивать типа: "У меня вирус, какой-то Генерал Файлюре его возглавляет" smile Девочка пробует, нифига не знает, но думала, что здесь не злые прогеры сидят, вот и обратилась.
Кому интересно, вот здесь офуенно много для начала есть информации по программированию, и в частности по ком порту:
Чего то вы тут совсем крутые как со стороны то посмотреть... Сами то давно ли отвыкли спрашивать типа: "У меня вирус, какой-то Генерал Файлюре его возглавляет" smile Девочка пробует, нифига не знает, но думала, что здесь не злые прогеры сидят, вот и обратилась.
Кому интересно, вот здесь офуенные есть данные по программированию, и в частности по ком порту:
Очень много полезной информации для ВСЕХ!!!


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
serge_mok
Дата 20.12.2006, 06:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А я что?, я и говорю, сначала КОД ДАВАЙ!, а потом уж вопросы...smile
...никого обидеть не хотел! smile
PM MAIL   Вверх
takedo
Дата 20.12.2006, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



serge_mok, да ладно, я так бы ссылку не выложил, а сейчас многие ей возможно воспользуются smile 


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
serge_mok
Дата 21.12.2006, 05:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



takedo, smile..

Annuta, есть возможность простым способом проверить идеологию работы порта, хоть по кнопке хоть не по кнопке, но для этого желательны подробности проекта и явка всех заинтересованных лиц..smile
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


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

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


 




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


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

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