Лабораторная работа № 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 Запустите модель, проверьте правильность выполнения, если все верно продемонстрируйте готовую модель преподавателю.