Скажите пожалуйста где и когда и зачем вы используете State Machine, то есть конечный автомат?
Я как то раньше часто ими пользовался, но теперь понимаю что они в общем то не нужны. Ведь можно сделать подприбор для каждого шага/состояния и вызывать эти подприборы друг за другом ну или несколько раз в цикле.
Другое дело когда речь идёт о коммуникации между циклами с помощью например очередей. Но это уже называется по-другому.
State Machine
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
-
Konstantin Sumenko
- expert
- Сообщения: 1439
- Зарегистрирован: 17 июл 2008, 12:20
- Награды: 2
- Версия LabVIEW: 2010
- Откуда: Moscow
- Поблагодарили: 1 раз
- Контактная информация:
Re: State Machine
Отказ от state машины в некоторых приложениях может привести к обилию потоков данных в едином цикле, которых можно было избежать.
Далее, допустим есть цикл, обработка событий от нажатий кнопок и т.п.- event структура, тут и до state машины недалеко.
Далее, допустим есть цикл, обработка событий от нажатий кнопок и т.п.- event структура, тут и до state машины недалеко.
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: State Machine
eg, во многом согласен с тобой. Простая state machine - это не самый удобный вариант во многих случаях. Я скорее воспринимаю фразу о "State Machine", как фразу о том, что программу необходимо разбивать на объекты, каждый из которых хранит своё состояние.
Неприменимость простого конечного автомата ко многим реальным случаям, и навязывание его NI в качестве самостоянтельной архитектуры - это моя главная претензия к экзамену на CLD. То, что приходится там использовать, имеет мало отношения к реальному миру.
Одно из больших достоинств LabVIEW - это то, что LabVIEW покрывает 2 уровня разработки. Первый: оцифровал - обработал - вывел (LabVIEW express). Второй: разработка полноценных приложений контроллеров, с обработкой events, подключением многих устройств итд итп. Простой конечный автомат слишком сложен для первого подхода, и слишком прост для второго подхода. Он интересен тольо с академической точки зрения
Неприменимость простого конечного автомата ко многим реальным случаям, и навязывание его NI в качестве самостоянтельной архитектуры - это моя главная претензия к экзамену на CLD. То, что приходится там использовать, имеет мало отношения к реальному миру.
Одно из больших достоинств LabVIEW - это то, что LabVIEW покрывает 2 уровня разработки. Первый: оцифровал - обработал - вывел (LabVIEW express). Второй: разработка полноценных приложений контроллеров, с обработкой events, подключением многих устройств итд итп. Простой конечный автомат слишком сложен для первого подхода, и слишком прост для второго подхода. Он интересен тольо с академической точки зрения
Правила форума (Forum rules in Russian)
rm -rf /mnt/windows
rm -rf /mnt/windows
- ChevyCamaroSS67
- beginner
- Сообщения: 10
- Зарегистрирован: 28 май 2008, 16:45
- Версия LabVIEW: 7.1
- Контактная информация:
Re: State Machine
mzu2006, Верно! Конечные автоматы представленные в не очень то подходят для реальных задач. Вот у меня сейчас задача сделать автоматический опрос прибора по ком порту со своей логикой опроса, + человек может вмешаться в эту логику, + автоматика должна подстраиваться под эту логику, итого я не представляю как это все жило бы в одной SM. Хотя уже есть в задумках как это сделать, однако видется мне, что разбиение большой задачи на несколько вполне закоченных конечных автоматов может привести блокдиаграмму к красивому виду.
In LabVIEW We Trust
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: State Machine
Jim Kring представляет любопытное решение: общий шаблон state machine с обработкой GUI, ошибок итд итп. http://www.jkisoft.com/state-machine/download/. Всегда хотел иметь что-то такое но не доходили руки написать это в общем виде. Вот только вопрос - зачем они сделали вместо очереди - просто массив строк , а вместо typedef просто строку для определения типа состояния . Как дойдут руки повозиться поподробнее, напишу больше
Правила форума (Forum rules in Russian)
rm -rf /mnt/windows
rm -rf /mnt/windows
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: State Machine
Массив строк или очередь - в данном случае роли не играет, захотели и сделали именно так. Ну что первое в голову пришло, то и взяли. Мне бы на их месте в первую очередь в голову пришла бы очередь.mzu2006 писал(а):Jim Kring представляет любопытное решение: общий шаблон state machine с обработкой GUI, ошибок итд итп. http://www.jkisoft.com/state-machine/download/. Всегда хотел иметь что-то такое но не доходили руки написать это в общем виде. Вот только вопрос - зачем они сделали вместо очереди - просто массив строк , а вместо typedef просто строку для определения типа состояния . Как дойдут руки повозиться поподробнее, напишу больше
А строки вместо тайпдефа, потому что хотят универсальное решение. А если будет тайпдеф, то этот тайпдеф нужно будет где то записывать в виде контрола. А потом если человек захочет воспользоваться этой структурой в своём приборе, то он изменит этот тайпдеф. А захочет ещё в другом приборе использовать, то опять изменит, и первый уже работать не будет. Идея с тайпдефом не просто хорошая, а отличная. Но не каждый новичёк знает как им пользоваться.