Всем доброго здоровья, в первую очередь администраторам!
Первый большой (для меня) проект. В качестве базовой модели использую библиотеку Tasking (спасибо, Eugen Graf).
Описание
Основные действия следующие:
1) обращаюсь к измерительным приборам - измеряю
2) обрабатываю, вычисляю
3) вывожу на экран в виде графиков и цифр
3) записываю в файл
Использую:
- Основной VI - лицевая панель, цикл обработки событий, несколько subVI, содержащие очереди и выполняющие основные действия
- subVI алгоритм - алгоритмы работы;
- subVI измерение - управление генератором;
- subVI файл - запись, чтение
- subVI ошибки - обработка ошибок
Для отправки задания subVI использую очередь;
Для сигнализации о завершении операции - нотифер;
Проблемы:
1) Если алгоритм запустился остановить его очень сложно, так как замер занимает время, а вложенные циклы продолжают выполняться после сброса очередей. Приходится вводить дополнительные переменные останова и пр.
2) Если драйвер внутри цикла завис - программа не сбросится и не закроется.
3) Получилась куча переменных с параметрами настройки приборов, текущих параметров измерений, состояний и результатов замеров, хотя вначале хотелось свести количество переменных к минимуму.
3) Получилось более громоздко, чем задумывалось.
Надеюсь, профессиональный взгляд выявит нерациональные решения, а обсуждение будет полезно другим читателям при разработке своих проектов.
Вариант проекта на базе модели Tasking
-
- beginner
- Сообщения: 18
- Зарегистрирован: 28 фев 2015, 11:12
- Версия LabVIEW: 13
- Откуда: Москва
- Контактная информация:
Re: Вариант проекта на базе модели Tasking
Вот так выглядит главный модуль (VI) (в полном объеме занимает около 4 экранов).
Отрисовку графиков, вывод сообщений и управление курсорами не удалось убрать в subVI.
Отрисовку графиков, вывод сообщений и управление курсорами не удалось убрать в subVI.
-
- beginner
- Сообщения: 18
- Зарегистрирован: 28 фев 2015, 11:12
- Версия LabVIEW: 13
- Откуда: Москва
- Контактная информация:
Re: Вариант проекта на базе модели Tasking
А вот модуль алгоритма.
Бросается в глаза переменная "Operation Compleate", которая, может быть, совсем не нужна, но присутствует в 4 основных subVI. Единственное ее назначение - она не дает закрыть основное окно, пока не завершатся все операции в subVI (чтобы они тоже могли завершиться). В очереди может не быть элементов, а процесс в цикле может еще идти.
Как решить задачу по другому? Вопрос.
Бросается в глаза переменная "Operation Compleate", которая, может быть, совсем не нужна, но присутствует в 4 основных subVI. Единственное ее назначение - она не дает закрыть основное окно, пока не завершатся все операции в subVI (чтобы они тоже могли завершиться). В очереди может не быть элементов, а процесс в цикле может еще идти.
Как решить задачу по другому? Вопрос.
-
- beginner
- Сообщения: 18
- Зарегистрирован: 28 фев 2015, 11:12
- Версия LabVIEW: 13
- Откуда: Москва
- Контактная информация:
Re: Вариант проекта на базе модели Tasking
А вот пример изобилия переменных в subVI Измерения.
Кучка переменных-кластеров, сгруппированных вроде бы по смыслу, но на различных этапах требуются разные кусочки этих переменных.
С проблемой "потери данных" в переменных (перезапись до того как успел считать) пока не сталкивался, потому что, хотя имеется несколько параллельных циклов, процесс идет довольно последовательно. И стараюсь максимально слать данные через очереди/нотиферы.
Кучка переменных-кластеров, сгруппированных вроде бы по смыслу, но на различных этапах требуются разные кусочки этих переменных.
С проблемой "потери данных" в переменных (перезапись до того как успел считать) пока не сталкивался, потому что, хотя имеется несколько параллельных циклов, процесс идет довольно последовательно. И стараюсь максимально слать данные через очереди/нотиферы.
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Вариант проекта на базе модели Tasking
Странная библиотека тасков. Отсутствует управление таймаутами ожидания элемента очереди и нотификаторов. Поэтому потоки могут подвисать. Завтра вам попробую отправить библиотеку тасков, у которой во-первых, есть управление таймаутами, а во-вторых есть поддержка передачи глобальных сообщений. Таким образом можно передавать команды инициализации и остановки.
Основное окно в любом случае не закроется, пока хоть одна VI выполняется. Так что смысл переменной Operation Complete несколько туманен. Если вообще не бесполезен. Достаточно выходы ошибок каждой функции (в которой крутится свой таск) соединить билдом и подать на деактивацию тасков. Таски автоматически будут закрыты, когда все VI будут остановлены.
Основное окно в любом случае не закроется, пока хоть одна VI выполняется. Так что смысл переменной Operation Complete несколько туманен. Если вообще не бесполезен. Достаточно выходы ошибок каждой функции (в которой крутится свой таск) соединить билдом и подать на деактивацию тасков. Таски автоматически будут закрыты, когда все VI будут остановлены.
-
- beginner
- Сообщения: 18
- Зарегистрирован: 28 фев 2015, 11:12
- Версия LabVIEW: 13
- Откуда: Москва
- Контактная информация:
Re: Вариант проекта на базе модели Tasking
Спасибо, я сам ее делал, чтобы точнее понять как все работает. Таймауты пока не знаю как применить. Дело еще в том, что часто не известно какое время будет работать измеритель, в зависимости от условий он может измерять от 0,1 с до минут.
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Вариант проекта на базе модели Tasking
Таймаут тут для того и нужен, чтобы, раз данных нет, не блокировать выполнение программы, а, например, проверять другие условия. И его значение желательно ставить больше, чем базовый интервал обмена. Хотя можно и меньше. Это лишь будет регулировать, как часто будет выполняться этот цикл. Да, кстати, тип "вариант" лучше заменить на строку. И пользоваться функциями FlattenToString и UnflattenFromString. В данном случае "вариант" бесполезно тяжел.
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Вариант проекта на базе модели Tasking
Вот библиотека tasking ов
- Вложения
-
- Tasking2.zip
- (132.34 КБ) 290 скачиваний
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение