
мод сис / V.Boev-GPSSvsAnyLogic
.pdf16.Перетащите элемент text и на странице Основные панели
Свойства в поле Текст: введите Исходные данные.
17.В Палитре выделите Основная. Перетащите элементы
Параметр на элемент с именем Исходные данные. Разместите их так, как показано на рис. 6.2. Значения свойств установите согласно табл. 6.1.
|
|
|
|
|
|
|
Таблица 6.1 |
|
|
|
|
|
|
|
|
|
|
|
Элементы и их свойства |
|
|
|
|
|
Параметр |
Параметр |
|
||||
Имя |
|
Тип |
Значение |
Имя |
Тип |
|
Значение |
|
по умолчанию |
|
по умолчанию |
||||
|
|
|
|
|
|
||
aveTimeShop1 |
|
double |
19 |
stKomplBlock1 |
double |
|
35 |
aveTimeShop2 |
|
double |
11 |
stKomplBlock2 |
double |
|
32 |
aveTimeShop3 |
|
double |
15 |
stKomplBlock3 |
double |
|
43 |
aveTimeShop4 |
|
double |
18 |
stKomplBlock4 |
double |
|
48 |
stIzgBlock1 |
|
double |
35 |
timeTestBlock1 |
double |
|
12 |
stIzgBlock2 |
|
double |
27 |
timeTestBlock2 |
double |
|
16 |
stIzgBlock3 |
|
double |
36 |
timeTestBlock3 |
double |
|
21 |
stIzgBlock4 |
|
double |
37 |
timeTestBlock4 |
double |
|
17 |
postKontr1 |
|
int |
2 |
procBrakBlock1 |
double |
|
0.02 |
postKontr2 |
|
int |
2 |
procBrakBlock2 |
double |
|
0.03 |
postKontr3 |
|
int |
2 |
procBrakBlock3 |
double |
|
0.04 |
postKontr4 |
|
int |
2 |
procBrakBlock4 |
double |
|
0.06 |
stTestBlock1 |
|
double |
12 |
kolStendKontrIzd |
int |
|
2 |
stTestBlock2 |
|
double |
23 |
timeKontrIzd |
double |
|
26 |
stTestBlock3 |
|
double |
32 |
procBrakIzd |
double |
|
0.05 |
stTestBlock4 |
|
double |
28 |
stKontrIzd |
double |
|
74 |
kolPunSborki |
|
int |
2 |
verBlock1 |
double |
|
0.9999 |
timeSborki |
|
double |
22 |
verBlock2 |
double |
|
0.999999 |
stSborki |
|
double |
67 |
|
|
|
|
verBlockNum1 |
|
double |
0.25 |
timeZamBlock1 |
double |
|
12 |
verBlockNum2 |
|
double |
0.25 |
timeZamBlock2 |
double |
|
15 |
verBlockNum3 |
|
double |
0.25 |
timeZamBlock3 |
double |
|
12 |
verBlockNum4 |
|
double |
0.25 |
timeZamBlock4 |
double |
|
21 |
stZamBlock1 |
|
double |
34 |
kolPunPriem |
int |
|
2 |
stZamBlock2 |
|
double |
46 |
timePriemIzd |
double |
|
18 |
stZamBlock3 |
|
double |
38 |
procBrakPriem |
double |
|
0.15 |
stZamBlock4 |
|
double |
54 |
stPriemIzd |
double |
|
53 |
291

292
6.2.3. Вывод результатов моделирования
Для вывода результатов моделирования используем элемент Простая переменная. Для удобства обозрения и анализа результатов моделирования разделим их на две группы. В первую группу включим данные о количестве подготовленных и забракованных блоков и изделий, во вторую группу — стоимостные показатели функционирования предприятия.
1.В Палитре выделите Презентация. Создайте область просмотра Результаты для размещения элементов Простая пере-
менная.
2.Перетащите элемент Область просмотра. В поле Имя:
введите Результаты.
3.Перейдите на страницу Дополнительные панели Свойст-
ва. Введите в поля X: 0, Y: 700, Ширина: 700, Высота: 460.
4.Перетащите элемент Скруглѐнный прямоугольник. Ос-
тавьте имя, предложенное системой.
5.Перейдите на страницу Дополнительные панели Свойст-
ва. Введите в поля X: 10, Y: 750, Ширина: 680, Высота: 400.
6. Перетащите элемент text и на странице Основные панели
Свойства в поле Текст: введите Данные о количестве подготовленных и забракованных блоков и изделий.
7. Перетащите второй элемент text и на странице Основные панели Свойства в поле Текст: введите Стоимостные пока-
затели функционирования предприятия.
8. В Палитре выделите Основная. Перетащите элементы Простая переменная. Разместите их и дайте им имена так, как показано на рис. 6.3. Тип всех переменных, используемых для вывода количества подготовленных и забракованных блоков и изделий на текущее модельное время — int. Тип переменных для вывода стоимостных показателей работы предприятия — double.
Значение по умолчанию равно 0.
9. Выровняйте элементы. Для этого нужно вначале выделить те элементы, которые вы хотите выровнять, а затем открыть правым щелчком мыши по выделенным фигурам контекстное меню и выбрать нужную команду выравнивания из подменю Выравнивание. Не поддерживается выравнивание элементов диаграмм состояний и диаграмм действий, потому что при выравнивании таких элементов может нарушиться логика модели.
293

