Лабораторная работа № 5
«Стейтчарты. Модель пешеходного перехода»
Цель работы: Изучить возможности, построения
стейтчартов, действий при входе и выходе из состояния, переход по исчерпании
таймаута.
Шаг 1. Построение модели
1.1 Создайте
новый проект под названием Svetofor
и назовите класс корневого активного объекта Model.
1.2 На диаграмму класса активного
объекта Model поместите Начало диаграммы состояний из панели Диаграмма состояний и назовите ее Для_автомобилей, как представлено на
рисунке 62.
Рисунок 62
–Добавление объекта Начало диаграммы состояний
1.3 В соответствии с алгоритмом работы светофора помимо начального состояния в
модель нужно ввести дополнительные состояния (рис. 5.3). Начальное состояние
назовите движение – движение
автомобилям разрешено (зеленый свет), затем светофор переходит в состояние внимание – внимание (мигающий зеленый),
медленно – приготовиться к остановке
(желтый свет), остановка транспорта Stop
– запрет движения (красный свет) и приготовиться
– приготовиться к движению (красный и желтый свет горят одновременно).
Поместите на диаграмму перечисленные
состояния и соедините их переходами, как показано на примере, на рисунке 63.
Рисунок 63 –
Необходимые состояния и переходы
1.4 Для задания условий переходов, выделите переход
t1, и в поле Происходит оставьте без изменения вариант По таймауту,
а в поле По таймауту введите 25, как это сделать видно на рисунке 64.
Рисунок 64 –
Свойства перехода t1
1.5 Задайте
условия срабатывания остальных переходов, так же как и в пункте 1.4.
Между состояниями А и В переходы должны срабатывать
через 1 секунду, в состоянии
движение светофор находится 10 секунд,
затем 7 секунд зеленый сигнал
мигает, в состоянии медленно 4 секунды горит
желтый, в течение 10 секунд движение
запрещено и 4 секунды светофор
находится в состоянии приготовиться.
1.6 Запустите модель. Активное в данный момент
состояние подсвечивается красным. Переход, ожидающий истечения таймаута
подсвечивается синим, пример можно увидеть на рисунке 65. Убедитесь в том, что
верно работают все переходы.
Рисунок 65 –
Пример запущенной модели
Шаг 2. Создание параметров и
программирование действий
2.1 Перейдите
на диаграмму класса активного объекта Model и создайте три параметра и назовите
их Красный, Желтый и Зеленый.
2.2 По умолчанию тип созданных переменных double, Вам же необходимо изменить тип этих переменных на boolean, что показано на рисунке 66.
Рисунок 66 –
Изменение типа объектов
2.3 В свойствах состояния движение в поле Действие при
входе запишите: Зеленый=true;, а
в поле Действие при выходе запишите: Зеленый = false;, проверить правильность действий можно сверившись
с рисунком 67.
Рисунок 67 –
Действия состояния Движение
2.4 Для
состояния В гиперсостояния внимание,
запишите то же что и в пункте 2.3, а у состояния А эти поля нужно оставить пустыми – когда светофор находится в этом
состоянии, он не горит.
2.5 Так же
для состояния Медленно, Действие при
входе будет Желтый=true;, а в
поле Действие при выходе нужно
написать Желтый=false;.
2.6 Для
состояния Stop аналогично опишите
состояния параметра Красный.
2.7 А для
состояния Приготовиться оба параметра Красный
и Желтый нужно установить в true при входе и в false при выходе, как на рисунке 68.
Рисунок 68 –
Свойства состояния Приготовиться
2.8 Запустите модель на выполнение и убедитесь что параметры Зеленый,
Желтый и Красный будут переключаться между значениями истина и ложь в
соответствии с алгоритмом.
Шаг 3. Презентация модели
3.1 Нарисуйте презентацию модели в той же диаграмме, в которой
задается и диаграмма моделируемого процесса, пример представлен на рисунке 69.
Светофор строится из трех овалов, повернутых на 45 градусов (поле Поворот вкладки
Дополнительные окна свойств овала).
Рисунок 69 –
Презентация модели
3.2 Установите динамическое значение цвета верхнего сигнала светофора: если
переменная красный истинна, то цвет должен быть red, в противном случае его
цвет нужно установить gray. На языке Java Это записывается следующим условным
выражением: красный? red: gray, как
на рисунке 70.
Рисунок 70
–Динамические свойства верхнего овала
Red, yellow, green и gray –
предопределенные константы, обозначающие стандартные цвета.
3.3 Цвет среднего и нижнего овалов,
следует установить в поле их динамических
значений следующее: средний овал - желтый?
yellow: gray, нижний овал - зеленый?
green: gray.
3.4 Запустите модель и проверьте
правильность её работы.
Шаг 4. Добавление к модели
пешеходного перехода
Добавим к нашей модели второй светофор, для пешеходов.
Он будет иметь два сигнала, зеленый и красный, и три состояния: идите (зеленый), внимание (мигающий зеленый) и стойте
(красный).
4.1 Добавьте
в модель два объекта Параметр Логического типа, назовите их Стойте и Идите. Их
значениями будет управлять второй стейтчарт – для пешеходов.
4.2 Создайте
стейтчарт на той же диаграмме класса Model, назвав его Для_пешеходов, добавьте необходимые Состояния и Переходы в
соответствии с рисунком 71.
Рисунок 71
–Стейтчарт Для_пешеходов
4.3 Измените параметры в полях Действие при входе и
Действие при выходе в свойствах состояний стейтчарта Для_пешеходов в
соответствии с рисунком 72.
Рисунок 72
–Свойства объекта состояние Идите
Теперь наш
стейтчарт, будет управлять параметрами идите и стойте, которые, будут управлять
зажиганием света именно пешеходного светофора.
4.4 Задайте условия срабатывания переходов стейтчарта
Для_пешеходов, переход t8 должен срабатывать через 10 секунд, переходы t9 и
t10 через 1
секунду, переход t11 сработает
через 7 секунд.
В нашей модели стейтчарты будут обмениваться
следующими сигналами: АВТОМОБИЛИ и ПЕШЕХОДЫ. В стейтчарте Для_пешеходов переход
t12 будет срабатывать когда получен сигнал ПЕШЕХОДЫ, который будет
генерироваться в стейтчарте Для_автомобилей при переходе t5 в состояние stop. В
свою очередь, в стейтчарте Для_автомобилей переход t6 будет срабатывать когда получен сигнал АВТОМОБИЛИ,
который генерируется в стейтчарте Для_пешеходов при переходе t11 в состояние
Стойте.
4.5 В поле Действие
перехода t5 стейтчарта Для_автомобилей нужно вставить команду:
Для_пешеходов.fireEvent("ПЕШЕХОДЫ"),
как представлено на рисунке 73.
Рисунок 73
–Свойства перехода t5
4.6 Затем в поле перехода t11 стейтчарта Для_пешеходов
вставьте команду: Для_автомобилей.firеЕvеnt("АВТОМОБИЛИ").
4.7 В поле Происходит окна свойств перехода t12 выберите вариант При получении
сообщения, укажите тип сообщения String, а в поле Осуществлять переход выберите
Если сообщение равно и введите
"ПЕШЕХОДЫ", на показано на рисунке 74.
Рисунок 74
–Свойства перехода t12
4.8 По примеру пункта 4.7 измените параметры перехода t6 в стейтчарте Для_автомобилей в поле Происходит
окна свойств выберите вариант При
получении сообщения, укажите тип сообщения String, а в поле Осуществлять
переход выберите Если сообщение равно
и введите "АВТОМОБИЛИ".
4.9 На презентации модели, в дополнение к светофору
для автомобилей, следует нарисовать светофор для пешеходов с двумя сигналами –
красной надписью СТОЙТЕ и зеленой ИДИТЕ, что продемонстрировано на рисунке 75.
Рисунок 75 –
Добавление пешеходного светофора
4.10 Необходимо изменить параметры текстовых
переменных Стойте и Идите, чтобы динамикой цвета этих
надписей управляли логические объекты Параметры Стойте и Идите. Выделите надпись на светофоре и измените
значение поля Видимость, как на рисунке 76.
Рисунок 76 –
Поле видимость надписи Стойте
4.11 Поле Видимость
текстового объекта Идите измените по
аналогии с действиями пункта 4.10.
4.12 Запустите модель, проверьте правильность
выполнения, если все верно продемонстрируйте готовую модель преподавателю.