Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Eugene1911 от Сентябрь 01, 2014, 11:59



Название: QSerialPort скорость обмена
Отправлено: Eugene1911 от Сентябрь 01, 2014, 11:59
Здравствуйте :)
Мне надо написать программу для отправки данных через СОМ порт на плату. Использую qt 5.2.1, библиотеку QSerialPort. При конфигурации порта не получается установить нужную скорость - 230400. Если написать так:
Код:
serial->setBaudRate(230400)
то отправка данных не идет. Подскажите, пожалуйста, как правильно задать нужную мне скорость.


Название: Re: QSerialPort скорость обмена
Отправлено: VanDerSam от Сентябрь 01, 2014, 13:07
А вы видели такое значение скорости в QSerialPort::BaudRate? Я сам с классом QSerialPort не работал. Но думаю, нужное значение скорости обязательно должны поддерживать микросхемы последовательного интерфейса на обоих концах.


Название: Re: QSerialPort скорость обмена
Отправлено: Eugene1911 от Сентябрь 01, 2014, 13:21
Такого значения скорости в QSerialPort::BaudRate нет. В справке приведены следующие скорости:
Цитировать
QSerialPort::Baud1200   1200   1200 baud.
QSerialPort::Baud2400   2400   2400 baud.
QSerialPort::Baud4800   4800   4800 baud.
QSerialPort::Baud9600   9600   9600 baud.
QSerialPort::Baud19200   19200   19200 baud.
QSerialPort::Baud38400   38400   38400 baud.
QSerialPort::Baud57600   57600   57600 baud.
QSerialPort::Baud115200   115200   115200 baud.
QSerialPort::UnknownBaud   -1   Unknown baud. This value is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code.


Название: Re: QSerialPort скорость обмена
Отправлено: vizir.vs от Сентябрь 01, 2014, 13:21
А вы видели такое значение скорости в QSerialPort::BaudRate? Я сам с классом QSerialPort не работал. Но думаю, нужное значение скорости обязательно должны поддерживать микросхемы последовательного интерфейса на обоих концах.

Я видел такое значение. Но не все устройства ее поддерживают.
Вот здесь (http://forums.codeguru.com/showthread.php?359983-Serial-Communication-Speed-over-than-230400-bauds), парень пишет что с помощью WinAPI работал на этой скорости, а выше не смог.
Вообще все зависит от устройства (например MOXA поддерживает 230400, а какие-нибудь старые устройства нет). И от драйвера. Ну еще у Qt не определены скорости свыше 115200, поэтому если нужны такие скорости то нужно пользоваться WinAPI (если это винда).


Название: Re: QSerialPort скорость обмена
Отправлено: Eugene1911 от Сентябрь 01, 2014, 13:43
У меня moxa и винда)) Спасибо за совет, буду разбираться)


Название: Re: QSerialPort скорость обмена
Отправлено: Bepec от Сентябрь 01, 2014, 14:23
Не видел ни 1 устройства с такими скоростями :)
Но на Qt 4 пробовал эту скорость по виртуальному порту - работало.


Название: Re: QSerialPort скорость обмена
Отправлено: 8Observer8 от Сентябрь 01, 2014, 14:26
А нельзя ли поставить скорость поменьше?

P.S. Если что - советую поставить программу, которая создаёт пару виртуальных портов. Одна программа пишет в один, а другая читает из другого. Я использую эту, но у неё ограниченный триал:
(http://i.pixs.ru/storage/9/2/4/313png_2240777_13661924.png)

Ещё можно поставить ComTester, который отображает данные с порта


Название: Re: QSerialPort скорость обмена
Отправлено: Eugene1911 от Сентябрь 01, 2014, 14:38
Цитировать
Не видел ни 1 устройства с такими скоростями
Устройство вот это: http://www.moxa.com.ua/product/usb/np_u1110.htm

Цитировать
Если что - советую поставить программу, которая создаёт пару виртуальных портов. Одна программа пишет в один, а другая читает из другого.
Спасибо, подумаю))


Название: Re: QSerialPort скорость обмена
Отправлено: Bepec от Сентябрь 01, 2014, 15:00
Адаптер то да - такой у меня был, устройства работающего на таких скоростях не было :)


Название: Re: QSerialPort скорость обмена
Отправлено: alex312 от Сентябрь 01, 2014, 15:06
Ну еще у Qt не определены скорости свыше 115200, поэтому если нужны такие скорости то нужно пользоваться WinAPI (если это винда).
Спокойно работаю с CP2103 на скорости 500000 без всяких WinApi, так что, вероятнее это от драйвера зависит.


Название: Re: QSerialPort скорость обмена
Отправлено: kuzulis от Сентябрь 02, 2014, 10:32
Цитата: vizir.vs
Ну еще у Qt не определены скорости свыше 115200, поэтому если нужны такие скорости то нужно пользоваться WinAPI (если это винда).

Не не. В перечислении QSerialPort::BaudRate определен просто минимальный набор "стандартных" скоростей от 1200 до 115200 бод. Никто не запрещает в QSerialPort::setBaudRate(qint32) устанавливать любое значение. Но в  QSerialPort::BaudRate перечислен минимальный набор, который уж точно должен поддерживаться всеми девайсами, поэтому не имело смысла пихать туда и другие значения.

Цитата: Eugene1911
Использую qt 5.2.1, библиотеку QSerialPort.

Желательно бы обновиться до Qt 5.3.1, ну, или собрать текущую ветку QtSerialPort, которая появится в 5.3.2.

Цитата: Eugene1911
При конфигурации порта не получается установить нужную скорость - 230400. Если написать так:
Код:
serial->setBaudRate(230400)

Если девайс UPort-1110 поддерживает 230400 - то и QtSerialPort тоже будет поддерживать (девайсы от MOXA - хорошая и надежная весч :) ).
Возможно надо скачать и обновить последнюю версию драйвера от MOXA.

Но, мне кажется, что дело тут в другом: возможно не в то время и не в том месте вызывается setBaudRate().
В Qt5.2.1 перед конфигурированием девайса необходимо сначала открыть девайс:
Код
C++ (Qt)
if (serial->open(...)) {
   ...
   if (!serial->setBaudRate(230400))
       return false;
   ...
}
 

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


Название: Re: QSerialPort скорость обмена
Отправлено: 8Observer8 от Сентябрь 02, 2014, 10:37
offtop Такую программку подсказали: ComPorttoolkit. Может действительно полезная: http://www.compt.ru/


Название: Re: QSerialPort скорость обмена
Отправлено: Eugene1911 от Сентябрь 02, 2014, 12:27
Да, дело в драйвере оказалось... Обновил, после этого заработало, спасибо :)
Девайс сначала открывал, потом конфигурировал, сейчас работает))