Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [QT] Как открыть COM-порт используя QT под Виндой? 
V
    Опции темы
Mazzi
Дата 15.1.2008, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

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



Работаю под виндой, использую копилятор MINGW.
Программа компилируется, работает, но не открывает коммуникационный порт при использовании QT.
Эта же программа работает нормально и открывает порт, если компилируется VC++.
Проблема, в строке открывающей порт.
Если кто знает, как правильно сделать, подскажите. Желательно рабочий пример.


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
SABROG
Дата 15.1.2008, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Если работа приложения планируется только в Windows, то используй WinApi - CreateFile, примеры можно нагуглить. В Qt нет штатных средств для работы с устройствами.

Вот, из чей-то научной работы выдрал:

Код

//---------------------------------------------------------------------------

#include <time.h>//Подключение стандартных библиотек

#include <vcl.h>

#include <dos.h>

#pragma hdrstop

#include <windows.h>

#include <string.h>

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

HANDLE        port;//Описание переменных 

int     i,k1=0,k2=0; 
 

//-------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

        : TForm(Owner)



}

//--------------------------------------------------------------------------- 
 

void __fastcall TForm1::Button1Click(TObject *Sender)//При нажатии

{                                                                                       //первой кнопки

port=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);

EscapeCommFunction(port,CLRDTR);//Установка нуля на сигналеDTR

for(i=0;i<8;i++){//Подача 8-ми импульсов на счетчик с интервалом 0.1 с

                EscapeCommFunction(port,CLRRTS);

                sleep(.1);

                EscapeCommFunction(port,SETRTS);

                }

sleep(.5);//Время на зарядку конденсаторов

EscapeCommFunction(port,SETDTR);//Обнуление счетчика

if (k1==0) k1=1;//Смена надписей на кнопке

    else k1=0;

if (k1==1) Button1->Caption="Выключить";

   else Button1->Caption="Включить";

CloseHandle(port); 

}

//--------------------------------------------------------------------------- 
 
 

void __fastcall TForm1::Button2Click(TObject *Sender)//При нажатии второй

{                                                                                         //второй кнопки

port=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);

EscapeCommFunction(port,CLRDTR);//То же что и в предыдущем случае 

for (i=0;i<8;i++){ for(i=0;i<2;i++){//Подача на второй счетчик восьми

                                                           //   импульсов, для замыкания второго

                                                         // резонансного контура

                            EscapeCommFunction(port,CLRRTS);

                            sleep(.1);

                            EscapeCommFunction(port,SETRTS);

                                                     };

                 Sleep(.5);//Время для зарядки конденсаторов

                EscapeCommFunction(port,SETDTR);//Сброс счетчика

                 sleep(.1);

                 EscapeCommFunction(port,CLRDTR);

                 };

if (k2==0) k2=1; //Смена надписей на кнопке

    else k2=0;

if (k2==1) Button1->Caption="Выключить";

    else Button1->Caption="Выключить";

CloseHandle(port);

}

//---------------------------------------------------------------------------


Это сообщение отредактировал(а) SABROG - 15.1.2008, 11:39


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Mazzi
Дата 15.1.2008, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

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



Для SABROG. Я же говорю, компилирую с помощью VC++, всё прекрасно работает, этот же кусок кода компилирую в MINGW с использованием QT4 - порт не открывается.

Добавлено через 2 минуты и 17 секунд
Чтото мне не верится, что в Qt нет штатных средств для работы с устройствами, как пишет SABROG.


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
SABROG
Дата 15.1.2008, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Никто и не поможет, пока исходники не выложишь.

Если не веришь - проверь, о результатах доложи и я поменяю свою точку зрения, буду только признателен.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Mazzi
Дата 15.1.2008, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

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



Вот кусок кода

Код

