А.Е.Осоргин_-_AnyLogic_6_Лабораторный_практикум. Министерство образования и науки российской федерации федеральное государственное образовательное учреждение среднего профессионального образования Поволжский государственный колледж
Скачать 3.11 Mb.
|
Режим установить Циклический . Циклический режим события позволяет пользователю выполнять некоторые действия с требуемой периодичностью, например, каждое утро или ежегодно. Период срабатывания обратно-пропорционален частоте, поэтому в поле Период запишите 1/frequency. В нашей модели frequency – это частота следования импульсов генератора, ее нужно объявить как параметр модели. Создайте в классе Gen параметр frequency со значением по умолчанию равным 2 4.3.1.1. ПРЕЗЕНТАЦИЯ ГЕНЕРАТОРА Внешний вид генератора, а точнее объекта Gen представим прямоугольником, содержащим изображение импульса, как показано в правой части рис. 4.1. Откройте палитру Презентация и перетащите на диаграмму класса Gen прямоугольник, в свойствах укажите ширину этого прямоугольника – 80 единиц, а высоту – 100. Залейте его желтым цветом, цвет линии границы сделайте красным, а толщину линии равной 1. Рис. 4.2 Сделайте двойной щелчок мышью по элементу Ломаная в палитре (при этом его значок должен поменяться на этот: ). Теперь Вы можете рисовать ломаную точка за точкой, последовательно щелкая мышью в тех точках диаграммы, куда Вы хотите поместить вершины ломаной. Чтобы завершить рисование, добавьте последнюю точку ломаной двойным щелчком мыши. Нарисуйте в поле прямоугольника импульс в соответствии с рис. 4.2. 39 Для того чтобы вложенные объекты – экземпляры класса ( Gen ) отображались на структурной диаграмме верхнего уровня ( Model ) в графическом виде и имели интерфейсные элементы – порты, нужно нарисовать для вложенного объекта значок. Мы уже нарисовали прямоугольник с импульсом внутри, для того чтобы сделать их значком выделите последовательно каждую из фигур и на вкладке Основные панели Свойства установите флажок Значок, как показано на рис. 4.2. Вокруг прямоугольника появится пунктирная линия и надпись Значок Как уже говорилось, порты играют центральную роль в механизме передачи сообщений. Сообщения посылаются и получаются портами. Порты являются двунаправленными, через них сообщения могут и посы- латься, и приниматься. Перетащите элемент Порт из палитры Основная на диаграмму класса Gen , поместите его на левую сторону желтого прямоугольника и назовите этот порт tick , рис. 4.3. Рис. 4.3 Через этот порт наш экземпляр класса активного объекта Gen может посылать и при- нимать сообщения от других активных объектов. 4.3.1.2. ГЕНЕРАЦИЯ ИМПУЛЬСОВ Генератор нашей модели должен периодически с периодом 1/frequency посылать сообщения через порт tick . Ранее мы создали событие event , циклически срабатывающее с частотой frequency. При каждом срабатывании генератор должен выполнить действие - послать новое сообщение типа Object через выходной порт с именем tick . Для этого введите в поле Действие окна свойств события следующую строку: tick.send ( new Object( ) ); 4.3.2. РАЗРЯД СЧЕТЧИКА Введите еще один класс активного объекта в проект – Counter . Этот класс будет моде- лировать разряд десятичного счетчика. Он должен иметь одну целую переменную – n , в которой будет храниться значение данного разряда, и два порта: tick и overflow Создайте простую переменную n в классе Counter с начальным значением = 0. 4.3.2.1. ПРЕЗЕНТАЦИЯ РАЗРЯДА СЧЕТЧИКА Разряд счетчика представим в виде прямоугольника с цифрой разряда внутри. На диаграмме класса Counter нарисуйте прямоугольник 60х100. Залейте его и линию рамки черным цветом. Внутрь прямоугольника вставьте цифру в виде текстового символа. Для этого поместите на прямоугольник текст (кнопка на палитре Презентация) со значением 0 в поле Текст, вкладки Основные, свойств вставленного текста. Установите параметры текста: шрифт SansSerif, размер 72, цвет желтый. Во вкладку Динамические в поле Текст поместите имя переменной n , значение которой требуется отображать. Отметьте галочкой выбор Значок в свойствах текста и свойствах черного прямоугольника, рис. 4.4. 40 Рис. 4.4 4.3.2.2. СЧЕТ ИМПУЛЬСОВ Создайте два порта: tick и overflow и поместите их на диаграмму класса Counter, как показано на рис. 4.4. Каждый раз, когда приходит сообщение в порт tick , параметр n должен увеличиваться на единицу по модулю 10 с извещением по порту overflow о переполнении, если оно наступило. Это значит, что разряд счетчика увеличивает значение своего параметра n на 1 при приеме каждого сообщения, пришедшего через порт tick , кроме случая, когда n равно 9. В этом случае параметр n должен принять значение 0, а через выходной порт overflow будет послано сообщение. Именно это следует записать в поле Действие при получении в свойствах порта tick (рис. 4.5). Рис. 4.5 Через порт overflow , таким образом, будет передаваться каждое десятое сообщение, полученное в порт tick 41 4.3.3. КОРНЕВОЙ ОБЪЕКТ Структура корневого объекта Model должна содержать один экземпляр активного объекта Gen и три экземпляра разряда счетчика Counter , соединенных по соответствующим портам. Для создания экземпляра генератора в корневом объекте, откройте диаграмму класса активного объекта Model и перетащите на нее один экземпляр генератора (нажав левую клавишу мыши на имени Gen ), а затем и три экземпляра счетчика – Counter Экземпляры активных объектов получат имена по умолчанию и будут выглядеть так, как показано на рис. 4.6. Рис. 4.6 Чтобы установить взаимодействие между объектами, Вам нужно соединить порты этих объектов с помощью соединителей. Соединитель - это линия, соединяющая два порта. 1. Сделайте двойной щелчок мышью по одному из портов. 2. Последовательно щелкните в тех местах диаграммы, где Вы хотите поместить точки изгиба соединителя (для нашей модели не обязательно). 3. Завершите процесс соединения, сделав двойной щелчок мышью по второму порту. Запустите модель. Вы увидите из- менение во времени разрядов счетчика (рис. 4.7). Рис. 4.7 4.3.3.1. ПРЕЗЕНТАЦИЯ КОРНЕВОГО ОБЪЕКТА Для придания созданной модели законченного вида следует добавить элементы описания и интерактивности. Поместите в модель описание и слайдер, регулирующий частоту генератора, как показано на рис. 4.8. Продемонстрируйте свою модель преподавателю. 42 Рис. 4.8 4.4. КОНТРОЛЬНЫЕ ЗАДАНИЯ 1. Измените модель таким образом, чтобы счетчик начинал счет с произвольного числа. (5+) 2. Добавьте в модель переменную, которая будет принимать значения, показываемые счетчиком. (5+) 3. Измените модель таким образом, чтобы счетчик работал на убывание с определенного числа. (5+) 4. Измените презентацию модели таким образом, чтобы четные цифры показывались одним цветом, а нечетные - другим. (5) 5. Измените модель таким образом, чтобы параллельно основному счетчику работал второй счетчик, считающий каждый седьмой импульс. (5) 6. Измените презентацию модели таким образом, чтобы цифры мигали с частотой, которую можно изменять слайдером. (5) 7. Измените модель таким образом, чтобы цвет фона при значениях разряда счетчика = 0 был красным, а при остальных – синим. (5) 8. Измените модель таким образом, чтобы параллельно основному счетчику работал второй счетчик, считающий каждый четный импульс. (5) 9. Создайте модель 16-ричного счетчика, работающего параллельно с десятичным. (5) 10. Измените модель таким образом, чтобы параллельно основному - десятичному счетчику, работал двоичный. (4) 11. Измените модель таким образом, чтобы графическое изображение импульса генератора мигало синхронно генерации «тиков». (4) 12. Измените модель таким образом, чтобы счетчик работал на убывание. (4) 43 13. Измените модель таким образом, чтобы генератор создавал «тики» в случайные моменты времени. (4) 14. Измените презентацию модели таким образом, чтобы каждая цифра счетчика показывалась своим цветом. (4) 15. Дайте определение дискретно-событийной системы, приведите примеры. (3) 16. Охарактеризуйте все типы событий, реализованных в AnyLogic. (3) 17. Что такое порт, и какие элементы AnyLogic могут иметь порт? (3) 18. Добавьте еще один разряд к счетчику. (3) 19. Добавьте второй счетчик, работающий вместе с первым от одного генератора. (3) 44 ЗАДАНИЯ 5 – 6 СТЕЙТЧАРТЫ: МОДЕЛЬ ПЕШЕХОДНОГО ПЕРЕХОДА ЦЕЛИ ЗАНЯТИЯ В результате построения этой модели будут рассмотрены следующие новые вопросы: • построение стейтчартов; • действия при входе и выходе из состояния, иерархические состояния; • переход по исчерпании таймаута; • переход при получении сообщения; ФОРМА ОРГАНИЗАЦИИ ЗАНЯТИЯ Фронтальная. СТУДЕНТ ДОЛЖЕН ЗНАТЬ понятия: сообщение, таймаут, переход, состояния в стейтчартах и их виды, основы алгоритмического языка Java, интерфейс программы AnyLogic. СТУДЕНТ ДОЛЖЕН УМЕТЬ выполнять лабораторно-практическое задание №4, создавать модели в программе AnyLogic, использовать стейтчарты. ОБЕСПЕЧЕННОСТЬ компьютер с установленной программой AnyLogic версии 6, настоящий курс лабораторно-практических работ. ПРАКТИЧЕСКОЕ ЗАДАНИЕ Построим модель регулируемого пешеходного перехода со светофором, разрешающим или запрещающим движение транспорта. 5.1. ОПИСАНИЕ ПРОБЛЕМЫ Светофор, регулирующий движение автомобилей на пешеходном переходе, может находиться в следующих состояниях: движение транспорта разрешено (зеленый), приготовиться к запрещающему сигналу (мигающий зеленый), приготовиться к остановке (желтый), движение запрещено (красный) и приготовиться к движению (красный и желтый). Светофор работает в автоматическом режиме. В каждом состоянии светофор находится определенный постоянный период времени. 45 5.2. ПОСТРОЕНИЕ МОДЕЛИ Создайте новый проект под названием Svetofor и назовите класс корневого активного объекта Model Наша модель будет иметь только один активный объект, представляющий светофор, поэтому корневой объект Model будет единственным активным объектом нашей модели. На диаграмму класса активного объекта Model поместите Начало диаграммы состояний из панели Диаграмма состояний и назовите ее Для_автомобилей, заметьте, что AnyLogic может работать с элементами, набранными кириллицей. Перетащите мышью элемент Состояние под стрелочку начала диаграммы как показано на рис. 5.1. Рис. 5.1 Имя состояния, как и все другие его параметры, можно редактировать в окне его свойств. Для того чтобы построить стейтчарт, следует использовать элементы из палитры Диаграмма состояний, рис. 5.2. Рис. 5.2 1. определяет начальное состояние всего стейтчарта, 2. с помощью кнопки рисуются состояния (как простые, так и гиперсостояния), 3. используется для рисования переходов между состояниями, 4. определяет начальное состояние внутри сложного состояния, 5. используется для рисования состояния, являющегося "финальным" в поведении активного объекта. Заметьте, что для любого выделенного объекта внизу появляется панель его свойств, в котором можно изменить параметры и, в частности, имя объекта, если это необходимо. Структурные ошибки при рисовании стейтчарта - повисшие переходы, дублированные указатели начального состояния и т. п. - выделяются в панели Проекты значком Х красного цвета и записью в панели Ошибки. Выделенные переходы должны иметь на концах зеленые точки, если точки белые, это значит, что переход не соединен с состоянием – висит. В соответствии с алгоритмом работы светофора помимо начального состояния в модель нужно ввести дополнительные состояния (рис. 5.3). Начальное состояние назовите движение – движение автомобилям разрешено (зеленый свет), затем светофор переходит в состояние внимание – внимание (мигающий зеленый), медленно – приготовиться к остановке (желтый свет), остановка транспорта stop – запрет движения (красный свет) и приготовиться – приготовиться к движению (красный и желтый свет горят одновременно). Состояние внимание представим гиперсостоянием с парой переключающихся элементарных состояний: в одном из них зеленый горит (состояние А ), в другом – нет (со- стояние В ). Постройте эти состояния и соедините их переходами, как показано на рис. 5.3. 46 Зададим условия срабатывания переходов. Переходы в нашем автоматическом светофоре выполняются по таймауту, т. е. по истечении интервала времени, который прошел с момента прихода системы в данное состояние. 1. В состоянии движение светофор находится 10 секунд, 2. затем 7 секунд зеленый сигнал мигает, 3. в состоянии медленно 4 секунды горит желтый, 4. в течение 10 секунд движение запрещено и 5. 4 секунды светофор находится в состоянии приготовиться В нашей модели единица модельного времени соответствует 1 секунде реального времени. Для задания условий срабатывания переходов, выделите переход t1 , и в поле Происходит оставьте без изменения вариант По таймауту, а в поле По таймауту введите 25 (рис. 5.4). Аналогично задайте условия срабатывания других переходов. Между состояниями А и В переходы должны срабатывать через 1 секунду. Рис. 5.3 Запустите модель. Активное в данный момент состояние подсвечивается красным. Переход, ожидающий истечения таймаута подсвечивается синим. Проведите эксперименты с моделью при различных масштабах времени. Рис. 5.4 В каждом состоянии светофора должен гореть определенный сигнал: в состоянии движение должен гореть зеленый, в состоянии приготовиться должны гореть красный и желтый одновременно и т. п. Перейдите на диаграмму класса активного объекта Model Создайте три параметра логического типа: красный, желтый и зеленый , которые будут принимать истинное значение тогда, когда у светофора горит соответствующий сигнал: красный, желтый или зеленый (рис. 5.5). Начальные значения этих булевых параметров 47 можно не задавать: по умолчанию они будут равны false Мы создали стейтчарт именно для управления значениями этих параметров, каждое состояние отвечает за зажигание своего света или их комбинации. Например, в состоянии медленно должен гореть желтый, в состоянии stop должен загореться красный свет, а в состоянии приготовиться должны гореть красный и желтый одновременно. Запрограммируем эти действия. Рис. 5.5 1. В свойствах состояния движение в поле Действие при входе запишите зеленый=true ;, а в поле Действие при выходе запишите зеленый = false ; (рис. 5.6). 2. То же самое запишите для состояния В гиперсостояния внимание , а у состояния А эти поля нужно оставить пустыми – когда светофор находится в этом состоянии, он не горит. 3. Аналогично, в состоянии медленно нужно включить желтый сигнал, т. е. при входе в это состояние установить параметр желтый в true , а при выходе из этого состояния установить его в false 4. Для состояния stop аналогично опишите состояния параметра красный , 5. а для состояния приготовиться оба параметра красный и желтый нужно установить в true при входе, и в false при выходе. Рис. 5.6 Запустите модель на выполнение. Вы увидите, что параметры green, yellow и red будут переключаться между значениями истина и ложь в соответствии с алгоритмом переключения светофора. 48 5.3. ПРЕЗЕНТАЦИЯ МОДЕЛИ Презентация модели рисуется в той же диаграмме (в графическом редакторе), в которой задается и диаграмма моделируемого процесса, (рис. 5.7). Графические объекты цвета сигналов светофора в презентации имеют динамические параметры, все остальные – статические. Светофор строится из трех овалов, повернутых на 45 градусов (поле Поворот вкладки Дополнительные окна свойств овала). Установим динамическое значение цвета верхнего сигнала светофора: если переменная красный истинна, то цвет должен быть red (красный), в противном случае его цвет нужно установить gray (серый). Это записывается следующим условным выражением на языке Java: красный? red: gray Цвет среднего и нижнего овалов, следует установить в поле их динамических значений соответственно так: желтый? yellow: gray зеленый? green: gray red, yellow, green и gray – предопределенные константы, обозначающие стандартные цвета. Запустите модель и проверьте ее работу. Рис. 5.7 5.4. СРАБАТЫВАНИЕ ПЕРЕХОДА ПО СИГНАЛУ Добавим к нашей модели второй светофор, для пешеходов. Он будет иметь два сигнала, зеленый и красный, и три состояния: идите (зеленый), внимание (мигающий зеленый) и стойте (красный). Добавим в модель два булевских параметра стойте и идите , их значениями будет управлять второй стейтчарт – для пешеходов. Создадим этот стейтчарт 49 на той же диаграмме класса Model , назвав его Для_пешеходов, (рис. 5.8). Поскольку управление светофором пешеходов похоже на управление светофором автомобилей, новый стейтчарт можно построить копированием и изменением уже построенного стейтчарта Для_автомобилей Выделите 3 состояния стейтчарта Для_автомобилей и вставьте их в другое место диаграммы. Эти элементы скопируются, и им автоматически будут даны уникальные имена, чтобы не было конфликта имен. Переименуйте состояния стейтчарта Для_пешеходов, дорисуйте недостающий переход t12 и перенесите начало диаграммы на состояние Стойте , как показано на рис. 5.8. Измените параметры в полях Действие при входе и Действие при выходе в свойствах состояний стейтчарта Для_пешеходов . Теперь наш стейтчарт должен управлять параметрами идите и стойте , которые, в свою очередь, будут управлять зажиганием света именно пешеходного светофора. |