ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 04.02.2024
Просмотров: 379
Скачиваний: 4
СОДЕРЖАНИЕ
1.1. Моделирование колебательного процесса
1.4. Контрольное задание «Фигуры»
1.5. Анимация поведения агента
2.1. Модель светофора для управления движением
2.2. Модель пешеходного перехода
2.3. Контрольное задание “Переход, управляемый пешеходом”
2.4. Контрольное задание “Модель кодового замка”
2.5 Модель трех разрядного счетчика
2.6. Контрольное задание «Запуск события при получении контрольного значения»
3. Моделирование элементов цифровых систем управления
3.2. Модели элементарных логических операций
4.1. Модель реализации продукта по Бассу
4.2. Контрольное задание «Учет повторных покупок»
4.3. Контрольное задание «Модель распространения эпидемии»
4.4. Взаимодействие активных классов
4.5. Контрольное задание «Визуализация модели динамики численности населения»
5.3. Учет влияния общения между потребителями
6. Задания для самостоятельной работы
Основные сведения о языке программирования Java
Класс Math. Математические функции
Обработка исключительных ситуаций
Рис. 2.14. Ввод неверного кода
| |
Рис. 2.15. Код верный
Методические указания:
Для управления работой замка нужно создать стейтчарт, который показан на рисунке 2.16.
Рис. 2.16. Стейтчарт кодового замка.
Состояния кодового замка:
stateBlink – задает мерцание сигнала дисплея;
stateControl – проверка кода введенного пользователем;
stateOK – вывод сообщение о том, что код верный;
stateError – вывод сообщения о неверном коде.
Для контроля за состоянием замка нужно ввести две переменные. Одну логического типа для фиксирования правильности ввода кода и символьную для сохранения введенной кодовой последовательности.
Чтобы обслуживать текстовый дисплей замка используйте методы текстового поля:
setText(String s) – запись в поле строки;
String getText() – чтение строки из поля.
2.5 Модель трех разрядного счетчика
Требуется разработать модель счетчика, для отсчета целых трехразрядных чисел. Работа счетчика синхронизируется генератором тактовых импульсов.
Создайте новую модель ModelCounter. Разместите в нее агент Gen (генератор тактовых импульсов). Структура класса показана на рисунке 2.17.
Поместите в поле агента скругленный прямоугольник из палитры «Презентация» и активизируйте его свойство «Значок». На прямоугольник поместите элемент «Текст» и введите строку текста ГТИ (генератор тактовых импульсов). Для текста активизируйте свойство «Значок».
Расположите порт на контуре прямоугольника, так как это показано на рисунке 2.17. Для этого используйте элемент «Порт» палитры «Агент».
Рис. 2.17. Значок активного класса
Порт позволяет принимать и отсылать сообщения. Присвойте порту имя tick. Настройте свойства порт таким образом, что бы тип входящего и исходящего сообщения был Object – абстрактное сообщение. Проверьте наличие секции «Действия при обработки сообщений». Если ее нет, то используйте команду меню AnyLogic «Инструменты», выберите команду «Настройки» и установите в активное состояние режим «Режим разработчика библиотек» (рисунок 2.18). Порты образуют интерфейс агента.
Рис. 2.18. Настройка параметров
Разместите в поле класса параметр t0. Этот параметр определяет частоту срабатывания генератора. Тип параметра double. Значение по умолчанию равно 0.
Разместите элемент «Событие» и настройте его свойства так, как это показано на рисунке 2.19.
Рис. 2.19. Настройка события
В поле действие события следует ввести оператор Java для обращения к методу send порта генератора импульсов. Методу передается экземпляр абстрактного объекта.
Свойство порта «Отображается на верхнем уровне» должно быть активным. Свойство «Отображать имя» сделайте не активным.
Создайте агент Counter (разряд счетчика). Структура активного класса показана на рисунке 2.20.
Рис. 2.20. Активный класс разряда счетчика
Создайте интерфейс агента. Для создания интерфейса используйте скругленный прямоугольник, прямоугольник – значок агента. Расположите на значке порты так, как это показано на рисунке 2.20. Поместите на значок агента статический текст «0» с помощью элемента «Текст» палитры «Презентация». У статического текста свойство «Значок» должно быть активным.
На контур прямоугольника разместите два порта. Правый порт «in», левый порт «out». Порты должны быть настроены на прием и отсылку сигнала типа «Object». У портов сделайте свойства «Отображать имя» и на «На верхнем уровне» активными.
Поместите в класс переменную n целого типа, для подсчета числа единиц в разряде. Начальное значение переменной равно 0.
Порт out. Наличие сообщения в этом порте говорит о переполнении числа единиц в разряде счетчика.
Порт in. Принимает сообщение. В свойстве «Действие при получении» следует ввести код Java:
if (n == 9) {
n = 0;
out.send(new Object());
} else{
n++;
}
text.setText(n);
В коде запрограммирован подсчет числа единиц. Если число единиц равно 9, нужно вызвать метод send порта out и поместить в него абстрактное сообщение, что является сигналом переполнения.
Откройте корневой агент модели Main и разместите в него экземпляр агента Gen и три экземпляра агента Counter. Для соединения экземпляров по портам используйте элемент «Соединитель»
из палитры «Агент». При правильном соединении точки соединения помечаются зеленым цветом. Разместите в поле агента Main три временных графика для отображения значений разрядов счетчика.
Вид поля агента Main показан на рисунке 2.21. Чтобы названия экземпляров агентов не выводились в поле агента нужно установить значение свойства экземпляра «Отображать имя» в неактивное состояние.
Рис. 2.21. Корневой агент Main
Временные графики должны обновляться с периодом равным одной единице модельного времени, график должен отображать до 100000 точек. Для отображения значения разряда счетчика нужно использовать обращение:
имя_экземпляра_счетчика.n
Настройте эксперимент Simulation, граничное время моделирование не задано. Запустите модель. Перед запуском модели следует задать значение t0 для генератора тактовых импульсов. Для этого выделите агент ГТИ в поле модели и задайте период срабатывания равным одной единице модельного времени (рисунок 2.22).
Рис. 2.22. Задание значения параметра
Вид модели должен соответствовать рисунку 2.23.
Рис. 2.23. Модель трехразрядного счетчика
2.6. Контрольное задание «Запуск события при получении контрольного значения»
Постройте модель с трех разрядным счетчиком. Когда счетчик выдает показание равное 100 единицам, срабатывает генератор случайных чисел имеющих равномерное распределение в диапазоне от 0 до 1. Отсчет счетчиком прекращается. Для вывода показаний счетчика и случайных чисел используйте текстовые поля. Вывод случайных чисел производится в текстовое поле с округлением до третьего знака после запятой. Вид работающей модели показан на рисунке 2.24. Генератор случайных чисел активен.
Рис. 2.24. Вид работающей модели
Методические указания:
Для управления выводом показаний используйте два события. Первое событие работает циклически по таймауту. Событие используется для вывода числа сформированного счетчиком в текстовое поле по формуле:
Где counter – младший разряд счетчика, n – цифра разряда.
Если число number равно 100, то запускается второе событие.
Второе событие выполняет генерацию случайного числа в текстовое поле. Режим запуска события «Ручной».
Период работы событий один или две единицы модельного времени.
Контрольные вопросы
-
Как представляется конечный автомат в нотации UML? -
Как показывается событие в конечном автомате UML? -
Дайте классификацию переходов UML. -
Что такое композитное состояние UML? -
Объясните особенности исторических состояний UML. -
Как строятся конечные автоматы с параллельными вложенными конечными автоматами? -
Для чего используется псевдо состояние синхронизации в UML? -
Как виды переходов определены в UML для конечных автоматов? -
Дайте классификацию состояний стейтчарта AnyLogic? -
Как выполняется управление переходами в стейтчарте AnyLogic? -
Как строятся стейтчарты с альтернативным выбором переходов в AnyLogic? -
Как в AnyLogic строятся стейтчарты с поверхностным историческим состояниями? -
Как в AnyLogic строятся стейтчарты с глубокими историческими состояниями? -
Как выполняется обмен сообщениями между стейтчартами AnyLogic? -
Как строится взаимодействие между экземплярами классов агентов с помощью портов? -
Как настраивается порт агента?
3. Моделирование элементов цифровых систем управления
3.1. Семи сегментный дисплей.
Дисплей позволяет отобразить в виде шестнадцатеричной цифры двоичный четырех разрядный код. Для работы дисплея нужно создать его пиктограмму с четырьмя портами.
Сегменты дисплея создаются с помощью элемента «Линия». Идентификатор каждого элемента задается в виде segi где i номер сегмента. Нумерация сегментов показана на рисунке 3.1. Для создания контура элемента используется элемент «Прямоугольник» (рисунок 3.2).
Рис. 3.1. Нумерация сегментов дисплея
Рис. 3.2. Агент «Дисплей»
На контур пиктограммы дисплея следует разместить порты. Порты семи сегментного дисплея нумеруются с права на лево начиная с нулевого разряда отображаемого двоичного числа. Условные обозначения портов: inAi, где i={0,1,2,3}. Порты настроены на прием и отправку сигнала целого типа.
Для приема кодов из портов в состав агента – активного класса следует разместить четыре переменных vIni типа double. Где i – номер переменной. Нумерация переменных соответствует нумерации портов.
При получении согнала в порт должен исполняться код:
vIni=(double)msg.intValue();
Где i – номер переменной.
Что бы преобразовать двоичный код в шестнадцатеричный код нужно создать две функции.
Функция getNumber. Возвращает значение типа double преобразованного двоичного сигнала в десятичный код. Аргументы функции – четыре формальные параметра a0, a1, a2, a3. Тип формальных параметров double. Это двоичные разряды сигнала подлежащего преобразованию.
Код функции:
double v0,v1,v2,v3;
v0=0;v1=0;v2=0;v3=0;
if (a0==1) {v0=1;}
if (a1==1) {v1=2;}
if (a2==1) {v2=4;}
if (a3==1) {v3=8;}
double s=v0+v1+v2+v3;
return s;
Рис. 3.3. Кодирование шестнадцатеричных цифр
Вторая функция setSegment служит для «показа» на дисплее изображения шестнадцатеричный цифры в соответствии с принятой схемой кодирования, показанной на рисунке 3.3. Функция возвращает значение типа double. Аргумент функции – формальный параметр n. Это код в десятичной системе подлежащий отображению.