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

мод сис / V.Boev-GPSSvsAnyLogic

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

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

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

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

(emkostBufer1-tekEmkostBufer1>=entity.dlina)&& (hold.isBlocked()==false)

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

10.Выделите объект sink. В поле Класс заявки: Entity за-

мените Message.

11.В поле Действие при входе введите kolPotBK++; для счѐта количества сообщений, потерянных при отказе вычислительного комплекса.

12.Выделите элемент hold. В поле Класс заявки: Entity

замените Message.

161

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 и на странице Основные панели

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

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

162

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

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

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

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

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

tekEmkBufer1 += entity.dlina;

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

tekEmkBufer1 = -entity.dlina;

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

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

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

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

163

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

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

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

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

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

3.Перейдите на страницу Дополнительные панели Свойст-

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

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

Свойства в поле Текст: введите Блок обработки сообще-

ний.

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

6.Выделите объект delay. На странице Основные панели Свойства в поле Имя: вместо delay введите сomputer.

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

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

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

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

11.Действие при входе entity.timeObr= entity.dlina/proizvod;

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

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

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

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

тавьте Rectangle. Не устанавливайте флажок Отображать имя. 15. Перейдите на страницу Дополнительные панели Свойст-

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

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

Свойства в поле Текст: введите Вычислительный комплекс.

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

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

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

быть передано поступившее сообщение.

164

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

Затем определяется наличие достаточной свободной памяти в буфере этого направления. При отсутствии нужного объѐма памяти сообщение теряется.

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

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

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

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

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

int i; i=entity.numIstPol;

{

switch (i)

{

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

enter1.take(entity); break;}

165

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).

166

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

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

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

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

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

Прямоугольник (см. рис. 4.11).

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

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

3.Перейдите на страницу Дополнительные панели Свойст-

ва. Введите в поля X: 550, Y: 20, Ширина: 140, Высота: 290.

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

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

5.Перетащите пять объектов enter, четыре объекта queue и один объект sink, разместите, дайте имена и соедините так, как на рис. 4.11.

6.Выделите элемент buferNapr1, вход которого соединѐн с выходом enter1 и установите значения свойств.

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

8.Вместимость emkBuferNapr1

9.В поле Действие при входе введите:

tekEmkNapr1 += entity.dlina;

10.В поле Действие при выходе введите: tekEmkNapr1 -= entity.dlina;

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

12.Выделите элемент buferNapr2, вход которого соединен с выходом enter2 и установите значения свойств.

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

14.Вместимость emkBuferNapr2

15.В поле Действие при входе введите:

tekEmkNapr2 += entity.dlina;

16. В поле Действие при выходе введите:

tekEmkNapr2 -= entity.dlina;

167

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

18.Выделите элемент buferNapr3, вход которого соединен с выходом enter3 и установите значения свойств.

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

20.Вместимость emkBuferNapr3

21.В поле Действие при входе введите:

tekEmkNapr3 += entity.dlina;

22.В поле Действие при выходе введите: tekEmkNapr3 -= entity.dlina;

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

24.Выделите элемент buferNapr4, вход которого соединен с выходом enter4 и установите значения свойств.

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

26.Вместимость emkBuferNapr4

27.В поле Действие при входе введите:

tekEmkNapr4 += entity.dlina;

28.В поле Действие при выходе введите: tekEmkNapr4 -= entity.dlina;

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

4.1.8.2.6.Организация входных и выходных портов

Также как и для источника сообщений, для маршрутизатора нужно создать выходы, через которые отправлять сообщения, и входы, по которым получать сообщения. Создайте эти входы и выходы.

1.Перетащите элемент Скруглѐнный прямоугольник.

2.На странице Дополнительные панели Свойства введите в

поля X: 536, Y: 340, Ширина: 83, Высота: 110.

3.Из палитры Основная перетащите восемь элементов Порт. Разместите их как на рис. 4.11. В полях Имя: предложенные системой имена замените согласно рис. 4.11. Установите флажки

Отображать имя.

4.Обратите также внимание на то, чтобы у элементов

Скруглѐнный прямоугольник и Порт был установлен флажок

На верхнем уровне. У остальных элементов сегмента Маршрутизатор этот флажок должен быть сброшенным.

168

5. Соедините выходы элементов buferNapr1… buferNapr4

ссоответствующими портами вых1… вых4, а порты вх1… вх4 —

свходом элемента blokKontrol_1 (Блок контроля 1).

4.1.8.2.7. Имитатор отказов вычислительного комплекса

Принято, что вычислительный комплекс может выходить из строя и отказывать в обработке сообщений. Можно было бы построить имитатор отказов так, что генератор вырабатывает заявкиотказы в количестве, определяемом длительностью времени моделирования. Однако мы сделаем так, что генератор вырабатывает одну заявку, а затем этот процесс повторяется через интервалы времени, равные наработке до очередного отказа.

1.Перетащите элемент Прямоугольник.

2.На странице Дополнительные панели Свойства введите в

поля X: 160, Y: 224, Ширина: 340, Высота: 140.

3.Перетащите объект source и два объекта delay. Разместите

исоедините их как на рис. 4.11.

4.Выделите source и установите значения его свойств:

Заявки прибывают согласно Интенсивности Интенсивность прибытия 1 Количество заявок, прибывающих за один раз 1 Ограниченное количество прибытий 1 Максимальное количество прибытий 1

5. Выделите первый объект delay и установите значения его свойств:

Имя: розыгрыш_инт_до_отказа

Задержка задаѐтся Явно

Время задержки exponential(1/timeOtkBK)

Вместимость 1

Действие при выходе hold.setBlocked(true);

if (computer.size()!=0) { computer.remove((Message)computer.get(0));

kolPoterBK ++;}

6. Выделите второй объект delay и установите значения его свойств:

Имя: имитация_восст_ВК

Задержка задаѐтся Явно

Время задержки exponential(1/timeVosstBK)

169

Вместимость 1

Действие при выходе hold.setBlocked(false)

4.1.9. Сегмент Канал

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

Для его реализации в AnyLogic используется имитационная модель направления связи (глава 2), которое состоит из основного и резервного каналов.

4.1.9.1. Исходные данные

1.Откройте объект Канал. Перейдите на область просмотра viewData.

2.Перетащите элемент Скруглѐнный прямоугольник.

3.На странице Дополнительные панели Свойства введите в

поля X: 10, Y: 752, Ширина: 377, Высота: 118.

4.Перетащите элементы Параметр и Простая переменная,

разместите и дайте им имена согласно рис. 4.16.

5.Типы и значения по умолчанию установите согласно табл. 4 8.

 

 

Таблица 4.8

 

 

 

Имя

Тип

Значение по умолчанию

skorPeredKan

double

5000

skorPeredKanR

double

5000

timeOtkKan

double

360

timeVosstKan

double

3.2

timeBklResK

double

0.1

всего_потеряно_сообщ

int

0

4.1.9.2.Событийная часть сегмента Каналы

1.Перейдите на область просмотра облКаналы.

2.Перетащите элемент Прямоугольник.

1.На странице Дополнительные панели Свойства введите в

поля X: 186, Y: 50, Ширина: 200, Высота: 135.

2.Перетащите два элемента hold, разместите как на рис. 4.17.

3.Оставьте имена, предложенные системой, и флажок Ото-

бражать имя.

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

170