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

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

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

Таблица 4.4

Свойство

selectOutput

 

 

Класс заявки:

Message

Использовать:

Условия

Действие при

a=uniform();

входе:

f++;

 

kolOtpr=f/kolProg;

 

editbox5.setText(kolOtpr, true);

 

get_Main().f++;

 

get_Main().всегоОтпр=get_Main().f/

 

kolProg;

 

get_Main().editbox5.setText(get_Main().

 

всегоОтпр, true);

 

 

Условие 0

a<=verKat.get(1)

 

 

Действие при

entity.numKat=1;

выходе 0

b=normal(dlKatO.get(entity.numKat),

 

dlKat.get(entity.numKat));

 

entity.dlina=(int)(b);

 

d1++;

 

kolOtprKat1=d1/kolProg;

 

editbox6.setText(kolOtprKat1, true);

 

get_Main().d1++;

 

get_Main().всегоОтпрКат1=get_Main().d1/

 

kolProg;

 

get_Main().editbox6.setText(get_Main().

 

всегоОтпрКат1, true);

 

 

Условие 1

a<=ver verKat.get(2)

 

 

Действие при

entity.numKat=2;

выходе 1

b=normal(dlKatO.get(entity.numKat),

 

dlKat.get(entity.numKat));

 

entity.dlina = (int)(b);

 

d2++;

 

kolOtprKat2=d2/kolProg;

 

editbox7.setText(kolOtprKat2, true);

 

get_Main().d2++;

 

get_Main().всегоОтпрКат2=get_Main().d2/

 

kolProg;

 

get_Main().editbox7.setText(get_Main().

 

всегоОтпрКат2, true);

 

 

151

 

Продолжение табл. 4.4

 

 

Свойство

selectOutput

 

 

Условие 2

a<=verKat.get(3)

 

 

Действие при

entity.numKat=3;

выходе 2

b=normal(dlKatO.get(entity.numKat),

 

dlKat.get(entity.numKat));

 

entity.dlina=(int)(b);

 

d3++;

 

kolOtprKat3=d3/kolProg;

 

editbox8.setText(kolOtprKat3, true);

 

get_Main().d3++;

 

get_Main().всегоОтпрКат3=get_Main().d3/

 

kolProg;

 

get_Main().editbox8.setText(get_Main().

 

всегоОтпрКат3, true);

 

 

Условие 3

a<=verKat.get(4)

 

 

Действие при

entity.numKat=4;

выходе 3

b=normal(dlKatO.get(entity.numKat),

 

dlKat.get(entity.numKat));

 

entity.dlina=(int)(b);

 

d4++;

 

kolOtprKat4=d4/kolProg;

 

editbox9.setText(kolOtprKat4, true);

 

get_Main().d4++;

 

get_Main().всегоОтпрКат4=get_Main().d4/

 

kolProg;

 

get_Main().editbox9.setText(get_Main().

 

всегоОтпрКат4, true);

 

 

Свойство

selectOutput1

 

 

Класс заявки:

Message

Использовать:

Условия

 

 

Условие 0

(entity.numAbOtpr!=

 

entity.numAbPol)&&(entity.numAbPol==1)

 

 

Условие 1

(entity.numAbOtpr!=

 

entity.numAbPol)&&(entity.numAbPol==2)

 

 

Действие при

отпрАб2++;

выходе 1

get_Main().отпр12=отпрАб2;

 

 

152

 

Окончание табл. 4.4

 

 

Свойство

selectOutput1

 

 

Условие 2

(entity.numAbOtpr!=

 

entity.numAbPol)&&(entity.numAbPol==3)

 

 

Действие при

отпрАб3++;

выходе 2

get_Main().отпр13=отпрАб3;

 

 

Условие 3

entity.numAbOtpr==entity.numAbPol

 

 

Свойство

selectOutput2

 

 

Класс заявки:

Message

Использовать:

Условия

 

 

Условие 0

entity.numAbPol==4

 

 

Действие при

отпрАб4++;

выходе 0

get_Main().отпр14=отпрАб4;

 

 

Условие 1

entity.numAbPol==5

 

 

Действие при

отпрАб5++;

выходе 1

get_Main().отпр15=отпрАб5;

 

 

Условие 2

entity.numAbPol==6

 

 

Действие при

отпрАб6++;

выходе 2

get_Main().отпр16=отпрАб6;

 

 

5.Перетащите объект queue. Укажите его свойства: Имя:

Буфер. Класс заявки: Message. Вместимость 100. Соедините выходы 0…3 selectOutput1 с входом элемента Буфер (см. рис. 4.8).

6.Соедините выход по умолчанию selectOutput1 с входом selectOutput2. Через этот выход будут проходить на selectOutput2 сообщения, адресованные абонентам 4, 5 и 6.

