МОДЕЛЬ ФУНКЦИОНИРОВАНИЯ ПРЕДПРИЯТИЯ
Постановка задачи
Предприятие имеет цехов, производящих
типов блоков, т. е. каждый цех производит
блоки одного типа. Себестоимости комплектующих блоков
.
Стоимости изготовления блоков
. Интервалы выпуска блоков
- случайные. Из
блоков собирается одно изделие.
Перед сборкой
каждый тип блоков проверяется на соответствующих
постах контроля. Длительности контроля одного блока
случайные. Стоимости проверки блоков
. На
каждом посту бракуется
блоков
соответственно. Забракованные блоки в дальнейшем процессе сборки не участвуют,
и удаляются с постов контроля в брак.
Прошедшие
контроль, т. е. не забракованные блоки поступают на один из пунктов сборки. На пункте сборки
одновременно собирается только одно изделие. Сборка начинается только тогда,
когда имеются все необходимые
блоков различных типов.
Время сборки
случайное. Стоимость сборки одного изделия
.
После сборки
изделие поступает на один из стендов выходного контроля.
На одном стенде одновременно проверяется только одно изделие. Время проверки
случайное. Стоимость проверки одного
изделия
. По результатам
проверки бракуется
изделий. В таком изделии с вероятностью
могут быть забракованы m блоков. Вероятности порядковых номеров из
соответственно.
Забракованное
изделие направляется в цех сборки, где неработоспособные блоки заменяются
новыми. Время замены случайное. Стоимость замены i-го блока
. После замены блоков изделие вновь поступает на один из стендов
выходного контроля.
Прошедшее стенд
выходного контроля изделие поступает в отдел приёмки. Время приемки одного изделия случайное. Стоимость приемки
одного изделия
. По
результатам приёмки бракуется
изделий, которые
направляются вновь на стенд выходного контроля. Принятые приёмкой изделия направляются
на склад предприятия.
Исходные данные
Интервалы времени между выпусками блоков, время контроля блоков и изделий, сборки и приема изделий подчинены экспоненциальному закону.
Задание на исследование
Разработать имитационную модель функционирования предприятия при изготовлении изделий из блоков.
Исследовать влияние качества изготовления блоков и других параметров (интервалов выпуска блоков из цехов, себестоимости комплектующих, стоимости изготовления блоков, проверки, сборки и др.) на себестоимость изделий.
Сделать выводы о загруженности подразделений предприятия и необходимых мерах по снижению себестоимости продукции.
Уяснение задачи на исследование
Предприятие при изготовлении блоков и сборки из них изделий может быть представлено как многофазная многоканальная разомкнутая система массового обслуживания с ожиданием, так как оно имеет все её элементы (рис. 1):
- поток изготовленных цехами блоков;
- очереди блоков на посты контроля и пункты сборки;
- очереди изделий на стенды контроля и пункт приемки;
- многоканальные устройства обслуживания (посты контроля, стенды выходного контроля, пункты сборки, пункты приёмки);
- потоки забракованных блоков;
- выходные потоки готовых изделий.
Рисунок 1 - Предприятие как система массового обслуживания
Модель в AnyLogic
Формализованное описание
Модель, исходя из структуры предприятия (см. рис. 1), должна состоять из следующих сегментов:
- ввода исходных данных;
- имитации работы цехов по изготовлению блоков;
- имитации работы постов контроля блоков;
- имитации работы пунктов сборки изделий;
- имитации работы стендов контроля собранных изделий;
- имитации работы пунктов приема изделий;
- имитации склада готовых изделий;
- имитации склада бракованных блоков;
- вывода результатов моделирования.
Блоки и изделия в модели следует имитировать заявками со следующими полями (параметрами):
block — номер цеха (коды 1…4 соответственно), выпустившего блок;
sign1 — признак брака на постах контроля блоков, стендах контроля изделий и на пунктах приема изделий;
numBlBrak1 … numBlBrak4 — признаки забракованных блоков 1…4 соответственно;
timeSbor — время сборки изделия (замены блоков);
cost — стоимость готового изделия.
Указанные поля предназначены для отслеживания технического состояния блоков и изделий и в зависимости от этого прохождения их по фазам изготовления изделия.
Поле timSbor введено для удобства построения модели. В это поле заносится либо время сборки изделия из четырех блоков, либо время замены каких-либо забракованных блоков в уже собранном изделии.
Стоимость изготовления изделия может возрасти по сравнению с минимальной стоимостью (CMIN) за счёт выявления брака и замены блоков. Для фиксации этой стоимости введено поле cost.
Для обеспечения работы модели вводятся следующие параметры процесса изготовления изделий из блоков:
aveTimeShop1…aveTimeShop4 — средние интервалы времени выпуска блоков 1…4 цехами 1…4;
stKomplBlock1…stKomplBlock4 — стоимости комплектующих блоков 1…4;
stIzgBlock1…stIzgBlock4 — стоимость изготовления блоков 1…4;
postKontr1…postKontr4 — количество постов контроля блоков 1…4;
procBrakBlock1…procBrakBlock4 — проценты брака блоков 1…4 на постах контроля блоков;
stTestBlock1…stTestBlock4 — стоимости тестирования (одного блока) блоков 1…4;
kolPunSborki — количество пунктов сборки изделий;
timeSborki — среднее время сборки одного изделия;
stSborki — стоимость сборки одного изделия;
kolStendKontr — количество стендов контроля собранных изделий;
timeKontrIzd — среднее время контроля на стенде одного собранного изделия;
procBrakIzd — процент брака собранных изделий на стендах контроля;
stKontrIzd — стоимость контроля на стенде одного собранного изделия;
verBlock1 — вероятность того, что забракованным в уже собранном изделии окажется один блок;
verBlock2 — вероятность того, что забракованными в уже собранном изделии окажутся два блока;
verBlNum1…verBlNum4 — вероятности брака на стенде контроля блоков 1…4;
timeZamBlock1… timeZamBlock4 — среднее время замены (одного блока) блоков 1…4;
stZamBlock1…stZamBlock4 — стоимость замены (одного блока) блоков 1…4;
kolPunPriem — количество пунктов приема изделий, прошедших пункты контроля;
timePriemIzd — среднее время приема одного изделия;
procBrakPriem — процент брака изделий на пунктах приема изделий;
stPriemIzd — стоимость приема одного изделия.
В ходе моделирования на основе приведенных исходных данных формируется и выводится на текущее модельное время следующая информация:
kolIzBlock1…kolIzBlock4 — количество изготовленных блоков 1…4;
kolTestBlock1…kolTestBlock4 — количество протестированных блоков 1…4 (как исправных, так и забракованных);
brakBlock1…brakBlock4 — количество забракованных на постах контроля блоков 1…4;
gotBlock1…gotBlock4 — количество изготовленных всего готовых блоков 1…4;
ostGotBlock1…ostGotBlock4 — количество оставшихся готовых блоков 1…4;
kolSobrIzd, testSobrIzd, brakSobrIzd — количество собранных на пунктах сборки изделий, проверенных и забракованных на стендах контроля;
kolPriemIzd, brakPriemIzd — количество принятых и забракованных приемкой изделий соответственно;
zamBlock1…zamBlock4 — количество замененных блоков 1…4, забракованных на стендах контроля и пунктах приема изделий;
allBrakBlock1…allBrakBlock4 — всего забракованных блоков 1…4;
minCostIzd — минимальная стоимость одного изделия;
минСтоимГотИзд — минимальная стоимость готовых изделий;
колГотИзд — количество готовых изделий, отправленных на склад.
На текущее модельное время собирается статистика по следующим стоимостным показателям функционирования предприятия:
costKomplBlock1…costKomplBlock4,costKomplBlock — стоимости комплектующих блоков 1…4 и суммарная стоимость комплектующих всех блоков;
costIzgBlock1…costIzgBlock4,costIzgBlock — стоимости изготовления блоков 1…4 и суммарная стоимость изготовления всех блоков (без учета стоимости тестирования блоков);
CostBlock1…CostBlock4 — стоимости изготовления блоков 1…4 с учётом тестирования;
sumCostBlock1…sumCostBlock4, sumCostBlock — суммарные стоимости изготовления блоков 1…4 с учётом тестирования и суммарная стоимость изготовления всех блоков;
costTestBlock1…costTestBlock4,costTestBlock — стоимости тестирования блоков 1…4 на постах контроля и суммарная стоимость тестирования всех блоков;
costSborIzd, costTestIzd, costPriemIzd — стоимости сборки, проверки и приемки изделий;
стоимБракБл — суммарные затраты на все забракованные блоки;
стоимГотИзд — затраты на выпуск готовых изделий;
costBlockIzd — стоимость блоков одного изделия;
costIzd — стоимость одного изделия;
времяИзгИзд — среднее время изготовления одного изделия;
коэфУвелСтоимИзд — коэффициент увеличения себестоимости изделия.
Минимальная стоимость изделий будет тогда, когда не будет бракованных блоков и изделий. В терминах постановки задачи это условие имеет вид:
где -
количество готовых изделий (поступивших на склад);
-
минимальная себестоимость производства одного изделия, вычисляется по формуле:
В случае наличия
брака себестоимость производимой продукции увеличится и составит .
То есть коэффициент увеличения себестоимости будет равен
Запишем в идентификаторах исходных данных и результатов моделирования то же самое:
Замечание. В приведенных для расчета результатов моделирования выражениях мы не учитывали те блоки, которые были произведены, но не были использованы для сборки изделий.
Ввод исходных данных
Для ввода исходных данных используем элемент Параметр.
1. Выполните команду Файл/Создать/Модель на панели инструментов.
2. В поле Имя модели диалогового окна Новая модель введите Предприятие.
3. Выберите каталог, в котором будут сохранены файлы модели. Щёлкните кнопку Готово.
4. В Палитре выделите Презентация. Создайте область просмотра Данные для размещения элементов исходных данных.
5. Перетащите элемент Область просмотра. В поле Имя: введите Данные.
6. На странице Местоположение и размер панели Свойства введите в поля X: 0, Y: 1700, Ширина: 760, Высота: 330.
7. Перетащите элемент Прямоугольник. Оставьте имя, предложенное системой.
8. На странице Местоположение и размер панели Свойства введите в поля X: 10, Y: 1750, Ширина: 740, Высота: 270.
9. Перетащите элемент text и на странице Основные панели Свойства в поле Текст: вместо слова text введите Исходные данные.
10. В Палитре выделите Основная. Перетащите элементы Параметр на элемент с именем Исходные данные. Разместите их так, как показано на рис. 2. Значения свойств установите согласно табл. 1.
Таблицы 1
Элементы и их свойства |
|||||
Параметр |
Параметр |
||||
Имя |
Тип |
Значение по умолчанию |
Имя |
Тип |
Значение по умолчанию |
aveTimeShop1 aveTimeShop2 aveTimeShop3 aveTimeShop4 |
double double double double |
19 11 15 18 |
stKomplBlock1 stKomplBlock2 stKomplBlock3 stKomplBlock4 |
double double double double |
35 32 43 48 |
stIzgBlock1 stIzgBlock2 stIzgBlock3 stIzgBlock4 |
double double double double |
35 27 36 37 |
timeTestBlock1 timeTestBlock2 timeTestBlock3 timeTestBlock4 |
double double double double |
12 16 21 17 |
postKontr1 postKontr2 postKontr3 postKontr4 |
int int int int |
2 2 2 2 |
procBrakBlock1 procBrakBlock2 procBrakBlock3 procBrakBlock4 |
double double double double |
0.02 0.03 0.04 0.06 |
stTestBlock1 stTestBlock2 stTestBlock3 stTestBlock4 |
double double double double |
12 23 32 28 |
kolStendKontrIzd timeKontrIzd procBrakIzd stKontrIzd |
int double double double |
2 26 0.05 74 |
kolPunSborki timeSborki stSborki |
int double double |
2 22 67 |
verBlock1 verBlock2 |
double double |
0.9999 0.999999 |
verBlockNum1 verBlockNum2 verBlockNum3 verBlockNum4 |
double double double double |
0.25 0.25 0.25 0.25 |
timeZamBlock1 timeZamBlock2 timeZamBlock3 timeZamBlock4 |
double double double double |
12 15 12 21 |
stZamBlock1 stZamBlock2 stZamBlock3 stZamBlock4 |
double double double double |
34 46 38 54 |
kolPunPriem timePriemIzd procBrakPriem stPriemIzd |
int double double double |
2 18 0.15 53 |
Рисунок 2 - Размещение элементов Параметр для ввода исходных данных
Вывод результатов моделирования
Для вывода результатов моделирования используем элемент Переменная. Для удобства обозрения и анализа результатов моделирования разделим их на две группы. В первую группу включим данные о количестве подготовленных и забракованных блоков и изделий, во вторую группу — стоимостные показатели функционирования предприятия.
1. Создайте область просмотра Результаты для размещения элементов Переменная. 2. Перетащите элемент Область просмотра. В поле Имя: введите Результаты.
3. На странице Местоположение и размер панели Свойства введите в поля X: 0, Y: 700, Ширина: 700, Высота: 520.
4. Перетащите элемент Скруглённый прямоугольник. Оставьте имя, предложенное системой.
5. На странице Местоположение и размер панели Свойства введите в поля X: 10, Y: 750, Ширина: 690, Высота: 450.
6. Перетащите элемент text и на панели Свойства в поле Текст: введите Данные о количестве подготовленных и забракованных блоков и изделий.
7. Перетащите ещё элемент text и введите Стоимостные показатели функционирования предприятия.
8. Перетащите третий элемент text и в поле Текст: введите Показатели использования пунктов предприятия.
9. В Палитре выделите Основная. Перетащите элементы Переменная. Используйте копирование. Разместите их и дайте им имена так, как показано на рис. 3. Тип всех переменных, используемых для вывода количества подготовленных и забракованных блоков и изделий на текущее модельное время — int. Тип переменных для вывода стоимостных показателей работы предприятия и показателей использования его пунктов — double.
10. Выровняйте элементы. Для этого нужно вначале выделить те элементы, которые вы хотите выровнять, а затем открыть правым щелчком мыши по выделенным фигурам контекстное меню и выбрать нужную команду выравнивания из подменю Выравнивание. Не поддерживается выравнивание элементов диаграмм состояний и диаграмм действий, потому что при выравнивании таких элементов может нарушиться логика модели.
Рисунок 3 - Размещение элементов Переменная для вывода результатов моделирования
Построение событийной части модели
В событийную часть модели включим указанные ранее сегменты согласно представлению предприятия как системы массового обслуживания (см. рис. 1).
Модель будет содержать три активных объекта, элементы, которых не могут физически вместиться в область диаграммы в окне презентации при выполнении модели, поэтому используем для каждого активного объекта элемент область просмотра. В дальнейшем после построения всех сегментов событийной части модели организуем переключение между областями просмотра.
Создайте область просмотра для размещения сегментов событийной части модели на диаграмме класса Main.
1. В Палитре выделите Презентация. Перетащите элемент Область просмотра.
2. Перейдите на страницу Основные панели Свойства.
3. В поле Имя: введите Mainview.
4. На странице Местоположение и размер панели Свойства введите в поля X: 0, Y: 0, Ширина: 990, Высота: 390.
5. Перетащите элемент Скруглённый прямоугольник. В нём мы разместим все сегменты модели. Оставьте имя, предложенное системой.
6. На странице Местоположение и размер панели Свойства введите в поля X: 10, Y: 60, Ширина: 970, Высота: 320.
7. Перетащите элементы Скруглённый прямоугольник, укажите имена сегментов и свойства согласно табл. 2. Шрифт, цвет и т.д. выберите по своему усмотрению.
Таблица 2
Сегмент |
Свойства |
|||
Х: |
Х: |
Ширина: |
Высота: |
|
Цеха |
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 |
Рисунок 4 - Размещение сегментов модели
Имитация работы цехов предприятия
Данный сегмент предназначен для имитации работы цехов, то есть изготовления и выпуска блоков через случайные интервалы времени, счёта количества изготовленных блоков, стоимости комплектующих изготовленных блоков по типам и за предприятие, стоимости изготовления блоков по типам и суммарной стоимости за предприятие.
1. Из Библиотеки моделирования процессов перетащите объект sourсe на агент Main и разместите в скругленном прямоугольнике с именем Цеха.
2. Для записи и хранения параметров блоков и изделий в дополнительные поля заявок нужно создать нестандартный тип заявки. Создайте тип заявки Product.
3. В панели Проект щёлкните правой кнопкой мыши элемент модели верхнего уровня дерева и выберите в меню Создать Java класс.
4. Появится диалоговое окно Новый Java класс. В поле Имя: введите имя нового класса Product.
5. В поле Базовый класс: выберите из выпадающего списка Entity в качестве базового класса. Щёлкните кнопку Далее.
6. Появится вторая страница Мастера создания Java класса. Добавьте следующие поля Java класса, которые потребуются в дальнейшем при разработке модели:
int numBlock;
int sign1;
int numBlBrak1;
int numBlBrak2;
int numBlBrak3;
int numBlBrak4;
double timeSbor;
double cost;
7. Оставьте выбранными флажки Создать конструктор и Создать метод toString().
8. Щёлкните кнопку Готово. Появится редактор кода и автоматически созданный код вашего Java класса. Закройте код.
9. Щёлкните правой кнопкой мыши в панели Проект только что созданный Java класс и в контекстном меню выберите Преобразовать Java класс в тип агента.
10. Появится окно c параметрами типа заявок Product.
11. Выделите объект source. На странице Основные панели Свойства установите свойства согласно табл. 3.
Таблица 3
Имя |
Свойства |
Значения |
Цех1 |
Отображать имя Тип заявки Прибывают согласно Время между прибытиями Новая заявка Действия При выходе: |
Установите флажок Product Времени между прибытиями exponential(1/aveTimeShop1) 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); |
Цех2 |
Отображать имя Тип заявки Прибывают согласно Время между прибытиями Новая заявка Действия При выходе: |
Установите флажок Product Времени между прибытиями exponential(1/aveTimeShop2) Product
kolIzgBlock2++; entity.numBlock = 2; costKomplBlock2 += stKomplBlock2; costKomplBlock += stKomplBlock2; costIzgBlock2 += stIzgBlock2; sumCostBlock2 += (stKomplBlock2+stIzgBlock2); costIzgBlock += stIzgBlock2; sumCostBlock += (stKomplBlock2+stIzgBlock2); |
Цех3 |
Отображать имя Тип заявки Прибывают согласно Время между прибытиями Новая заявка Действия При выходе: |
Установите флажок Product Времени между прибытиями exponential(1/aveTimeShop3) Product
kolIzgBlock3++; entity.numBlock = 3; costKomplBlock3 += stKomplBlock3; costKomplBlock += stKomplBlock3; costIzgBlock3 += stIzgBlock3; sumCostBlock3 += (stKomplBlock3+stIzgBlock3); costIzgBlock += stIzgBlock3; sumCostBlock += (stKomplBlock3+stIzgBlock3); |
Цех4 |
Отображать имя Тип заявки Прибывают согласно Время между прибытиями Новая заявка Действия При выходе: |
Установите флажок Product Времени между прибытиями exponential(1/aveTimeShop4) Product
kolIzgBlock4++; entity.numBlock = 4; costKomplBlock4 += stKomplBlock4; costKomplBlock += stKomplBlock4; costIzgBlock4 += stIzgBlock4; sumCostBlock4 += (stKomplBlock4+stIzgBlock4); costIzgBlock += stIzgBlock4; sumCostBlock += (stKomplBlock4+stIzgBlock4); |
12. Щёлкните выделенный source правой кнопкой мыши и в контекстном меню выберите Копировать.
13. Вставьте в скругленный прямоугольник с именем Цеха еще три объекта source. Разместите их вертикально один под другим. Во время вставки имена объектов будут изменяться: цех2, цех3, цех4. Однако остальные свойства останутся такими же, как и у объекта цех1.
14. Поэтому, последовательно выделяя второй, третий и четвертый объекты source, скорректируйте их свойства также согласно табл. 3.
Имитация работы постов контроля блоков
Каждый цех имеет посты контроля блоков одного типа. Посты контроля предназначены для приема блоков из цеха, тестирования их, отправки исправных блоков на пункты сборки изделий, а брака — на склад забракованных блоков.
Для размещения объектов, имитирующих работу постов контроля блоков, создайте новый тип агента Тест.
1. На панели Проект щёлкните Main правой кнопкой мыши и выберите из контекстного меню Создать/Тип агента. Откроется окно Шаг 1. Создание нового типа агента.
2. В поле Имя: задайте имя нового типа агента Тест.
3. Щёлкните кнопку Готово.
Создайте область просмотра на диаграмме агента Тест для размещения объектов сегмента Посты контроля блоков.
1. В Палитре выделите Презентация. Перетащите элемент Область просмотра.
2. Перейдите на страницу Основные панели Свойства.
3. В поле Имя: введите Kontr1.
4. На странице Местоположение и размер панели Свойства введите в поля X: 0, Y: 0, Ширина: 590, Высота: 390.
Согласно указанному ранее назначению постов контроля блоков нужно сделать так, чтобы четыре типа блоков передавались из цехов на свои посты контроля, четыре типа тестированных и исправных блоков поступали на пункты сборки изделий, а четыре типа забракованных блоков — на склад забракованных блоков.
Создайте экземпляр нового типа агента Тест.
1. Из Палитры Основная перетащите элемент Порт и разместите сверху в крайнем левом ряду (рис. 5).
Рисунок 5 - Размещение элементов Порт на экземпляре агента Тест
2. На странице Основные панели Свойства имя port замените именем Блок1.
3. Скопируйте элемент Порт с именем Блок1.
4. Вставьте три элемента Порт (см. рис. 5). При вставке последовательно будут изменяться их имена: Блок2, Блок3, Блок4.
5. Из Палитры Основная перетащите элемент Порт и разместите сверху в среднем ряду (см. рис. 5).
6. На странице Основные панели Свойства имя port замените именем БракБл1.
7. Скопируйте элемент Порт с именем БракБл1.
8. Вставьте три элемента Порт (см. рис. 5). При вставке последовательно будут изменяться их имена: БракБл2, БракБл3, БракБл4.
9. Из Палитры Основная перетащите элемент Порт и разместите сверху в крайнем правом ряду (см. рис. 5).
10. На странице Основные панели Свойства имя port замените именем ГотБл1.
11. Скопируйте элемент Порт с именем ГотБл1.
12. Вставьте три элемента Порт (см. рис. 5). При вставке последовательно будут изменяться их имена: ГотБл2, ГотБл3, ГотБл4.
13. По мере размещения элементов Порт они автоматически будут объединяться прямоугольником (с пунктирными линиями) и появится надпись Значок.
14. Возвратитесь на диаграмму агента Main.
15. На панели Проект выделите Тест, перетащите на диаграмму Main экземпляр агента Тест, разместите и соедините так, как на рис. 6. Порты БракБл1…БракБл4 соедините с объектом sink сегмента Склад бракованных блоков, предварительно разместив его там.
16. Экземпляр агента Тест создан. Возвратитесь на диаграмму агента Тест.
Для имитации работы постов контроля блоков одного типа (одного цеха) нам потребуются объекты:
queue — имитация склада изготовленных цехом блоков;
delay — имитация времени тестирования блока;
selectOutPut — имитация процесса браковки блоков.
Рисунок 6 - Добавлен элемент диаграммы класса Test
1. Перетащите элемент Скруглённый прямоугольник. В нём мы разместим все объекты сегмента имитации работы постов контроля блоков. Оставьте имя, предложенное системой.
2. На странице Местоположение и размер панели Свойства введите в поля X: 10, Y: 50, Ширина: 570, Высота: 330.
Добавьте на диаграмму агента Тест объекты класса Queue.
1. Из Библиотеки моделирования процессов перетащите объект queue и разместите слева сверху, как на рис. 7.
2. На странице Основные панели Свойства замените имя queue именем склИзгБл1 (склад изготовленных блоков цеха 1).
3. В поле Тип заявки: Entity замените Product.
4. Установите Вместимость: Максимальная.
5. Скопируйте объект с именем склИзгБл1.
6. Вставьте и поместите три объекта класса Queue (см. рис. 7).
Добавьте на диаграмму класса Test объекты класса Delay.
1. Из библиотеки Enterprise Library перетащите один объект delay и поместите справа рядом с объектом склИзгБл1, как на рис. 7.
Рисунок 7 - Размещение элементов на диаграмме агента Тест
2. На странице Основные панели Свойства замените имя delay именем постКонтрБлок1 (посты контроля блоков цеха 1).
3. В поле Тип заявки: Agent замените Product.
4. Введите в поле Время задержки: exponential (1/main.timeTestBlock1).
5. Введите main.postKontr1 в поле Вместимость:.
6. Действия При выходе:
get_Main().kolTestBlock1++;
get_Main().sumCostBlock1 += get_Main().stTestBlock1;
get_Main().costTestBlock1+=get_Main().stTestBlock1;
get_Main().costTestBlock += get_Main().stTestBlock1;
get_Main().sumCostBlock += get_Main().stTestBlock1;
7. Скопируйте объект с именем постКонтрБлок1.
8. Вставьте и разместите три объекта delay (см. рис. 7).
9. Последовательно выделите и внесите правки в их свойства ( табл. 4). Внесите правки и в свойство Действия При выходе.
Таблица 4
Имя |
Время задержки |
Вместимость |
постКонтрБлок2 |
exponential (1/main.timeTestBlock2) |
main.postKontr2 |
постКонтрБлок3 |
exponential (1/main.timeTestBlock3) |
main.postKontr3 |
постКонтрБлок4 |
exponential (1/main.timeTestBlock4) |
main.postKontr4 |
Добавьте на диаграмму Тест объекты класса SelectOutput.
1. Перетащите объект selectOutput и разместите справа рядом с объектом постКонтрБлок1, как на рис. 7.
2. На странице Основные панели Свойства замените имя selectOutPut именем ОтбракБлок1 (отбраковка блоков цеха 1).
3. Установите свойства объекта согласно табл. 5.
4. Скопируйте объект с именем ОтбракБлок1.
5. Вставьте три объекта класса SelectOutput (см. рис. 7).
6. Последовательно выделите вставленные объекты и скорректируйте значения их свойств согласно табл.5.
7. Соедините входы и выходы объектов диаграммы агента Тест согласно рис. 7.
Код в свойство Действия При выходе (true) введен для учёта, например, для цеха 1:
gotBlock1 — количества готовых блоков цеха 1.
Код в свойстве Действия При выходе (false) обеспечивает счёт количества brakBlock1 забракованных блоков цеха 1.
Таблица 5
Свойства |
Значение |
Имя Тип заявки Выход true выбирается Вероятность: Действия При выходе (true) Действия При выходе (false) |
ОтбракБлок1 Product Заданной вероятностью 1-main.procBrakBlock1 main.gotBlock1++; main.brakBlock1++; entity.sign1 = 1; entity.numBlBrak1 = 1; |
Имя Тип заявки Выход true выбирается Вероятность: Действия При выходе (true) Действия При выходе (false) |
ОтбракБлок2 Product Заданной вероятностью 1-main.procBrakBlock2 main.gotBlock2++; main.brakBlock2++; entity.sign1 = 1; entity.numBlBrak2 = 1; |
Имя Тип заявки Выход true выбирается Вероятность: Действия При выходе (true) Действия При выходе (false) |
ОтбракБлок3 Product Заданной вероятностью 1-main.procBrakBlock3 main.gotBlock3++; main.brakBlock3++; entity.sign1 = 1; entity.numBlBrak3 = 1; |
Имя Тип заявки Выход true выбирается Вероятность: Действия При выходе (true) Действия При выходе (false) |
ОтбракБлок4 Product Заданной вероятностью 1-main.procBrakBlock4 main.gotBlock4++; main.brakBlock4++; entity.sign1 = 1; entity.numBlBrak4 = 1; |
В поле entity.sign1 записывается 1 — признак брака на постах контроля, а также единица записывается в поле entity.numBlock1 … entity.numBlock4. Это нужно для раздельного счёта забракованных блоков.
Перейдите на диаграмму агента Main.
Имитация работы пунктов сборки изделий
Пункты сборки изделий предназначены для приема прошедших тестирование блоков с постов контроля, сборки изделий из блоков, замены забракованных блоков и отправки их на склад забракованных блоков.
Для размещения объектов имитации работы пунктов сборки изделий создайте новый тип агента Сборка.
1. На панели Проект щёлкните Main правой кнопкой мыши и выберите из контекстного меню Создать/Тип агента.
2. Откроется окно Шаг 1. Создание нового типа агента.
3. В поле Имя: задайте имя Сборка.
4. Щёлкните кнопку Готово.
Создайте область просмотра на диаграмме агента Сборка для размещения объектов сегмента Пункты сборки изделий.
1. В Палитре выделите Презентация. Перетащите элемент Область просмотра.
2. Перейдите на страницу Основные панели Свойства.
3. В поле Имя: введите Sbor.
4. На странице Местоположение и размер панели Свойства введите в поля X: 0, Y: 0, Ширина: 820, Высота: 550.
5. Перетащите элемент Скруглённый прямоугольник. В нём мы разместим все элементы сегмента. Оставьте имя, предложенное системой.
6. На странице Местоположение и размер панели Свойства введите в поля X: 10, Y: 60, Ширина: 800, Высота: 480.
Согласно назначению пунктов сборки изделий для связи их с другими сегментами модели необходимо иметь:
четыре порта для приёма готовых блоков с постов контроля;
порт — для отправки собранных изделий на стенды контроля;
порт для приёма бракованных изделий с целью определения и замены в них забракованных блоков;
порт — для отправки забракованных блоков после их замены на склад забракованных блоков.
1. Из Палитры Основная перетащите элемент Порт и разместите сверху в крайнем левом ряду (рис. 8).
2. На странице Основные панели Свойства имя port замените именем ГотБлок1.
3. Скопируйте элемент Порт с именем ГотБлок1.
4. Вставьте три элемента Порт (см. рис. 8). При вставке последовательно будут изменяться их имена: ГотБлок2, ГотБлок3, ГотБлок4.
5. Из Палитры Основная перетащите еще три элемента Порт, разместите их и дайте имена как на рис. 8.
6. Вернитесь на диаграмму агента Main.
7. На панели Проект выделите Сборка, перетащите на диаграмму агента Main экземпляр сборка, разместите и соедините так, как на рис. 9. Порт БракБл соедините с объектом sink сегмента Склад бракованных блоков.
8. Экземпляр агента Сборка создан. Возвратитесь на диаграмму агента Сборка.
Для реализации сегмента имитации работы пунктов сборки изделий нам потребуются объекты, но прежде мы рассмотрим вариант построения этого сегмента.
Рисунок 8 - Размещение элементов Порт на диаграмме агента Сборка
Рисунок 9 - Добавлен экземпляр агента Сборка
Сборка изделия начинается тогда, когда будут готовы четыре блока (по одному каждого из четырех типов). Полагаем, что время готовности блоков различное. Значит, нужно использовать такие объекты AnyLogic, которые предназначены для синхронизации движения заявок (блоков). Объекты класса Match предназначены именно для синхронизации движения двух заявок.
После готовности четырех блоков для дальнейщей имитации процесса сборки нужно эти четыре заявки объединить в одну, и интерпретировать её как изделие. В AnyLogic имеются объекты некоторых классов, которые позволяют осуществить нужное нам объединение. Применим объекты класса Combine, позволяющие из двух заявок получить одну.
Процесс объединения будет происходить по мере готовности блоков, значит, на пункте сборки будет создаваться очередь, для имитации которой нужно использовать объект queue.
Для имитации непосредственно процесса сборки следует взять объект delay, а для разделения потока изделий на собранные первично и на изделия с заменными блоками после браковки — объект selectOutPut.
Реализуйте часть сегмента имитации работы пунктов сборки.
1. Перетащите элемент Прямоугольник. Оставьте имя, предложенное системой.
2. На странице Местоположение и размер панели Свойства введите в поля X: 320, Y: 80, Ширина: 340, Высота: 230.
3. Из Библиотеки моделирования процессов перетащите четыре объекта match и три объекта combine. Расположите и соедините их так, как на рис. 10.
4. Перетащите объекты queue, delay, selectOutPut, разместите, соедините и дайте им имена также согласно рис. 10.
Поочередно выделите каждый из этих объектов и на страницах Основные панели Свойства установите для:
match…match3:
Типы заявок: Вход1, Вход2: Product, Product
Условия соответствия true
Максимальная вместимость 1
Максимальная вместимость 2
combine…combine2:
Типы заявок: Вход1, Вход2, Выход: Product, Product, Product
Объединенная заявка entity1 queue:
Тип заявки: Product
Максимальная вместимость
selectOutPut:
Тип заявки:
Product
Выход true выбирается При выполнении условия
Условие entity.sign1 == 0
Объекты match и match1 обеспечивают синхронизацию движения блоков 1 и 2, 3 и 4 соответственно. А объекты match2 и match3 — блоков 1 и 3, 2 и 4 соответственно. Таким образом, обеспечивается синхронизация движения четырех блоков.
Указание свойства entity1 в объектах combine…combine2 позволяет получить на выходе сначала combine, а потом combine2 заявку, имитирующую изначально блок 1. Но теперь эта заявка будет имитировать изделие. Поэтому только для неё ранее было определено значение поля entity.timeSbor (см. табл. 3).
Изделия после элемента пунктСборки разделяются на два потока: собранные изделия первично (entity.sign1=0) и изделия с заменёнными блоками (entity.sign1=2).
Рисунок 10 - Фрагмент сегмента имитации работы пункта сборки
Разделение, осуществляемое объектом selectOutPut по условию entity.sign1==0, нужно для учёта количества изделий с заменёнными блоками и количества заменённых блоков.
Свойства объекта delay установите согласно рис. табл. 6.
Таблица 6
Имя |
Свойства |
Значения |
пунктборки |
Отображать имя Тип заявки Задержка задаётся Время задержки Вместимость Действия При выходе |
Установите флажок Product Определённое время entity.timeSbor main.kolPunSborki if (entity.sign1 == 0) {main.kolSobrIzd++; main.costSborIzd += main.stSborki; entity.cost += main.stSborki;} if (entity.sign1 == 2) {if (entity.numBlBrak1== 1) {main.zamBlock1++; entity.cost += main.stZamBlock1; main.costSborIzd += main.stZamBlock1;} if (entity.numBlBrak2 == 1) {main.zamBlock2++; entity.cost += main.stZamBlock2; main.costSborIzd += main.stZamBlock2;} if (entity.numBlBrak3 == 1) {main.zamBlock3++; entity.cost += main.stZamBlock3; main.costSborIzd += main.stZamBlock3;} if (entity.numBlBrak4 == 1) {main.zamBlock4++; entity.cost += main.stZamBlock4; main.costSborIzd += main.stZamBlock4;} main.kolZamIzd++;} |
Продолжим построение сегмента имитации работы пунктов сборки изделий (рис. 11).
Рисунок 11 - Сегмент имитации работы пунктов сборки изделий
Бракованные изделия поступают через порт БракИзд. В заявке, имитирующей такое изделие, поле etity.sign1 = 2. В одном из полей etity.numBlBrak1 … etity.numBlBrak4 этой же заявки также записана единица. Запись произведена при отбраковке на стендах контроля или пунктах приёма изделий. Это мы сделаем (запишем) позже при построении этих сегментов. Для определения, какой из блоков 1 … 4 забракован в изделии, нужно использовать объект selectOutput5. Этот объект в отличие от объекта selectOutput позволяет проверять четыре условия и в зависимости от результата проверки направляет заявку на один из пяти выходов (можно создать объект selectOutput(N) на один вход и N выходов, использовав один объект exit и N объектов enter).
Готовые блоки поступают через порты ГотБл1 … ГотБл4. Поэтому их надо было бы соединить с соответствующими входами объектов match … match1. Но в забракованном изделии нужно заменить какой-то из блоков. Значит, в случае наличия забракованного изделия надо направить из поступающих блоков соответствующий блок на замену. Сделать это можно с использованием объектов selectOutPut. Каждый порт ГотБл1 … ГотБл4 соединить с входом соответствующего объекта selectOutPut. Выходы true этих объектов соединить с соответсвующими входами объектов match … match1. Таким образом, с выходов true готовые блоки будут направляться для первичной сборки изделий, а с выходов false — для замены бракованных блоков. В качестве условия разделения потоков можно использовать простые переменные БрИздБл1 … БрИздБл4. Например, если БрИздБл2 ≠ 0, то имеется забракованное изделие с блоком 2.
Для дальнейшей реализации процесса замены блока нужно объединить две заявки — имитирующую забракованное изделие и имитирующую блок для замены — в одну заявку. Для объединения двух заявок в одну воспользуйтесь уже известными вам объектами combine. Выходы объекта selectOutput5 соединить с входами delay, а выход каждого из них — с первыми входами объектов combine.
С выходов объектов combine заявки, имитирующие изделия для замены блоков, направляются в очередь очерСбИзд на входе непосредственно пунктов сборки изделий пунктСборки.
Как уже отмечалось ранее, изделия после пунктов сборки разделяются на два потока.
Собранные первично изделия с выхода true объекта selectOutPut направляются на стенды контроля, поэтому этот выход нужно соединить с портом СобрИзд.
Изделие с заменённым блоком нужно вновь направить на стенды контроля. В тоже время его нужно учесть, как забракованный блок и отправить на склад забракованных блоков. Значит, необходимо из одной заявки сделать две. Для этого используйте объект split. Один выход этого объекта соедините с портом БракБл, а другой — с портом СобрИзд.
Выполните изложенные рекомендации практически. Перетащите четыре объекта класса SelectOutPut (или перетащите один объект, а остальные три скопируйте), один объект класса SelectOutPut5, четыре объекта классов Queue и Combine, один объект класса Split и четыре простых переменных. Разместите, дайте им имена и соедините так, как на рис. 11.
Поочередно выделите новые объекты и установите их свойства согласно табл. 7.
Таблица 7
Свойства |
Значение |
selectOutPut … selectOutPut3 |
|
Имя Выход true выбирается Условие |
ГотБлок1 При выполнении условия БракИздБл1 == 0 |
Имя Выход true выбирается Условие |
ГотБлок2 При выполнении условия БракИздБл2 == 0 |
Имя Выход true выбирается Условие |
ГотБлок3 При выполнении условия БракИздБл3 == 0 |
Имя Выход true выбирается Условие |
ГотБлок4 При выполнении условия БракИздБл4 == 0 |
selectOutput5 |
|
Имя Использовать Условие 0 Условие 1 Условие 2 Условие 3 |
БракИзделия Условия entity.numBlBrak1 == 1 entity.numBlBrak2 == 1 entity.numBlBrak3 == 1 entity.numBlBrak4 == 1 |
match |
|
Имя Типы заявок: Вход1, Вход2: Условие соответствия Максимальная вместимость 1 Максимальная вместимость 2 |
синхрБлок_1_2 Product, Product true Установить флажок Установить флажок |
Имя Типы заявок: Вход1, Вход2: Условие соответствия Максимальная вместимость 1 Максимальная вместимость 2 |
синхрБлок_3_4 Product, Product True Установить флажок Установить флажок |
Имя Типы заявок: Вход1, Вход2: Условие соответствия Максимальная вместимость 1 Максимальная вместимость 2 |
синхрБлок_1_3 Product, Product true Установить флажок Установить флажок |
Имя Типы заявок: Вход1, Вход2: Условие соответствия Максимальная вместимость 1 Максимальная вместимость 2 |
синхрБлок_2_4 Product, Product true Установить флажок Установить флажок |
combine |
|
Имя Типы заявок: Вход1, Вход2, Выход Действие при входе 1 Объединенная заявка Действия При выходе |
издБлок1 Product, Product, Product if (entity.numBlBrak1 == 1) БрИздБл1 ++; entity1 if (entity.numBlBrak1 == 1) БрИздБл1 --; entity.cost += main.stZamBlock1; entity.timeSbor = exponential(1/main. timeZamBlock1); |
Имя Типы заявок: Вход1, Вход2, Выход Действие при входе 1 Объединенная заявка Действия При выходе |
издБлок2 Product, Product, Product if (entity.numBlBrak2 == 1) БрИздБл2 ++; entity1 if (entity.numBlBrak2 == 1) БрИздБл2 --; entity.cost += main.stZamBlock2; entity.timeSbor = exponential(1/main. timeZamBlock2); |
Имя Типы заявок: Вход1, Вход2, Выход Действие при входе 1 Объединенная заявка Действия При выходе |
издБлок3 Product, Product, Product if (entity.numBlBrak3 == 1) БрИздБл3 ++; entity1 if (entity.numBlBrak3 == 1) БрИздБл3 --; entity.cost += main.stZamBlock3; entity.timeSbor = exponential(1/main. timeZamBlock3); |
Имя Типы заявок: Вход1, Вход2, Выход Действие при входе 1 Объединенная заявка Действия При выходе |
издБлок4 Product, Product, Product if (entity.numBlBrak4 == 1) БрИздБл4 ++; entity1 if (entity.numBlBrak4 == 1) БрИздБл4 --; ntity.cost += main.stZamBlock4; entity.timeSbor = exponential(1/main. timeZamBlock4); |
split |
|
Типы заявок: Количество копий Новая заявка (копия) Действия При выходе копии |
Product, Product 1 Product entity.sign1 = 0; entity.cost = original.cost; |
Имитация работы стендов контроля изделий
Стенды контроля изделий предназначены для приёма первично собранных изделий и изделий после замены забракованных блоков, непосредственно процесса контроля изделий, отправки прошедших контроль изделий на пункты приёма, забракованных изделий — на пункты сборки, а также для приёма забракованных изделий с пунктов приёма изделий.
На стендах контроля изделий, вследствие недостатка ресурсов, будет создаваться очередь, для имитации которой используйте объект queue.
Для имитации непосредственно процесса контроля изделий, то есть затрат времени на его проведение, используйте объект delay.
По результатам контроля некоторые изделия будут признаны браком. Для отбраковки изделий нужно применить объект selectOutput.
1. Перетащите объекты queue, delay и selectOutput на прямоугольник с именем Стенды контроля изделий диаграммы Main.
2. Разместите и соедините их согласно рис. 12.
3. Выделите объект queue и установите на странице Основные панели Свойства:
Имя: очерСтенКонтр
Тип заявки: Product
Максимальная вместимость Установите флажок
4. Выделите объект delay и установите его свойства:
Тип заявки: Product
Тип Определённое время
Время задержки exponential( 1/timeKontrIzd )
Вместимость kolStendKontr Действия При выходе:
testSobrIzd++;
entity.cost += stKontrIzd;
entity.numBlBrak1 = 0;
entity.numBlBrak2 = 0;
entity.numBlBrak3 = 0;
entity.numBlBrak4 = 0;
Замечание. Объект delay2 с нулевым временем задержки. Если его не включить, объект БракИзделия на диаграмме агента Сборка работать согласно замыслу разработчика не будет.
Рисунок 12 - Диаграмма агента Main с элементами всех сегментов
5. Выделите объект selectOutput и установите его свойства:
Имя: БрСтендКон
Тип заявки: Product
Выход true выбирается С заданной вероятностью
Вероятность[0..1] 1-procBrakIzd
Действия При выходе (true) costTestIzd += stKontrIzd;
Действия При выходе (false)
double a = 0;
int numBlock = 0;
entity.sign1 = 2;
a = uniform();
if (a < 1) numBlock = 4;
if (a <= (verBlNum1 + verBlNum2 + verBlNum3)) numBlock=3;
if (a <= (verBlNum1 + verBlNum2)) numBlock = 2;
if (a <= verBlNum1) numBlock = 1;
if (numBlock == 1) {entity.numBlBrak1 = 1;
entity.timeSbor = exponential(1/timeZamBlock1);}
if (numBlock == 2) {entity.numBlBrak2 = 1;
entity.timeSbor = exponential(1/timeZamBlock2);}
if (numBlock == 3) {entity.numBlBrak3 = 1;
entity.timeSbor = exponential(1/timeZamBlock3);}
if (numBlock == 4) {entity.numBlBrak4 = 1;
entity.timeSbor = exponential(1/timeZamBlock4);}
brakSobrIzd ++;
Код в свойство Действия При выходе (false) объекта selectOutput введен для розыгрыша номера забракованного в изделии блока. В результате розыгрыша в одно из полей entity.numBlBrak1… entity.numBlBrak4 заносится 1 — признак брака. В поле entity.timeSbor — время замены соответствующего блока на пункте сборки. Полю entity.sign1 присваивается значение 2 — признак брака в изделии.
Имитация работы пунктов приёма изделий
Пункты приёма изделий предназначены для приёма прошедших стенды контроля изделий, непосредственно приёма изделий, отправки прошедших приём изделий на склад готовых изделий, а забракованных изделий — на стенды контроля.
На пунктах приёма будет создаваться очередь, для имитации которой используйте объект queue.
Для имитации непосредственно процесса приёма изделий используйте элемент delay.
По результатам контроля некоторые изделия будут признаны браком. Для отбраковки воспользуйтесь объектом selectOutput.
1. Перетащите объекты queue, delay и selectOutput на прямоугольник с Пункты приема изделий диаграммы класса Main.
2. Разместите и соедините их согласно рис. 12.
3. Выделите объект queue и установите на странице Основные панели Свойства:
Имя: очерПрием
Тип заявки: Product
Максимальная вместимость Установите флажок
4. Выделите объект delay и установите его свойства:
Тип заявки: Product
Тип Определённое время
Время задержки exponential( 1/timePriemIzd )
Вместимость kolPunPriem
Действия При выходе
kolPriemIzd++;
costPriemkiIzd += stPriemIzd;
entity.cost += stPriemIzd;
5. Выделите объект selectOutput и установите его свойства:
Тип заявки: Product
Выход true выбирается С заданной вероятностью
Вероятность[0..1] 1-procBrakPriem
Действия При выходе (false)
entity.sign1 = 2;
brakPriemIzd++;
Код свойства Действия При выходе объекта delay введен для счета количества kolPriemIzd принятых всего изделий.
Код свойства Действия При выходе (false) объекта selectOutput считает количество brakPriemIzd забракованных изделий и полю entity.sign1 присваивает 2 — признак брака в изделии.
Имитация склада готовых изделий
Для имитации склада готовых изделий используйте объект sink со следующими свойствами:
Имя: ГотИзделия
Тип заявки: Product
Действия При выходе:
колГотИзд ++;
времяИзгИзд = time()/колГотИзд;
стоимГотИзд += entity.cost;
минСтоимГотИзд +=minCostIzd;
коэфУвелСтоимИзд = (стоимГотИзд+стоимБракБл)/минСтоимГотИзд;
ostGotBlock1 = gotBlock1 - колГотИзд - zamBlock1;
ostGotBlock2 = gotBlock2 - колГотИзд - zamBlock2;
ostGotBlock3 = gotBlock3 - колГотИзд - zamBlock3;
ostGotBlock4 = gotBlock4 - колГотИзд - zamBlock4;
Код свойства Действия При выходе введен для счёта количества kolGotIzd готовых изделий, их стоимости costGotIzd и коэффициента koefIncrCostIzd увеличения себестоимости изделия вследствие наличия брака.
Кроме того, ведется счёт готовых для сборки блоков, то есть изготовленных цехами и проверенных на постах контроля, но не использованных для сборки изделий блоков по типам ostGotBlock1… ostGotBlock4 на текущее модельное время.
Имитация склада бракованных блоков
Ранее (см. п. Имитация работы постов контроля блоков) для имитации склада бракованных блоков было рекомендовано использовать один объект sink.
Предположим, что требуется вести раздельный учёт забракованных блоков на постах контроля цехов и забракованных на стендах контроля и пунктах приёма изделий. Для разделения потока брака дополнительному полю entity.sign1 присваивались признаки 1 или 2.
1. Перетащите объекты selectOutput и sink на прямоугольник с именем Склад бракованных блоков диаграммы агента Main.
2. Разместите и соедините их согласно рис. 12.
3. Поочередно выделите объекты имитации склада бракованных блоков, начиная с объекта selectOutput, и установите свойства согласно табл. 8.
Коды в свойстве Действия При выходе: обоих объектов sink одинаковые. Они предназначены для счёта:
стоимости costzbrakBlock забракованных блоков не по типам, а в целом всех блоков;
количества забракованных блоков по типам allBrakBlock1… allBrakBlock4.
4. Из палитры Картинки перетащите на сегменты имитации складов готовых изделий и бракованных блоков картинки Склад.
Таблица 8
Свойства |
Значение |
selectOutput |
|
Тип заявки: Выход true выбирается Условие |
Product При выполнении условия entity.sign1 == 1 |
sink |
|
Имя Тип заявки: Действия При выходе: |
БрПостКонтр Product if (entity.numBlBrak1 == 1) { стоимБракБл += costBlock1; allBrakBlock1++;} if (entity.numBlBrak2 == 1) { стоимБракБл += costBlock2 ; allBrakBlock2++;} if (entity.numBlBrak3 == 1) { стоимБракБл += costBlock3; allBrakBlock3++;} if (entity.numBlBrak4 == 1) { стоимБракБл += costBlock4; allBrakBlock4++;} |
Имя Тип заявки: Действия При выходе: |
БрБлЗам Product if (entity.numBlBrak1 == 1) { стоимБракБл += costBlock1; allBrakBlock1++;} if (entity.numBlBrak2 == 1) { стоимБракБл += costBlock2; allBrakBlock2++;} if (entity.numBlBrak3 == 1) { стоимБракБл += costBlock3; allBrakBlock3++;} if (entity.numBlBrak4 == 1) { стоимБракБл += costBlock4; allBrakBlock4++;} |
Организация перек между областями просмотра
Добавьте свои собственные элементы презентации на ранее созданные области просмотра Mainview, Data, Result, Kont1 и Sbor, щелчком на которых будет производиться переход к той или иной области просмотра. Сделайте так, чтобы из любой области можно было переходить в любую другую область.
Для этого разместите на каждой области просмотра элементы презентации, показанные на рис. 13.
Рисунок 13 - Элементы презентации для переключения
Начните с области просмотра Mainview.
1. В Палитре выделите Презентация. Перетащите элемент text на область просмотра Mainview, разместите и введите в поле Текст: Предприятие (рис. 13). На панели Свойства установите в поле Цвет: black, выберите выравнивание текста и шрифт.
2. Перетащите второй элемент text, разместите и введите в поле Текст: Посты контроля блоков. На панели Свойства установите в поле Цвет: blue, выберите выравнивание текста и шрифт. Раскройте Специфические и в поле Действие по щелчку: введите код: тест.Kontr1.navigateTo();
Замечание. При выборе цветов нужно исходить из того, чтобы различались по цвету текст открытой области просмотра и тексты закрытых областей просмотра.
3. Перетащите третий элемент text, разместите и введите в поле Текст: Пункты сборки изделий. Раскройте Специфические. В поле Действие по щелчку: введите: сборка.Sbor.navigateTo();
4. Перетащите четвертый элемент text. Разместите и введите в поле Текст: Исходные данные. В поле Действие по щелчку: на странице Специфические введите: Данные.navigateTo();
5. Перетащите пятый элемент text, разместите и введите в поле Текст: Результаты моделирования. На панели Свойства выделите Специфические и в поле Действие по щелчку: введите: Результаты.navigateTo();
Таким образом, с области просмотра Mainview можно будет переходить на любую из четырех областей просмотра. При этом элемент презентации открытой области высвечивается черным цветом, а остальные элементы презентации — голубым цветом.
1. Скопируйте элементы презентации согласно рис. 13. Шрифт, цвет и его размеры установите по своему усмотрению.
2. Последовательно переходите на остальные области просмотра, вставьте скопированные элементы презентации и внесите правки в их свойства согласно табл. 9.
Таблица 9
Элемент презентации |
Действие по щелчку |
Data |
|
Предприятие Посты контроля блоков Пункты сборки изделий Исходные данные Результаты моделирования |
Mainview.navigateTo(); тест.Kontr1.navigateTo(); сборка.Sbor.navigateTo();
Результаты.navigateTo(); |
Result |
|
Предприятие Посты контроля блоков Пункты сборки изделий Исходные данные Результаты моделирования |
Mainview.navigateTo(); тест.Kontr1.navigateTo(); сборка.Sbor.navigateTo(); Данные.navigateTo(); |
Kontrol |
|
Предприятие Посты контроля блоков Пункты сборки изделий Исходные данные Результаты моделирования |
main.Mainview.navigateTo();
main.сборка.Sbor.navigateTo(); main.Данные.navigateTo(); main.Результаты.navigateTo(); |
Sbor |
|
Предприятие Посты контроля блоков Пункты сборки изделий Исходные данные Результаты моделирования |
main.Mainview.navigateTo(); main.тест.Kontr1.navigateTo();
main.Данные.navigateTo(); main.Результаты.navigateTo(); |
Построение модели для проведения простого эксперимента завершено. Теперь отладьте модель, используя возможности AnyLogic по обнаружению ошибок. Если вы всё выполнили корректно, то получите результаты, показанные на рис. 14.
Замечание. При каждом запуске модели результаты будут повторяться, если используются только распределения и случайные функции из AnyLogic. Например, если вместо функции uniform(1) использовать функцию random(), которая является функцией Java, результаты моделирования воспроизводиться не будут.
Рисунок 14 - Результаты моделирования согласно постановке задачи
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.