Вариант проекта на базе модели Tasking

Общие принципы, проектирование, модуляризация, темплейты и шаблоны
Ответить
Dominoxa
beginner
beginner
Сообщения: 18
Зарегистрирован: 28 фев 2015, 11:12
Версия LabVIEW: 13
Откуда: Москва
Контактная информация:

Вариант проекта на базе модели Tasking

Сообщение Dominoxa »

Всем доброго здоровья, в первую очередь администраторам!
Первый большой (для меня) проект. В качестве базовой модели использую библиотеку Tasking (спасибо, Eugen Graf).
Описание
Основные действия следующие:
1) обращаюсь к измерительным приборам - измеряю
2) обрабатываю, вычисляю
3) вывожу на экран в виде графиков и цифр
3) записываю в файл

Использую:
- Основной VI - лицевая панель, цикл обработки событий, несколько subVI, содержащие очереди и выполняющие основные действия
- subVI алгоритм - алгоритмы работы;
- subVI измерение - управление генератором;
- subVI файл - запись, чтение
- subVI ошибки - обработка ошибок

Для отправки задания subVI использую очередь;
Для сигнализации о завершении операции - нотифер;

Проблемы:
1) Если алгоритм запустился остановить его очень сложно, так как замер занимает время, а вложенные циклы продолжают выполняться после сброса очередей. Приходится вводить дополнительные переменные останова и пр.
2) Если драйвер внутри цикла завис - программа не сбросится и не закроется.
3) Получилась куча переменных с параметрами настройки приборов, текущих параметров измерений, состояний и результатов замеров, хотя вначале хотелось свести количество переменных к минимуму.
3) Получилось более громоздко, чем задумывалось.

Надеюсь, профессиональный взгляд выявит нерациональные решения, а обсуждение будет полезно другим читателям при разработке своих проектов.
Вложения
CONDUCTIVE 2_0.rar
Проект
(1.67 МБ) 249 скачиваний
Dominoxa
beginner
beginner
Сообщения: 18
Зарегистрирован: 28 фев 2015, 11:12
Версия LabVIEW: 13
Откуда: Москва
Контактная информация:

Re: Вариант проекта на базе модели Tasking

Сообщение Dominoxa »

Вот так выглядит главный модуль (VI) (в полном объеме занимает около 4 экранов).
Отрисовку графиков, вывод сообщений и управление курсорами не удалось убрать в subVI.
Вложения
Main.png
Dominoxa
beginner
beginner
Сообщения: 18
Зарегистрирован: 28 фев 2015, 11:12
Версия LabVIEW: 13
Откуда: Москва
Контактная информация:

Re: Вариант проекта на базе модели Tasking

Сообщение Dominoxa »

А вот модуль алгоритма.
Бросается в глаза переменная "Operation Compleate", которая, может быть, совсем не нужна, но присутствует в 4 основных subVI. Единственное ее назначение - она не дает закрыть основное окно, пока не завершатся все операции в subVI (чтобы они тоже могли завершиться). В очереди может не быть элементов, а процесс в цикле может еще идти.
Как решить задачу по другому? Вопрос.
Вложения
Algorithm.png
Dominoxa
beginner
beginner
Сообщения: 18
Зарегистрирован: 28 фев 2015, 11:12
Версия LabVIEW: 13
Откуда: Москва
Контактная информация:

Re: Вариант проекта на базе модели Tasking

Сообщение Dominoxa »

А вот пример изобилия переменных в subVI Измерения.
Кучка переменных-кластеров, сгруппированных вроде бы по смыслу, но на различных этапах требуются разные кусочки этих переменных.
С проблемой "потери данных" в переменных (перезапись до того как успел считать) пока не сталкивался, потому что, хотя имеется несколько параллельных циклов, процесс идет довольно последовательно. И стараюсь максимально слать данные через очереди/нотиферы.
Вложения
Measure state.png
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Вариант проекта на базе модели Tasking

Сообщение Borjomy_1 »

Странная библиотека тасков. Отсутствует управление таймаутами ожидания элемента очереди и нотификаторов. Поэтому потоки могут подвисать. Завтра вам попробую отправить библиотеку тасков, у которой во-первых, есть управление таймаутами, а во-вторых есть поддержка передачи глобальных сообщений. Таким образом можно передавать команды инициализации и остановки.
Основное окно в любом случае не закроется, пока хоть одна VI выполняется. Так что смысл переменной Operation Complete несколько туманен. Если вообще не бесполезен. Достаточно выходы ошибок каждой функции (в которой крутится свой таск) соединить билдом и подать на деактивацию тасков. Таски автоматически будут закрыты, когда все VI будут остановлены.
Dominoxa
beginner
beginner
Сообщения: 18
Зарегистрирован: 28 фев 2015, 11:12
Версия LabVIEW: 13
Откуда: Москва
Контактная информация:

Re: Вариант проекта на базе модели Tasking

Сообщение Dominoxa »

Спасибо, я сам ее делал, чтобы точнее понять как все работает. Таймауты пока не знаю как применить. Дело еще в том, что часто не известно какое время будет работать измеритель, в зависимости от условий он может измерять от 0,1 с до минут.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Вариант проекта на базе модели Tasking

Сообщение Borjomy_1 »

Таймаут тут для того и нужен, чтобы, раз данных нет, не блокировать выполнение программы, а, например, проверять другие условия. И его значение желательно ставить больше, чем базовый интервал обмена. Хотя можно и меньше. Это лишь будет регулировать, как часто будет выполняться этот цикл. Да, кстати, тип "вариант" лучше заменить на строку. И пользоваться функциями FlattenToString и UnflattenFromString. В данном случае "вариант" бесполезно тяжел.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Вариант проекта на базе модели Tasking

Сообщение Borjomy_1 »

Вот библиотека tasking ов
Вложения
Tasking2.zip
(132.34 КБ) 288 скачиваний
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Модели программирования»