Возможен ли FSM в состоянии?

Мне было интересно, можно ли реализовать следующее.

Что я хочу сделать? Представьте себе мелодию Биг-Бена. Я хочу играть четверть мелодии каждые четверть часа. Мне нужен FSM со следующими состояниями:

  • Целый час (так xx:00) = (ввод = 01)
  • Прошлая четверть/четверть до (то есть xx:15 / xx:45) = (ввод = 10)
  • Половина прошлого (так xx:30) = (ввод = 11).

(хх = все равно)

Для каждого состояния у меня есть другой FSM. Этот FSM гарантирует, что музыка будет воспроизводиться правильно.

If(state = whole hour)
{
   switch music_state
   case A
   { play 1 sec, next_music_state = F}
   case and so on ......

Это работает? Могу ли я сделать FSM, у которого есть разные состояния часа, и для каждого состояния есть другой FSM?

Если что-то непонятно, дайте мне знать, и я постараюсь это прояснить. Я знаю, что эта часть не так сложна, но мне все еще интересно, будет ли работать эта реализация. Я надеюсь и думаю, что так оно и будет, хотя хочу быть уверенным в этом.

Заранее большое спасибо!


person Earless    schedule 18.11.2013    source источник


Ответы (2)


Вы можете сделать один FSM, чтобы упростить его...

Состояние по умолчанию будет IDLE: это будет проверять время (целый час, четверть или полминуты), если одно из них произойдет, вы просто запустите правильные состояния, такие как: MUSIC_FOR_WHOLE_HOUR, MUSIC_FOR_HALF_PAST...

Эти состояния будут запускать свою различную цепочку состояний, которые будут воспроизводить свою музыку, и вернутся обратно в состояние IDLE, чтобы дождаться следующего подходящего времени для повторного воспроизведения.

person nio    schedule 18.11.2013
comment
Вау, я как-то об этом не подумал. Это проще и требует меньше места. Спасибо:) - person Earless; 18.11.2013

Конечно, возможны машины метасостояний как с «внутренним состоянием», так и с «внешним состоянием». Некоторое время я делал что-то подобное, но только на прошлой неделе копейка упала, и я, наконец, написал конечный автомат с двумя отдельными состояниями. В одном процессе SM это работало как мечта.

«Внутренний конечный автомат» работает так же, как обычный конечный автомат, но в его последнем состоянии вы проверяете метасостояние или внешнее состояние, чтобы определить, какую часть внешней последовательности отправить следующей.

person user_1818839    schedule 18.11.2013