Добавьте необходимые настройки в диаграмму состояний типа агента О Транспорт, т. е задайте движение транспорта между РВБ и узлами связи.
- 1. В дереве модели найдите диаграмму типа агента О Транспорт.
- 2. Двойным щелчком откройте ее.
- 3. На диаграмме агента О Транспорт вы найдете диаграмму состояний транспорта, которую создали ранее. Теперь задайте логику ее работы.
- 4. Выделите состояние В_рвб. Задайте свойство Действие при входе этого состояния (рис. 10.42).
LinkedList list = тип = АВТО? main.рвб.автоЗапрос: main.рвб.авиаЗапрос;
if (! list. isEmpty ()) {.
ЗапросТехОбсл з = list. removeFirst () ;
УзелСвязи dest = (УзелСвязи)у.узелСвязи; dest. поискТранспорта (this, з);
Рис. 10.41. Результаты моделирования
}.
- 5. Остальные три состояния (К_рвб, На_узлеСвязи, К_узлуСвязи) не имеют дополнительных настроек.
- 6. Настройте логику движения транспорта с помощью переходов различных типов.
- 7. Переход из состояния В_рвб в состояние К_узлуСвязи происходит При получении сообщения ЕЭ чина ЗапросТехОбсл. Так как переход осуществляется Безусловно, нужно только указать Действие, которое следует выполнить транспорту: двигаться в точку координат узла связи (рис. 10.43).
Рис. 10.43. Действие при переходе в состояние К узлуСвязи
- 8. Из состояния К_узлуСвязи в состояние На_узлеСвязи переход Происходит По прибытию агента рЗ. Выделите этот переход и установите из списка указанное выше свойство.
- 9. Специалисты, прибывшие на грузовике или вертолете, начинают выполнять свою задачу сразу после прибытия на место. По завершению обслуживания транспортное средство может отправляться обратно в РВБ.
- 10. Перетащите на диаграмму Транспорт два элемента Параметр, дайте им имена срВрРемонта и врПровПТО, введите начальные значения 10 и 10 (соответственно tA и t2, согласно постановке задачи) (рис. 10.44). Тип обоих параметров double.
- 11. Выделите переход из состояния На_узлеСвязи в состояние К_рвб. Действие, задающее возвращение в РВБ, происходит По таймауту 0 (рис. 10.44).
- 12. В поле Таймаут введите код:
тип == АВИА ?
exponential (1/срВрРемонта).
:врПровПТО.
13. Введите в поле Действие код:
запрос.узел.statechart.fireEvent («исправлено»);
moveTo (main.рвб.getX (), main.рвб.getY ()) ;
запрос = null;
Рис. 10.44. Свойства перехода из состояния На_узлеСвязи в состояние К_рвб
Рис. 10.45. Фрагмент результатов моделирования после описания движения транспорта