IAR VisualState, требующий триггера для каждого выражения в состоянии - PullRequest
1 голос
/ 03 июня 2011

Я уже некоторое время использую инструменты проектирования на основе конечного автомата и видел инструменты моделирования UML, которые позволяют вам выполнять свою логику (вызывать функции, делать другие вещи) внутри состояния.Однако, проведя пару дней с IAR VisualState, кажется, что вы не можете выполнить свою логику в состоянии без триггера.Я в замешательстве, так как не имеет смысла ИМЕТЬ ТРИГГЕРА для каждого отдельного действия внутри состояния!

Вот что я ожидаю от инструмента диаграммы состояний: если я вхожу в StateA, при входе в состояние я устанавливаюзначения в разделе ввода, затем я хотел бы вызвать функцию (я просто хочу вызвать ее, НЕТ ТРИГГЕРА), и внутри этой функции я хочу вызвать событие, основанное на некоторой логике, и это событие будет инициировать переход состояния из StateAв StateB или StateC.

Что-то не так с этим ожиданием?Возможно ли это в VisualSTATE?

Помощь с благодарностью.

Ответы [ 2 ]

2 голосов
/ 05 июня 2011

VisualSTATE навязывает управляемую событиями парадигму, как и любая программа графического интерфейса пользователя. Все, что происходит в таких системах, запускается событием. Затем система отвечает, выполняя действия (вычисления) и, возможно, изменяя состояние (изменение состояния).

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

Возможно, прежде чем играть с visualSTATE, вы можете взять любую книгу по программированию с графическим интерфейсом для Windows (Visual Basic - хорошая отправная точка) и создать пару управляемых событиями приложений. После того, как вы это сделаете, философия VisualSTATE станет намного понятнее.

0 голосов
/ 02 августа 2013

Создайте 3 состояния: A, B, C, где состояние A является состоянием по умолчанию. Вводя состояние A, вызовите функцию действия [, которая устанавливает вас переменные a и b по некоторому алгоритму], за которыми следует ^ Signal1.

Entry/ action()^Signal1

Сделайте переход, управляемый Сигналом1 [послужит вам событием] из состояния А с двумя охранниками:

a <= b, transition to state C

a > b, transition to state B

...