МОДЕЛЬ ФУНКЦИОНИРОВАНИЯ ПРЕДПРИЯТИЯ

  • doc
  • 11.05.2020
Публикация в СМИ для учителей

Публикация в СМИ для учителей

Бесплатное участие. Свидетельство СМИ сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала 25. МОДЕЛЬ ФУНКЦИОНИРОВАНИЯ ПРЕДПРИЯТИЯ.doc

МОДЕЛЬ ФУНКЦИОНИРОВАНИЯ ПРЕДПРИЯТИЯ

Постановка задачи

Предприятие имеет n_1 цехов, производящих n_1 типов блоков, т. е. каждый цех производит блоки одного типа. Себестоимости комплектующих блоков С_{к1}, С_{к2}, …, С_{кn1}. Стоимости изготовления блоков С_{изг1}, С_{изг2}, …, С_{изгn1}. Интервалы выпуска блоков Т_{1}, Т_{2}, …, Т_{n1} - случайные. Из n_1 блоков собирается одно изделие.

Перед сборкой каждый тип блоков проверяется на n_{11}, n_{12}, …, n_{1n} соответствующих постах контроля. Длительности контроля одного блока Т_{11}, Т_{12}, …, Т_{1n} случайные. Стоимости проверки блоков С_{пр1}, С_{пр2}, …, С_{прn1}. На каждом посту бракуется q_{11}, q_{12}, …, q_{1n} \;\% блоков соответственно. Забракованные блоки в дальнейшем процессе сборки не участвуют, и удаляются с постов контроля в брак.

Прошедшие контроль, т. е. не забракованные блоки поступают на один из n_2 пунктов сборки. На пункте сборки одновременно собирается только одно изделие. Сборка начинается только тогда, когда имеются все необходимые n_1 блоков различных типов. Время сборки T_c случайное. Стоимость сборки одного изделия C_сб.

После сборки изделие поступает на один из n_3 стендов выходного контроля. На одном стенде одновременно проверяется только одно изделие. Время проверки Т_п случайное. Стоимость проверки одного изделия С_к. По результатам проверки бракуется q_2 \;\% изделий. В таком изделии с вероятностью q_3 \;\% могут быть забракованы m блоков. Вероятности порядковых номеров из 1 … n_1 P_{бл1} … P_{блn_1} соответственно.

Забракованное изделие направляется в цех сборки, где неработоспособные блоки заменяются новыми. Время замены T_{замi} случайное. Стоимость замены i-го блока C_{замi}. После замены блоков изделие вновь поступает на один из стендов выходного контроля.

Прошедшее стенд выходного контроля изделие поступает в отдел приёмки. Время приемки T_{пр} одного изделия случайное. Стоимость приемки одного изделия C_{п}. По результатам приёмки бракуется q_4 \;\% изделий, которые направляются вновь на стенд выходного контроля. Принятые приёмкой изделия направляются на склад предприятия.

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

n_1=4; Т_1=19; Т_2=11; Т_3=15; Т_4=18;

C_{k1}=35; C_{k2}=32; C_{k3}=43; C_{k4}=48;

C_{изг1}=35; C_{изг2}=27; C_{изг3}=36; C_{изг4}=37;

n_{11}=2; n_{12}=2; n_{13}=2; n_{14}=2; Т_{11}=12; Т_{12}=16; Т_{13}=21; Т_{14}=17;

C_{пр1}=12; C_{пр2}=23; C_{пр3}=32; C_{пр4}=28;

q_{11}=0,02; q_{12}=0,03; q_{13}=0,04; q_{14}=0,06;

n_{2}=2; T_{c}=22; C_{сб}=67; n_{3}=2; Т_{п}=26; C_{k}=74; q_{2}=0,05;

n_{2}=2; T_{c}=22; C_{сб}=67; n_{3}=2; Т_{п}=26; C_{k}=74; q_{2}=0,05;

m=1; p_{k1}=1,0; P_{бл1}=0,25; P_{бл2}=0,25; P_{бл3}=0,25; P_{бл4}=0,25;

