Вопрос по event structure
-
- beginner
- Сообщения: 17
- Зарегистрирован: 02 июл 2020, 10:39
- Версия LabVIEW: 17
- Контактная информация:
Вопрос по event structure
Всем привет.
Есть алгоритм, который включает в себя опрос кнопок, в том числе опрос тумблеров. Работа алгоритма начинается со взведения какого-нибудь тумблера (переход в true). В середине алгоритма этот тумблер опускается (переходит в false). Реализован алгоритм в виде нескольких машин состояний. Все машины однотипны. Эти машины состояний я включил в event-структуру. Таким образом имеются несколько эвентов, в каждом из которых машина состояний. И все это в общий цикл while. Задал в качестве условия запуска того или иного эвента параметр value change тумблера. Проблема в том, что тумблер в процессе работы того или иного эвента опускается вниз (происходит value change), что влечет за собой повторный запуск того же эвента по окончании выполнения предыдущего. И так снова и снова. Нельзя ли в эвент структуре сделать параметр запуска не просто value change, а value change from false to true, например? Чтобы эвент запускался только тогда, когда тумблер взводится. Или же, может быть, посоветуете что-то еще?
Есть алгоритм, который включает в себя опрос кнопок, в том числе опрос тумблеров. Работа алгоритма начинается со взведения какого-нибудь тумблера (переход в true). В середине алгоритма этот тумблер опускается (переходит в false). Реализован алгоритм в виде нескольких машин состояний. Все машины однотипны. Эти машины состояний я включил в event-структуру. Таким образом имеются несколько эвентов, в каждом из которых машина состояний. И все это в общий цикл while. Задал в качестве условия запуска того или иного эвента параметр value change тумблера. Проблема в том, что тумблер в процессе работы того или иного эвента опускается вниз (происходит value change), что влечет за собой повторный запуск того же эвента по окончании выполнения предыдущего. И так снова и снова. Нельзя ли в эвент структуре сделать параметр запуска не просто value change, а value change from false to true, например? Чтобы эвент запускался только тогда, когда тумблер взводится. Или же, может быть, посоветуете что-то еще?
- kiparym
- advanced
- Сообщения: 178
- Зарегистрирован: 06 сен 2011, 08:52
- Версия LabVIEW: 8.2 & 2011
- Откуда: г. Саров
- Поблагодарили: 1 раз
- Контактная информация:
Re: Вопрос по event structure
Для анализа состояния можно использовать значение «New Val (Old Val)».
Пример контроля включения одного из возможных переключателей.
Пример контроля включения одного из возможных переключателей.
Последний раз редактировалось kiparym 24 июл 2020, 20:37, всего редактировалось 1 раз.
-
- professor
- Сообщения: 3410
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Вопрос по event structure
это уже не есть хорошо. А что если машина будет долго работать?
А как (или зачем) вы программно генерируете событие изменения значения?Проблема в том, что тумблер в процессе работы того или иного эвента опускается вниз (происходит value change), что влечет за собой повторный запуск того же эвента по окончании выполнения предыдущего.
Во-первых, если это просто "кнопки", то им можно назначить режим "с отскоком", тогда им выключать не придётся.
Во-вторых, если значение менять программно, то события не случается. Для генерации события существует спец свойство Val change Signaling. только оно генерирует событие, которое ловится в event-str
-
- beginner
- Сообщения: 17
- Зарегистрирован: 02 июл 2020, 10:39
- Версия LabVIEW: 17
- Контактная информация:
Re: Вопрос по event structure
Машина действительно может долго работать в моем случае. Как эвент-структура может этому помешать? Я так думал, что запускается эвент и в нем соответствующая машина. И работает себе этот эвент, пока не будет подана команда остановки цикла машины состояний...
В этом суть работы моей программы: пользователь взводит тумблер, выполняет некоторые действия, получает тот или иной сигнал и дает соответствующий отклик. Потом то же самое, но уже проверяется реакция на опускание тумблера (в той же state machine). То есть алгоритм предполагает, что тумблер в течение полного набора циклов машины состояний будет поднят, а потом опущен. Поэтому value change происходит два раза и два раза прилетает в виде команды для эвент-структуры. И таких тумблерорв несколько, соответственно несколько стейт-машин.
- kiparym
- advanced
- Сообщения: 178
- Зарегистрирован: 06 сен 2011, 08:52
- Версия LabVIEW: 8.2 & 2011
- Откуда: г. Саров
- Поблагодарили: 1 раз
- Контактная информация:
Re: Вопрос по event structure
Для отработки состояний дискретных элементов, необходимо применять «Булевскую алгебру».
Если не знаете, как оптимизировать дискретные уравнения, то можно дискретный автомат построить в общем виде:
1. «Even Structure» предназначен для фиксации изменения состояния дискретных элементов. При отсутствии изменений, «Timeout» пропускает блок обработки;
2. из дискретных элементов формируется таблица истинности. Общее количество строк таблиц K=2^N. Где N- количества дискретных элементов;
3. вручную заполняется «Case Structure» (таблица истинности) - реакция автомата на ситуацию. При необходимости, учитывать предыдущее состояние дискретных элементов, в таблицу вводятся новые элементы «Boolean Old _№».
Если не знаете, как оптимизировать дискретные уравнения, то можно дискретный автомат построить в общем виде:
1. «Even Structure» предназначен для фиксации изменения состояния дискретных элементов. При отсутствии изменений, «Timeout» пропускает блок обработки;
2. из дискретных элементов формируется таблица истинности. Общее количество строк таблиц K=2^N. Где N- количества дискретных элементов;
3. вручную заполняется «Case Structure» (таблица истинности) - реакция автомата на ситуацию. При необходимости, учитывать предыдущее состояние дискретных элементов, в таблицу вводятся новые элементы «Boolean Old _№».
Последний раз редактировалось kiparym 24 июл 2020, 17:37, всего редактировалось 1 раз.
-
- beginner
- Сообщения: 17
- Зарегистрирован: 02 июл 2020, 10:39
- Версия LabVIEW: 17
- Контактная информация:
Re: Вопрос по event structure
kiparym,
Спасибо за идею с кейсом! Засунул в каждую эвент-структуру по кейсу. Кейс пуст, если тумблер фолс, а если тумблер - тру, то в кейсе соответствующая машина состояний. А в самой машине состояний использую локальную переменную тумблера. Работает.
Спасибо за идею с кейсом! Засунул в каждую эвент-структуру по кейсу. Кейс пуст, если тумблер фолс, а если тумблер - тру, то в кейсе соответствующая машина состояний. А в самой машине состояний использую локальную переменную тумблера. Работает.
-
- professor
- Сообщения: 3410
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Вопрос по event structure
тут может возникнуть путаница. Есть машина состояний - вообще машина в целом. И есть конкретное состояние, в котором она находится.
Я говорю про время работы состояния. Если оно целиком обрабатывается в одном кейсе, то пока работа не закончена, интерфейс заморожен, и пользователь будет думать, что программа зависла.
так в чём проблема? я думал оно как-то "само" случается, а если вы так и задумали, то что же вас не устраивает. Отследить, куда переключили кнопку можно, как сказал kiparym, использовать кейсы.То есть алгоритм предполагает, что тумблер в течение полного набора циклов машины состояний будет поднят, а потом опущен.
машина должна быть одна, а в ней - сколько угодно состояний.И таких тумблерорв несколько, соответственно несколько стейт-машин.
-
- beginner
- Сообщения: 17
- Зарегистрирован: 02 июл 2020, 10:39
- Версия LabVIEW: 17
- Контактная информация:
Re: Вопрос по event structure
Я убрал галочку в чекбоксе "block panel" в параметрах всех эвентов.
Тоже хотел так сделать изначально, но запутался с тем, как это можно реализовать в моем случае. Не стал долго думать над этим и сделал несколько машин. Сначала просто разместил их параллельно, а теперь в эвентах. А какие преимущества дает использование только одной машины для всех этих нескольких однотипных алгоритмов?
- kiparym
- advanced
- Сообщения: 178
- Зарегистрирован: 06 сен 2011, 08:52
- Версия LabVIEW: 8.2 & 2011
- Откуда: г. Саров
- Поблагодарили: 1 раз
- Контактная информация:
Re: Вопрос по event structure
Использование таблицы истинности гарантирует, что обрабатываются все возможные варианты событий. Разбивка на несколько эвент- структур, без знаний Булевой алгебры, допускает появление ситуации не предусмотренной в обработчике событий. Расположение модулей обработки в кейс-структуре возможно, но при условии, что время для обработки любого события гарантировано не превышает 0,1-0,2 сек.(время не заметное для пользователя). Лучше в кейсе формировать очередь команд, а их исполнение поручить параллельному процессу.
-
- professor
- Сообщения: 3410
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Вопрос по event structure
это даже хуже, чем морозить. Пользователь будет уверен ,что программа его игнорирует, и начнёт жать всё подряд. И это всё выстроится в очередь, что ещё больше затянет ожидание.
На уровне абстракция тяжело рассуждать, что лучше/хуже.А какие преимущества дает использование только одной машины для всех этих нескольких однотипных алгоритмов?
несколько машин - это по сути та же одна, но на несколько веток. Тут дело не в методах подсчёта количества машин, а в том, что вы все шаги впихнули в один кейс и провоцируете пользователя на ненужные действия.
машину и интерфейс лучше разнести.
У Блюма есть спорный на мой взгляд "Событийно управляемый конечный автомат" Начните хотя бы с него.
В любом случае, если интерфейс надолго замерзает, это нужно показывать (блокировать кнопки и т.п). И в таком случае крайне желательно иметь возможность прервать работу машины, если вдруг я по ошибке запустил процесс, который будет длится час.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 6 Ответы
- 234 Просмотры
-
Последнее сообщение Artem.spb
-
- 3 Ответы
- 357 Просмотры
-
Последнее сообщение ujin1
-
- 7 Ответы
- 941 Просмотры
-
Последнее сообщение dadreamer
-
- 10 Ответы
- 774 Просмотры
-
Последнее сообщение Zloydj
-
- 14 Ответы
- 706 Просмотры
-
Последнее сообщение Vladimir_T