294
6.2.4.Построение событийной части модели
Всобытийную часть модели включим указанные ранее сегменты согласно представлению предприятия как системы массового обслуживания (см. рис. 6.1).
Модель будет содержать три активных объекта, элементы которых не могут физически вместиться в область диаграммы в окне презентации при выполнении модели, поэтому используем для каждого активного объекта элемент область просмотра. В дальнейщем после построения всех сегментов событийной части модели организуем переключение между областями просмотра.
Создайте область просмотра для размещения сегментов событийной части модели на диаграмме класса Main.
12.В Палитре выделите Презентация. Перетащите элемент
Область просмотра.
13.Перейдите на страницу Основные панели Свойства.
14.В поле Имя: введите Mainview.
15.Перейдите на страницу Дополнительные панели Свойст-
ва. Введите в поля X: 0, Y: 0, Ширина: 990, Высота: 390.
16.Перетащите элемент Скруглѐнный прямоугольник. В
нѐм мы разместим все сегменты модели. Оставьте имя, предложенное системой.
17.Перейдите на страницу Дополнительные панели Свойст-
ва. Введите в поля X: 10, Y: 60, Ширина: 970, Высота: 320.
18. Перетащите элементы Скруглѐнный прямоугольник,
укажите имена сегментов и свойства согласно табл. 6.2. Шрифт, цвет и т.д. выберите по своему усмотрению.
|
|
|
|
Таблица 6.2 |
|
|
|
|
|
|
|
Сегмент |
|
Свойства |
|
|
|
|
|
|
|
|
|
Х: |
Y: |
Ширина: |
Высота: |
|
|
|
|
||||
Цеха |
20 |
80 |
140 |
270 |
|
|
|
|
|
|
|
Посты контроля блоков |
170 |
80 |
160 |
270 |
|
|
|
|
|
|
|
Пункты сборки изделий |
340 |
80 |
120 |
270 |
|
|
|
|
|
|
|
Стенды контроля изделий |
470 |
80 |
150 |
270 |
|
|
|
|
|
|
|
Пункты приѐма изделий |
630 |
80 |
170 |
270 |
|
|
|
|
|
|
|
Склад готовых изделий |
810 |
80 |
160 |
130 |
|
|
|
|
|
|
|
Склад бракованных изделий |
810 |
220 |
160 |
130 |
|
|
|
|
|
|
|
295