Т_{зам1}=12; Т_{зам2}=15; Т_{зам3}=12; Т_{зам4}=21;

С_{зам1}=34; С_{зам2}=46; С_{зам3}=38; С_{зам4}=54;

n_{4}=2; T_{пр}=18; С_{п}=53; q_{4}=0,15.

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

Задание на исследование

Разработать имитационную модель функционирования предприятия при изготовлении изделий из блоков.

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

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

Уяснение задачи на исследование

Предприятие при изготовлении блоков и сборки из них изделий может быть представлено как многофазная многоканальная разомкнутая система массового обслуживания с ожиданием, так как оно имеет все её элементы (рис. 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 — стоимость одного изделия;

времяИзгИзд — среднее время изготовления одного изделия;

коэфУвелСтоимИзд — коэффициент увеличения себестоимости изделия.

Минимальная стоимость изделий будет тогда, когда не будет бракованных блоков и изделий. В терминах постановки задачи это условие имеет вид:

С_{min}=С_{minизд} \cdot N_{изд},

где N_{изд} - количество готовых изделий (поступивших на склад);

С_{minизд} - минимальная себестоимость производства одного изделия, вычисляется по формуле:

С_{изд}=\sum\limits_{i=1}^{nl}(C_{кi}+C_{изгi}+C_{прi})+C_{сб}+C_{к}+C_{п}

В случае наличия брака себестоимость производимой продукции увеличится и составит С_{max}. То есть коэффициент увеличения себестоимости будет равен

K_c=C_{max}/C_{min}

Запишем в идентификаторах исходных данных и результатов моделирования то же самое:

costBlock1=stKomplBlock1+stIzqBlock1+stTestBlock1;

costBlock2=stKomplBlock2+stIzqBlock2+stTestBlock2;

costBlock3=stKomplBlock3+stIzqBlock3+stTestBlock3;

costBlock4=stKomplBlock4+stIzqBlock4+stTestBlock4;

costBlockIzd=costBlock1+costBlock2+costBlock3+costBlock4;

C_{minизд}=costBlockIzd+stSborki+stKontrIzd+stPriemIzd;

C_{min=}C_{minизд} \cdot colGotIzd; C_{max}= costGotIzd+costBrakBlock.

K_c=koefIncrCostIzd=\frac{C_{max}}{C_{min}}

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

Ввод исходных данных

Для ввода исходных данных используем элемент Параметр.

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

 

http://www.intuit.ru/EDI/13_05_16_2/1463091622-23109/tutorial/1155/objects/6/files/06_02.jpg

Рисунок 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. Выровняйте элементы. Для этого нужно вначале выделить те элементы, которые вы хотите выровнять, а затем открыть правым щелчком мыши по выделенным фигурам контекстное меню и выбрать нужную команду выравнивания из подменю Выравнивание. Не поддерживается выравнивание элементов диаграмм состояний и диаграмм действий, потому что при выравнивании таких элементов может нарушиться логика модели.

http://www.intuit.ru/EDI/13_05_16_2/1463091622-23109/tutorial/1155/objects/6/files/06_03.jpg

Рисунок 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).

Размещение элементов Порт на объекте Test

Рисунок 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 — имитация процесса браковки блоков.

Добавлен элемент диаграммы класса Test

Рисунок 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.

Размещение элементов на диаграмме активного класса Test

Рисунок 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. Экземпляр агента Сборка создан. Возвратитесь на диаграмму агента Сборка.
Для реализации сегмента имитации работы пунктов сборки изделий нам потребуются объекты, но прежде мы рассмотрим вариант построения этого сегмента.
Размещение элементов Порт на объекте Sborka
Рисунок 8 - Размещение элементов Порт на диаграмме агента Сборка
Добавлен элемент диаграммы класса Sborka
Рисунок 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 с нулевым временем задержки. Если его не включить, объект БракИзделия на диаграмме агента Сборка работать согласно замыслу разработчика не будет.

Диаграмма класса Main с элементами всех сегментов

Рисунок 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 - Результаты моделирования согласно постановке задачи