Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Литература / Compyuternoe_modelirovanie_v_AnyLogic_7_Boev_VD.pdf
Скачиваний:
225
Добавлен:
12.02.2018
Размер:
8.72 Mб
Скачать

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

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

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

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

1.В Палитре выделите Презентация. Перетащите элемент

Прямоугольник.

2.На странице Местоположение и размер панели Свойства

введите в поля X: 190, Y: 50, Ширина: 126, Высота: 100.

3.На странице Основные панели Свойства в поле Имя: оставьте Rectangle. Не ставьте флажок Отображать имя.

4.Перетащите элемент text и на странице Текст панели Свойства вместо text введите Буфер 1.

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

147

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

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

7.В поле Тип заявки: Agent замените Message.

8.В поле Вместимость введите emkBufer1.

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

tekEmkBufer1 += entity.dlina;

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

tekEmkBufer1 -= entity.dlina; entity.timeObr=entity.dlina/proizvod;

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

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

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

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

148

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

1.В Палитре выделите Презентация. Перетащите элемент

Прямоугольник.

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

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

жать имя.

3.На странице Местоположение и размер панели Свойства

введите в поля X: 336, Y: 50, Ширина: 194, Высота: 100.

4.Перетащите элемент text и на странице Текст панели Свойства вместо text введите название Блок обработки со-

общений.

5.Перетащите объект delay, разместите и соедините с bufer_1 так, как на рис. 4.11.

6.Выделите объект delay. На странице Основные панели

Свойства в поле Имя: вместо delay введите сomputer.

7.В поле Тип заявки: Agent замените Message.

8.Задержка задаётся установите Определённое время.

9.В поле Время задержки введите: exponential(1/entity.timeObr)

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

11.Действие при выходе

коэфЗагрВК1=computer.statsUtilization.mean();

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

13.В Палитре выделите Презентация. Перетащите элемент

Прямоугольник.

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

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

15. На странице Местоположение и размер панели Свойства

введите в поля X: 20, Y: 40, Ширина: 520, Высота: 170.

16. Перетащите элемент text и на странице Текст панели Свойства вместо слова text введите название Вычислительный комплекс.

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

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

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

149

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

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

Для распределения сообщений по направлениям можно было бы использовать объекты selectOutput5 и sink. Однако мы используем другие объекты AnyLogic: exit и enter. Они позволяют организовать сложную маршрутизацию, вследствие чего на рис.4.11 Блок контроля 2 не выделен, хотя функционально он существует.

1.Перетащите объект exit, вход которого соедините с выхо-

дом computer (рис. 4.10).

2.В поле Тип заявки: Agent замените Message.

3.В поле Действия При выходе введите код:

int i; i=entity.numIstPol;

{

switch (i)

{

case 1:if (emkBuferNapr1tekEmkNapr1>=entity.dlina) {

enter1.take(entity);

150

break;}

else {enter.take(entity); break;}

case 2:if (emkBuferNapr1tekEmkNapr1>=entity.dlina) {

enter1.take(entity); break;}

else {enter.take(entity); break;}

case 3:if (emkBuferNapr2tekEmkNapr2>=entity.dlina) {

enter2.take(entity); break;}

else {enter.take(entity); break;}

case 4:if (emkBuferNapr2tekEmkNapr2>=entity.dlina) {

enter2.take(entity); break;}

else {enter.take(entity); break;}

case 5:if (emkBuferNapr3tekEmkNapr3>=entity.dlina) {

enter3.take(entity); break;}

else {enter.take(entity); break;}

case 6:if (emkBuferNapr4tekEmkNapr4>=entity.dlina) {

enter4.take(entity); break;}

else {enter.take(entity); break;}

}

}

Маршрутизатор настраивается определённым образом, например, таблицей маршрутизации. В данном случае он настраивается программным путём так, что сообщения первого и второго отправителей передаются по первому направлению, третьего и четвёртого отправителей — по второму направлению, пятого отправителя — по третьему и шестого отправителя — по четвёртому направлению. Такой вариант принят с учётом построения в дальнейшем сети связи (см. рис. 4.1).

151