Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Срабатывание перехода по сигналу




Добавим к модели пешеходного перехода второй светофор, для пешеходов. Он имеет только два света, зеленый и красный, и три состояния: разре­шающее переход (зеленый), внимание (мигающий зеленый) и запрещающее переход (красный). В модель добавим еще две булевские переменные greenP и redp, их значения будут устанавливаться в состояниях еще одного стейт-чарта, который будет управлять светофором пешеходов. Добавим новый стейтчарт в окне редактора объекта Model, назвав его pedestrian_light (рис. 6.16).

Поскольку управление светофором пешеходов похоже на управление свето­фором трафика, новый стейтчарт можно построить изменением уже постро­енного стейтчарта traffic-light. Откройте окно редактора объекта Model и, нажав клавишу <Ctrl> на клавиатуре, перетащите иконку traffic_light в другое место. Этот объект скопируется, и ему будет дано имя traffic_light1. Измените имя стейтчарта на pedestrial_light и от-


редактируйте сам стейтчарт так, чтобы в нем были только состояния go, attention и stop. Поскольку эти имена принадлежат элементам объекта pedestrian_light, конфликта имен с так же названными состояниями дру­гого стейтчарта не будет.

Изменения, которые должны быть проведены с этим стейтчартом, такие:

- начальное состояние для светофора пешеходов должно быть stop — про­тивоположным начальному состоянию светофора трафика;

- нужно удалить состояния slow и ready.

В результате новый стейтчарт должен иметь вид рис. 6.17.

Установка переменных при входе и выходе из состояний этого стейтчарта д олжна, конечно, относиться к переменным redp и greenp, управляющих зажиганием света именно пешеходного светофора.

Рассмотрим теперь условия срабатывания переходов стейтчартов между со

стояниями. Очевидно, что необходимо корректно синхронизировать сраба­тывания переходов двух стейтчартов так, чтобы всегда, когда светофор пе­шеходов находится в состояниях до или attention, светофор траффика обязательно находился бы в состоянии stop. Этого можно добиться подбо-ром таймаутов срабатывания переходов. Однако более разумно сделать это, посылая специальные разрешающие сигналы из одного стейтчарта в другой рис. 6.18).

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


трафиком при переходе t5 в состояние, в котором запрещено движение транспорта. Пусть в стейтчарте traffic_light переход t6 может сработать, только если получен сигнал траффик, который генерируется в стейтчарте управления движением пешеходов при переходе t4 в состояние, запрещаю­щее движение пешеходов.

В AnyLogic для генерации сигналов существует функция fireEvent (<сигнал>), которая должна вызываться в том стейтчарте, кото­рому предназначен сигнал. Если из некоторого активного объекта мы хотим послать (произвольный) сигнал ааа стейтчарту с именем stchart, то необ­ходимо В ЭТОМ активном объекте вызвать функцию fireEvent (<сигнал>) этого стейтчарта, т. е. выполнить действие stchart. fireEvent ("ааа"). Если стейтчарт stchart находится в состоянии, в котором он ожидает этот сиг­нал, то соответствующий переход сработает. Если стейтчарт находится в со­стоянии, в котором он не ожидает этого сигнала, никакой реакции не будет, а полученный сигнал потеряется. В состоянии s стейтчарт ожидает сигнала ааа, если в поле Происходит окна свойств одного из переходов из состояния s выбран вариант По сигналу, а в поле Сигнал этого окна указан этот сигнал ааа.

В нашей модели в поле Действие перехода t5 стейтчарта traffic_light вставьте команду

pedestrian_light.fireEvent("ПЕШЕХОДЫ");


а в это же поле перехода t4 стейтчарта pedestrian_iight вставьте команду traffic_light.fireEvent("ТРАФФИК");

Таким образом, каждый из светофоров будет информировать другого о сво­ем переходе в состояние запрещения движения. Для перехода по разре­шающему сигналу в стейтчарте traffic_iight, в поле Происходит окна свойств перехода t€ выберите вариант По сигналу, а в поле Сигнал этого же окна наберите сигнал "траффик". Для перехода по разрешающему сигналу в стейтчарте pedestrian_light в поле Происходит окна свойств перехода t5 выберите вариант По сигналу, а в поле Сигнал этого же окна наберите сиг-вал "пешеходы". Остальные переходы этих стейтчартов пусть срабатывают по таймаутам. Рисунок 6.19 показывает, как задать параметры переходов стейтчарта traffic_iight. Запустите модель на выполнение.

Анимацию модели легко дополнить светофором пешеходов с двумя сигна­лами — красным и зеленым, значением цвета которых управляют логиче-ские переменные redp и greenP. Изображения идущего человека в окне светофора можно нарисовать ломаной линией, увеличив анимацию, например, в 5 раз. Ваша модель должна быть похожа на модель

PedestrianCross3.






Поделиться с друзьями:


Дата добавления: 2018-10-15; Мы поможем в написании ваших работ!; просмотров: 582 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

80% успеха - это появиться в нужном месте в нужное время. © Вуди Аллен
==> читать все изречения...

2292 - | 2142 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.