296
6.2.4.1. Имитация работы цехов предприятия
Данный сегмент предназначен для имитации работы цехов, то есть изготовления и выпуска блоков через случайные интервалы времени, счѐта количества изготовленных блоков, стоимости комплектующих изготовленных блоков по типам и за предприятие, стоимости изготовления блоков по типам и суммарной стоимости за предприятие.
1.В Палитре выделите Enterprise Library.
2.Перетащите объект sourсe на диаграмму класса Main и
разместите в скругленном прямоугольнике с именем Цеха.
3. Для записи и хранения параметров блоков и изделий в дополнительные поля заявок нужно создать нестандартный класс заявки. Создайте класс заявки Product.
4. В панели Проект щелкните правой кнопкой мыши элемент модели верхнего уровня дерева и выберите в меню Создать Java
класс.
5. Появится диалоговое окно Новый Java класс (см. рис. 3.32). В поле Имя: введите имя нового класса Product.
6.В поле Базовый класс: выберите из выпадающего списка
.anylogic.libraries.enterprise.Entity в качестве базового класса. Щелкните кнопку Далее.
7.Появится вторая страница Мастера создания Java класса. Добавьте следующие поля Java класса, которые потребуются в дальнейшем при разработке модели:
int numBlock; int sign1;
int numBlBrak1; int numBlBrak2; int numBlBrak3; int numBlBrak4; double timeSbor; double cost;
8.Оставьте выбранными флажки Создать конструктор и Создать метод toString().
9.Щелкните кнопку Готово. Появится редактор кода и автоматически созданный код вашего Java класса. Закройте код.
10.Выделите объект source. На странице Основные панели Свойства установите свойства согласно табл. 6.3.
297
Таблица 6.3
|
Свойства объектов source |
|
|
|
|
Имя |
Свойства |
Значения |
|
|
|
Цех1 |
Отображать имя |
Установите флажок |
|
Класс заявки |
Product |
|
Заявки прибывают соглас- |
|
|
но |
Времени между прибытиями |
|
Время между прибытиями |
|
|
Количество заявок, прибы- |
Exponential(1/aveTimeShop1) |
|
вающих за один раз |
1 |
|
Новая заявка |
new Product() |
|
Действие при выходе |
if (a==0){ |
|
|
costBlock1=stKomplBlock1+ |
|
|
stIzgBlock1+stTestBlock1; |
|
|
costBlock2=stKomplBlock2+ |
|
|
stIzgBlock2+stTestBlock2; |
|
|
costBlock3=stKomplBlock3+ |
|
|
stIzgBlock3+stTestBlock3; |
|
|
costBlock4=stKomplBlock4+ |
|
|
stIzgBlock4+stTestBlock4; |
|
|
costBlockIzd=costBlock1+ |
|
|
costBlock2+costBlock3+ |
|
|
costBlock4; |
|
|
minCostIzd=costBlockIzd+ |
|
|
stSborki+ |
|
|
stKontrIzd+stPriemIzd; |
|
|
a=1;} |
|
|
kolIzgBlock1++; |
|
|
entity.numBlock = 1; |
|
|
entity.timeSbor = |
|
|
exponential(1/timeSborki); |
|
|
costKomplBlock1 += |
|
|
stKomplBlock1; |
|
|
costKomplBlock += |
|
|
stKomplBlock1; |
|
|
costIzgBlock1 += |
|
|
stIzgBlock1; |
|
|
sumCostBlock1 += |
|
|
(stKomplBlock1+stIzgBlock1); |
|
|
costIzgBlock += stIzgBlock1; |
|
|
sumCostBlock += |
|
|
(stKomplBlock1+stIzgBlock1); |
298
|
|
Продолжение табл. 6.3 |
Имя |
Свойства |
Значения |
цех2 |
Отображать имя |
Установите флажок |
|
Класс заявки |
Product |
|
Заявки прибывают соглас- |
|
|
но |
Времени между прибытиями |
|
Время между прибытиями |
Exponential(1/aveTimeShop2) |
|
Количество заявок, прибы- |
|
|
вающих за один раз |
1 |
|
Новая заявка |
new Product() |
|
Действие при выходе |
kolIzgBlock2++; |
|
|
entity.numBlock = 2; |
|
|
costKomplBlock2 += |
|
|
stKomplBlock2; |
|
|
costKomplBlock += |
|
|
stKomplBlock2; |
|
|
costIzgBlock2 += |
|
|
stIzgBlock2; |
|
|
sumCostBlock2 += |
|
|
(stKomplBlock2+stIzgBlock2); |
|
|
costIzgBlock += stIzgBlock2; |
|
|
sumCostBlock += |
|
|
(stKomplBlock2+stIzgBlock2); |
цех3 |
Отображать имя |
Установите флажок |
|
Класс заявки |
Product |
|
Заявки прибывают соглас- |
|
|
но |
Времени между прибытиями |
|
Время между прибытиями |
|
|
Количество заявок, прибы- |
Exponential(1/aveTimeShop3) |
|
вающих за один раз |
1 |
|
Новая заявка |
new Product() |
|
Действие при выходе |
kolIzgBlock3++; |
|
|
entity.numBlock = 3; |
|
|
costKomplBlock3 += |
|
|
stKomplBlock3; |
|
|
costKomplBlock += |
|
|
stKomplBlock3; |
|
|
costIzgBlock3 += |
|
|
stIzgBlock3; |
|
|
sumCostBlock3 += |
|
|
(stKomplBlock3+stIzgBlock3); |
|
|
costIzgBlock += stIzgBlock3; |
|
|
sumCostBlock += |
|
|
(stKomplBlock3+stIzgBlock3); |
299
|
|
Окончание табл. 6.3 |
|
|
|
Имя |
Свойства |
Значения |
цех4 |
Отображать имя |
Установите флажок |
|
Класс заявки |
Product |
|
Заявки прибывают соглас- |
|
|
но |
Времени между прибытиями |
|
Время между прибытиями |
|
|
Количество заявок, прибы- |
Exponential(1/aveTimeShop4) |
|
вающих за один раз |
1 |
|
Новая заявка |
new Product() |
|
Действие при выходе |
kolIzgBlock4++; |
|
|
entity.numBlock = 4; |
|
|
costKomplBlock4 += |
|
|
stKomplBlock4; |
|
|
costKomplBlock += |
|
|
stKomplBlock4; |
|
|
costIzgBlock4 += |
|
|
stIzgBlock4; |
|
|
sumCostBlock4 += |
|
|
(stKomplBlock4+stIzgBlock4); |
|
|
costIzgBlock += stIzgBlock4; |
|
|
sumCostBlock += |
|
|
(stKomplBlock4+stIzgBlock4); |
11.Щелкните выделенный source правой кнопкой мыши и в контекстном меню выберите Копировать.
12.Вставьте в скругленный прямоугольник с именем Цеха еще три объекта source. Разместите их вертикально один под дру-
гим. Во время вставки имена объектов будут изменяться: цех2, цех3, цех4. Однако остальные свойства останутся такими же, как и у объекта цех1. Поэтому, последовательно выделяя второй, третий и четвертый объекты source, скорректируйте их свойства также согласно табл. 6.3.
6.2.4.2. Имитация работы постов контроля блоков
Каждый цех имеет посты контроля блоков одного типа. Посты контроля предназначены для приема блоков из цеха, тестирования их, отправки исправных блоков на пункты сборки изделий, а брака
—на склад забракованных блоков.
Для размещения объектов, имитирующих работу постов кон-
троля блоков, создайте новый класс активного объекта Test.
300