Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
silver47 |
8.2.2011, 14:06
Сообщение
#201
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: 6
|
Цитата(Litkevich Yuriy @ 8.2.2011, 16:03) Link дак наверное буфер порта имеет только 4к, смотри в настройках драйвера устройства Порт виртуальный - ELTIMA Virtual Serial Port. Порты, созданные другими программами (например, Virtual Serial Ports Emulator) не определяются этой библиотекой. Как понял, определяются только те порты, которые есть в диспетчере устройств в ветке "Порты LPT и COM". А где те, которые создаются Virtual Serial Ports Emulator не знаю. Но вопрос не в этом, а в том как получить все, что программа на другом конце записала в порт (~100 кб). Программа, написанная другим человеком, на делфне читает всё полностью. Может можно как-то последовательно прочитать? Windows 7; Qt 4.7 Сообщение отредактировал silver47 - 8.2.2011, 14:47 |
|
|
|
|
Litkevich Yuriy |
8.2.2011, 14:35
Сообщение
#202
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(silver47 @ 8.2.2011, 16:06) Link Созданные другими программами не определяются этой библиотекой не понял фразы
|
|
|
|
|
kuzulis |
8.2.2011, 19:17
Сообщение
#203
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7
|
Цитата(silver47 @ 8.2.2011, 14:06) Link Порт виртуальный - ELTIMA Virtual Serial Port. Самый хороший из всех эмуляторов! Имхо. Цитата(silver47 @ 8.2.2011, 14:06) Link Порты, созданные другими программами (например, Virtual Serial Ports Emulator) не определяются этой библиотекой. Как понял, определяются только те порты, которые есть в диспетчере устройств в ветке "Порты LPT и COM". А где те, которые создаются Virtual Serial Ports Emulator не знаю. Так и должно быть. Цитата(silver47 @ 8.2.2011, 14:06) Link Программа, написанная другим человеком, на делфне читает всё полностью. Может можно как-то последовательно прочитать? В ELTIMA Virtual Serial Port Driver включите эмуляцию baudrate и будет счастье. |
|
|
|
|
silver47 |
8.2.2011, 19:41
Сообщение
#204
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: 6
|
Цитата(kuzulis @ 8.2.2011, 21:17) Link В ELTIMA Virtual Serial Port Driver включите эмуляцию baudrate и будет счастье. На реальном железе это не вылезет? Тогда еще вопрос, как получать состояние линий, в примере только про DSR и CTS. За библиотеку спасибо, мне кажется более логичной и удобной чем qextSerialDevice. |
|
|
|
|
kuzulis |
8.2.2011, 19:47
Сообщение
#205
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7
|
Цитата(silver47 @ 8.2.2011, 19:41) Link На реальном железе это не вылезет? Нет, не вылезет, я только что проверил (на всякий случай). Цитата(silver47 @ 8.2.2011, 19:41) Link Тогда еще вопрос, как получать состояние линий, в примере только про DSR и CTS. Эммм.. посмотрите пример в /test/guiapp , читайте документацию и т.п. PS: возьмите из git текущую ветку master : Link |
|
|
|
|
rcdimon |
18.2.2011, 15:31
Сообщение
#206
|
|
Студент ![]() Группа: Участник Сообщений: 69 Регистрация: 27.10.2009 Пользователь №: 1183 Спасибо сказали: 1 раз(а) Репутация: 0
|
Какую максимальную скорость передачи данных Вам удавалось получить?
Я передаю в компьютер пакеты по 9 байт. С интервалом 200 мс между пакетами. Если быстрее- программа подвисает. Программа сама по себе не большая и не сложная. Какие есть способы повысить скорость приема данных? |
|
|
|
|
kuzulis |
18.2.2011, 16:48
Сообщение
#207
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7
|
Цитата(rcdimon @ 18.2.2011, 15:31) Link Какую максимальную скорость передачи данных Вам удавалось получить? Я передаю в компьютер пакеты по 9 байт. С интервалом 200 мс между пакетами. Если быстрее- программа подвисает. Программа сама по себе не большая и не сложная. Какие есть способы повысить скорость приема данных? 1. Насчет скорости - зависит от типа UART , т.е. у разных м/сх (контроллеров и т.п.) разные верхние планки бод. 2. Самый "простой" способ - это использовать потоки (threads). ЗЫ: Я только что сам попробовал на скорости 9600 бод передавать ~20 байт с интервалом ~10 мс и подтверждаю, тормозит Я посмотрю что можно предпринять (если будет время) , может что-то в коде библиотеки не то, может еще что, а может иные причины, а может так и должно быть. ЗЫЗЫ: Должно помочь редактирование файла nativeserialengine_win.cpp (если вы используете винду). Нужно найти метод qint64 NativeSerialEnginePrivate::nativeWrite(const char *data, qint64 len), всё в нем удалить и оставить только это: |
|
|
|
|
rcdimon |
18.2.2011, 20:58
Сообщение
#208
|
|
Студент ![]() Группа: Участник Сообщений: 69 Регистрация: 27.10.2009 Пользователь №: 1183 Спасибо сказали: 1 раз(а) Репутация: 0
|
Я, конечно, попробую Ваш совет, но не думаю что дело в этом.
Возьмем любую другую программу для работы с ком-портом, например Terminal. Когда идет большой поток данных она начинает захлебываться и терять данные. GUI тормозит. А, например, драйвер модема не тормозит и отлично принимает данные даже на самых высоких скоростях. Наверное следует попробовать отвязать GUI от работы с портом. Наверное в этом дело. Запускать в разных потоках. |
|
|
|
|
BRE |
18.2.2011, 22:23
Сообщение
#209
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44
|
kuzulis, этот метод должен возвращать реальное число записанных байт (writeBytes), а не то количество? которое хотели записать (len).
|
|
|
|
|
kuzulis |
18.2.2011, 22:36
Сообщение
#210
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7
|
Цитата kuzulis, этот метод должен возвращать реальное число записанных байт (writeBytes), а не то количество? которое хотели записать (len). По идее да, это так. Но на практике из-за того что нам надо знать реально сколько байт записалось - нам придется дождаться завершения операции I/O - и только после этого мы сможем узнать сколько байт записали. А ожидание I/O (через WaitSingleObject/GetOverlappedResult) - это фризы ! Т.е. WriteFile возвращается немедленно - но не факт что оно возвратит True и не факт что оно возвратит реальное кол-во записанных байт. Поэтому всё нафик удаляем и считаем что сколько байт записали - столько и записалось! Иного способа (кроме потоков) я не вижу. Цитата Я, конечно, попробую Ваш совет, но не думаю что дело в этом. В этом, в этом... Не сомневайтесь. Я проверил. ЗЫ: Все-таки придется наверное что-то с этим делать. |
|
|
|
![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 27.12.2025, 3:37 |