Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.81/64: Рейтинг темы: голосов - 64, средняя оценка - 4.81
 Аватар для _SayHello
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739

Работа с ком портом

19.11.2018, 09:18. Показов 14595. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Подскажите пожалуйста, как лучше организовать такую систему:
Приложение должно отправлять раз в секунду некую команду и получать на нее ответ. Так определяется наличие связи с железкой слейвом.
Также пользователь может в любое время отправить одну или несколько специальных команд, на которые тоже надо получить ответ.
Как правильно в Qt совместить такие работы с портом?
У меня пока идея была, настроить таймер и в его слоте отправлять команду пинг и ждать какое то время ответа через метод
C++
1
waitForReadyRead
А если пользователь жмакнет на кнопку отправки специальной команды пока мы ждем ответа на пинг?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.11.2018, 09:18
Ответы с готовыми решениями:

Работа с COM портом
Подскажите хорошую книгу или статью а еще бы исходник:) реализации работы с COM портом на C на самом низком уровне, без использования...

Работа с COM портом
Кто-нибудь делал это? В скором времени понадобится реализовать проект, в котором будет требоваться чтение и запись по COM порту. Как это...

Работа с COM портом
Всем доброго времени суток! Требуется небольшая подсказка. Пишу программу, которая отправляет\принимает данные с\на COM порт. Суть....

32
 Аватар для _SayHello
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
22.11.2018, 18:02  [ТС]
Студворк — интернет-сервис помощи студентам
Avazart,
Цитата Сообщение от Avazart Посмотреть сообщение
Может все же стоит заглянуть в примеры из документации?
Код полностью взят из примеров Qt Blocking Master Example. Лишних мьютексов я туда не добавлял.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
22.11.2018, 18:05
Цитата Сообщение от Avazart Посмотреть сообщение
и начните с нуля писать код, но без мютексов
А по моему мнению, лучший аналог блокирующего watchdog-таймера в вызывающем потоке будет именно на мьютексе...
0
 Аватар для _SayHello
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
22.11.2018, 18:16  [ТС]
Вообще мне на самом деле все равно, блокирующими функциями пользоваться или сигналами. В основном окне блокирующими функциями пользоваться нельзя - зафризит окно, поэтому эта задача и уехала в другой поток.
Не блокирующие функции же никак не привязаны ни ко времени, ни к количеству пришедших байт. И надо думать как из них вытянуть правильный response если мы, например не знаем длину пакета и так далее. + все равно надо заводить таймер на таймаут, если сигнал вообще не придет. То есть проблем не меньше. Если у меня срастется в голове концепция как это все объединить , то я перепишу, пока пробую то что есть в примерах.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.11.2018, 18:21
Цитата Сообщение от _SayHello Посмотреть сообщение
Не блокирующие функции же никак не привязаны ни ко времени, ни к количеству пришедших байт.
Таймеры зачем?
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
22.11.2018, 18:24
Цитата Сообщение от _SayHello Посмотреть сообщение
В основном окне блокирующими функциями пользоваться нельзя
Ну я б не сказал что фризенье окна бесполнезно. А то пользователь начнёт щёлкать кнопку подсоединения/отсоединения, параллельно что-то пытаясь сделать. В результате очереди будут наполнены всяким "мусором" (в особенности собственно командами на открытие/закрытие соединения) и после подключения прибора всех их обрабатывающему потоку придётся последовательно выполнить, что не есть хорошо.
0
 Аватар для _SayHello
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
22.11.2018, 18:35  [ТС]
TRam_, вот я как раз и думаю, как бы у пользователя окно не фризило, и разгрести все что он натыкает Если обычные пинги летают туда сюда быстро, то команды вытаскивания большого блока данных на 9600 бодах будет не особо быстрым ))

Avazart,
Цитата Сообщение от _SayHello Посмотреть сообщение
+ все равно надо заводить таймер на таймаут
я понимаю, какой инструмент надо использовать.
Данная программа пишется исключительно в образовательных и развлекательных целях. Блокирующий метод это первое, что пока руки дошли опробовать.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
22.11.2018, 19:05
Цитата Сообщение от _SayHello Посмотреть сообщение
и разгрести все что он натыкает
Можно дать пользователю визуализацию очереди с возможностью очищать её вручную (по кнопке). Ну и очищать при подключении/отключении.
0
 Аватар для _SayHello
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
22.11.2018, 19:18  [ТС]
TRam_, вот я уже подумал, на длинные команды, отключать кнопки, а по приходу ответа на нее включать обратно
0
20 / 16 / 8
Регистрация: 16.07.2014
Сообщений: 151
26.11.2018, 13:22
Цитата Сообщение от Avazart Посмотреть сообщение
используйте систему сигналов/слотов.
Я ему пример своего кода выше кинул. Как раз на системе сигнал/слот. И большие пакеты в один склеивает и вообще код стабильный. Никогда не подводил меня. Зачем все эти мютексы для меня вообще не понятно. Зачем нужно было так всё усложнять?
0
 Аватар для _SayHello
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
26.11.2018, 13:32  [ТС]
razorqhex, ну в итоге у меня все тоже работает, как я и хотел. Сигнал/слот+ таймер тоже понятно как работает. Как мне больше нравится я еще не решил.
0
18 / 18 / 2
Регистрация: 24.02.2014
Сообщений: 44
26.11.2018, 14:30
Сообщение от _SayHello
Пока не могу понять, что там эти 3 секунды происходит.
Сдается мне, что система сразу не отдает ресурс для повторного использования. Линукс - так точно. Причем,это касается и компортов, и сокетов.
2
0 / 0 / 0
Регистрация: 22.02.2025
Сообщений: 33
Записей в блоге: 3
03.04.2026, 14:46
Я пробую создаю connect, но у меня пишет ошибка, что я не так делаю?
0
Заблокирован
03.04.2026, 15:17
Цитата Сообщение от Uhbif79 Посмотреть сообщение
что я не так делаю?
Как правильно задавать вопросы
Точно и детально опишите свою проблему
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.04.2026, 15:17

Работа с COM-портом QT
Всем привет. Захотелось на днях написать GUI под windows для общения с STM32F100 по COM-порту. После долгих поисков перепробовал Delphi -...

Работа с COM портом, потоки
Есть 2 файла myclass.cpp и mainwindow.cpp В первом я создал поток чтения ком порта OVERLAPPED over; COMSTAT...

Работа с COM портом RTS/DTR
Делаю прием передачу по ком порту rs-232C подключение прием передачу я сделал но вот возникает вопрос как им управлять, а точнее как мне...

QT Работа с usb COM портом. Подключение Perl
Добрый день! Возникла такая проблемма. Занимаюсь одним проектом,и там стоит задача зделать связь,между контроллером и компьютером. Ранее я...

Работа нескольких UDP сокетов с 1м портом
Здравствуйте, возникла у меня такая проблемка: есть 2+ программы, расположенные на одной машине, которые должны читать данные с одного и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru