ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 04.02.2024
Просмотров: 394
Скачиваний: 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. Математические функции
Обработка исключительных ситуаций
Активные сегменты дисплея окрашиваются в оранжевый цвет - orange. Не активные в бледно оранжевый цвет - bisque. Нулю соответствуют сегменты 0, 2, 3, 4, 5, 6. Структура кода функции:
//Сброс подсветки дисплея
seg0.setColor(bisque);
seg1.setColor(bisque);
seg2.setColor(bisque);
seg3.setColor(bisque);
seg4.setColor(bisque);
seg5.setColor(bisque);
seg6.setColor(bisque);
if (n==0){
seg0.setColor(orange);
seg2.setColor(orange);
seg3.setColor(orange);
seg4.setColor(orange);
seg5.setColor(orange);
seg6.setColor(orange);
}
if (n==1){
seg0.setColor(orange);
seg2.setColor(orange);
}
if (n==2){
seg0.setColor(orange);
seg1.setColor(orange);
seg3.setColor(orange);
seg4.setColor(orange);
seg6.setColor(orange);
}
if (n==3){
…
}
…
if (n==15){
…
}
return 0;
Обращение к функциям выполняется с помощью динамических переменных.
Переменная flowNumber служит для вызова функции:
getNumber(vIn0,vIn1,vIn2,vIn3)
Переменная flowDisplay используется для вызова функции:
setSegment(flowNumber)
Что бы выполнить тестирование созданного элемента создадим новый элемент ToggleSignal. Схема агента класса элемента показана на рисунке 3.4
Рис. 3.4. Структура агента ручного задания двоичного сигнала
При нажатии кнопки, отмеченной стрелкой, элемент позволяет на выходном правом порте outY получить сигнал равный 1 или 0. Значение этого сигнала отображается рядом с портом.
Код кнопки:
if (vFlag) {
vFlag=false;
text.setText("1");
outY.send(new Integer("1")); }
else {
vFlag=true;
text.setText("0");
outY.send(new Integer("0")); }
Где vFlag – переменная логического типа элемента, значение по умолчанию равно «Истина». Для генерации по умолчанию на выходе порта значения равного нулю нужно использовать простое событие event выполняющееся один раз с кодом:
outY.send(new Integer("0"));
Протестируйте работу дисплея.
Таблица 3.1
Коды цифр
Десятичный код | Двоичный код | Шестнадцатеричный код |
0 | 0000 | 0 |
1 | 0001 | 1 |
2 | 0010 | 2 |
3 | 0011 | 3 |
4 | 0100 | 4 |
5 | 0101 | 5 |
6 | 0110 | 6 |
7 | 0111 | 7 |
8 | 1000 | 8 |
9 | 1001 | 9 |
10 | 1010 | A |
11 | 1011 | B |
12 | 1100 | C |
13 | 1101 | D |
14 | 1110 | E |
15 | 1111 | F |
На рисунках 3.5 и 3.6 показан результат тестирования работы дисплея в соответствии с таблицей кодов 3.1.
Рис. 3.5. Тестирование дисплея, двоичный код равен нулю
Рис. 3.6. Тестирование дисплея, код 11112=1510=F16
3.2. Модели элементарных логических операций
К элементарным логическим операциям относится три операции. Операция отрицания «НЕ», операция конъюнкция «И» и операция дизъюнкция «ИЛИ».
В таблице показаны условные обозначения этих операций по стандарту ANSI 91 – 1984
Таблица 3.2
Условное обозначение операций
Номер | Операция | Условное обозначение |
1 | НЕ (NOT) | |
2 | И (AND) | |
3 | ИЛИ (OR) | |
Каждая логическая операция характеризуется своей таблицей истинности. Операции представляют собой логические вентили, на вход которых подается сигнал или сигналы, а на выходе получается выходной сигнал – результат операции. В качестве входных сигналов поступают сигналы, значение которых бинарное. Сигнал может принимать значение из двух возможных состояний «Истина» или «Ложь». Примем, что сигнал «Ложь» будет кодироваться значением ноль, а сигнал «Истина» будет кодироваться значением один.
Правила преобразование входных сигналов в выходной определяются таблицами истинности. Структура таблицы истинности определяется числом входных сигналов у операции. Число колонок таблицы истинности для операций с двумя входами будет равно трем. Две колонки для комбинации входных сигналов и одна колонка для выходного сигнала. Число строк таблицы равно 2n
. Это число комбинаций входных сигналов. Где n = 2 (число входов).
Операция NOT
Операция отрицания. Такая операция условно обозначается как «НЕ» или NOT. Эта операция инвертирует входной сигнал. На выходе сигнал получает противоположное значение по отношению к входу. Элемент описывается таблицей истинности.
Таблица 3.3
Элемент NOT
X | Y |
0 | 1 |
1 | 0 |
Агент – активный класс элемента обозначим как ElmNot. Структура агента показана на рисунке 3.7.
Входной сигнал поступает в левый порт inX, а выходной сигнал в правый порт outY. Тип входящего и исходящего сообщения целый – int. Названия портов не отображаются.
Рис. 3.7. Элементы агента «Инверсия»
Глобальная переменная модели элемента vX логического типа. Значение по умолчанию false.
Левый порт содержит код, выполняемый при получении сообщения:
if (msg.intValue()==1) {vX=true;}
else {vX=false;}
Для преобразования сигнала служит динамическая переменная flowOutSignal. Переменная осуществляет вызов функции getOutSignal(), она возвращает значение целого типа.
Код функции:
if (vX) {outY.send(new Integer("0"));}
else
{outY.send(new Integer("1"));}
return 0;
Операция OR
Элемент обладает таблицей истинности (таблица 3.4).
Таблица 3.4.
Элемент OR
X1 | X2 | Y |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Операцию смоделируем с помощью агента – активного класса с условным обозначением ElmOR. Структура агента показана на рисунке 3.8.
Модель элемента содержит две глобальные переменные vX1 и vX2 логического типа, значение по умолчанию false.
Элемент содержит два левых входных порта: inX1 и inX2 и правый выходной порт outY. Тип входного и выходного сообщения для портов элемента – целый.
Для входных портов нужно ввести код при получении сообщения в виде:
if (msg.intValue()==1){vX1=true;}
else {vX1=false;}
if (msg.intValue()==1){vX2=true;}
else {vX2=false;}
Рис. 3.8. Элементы агента «Или»
Элемент содержит динамическую переменную flowOutSignal, которая служит для вызова функции получения выходного значения элемента. Функция getSignal(). Функция возвращает значение целого типа.
boolean res = vX1 || vX2;
if (res) {outY.send(new Integer("1"));}
else {outY.send(new Integer("0"));}
return 0;
Операция AND
Таблица истинности элемента (таблица 3.5).
Таблица 3.5
Элемент AND
X1 | X2 | Y |
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Активный класс обозначим как элемент ElmAND. Структура активного класса показана на рисунке 3.9.
Структура модели этого элемента аналогична модели элемента OR. Нужно только изменить код функции getSignal:
boolean res = vX1 && vX2;
if (res) {outY.send(new Integer("1"));}
else {outY.send(new Integer("0"));}
return 0;
Рис. 3.9. Элементы агенты «И»
Тестирование операций
Для отображения сигналов создадим элемент DispSignal. Элемент показан на рисунке 3.10.
Рис. 3.10. Дисплей, отображение состояния двоичного сигнала - бита
Элемент обладает левым входным портом inX для приема - отправки сигнала целого типа. При получении сигнала порт должен отображать полученный сигнал как надпись на элементе используя код:
text.setText(">"+msg.intValue());
Выполним тестирование логической операции OR. Для тестирования модели создадим еще одного агента в котором соберем тестовую модель в соответствии с рисунком 3.11.
Рис. 3.11. Тестирование операция «Или»