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

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

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

 

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

 

 

Свойство

selectOutput5

 

 

Условие 0

entity.numAbOtpr==1

 

 

Действие при

отАб1++;

выходе 0

get_Main().кПрСп14=отАб1/get_Main().

 

отпр14;

 

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

 

кПрСп14, true);

 

 

Условие 1

entity.numAbOtpr==2

 

 

Действие при

отАб2++;

выходе 1

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

 

отпр24;

 

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

 

кПрСп24, true);

 

 

Условие 2

entity.numAbOtpr==3

 

 

Действие при

отАб3++;

выходе 2

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

 

отпр34;

 

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

 

кПрСп34, true);

 

 

Условие 3

entity.numAbOtpr==4

 

 

Свойство

selectOutput6

 

 

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

Message

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

Условия

 

 

Условие 0

entity.numAbOtpr==5

 

 

Действие при

отАб5++;

выходе 0

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

 

отпр54;

 

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

 

кПрСп54, true);

 

 

Условие 1

entity.numAbOtpr==6

 

 

Действие при

отАб6++;

выходе 1

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

 

пр64;

 

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

 

кПрСп64, true);

 

 

181

 

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

 

 

 

Абонент5

 

 

numAbonent

5

 

 

Свойство

selectOutput1

 

 

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

Message

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

Условия

 

 

Условие 0

(entity.numAbOtpr!=

 

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

 

 

Действие при

отпрАб1++;

выходе 0

get_Main().отпр51=отпрАб1;

 

 

Условие 1

(entity.numAbOtpr!=

 

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

 

 

Действие при

отпрАб2++;

выходе 2

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

 

 

Условие 2

(entity.numAbOtpr!=

 

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

 

 

Действие при

отпрАб3++;

выходе 2

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

 

 

Условие 3

entity.numAbOtpr==entity.numAbPol

 

 

Свойство

selectOutput2

 

 

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

Message

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

Условия

 

 

Условие 0

entity.numAbPol==4

 

 

Действие при

отпрАб4++;

выходе 0

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

 

 

Условие 1

entity.numAbPol==5

 

 

Условие 2

entity.numAbPol==6

 

 

Действие при

отпрАб6++;

выходе 2

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

 

 

Свойство

selectOutput5

 

 

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

Message

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

Условия

 

 

Условие 0

entity.numAbOtpr==1

182

 

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

 

 

Свойство

selectOutput5

 

 

Условие 0

entity.numAbOtpr==1

 

 

Действие при

отАб1++;

выходе 0

get_Main().кПрСп15=отАб1/get_Main().

 

отпр15;

 

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

 

кПрСп15, true);

 

 

Условие 1

entity.numAbOtpr==2

 

 

Действие при

отАб2++;

выходе 1

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

 

отпр25;

 

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

 

кПрСп25, true);

 

 

Условие 2

entity.numAbOtpr==3

 

 

Действие при

отАб3++;

выходе 2

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

 

отпр35;

 

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

 

кПрСп35, true);

 

 

Условие 3

entity.numAbOtpr==4

 

 

Действие при

отАб4++;

выходе 3

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

 

отпр45;

 

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

 

кПрСп45, true);

 

 

Свойство

selectOutput6

 

 

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

Message

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

Условия

 

 

Условие 0

entity.numAbOtpr==5

 

 

Условие 1

entity.numAbOtpr==6

 

 

Действие при

отАб6++;

выходе 1

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

 

отпр65;

 

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

 

кПрСп65, true);

 

 

183

 

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

 

 

 

Абонент6

 

 

numAbonent

6

 

 

Свойство

selectOutput1

 

 

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

Message

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

Условия

 

 

Условие 0

