Здравствуйте, прошел курс "Концептуальное проектирование систем в AnyLogic и GPSS World". Можно ли получить по нему сертификат? У нас в институте требуют сертификаты для создания портфолио. |
Опубликован: 15.02.2013 | Уровень: для всех | Доступ: платный
Лекция 5:
Модель функционирования сети связи
Событийная часть сегмента Каналы
- Перейдите на область просмотра облКаналы.
- Перетащите элемент Прямоугольник.
- На странице Дополнительные панели Свойства введите в поля X: 186, Y: 50, Ширина: 200, Высота: 135.
- Перетащите два элемента hold, разместите как на рис. 4.17.
- Оставьте имена, предложенные системой, и флажок Отображать имя.
- В поле Класс заявки: Entity замените Message.
- У элемента hold1 установите флажок Изначально заблокирован.
- Перетащите объект delay, поместите сверху (см. рис. 4.16). В поле Имя: введите основной_канал.
- Установите флажок Отображать имя.
- В поле Класс заявки: Entity замените Message. Задержка задаётся установите Явно.
- В поле Время задержки введите
exponential(1/entity.timePered)
- В поле Вместимость введите 1.
- Действие при входе entity.timePered=entity.dlina/ skorPeredKan;
- Установите флажок Включить сбор статистики.
- Скопируйте объект delay. Вставьте его один раз. При этом изменится имя на основной_канал, а остальные свойства останутся неизменными.
- Замените имя основной_канал на резерв_канал.
- В поле Действие при входе замените имеющийся там код следующим:
if (а==0) entity.timePered=entity.dlina/skorPeredKanR; if (а==1) {entity.timePered=entity.dlina/skorPeredKanR + timeBklResK; а=0;}
-
Действие при выходе
if (hold.isBlocked()== true) hold1.setBlocked(false);
- Соедините объекты hold и delay согласно рис. 4.17.
Организация входного и выходного портов
- Перетащите элемент Скруглённый прямоугольник.
- На странице Дополнительные панели Свойства введите в поля X: 50, Y: 80, Ширина: 60, Высота: 52.
- Из палитры Основная перетащите два элемента Порт. Разместите их как на рис. 4.17. В полях Имя: предложенные системой имена замените согласно рис. 4.17. Установите флажки Отображать имя.
- Обратите также внимание на то, чтобы у элементов Скруглённый прямоугольник и Порт был установлен флажок На верхнем уровне. У остальных элементов сегмента Канал этот флажок должен быть сброшенным.
- Соедините выходы элементов основной_канал и резерв_канал с портом вых, а порт вх - с входами элементов hold и hold1.
Имитатор отказов каналов связи
Имитатор отказов основного канала связи построен аналогично имитатору отказов вычислительного комплекса.
- Перетащите элемент Прямоугольник.
- На странице Дополнительные панели Свойства введите в поля X: 10, Y: 212, Ширина: 380, Высота: 120.
- Перетащите объект source и два объекта delay. Разместите и соедините их как на рис. 4.17.
- Выделите source и установите значения его свойств:
- Отображать имя установите флажок
- Заявки прибывают согласно Интенсивности
- Интенсивность прибытия 1
- Количество заявок, прибывающих за один раз 1
- Ограниченное количество прибытий установите флажок
- Максимальное количество прибытий 1
- Действие при выходе
- Выделите первый объект delay и установите значения его свойств:
- Имя: розыг_инт_до_отказа
- Отображать имя установите флажок
- Задержка задаётся Явно
- Время задержки exponential(1/timeOtkKan)
- Вместимость 1
- Действие при выходе
hold.setBlocked(true); if (основной_канал.size()!=0) { основной_канал.remove((Message) основной_канал.get(0)); всего_потеряно_сообщ ++;} hold1.setBlocked(false); а=1;
- Выделите второй объект delay и установите значения его свойств:
- Имя имитация_восст_осн_кан
- Отображать имя установите флажок
- Задержка задаётся Явно
- Время задержки exponential(1/timeVosstkKan)
- Вместимость 1
- Действие при выходе
hold.setBlocked(false); hold1.setBlocked(true);
Построение модели сети связи
Все необходимое для построения модели сети из объектов классов активных объектов Абонент, Канал и Маршрутизатор нами создано. Приступим к построению модели сети.
- Перейдите к области просмотра облСеть.
- Из окна Проекты перетащите объект Абонент1 и поместите как на рис. 4.18.
- Объект Абонент1 имитирует абонента 1. В свойствах Абонент1 записан код для расчёта коэффициентов пропускной способности абонентов 2…6 с абонентом 1. Следовательно, Абонент2 должен иметь код для расчёта коэффициентов пропускной способности абонентов 1, 3…6 с абонентом 2 и т.д.
- Создайте активные объекты Абонент2 … Абонент6.
- Откройте Абонент1. Скопируйте все объекты.
- Вставьте скопированные объекты на объекты Абонент2 … Абонент6.
- Внесите правки в коды согласно табл. 4.9.
- Из окна Проекты перетащите объекты абонент2 … абонент6.
- Из окна Проекты перетащите объект Канал и поместите вверху (см. рис. 4.18). В поле Имя: добавьте к предложенному имени 1.
- Скопируйте объект Канал1. Вставьте пять объектов. Разместите их как на рис. 4.18.
- Выходы объектов абонент1…абонент6 соедините с соответствующими входами объектов канал1…канал6.
- Из окна Проекты перетащите объект Маршрутизатор. В поле Имя: сделайте маршрут1.
- Соедините выходы первого и второго абонентов с вх1, выходы третьего и четвёртого - с вх2, пятого - с вх3, шестого - с вх4 объекта маршрут1.
Абонент2 | |
---|---|
Свойство | selectOutput |
Класс заявки: | Message |
Выход true выбирается | При выполнении условия |
Условие | entity.numAbOtpr==entity.numAbPol |
numAbonent | 2 |
Свойство | selectOutput1 |
Класс заявки: | Message |
Использовать: | Условия |
Условие 0 | entity.numAbPol==1 |
Действие при выходе 0 | отпрАб1++; |
get_Main().отпр21=отпрАб1; | |
Условие 1 | entity.numAbPol==2 |
Условие 2 | entity.numAbPol==3 |
Действие при выходе 2 | отпрАб3++; |
get_Main().отпр23=отпрАб3; | |
Условие 3 | entity.numAbOtpr==entity.numAbPol |
Свойство | selectOutput2 |
Класс заявки: | Message |
Использовать: | Условия |
Условие 0 | entity.numAbPol==4 |
Действие при выходе 0 | отпрАб4++; |
get_Main().отпр24=отпрАб4; | |
Условие 1 | entity.numAbPol==5 |
Действие при выходе 1 | отпрАб5++; |
get_Main().отпр25=отпрАб5; | |
Условие 2 | entity.numAbPol==6 |
Действие при выходе 2 | отпрАб6++; |
get_Main().отпр26=отпрАб6; | |
Свойство | selectOutput5 |
Класс заявки: | Message |
Использовать: | Условия |
Условие 0 | entity.numAbOtpr==1 |
Действие при выходе 0 | отАб1++; |
get_Main().кПрСп12=отАб1/get_Main(). | |
отпр12; | |
get_Main().КПрСп12.setText(get_Main().кПрСп12, true); | |
Условие 1 | entity.numAbOtpr==2 |
Условие 2 | entity.numAbOtpr==3 |
Действие при выходе 2 | отАб3++; |
get_Main().кПрСп32=отАб3/get_Main(). | |
отпр32; | |
get_Main().КПрСп32.setText(get_Main().кПрСп32, true); | |
Условие 3 | entity.numAbOtpr==4 |
Действие при выходе 3 | отАб4++; |
get_Main().кПрСп42=отАб4/get_Main(). | |
отпр42; | |
get_Main().КПрСп42.setText(get_Main().кПрСп42, true); | |
Свойство | selectOutput6 |
Класс заявки: | Message |
Использовать: | Условия |
Условие 0 | entity.numAbOtpr==5 |
Действие при выходе 0 | отАб5++; |
get_Main().кПрСп52=отАб5/get_Main(). | |
отпр52; | |
get_Main().КПрСп52.setText(get_Main().кПрСп52, true); | |
Условие 1 | entity.numAbOtpr==6 |
Действие при выходе 1 | отАб6++; |
get_Main().кПрСп62=отАб6/get_Main(). | |
отпр62; | |
get_Main().КПрСп62.setText(get_Main().кПрСп62, true); | |
Абонент3 | |
Свойство | selectOutput |
Класс заявки: | Message |
Выход true выбирается | При выполнении условия |
Условие | entity.numAbOtpr==entity.numAbPol |
numAbonent | 3 |
Свойство | selectOutput1 |
Класс заявки: | Message |
Использовать: | Условия |
Условие 0 | entity.numAbPol==1 |
Действие при выходе 0 | отпрАб1++; |
get_Main().отпр31=отпрАб1; | |
Условие 1 | entity.numAbPol==2 |
Действие при выходе 2 | отпрАб2++; |
get_Main().отпр32=отпрАб2; | |
Условие 2 | entity.numAbPol==3 |
Условие 3 | entity.numAbOtpr==entity.numAbPol |
Свойство | selectOutput2 |
Класс заявки: | Message |
Использовать: | Условия |
Условие 0 | entity.numAbPol==4 |
Действие при выходе 0 | отпрАб4++; |
get_Main().отпр34=отпрАб4; | |
Условие 1 | entity.numAbPol==5 |
Действие при выходе 1 | отпрАб5++; |
get_Main().отпр35=отпрАб5; | |
Условие 2 | entity.numAbPol==6 |
Действие при выходе 2 | отпрАб6++; |
get_Main().отпр36=отпрАб6; | |
Свойство | selectOutput5 |
Класс заявки: | Message |
Использовать: | Условия |
Условие 0 | entity.numAbOtpr==1 |
Действие при выходе 0 | отАб1++; |
get_Main().кПрСп13=отАб1/get_Main(). | |
отпр13; | |
get_Main().КПрСп13.setText(get_Main().кПрСп13, true); | |
Условие 1 | entity.numAbOtpr==2 |
Действие при выходе 1 | отАб2++; |
get_Main().кПрСп23=отАб2/get_Main(). | |
отпр23; | |
get_Main().КПрСп23.setText(get_Main().кПрСп23, true); | |
Условие 2 | entity.numAbOtpr==3 |
Условие 3 | entity.numAbOtpr==4 |
Действие при выходе 3 | отАб4++; |
get_Main().кПрСп43=отАб4/get_Main(). | |
отпр43; | |
get_Main().КПрСп43.setText(get_Main().кПрСп43, true); | |
Свойство | selectOutput6 |
Класс заявки: | Message |
Использовать: | Условия |
Условие 0 | entity.numAbOtpr==5 |
Действие при выходе 0 | отАб5++; |
get_Main().кПрСп53=отАб5/get_Main(). | |
отпр53; | |
get_Main().КПрСп53.setText(get_Main().кПрСп53, true); | |
Условие 1 | entity.numAbOtpr==6 |
Действие при выходе 1 | отАб6++; |
get_Main().кПрСп63=отАб6/get_Main(). | |
отпр63; | |
get_Main().КПрСп63.setText(get_Main().кПрСп63, true); | |
Абонент4 | |
Свойство | selectOutput |
Класс заявки: | Message |
Выход true выбирается | При выполнении условия |
Условие | entity.numAbOtpr==entity.numAbPol |
numAbonent | 4 |
Свойство | selectOutput1 |
Класс заявки: | Message |
Использовать: | Условия |
Условие 0 | entity.numAbPol==1 |
Действие при выходе 0 | отпрАб1++; |
get_Main().отпр41=отпрАб1; | |
Условие 1 | entity.numAbPol==2 |
Действие при выходе 2 | отпрАб2++; |
get_Main().отпр42=отпрАб2; | |
Условие 2 | entity.numAbPol==3 |
Действие при выходе 2 | отпрАб3++; |
get_Main().отпр43=отпрАб3; | |
Условие 3 | entity.numAbOtpr==entity.numAbPol |
Свойство | selectOutput2 |
Класс заявки: | Message |
Использовать: | Условия |
Условие 0 | entity.numAbPol==4 |
Условие 1 | entity.numAbPol==5 |
Действие при выходе 1 | отпрАб5++; |
get_Main().отпр45=отпрАб5; | |
Условие 2 | entity.numAbPol==6 |
Действие при выходе 2 | отпрАб6++; |
get_Main().отпр46=отпрАб6; | |
Свойство | selectOutput5 |
Класс заявки: | Message |
Использовать: | Условия |
Условие 0 | entity.numAbOtpr==1 |
Действие при выходе 0 | отАб1++; |
get_Main().кПрСп14=отАб1/get_Main(). | |
отпр14; | |
get_Main().КПрСп14.setText(get_Main().кПрСп14, true); | |
Условие 1 | entity.numAbOtpr==2 |
Действие при выходе 1 | отАб2++; |
get_Main().кПрСп24=отАб2/get_Main(). | |
отпр24; | |
get_Main().КПрСп24.setText(get_Main().кПрСп24, true); | |
Условие 2 | entity.numAbOtpr==3 |
Действие при выходе 2 | отАб3++; |
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 |
Действие при выходе 0 | отАб5++; |
get_Main().кПрСп54=отАб5/get_Main(). | |
отпр54; | |
get_Main().КПрСп54.setText(get_Main().кПрСп54, true); | |
Условие 1 | entity.numAbOtpr==6 |
Действие при выходе 1 | отАб6++; |
get_Main().кПрСп64=отАб6/get_Main().отпр64; | |
get_Main().КПрСп64.setText(get_Main().кПрСп64, true); | |
Абонент5 | |
Свойство | selectOutput |
Класс заявки: | Message |
Выход true выбирается | При выполнении условия |
Условие | entity.numAbOtpr==entity.numAbPol |
numAbonent | 5 |
Свойство | selectOutput1 |
Класс заявки: | Message |
Использовать: | Условия |
Условие 0 | entity.numAbPol==1 |
Действие при выходе 0 | отпрАб1++; |
get_Main().отпр51=отпрАб1; | |
Условие 1 | entity.numAbPol==2 |
Действие при выходе 2 | отпрАб2++; |
get_Main().отпр52=отпрАб2; | |
Условие 2 | entity.numAbPol==3 |
Действие при выходе 2 | отпрАб3++; |
get_Main().отпр53=отпрАб3; | |
Условие 3 | entity.numAbOtpr==entity.numAbPol |
Свойство | selectOutput2 |
Класс заявки: | Message |
Использовать: | Условия |
Условие 0 | entity.numAbPol==4 |
Действие при выходе 0 | отпрАб4++; |
get_Main().отпр54=отпрАб4; | |
Условие 1 | entity.numAbPol==5 |
Условие 2 | entity.numAbPol==6 |
Действие при выходе 2 | отпрАб6++; |
get_Main().отпр56=отпрАб6; | |
Свойство | selectOutput5 |
Класс заявки: | Message |
Использовать: | Условия |
Условие 0 | entity.numAbOtpr==1 |
Действие при выходе 0 | отАб1++; |
get_Main().кПрСп15=отАб1/get_Main(). | |
отпр15; | |
get_Main().КПрСп15.setText(get_Main().кПрСп15, true); | |
Условие 1 | entity.numAbOtpr==2 |
Действие при выходе 1 | отАб2++; |
get_Main().кПрСп25=отАб2/get_Main(). | |
отпр25; | |
get_Main().КПрСп25.setText(get_Main().кПрСп25, true); | |
Условие 2 | entity.numAbOtpr==3 |
Действие при выходе 2 | отАб3++; |
get_Main().кПрСп35=отАб3/get_Main(). | |
отпр35; | |
get_Main().КПрСп35.setText(get_Main().кПрСп35, true); | |
Условие 3 | entity.numAbOtpr==4 |
Действие при выходе 3 | отАб4++; |
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 |
Действие при выходе 1 | отАб6++; |
get_Main().кПрСп65=отАб6/get_Main(). | |
отпр65; | |
get_Main().КПрСп65.setText(get_Main().кПрСп65, true); | |
Абонент6 | |
Свойство | selectOutput |
Класс заявки: | Message |
Выход true выбирается | При выполнении условия |
Условие | entity.numAbOtpr==entity.numAbPol |
numAbonent | 6 |
Свойство | selectOutput1 |
Класс заявки: | Message |
Использовать: | Условия |
Условие 0 | entity.numAbPol==1 |
Действие при выходе 0 | отпрАб1++; |
get_Main().отпр61=отпрАб1; | |
Условие 1 | entity.numAbPol==2 |
Действие при выходе 2 | отпрАб2++; |
get_Main().отпр62=отпрАб2; | |
Условие 2 | entity.numAbPol==3 |
Действие при выходе 2 | отпрАб3++; |
get_Main().отпр63=отпрАб3; | |
Условие 3 | entity.numAbOtpr==entity.numAbPol |
Свойство | selectOutput2 |
Класс заявки: | Message |
Использовать: | Условия |
Условие 0 | entity.numAbPol==4 |
Действие при выходе 0 | отпрАб4++; |
get_Main().отпр64=отпрАб4; | |
Условие 1 | entity.numAbPol==5 |
Действие при выходе 1 | отпрАб5++; |
get_Main().отпр65=отпрАб5; | |
Условие 2 | entity.numAbPol==6 |
Свойство | selectOutput5 |
Класс заявки: | Message |
Использовать: | Условия |
Условие 0 | entity.numAbOtpr==1 |
Действие при выходе 0 | отАб1++; |
get_Main().кПрСп16=отАб1/get_Main().отпр16; | |
get_Main().КПрСп16.setText(get_Main().кПрСп16, true); | |
Условие 1 | entity.numAbOtpr==2 |
Действие при выходе 1 | отАб2++; |
get_Main().кПрСп26=отАб2/get_Main().отпр26; | |
get_Main().КПрСп26.setText(get_Main().кПрСп26, true); | |
Условие 2 | entity.numAbOtpr==3 |
Действие при выходе 2 | отАб3++; |
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 |
Действие при выходе 0 | отАб5++; |
get_Main().кПрСп56=отАб5/get_Main(). | |
отпр56; | |
get_Main().КПрСп56.setText(get_Main().кПрСп56, true); | |
Условие 1 | entity.numAbOtpr==6 |
Для того чтобы связь была между всеми абонентами и они могли бы обмениваться сообщениями, нам потребуется ещё один маршрутизатор. Однако мы не можем использовать второй элемент этого же класса, так как программно он настроен именно на наш вариант организации связи.
- Создайте ещё класс активного объекта Маршрутизатор1.
- Откройте объект Маршрутизатор.
- Выделите все объекты и скопируйте их.
- Перейдите на Маршрутизатор1 и вставьте скопированные объекты.
- Выделите элемент exit и в поле Действие при выходе замените имеющийся там код следующим кодом:
int i; i=entity.numAbPol; { switch (i) { case 1:if (emkBuferNapr1-tekEmkNapr1>=entity.dlina) {enter1.take(entity); break;} else {enter.take(entity); break;} case 2:if (emkBuferNapr2-tekEmkNapr2>=entity.dlina) { enter2.take(entity); break;} else {enter.take(entity); break;} case 3:if (emkBuferNapr3-tekEmkNapr3>=entity.dlina) { enter3.take(entity); break;} else {enter.take(entity); break;} case 4:if (emkBuferNapr4-tekEmkNapr4>=entity.dlina) { enter4.take(entity); break;} else {enter.take(entity); break;} } }
- Теперь Маршрутизатор1 настроен так, что сообщения от абонентов 1…4 будут направляться на его выходы 1…4 соответственно.
- Из окна Проекты перетащите элемент Маршрутизатор1. В поле Имя: установите маршрут2.
- Соедините вых1 маршрут1 с вх1 маршрут2, а вых2 - с вх2.
- Скопируйте элемент Канал1. Вставьте шесть элементов. Разместите их как на рис. 4.18.
- Соедините вых3 маршрут1 с вх канал11, вых4 - с вх канал12.
- Соедините вых1…вых4 маршрут2 с вх канал7…канал10 соответственно.
- Соедините вых канал7…канал12 с входами абонент1…абонент6 соответственно.
Построение модели сети связи завершено. Но надо ещё организовать переключение между областями просмотра.