Действие перехода и действие условия в потоке состояний

В приведенных ниже двух диаграммах состояний первая выполняет действие, выполняемое при перемещении из StateA в StateD, т.е. / {Г = 5}; а второй должен выполнить действие {z=5}; Я понимаю, что это переходное действие, но я не могу понять, в чем разница между двумя переходами

1 ответ

Решение

См. Ссылку, предоставленную @am304 для получения конкретной информации, но вкратце,

  • в вашем первом изображении у вас есть Transition Action, который выполняется, когда происходит переход (и после любых действий по выходу из состояния - если вы имели какой-либо для State A),

  • в вашем втором изображении у вас есть Condition Action, который выполняется, когда любое условие, связанное с переходом, определяется как истинное. У вас нет явных условий (т.е. ничего подобного e1[cond1]{z = 5}) поэтому условие считается истинным, когда происходит какое-либо событие. Это будет выполнено, даже если переход не сделан (то есть он зависит только от условия.) Это означает, что это произойдет перед любым действием выхода из состояния (если вы имели State A.)

Учитывая вышеизложенное, в вашем конкретном случае (т.е. нет действий по выходу для State A и нет условий на переходе), оба дадут одинаковый результат.

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

"Переходное действие" /z=5; равно "входному действию" состояния назначения entry: z=5;, Это может выглядеть как "элегантное" решение, если у вас есть несколько состояний назначения, но вы хотите установить значение на основе предыдущего состояния и множества дополнительных логик (не в вашем примере).

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

"Условие действия" {z=5;} в сочетании с "государственными действиями" entry: z=5; достаточно для любой логики, которую мы должны были реализовать.

Для MathWorks было бы неплохо прекратить семантику переходного действия в будущих выпусках.

Другие вопросы по тегам