7.Выделите selectOutput2 и установите значения свойств, указанных также в табл. 4.4. Соедините все выходы selectOutput2 с входом элемента Буфер.

Отправляемое сообщение поступило в буфер. Дальше оно должно попасть в канал связи. Создайте порты для отправления и приѐма сообщений.

1.Из палитры Презентация перетащите элемент Скруглѐн-

ный прямоугольник.

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

ва. Введите в поля X: 210, Y: 100, Ширина: 65, Высота: 60.

153

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

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

лѐнный прямоугольник и порт был установлен флажок На верхнем уровне. У остальных элементов сегмента Абонент1 этот флажок должен быть сброшенным.

Итак, отправляемое сообщение поступило в канал связи, подключѐнный к порту вых.

Через порт вх сообщения поступают из канала связи. Продолжим построение блока Абонент1.

1.Перетащите объект selectOutput (имя selectOutput3). Он предназначен для контроля текущей ѐмкости входного буфера. В случае заполнения буфера, сообщения теряются.

2.Соедините порт вх с входом объекта selectOutput3.

3.Перетащите объект sink (имя sink1). Его вход соедините с выходом F объекта selectOutput3.

4.Выделите объект selectOutput3 и установите его свойства:

Класс заявки: Message

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

Условие emkBuferVx-tekEmkBuferVx>=entity.dlina

5.Перетащите объект queue. Укажите его свойства:

Имя: БуферВх

Класс заявки: Message Вместимость emkBuferVx

Действие при входе tekEmkBuferVx+=entity.dlina; Действие при выходе tekEmkBuferVx-=entity.dlina;

Соедините его вход с выходом Т объекта selectOutput3.

6.Перетащите объект selectOutput5 (имя selectOutput4). Он предназначен для разделения потока полученных сообщений по категориям. На странице Основные панели Свойства установите свойства согласно табл. 4.5. Эти свойства также являются кодом. Код предназначен для счѐта полученных сообщений за сеть связи

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

7.Соедините выход элемента БуферВх с выходом объекта selectOutput4.

154

Таблица 4.5

Свойство

selectOutput4

 

 

Класс заявки:

Message

Использовать:

Условия

Действие при

g++;

входе:

kolPol=g/kolProg;

 

editbox.setText(kolPol, true);

 

get_Main().g++;

 

get_Main().всегоПол=get_Main().g/

 

kolProg;

 

get_Main().editbox.setText(get_Main().

 

всегоПол, true);

 

 

Условие 0

entity.numKat==1

 

 

Действие при

k1++;

выходе 0

kolPolKat1=k1/kolProg;

 

editbox1.setText(kolPolKat1, true);

 

get_Main().k1++;

 

get_Main().всегоПолКат1=get_Main().k1/

 

kolProg;

 

get_Main().editbox1.setText(get_Main().

 

всегоПолКат1, true);

 

 

Условие 1

entity.numKat==2

 

 

Действие при

k2++;

выходе 1

kolPolKat2=k2/kolProg;

 

editbox2.setText(kolPolKat2, true);

 

get_Main().k2++;

 

get_Main().всегоПолКат2=get_Main().k2/

 

kolProg;

 

get_Main().editbox2.setText(get_Main().

 

всегоПолКат2, true);

 

 

Условие 2

entity.numKat==3

 

 

Действие при

k3++;

выходе 2

kolPolKat3=k3/kolProg;

 

editbox3.setText(kolPolKat3, true);

 

get_Main().k3++;

 

get_Main().всегоПолКат3=get_Main().k3/

 

kolProg;

 

get_Main().editbox3.setText(get_Main().

 

всегоПолКат3, true);

 

 

155

Продолжение табл. 4.5

Условие 3

entity.numKat==4

 

 

Действие при

k4++;

выходе 3

kolPolKat4=k4/kolProg;

 

editbox4.setText(kolPolKat4, true);

 

get_Main().k4++;

 

get_Main().всегоПолКат4=get_Main().k4/

 

kolProg;

 

get_Main().editbox4.setText(get_Main().

 

всегоПолКат4, true);

 

 

Свойство

selectOutput5

 

 

Класс заявки:

Message

Использовать:

Условия

 

 

Условие 0

entity.numAbOtpr==1

 

 

Условие 1

entity.numAbOtpr==2

 

 

Действие при

отАб2++;

выходе 1

get_Main().кПрСп21=отАб2/get_Main().

 

отпр21;

 

get_Main().КПрСп21.setText(get_Main().

 

кПрСп21, true);

 

 

Условие 2

entity.numAbOtpr==3

 

 

Действие при

отАб3++;

выходе 2

get_Main().кПрСп31=отАб3/get_Main().

 

отпр31;

 

