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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как сделать вторичный поток с постоянный жизненным циклом и управлением из главн  (Прочитано 2058 раз)
Alexey_Golubev_92
Новичок

Offline Offline

Сообщений: 8


Просмотр профиля
« : Ноябрь 24, 2019, 14:55 »

Имеется объект, который живёт в другом потоке и выполняет различные задачи по запросам или выполняет повторяющиеся задачи.

Более приземленное описание. Через протокол modbus RTU опрашиваются датчики. Датчиков 247 штук. Используются 3 команды, чтение регистров, запись регистров, чтение ID. Управление датчиками может быть ручное или автоматическое. При ручном режиме принимаем данные из главного потока и передаем на датчик, после ответа датчика передаем данные в главный поток для записи в usb устройство и отображение на экране. При автоматическом режиме управляем датчиками по заданному алгоритму и отсылаем ответы датчиков в главный поток для записи на usb устройство и отображения данных.

Вот не знаю как лучше реализовать это.
Записан
RedDog
Частый гость
***
Offline Offline

Сообщений: 221


Просмотр профиля
« Ответ #1 : Ноябрь 24, 2019, 16:15 »

При создании главного создается фоновый и запускается.
Управление фоновому из главного передается сигналами из первого.
Так же главный сигналами из фонового получает информацию.
При завершении приложения вместе с главным убивается и фоновый.
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 870


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #2 : Ноябрь 24, 2019, 20:14 »

Через протокол modbus RTU опрашиваются датчики. Датчиков 247 штук.
Вот не знаю как лучше реализовать это.
Опрос устройств на одной шине по modbus выполняется последовательно. Пока не получите ответ или ошибку, следующий запрос отправлять нельзя. Поэтому, на мой взгляд, наилучшим решением является организация очереди запросов. Очередь должна отслеживать получение ответов из шины (или таймаутов при отсутствии ответов) и отправлять следующий запрос. Т.е. очередь работает с устройствами синхронно - продвижение запросов инициируется ответами или таймаутами (если не задавать таймауты ожидания, то очередь может застопориться). Сразу предусмотрите возможность установки настраиваемой паузы между получением ответа и отправкой запроса -пригодится при плохих линиях. Мне иногда приходится ставить паузу до 20 мс (шина RS485 длиной 50-60 м, два "уса" в разные стороны от одного порта - вот так проложили..). Поэтому, сочувствую - две с половиной сотни даже при шустрых устройствах (15-20 мс), это несколько секунд. А устройства иногда отказывают...
Таким образом, клиентская часть будет работать не напрямую с устройствами, а с очередью - ставит запрос в нее и забывает. Обратный поток данных организовать уже просто - сигнал с данными и идентификатором устройства.
Так что организация отдельного потока для опроса, на мой взгляд, нормальная идея.
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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