Всем добрый вечер, день, утром, ну в общем у кого как) У меня небольшая проблема, нужно сделать в labview конечный автомат, а именно - автомобильная коробка передач. Лекций по Лабвью не было, в интернете найти информацию на русском языке оказалось трудно, особенно по конечным автоматам. В общем попытался вникнуть сам, вроде получилось, да данная программа просто "зависает" я никак не могу осуществить переходы( не пойму в чём ошибка, помогите пожалуйста разобраться, условие задачи и свой вариант программы я кинул в файлы.
Также есть небольшие примечания к этой программе : В каждый момент работы программы на лицевой панели должно отображаться текущее состояние
системы. Во время работы системы необходимо эмулировать сцепление. Значения спидометра и тахометра
вводятся пользователем через лицевую панель.
Но их я пока не учитывал, т.к. ещё не разобрался с переходами состояний.
P.S. И да, если кто знает хорошие книжки по конечным автоматам в Лабвью, или просто видеоуроки на русском, просьба скинуть ссылки=)
Конечный автомат, помогите
-
- interested
- Сообщения: 3
- Зарегистрирован: 23 окт 2016, 16:19
- Версия LabVIEW: 2013
- Контактная информация:
-
- assistant
- Сообщения: 119
- Зарегистрирован: 06 май 2015, 22:24
- Версия LabVIEW: 2014, 2018
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
- Контактная информация:
Re: Конечный автомат, помогите
Попробуйте посмотреть http://www.labviewportal.org/viewtopic.php?f=21&t=8424.
Переход между состояниями можно осуществить, как на картинке в приложении.
Переход между состояниями можно осуществить, как на картинке в приложении.
- Вложения
-
- П1.png (5.82 КБ) 4590 просмотров
-
- professor
- Сообщения: 3406
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Конечный автомат, помогите
В конечный автомат называется "машина состояний", так информацию найти проще.
Есть хорошая книга "LabVIEW: стиль программирования", Блюм П., там в том числе и разные реализации машины состояний описаны, но не уверен, что начинающему будет с ней просто.
Конкретно в вашем случае проблема в том, что event-структуры распиханы по разным кейсам, получается, что я не могу из какой-нибудь первой передачи перейти сразу в 3ю.
И не ошибка, а особенность event в том, что при наступлении события панель блокируется до тех пор, пока событие не будет обработано (это меняется в настройках). Именно поэтому ваши переходы не осуществляются, а программа при этом не реагирует больше.
Я бы сделал так: переходы могут происходить как в таймауте при обработке текущего состояния (по времени например), так и в обработке нажатий пользователем на кнопки.
Есть хорошая книга "LabVIEW: стиль программирования", Блюм П., там в том числе и разные реализации машины состояний описаны, но не уверен, что начинающему будет с ней просто.
Конкретно в вашем случае проблема в том, что event-структуры распиханы по разным кейсам, получается, что я не могу из какой-нибудь первой передачи перейти сразу в 3ю.
И не ошибка, а особенность event в том, что при наступлении события панель блокируется до тех пор, пока событие не будет обработано (это меняется в настройках). Именно поэтому ваши переходы не осуществляются, а программа при этом не реагирует больше.
Я бы сделал так: переходы могут происходить как в таймауте при обработке текущего состояния (по времени например), так и в обработке нажатий пользователем на кнопки.
-
- interested
- Сообщения: 3
- Зарегистрирован: 23 окт 2016, 16:19
- Версия LabVIEW: 2013
- Контактная информация:
Re: Конечный автомат, помогите
Artem.spb, спасибо большое за развёрнутый ответ, а не могли бы пожалуйста по подробней рассказать, как в настройках убрать вот эту блокировку интерефейса при использовании event-ов?
-
- interested
- Сообщения: 3
- Зарегистрирован: 23 окт 2016, 16:19
- Версия LabVIEW: 2013
- Контактная информация:
Re: Конечный автомат, помогите
Alex Dem, старался делать так, как вы предложили, да вот пока не понимаю, как сделать переход сразу в несколько состояний, оператор select позволяет выбрать либо одно, либо другое, а в моём случае, нужно, что-бы он переходил в один из пяти кейсов по моему усмотрению, хотя я может ещё тот чайник ещё, мало что понимаю) попытаюсь разобраться, в любом случае, спасибо за ответ)
-
- professor
- Сообщения: 3406
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Конечный автомат, помогите
Но я настоятельно не рекомендую убирать эту настройку в вашем случае, иначе вы получите совсем неадекватное поведение программы. Если нажата кнопка, обработчик которой в другом кейсе, то событие поставится в очередь, и как только до кейса дойдёт цикл, оно (событие) будет обработано, и машина "вдруг сама" переключит передачу.Supersilver3310 писал(а):Artem.spb, спасибо большое за развёрнутый ответ, а не могли бы пожалуйста по подробней рассказать, как в настройках убрать вот эту блокировку интерефейса при использовании event-ов?
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Конечный автомат, помогите
Переход сразу в несколько состояний сделать невозможно. Это противоречит самому понятию "конечный автомат". Текущее состояние может быть только одно. Другое дело, что несколько состояний можно "пройти", от одного к следующему и так далее.да вот пока не понимаю, как сделать переход сразу в несколько состояний
-
- assistant
- Сообщения: 122
- Зарегистрирован: 09 дек 2014, 10:14
- Версия LabVIEW: 7-2015
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Конечный автомат, помогите
Переход сразу в несколько состояний _одновременно_ нереализуем поскольку конечный автомат это набор детерминированных состояний.Supersilver3310 писал(а):Alex Dem, старался делать так, как вы предложили, да вот пока не понимаю, как сделать переход сразу в несколько состояний, оператор select позволяет выбрать либо одно, либо другое, а в моём случае, нужно, что-бы он переходил в один из пяти кейсов по моему усмотрению, хотя я может ещё тот чайник ещё, мало что понимаю) попытаюсь разобраться, в любом случае, спасибо за ответ)
Если же у Вас проблемы с описанием перехода в одно из 5и состояний, то для начала нужно обратится к изучению булевой алгребры, а уже потом приступать к программированию.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение