State Machine

Общие принципы, проектирование, модуляризация, темплейты и шаблоны
Ответить
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

State Machine

Сообщение Eugen Graf »

Скажите пожалуйста где и когда и зачем вы используете State Machine, то есть конечный автомат?

Я как то раньше часто ими пользовался, но теперь понимаю что они в общем то не нужны. Ведь можно сделать подприбор для каждого шага/состояния и вызывать эти подприборы друг за другом ну или несколько раз в цикле.

Другое дело когда речь идёт о коммуникации между циклами с помощью например очередей. Но это уже называется по-другому.
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: State Machine

Сообщение Konstantin Sumenko »

Отказ от state машины в некоторых приложениях может привести к обилию потоков данных в едином цикле, которых можно было избежать.
Далее, допустим есть цикл, обработка событий от нажатий кнопок и т.п.- event структура, тут и до state машины недалеко.
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: State Machine

Сообщение mzu2006 »

eg, во многом согласен с тобой. Простая state machine - это не самый удобный вариант во многих случаях. Я скорее воспринимаю фразу о "State Machine", как фразу о том, что программу необходимо разбивать на объекты, каждый из которых хранит своё состояние.
Неприменимость простого конечного автомата ко многим реальным случаям, и навязывание его NI в качестве самостоянтельной архитектуры - это моя главная претензия к экзамену на CLD. То, что приходится там использовать, имеет мало отношения к реальному миру.

Одно из больших достоинств LabVIEW - это то, что LabVIEW покрывает 2 уровня разработки. Первый: оцифровал - обработал - вывел (LabVIEW express). Второй: разработка полноценных приложений контроллеров, с обработкой events, подключением многих устройств итд итп. Простой конечный автомат слишком сложен для первого подхода, и слишком прост для второго подхода. Он интересен тольо с академической точки зрения
Аватара пользователя
ChevyCamaroSS67
beginner
beginner
Сообщения: 10
Зарегистрирован: 28 май 2008, 16:45
Версия LabVIEW: 7.1
Контактная информация:

Re: State Machine

Сообщение ChevyCamaroSS67 »

mzu2006, Верно! Конечные автоматы представленные в :labview: не очень то подходят для реальных задач. Вот у меня сейчас задача сделать автоматический опрос прибора по ком порту со своей логикой опроса, + человек может вмешаться в эту логику, + автоматика должна подстраиваться под эту логику, итого я не представляю как это все жило бы в одной SM. Хотя уже есть в задумках как это сделать, однако видется мне, что разбиение большой задачи на несколько вполне закоченных конечных автоматов может привести блокдиаграмму к красивому виду.
In LabVIEW We Trust
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: State Machine

Сообщение mzu2006 »

Jim Kring представляет любопытное решение: общий шаблон state machine с обработкой GUI, ошибок итд итп. http://www.jkisoft.com/state-machine/download/. Всегда хотел иметь что-то такое но не доходили руки написать это в общем виде. Вот только вопрос - зачем они сделали вместо очереди - просто массив строк :dntknw: , а вместо typedef просто строку для определения типа состояния :dntknw: . Как дойдут руки повозиться поподробнее, напишу больше
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: State Machine

Сообщение Eugen Graf »

mzu2006 писал(а):Jim Kring представляет любопытное решение: общий шаблон state machine с обработкой GUI, ошибок итд итп. http://www.jkisoft.com/state-machine/download/. Всегда хотел иметь что-то такое но не доходили руки написать это в общем виде. Вот только вопрос - зачем они сделали вместо очереди - просто массив строк :dntknw: , а вместо typedef просто строку для определения типа состояния :dntknw: . Как дойдут руки повозиться поподробнее, напишу больше
Массив строк или очередь - в данном случае роли не играет, захотели и сделали именно так. Ну что первое в голову пришло, то и взяли. Мне бы на их месте в первую очередь в голову пришла бы очередь.

А строки вместо тайпдефа, потому что хотят универсальное решение. А если будет тайпдеф, то этот тайпдеф нужно будет где то записывать в виде контрола. А потом если человек захочет воспользоваться этой структурой в своём приборе, то он изменит этот тайпдеф. А захочет ещё в другом приборе использовать, то опять изменит, и первый уже работать не будет. Идея с тайпдефом не просто хорошая, а отличная. Но не каждый новичёк знает как им пользоваться.
Ответить

Вернуться в «Модели программирования»