Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

мод сис / Boev-Simulation-AnyLogic

.pdf
Скачиваний:
170
Добавлен:
11.04.2015
Размер:
8.03 Mб
Скачать

Для вывода результатов моделирования нами использован элемент Простая переменная, но можно было бы взять элемент Параметр, который обычно используется для задания статических характеристик объекта. Значение параметра в ходе моделирования можно изменять, если сброшен флажок Динамический. Тогда значения параметра будут изменяться при вызове функции set_<имя параметра>() (при простом присваивании, например, как parameter=5, код вызываться не будет). Значение параметра будет изменяться, например, при вызове функции set_kol_post(kol_post+1); и других функций, имя кото-

рых начинается с set_.

3.2.7.2. Блок контроля 1

Блок предназначен для контроля текущей емкости буфера 1 маршрутизатора. Он анализирует наличие в буфере 1 свободной памяти, достаточной для хранения поступившего сообщения, и

взависимости от результата анализа сообщение либо помещается

вбуфер 1, либо уничтожается.

Алгоритм работы Блока контроля 1 представлен на рис. 3.54.

Рис. 3.54. Алгоритм работы Блока контроля 1

174

Рис. 3.55. Добавлены блоки selectOutput и sink

В AnyLogic этот алгоритм реализуется блоками selectOutput и sink — экземплярами объектов библиотеки Enterprise Library.

1.Перетащите блоки selectOutput и sink на диаграмму класса Main, разместите и соедините их так, как показано на рис. 3.55.

2.В Палитре выделите Презентация. Перетащите элемент Прямоугольник на блоки selectOutput и sink и разместите так, как показано на рис. 3.55.

3.Перетащите элемент text и на странице Основные панели

Свойства в поле Текст: введите Блок контроля 1.

4.Выделите объект selectOutput. Объект selectOutput на-

правляет входящие заявки в один из двух выходных портов T и F

взависимости от выполнения заданного условия. Условие может зависеть как от заявки, так и от каких-то внешних факторов. Поступившая заявка покидает объект в тот же момент времени. Может использоваться для сортировки заявок согласно заданному критерию, для случайного разделения потока заявок (заданием вероятностей) на части и т. д.

5.В поле Имя: вместо selectOutput введите BlokKontrol_1.

6.В поле Класс заявки: Entity замените Message.

7.Установите Выход true выбирается При выполнении условия.

8.В поле Условие введите условие:

175

emkost_bufera_1-tek_emkost_bufera1>=entity.Dlina

При выполнении условия заявка направляется на выход T (выходной порт для заявок, для которых выбирается выход true) и на выход F (выходной порт для заявок, для которых выбирается выход false), если условие не выполняется, соответственно.

Объекты класса Sink уничтожают входящие заявки. Для успешного уничтожения заявки нужно выполнение трех условий:

1.Если заявка находится в сети, то она должна быть удалена из этой сети с помощью объекта NetworkExit.

2.Заявка не должна обладать ресурсами.

3.Если заявка содержит другие заявки, то они тоже должны удовлетворять вышеуказанным условиям.

Если какое-то условие не выполняется, sink выдает ошибку.

3.2.7.3. Блок Буфер 1

Алгоритм работы блока Буфер 1 приведен на рис. 3.56.

Рис. 3.56. Алгоритм работы блока Буфер 1

176

Рис. 3.57. Добавлен блок queue

Блок Буфер 1 предназначен для приема, размещения и хранения согласно приоритету поступающих на обработку сообщений.

В AnyLogic алгоритм блока Буфер 1 реализуется блоком queue, который выполняет функции очереди (FIFO).

1.Перетащите блок queue из библиотеки Enterprise Library, разместите и соедините с Блок контроля 1 так, как на рис. 3.57.

2.В Палитре выделите Презентация. Перетащите элемент Прямоугольник на блок queue и разместите так, как на рис. 3.57.

3.На странице Основные панели Свойства в поле Имя: ос-

тавьте Rectangle. Не устанавливайте флажок Отображать имя.

4.Выделите объект queue.

5.В поле Имя: вместо queue введите bufer_1.

6.В поле Класс заявки: Entity замените Message.

7.Установите флажок Максимальная вместимость.

8.При помещении сообщения в буфер его текущая емкость увеличивается, поэтому в поле Действие при входе введите:

tek_emkost_bufera1 += entity.Dlina;

9. При выходе сообщения из буфера его текущая емкость уменьшается, поэтому в поле Действие при выходе введите:

tek_emkost_bufera1 -= entity.Dlina;

10. Поставьте флажок Включить сбор статистики.

177

Рис. 3.58. Алгоритм работы Блока обработки сообщений

3.2.7.4. Блок обработки сообщений

Блок предназначен для имитации обработки сообщения. Алгоритм работы блока приведен на рис. 3.58.

