Диаграмма состояний Anylogic с циклами для установки 3-х комплектов как незанятых или запланированных - PullRequest
1 голос
/ 16 октября 2019

(Main.java:935) __ (Образ ошибки NPE) У меня есть 3 идентичных набора, представленных как тип агента ProductionOrder. Кнопка на главном посылает вызов, чтобы ввести к источнику на главном. Источник создает агент ProductionOrder и имеет следующий код в своем действии При выходе, которое инициирует переход диаграммы состояний в типе агента ProductionSuite. Диаграмма состояний начинается с «ожидания» и имеет переход сообщения, который подключается к «запланированному». Когда я запускаю модель и нажимаю кнопку, источник получает вызов для инъекции и отправляет ProductionOrder в комплект 2. Я вижу на вкладке комплекта 2 в окне «Выполнить», что он меняется с «ожидания» на «запланированный»'состояние, когда источник активирован. Хотя это также изменяет состояния на «запланированные» для наборов 0 и 1, когда ни один из них не получил заказ. Когда я снова нажимаю кнопку, чтобы ввести второй агент ProductionOrder, модель получает кучу ошибок и не может продолжить работу. Я думаю, что он все еще где-то группирует наборы и что проблема может не исходить из исходного кода, так как теперь он отправляет сообщение. Или, может быть, мне нужна еще одна строка кода для дальнейшего разделения комплектов.

 sourceProductionOrder--->exitToSuite

 [sourceProductionOrder On Exit Action]

'if ( productionSuite(0).inState(ProductionSuite.idle))
{agent.assignedSuite = productionSuite(0);
deliver("Suite is Scheduled", agent.assignedSuite);}

if ( productionSuite(1).inState(ProductionSuite.idle))
{agent.assignedSuite = productionSuite(1);
deliver("Suite is Scheduled", agent.assignedSuite);}

if ( productionSuite(2).inState(ProductionSuite.idle))
{agent.assignedSuite = productionSuite(2);
deliver("Suite is Scheduled", agent.assignedSuite);}'

[exitToSuite On Exit Action]

'agent.assignedSuite.enterProductionOrder.take(agent);'

1 Ответ

1 голос
/ 16 октября 2019

Возможно ли, что вы просто должны использовать установку "если ... еще, если ... еще, если" (вместо вашей текущей "если ... если ... если")? В настоящее время все ваши операторы if будут запущены, потому что все prodSuites в начале неактивны. Это также объясняет, почему вы получаете ошибки со второй попытки ...

Что я имею в виду:

if ( productionSuite(0).inState(ProductionSuite.idle))
    {agent.assignedSuite = productionSuite(0);
    deliver("Suite is Scheduled", agent.assignedSuite);}

else if ( productionSuite(1).inState(ProductionSuite.idle))
    {agent.assignedSuite = productionSuite(1);
    deliver("Suite is Scheduled", agent.assignedSuite);}

else if ( productionSuite(2).inState(ProductionSuite.idle))
    {agent.assignedSuite = productionSuite(2);
    deliver("Suite is Scheduled", agent.assignedSuite);}
...