get_Main().КПрСп31.setText(get_Main().

 

кПрСп31, true);

 

 

Условие 3

entity.numAbOtpr==4

 

 

Действие при

отАб4++;

выходе 3

get_Main().кПрСп41=отАб4/get_Main().

 

отпр41;

 

get_Main().КПрСп41.setText(get_Main().

 

кПрСп41, true);

 

 

Свойство

selectOutput6

 

 

Класс заявки:

Message

Использовать:

Условия

 

 

Условие 0

entity.numAbOtpr==5

 

 

Действие при

отАб5++;

выходе 0

get_Main().кПрСп51=отАб5/get_Main().

 

 

156

Окончание табл. 4.5

 

отпр51;

 

get_Main().КПрСп51.setText(get_Main().

 

кПрСп51, true);

 

 

Условие 1

entity.numAbOtpr==6

 

 

Действие при

отАб6++;

выходе 1

get_Main().кПрСп61=отАб6/get_Main().

 

отпр61;

 

get_Main().КПрСп61.setText(get_Main().

 

кПрСп61, true);

 

 

8.Перетащите два объекта selectOutput5 (имена selectOutput5

иselectOutput6). Объекты предназначены для разделения и счѐта получаемых сообщений по абонентам. Значения свойств установите также согласно табл. 4.5. Выход по умолчанию объекта selectOutput5 соедините с входом объекта selectOutput6.

9.Перетащите объект sink2. Его вход соедините с выходами

0…3 объекта selectOutput5 и выходами объекта selectOutput6.

10.Установите свойства объекта sink2 согласно табл. 4.6. Код рассчитывает коэффициент пропускной способности сети связи и время передачи одного сообщения.

 

Таблица 4.6

 

 

Свойство

sink2

 

 

Класс заявки:

Message

Действие при

врПередачи.add(time()-entity.timeOtpr);

входе:

editbox11.setText(врПередачи.mean(), true);

 

editbox12.setText(врПередачи.max(), true);

 

editbox13.setText(врПередачи.min(), true);

 

get_Main().коэфПропСпособ=get_Main().

 

всегоПол/get_Main().всегоОтпр;

 

get_Main().editbox10.setText(get_Main().

 

коэфПропСпособ, true);

 

get_Main().врПередСооб.add(time()-

 

entity.timeOtpr);

 

get_Main().editbox11.setText(get_Main().

 

врПередСооб.mean(), true);

 

get_Main().editbox12.setText(get_Main().

 

врПередСооб.max(), true);

 

get_Main().editbox13.setText(get_Main().

 

врПередСооб.min(), true);

 

 

157

4.1.8.Сегмент Маршрутизатор

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

1.Откройте объект Маршрутизатор.

2.Перейдите на область просмотра viewData.

3.Перетащите из палитры Презентация элемент Скруглен-

ный прямоугольник. На странице Основные в поле Имя: ос-

тавьте имя, предложенное системой.

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

ва. Введите в поля X: 10, Y: 600, Ширина: 314, Высота: 190.

5.Перетащите элемент text и на странице Основные панели Свойства в поле Текст: введите Исходные данные (рис. 4.9.).

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

Разместите их и дайте имена согласно рис. 4.10.

7.Значения по умолчанию элементов Параметр установите согласно табл. 4.7.

8.Тип timeOtkBK, timeVosstBK, proizvod установите double,

остальных параметров и простых переменных — int.

Рис. 4.10. Исходные данные сегмента Маршрутизатор

158

 

 

 

Таблица 4.7

 

 

 

 

Имя

Значение по

Имя

Значение по

умолчанию

умолчанию

 

 

emkBufer1

5000000

emkBuferNapr1

250000

timeOtkBK

3600

emkBuferNapr2

250000

timeVosstBK

3.7

emkBuferNapr3

250000

proizvod

40000

emkBuferNapr4

250000

4.1.8.2. Событийная часть сегмента Маршрутизатор

Элементы событийной части сегмента Маршрутизатор показаны на рис. 4.11. Сегмент включает Вычислительный комплекс,

Буфер 2, порты входа-выхода, Имитатор отказов вычислительного комплекса.

В свою очередь вычислительный комплекс содержит Блок контроля 1, Буфер 1, Блок обработки сообщений.

Приступим к построению событийной части сегмента Мар-

шрутизатор.

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

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

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

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

Алгоритм работы Блока контроля 1 представлен на рис. 4.12. В AnyLogic этот алгоритм реализуется блоками selectOutput,

hold и sink.

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

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

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

ва. Введите в поля X: 26, Y: 50, Ширина: 154, Высота: 150.

3. Перетащите объекты selectOutput, hold и sink на диаграмму класса Маршрутизатор, разместите и соедините так, как показано на рис. 4.11.

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

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

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

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

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

159

160