Для реализации алгоритма Блока обработки сообщений в AnyLogic используется блок delay — экземпляр класса Delay.

1.Перетащите блок delay из библиотеки Enterprise Library, разместите и соедините с bufer_1 так, как на рис. 3.59.

2.В Палитре выделите Презентация. Перетащите элемент Прямоугольник на блок delay и разместите так, как на рис. 3.59. На странице Основные панели Свойства в поле Имя: оставьте

Rectangle. Не устанавливайте флажок Отображать имя.

3.Выделите объект delay.

4.На странице Основные панели Свойства в поле Имя:

вместо delay введите Computer.

5.В поле Класс заявки: Entity замените Message.

6.Задержка задается установите Явно.

178

Рис. 3.59. Добавлен блок delay

7.В поле Время задержки введите: entity.TimeObrabotki

8.Оставьте Вместимость 1.

9.Установите флажок Включить сбор статистики.

3.2.7.5. Блок контроля 2

Блок контроля 2 предназначен для распределения сообщений по направлениям и контроля текущих емкостей буферов (накопителей) направлений передачи сообщений.

Алгоритм работы Блока контроля 2 приведен на рис. 3.60.

Рис. 3.60. Алгоритм блока Блок контроля 2

179

Вначале определяется номер направления, по которому должно быть передано поступившее сообщение. Затем определяется наличие достаточной свободной памяти в буфере этого направления. При отсутствии нужного объема памяти сообщение теряется.

В AnyLogic Блок контроля 2 реализуется четырьмя объектами selectOutput и блоком sink.

1.Перетащите четыре блока selectOutput и один блок sink из библиотеки Enterprise Library на диаграмму класса Main, разместите и соедините их так, как на рис. 3.61.

2.Выделите блок selectOutput, вход которого соединен с вы-

ходом Computer.

3.На странице Основные панели Свойства в поле Имя:

введите kontr_Napr1.

4.В поле Класс заявки: Entity замените Message.

5.Выход true выбирается установите При выполнении ус-

ловия.

6.В поле Условие введите entity.NumNapr==1.

Рис. 3.61. Добавлены блоки selectOutput и sink

180

7.Выделите блок selectOutput, вход которого соединен с вы-

ходом true блока kontr_Napr1.

8.На странице Основные панели Свойства в поле Имя:

введите kontr_bufer_Napr1.

9. В поле Класс заявки: Entity замените Message.

10. Выход true выбирается установите При выполнении условия. В поле Условие введите:

emkost_bufera_Napr1-tek_emkost_Napr1>=entity.Dlina

11.Выделите блок selectOutput, вход которого соединен с вы-

ходом false блока kontr_Napr1.

12.На странице Основные панели Свойства в поле Имя:

введите kontr_Napr2.

13.В поле Класс заявки: Entity замените Message.

14.Выход true выбирается установите При выполнении ус-

ловия. В поле Условие введите: entity.NumNapr==2.

15.Выделите блок selectOutput, вход которого соединен с вы-

ходом true блока kontr_Napr2.

16.На странице Основные панели Свойства в поле Имя:

введите kontr_bufer_Napr2.

17.В поле Класс заявки: Entity замените Message.

18.Выход true выбирается установите При выполнении условия. В поле Условие введите:

emkost_bufera_Napr2-tek_emkost_Napr2>=entity.Dlina

19.Выделите блок selectOutput, вход которого соединен с вы-

ходом false блока kontr_Napr2.

20.На странице Основные панели Свойства в поле Имя:

введите kontr_bufer_Napr3.

21.В поле Класс заявки: Entity замените Message.

22.Выход true выбирается установите При выполнении условия. В поле Условие введите:

emkost_bufera_Napr3-tek_emkost_Napr3>=entity.Dlina

23.В Палитре выделите Презентация. Перетащите элемент Прямоугольник на добавленные блоки и разместите так, как на рис. 3.61.

24.Перетащите элемент text и на странице Основные панели

Свойства в поле Текст: введите Блок контроля 2.

181

Рис. 3.62. Добавлены блоки queue

3.2.7.6. Блок Буфер 2

Блок Буфер 2 предназначен для приема и хранения сообщений, передаваемых по каналам направлений. Он состоит из трех буферов — для каждого направления свой буфер.

Алгоритм работы буфера каждого из направлений такой же, как и алгоритм работы буфера 1 (см. рис. 3.56).

Реализуется каждый из буферов также блоком queue.

1.Перетащите три блока queue из библиотеки Enterprise Library на диаграмму класса Main, разместите и соедините их так, как на рис. 3.62.

2.Выделите блок queue, вход которого соединен с выходом

kontr_bufer_Napr1.

3.На странице Основные панели Свойства в поле Имя:

введите bufer_Napr1.

4.В поле Класс заявки: Entity замените Message.

5.Установите флажок Максимальная вместимость.

182