Проблема с диаграммой состояния агента - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь создать диаграмму состояний агента, в которой переход должен происходить каждый день в 16:00 (кроме выходных).

Я уже пробовал: 1. условный переход (условие: getHourOfDay () == 16) 2: переход по тайм-ауту, который будет «вставлять» моего агента в график каждые 1 с и проверять, если время = 16.

Мой код все еще не запущен, кто-нибудь знает, как его решить?

enter image description here

Это мое представление диаграммы состояний,Клиент - это единственный ресурс, который должен «вывозить» продукты из моего запаса каждый день в 16:00.Это должно происходить в «Активном» состоянии.

enter image description here

Я установил переход по тайм-ауту (из Active-Active), который запускается каждые 1 с.

enter image description here

Внутри моего «Активного» состояния во «входном действии» я написал свой код, чтобы проверить, не наступило ли 4 часа дня, и запустил мое действие, если это так.

Я думал, что поскольку я установил переход по тайм-ауту, он будет проверять мое состояние каждые 1 с, но, видимо, он не работает.

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Ваш агент не входит в активное состояние через внутренний переход.

Перерисовать переход, чтобы фактически выйти из активного состояния, а затем снова ввести его, как показано ниже: enter image description here

1 голос
/ 01 апреля 2019

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

Ваш подход к тайм-ауту: зачем вам «вставлять» своего агента в его собственную диаграмму состояний? Не уверен, что понимаю ...

Почему бы не настроить расписание или событие с вашим требованием повторения и заставить его отправить сообщение на диаграмму состояний: stateChart.fireEvent("trigger!");. В диаграмме состояний добавьте переход на основе сообщений, ожидающий этого сообщения. Это будет работать.

Будьте осторожны, чтобы понять разницу между функциями Statechart.fireEvent() и Statechart.receiveMessage().

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

...