(entity.numAbOtpr!=

 

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

 

 

Действие при

отпрАб1++;

выходе 0

get_Main().отпр61=отпрАб1;

 

 

Условие 1

(entity.numAbOtpr!=

 

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

 

 

Действие при

отпрАб2++;

выходе 2

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

 

 

Условие 2

(entity.numAbOtpr!=

 

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

 

 

Действие при

отпрАб3++;

выходе 2

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

 

 

Условие 3

entity.numAbOtpr==entity.numAbPol

 

 

Свойство

selectOutput2

 

 

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

Message

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

Условия

 

 

Условие 0

entity.numAbPol==4

 

 

Действие при

отпрАб4++;

выходе 0

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

 

 

Условие 1

entity.numAbPol==5

 

 

Действие при

отпрАб5++;

выходе 1

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

 

 

Условие 2

entity.numAbPol==6

 

 

Свойство

selectOutput5

 

 

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

Message

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

Условия

 

 

Условие 0

entity.numAbOtpr==1

184

 

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

 

 

Свойство

selectOutput5

 

 

Действие при

отАб1++;

выходе 0

get_Main().кПрСп16=отАб1/get_Main().от

 

пр16;

 

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

 

кПрСп16, true);

 

 

Условие 1

entity.numAbOtpr==2

 

 

Действие при

отАб2++;

выходе 1

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

 

пр26;

 

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

 

кПрСп26, true);

 

 

Условие 2

entity.numAbOtpr==3

 

 

Действие при

отАб3++;

выходе 2

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

 

отпр35;

 

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

 

кПрСп35, true);

 

 

Условие 3

entity.numAbOtpr==4

 

 

Действие при

отАб3++;

выходе 3

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

 

отпр36;

 

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

 

кПрСп36, true);

 

 

Свойство

selectOutput6

 

 

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

Message

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

Условия

 

 

Условие 0

entity.numAbOtpr==5

 

 

Действие при

отАб5++;

выходе 0

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

 

отпр56;

 

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

 

кПрСп56, true);

 

 

Условие 1

entity.numAbOtpr==6

 

 

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

185

мент этого же класса, так как программно он настроен именно на наш вариант организации связи.

1.Создайте ещѐ класс активного объекта Маршрутизатор1.

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

3.Выделите все элементы и скопируйте их.

4.Перейдите на Маршрутизатор1 и вставьте скопированные элементы.

5.Выделите элемент exit и в поле Действие при выходе замените имеющийся там код следующим кодом:

int i; i=entity.numAbPol;

{

switch (i) {

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

break;}

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

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

enter2.take(entity); break;}

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

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

enter3.take(entity); break;}

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

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

enter4.take(entity); break;}

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

}

}

6. Теперь Маршрутизатор1 настроен так, что сообщения от абонентов 1…4 будут направляться на его выходы 1…4 соответственно.

186

7.Из окна Проекты перетащите элемент маршрутизатор1.

Вполе Имя: установите маршрут2.

8.Соедините вых1 маршрут1 с вх1 маршрут2, а вых2 — с

вх2.

9.Скопируйте элемент канал1. Вставьте шесть элементов. Разместите их как на рис. 4.18.

10.Соедините вых3 маршрут1 с вх канал11, вых4 — с вх ка-

нал12.

11.Соедините вых1…вых4 маршрут2 с вх канал7канал10 соответственно.

12.Соедините вых канал7канал12 с входами абонент1…абонент6 соответственно.

Построение модели сети связи завершено. Но надо ещѐ организовать переключение между областями просмотра.

4.1.11. Переключение между областями просмотра

Переключение между областями просмотра организуем так, чтобы можно было из сети переходить к любому абоненту, каналу, маршрутизатору и обратно. В каждом активном объекте — к данным и обратно или в сеть.

Для переключения используем элемент button из палитры

Элементы управления.

1.Перетащите элемент button (см. рис. 4.18).

2.На странице Основные панели Свойства укажите:

Метка: Абонент1

Действие: абонент1.облАбонент1.navigateTo()

3.Скопируйте кнопку Абонент1. Вставьте пять раз. Последовательно откройте и внесите соответствующие правки в полях

Метка: и Действие:.

4.Перетащите элемент button. Укажите свойства:

Метка: Результаты

Действие: viewData.navigateTo()

5. Перетащите элемент button. Укажите свойства:

Метка: маршрут1

Действие: маршрут1.облМарш.navigateTo()

6. Скопируйте кнопку маршрут1. Скорректируйте свойства:

Метка: маршрут2

Действие: маршрут2.облМарш.navigateTo()

187

Рис. 4.19. Область просмотра облКан

7. Так как каналов 12, то давайте создадим ещѐ одну область просмотра облКан, и на ней разместим 12 кнопок (рис. 4.19).

9.Перетащите из палитры Презентация элемент Область просмотра. На странице Основные в поле Имя: введите облКан.

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

ва. Введите в поля X: 0, Y: 1780, Ширина: 450, Высота: 200.

8.Перетащите элемент button.

9.На странице Основные панели Свойства укажите:

Метка: Канал1

Действие: канал1.облКан.navigateTo()