int main ()
   {
      DCB    config_;
      BOOL   statusPort_;
      char * prtName = "COM1";
      
      handlePort_ = CreateFile(prtName,  // Specify port device: default "COM1"
         GENERIC_READ | GENERIC_WRITE,       // Specify mode that open device.
         0,                                  // the devide isn't shared.
         NULL,                               // the object gets a default security.
         OPEN_EXISTING,                      // Specify which action to take on file. 
         0,                                  // default.
         NULL);
         
        if (GetCommState(handlePort_,&config_) == 0)
        {
            MessageBox(0,"Get configuration port has problem.","haha",MB_OK);
            return 0;
        }
    // Assign user parameter.

    config_.BaudRate = CBR_9600;    // Specify buad rate of communicaiton.
    config_.StopBits = ONESTOPBIT;    // Specify stopbit of communication.
    config_.Parity   = NOPARITY;        // Specify parity of communication.
    config_.ByteSize = 8;    // Specify  byte of size of communication.

    // Set current configuration of serial communication port.
    if (SetCommState(handlePort_,&config_) == 0)
    {
       MessageBox(0,"Set configuration port has problem.","haha",MB_OK);
       return 0;
    }




--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
archimed7592
Дата 15.1.2008, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Цитата(Mazzi @  15.1.2008,  09:55 Найти цитируемый пост)
Как открыть COM-порт используя QT под Виндой?

http://forum.vingrad.ru/index.php?show_typ...iew=all&hl=


 ! 
archimed7592
SABROG, какое отношение Ваш пример имеет к нашему разделу? У нас вроде как кроссплатформенное программирование обсуждается.
Mazzi, к Вам тот же вопрос.
Нужно Qt - обсуждайте Qt, а не WinAPI. Нужно WinAPI - перенесу в соответствующий раздел.



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Mazzi
Дата 15.1.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

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



Объяснение модератору и всем остальным участникам форума. 

Я упоминаю виндовс, потому, что это среда в которой мне приходится работать. В самом первом топике, я попросил помощи по конкретному вопросу использования библиотеки QT и кроссплатформенного компилятора для языка C++ MINGW. 

Где ещё задать этот вопрос, как не в разделе С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets ?

Я не прошу помощи в WINAPI и пример с использованием последнего привёл только для ответа на вопрос.

Не хочется идти кривыми путями, ведь QT имеет свой интерфейс с WINDOWS, поэтому я и хотел узнать нормальное решение у специалистов.


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
archimed7592
Дата 15.1.2008, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Цитата(Mazzi @  15.1.2008,  17:42 Найти цитируемый пост)
Не хочется идти кривыми путями, ведь QT имеет свой интерфейс с WINDOWS, поэтому я и хотел узнать нормальное решение у специалистов. 

Отлично, упомянутая мною библиотека подходит?


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
SABROG
Дата 15.1.2008, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Главное, чтобы она не перестала расходиться с новыми версиями Qt, а то в один прекрасный момент придется делать выбор, либо новая Qt либо ручками исправлять старую QExtSerialPort. Если делать свою наработку, то она будет всегда актуальна, пока развивается программа.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
archimed7592
Дата 15.1.2008, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Цитата(SABROG @  15.1.2008,  18:03 Найти цитируемый пост)
Главное, чтобы она не перестала расходиться с новыми версиями Qt, а то в один прекрасный момент придется делать выбор, либо новая Qt либо ручками исправлять старую QExtSerialPort.

Если внимательно посмотреть на архитектуру библиотеки, то можно предположить, что расходится она начнёт разве что начиная с Qt-5 smile.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
TeAnton
Дата 24.1.2008, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я так понимаю, нужно смотреть в MSDN на CreateFile и тому подобное и какие либы нужно подключать и добавить эти либы линковщику.
PM MAIL   Вверх
archimed7592
Дата 24.1.2008, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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




M
archimed7592
TeAnton, мне казалось, что я вполне ясно выразил моё мнение об абсурдности обсуждения MSDN.
Дальнейшую дискуссию на эту тему буду удалять, как злостный оффтоп.



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Mazzi
Дата 8.5.2008, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

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



Спасибо всем за помощь, всё заработало. 

Для archimed7592. Упомянутая тобой библиотека помогла.

Тему можно считать закрытой.


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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