Последовательный запуск case

Простейшие вопросы в области инженерной разработки
Ответить
BIAs
beginner
beginner
Сообщения: 11
Зарегистрирован: 03 окт 2015, 20:07
Версия LabVIEW: 15
Контактная информация:

Последовательный запуск case

Сообщение BIAs »

Добрый день!
Столкнулся с маленьким затруднением. Как запустить последовательно case после выполнения другого case? Что бы было понятно, накидал простейший тест.
Тест:
Есть 2 кнопки, вторая кнопка выводит окно "Hello world!", первая кнопка запускает счетчик до 20, и после должна запустить case с "Hello world!", как видно моя реализация не работает, потому как пока не закончится case первой кнопки, второму case все до фонаря.
Вопрос - как сделать, что бы после выполнения счетчика включался case с "Hello world!"?
Вложения
test.png
test.vi
(11.73 КБ) 65 скачиваний
Boris_K
developer
developer
Сообщения: 281
Зарегистрирован: 28 янв 2015, 14:25
Версия LabVIEW: 2012 Pro

Re: Последовательный запуск case

Сообщение Boris_K »

У вас верхняя и нижняя части программы никак не связаны потоком данных, поэтому начинают они выполняться одновременно и параллельно. В нижней части (с вероятностью, очень близкой к 100%) значение переменной bool будет считано раньше, чем в него запишется true из верхнего case. Вот поэтому нижняя часть и "видит" всегда Bool=false. А строго говоря, очерёдность выполнения тут не определена. Поэтому, возможно, в одном случае из ста миллиардов программа сработает так, как вам хотелось :wink:

Выход - использовать основной принцип :labview: - data flow. Очерёдность выполнения определяется потоком данных по нитям. Элемент (оператор, функция, подприбор) начинает выполняться, когда по нитям пришли данные на все его входы. Данные с его выходов выходят одновременно, и только тогда, когда элемент завершит выполнение. Поэтому уберите вообще локальную переменную, уберите sequence в первом case (оставив только первый фрейм) и пустите нить из первого case на второй вход оператора OR. По этой нити передавайте само значение селектора первого case. Только нить обязательно должна пройти через case-структуру, чтобы данные на второй вход OR пошли только после выполнения этой структуры.
Race conditions - опасный и скользкий баг!
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Для чайников»