10. Скопируйте кнопку Канал1. Вставьте одиннадцать раз. Последовательно откройте и внесите соответствующие правки в полях Метка: и Действие:. Например:

Метка: Канал2

Действие: канал2.облКан.navigateTo()

11.Перетащите элемент button.

12.На странице Основные панели Свойства укажите:

Метка: Сеть

Действие: облСеть.navigateTo()

13.Перейдите на область просмотра облСеть. Перетащите элемент button.

14.На странице Основные панели Свойства укажите:

Метка: Каналы

Действие: облКан.navigateTo()

188

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

Последовательно переходите от объекта к объекту, добавляя на них нужное число элементов button и устанавливая значения свойств согласно табл. 4.10. Размещение этих элементов было уже показано на рис. 4.3… 4.6, 4.8, 4.10, 4.11, 4.16… 4.18.

Таблица 4.10

Объект

Область

Свойства

Значение

просмотра

 

 

 

 

 

 

 

 

облАбонент

Метка:

Сеть

 

Действие:

get_Main().облСеть.navigateTo()

 

 

 

облАбонент

Метка:

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

Абонент

Действие:

viewData.navigateTo()

 

viewData

Метка:

Сеть

 

 

Действие:

get_Main().облСеть.navigateTo()

 

 

 

viewData

Метка:

Абонент

 

Действие:

облАбонент.navigateTo()

 

 

 

облКан

Метка:

Сеть

 

Действие:

get_Main().облСеть.navigateTo()

 

 

Канал

облКан

Метка:

Данные

Действие:

viewData.navigateTo()

 

 

 

viewData

Метка:

Канал

 

Действие:

облКан.navigateTo()

 

 

 

облМарш

Метка:

Сеть

 

Действие:

get_Main().облСеть.navigateTo()

 

 

Мар-

облМарш

Метка:

Данные

Действие:

viewData.navigateTo()

шрути-

 

 

Метка:

Сеть

затор

viewData

Действие:

get_Main().облСеть.navigateTo()

 

 

 

viewData

Метка:

Маршрутизатор

 

Действие:

облМарш.navigateTo()

 

 

 

облМарш

Метка:

Сеть

 

Действие:

get_Main().облСеть.navigateTo()

 

 

Мар-

облМарш

Метка:

Данные

Действие:

viewData.navigateTo()

шрути-

 

 

Метка:

Сеть

затор1

viewData

Действие:

get_Main().облСеть.navigateTo()

 

 

 

viewData

Метка:

Маршрутизатор

 

Действие:

облМарш.navigateTo()

 

 

189

4.1.12. Запуск и отладка модели

Прежде чем запустить модель:

1.В окне Проекты выделите Сеть_связи.

2.На странице Основные в поле Единицы модельного

времени: установите секунды.

3.В окне Проекты выделите Simulation: Main.

4.На странице Основные установите Фиксированное начальное число (воспроизводимые «прогоны»).

5.В поле Начальное число: введите 897.

6.Перейдите на страницу Модельное время. В поле Оста-

новить: выберите В заданное время.

7.В поле Конечное время: введите 3600000.0. Время моделирования увеличено в 1000 раз по числу прогонов модели.

8.Запустите модель. Если появятся ошибки, исправьте их. При правильном построении модели вы получите результаты,

показанные на рис. 4.20.

Среди них показатели качества обслуживания сети связи: коэффициент пропускной способности 0,816 и среднее время передачи одного сообщения 6,0384. Коэффициент пропускной способности, например, абонент 2— абонент 3 равен 0,8146. Обратите внимание на существенную разницу между минимальным и максимальным временами передачи сообщения. Она объясняется принятым экспоненциальным законом распределения времени передачи сообщений: максимальное значение может отличаться от среднего значения в восемь раз.

Количество отправленных и полученных сообщений всего и по категориям рассчитано за один прогон модели, то есть за 3600 сек. Для расчѐта, как вы помните, был введѐн параметр kolProg=1000 и в 1000 раз было увеличено модельное время. Всего отправлено сообщений 599,712, а получено всего абонентами — 489,504. Если разделить количество полученных сообщений на количество отправленных, то и будет получен коэффициент пропускной способности сети.

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

Перейдите в область просмотра Сеть, щѐлкнув кнопку Сеть. Затем, щѐлкните, например, кнопку Абонент2. Вы увидите результаты моделирования, показанные на рис. 4.21.

190