Russian Qt Forum
Ноябрь 24, 2024, 18:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 50 51 [52] 53 54 ... 88   Вниз
  Печать  
Автор Тема: Создаю библиотеку для работы с последовательными портами. [УШЕЛ ИЗ ПРОЕКТА].  (Прочитано 786554 раз)
b-s-a
Гость
« Ответ #765 : Декабрь 13, 2011, 17:23 »

ну если byteSize равен 9, то нет проблем - оставляем 9 (через cast). Но только чтение работать не будет...
Под *nix я, например, не знаю как получить четность Unknown.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #766 : Декабрь 13, 2011, 17:53 »

ну если byteSize равен 9, то нет проблем - оставляем 9 (через cast). Но только чтение работать не будет...
Под *nix я, например, не знаю как получить четность Unknown.
Ну, byteSize это был просто пример. Меня больше волнуют различные флаги и т.п. для других параметров
типа FlowControl и т.п.
« Последнее редактирование: Декабрь 13, 2011, 17:56 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
b-s-a
Гость
« Ответ #767 : Декабрь 13, 2011, 22:38 »

Как вариант, можно недействительные флаги сводить к известным. Например, к NoParity, NoFlowControl...

Под Windows можно выключать приемник порта? Под *nix можно. Иногда требуется выключать на время передачи данных. Может сделать такой метод?
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #768 : Декабрь 13, 2011, 22:41 »

Кстати, нашел неприятный момент с QWinEventNotifier под Windows (естественно).

Суть в том, что если я кликаю в запущеном приложении по заголовку его окна и "держу" это окно,  
не отпуская клавишу мышки - то QWinEventNotifier перестает обрабатывать любые события.

Я создал тестовое приложение, которое воспроизводит проблему:
это приложение по протоколу Modbus шлет запросы через последовательный порт
в симулятор ModSim32 (симулятор качается в инете, поиск рулит).

Параметры запроса: адрес ведомого устройства = 1, функция чтения = 3, читаем 3 регистра, начиная с нулевого,
собственно сам запрос:  01030000000305cb

Сначала необходимо запустить ModSim32,

Настройки главного окна Modsim32:
1. Dev. ID     = 1
2. Fun            = 3 HOLDING REGISTERS
3. Start Addr = 1
4. Len             = 10  

Настройки соединения Modsim32:
Connection->Port#, где # - 1...9 (COM1-COM9) номер вашего порта на
котором будет "висеть" Modsim32,
19200 8 N 1

Для просмотра траффика запросов/ответов через ModSim32 жмакаем Display->Show Traffic/ Show Data

далее тестовое приложение.

Итак, запуск тестового приложения:
1. Вводим имя порта на котором "висит" тестовое приложение.
2. Жмакаем Open
3. Жмакаем Send

И с периодом в 1 сек тестовое приложение начнет слать запросы к  ModSim32.

В нашем случае наше тестовое приложение - мастер, а ModSim32 - слейв.

Порты должны быть соединены кросс кабелем, или же можно юзать виртуальные
порты типа: Eltima Virtual Serial Port

Для воспроизведения проблемы достаточно жмакнуть мышкой на заголовке тестового приложения
и тогда отладочный вывод типа "Event #" из bool Port::event(QEvent *e) тестового приложения остановится.
И если потом отпустить - то вновь заработает.

Код
C++ (Qt)
static int event_counter = 0;
bool Port::event(QEvent *e)
{
   bool ret = false;
   if (e->type() == QEvent::WinEventAct) {
 
       qDebug() << "Event " << event_counter++; //<< ВОТ ЭТООТ ВЫВОД ПЕРЕСТАЕТ РАБОТАТЬ
                                                  //      И, СООТВЕТСТВЕННО, EV_RXCHAR НЕ СРАБАТЫВАЕТ
                                                   //      И emit readyRead() не излучается;
 
       if (EV_RXCHAR & m_currMask & m_setMask) {
           //qDebug("Event: EV_RXCHAR\n");
           emit readyRead();
           ret = true;
       }
       if (EV_TXEMPTY & m_currMask & m_setMask) {
           //qDebug("Event: EV_TXEMPTY\n");
           ret = true;
       }
 
       if (!ret)  {
           //qDebug("Other event\n");
           ret = true;
       }
   } else
       ret = QWinEventNotifier::event(e);
 
   ::WaitCommEvent(m_hd, &m_currMask, &m_oe);
   return ret;
}
 

Само тестовое приложение и результаты его работы в аттаче.


« Последнее редактирование: Декабрь 13, 2011, 22:50 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #769 : Декабрь 13, 2011, 22:45 »

Цитировать
Как вариант, можно недействительные флаги сводить к известным. Например, к NoParity, NoFlowControl...
Да, но тогда нужно будет в действительности устанавливать  NoParity, NoFlowControl при открытии,
т.к. если просто присвоить NoParity, NoFlowControl - то получится хрень, т.к. реально там не NoParity, NoFlowControl !!!

Цитировать
Под Windows можно выключать приемник порта? Под *nix можно. Иногда требуется выключать на время передачи данных. Может сделать такой метод?
ХЗ, а в *nix это какой метод?

И еще не факт, что в Symbian можно такое же сделать - так что ХЗ,
я пока сомневаюсь.
Записан

ArchLinux x86_64 / Win10 64 bit
b-s-a
Гость
« Ответ #770 : Декабрь 14, 2011, 00:14 »

в *nix не метод. там флаг CREAD надо снять и все.  Подмигивающий
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #771 : Декабрь 14, 2011, 10:22 »

Цитировать
в *nix не метод. там флаг CREAD надо снять и все.
Ок. Но не факт что в других оськах аналогичную фишку можно провернуть.
Записан

ArchLinux x86_64 / Win10 64 bit
b-s-a
Гость
« Ответ #772 : Декабрь 14, 2011, 11:52 »

Вот я и спрашиваю.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #773 : Декабрь 14, 2011, 11:57 »

А я не знаю. Улыбающийся

Вот, кстати, количество вариантов управления потоком вообще равно 5!!!
Вот ссылка на Java библиотеку в которой именно так и есть.
Вот бы вытянуть исходнички бы эти.
Записан

ArchLinux x86_64 / Win10 64 bit
b-s-a
Гость
« Ответ #774 : Декабрь 14, 2011, 12:54 »

Под *nix, например, xon/xoff для входа/выхода включать можно раздельно. А вот аппаратное управление нет.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #775 : Декабрь 17, 2011, 13:48 »

2 b-s-a,

Мне сегодня (в субботу) на почту пришло от Нокии письмо о том, чтобы
принять или отклонить соглашение CLA в их Jira.
Они на багтрекере создали задачу, я принял соглашение.

Тебе по идее оно тоже должно придти.
Отпишись сюда, что у тебя там в почте было.

Также они просят скорее принять соглашение и остальных участников,
типа чем быстрее - тем лучше.

Записан

ArchLinux x86_64 / Win10 64 bit
b-s-a
Гость
« Ответ #776 : Декабрь 17, 2011, 22:52 »

Получил. Только что (23:51 по Москве) нажал на Accept.
Записан
b-s-a
Гость
« Ответ #777 : Декабрь 20, 2011, 16:32 »

И что дальше? Непонимающий
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #778 : Декабрь 20, 2011, 16:56 »

ХЗ. Мож они еще кому разослали и ждут?
Напиши им письмо, спроси... Улыбающийся
Записан

ArchLinux x86_64 / Win10 64 bit
b-s-a
Гость
« Ответ #779 : Декабрь 27, 2011, 00:14 »

лучше ты. ты же с ними общался.
Записан
Страниц: 1 ... 50 51 [52] 53 54 ... 88   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.186 секунд. Запросов: 23.