Концептуальное проектирование систем в AnyLogic 7 и GPSS World

Модель функционирования предприятия

Разбить на страницы
Показывать лекцию целиком

Модель в GPSS World

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

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

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

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

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

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

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

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

$$n_1=4; T_1=19; T_2=11; T_3=15; T_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; T_{11}=12; T_{12}=16; T_{13}=21; T_{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_с=22; С_{сб}=67; n_3=2; T_{п}=26; C_k=74; q_2=0,05;$$ $$m=1; P_{k1}=1,0; P_{бл1}=0,52; P_{бл2}=0,52; P_{бл3}=0,52; P_{бл4}=0,52;$$ $$T_{зам1}=12; T_{зам2}=15; T_{зам3}=12; T_{зам4}=21;$$ $$C_{зам1}=34; C_{зам2}=46; C_{зам3}=38; C_{зам4}=54;$$ $$n_4=2; T_{пр}=18; C_{п}=53; q_{4}=0,15.$$

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

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

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

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

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

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

Предприятие при изготовлении блоков и сборки из них изделий может быть представлено как многофазная многоканальная разомкнутая система массового обслуживания с ожиданием, так как оно имеет все ее элементы (Рис. 6.1):

  • поток изготовленных цехами блоков;
  • очереди блоков на посты контроля и пункты сборки;
  • очереди изделий на стенды контроля и пункт приемки;
  • многоканальные устройства обслуживания (посты контроля, стенды выходного контроля, пункты сборки, пункты приёмки);
  • потоки забракованных блоков;
  • выходные потоки готовых изделий.
  • (рис 6.1) Предприятие как система массового обслуживания

    Для имитации МКУ следует использовать блоки ENTER и LEAVE.

    Для исходных данных в программе модели возьмем те же идентификаторы, что и в постановке задачи, но для предотвращения случаев совпадения с зарезервированными символами GPSS World добавим символ подчеркивания.

    Например, q11_, n1_. Сделаем это для отличия от зарезервированных символов GPSS World: q - системный числовой атрибут, означающий очередь, n - используется в качестве ссылки при определении количества транзактов, вошедших в какой-либо блок программы. Добавление символа подчеркивания предотвратит ошибку, которая в противном случае будет выявлена на этапе создания объекта "Процесс моделирования". Другие идентификаторы будем вводить по мере уяснения задачи, а также в ходе разработки программы модели.

    Для моделирования необходимо привести в соответствие время протекания реального процесса изготовления блоков и сборки изделий на предприятии и в модели. Это осуществляется введением масштабного коэффициента, например, если для условий рассматриваемой задачи его взять равным 1, а в реальном процессе измерять время в минутах, то 1 мин будет соответствовать 1 ед. мод. вр. Тогда время моделирования VrMod = 60 # 40 = 2400 ед. мод. вр. Временные параметры изготовления и контроля блоков, сборки, контроля и приёмки изделий даны в минутах, поэтому при выбранном масштабном коэффициенте 1 они не изменятся.

    В модели, как процесса, протекающего в СМО (см. Рис. 6.1), необходимо иметь:

  • задание исходных данных;
  • сегмент имитации работы цехов без постов контроля;
  • сегмент имитации работы постов контроля блоков;
  • сегмент имитации сборки изделий;
  • сегмент имитации работы стендов выходного контроля;
  • сегмент имитации работы приемки;
  • сегмент задания времени моделирования и расчета результатов моделирования.
  • Для ввода исходных данных целесообразно использовать команды EQU и FUNCTION. Вторая команда позволит сократить число строк в программе за счёт ввода одномерного массива данных двумя строками.

    Программа модели

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

    Это подобие может быть также усилено разработчиком за счет продуманного на этапе разработки разделения исследуемого объекта на элементы, на процессы, протекающие в них, а модели - на сегменты.

    Однако возможно и другое. В данном примере можно было бы иметь сегменты имитации работы цехов по их количеству, т. е. четыре сегмента. С целью придания универсальности в модели имеется один сегмент имитации работы цехов. При увеличении (уменьшении) количества цехов необходимо только изменить значение переменной пользователя TipBl - число типов блоков (по числу цехов).

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

    Объединение сделано также в интересах универсальности модели. Предположим, количество цехов увеличилось. Нужно было бы добавлять сегменты имитации работы цехов и постов контроля, т. е. количество блоков в модели увеличилось бы. В предлагаемом варианте сегмент имитации функционирования постов контроля блоков остаётся неизменным. Необходимо только командами STORAGE задать ёмкости добавляемых пунктов контроля, заменить их имена номерами и добавить данные: среднее время контроля блоков, доля браков и стоимость контроля блоков в функции TKontr, BrBl и CProv соответственно.

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

    Для розыгрыша выхода в брак блоков и изделий используется блок TRANSFER в статистическом режиме.

    Обратите внимание, что в сегменте имитации сборки изделий блок TEST используется в режиме, который рекомендуется избегать вследствие того, что проверяемое условие может не выполниться. Однако здесь этого не должно быть, так как в противном случае будут отсутствовать готовые блоки для сборки изделий. По мере готовности блоков условие обязательно выполняется и блоки - транзакты направляются на сборку. Первые три транзакта уничтожаются, а четвертый транзакт имитирует собранное из четырех блоков изделие. Он направляется для проверки работоспособности на пункт приема изделий.

    Замечание. Не путайте блоки изделий с блоками GPSS World в программе модели.

    В программе использование МКУ и списков пользователя демонстрируется применением номеров МКУ вместо их имен. Этот метод дает возможность иметь в модели один сегмент имитации работы постов контроля блоков вместо подобного сегмента для каждого цеха, т. е. сократить число блоков в модели.

    Обратите внимание, что в программе присвоение номеров именам МКУ указывается в самом начале и только потом, не обязательно следом, определение МКУ командой STORAGE. Если вы построите программу так, что поменяете порядок: вначале определение МКУ командой STORAGE, а потом - присвоение командой EQU номеров именам МКУ, то на этапе выполнения программы модели возникнет ошибка: "Обращение к несуществующей памяти". На этапе создания объекта "Процесс моделирования" ошибка изменения этого порядка не обнаруживается.

    Ниже приводится программа модели.

    ; Модель функционирования предприятия
    ; Замена имен МКУ номерами
    Kontr1	EQU	1
    Kontr2	EQU	2
    Kontr3	EQU	3
    Kontr4	EQU	4
    ; Задание исходных данных
    TShop	FUNCTION	P1,D4	; Средние интервалы времени изготовления блоков
    1,19/2,11/3,15/4,18
    CKom	FUNCTION	P1,D4	; Стоимости комплектующих блоков
    1,35/2,32/3,43/4,48
    CIzg	FUNCTION	P1,D4	; Стоимости изготовления блоков
    1,35/2,27/3,36/4,37
    TKont	FUNCTION	P1,D4	; Среднее время контроля на постах
    1,12/2,16/3,21/4,17
    BrBl	FUNCTION	P1,D4	; Доли брака блоков на постах контроля
    1,.02/2,.03/3,.04/4,.06
    CProv	FUNCTION	P1,D4	; Стоимости контроля блоков
    1,12/2,23/3,32/4,28
    TZam	FUNCTION	P1,D4	; Среднее время замены блоков
    1,12/2,15/3,12/4,21
    CZam	FUNCTION	P1,D4	; Стоимости замены блоков
    1,34/2,46/3,38/4,54
    VerBl	FUNCTION	RN339,D2 ; Вероятности брака одного или двух блоков в собранном изделии
    .0,2/1,1
    VerBlNum	FUNCTION	RN339,D4; Вероятность брака блока номер ...
    .25,1/.5,2/.75,3/1,4
    CCb	EQU	67	; Стоимость сборки изделия 
    q2_	EQU	0.05	; Доля забракованных изделий на пункте выходного контроля
    q4_	EQU	0.15	; Доля забракованных изделий приемкой
    TipBl	EQU	4	; Мах количество типов блоков
    VrMod 	EQU	2400	; Время моделирования, 1 ед. мод. вр. = 1 мин
    Tc_	EQU	22	; Среднее время сборки изделия
    Tp	EQU	26	; Среднее время проверки изделия
    Tpr	EQU	18	; Среднее время приема изделия
    CPr	EQU	53	; Стоимость приёмки изделия
    CK	EQU	74	; Стоимость контроля изделия
    ;Задание количества пунктов сборки и постов контроля
    Sb	STORAGE	2	; Количество пунктов сборки
    Kontr1	STORAGE	2	; Количество постов n11
    Kontr2	STORAGE	2	; Количество постов n12
    Kontr3	STORAGE	2	; Количество постов n13
    Kontr4	STORAGE	2	; Количество постов n14
    KSb	STORAGE	3	; Количество стендов выходного контроля
    KPr	STORAGE	2	; Количество пунктов приёмки
    
    ; Описание арифметических выражений
    KolIzd	VARIABLE	(N$Term7/X$prog)	; Количество готовых изделий
    KolGotBl	VARIABLE	((CH*1/X$Prog))	; Количество готовых блоков всех типов, оставшихся на складах
    KolBrBl	VARIABLE	((X*1/X$Prog))	; Количество забракованных блоков всех типов
    TIzd	VARIABLE	(AC1/X$Prog)/X$KolIzd; Среднее время подготовки одного изделия
    ;Сегмент имитации работы цехов без постов контроля
    	GENERATE	,,,TipBl ; Число транзактов по числу типов блоков
    	SAVEVALUE	Tip+,1	; Пронумеровать типы блоков
    	ASSIGN	1,X$Tip	; Код в параметре транзакта - тип блока
    Met20	ADVANCE	(Exponential(27,0,FN$TShop)); Розыгрыш интервала поступления блока
    	SPLIT	1,Met20	; Расщепление на два 
    	ASSIGN	2,(Exponential(339,0,FN$TKont))	
    ; Розыгрыш времени контроля и запись в Р2
    	ASSIGN	9,FN$BrBl ; Запись в Р9 доли брака блоков после постов контроля
    	ASSIGN	Sbor,(Exponential(339,0,Tc_)); Запись времени сборки изделия
    	ASSIGN	Cost,(FN$CKom+FN$CIzg); Стоимость комплектующих+стоимость изготовления в P$Cost
    ; Сегмент имитации работы постов контроля блоков
    Met1	QUEUE	P1 ; Встать в очередь с номером в Р1
    	ENTER	P1	; Занять МКУ с номером в Р1
    	DEPART	P1 ; Покинуть очередь с номером в Р1
    	ADVANCE 	P2;Имитация контроля с временем в Р2
    	LEAVE	P1	; Освободить МКУ с номером в Р1
    	ASSIGN	Cost+,FN$CProv ; Добавить стоимость проверки
    	TRANSFER	P9,,Met14 ; Отправить брак блоков к Met14
    	LINK 	P1,FIFO ; Готовые блоки на склад с номером в Р1
    ; Сегмент имитации сборки изделий
    	GENERATE	,,,1
    Met3 	ASSIGN	1,TipBl	; Подготовка к циклу
    	SAVEVALUE	Cost,0	; Обнуление ячейки Cost
    Met13 	TEST NE	CH*1,0	; Есть ли на складе готовые блоки?
    	TEST NE	P1,1,Met4  ; Если последний блок, то на Met4
    	UNLINK	P1,Met32,1 ; Нет
    	TRANSFER	,Met31
    Met4 	UNLINK	P1,Met22,1 ; Отправить блоки на сборку
    Met31	LOOP	1,Met13
    	TRANSFER	,Met3	; Вернуться для проверки наличия всех типов блоков для следующего изделия
    Met32	SAVEVALUE	Cost+,P$Cost	; Суммарная стоимость 2-го, 3-го и 4-го блоков
    	SAVEVALUE	Cost1,X$Cost	; Суммарная стоимость 2-го, 3-го и 4-го блоков
    	TRANSFER	,Term5	; Отправить 
    Met22	ASSIGN	Cost+,X$Cost1	; Суммарная стоимость 1-го...4-го блоков
    	SAVEVALUE	Cost2,P$Cost	; Суммарная стоимость 1-го...4-го блоков
    	ASSIGN	Zam,0
    Met5 	QUEUE	Sbor	; Занять очередь на пункты сборки
    	ENTER	Sb	; Занять пункт сборки
    	DEPART	Sbor	; Освободить очередь на пункт сборки
    	ADVANCE	P$Sbor	; Имитация сборки
    	LEAVE	Sb	; Освободить пункт сборки
    	TEST E	P$Zam,0,Met9
    	ASSIGN	Cost+,CCb	; Добавить стоимость сборки изделия	
    ; Сегмент имитации работы стендов выходного контроля
    Met9 	QUEUE	 KSbor	; Занять очередь на стенд выходного контроля
    	ENTER	KSb		; Занять стенд выходного контроля
    	DEPART	KSbor	; Освободить очередь на стенд выходного контроля
    	ADVANCE	(Exponential(339,0,Tp)); Имитация работы стенда выходного контроля
    	LEAVE	KSb	; Освободить стенд выходного контроля
    	ASSIGN	Cost+,CK	; Добавить стоимость контроля изделия
    	TRANSFER	q2_,Met34,Met33	; Направить в приёмку, а брак-на подготовку к замене
    ; Подготовка к замене блоков
    Met33	ASSIGN	KolBl,FN$VerBl	; Розыгрыш количества забракованных в изделии блоков
    	ASSIGN	Sbor,0	; Обнуление параметра Sbor
    Met21	ASSIGN	1,FN$VerBlNum	; Розыгрыш номера блока
    	TEST NE	CH*1,0	; Есть на складе готовые блоки?
    	UNLINK	P1,Met14,1	; Да. Тогда блок на замену
    	ASSIGN	Sbor,(Exponential(339,0,FN$TZam)); Розыгрыш времени замены блоков
    	ASSIGN	Zam,1
    	ASSIGN	Cost+,FN$CZam	; Добавить стоимость замены блока
    	TRANSFER	,Met5	; Отправить на пункты сборки
    ; Сегмент имитации работы приёмки
    Met34	QUEUE	Opr	; Занять очередь в приёмку
    	ENTER	KPr	; Занять приемку
    	DEPART	Opr	; Освободить очередь в приёмку
    	ADVANCE	(Exponential(339,0,Tpr)) ; Имитация работы приемки
    	LEAVE	KPr	; Освободить приемку
    	ASSIGN	Cost+,CPr	; Добавить стоимость приёмки изделия
    	TRANSFER	q4_,,Met9 ; Готовые изделия - на склад
    ; Сегмент счёта блоков и изделий
    	SAVEVALUE	CostIzd+,P$Cost
    Term7	TERMINATE 	; Количество готовых изделий за все прогоны модели
    Met14 	SAVEVALUE P1+,1  ; Количество забракованных блоков по типам за все прогоны модели
    	ASSIGN	5,(TipBl+P1)
    	SAVEVALUE	*5+,P$Cost; Стоимости забракованных блоков по типам за все прогоны модели
    	SAVEVALUE	CostBr+,P$Cost	; Стоимость забракованных блоков за все прогоны модели
    	TERMINATE
    Term5	TERMINATE		
    ; Задание времени моделирования и расчет результатов
    	GENERATE	VrMod ; Задание времени моделирования
    	TEST L	X$prog,TG1,Met10	; Если X$Prog< содержимого счетчика завершений, то
    	SAVEVALUE Prog,TG1 ; записать в X$Prog содержимое счетчика завершений
    Met10	TEST E	TG1,1,Met12 ; Если содержимое счетчика завершений равно 1, то расчет результатов
    	SAVEVALUE KolIzd,V$KolIzd  ; Количество готовых изделий
    	ASSIGN	1,0 	; Подготовка к циклу
    Met15	ASSIGN	1+,1	; Начало цикла по числу типов блоков
    	SAVEVALUE (10+P1),V$KolGotBl	; Количество готовых блоков всех типов, оставшихся на складах
    	SAVEVALUE P1,V$KolBrBl	; Количество забракованных блоков всех типов
    	ASSIGN	2,(TipBl+P1)
    	SAVEVALUE	P2,((X*2)/X$Prog); Стоимости забракованных блоков по типам
    	SAVEVALUE	StBl+,(FN$CKom+FN$CIzg+FN$CProv); Стоимость блоков в собранном изделии
    	TEST GE	P1,TipBl,Met15	; Все ли типы блоков?
    	SAVEVALUE	Cmin,(X$StBl+CCb+CK+CPr) ; Минимальная стоимость одного изделия
    	SAVEVALUE	MinCGotIzd,(X$Cmin#X$KolIzd) ; Минимальная стоимость всех готовых изделий
    	SAVEVALUE	CostIzd,(X$CostIzd/X$Prog)	; Стоимость готовых изделий
    	SAVEVALUE TIzd,V$TIzd	; Среднее время подготовки одного изделия
    	SAVEVALUE	CostBr,(X$CostBr/X$Prog)	; Стоимость забракованных блоков
    	SAVEVALUE	Koef,((X$CostIzd+X$CostBr)/X$MinCGotIzd); Коэффициент увеличения стоимости одного изделия
    Met12	TERMINATE 1
    	START	 1000

    Отладьте модель. Выполните моделирование. В отчете, фрагмент которого приведен ниже,

    SAVEVALUE    RETRY       VALUE
     KOLIZD        0        121.628
     TIZD          0         19.732
     COSTBR        0       3091.787
     COSTIZD       0      74410.065
     CMIN          0        582.000
     MINCGOTIZD    0      70787.496
     KOEF          0          1.095

    найдите, что за 40 часов подготовлено 121,628 изделия, а среднее время подготовки одного изделия $$\approx 20$$ мин (19,732 мин). Минимальная стоимость готовых изделий 70787,496, стоимость брака 3091,787, стоимость готовых изделий 74410,065. Минимальная стоимость одного изделия - 582. Коэффициент увеличения стоимости одного изделия составил 1,095.

    Другие эксперименты будут проведены в п. 6.3. Данные этого же эксперимента внесены в Табл. 6.10.

    Модель функционирования предприятия в AnyLogic

    Формализованное описание

    Модель, исходя из структуры предприятия (см. Рис. 6.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 - стоимость одного изделия;
  • времяИзгИзд - среднее время изготовления одного изделия;
  • коэфУвелСтоимИзд - коэффициент увеличения себестоимости изделия.
  • Минимальная стоимость изделий будет тогда, когда не будет бракованных блоков и изделий. В терминах постановки задачи это условие имеет вид:

    $$C_{min}=C_{minизд} \cdot N_{изд},$$

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

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

    $$C_{изд}=\sum_{i=1}^{n1}(C_{кi}+C_{изгi}+C_{прi})+C_{сб}+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 колГотИзд; C_{max}= стоимГотИзд + стоимБракБл.$$ $$K_c = коэфУвелСтоимИзд = \frac{C_{max}}{C_{min}}.$$ Замечание. В приведеных для расчета результатов моделирования выражениях мы не учитывали те блоки, которые были произведены, не забракованы, но не были использованы для сборки изделий.

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

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

  • Выполните команду Файл/Создать/Модель на панели инструментов.
  • В поле Имя модели диалогового окна Новая модель введите Предприятие.
  • Выберите каталог, в котором будут сохранены файлы модели. Щёлкните кнопку Готово.
  • В Палитре выделите Презентация. Создайте область просмотра Данные для размещения элементов исходных данных.
  • Перетащите элемент Область просмотра. В поле Имя: введите Данные.
  • На странице Местоположение и размер панели Свойства введите в поля X: 0, Y: 1700, Ширина: 760, Высота: 330.
  • Перетащите элемент Прямоугольник. Оставьте имя, предложенное системой.
  • На странице Местоположение и размер панели Свойства введите в поля X: 10, Y: 1750, Ширина: 740, Высота: 270.
  • Перетащите элемент text и на странице Основные панели Свойства в поле Текст: вместо слова text введите Исходные данные.
  • В Палитре выделите Основная. Перетащите элементы Параметр на элемент с именем Исходные данные. Разместите их так, как показано на Рис. 6.2. Значения свойств установите согласно Табл. 6.1.
  • Элементы и их свойства
    ПараметрПараметр
    ИмяТипЗначение по умолчаниюИмяТипЗначение по умолчанию
    aveTimeShop1double19stKomplBlock1double35
    aveTimeShop2double11stKomplBlock2double32
    aveTimeShop3double15stKomplBlock3double43
    aveTimeShop4double18stKomplBlock4double48
    stIzgBlock1double35timeTestBlock1double12
    stIzgBlock2double27timeTestBlock2double16
    stIzgBlock3double36timeTestBlock3double21
    stIzgBlock4double37timeTestBlock4double17
    postKontr1int2procBrakBlock1double0,02
    postKontr2int2procBrakBlock2double0,03
    postKontr3int2procBrakBlock3double0,04
    postKontr4int2procBrakBlock4double0,06
    stTestBlock1double12kolStendKontrIzdint2
    stTestBlock2double23timeKontrIzddouble26
    stTestBlock3double32procBrakIzddouble0,05
    stTestBlock4double28stKontrIzddouble74
    kolPunSborkiint2verBlock1double0,9999
    timeSborkidouble22verBlock2double0,999999
    stSborkidouble67
    verBlockNum1double0,25timeZamBlock1double12
    verBlockNum2double0,25timeZamBlock2double15
    verBlockNum3double0,25timeZamBlock3double12
    verBlockNum4double0,25timeZamBlock4double21
    stZamBlock1double34kolPunPriemint2
    stZamBlock2double46timePriemIzddouble18
    stZamBlock3double38procBrakPriemdouble0,15
    stZamBlock4double54stPriemIzddouble53
    (рис 6.2) Размещение элементов Параметр для ввода исходных данных

    Вывод результатов моделирования

    Для вывода результатов моделирования используем элемент Переменная. Для удобства обозрения и анализа результатов моделирования разделим их на две группы. В первую группу включим данные о количестве подготовленных и забракованных блоков и изделий, во вторую группу - стоимостные показатели функционирования предприятия.

  • Создайте область просмотра Результаты для размещения элементов Переменная.
  • Перетащите элемент Область просмотра. В поле Имя: введите Результаты.
  • На странице Местоположение и размер панели Свойства введите в поля X: 0, Y: 700, Ширина: 700, Высота: 520.
  • Перетащите элемент Скруглённый прямоугольник. Оставьте имя, предложенное системой.
  • На странице Местоположение и размер панели Свойства введите в поля X: 10, Y: 750, Ширина: 690, Высота: 450.
  • Перетащите элемент text и на панели Свойства в поле Текст: введите Данные о количестве подготовленных и забракованных блоков и изделий.
  • Перетащите ещё элемент text и введите Стоимостные показатели функционирования предприятия.
  • Перетащите третий элемент text и в поле Текст: введите Показатели использования пунктов предприятия.
  • В Палитре выделите Основная. Перетащите элементы Переменная. Используйте копирование. Разместите их и дайте им имена так, как показано на Рис. 6.3. Тип всех переменных, используемых для вывода количества подготовленных и забракованных блоков и изделий на текущее модельное время - int. Тип переменных для вывода стоимостных показателей работы предприятия и показателей использования его пунктов - double.
  • Выровняйте элементы. Для этого нужно вначале выделить те элементы, которые вы хотите выровнять, а затем открыть правым щелчком мыши по выделенным фигурам контекстное меню и выбрать нужную команду выравнивания из подменю Выравнивание. Не поддерживается выравнивание элементов диаграмм состояний и диаграмм действий, потому что при выравнивании таких элементов может нарушиться логика модели.
  • (рис 6.3) Размещение элементов Переменная для вывода результатов моделирования

    Построение событийной части модели

    В событийную часть модели включим указанные ранее сегменты согласно представлению предприятия как системы массового обслуживания (см. Рис. 6.1).

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

    Создайте область просмотра для размещения сегментов событийной части модели на диаграмме класса Main.

  • В Палитре выделите Презентация. Перетащите элемент Область просмотра.
  • Перейдите на страницу Основные панели Свойства.
  • В поле Имя: введите Mainview.
  • На странице Местоположение и размер панели Свойства введите в поля X: 0, Y: 0, Ширина: 990, Высота: 390.
  • Перетащите элемент Скруглённый прямоугольник. В нём мы разместим все сегменты модели. Оставьте имя, предложенное системой.
  • На странице Местоположение и размер панели Свойства введите в поля X: 10, Y: 60, Ширина: 970, Высота: 320.
  • Перетащите элементы Скруглённый прямоугольник, укажите имена сегментов и свойства согласно Табл. 6.2. Шрифт, цвет и т.д. выберите по своему усмотрению.
  • СегментСвойства
    Х:Y:Ширина:Высота:
    Цеха2080140270
    Посты контроля блоков17080160270
    Пункты сборки изделий34080120270
    Стенды контроля изделий47080150270
    Пункты приёма изделий63080170270
    Склад готовых изделий 81080160130
    Склад бракованных изделий810220160130
    (рис 6.4) Размещение сегментов модели

    Имитация работы цехов предприятия

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

  • Из Библиотеки моделирования процессов перетащите объект sourсe на агент Main и разместите в скругленном прямоугольнике с именем Цеха.
  • Для записи и хранения параметров блоков и изделий в дополнительные поля заявок нужно создать нестандартный тип заявки. Создайте тип заявки Product.
  • В панели Проект щёлкните правой кнопкой мыши элемент модели верхнего уровня дерева и выберите в меню Создать Java класс.
  • Появится диалоговое окно Новый Java класс. В поле Имя: введите имя нового класса Product.
  • В поле Базовый класс: выберите из выпадающего списка Entity в качестве базового класса. Щёлкните кнопку Далее.
  • Появится вторая страница Мастера создания Java класса. Добавьте следующие поля Java класса, которые потребуются в дальнейшем при разработке модели:
    int numBlock;
    int sign1;
    int numBlBrak1;
    int numBlBrak2;
    int numBlBrak3;
    int numBlBrak4;
    double timeSbor;
    double cost;
  • Оставьте выбранными флажки Создать конструктор и Создать метод toString().
  • Щёлкните кнопку Готово. Появится редактор кода и автоматически созданный код вашего Java класса. Закройте код.
  • Щёлкните правой кнопкой мыши в панели Проект только что созданный Java класс и в контекстном меню выберите Преобразовать Java класс в тип агента.
  • Появится окно c параметрами типа заявок Product.
  • Выделите объект source. На странице Основные панели Свойства установите свойства согласно Табл. 6.3.
    Свойства объектов source
    ИмяСвойстваЗначения
    Цех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);
  • Щёлкните выделенный source правой кнопкой мыши и в контекстном меню выберите Копировать.
  • Вставьте в скругленный прямоугольник с именем Цеха еще три объекта source. Разместите их вертикально один под другим. Во время вставки имена объектов будут изменяться: цех2, цех3, цех4. Однако остальные свойства останутся такими же, как и у объекта цех1.
  • Поэтому, последовательно выделяя второй, третий и четвертый объекты source, скорректируйте их свойства также согласно Табл. 6.3.
  • Имитация работы постов контроля блоков

    Каждый цех имеет посты контроля блоков одного типа. Посты контроля предназначены для приема блоков из цеха, тестирования их, отправки исправных блоков на пункты сборки изделий, а брака - на склад забракованных блоков.

    Для размещения объектов, имитирующих работу постов контроля блоков, создайте новый тип агента Тест.

  • На панели Проект щёлкните Main правой кнопкой мыши и выберите из контекстного меню Создать/Тип агента. Откроется окно Шаг 1. Создание нового типа агента.
  • В поле Имя: задайте имя нового типа агента Тест.
  • Щёлкните кнопку Готово.
  • Создайте область просмотра на диаграмме агента Тест для размещения объектов сегмента Посты контроля блоков.

  • В Палитре выделите Презентация. Перетащите элемент Область просмотра.
  • Перейдите на страницу Основные панели Свойства.
  • В поле Имя: введите Kontr1.
  • На странице Местоположение и размер панели Свойства введите в поля X: 0, Y: 0, Ширина: 590, Высота: 390.
  • Согласно указанному ранее назначению постов контроля блоков нужно сделать так, чтобы четыре типа блоков передавались из цехов на свои посты контроля, четыре типа тестированных и исправных блоков поступали на пункты сборки изделий, а четыре типа забракованных блоков - на склад забракованных блоков.

    Создайте экземпляр нового типа агента Тест.

  • Из Палитры Основная перетащите элемент Порт и разместите сверху в крайнем левом ряду (Рис. 6.5). (рис 6.5) Размещение элементов Порт на экземпляре агента Тест
  • На странице Основные панели Свойства имя port замените именем Блок1.
  • Скопируйте элемент Порт с именем Блок1.
  • Вставьте три элемента Порт (см. Рис. 6.5). При вставке последовательно будут изменяться их имена: Блок2, Блок3, Блок4.
  • Из Палитры Основная перетащите элемент Порт и разместите сверху в среднем ряду (см. Рис. 6.5).
  • На странице Основные панели Свойства имя port замените именем БракБл1.
  • Скопируйте элемент Порт с именем БракБл1.
  • Вставьте три элемента Порт (см. Рис. 6.5). При вставке последовательно будут изменяться их имена: БракБл2, БракБл3, БракБл4.
  • Из Палитры Основная перетащите элемент Порт и разместите сверху в крайнем правом ряду (см. Рис. 6.5).
  • На странице Основные панели Свойства имя port замените именем ГотБл1.
  • Скопируйте элемент Порт с именем ГотБл1.
  • Вставьте три элемента Порт (см. Рис. 6.5). При вставке последовательно будут изменяться их имена: ГотБл2, ГотБл3, ГотБл4.
  • По мере размещения элементов Порт они автоматически будут объединяться прямоугольником (с пунктирными линиями) и появится надпись Значок.
  • Возвратитесь на диаграмму агента Main.
  • На панели Проект выделите Тест, перетащите на диаграмму Main экземпляр агента Тест, разместите и соедините так, как на Рис. 6.6. Порты БракБл1…БракБл4 соедините с объектом sink сегмента Склад бракованных блоков, предварительно разместив его там.
  • Экземпляр агента Тест создан. Возвратитесь на диаграмму агента Тест.
  • Для имитации работы постов контроля блоков одного типа (одного цеха) нам потребуются объекты:

  • queue - имитация склада изготовленных цехом блоков;
  • delay - имитация времени тестирования блока;
  • selectOutPut - имитация процесса браковки блоков.
  • (рис 6.6) Добавлен элемент диаграммы класса Test
  • Перетащите элемент Скруглённый прямоугольник. В нём мы разместим все объекты сегмента имитации работы постов контроля блоков. Оставьте имя, предложенное системой.
  • На странице Местоположение и размер панели Свойства введите в поля X: 10, Y: 50, Ширина: 570, Высота: 330.
  • Добавьте на диаграмму агента Тест объекты класса Queue.

  • Из Библиотеки моделирования процессов перетащите объект queue и разместите слева сверху, как на Рис. 6.7.
  • На странице Основные панели Свойства замените имя queue именем склИзгБл1 (склад изготовленных блоков цеха 1).
  • В поле Тип заявки: Entity замените Product.
  • Установите Вместимость: Максимальная.
  • Скопируйте объект с именем склИзгБл1.
  • Вставьте и поместите три объекта класса Queue (см. Рис. 6.7).
  • Добавьте на диаграмму класса Test объекты класса Delay.

  • Из библиотеки Enterprise Library перетащите один объект delay и поместите справа рядом с объектом склИзгБл1, как на Рис. 6.7. (рис 6.7) Размещение элементов на диаграмме агента Тест
  • На странице Основные панели Свойства замените имя delay именем постКонтрБлок1 (посты контроля блоков цеха 1).
  • В поле Тип заявки: Agent замените Product.
  • Введите в поле Время задержки: exponential (1/main.timeTestBlock1).
  • Введите main.postKontr1 в поле Вместимость:.
  • Действия При выходе:
    main.kolTestBlock1++;
    main.sumCostBlock1 += main.stTestBlock1;
    main.costTestBlock1 += main.stTestBlock1;
    main.costTestBlock += main.stTestBlock1;
    main.sumCostBlock += main.stTestBlock1;
  • Скопируйте объект с именем постКонтрБлок1.
  • Вставьте и разместите три объекта delay (см. Рис. 6.7).
  • Последовательно выделите и внесите правки в их свойства (Табл. 6.4). Внесите правки и в свойство Действия При выходе.
  • ИмяВремя задержкиВместимость
    постКонтрБлок2exponential(1/main.timeTestBlock2)main.postKontr2
    постКонтрБлок3exponential(1/main.timeTestBlock3)main.postKontr3
    постКонтрБлок4exponential(1/main.timeTestBlock4)main.postKontr4

    Добавьте на диаграмму Тест объекты класса SelectOutput.

  • Перетащите объект selectOutput и разместите справа рядом с объектом постКонтрБлок1, как на Рис. 6.7.
  • На странице Основные панели Свойства замените имя selectOutPut именем ОтбракБлок1 (отбраковка блоков цеха 1).
  • Установите свойства объекта согласно Табл. 6.5.
  • Скопируйте объект с именем ОтбракБлок1.
  • Вставьте три объекта класса SelectOutput (см. Рис. 6.7).
  • Последовательно выделите вставленные объекты и скорректируйте значения их свойств согласно Табл. 6.5.
  • Соедините входы и выходы объектов диаграммы агента Тест согласно Рис. 6.7.

    Код в свойство Действия При выходе (true) введен для учёта, например, для цеха 1:

  • gotBlock1 - количества готовых блоков цеха 1.
  • Код в свойстве Действия При выходе (false) обеспечивает счёт количества brakBlock1 забракованных блоков цеха 1.

    СвойстваЗначение
    ИмяОтбракБлок1
    Тип заявкиProduct
    Выход true выбираетсяЗаданной вероятностью
    Вероятность:1-main.procBrakBlock1
    Действия При выходе (true)main.gotBlock1++;
    main.brakBlock1++;
    Действия При выходе (false)entity.sign1 = 1;
    entity.numBlBrak1 = 1;
    ИмяОтбракБлок2
    Тип заявкиProduct
    Выход true выбираетсяЗаданной вероятностью
    Вероятность:1-main.procBrakBlock2
    Действия При выходе (true)main.gotBlock2++;
    main.brakBlock2++;
    Действия При выходе (false)entity.sign1 = 1;
    entity.numBlBrak2 = 1;
    ИмяОтбракБлок3
    Тип заявкиProduct
    Выход true выбираетсяЗаданной вероятностью
    Вероятность:1-main.procBrakBlock3
    Действия При выходе (true)main.gotBlock3++;
    main.brakBlock3++;
    Действия При выходе (false)entity.sign1 = 1;
    entity.numBlBrak3 = 1;
    ИмяОтбракБлок4
    Тип заявкиProduct
    Выход true выбираетсяЗаданной вероятностью
    Вероятность:1-main.procBrakBlock4
    Действия При выходе (true)main.gotBlock4++;
    main.brakBlock4++;
    Действия При выходе (false)entity.sign1 = 1;
    entity.numBlBrak4 = 1;

    В поле entity.sign1 записывается 1 - признак брака на постах контроля, а также единица записывается в поле entity.numBlock1 … entity.numBlock4. Это нужно для раздельного счёта забракованных блоков.

    Перейдите на агента Main.

    Имитация работы пунктов сборки изделий

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

    Для размещения объектов имитации работы пунктов сборки изделий создайте новый тип агента Сборка.

  • На панели Проект щёлкните Main правой кнопкой мыши и выберите из контекстного меню Создать/Тип агента.
  • Откроется окно Шаг 1. Создание нового типа агента.
  • В поле Имя: задайте имя Сборка.
  • Щёлкните кнопку Готово.
  • Создайте область просмотра на диаграмме агента Сборка для размещения объектов сегмента Пункты сборки изделий.

  • В Палитре выделите Презентация. Перетащите элемент Область просмотра.
  • Перейдите на страницу Основные панели Свойства.
  • В поле Имя: введите Sbor.
  • На странице Местоположение и размер панели Свойства введите в поля X: 0, Y: 0, Ширина: 820, Высота: 550.
  • Перетащите элемент Скруглённый прямоугольник. В нём мы разместим все элементы сегмента. Оставьте имя, предложенное системой.
  • На странице Местоположение и размер панели Свойства введите в поля X: 10, Y: 60, Ширина: 800, Высота: 480.
  • Согласно назначению пунктов сборки изделий для связи их с другими сегментами модели необходимо иметь:

  • четыре порта для приёма готовых блоков с постов контроля;
  • порт - для отправки собранных изделий на стенды контроля;
  • порт для приёма бракованных изделий с целью определения и замены в них забракованных блоков;
  • порт - для отправки забракованных блоков после их замены на склад забракованных блоков.
  • Из Палитры Основная перетащите элемент Порт и разместите сверху в крайнем левом ряду (Рис. 6.8).
  • На странице Основные панели Свойства имя port замените именем ГотБлок1.
  • Скопируйте элемент Порт с именем ГотБлок1.
  • Вставьте три элемента Порт (см. Рис. 6.8). При вставке последовательно будут изменяться их имена: ГотБлок2, ГотБлок3, ГотБлок4.
  • Из Палитры Основная перетащите еще три элемента Порт, разместите их и дайте имена как на Рис. 6.8.
  • Вернитесь на диаграмму агента Main.
  • На панели Проект выделите Сборка, перетащите на диаграмму агента Main экземпляр сборка, разместите и соедините так, как на Рис. 6.9. Порт БракБл соедините с объектом sink сегмента Склад бракованных блоков.
  • Экземпляр агента Сборка создан. Возвратитесь на диаграмму агента Сборка.
  • Для реализации сегмента имитации работы пунктов сборки изделий нам потребуются объекты, но прежде мы рассмотрим вариант построения этого сегмента.

    (рис 6.8) Размещение элементов Порт на диагрпмме агента Сборка (рис 6.9) Добавлен экземпляр агента Сборка

    Сборка изделия начинается тогда, когда будут готовы четыре блока (по одному каждого из четырех типов). Полагаем, что время готовности блоков различное. Значит, нужно использовать такие объекты AnyLogic, которые предназначены для синхронизации движения заявок (блоков). Объекты класса Match предназначены именно для синхронизации движения двух заявок.

    После готовности четырех блоков для дальнейщей имитации процесса сборки нужно эти четыре заявки объединить в одну, и интерпретировать её как изделие. В AnyLogic имеются объекты некоторых классов, которые позволяют осуществить нужное нам объединение. Применим объекты класса Combine, позволяющие из двух заявок получить одну.

    Процесс объединения будет происходить по мере готовности блоков, значит, на пункте сборки будет создаваться очередь, для имитации которой нужно использовать объект queue.

    Для имитации непосредственно процесса сборки следует взять объект delay, а для разделения потока изделий на собранные первично и на изделия с заменными блоками после браковки - объект selectOutPut.

    Реализуйте часть сегмента имитации работы пунктов сборки.

  • Перетащите элемент Прямоугольник. Оставьте имя, предложенное системой.
  • На странице Местоположение и размер панели Свойства введите в поля X: 320, Y: 80, Ширина: 340, Высота: 230.
  • Из Библиотеки моделирования процессов перетащите четыре объекта match и три объекта combine. Расположите и соедините их так, как на Рис. 6.10.
  • Перетащите объекты queue, delay, selectOutPut, разместите, соедините и дайте им имена также согласно Рис. 6.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 (см. Табл. 6.3).

    Изделия после элемента пунктСборки разделяются на два потока: собранные изделия первично (entity.sign1=0) и изделия с заменёнными блоками (entity.sign1=2).

    (рис 6.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++;}

    Продолжим построение сегмента имитации работы пунктов сборки изделий (Рис. 6.11).

    (рис 6.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 $$\neq$$ 0, то имеется забракованное изделие с блоком 2.

    Для дальнейшей реализации процесса замены блока нужно объединить две заявки - имитирующую забракованное изделие и имитирующую блок для замены - в одну заявку. Для объединения двух заявок в одну воспользуйтесь уже известными вам объектами combine. Выходы объекта selectOutput5 соединить с входами delay, а выход каждого из них - с первыми входами объектов combine.

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

    Как уже отмечалось ранее, изделия после пунктов сборки разделяются на два потока.

    Собранные первично изделия с выхода true объекта selectOutPut направляются на стенды контроля, поэтому этот выход нужно соединить с портом СобрИзд.

    Изделие с заменённым блоком нужно вновь направить на стенды контроля. В тоже время его нужно учесть, как забракованный блок и отправить на склад забракованных блоков. Значит, необходимо из одной заявки сделать две. Для этого используйте объект split. Один выход этого объекта соедините с портом БракБл, а другой - с портом СобрИзд.

    Выполните изложенные рекомендации практически. Перетащите четыре объекта класса SelectOutPut (или перетащите один объект, а остальные три скопируйте), один объект класса SelectOutPut5, четыре объекта классов Queue и Combine, один объект класса Split и четыре простых переменных. Разместите, дайте им имена и соедините так, как на Рис. 6.11.

    Поочередно выделите новые объекты и установите их свойства согласно Табл. 6.7.

    СвойстваЗначение
    selectOutPut … selectOutPut3
    ИмяГотБлок1
    Выход true выбираетсяПри выполнении условия
    УсловиеБракИздБл1 == 0
    ИмяГотБлок2
    Выход true выбираетсяПри выполнении условия
    УсловиеБракИздБл2 == 0
    ИмяГотБлок3
    Выход true выбираетсяПри выполнении условия
    УсловиеБракИздБл3 == 0
    ИмяГотБлок4
    Выход true выбираетсяПри выполнении условия
    УсловиеБракИздБл4 == 0
    selectOutput5
    ИмяБракИзделия
    ИспользоватьУсловия
    Условие 0entity.numBlBrak1 == 1
    Условие 1entity.numBlBrak2 == 1
    Условие 2entity.numBlBrak3 == 1
    Условие 3entity.numBlBrak4 == 1
    match
    ИмясинхрБлок_1_2
    Типы заявок: Вход1, Вход2:Product, Product
    Условие соответствияtrue
    Максимальная вместимость 1Установить флажок
    Максимальная вместимость 2Установить флажок
    ИмясинхрБлок_3_4
    Типы заявок: Вход1, Вход2:Product, Product
    Условие соответствияtrue
    Максимальная вместимость 1Установить флажок
    Максимальная вместимость 2Установить флажок
    ИмясинхрБлок_1_3
    Типы заявок: Вход1, Вход2:Product, Product
    Условие соответствияtrue
    Максимальная вместимость 1Установить флажок
    Максимальная вместимость 2Установить флажок
    ИмясинхрБлок_2_4
    Типы заявок: Вход1, Вход2:Product, Product
    Условие соответствияtrue
    Максимальная вместимость 1Установить флажок
    Максимальная вместимость 2Установить флажок
    combine
    ИмяиздБлок1
    Типы заявок: Вход1, Вход2, ВыходProduct, Product, Product
    Действие при входе 1if (entity.numBlBrak1 == 1)
    БрИздБл1 ++;
    Объединенная заявкаentity1
    Действия При выходеif (entity.numBlBrak1 == 1)
    БрИздБл1 --;
    entity.cost += main.stZamBlock1;
    entity.timeSbor =
    exponential(1/main.
    timeZamBlock1);
    ИмяиздБлок2
    Типы заявок: Вход1, Вход2, ВыходProduct, Product, Product
    Действие при входе 1 if (entity.numBlBrak2 == 1)
    БрИздБл2 ++;
    Объединенная заявкаentity1
    Действия При выходеif (entity.numBlBrak2 == 1)
    БрИздБл2 --;
    entity.cost += main.stZamBlock2;
    entity.timeSbor =
    exponential(1/main.
    timeZamBlock2);
    ИмяиздБлок3
    Типы заявок: Вход1, Вход2, ВыходProduct, Product, Product
    Действие при входе 1if (entity.numBlBrak3 == 1)
    БрИздБл3 ++;
    Объединенная заявкаentity1
    Действия При выходеif (entity.numBlBrak3 == 1)
    БрИздБл3 --;
    entity.cost += main.stZamBlock3;
    entity.timeSbor =
    exponential(1/main.
    timeZamBlock3);
    ИмяиздБлок4
    Типы заявок: Вход1, Вход2, ВыходProduct, Product, Product
    Действие при входе 1if (entity.numBlBrak4 == 1)
    БрИздБл4 ++;
    Объединенная заявкаentity1
    Действия При выходеif (entity.numBlBrak4 == 1)
    БрИздБл4 --;
    entity.cost += main.stZamBlock4;
    entity.timeSbor =
    exponential(1/main.
    timeZamBlock4);
    split
    Типы заявок: Product, Product
    Количество копий1
    Новая заявка (копия)Product
    Действия При выходе копииentity.sign1 = 0;
    entity.cost = original.cost;

    Имитация работы стендов контроля изделий

    Стенды контроля изделий предназначены для приёма первично собранных изделий и изделий после замены забракованных блоков, непосредственно процесса контроля изделий, отправки прошедших контроль изделий на пункты приёма, забракованных изделий - на пункты сборки, а также для приёма забракованных изделий с пунктов приёма изделий.

    На стендах контроля изделий, вследствие недостатка ресурсов, будет создаваться очередь, для имитации которой используйте объект queue.

    Для имитации непосредственно процесса контроля изделий, то есть затрат времени на его проведение, используйте объект delay.

    По результатам контроля некоторые изделия будут признаны браком. Для отбраковки изделий нужно применить объект selectOutput.

  • Перетащите объекты queue, delay и selectOutput на прямоугольник с именем Стенды контроля изделий диаграммы Main.
  • Разместите и соедините их согласно Рис. 6.12.
  • Выделите объект queue и установите на странице Основные панели Свойства:
  • Имя: очерСтенКонтр
  • Тип заявки: Product
  • Максимальная вместимость Установите флажок
  • Выделите объект delay и установите его свойства:
  • Тип заявки: Product
  • Тип Определённое время
  • Время задержки exponential( 1/timeKontrIzd )
  • Вместимость kolStendKontr
  • Действия При выходе:
    testSobrIzd++;
    entity.cost += stKontrIzd;
    entity.numBlBrak1 = 0;
    entity.numBlBrak2 = 0;
    entity.numBlBrak3 = 0;
    entity.numBlBrak4 = 0;
  • Замечание. Объект delay2 с нулевым временем задержки. Если его не включить, объект БракИзделия на диаграмме агента Сборка работать согласно замыслу разработчика не будет. (рис 6.12) Диаграмма агента Main с элементами всех сегментов
  • Выделите объект 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.

  • Перетащите объекты queue, delay и selectOutput на прямоугольник с Пункты приема изделий диаграммы класса Main.
  • Разместите и соедините их согласно Рис. 6.12.
  • Выделите объект queue и установите на странице Основные панели Свойства:
  • Имя: очерПрием
  • Тип заявки: Product
  • Максимальная вместимость Установите флажок
  • Выделите объект delay и установите его свойства:
  • Тип заявки: Product
  • Тип Определённое время
  • Время задержки exponential( 1/timePriemIzd )
  • Вместимость kolPunPriem
  • Действия При выходе
    kolPriemIzd++;
    costPriemkiIzd += stPriemIzd;
    entity.cost += stPriemIzd;
  • Выделите объект 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 на текущее модельное время.

    Имитация склада бракованных блоков

    Ранее (см. п. 6.2.4.2) для имитации склада бракованных блоков было рекомендовано использовать один объект sink.

    Предположим, что требуется вести раздельный учёт забракованных блоков на постах контроля цехов и забракованных на стендах контроля и пунктах приёма изделий. Для разделения потока брака дополнительному полю entity.sign1 присваивались признаки 1 или 2.

  • Перетащите объекты selectOutput и sink на прямоугольник с именем Склад бракованных блоков диаграммы агента Main.
  • Разместите и соедините их согласно Рис. 6.12.
  • Поочередно выделите объекты имитации склада бракованных блоков, начиная с объекта selectOutput, и установите свойства согласно Табл. 6.8.

    Коды в свойстве Действия При выходе: обоих объектов sink одинаковые. Они предназначены для счёта:

  • стоимости costzbrakBlock забракованных блоков не по типам, а в целом всех блоков;
  • количества забракованных блоков по типам allBrakBlock1… allBrakBlock4.
  • Из палитры Картинки перетащите на сегменты имитации складов готовых изделий и бракованных блоков картинки Склад.
  • СвойстваЗначение
    selectOutput
    Тип заявки:Product
    Выход true выбираетсяПри выполнении условия
    Условие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, щелчком на которых будет производиться переход к той или иной области просмотра. Сделайте так, чтобы из любой области можно было переходить в любую другую область.

    Для этого разместите на каждой области просмотра элементы презентации, показанные на Рис. 6.13.

    (рис 6.13) Элементы презентации для переключения

    Начните с области просмотра Mainview.

  • В Палитре выделите Презентация. Перетащите элемент text на область просмотра Mainview, разместите и введите в поле Текст: Предприятие (Рис. 6.13). На панели Свойства установите в поле Цвет: black, выберите выравнивание текста и шрифт.
  • Перетащите второй элемент text, разместите и введите в поле Текст: Посты контроля блоков. На панели Свойства установите в поле Цвет: blue, выберите выравнивание текста и шрифт. Раскройте Специфические и в поле Действие по щелчку: введите код: тест.Kontr1.navigateTo(); Замечание. При выборе цветов нужно исходить из того, чтобы различались по цвету текст открытой области просмотра и тексты закрытых областей просмотра.
  • Перетащите третий элемент text, разместите и введите в поле Текст: Пункты сборки изделий. Раскройте Специфические. В поле Действие по щелчку: введите: сборка.Sbor.navigateTo();
  • Перетащите четвертый элемент text. Разместите и введите в поле Текст: Исходные данные. В поле Действие по щелчку: на странице Специфические введите: Данные.navigateTo();
  • Перетащите пятый элемент text, разместите и введите в поле Текст: Результаты моделирования. На панели Свойства выделите Специфические и в поле Действие по щелчку: введите: Результаты.navigateTo();
  • Таким образом, с области просмотра Mainview можно будет переходить на любую из четырех областей просмотра. При этом элемент презентации открытой области высвечивается черным цветом, а остальные элементы презентации - голубым цветом.

  • Скопируйте элементы презентации согласно Рис. 6.13. Шрифт, цвет и его размеры установите по своему усмотрению.
  • Последовательно переходите на остальные области просмотра, вставьте скопированные элементы презентации и внесите правки в их свойства согласно Табл. 6.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 по обнаружению ошибок. Если вы всё выполнили корректно, то получите результаты, показанные на Рис. 6.14.

    Замечание. При каждом запуске модели результаты будут повторяться, если используются только распределения и случайные функции из AnyLogic. Например, если вместо функции uniform(1) использовать функцию random(), которая является функцией Java, результаты моделирования воспроизводиться не будут. (рис 6.14) Результаты моделирования согласно постановке задачи

    Интерпретация результатов моделирования

    Мы провели эксперименты с моделями, выполнив в GPSS World 1000 прогонов, а в AnyLogic увеличив модельное время в 1000 раз. При этом начальное значение генераторов случайных чисел установили 82874.

    Эксперименты проводились при времени работы предприятия 40 часов (2400 единиц модельного времени).

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

    Расшифруем некоторые составные части идентификаторов:

  • ПК1…ПК4 - пункты контроля блоков 1…4 соответственно;
  • ПС - пункты сборки изделий;
  • СВК - стенды выходного контроля изделий;
  • ПП - пункт приёмки изделий.
  • Сравнительная оценка, напоминаем, также проводилась между результатами, полученными в GPSS World и AnyLogic 7. Она свидетельствует о том, что результаты моделирования, полученные в различных средах, адекватны.

    Различие мало, например, для коэффициента увеличения стоимости изделия оно составляет 0,004…0,005. Коэффициенты увеличения стоимости изделий, полученные в AnyLogic 7 и AnyLogic 6, практически во всех экспериментах совпадают.

    Коэффициенты использования различных подразделений предприятия по производству изделий также отличаются на тысячные доли 0,003…0,007 или они одинаковые. Например, наибольшее отличие коэффициента использования ПК3 (коэфИспПК3) составляет 0,007 в первом эксперименте. Во втором и третьем экспериментах он равен 1. Увеличение числа ПК3 в четвёртом эксперименте уменьшает коэфИспПК3, но при этом коэффициент использования пунктов сборки (коэфИспПС) равен 1. Следовательно необходимо увеличить число пунктов сборки для увеличения производства изделий.

    В целях уменьшения затрат на производство изделий целесообразно уменьшить число ПК1, поскольку они загружены примерно на треть (0,315…0,398) в первых трёх экспериментах и на две третьих (0,598) в последнем четвёртом эксперименте. Также можно уменьшить число ПК4.

    Показатели функционирования предприятия
    ПоказателиGPSS WorldAnyLogic6AnyLogic7
    1) Согласно постановке задачи
    колГотИзд121,628122,337121,721
    $$\Delta_{11} = \left | 121,628-121,721 \right | = 0,093$$
    стоимГотИзд744107515174763
    минСтоимГотИзд707877120070841
    $$\Delta_{12} = \left | 70787-70841 \right | = 54$$
    стоимБракБл309931223079
    коэфУвелСтоимИзд1,0951,0991,099
    $$\Delta_{13} = \left | 1,095-1,099 \right | = 0,004$$
    времяИзгИзд19,73219,61819,717
    коэфИспПК10,3150,3160,315
    коэфИспПК20,7260,7280,729
    коэфИспПК30,6960,6990,703
    коэфИспПК40,4720,4740,475
    коэфИспПС0,5810,5860,583
    коэфИспСВК0,5450,5480,545
    коэфИспПП0,5390,5390,536
    2) aveTimeShop1=15, aveTimeShop2=10, aveTimeShop3=10, aveTimeShop4=15
    колГотИзд147,909147,954148,039
    $$\Delta_{21} = \left | 147,909-148,039 \right | = 0,130$$
    стоимГотИзд904879090290941
    минСтоимГотИзд860838610986158
    $$\Delta_{22} = \left | 86083-86158 \right | = 75$$
    стоимБракБл384838243844
    коэфУвелСтоимИзд1,0961,11,1
    $$\Delta_{23} = \left | 1,096-1,100 \right | = 0,004$$
    времяИзгИзд16,22616,22116,212
    коэфИспПК10,3980,40,401
    коэфИспПК20,80,8040,801
    коэфИспПК3111
    коэфИспПК40,5660,5630,566
    коэфИспПС0,7050,7050,704
    коэфИспСВК0,660,6620,665
    коэфИспПП0,6540,6540,655
    3) aveTimeShop4=10
    колГотИзд153,743154,327154,004
    $$\Delta_{31} = \left | 153,743-154,004 \right | = 0,261$$
    стоимГотИзд940509481594614
    минСтоимГотИзд894788981889630
    $$\Delta_{32} = \left | 89478-89630 \right | = 152$$
    стоимБракБл441244504432
    коэфУвелСтоимИзд1,11,1051,105
    $$\Delta_{33} = \left | 1,100-1,105 \right | = 0,005$$
    времяИзгИзд15,6115,55115,584
    коэфИспПК10,3980,3990,398
    коэфИспПК20,80,7970,803
    коэфИспПК3111
    коэфИспПК40,850,8520,851
    коэфИспПС0,7330,7370,737
    коэфИспСВК0,6910,6910,688
    коэфИспПП0,6780,6810,682
    4) aveTimeShop1=10, postKontr3=3
    колГотИзд209,234209,086209,596
    $$\Delta_{41} = \left | 209,234-209,596 \right | = 0,362$$
    стоимГотИзд127880128328128659
    минСтоимГотИзд121774121688121984
    $$\Delta_{42} = \left | 121744-121984 \right | = 240$$
    стоимБракБл495248484880
    коэфУвелСтоимИзд1,0911,0941,095
    $$\Delta_{43} = \left | 1,091-1,095 \right | = 0,004$$
    времяИзгИзд11,4711,47811,451
    коэфИспПК10,60,5990,598
    коэфИспПК20,7990,8010,799
    коэфИспПК30,7010,70,698
    коэфИспПК40,8450,8530,847
    коэфИспПС111
    коэфИспСВК0,9360,9360,937
    коэфИспПП0,9230,9230,927
    Страницы:

    Модель в GPSS World

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

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

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

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

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

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

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

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

    $$n_1=4; T_1=19; T_2=11; T_3=15; T_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; T_{11}=12; T_{12}=16; T_{13}=21; T_{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_с=22; С_{сб}=67; n_3=2; T_{п}=26; C_k=74; q_2=0,05;$$ $$m=1; P_{k1}=1,0; P_{бл1}=0,52; P_{бл2}=0,52; P_{бл3}=0,52; P_{бл4}=0,52;$$ $$T_{зам1}=12; T_{зам2}=15; T_{зам3}=12; T_{зам4}=21;$$ $$C_{зам1}=34; C_{зам2}=46; C_{зам3}=38; C_{зам4}=54;$$ $$n_4=2; T_{пр}=18; C_{п}=53; q_{4}=0,15.$$

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

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

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

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

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

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

    Предприятие при изготовлении блоков и сборки из них изделий может быть представлено как многофазная многоканальная разомкнутая система массового обслуживания с ожиданием, так как оно имеет все ее элементы (Рис. 6.1):

  • поток изготовленных цехами блоков;
  • очереди блоков на посты контроля и пункты сборки;
  • очереди изделий на стенды контроля и пункт приемки;
  • многоканальные устройства обслуживания (посты контроля, стенды выходного контроля, пункты сборки, пункты приёмки);
  • потоки забракованных блоков;
  • выходные потоки готовых изделий.
  • (рис 6.1) Предприятие как система массового обслуживания

    Для имитации МКУ следует использовать блоки ENTER и LEAVE.

    Для исходных данных в программе модели возьмем те же идентификаторы, что и в постановке задачи, но для предотвращения случаев совпадения с зарезервированными символами GPSS World добавим символ подчеркивания.

    Например, q11_, n1_. Сделаем это для отличия от зарезервированных символов GPSS World: q - системный числовой атрибут, означающий очередь, n - используется в качестве ссылки при определении количества транзактов, вошедших в какой-либо блок программы. Добавление символа подчеркивания предотвратит ошибку, которая в противном случае будет выявлена на этапе создания объекта "Процесс моделирования". Другие идентификаторы будем вводить по мере уяснения задачи, а также в ходе разработки программы модели.

    Для моделирования необходимо привести в соответствие время протекания реального процесса изготовления блоков и сборки изделий на предприятии и в модели. Это осуществляется введением масштабного коэффициента, например, если для условий рассматриваемой задачи его взять равным 1, а в реальном процессе измерять время в минутах, то 1 мин будет соответствовать 1 ед. мод. вр. Тогда время моделирования VrMod = 60 # 40 = 2400 ед. мод. вр. Временные параметры изготовления и контроля блоков, сборки, контроля и приёмки изделий даны в минутах, поэтому при выбранном масштабном коэффициенте 1 они не изменятся.

    В модели, как процесса, протекающего в СМО (см. Рис. 6.1), необходимо иметь:

  • задание исходных данных;
  • сегмент имитации работы цехов без постов контроля;
  • сегмент имитации работы постов контроля блоков;
  • сегмент имитации сборки изделий;
  • сегмент имитации работы стендов выходного контроля;
  • сегмент имитации работы приемки;
  • сегмент задания времени моделирования и расчета результатов моделирования.
  • Для ввода исходных данных целесообразно использовать команды EQU и FUNCTION. Вторая команда позволит сократить число строк в программе за счёт ввода одномерного массива данных двумя строками.

    Программа модели

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

    Это подобие может быть также усилено разработчиком за счет продуманного на этапе разработки разделения исследуемого объекта на элементы, на процессы, протекающие в них, а модели - на сегменты.

    Однако возможно и другое. В данном примере можно было бы иметь сегменты имитации работы цехов по их количеству, т. е. четыре сегмента. С целью придания универсальности в модели имеется один сегмент имитации работы цехов. При увеличении (уменьшении) количества цехов необходимо только изменить значение переменной пользователя TipBl - число типов блоков (по числу цехов).

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

    Объединение сделано также в интересах универсальности модели. Предположим, количество цехов увеличилось. Нужно было бы добавлять сегменты имитации работы цехов и постов контроля, т. е. количество блоков в модели увеличилось бы. В предлагаемом варианте сегмент имитации функционирования постов контроля блоков остаётся неизменным. Необходимо только командами STORAGE задать ёмкости добавляемых пунктов контроля, заменить их имена номерами и добавить данные: среднее время контроля блоков, доля браков и стоимость контроля блоков в функции TKontr, BrBl и CProv соответственно.

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

    Для розыгрыша выхода в брак блоков и изделий используется блок TRANSFER в статистическом режиме.

    Обратите внимание, что в сегменте имитации сборки изделий блок TEST используется в режиме, который рекомендуется избегать вследствие того, что проверяемое условие может не выполниться. Однако здесь этого не должно быть, так как в противном случае будут отсутствовать готовые блоки для сборки изделий. По мере готовности блоков условие обязательно выполняется и блоки - транзакты направляются на сборку. Первые три транзакта уничтожаются, а четвертый транзакт имитирует собранное из четырех блоков изделие. Он направляется для проверки работоспособности на пункт приема изделий.

    Замечание. Не путайте блоки изделий с блоками GPSS World в программе модели.

    В программе использование МКУ и списков пользователя демонстрируется применением номеров МКУ вместо их имен. Этот метод дает возможность иметь в модели один сегмент имитации работы постов контроля блоков вместо подобного сегмента для каждого цеха, т. е. сократить число блоков в модели.

    Обратите внимание, что в программе присвоение номеров именам МКУ указывается в самом начале и только потом, не обязательно следом, определение МКУ командой STORAGE. Если вы построите программу так, что поменяете порядок: вначале определение МКУ командой STORAGE, а потом - присвоение командой EQU номеров именам МКУ, то на этапе выполнения программы модели возникнет ошибка: "Обращение к несуществующей памяти". На этапе создания объекта "Процесс моделирования" ошибка изменения этого порядка не обнаруживается.

    Ниже приводится программа модели.

    ; Модель функционирования предприятия
    ; Замена имен МКУ номерами
    Kontr1	EQU	1
    Kontr2	EQU	2
    Kontr3	EQU	3
    Kontr4	EQU	4
    ; Задание исходных данных
    TShop	FUNCTION	P1,D4	; Средние интервалы времени изготовления блоков
    1,19/2,11/3,15/4,18
    CKom	FUNCTION	P1,D4	; Стоимости комплектующих блоков
    1,35/2,32/3,43/4,48
    CIzg	FUNCTION	P1,D4	; Стоимости изготовления блоков
    1,35/2,27/3,36/4,37
    TKont	FUNCTION	P1,D4	; Среднее время контроля на постах
    1,12/2,16/3,21/4,17
    BrBl	FUNCTION	P1,D4	; Доли брака блоков на постах контроля
    1,.02/2,.03/3,.04/4,.06
    CProv	FUNCTION	P1,D4	; Стоимости контроля блоков
    1,12/2,23/3,32/4,28
    TZam	FUNCTION	P1,D4	; Среднее время замены блоков
    1,12/2,15/3,12/4,21
    CZam	FUNCTION	P1,D4	; Стоимости замены блоков
    1,34/2,46/3,38/4,54
    VerBl	FUNCTION	RN339,D2 ; Вероятности брака одного или двух блоков в собранном изделии
    .0,2/1,1
    VerBlNum	FUNCTION	RN339,D4; Вероятность брака блока номер ...
    .25,1/.5,2/.75,3/1,4
    CCb	EQU	67	; Стоимость сборки изделия 
    q2_	EQU	0.05	; Доля забракованных изделий на пункте выходного контроля
    q4_	EQU	0.15	; Доля забракованных изделий приемкой
    TipBl	EQU	4	; Мах количество типов блоков
    VrMod 	EQU	2400	; Время моделирования, 1 ед. мод. вр. = 1 мин
    Tc_	EQU	22	; Среднее время сборки изделия
    Tp	EQU	26	; Среднее время проверки изделия
    Tpr	EQU	18	; Среднее время приема изделия
    CPr	EQU	53	; Стоимость приёмки изделия
    CK	EQU	74	; Стоимость контроля изделия
    ;Задание количества пунктов сборки и постов контроля
    Sb	STORAGE	2	; Количество пунктов сборки
    Kontr1	STORAGE	2	; Количество постов n11
    Kontr2	STORAGE	2	; Количество постов n12
    Kontr3	STORAGE	2	; Количество постов n13
    Kontr4	STORAGE	2	; Количество постов n14
    KSb	STORAGE	3	; Количество стендов выходного контроля
    KPr	STORAGE	2	; Количество пунктов приёмки
    
    ; Описание арифметических выражений
    KolIzd	VARIABLE	(N$Term7/X$prog)	; Количество готовых изделий
    KolGotBl	VARIABLE	((CH*1/X$Prog))	; Количество готовых блоков всех типов, оставшихся на складах
    KolBrBl	VARIABLE	((X*1/X$Prog))	; Количество забракованных блоков всех типов
    TIzd	VARIABLE	(AC1/X$Prog)/X$KolIzd; Среднее время подготовки одного изделия
    ;Сегмент имитации работы цехов без постов контроля
    	GENERATE	,,,TipBl ; Число транзактов по числу типов блоков
    	SAVEVALUE	Tip+,1	; Пронумеровать типы блоков
    	ASSIGN	1,X$Tip	; Код в параметре транзакта - тип блока
    Met20	ADVANCE	(Exponential(27,0,FN$TShop)); Розыгрыш интервала поступления блока
    	SPLIT	1,Met20	; Расщепление на два 
    	ASSIGN	2,(Exponential(339,0,FN$TKont))	
    ; Розыгрыш времени контроля и запись в Р2
    	ASSIGN	9,FN$BrBl ; Запись в Р9 доли брака блоков после постов контроля
    	ASSIGN	Sbor,(Exponential(339,0,Tc_)); Запись времени сборки изделия
    	ASSIGN	Cost,(FN$CKom+FN$CIzg); Стоимость комплектующих+стоимость изготовления в P$Cost
    ; Сегмент имитации работы постов контроля блоков
    Met1	QUEUE	P1 ; Встать в очередь с номером в Р1
    	ENTER	P1	; Занять МКУ с номером в Р1
    	DEPART	P1 ; Покинуть очередь с номером в Р1
    	ADVANCE 	P2;Имитация контроля с временем в Р2
    	LEAVE	P1	; Освободить МКУ с номером в Р1
    	ASSIGN	Cost+,FN$CProv ; Добавить стоимость проверки
    	TRANSFER	P9,,Met14 ; Отправить брак блоков к Met14
    	LINK 	P1,FIFO ; Готовые блоки на склад с номером в Р1
    ; Сегмент имитации сборки изделий
    	GENERATE	,,,1
    Met3 	ASSIGN	1,TipBl	; Подготовка к циклу
    	SAVEVALUE	Cost,0	; Обнуление ячейки Cost
    Met13 	TEST NE	CH*1,0	; Есть ли на складе готовые блоки?
    	TEST NE	P1,1,Met4  ; Если последний блок, то на Met4
    	UNLINK	P1,Met32,1 ; Нет
    	TRANSFER	,Met31
    Met4 	UNLINK	P1,Met22,1 ; Отправить блоки на сборку
    Met31	LOOP	1,Met13
    	TRANSFER	,Met3	; Вернуться для проверки наличия всех типов блоков для следующего изделия
    Met32	SAVEVALUE	Cost+,P$Cost	; Суммарная стоимость 2-го, 3-го и 4-го блоков
    	SAVEVALUE	Cost1,X$Cost	; Суммарная стоимость 2-го, 3-го и 4-го блоков
    	TRANSFER	,Term5	; Отправить 
    Met22	ASSIGN	Cost+,X$Cost1	; Суммарная стоимость 1-го...4-го блоков
    	SAVEVALUE	Cost2,P$Cost	; Суммарная стоимость 1-го...4-го блоков
    	ASSIGN	Zam,0
    Met5 	QUEUE	Sbor	; Занять очередь на пункты сборки
    	ENTER	Sb	; Занять пункт сборки
    	DEPART	Sbor	; Освободить очередь на пункт сборки
    	ADVANCE	P$Sbor	; Имитация сборки
    	LEAVE	Sb	; Освободить пункт сборки
    	TEST E	P$Zam,0,Met9
    	ASSIGN	Cost+,CCb	; Добавить стоимость сборки изделия	
    ; Сегмент имитации работы стендов выходного контроля
    Met9 	QUEUE	 KSbor	; Занять очередь на стенд выходного контроля
    	ENTER	KSb		; Занять стенд выходного контроля
    	DEPART	KSbor	; Освободить очередь на стенд выходного контроля
    	ADVANCE	(Exponential(339,0,Tp)); Имитация работы стенда выходного контроля
    	LEAVE	KSb	; Освободить стенд выходного контроля
    	ASSIGN	Cost+,CK	; Добавить стоимость контроля изделия
    	TRANSFER	q2_,Met34,Met33	; Направить в приёмку, а брак-на подготовку к замене
    ; Подготовка к замене блоков
    Met33	ASSIGN	KolBl,FN$VerBl	; Розыгрыш количества забракованных в изделии блоков
    	ASSIGN	Sbor,0	; Обнуление параметра Sbor
    Met21	ASSIGN	1,FN$VerBlNum	; Розыгрыш номера блока
    	TEST NE	CH*1,0	; Есть на складе готовые блоки?
    	UNLINK	P1,Met14,1	; Да. Тогда блок на замену
    	ASSIGN	Sbor,(Exponential(339,0,FN$TZam)); Розыгрыш времени замены блоков
    	ASSIGN	Zam,1
    	ASSIGN	Cost+,FN$CZam	; Добавить стоимость замены блока
    	TRANSFER	,Met5	; Отправить на пункты сборки
    ; Сегмент имитации работы приёмки
    Met34	QUEUE	Opr	; Занять очередь в приёмку
    	ENTER	KPr	; Занять приемку
    	DEPART	Opr	; Освободить очередь в приёмку
    	ADVANCE	(Exponential(339,0,Tpr)) ; Имитация работы приемки
    	LEAVE	KPr	; Освободить приемку
    	ASSIGN	Cost+,CPr	; Добавить стоимость приёмки изделия
    	TRANSFER	q4_,,Met9 ; Готовые изделия - на склад
    ; Сегмент счёта блоков и изделий
    	SAVEVALUE	CostIzd+,P$Cost
    Term7	TERMINATE 	; Количество готовых изделий за все прогоны модели
    Met14 	SAVEVALUE P1+,1  ; Количество забракованных блоков по типам за все прогоны модели
    	ASSIGN	5,(TipBl+P1)
    	SAVEVALUE	*5+,P$Cost; Стоимости забракованных блоков по типам за все прогоны модели
    	SAVEVALUE	CostBr+,P$Cost	; Стоимость забракованных блоков за все прогоны модели
    	TERMINATE
    Term5	TERMINATE		
    ; Задание времени моделирования и расчет результатов
    	GENERATE	VrMod ; Задание времени моделирования
    	TEST L	X$prog,TG1,Met10	; Если X$Prog< содержимого счетчика завершений, то
    	SAVEVALUE Prog,TG1 ; записать в X$Prog содержимое счетчика завершений
    Met10	TEST E	TG1,1,Met12 ; Если содержимое счетчика завершений равно 1, то расчет результатов
    	SAVEVALUE KolIzd,V$KolIzd  ; Количество готовых изделий
    	ASSIGN	1,0 	; Подготовка к циклу
    Met15	ASSIGN	1+,1	; Начало цикла по числу типов блоков
    	SAVEVALUE (10+P1),V$KolGotBl	; Количество готовых блоков всех типов, оставшихся на складах
    	SAVEVALUE P1,V$KolBrBl	; Количество забракованных блоков всех типов
    	ASSIGN	2,(TipBl+P1)
    	SAVEVALUE	P2,((X*2)/X$Prog); Стоимости забракованных блоков по типам
    	SAVEVALUE	StBl+,(FN$CKom+FN$CIzg+FN$CProv); Стоимость блоков в собранном изделии
    	TEST GE	P1,TipBl,Met15	; Все ли типы блоков?
    	SAVEVALUE	Cmin,(X$StBl+CCb+CK+CPr) ; Минимальная стоимость одного изделия
    	SAVEVALUE	MinCGotIzd,(X$Cmin#X$KolIzd) ; Минимальная стоимость всех готовых изделий
    	SAVEVALUE	CostIzd,(X$CostIzd/X$Prog)	; Стоимость готовых изделий
    	SAVEVALUE TIzd,V$TIzd	; Среднее время подготовки одного изделия
    	SAVEVALUE	CostBr,(X$CostBr/X$Prog)	; Стоимость забракованных блоков
    	SAVEVALUE	Koef,((X$CostIzd+X$CostBr)/X$MinCGotIzd); Коэффициент увеличения стоимости одного изделия
    Met12	TERMINATE 1
    	START	 1000

    Отладьте модель. Выполните моделирование. В отчете, фрагмент которого приведен ниже,

    SAVEVALUE    RETRY       VALUE
     KOLIZD        0        121.628
     TIZD          0         19.732
     COSTBR        0       3091.787
     COSTIZD       0      74410.065
     CMIN          0        582.000
     MINCGOTIZD    0      70787.496
     KOEF          0          1.095

    найдите, что за 40 часов подготовлено 121,628 изделия, а среднее время подготовки одного изделия $$\approx 20$$ мин (19,732 мин). Минимальная стоимость готовых изделий 70787,496, стоимость брака 3091,787, стоимость готовых изделий 74410,065. Минимальная стоимость одного изделия - 582. Коэффициент увеличения стоимости одного изделия составил 1,095.

    Другие эксперименты будут проведены в п. 6.3. Данные этого же эксперимента внесены в Табл. 6.10.

    Модель функционирования предприятия в AnyLogic

    Формализованное описание

    Модель, исходя из структуры предприятия (см. Рис. 6.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 - стоимость одного изделия;
  • времяИзгИзд - среднее время изготовления одного изделия;
  • коэфУвелСтоимИзд - коэффициент увеличения себестоимости изделия.
  • Минимальная стоимость изделий будет тогда, когда не будет бракованных блоков и изделий. В терминах постановки задачи это условие имеет вид:

    $$C_{min}=C_{minизд} \cdot N_{изд},$$

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

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

    $$C_{изд}=\sum_{i=1}^{n1}(C_{кi}+C_{изгi}+C_{прi})+C_{сб}+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 колГотИзд; C_{max}= стоимГотИзд + стоимБракБл.$$ $$K_c = коэфУвелСтоимИзд = \frac{C_{max}}{C_{min}}.$$ Замечание. В приведеных для расчета результатов моделирования выражениях мы не учитывали те блоки, которые были произведены, не забракованы, но не были использованы для сборки изделий.

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

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

  • Выполните команду Файл/Создать/Модель на панели инструментов.
  • В поле Имя модели диалогового окна Новая модель введите Предприятие.
  • Выберите каталог, в котором будут сохранены файлы модели. Щёлкните кнопку Готово.
  • В Палитре выделите Презентация. Создайте область просмотра Данные для размещения элементов исходных данных.
  • Перетащите элемент Область просмотра. В поле Имя: введите Данные.
  • На странице Местоположение и размер панели Свойства введите в поля X: 0, Y: 1700, Ширина: 760, Высота: 330.
  • Перетащите элемент Прямоугольник. Оставьте имя, предложенное системой.
  • На странице Местоположение и размер панели Свойства введите в поля X: 10, Y: 1750, Ширина: 740, Высота: 270.
  • Перетащите элемент text и на странице Основные панели Свойства в поле Текст: вместо слова text введите Исходные данные.
  • В Палитре выделите Основная. Перетащите элементы Параметр на элемент с именем Исходные данные. Разместите их так, как показано на Рис. 6.2. Значения свойств установите согласно Табл. 6.1.
  • Элементы и их свойства
    ПараметрПараметр
    ИмяТипЗначение по умолчаниюИмяТипЗначение по умолчанию
    aveTimeShop1double19stKomplBlock1double35
    aveTimeShop2double11stKomplBlock2double32
    aveTimeShop3double15stKomplBlock3double43
    aveTimeShop4double18stKomplBlock4double48
    stIzgBlock1double35timeTestBlock1double12
    stIzgBlock2double27timeTestBlock2double16
    stIzgBlock3double36timeTestBlock3double21
    stIzgBlock4double37timeTestBlock4double17
    postKontr1int2procBrakBlock1double0,02
    postKontr2int2procBrakBlock2double0,03
    postKontr3int2procBrakBlock3double0,04
    postKontr4int2procBrakBlock4double0,06
    stTestBlock1double12kolStendKontrIzdint2
    stTestBlock2double23timeKontrIzddouble26
    stTestBlock3double32procBrakIzddouble0,05
    stTestBlock4double28stKontrIzddouble74
    kolPunSborkiint2verBlock1double0,9999
    timeSborkidouble22verBlock2double0,999999
    stSborkidouble67
    verBlockNum1double0,25timeZamBlock1double12
    verBlockNum2double0,25timeZamBlock2double15
    verBlockNum3double0,25timeZamBlock3double12
    verBlockNum4double0,25timeZamBlock4double21
    stZamBlock1double34kolPunPriemint2
    stZamBlock2double46timePriemIzddouble18
    stZamBlock3double38procBrakPriemdouble0,15
    stZamBlock4double54stPriemIzddouble53
    (рис 6.2) Размещение элементов Параметр для ввода исходных данных

    Вывод результатов моделирования

    Для вывода результатов моделирования используем элемент Переменная. Для удобства обозрения и анализа результатов моделирования разделим их на две группы. В первую группу включим данные о количестве подготовленных и забракованных блоков и изделий, во вторую группу - стоимостные показатели функционирования предприятия.

  • Создайте область просмотра Результаты для размещения элементов Переменная.
  • Перетащите элемент Область просмотра. В поле Имя: введите Результаты.
  • На странице Местоположение и размер панели Свойства введите в поля X: 0, Y: 700, Ширина: 700, Высота: 520.
  • Перетащите элемент Скруглённый прямоугольник. Оставьте имя, предложенное системой.
  • На странице Местоположение и размер панели Свойства введите в поля X: 10, Y: 750, Ширина: 690, Высота: 450.
  • Перетащите элемент text и на панели Свойства в поле Текст: введите Данные о количестве подготовленных и забракованных блоков и изделий.
  • Перетащите ещё элемент text и введите Стоимостные показатели функционирования предприятия.
  • Перетащите третий элемент text и в поле Текст: введите Показатели использования пунктов предприятия.
  • В Палитре выделите Основная. Перетащите элементы Переменная. Используйте копирование. Разместите их и дайте им имена так, как показано на Рис. 6.3. Тип всех переменных, используемых для вывода количества подготовленных и забракованных блоков и изделий на текущее модельное время - int. Тип переменных для вывода стоимостных показателей работы предприятия и показателей использования его пунктов - double.
  • Выровняйте элементы. Для этого нужно вначале выделить те элементы, которые вы хотите выровнять, а затем открыть правым щелчком мыши по выделенным фигурам контекстное меню и выбрать нужную команду выравнивания из подменю Выравнивание. Не поддерживается выравнивание элементов диаграмм состояний и диаграмм действий, потому что при выравнивании таких элементов может нарушиться логика модели.
  • (рис 6.3) Размещение элементов Переменная для вывода результатов моделирования

    Построение событийной части модели

    В событийную часть модели включим указанные ранее сегменты согласно представлению предприятия как системы массового обслуживания (см. Рис. 6.1).

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

    Создайте область просмотра для размещения сегментов событийной части модели на диаграмме класса Main.

  • В Палитре выделите Презентация. Перетащите элемент Область просмотра.
  • Перейдите на страницу Основные панели Свойства.
  • В поле Имя: введите Mainview.
  • На странице Местоположение и размер панели Свойства введите в поля X: 0, Y: 0, Ширина: 990, Высота: 390.
  • Перетащите элемент Скруглённый прямоугольник. В нём мы разместим все сегменты модели. Оставьте имя, предложенное системой.
  • На странице Местоположение и размер панели Свойства введите в поля X: 10, Y: 60, Ширина: 970, Высота: 320.
  • Перетащите элементы Скруглённый прямоугольник, укажите имена сегментов и свойства согласно Табл. 6.2. Шрифт, цвет и т.д. выберите по своему усмотрению.
  • СегментСвойства
    Х:Y:Ширина:Высота:
    Цеха2080140270
    Посты контроля блоков17080160270
    Пункты сборки изделий34080120270
    Стенды контроля изделий47080150270
    Пункты приёма изделий63080170270
    Склад готовых изделий 81080160130
    Склад бракованных изделий810220160130
    (рис 6.4) Размещение сегментов модели

    Имитация работы цехов предприятия

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

  • Из Библиотеки моделирования процессов перетащите объект sourсe на агент Main и разместите в скругленном прямоугольнике с именем Цеха.
  • Для записи и хранения параметров блоков и изделий в дополнительные поля заявок нужно создать нестандартный тип заявки. Создайте тип заявки Product.
  • В панели Проект щёлкните правой кнопкой мыши элемент модели верхнего уровня дерева и выберите в меню Создать Java класс.
  • Появится диалоговое окно Новый Java класс. В поле Имя: введите имя нового класса Product.
  • В поле Базовый класс: выберите из выпадающего списка Entity в качестве базового класса. Щёлкните кнопку Далее.
  • Появится вторая страница Мастера создания Java класса. Добавьте следующие поля Java класса, которые потребуются в дальнейшем при разработке модели:
    int numBlock;
    int sign1;
    int numBlBrak1;
    int numBlBrak2;
    int numBlBrak3;
    int numBlBrak4;
    double timeSbor;
    double cost;
  • Оставьте выбранными флажки Создать конструктор и Создать метод toString().
  • Щёлкните кнопку Готово. Появится редактор кода и автоматически созданный код вашего Java класса. Закройте код.
  • Щёлкните правой кнопкой мыши в панели Проект только что созданный Java класс и в контекстном меню выберите Преобразовать Java класс в тип агента.
  • Появится окно c параметрами типа заявок Product.
  • Выделите объект source. На странице Основные панели Свойства установите свойства согласно Табл. 6.3.
    Свойства объектов source
    ИмяСвойстваЗначения
    Цех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);
  • Щёлкните выделенный source правой кнопкой мыши и в контекстном меню выберите Копировать.
  • Вставьте в скругленный прямоугольник с именем Цеха еще три объекта source. Разместите их вертикально один под другим. Во время вставки имена объектов будут изменяться: цех2, цех3, цех4. Однако остальные свойства останутся такими же, как и у объекта цех1.
  • Поэтому, последовательно выделяя второй, третий и четвертый объекты source, скорректируйте их свойства также согласно Табл. 6.3.
  • Имитация работы постов контроля блоков

    Каждый цех имеет посты контроля блоков одного типа. Посты контроля предназначены для приема блоков из цеха, тестирования их, отправки исправных блоков на пункты сборки изделий, а брака - на склад забракованных блоков.

    Для размещения объектов, имитирующих работу постов контроля блоков, создайте новый тип агента Тест.

  • На панели Проект щёлкните Main правой кнопкой мыши и выберите из контекстного меню Создать/Тип агента. Откроется окно Шаг 1. Создание нового типа агента.
  • В поле Имя: задайте имя нового типа агента Тест.
  • Щёлкните кнопку Готово.
  • Создайте область просмотра на диаграмме агента Тест для размещения объектов сегмента Посты контроля блоков.

  • В Палитре выделите Презентация. Перетащите элемент Область просмотра.
  • Перейдите на страницу Основные панели Свойства.
  • В поле Имя: введите Kontr1.
  • На странице Местоположение и размер панели Свойства введите в поля X: 0, Y: 0, Ширина: 590, Высота: 390.
  • Согласно указанному ранее назначению постов контроля блоков нужно сделать так, чтобы четыре типа блоков передавались из цехов на свои посты контроля, четыре типа тестированных и исправных блоков поступали на пункты сборки изделий, а четыре типа забракованных блоков - на склад забракованных блоков.

    Создайте экземпляр нового типа агента Тест.

  • Из Палитры Основная перетащите элемент Порт и разместите сверху в крайнем левом ряду (Рис. 6.5). (рис 6.5) Размещение элементов Порт на экземпляре агента Тест
  • На странице Основные панели Свойства имя port замените именем Блок1.
  • Скопируйте элемент Порт с именем Блок1.
  • Вставьте три элемента Порт (см. Рис. 6.5). При вставке последовательно будут изменяться их имена: Блок2, Блок3, Блок4.
  • Из Палитры Основная перетащите элемент Порт и разместите сверху в среднем ряду (см. Рис. 6.5).
  • На странице Основные панели Свойства имя port замените именем БракБл1.
  • Скопируйте элемент Порт с именем БракБл1.
  • Вставьте три элемента Порт (см. Рис. 6.5). При вставке последовательно будут изменяться их имена: БракБл2, БракБл3, БракБл4.
  • Из Палитры Основная перетащите элемент Порт и разместите сверху в крайнем правом ряду (см. Рис. 6.5).
  • На странице Основные панели Свойства имя port замените именем ГотБл1.
  • Скопируйте элемент Порт с именем ГотБл1.
  • Вставьте три элемента Порт (см. Рис. 6.5). При вставке последовательно будут изменяться их имена: ГотБл2, ГотБл3, ГотБл4.
  • По мере размещения элементов Порт они автоматически будут объединяться прямоугольником (с пунктирными линиями) и появится надпись Значок.
  • Возвратитесь на диаграмму агента Main.
  • На панели Проект выделите Тест, перетащите на диаграмму Main экземпляр агента Тест, разместите и соедините так, как на Рис. 6.6. Порты БракБл1…БракБл4 соедините с объектом sink сегмента Склад бракованных блоков, предварительно разместив его там.
  • Экземпляр агента Тест создан. Возвратитесь на диаграмму агента Тест.
  • Для имитации работы постов контроля блоков одного типа (одного цеха) нам потребуются объекты:

  • queue - имитация склада изготовленных цехом блоков;
  • delay - имитация времени тестирования блока;
  • selectOutPut - имитация процесса браковки блоков.
  • (рис 6.6) Добавлен элемент диаграммы класса Test
  • Перетащите элемент Скруглённый прямоугольник. В нём мы разместим все объекты сегмента имитации работы постов контроля блоков. Оставьте имя, предложенное системой.
  • На странице Местоположение и размер панели Свойства введите в поля X: 10, Y: 50, Ширина: 570, Высота: 330.
  • Добавьте на диаграмму агента Тест объекты класса Queue.

  • Из Библиотеки моделирования процессов перетащите объект queue и разместите слева сверху, как на Рис. 6.7.
  • На странице Основные панели Свойства замените имя queue именем склИзгБл1 (склад изготовленных блоков цеха 1).
  • В поле Тип заявки: Entity замените Product.
  • Установите Вместимость: Максимальная.
  • Скопируйте объект с именем склИзгБл1.
  • Вставьте и поместите три объекта класса Queue (см. Рис. 6.7).
  • Добавьте на диаграмму класса Test объекты класса Delay.

  • Из библиотеки Enterprise Library перетащите один объект delay и поместите справа рядом с объектом склИзгБл1, как на Рис. 6.7. (рис 6.7) Размещение элементов на диаграмме агента Тест
  • На странице Основные панели Свойства замените имя delay именем постКонтрБлок1 (посты контроля блоков цеха 1).
  • В поле Тип заявки: Agent замените Product.
  • Введите в поле Время задержки: exponential (1/main.timeTestBlock1).
  • Введите main.postKontr1 в поле Вместимость:.
  • Действия При выходе:
    main.kolTestBlock1++;
    main.sumCostBlock1 += main.stTestBlock1;
    main.costTestBlock1 += main.stTestBlock1;
    main.costTestBlock += main.stTestBlock1;
    main.sumCostBlock += main.stTestBlock1;
  • Скопируйте объект с именем постКонтрБлок1.
  • Вставьте и разместите три объекта delay (см. Рис. 6.7).
  • Последовательно выделите и внесите правки в их свойства (Табл. 6.4). Внесите правки и в свойство Действия При выходе.
  • ИмяВремя задержкиВместимость
    постКонтрБлок2exponential(1/main.timeTestBlock2)main.postKontr2
    постКонтрБлок3exponential(1/main.timeTestBlock3)main.postKontr3
    постКонтрБлок4exponential(1/main.timeTestBlock4)main.postKontr4

    Добавьте на диаграмму Тест объекты класса SelectOutput.

  • Перетащите объект selectOutput и разместите справа рядом с объектом постКонтрБлок1, как на Рис. 6.7.
  • На странице Основные панели Свойства замените имя selectOutPut именем ОтбракБлок1 (отбраковка блоков цеха 1).
  • Установите свойства объекта согласно Табл. 6.5.
  • Скопируйте объект с именем ОтбракБлок1.
  • Вставьте три объекта класса SelectOutput (см. Рис. 6.7).
  • Последовательно выделите вставленные объекты и скорректируйте значения их свойств согласно Табл. 6.5.
  • Соедините входы и выходы объектов диаграммы агента Тест согласно Рис. 6.7.

    Код в свойство Действия При выходе (true) введен для учёта, например, для цеха 1:

  • gotBlock1 - количества готовых блоков цеха 1.
  • Код в свойстве Действия При выходе (false) обеспечивает счёт количества brakBlock1 забракованных блоков цеха 1.

    СвойстваЗначение
    ИмяОтбракБлок1
    Тип заявкиProduct
    Выход true выбираетсяЗаданной вероятностью
    Вероятность:1-main.procBrakBlock1
    Действия При выходе (true)main.gotBlock1++;
    main.brakBlock1++;
    Действия При выходе (false)entity.sign1 = 1;
    entity.numBlBrak1 = 1;
    ИмяОтбракБлок2
    Тип заявкиProduct
    Выход true выбираетсяЗаданной вероятностью
    Вероятность:1-main.procBrakBlock2
    Действия При выходе (true)main.gotBlock2++;
    main.brakBlock2++;
    Действия При выходе (false)entity.sign1 = 1;
    entity.numBlBrak2 = 1;
    ИмяОтбракБлок3
    Тип заявкиProduct
    Выход true выбираетсяЗаданной вероятностью
    Вероятность:1-main.procBrakBlock3
    Действия При выходе (true)main.gotBlock3++;
    main.brakBlock3++;
    Действия При выходе (false)entity.sign1 = 1;
    entity.numBlBrak3 = 1;
    ИмяОтбракБлок4
    Тип заявкиProduct
    Выход true выбираетсяЗаданной вероятностью
    Вероятность:1-main.procBrakBlock4
    Действия При выходе (true)main.gotBlock4++;
    main.brakBlock4++;
    Действия При выходе (false)entity.sign1 = 1;
    entity.numBlBrak4 = 1;

    В поле entity.sign1 записывается 1 - признак брака на постах контроля, а также единица записывается в поле entity.numBlock1 … entity.numBlock4. Это нужно для раздельного счёта забракованных блоков.

    Перейдите на агента Main.

    Имитация работы пунктов сборки изделий

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

    Для размещения объектов имитации работы пунктов сборки изделий создайте новый тип агента Сборка.

  • На панели Проект щёлкните Main правой кнопкой мыши и выберите из контекстного меню Создать/Тип агента.
  • Откроется окно Шаг 1. Создание нового типа агента.
  • В поле Имя: задайте имя Сборка.
  • Щёлкните кнопку Готово.
  • Создайте область просмотра на диаграмме агента Сборка для размещения объектов сегмента Пункты сборки изделий.

  • В Палитре выделите Презентация. Перетащите элемент Область просмотра.
  • Перейдите на страницу Основные панели Свойства.
  • В поле Имя: введите Sbor.
  • На странице Местоположение и размер панели Свойства введите в поля X: 0, Y: 0, Ширина: 820, Высота: 550.
  • Перетащите элемент Скруглённый прямоугольник. В нём мы разместим все элементы сегмента. Оставьте имя, предложенное системой.
  • На странице Местоположение и размер панели Свойства введите в поля X: 10, Y: 60, Ширина: 800, Высота: 480.
  • Согласно назначению пунктов сборки изделий для связи их с другими сегментами модели необходимо иметь:

  • четыре порта для приёма готовых блоков с постов контроля;
  • порт - для отправки собранных изделий на стенды контроля;
  • порт для приёма бракованных изделий с целью определения и замены в них забракованных блоков;
  • порт - для отправки забракованных блоков после их замены на склад забракованных блоков.
  • Из Палитры Основная перетащите элемент Порт и разместите сверху в крайнем левом ряду (Рис. 6.8).
  • На странице Основные панели Свойства имя port замените именем ГотБлок1.
  • Скопируйте элемент Порт с именем ГотБлок1.
  • Вставьте три элемента Порт (см. Рис. 6.8). При вставке последовательно будут изменяться их имена: ГотБлок2, ГотБлок3, ГотБлок4.
  • Из Палитры Основная перетащите еще три элемента Порт, разместите их и дайте имена как на Рис. 6.8.
  • Вернитесь на диаграмму агента Main.
  • На панели Проект выделите Сборка, перетащите на диаграмму агента Main экземпляр сборка, разместите и соедините так, как на Рис. 6.9. Порт БракБл соедините с объектом sink сегмента Склад бракованных блоков.
  • Экземпляр агента Сборка создан. Возвратитесь на диаграмму агента Сборка.
  • Для реализации сегмента имитации работы пунктов сборки изделий нам потребуются объекты, но прежде мы рассмотрим вариант построения этого сегмента.

    (рис 6.8) Размещение элементов Порт на диагрпмме агента Сборка (рис 6.9) Добавлен экземпляр агента Сборка

    Сборка изделия начинается тогда, когда будут готовы четыре блока (по одному каждого из четырех типов). Полагаем, что время готовности блоков различное. Значит, нужно использовать такие объекты AnyLogic, которые предназначены для синхронизации движения заявок (блоков). Объекты класса Match предназначены именно для синхронизации движения двух заявок.

    После готовности четырех блоков для дальнейщей имитации процесса сборки нужно эти четыре заявки объединить в одну, и интерпретировать её как изделие. В AnyLogic имеются объекты некоторых классов, которые позволяют осуществить нужное нам объединение. Применим объекты класса Combine, позволяющие из двух заявок получить одну.

    Процесс объединения будет происходить по мере готовности блоков, значит, на пункте сборки будет создаваться очередь, для имитации которой нужно использовать объект queue.

    Для имитации непосредственно процесса сборки следует взять объект delay, а для разделения потока изделий на собранные первично и на изделия с заменными блоками после браковки - объект selectOutPut.

    Реализуйте часть сегмента имитации работы пунктов сборки.

  • Перетащите элемент Прямоугольник. Оставьте имя, предложенное системой.
  • На странице Местоположение и размер панели Свойства введите в поля X: 320, Y: 80, Ширина: 340, Высота: 230.
  • Из Библиотеки моделирования процессов перетащите четыре объекта match и три объекта combine. Расположите и соедините их так, как на Рис. 6.10.
  • Перетащите объекты queue, delay, selectOutPut, разместите, соедините и дайте им имена также согласно Рис. 6.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 (см. Табл. 6.3).

    Изделия после элемента пунктСборки разделяются на два потока: собранные изделия первично (entity.sign1=0) и изделия с заменёнными блоками (entity.sign1=2).

    (рис 6.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++;}

    Продолжим построение сегмента имитации работы пунктов сборки изделий (Рис. 6.11).

    (рис 6.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 $$\neq$$ 0, то имеется забракованное изделие с блоком 2.

    Для дальнейшей реализации процесса замены блока нужно объединить две заявки - имитирующую забракованное изделие и имитирующую блок для замены - в одну заявку. Для объединения двух заявок в одну воспользуйтесь уже известными вам объектами combine. Выходы объекта selectOutput5 соединить с входами delay, а выход каждого из них - с первыми входами объектов combine.

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

    Как уже отмечалось ранее, изделия после пунктов сборки разделяются на два потока.

    Собранные первично изделия с выхода true объекта selectOutPut направляются на стенды контроля, поэтому этот выход нужно соединить с портом СобрИзд.

    Изделие с заменённым блоком нужно вновь направить на стенды контроля. В тоже время его нужно учесть, как забракованный блок и отправить на склад забракованных блоков. Значит, необходимо из одной заявки сделать две. Для этого используйте объект split. Один выход этого объекта соедините с портом БракБл, а другой - с портом СобрИзд.

    Выполните изложенные рекомендации практически. Перетащите четыре объекта класса SelectOutPut (или перетащите один объект, а остальные три скопируйте), один объект класса SelectOutPut5, четыре объекта классов Queue и Combine, один объект класса Split и четыре простых переменных. Разместите, дайте им имена и соедините так, как на Рис. 6.11.

    Поочередно выделите новые объекты и установите их свойства согласно Табл. 6.7.

    СвойстваЗначение
    selectOutPut … selectOutPut3
    ИмяГотБлок1
    Выход true выбираетсяПри выполнении условия
    УсловиеБракИздБл1 == 0
    ИмяГотБлок2
    Выход true выбираетсяПри выполнении условия
    УсловиеБракИздБл2 == 0
    ИмяГотБлок3
    Выход true выбираетсяПри выполнении условия
    УсловиеБракИздБл3 == 0
    ИмяГотБлок4
    Выход true выбираетсяПри выполнении условия
    УсловиеБракИздБл4 == 0
    selectOutput5
    ИмяБракИзделия
    ИспользоватьУсловия
    Условие 0entity.numBlBrak1 == 1
    Условие 1entity.numBlBrak2 == 1
    Условие 2entity.numBlBrak3 == 1
    Условие 3entity.numBlBrak4 == 1
    match
    ИмясинхрБлок_1_2
    Типы заявок: Вход1, Вход2:Product, Product
    Условие соответствияtrue
    Максимальная вместимость 1Установить флажок
    Максимальная вместимость 2Установить флажок
    ИмясинхрБлок_3_4
    Типы заявок: Вход1, Вход2:Product, Product
    Условие соответствияtrue
    Максимальная вместимость 1Установить флажок
    Максимальная вместимость 2Установить флажок
    ИмясинхрБлок_1_3
    Типы заявок: Вход1, Вход2:Product, Product
    Условие соответствияtrue
    Максимальная вместимость 1Установить флажок
    Максимальная вместимость 2Установить флажок
    ИмясинхрБлок_2_4
    Типы заявок: Вход1, Вход2:Product, Product
    Условие соответствияtrue
    Максимальная вместимость 1Установить флажок
    Максимальная вместимость 2Установить флажок
    combine
    ИмяиздБлок1
    Типы заявок: Вход1, Вход2, ВыходProduct, Product, Product
    Действие при входе 1if (entity.numBlBrak1 == 1)
    БрИздБл1 ++;
    Объединенная заявкаentity1
    Действия При выходеif (entity.numBlBrak1 == 1)
    БрИздБл1 --;
    entity.cost += main.stZamBlock1;
    entity.timeSbor =
    exponential(1/main.
    timeZamBlock1);
    ИмяиздБлок2
    Типы заявок: Вход1, Вход2, ВыходProduct, Product, Product
    Действие при входе 1 if (entity.numBlBrak2 == 1)
    БрИздБл2 ++;
    Объединенная заявкаentity1
    Действия При выходеif (entity.numBlBrak2 == 1)
    БрИздБл2 --;
    entity.cost += main.stZamBlock2;
    entity.timeSbor =
    exponential(1/main.
    timeZamBlock2);
    ИмяиздБлок3
    Типы заявок: Вход1, Вход2, ВыходProduct, Product, Product
    Действие при входе 1if (entity.numBlBrak3 == 1)
    БрИздБл3 ++;
    Объединенная заявкаentity1
    Действия При выходеif (entity.numBlBrak3 == 1)
    БрИздБл3 --;
    entity.cost += main.stZamBlock3;
    entity.timeSbor =
    exponential(1/main.
    timeZamBlock3);
    ИмяиздБлок4
    Типы заявок: Вход1, Вход2, ВыходProduct, Product, Product
    Действие при входе 1if (entity.numBlBrak4 == 1)
    БрИздБл4 ++;
    Объединенная заявкаentity1
    Действия При выходеif (entity.numBlBrak4 == 1)
    БрИздБл4 --;
    entity.cost += main.stZamBlock4;
    entity.timeSbor =
    exponential(1/main.
    timeZamBlock4);
    split
    Типы заявок: Product, Product
    Количество копий1
    Новая заявка (копия)Product
    Действия При выходе копииentity.sign1 = 0;
    entity.cost = original.cost;

    Имитация работы стендов контроля изделий

    Стенды контроля изделий предназначены для приёма первично собранных изделий и изделий после замены забракованных блоков, непосредственно процесса контроля изделий, отправки прошедших контроль изделий на пункты приёма, забракованных изделий - на пункты сборки, а также для приёма забракованных изделий с пунктов приёма изделий.

    На стендах контроля изделий, вследствие недостатка ресурсов, будет создаваться очередь, для имитации которой используйте объект queue.

    Для имитации непосредственно процесса контроля изделий, то есть затрат времени на его проведение, используйте объект delay.

    По результатам контроля некоторые изделия будут признаны браком. Для отбраковки изделий нужно применить объект selectOutput.

  • Перетащите объекты queue, delay и selectOutput на прямоугольник с именем Стенды контроля изделий диаграммы Main.
  • Разместите и соедините их согласно Рис. 6.12.
  • Выделите объект queue и установите на странице Основные панели Свойства:
  • Имя: очерСтенКонтр
  • Тип заявки: Product
  • Максимальная вместимость Установите флажок
  • Выделите объект delay и установите его свойства:
  • Тип заявки: Product
  • Тип Определённое время
  • Время задержки exponential( 1/timeKontrIzd )
  • Вместимость kolStendKontr
  • Действия При выходе:
    testSobrIzd++;
    entity.cost += stKontrIzd;
    entity.numBlBrak1 = 0;
    entity.numBlBrak2 = 0;
    entity.numBlBrak3 = 0;
    entity.numBlBrak4 = 0;
  • Замечание. Объект delay2 с нулевым временем задержки. Если его не включить, объект БракИзделия на диаграмме агента Сборка работать согласно замыслу разработчика не будет. (рис 6.12) Диаграмма агента Main с элементами всех сегментов
  • Выделите объект 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.

  • Перетащите объекты queue, delay и selectOutput на прямоугольник с Пункты приема изделий диаграммы класса Main.
  • Разместите и соедините их согласно Рис. 6.12.
  • Выделите объект queue и установите на странице Основные панели Свойства:
  • Имя: очерПрием
  • Тип заявки: Product
  • Максимальная вместимость Установите флажок
  • Выделите объект delay и установите его свойства:
  • Тип заявки: Product
  • Тип Определённое время
  • Время задержки exponential( 1/timePriemIzd )
  • Вместимость kolPunPriem
  • Действия При выходе
    kolPriemIzd++;
    costPriemkiIzd += stPriemIzd;
    entity.cost += stPriemIzd;
  • Выделите объект 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 на текущее модельное время.

    Имитация склада бракованных блоков

    Ранее (см. п. 6.2.4.2) для имитации склада бракованных блоков было рекомендовано использовать один объект sink.

    Предположим, что требуется вести раздельный учёт забракованных блоков на постах контроля цехов и забракованных на стендах контроля и пунктах приёма изделий. Для разделения потока брака дополнительному полю entity.sign1 присваивались признаки 1 или 2.

  • Перетащите объекты selectOutput и sink на прямоугольник с именем Склад бракованных блоков диаграммы агента Main.
  • Разместите и соедините их согласно Рис. 6.12.
  • Поочередно выделите объекты имитации склада бракованных блоков, начиная с объекта selectOutput, и установите свойства согласно Табл. 6.8.

    Коды в свойстве Действия При выходе: обоих объектов sink одинаковые. Они предназначены для счёта:

  • стоимости costzbrakBlock забракованных блоков не по типам, а в целом всех блоков;
  • количества забракованных блоков по типам allBrakBlock1… allBrakBlock4.
  • Из палитры Картинки перетащите на сегменты имитации складов готовых изделий и бракованных блоков картинки Склад.
  • СвойстваЗначение
    selectOutput
    Тип заявки:Product
    Выход true выбираетсяПри выполнении условия
    Условие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, щелчком на которых будет производиться переход к той или иной области просмотра. Сделайте так, чтобы из любой области можно было переходить в любую другую область.

    Для этого разместите на каждой области просмотра элементы презентации, показанные на Рис. 6.13.

    (рис 6.13) Элементы презентации для переключения

    Начните с области просмотра Mainview.

  • В Палитре выделите Презентация. Перетащите элемент text на область просмотра Mainview, разместите и введите в поле Текст: Предприятие (Рис. 6.13). На панели Свойства установите в поле Цвет: black, выберите выравнивание текста и шрифт.
  • Перетащите второй элемент text, разместите и введите в поле Текст: Посты контроля блоков. На панели Свойства установите в поле Цвет: blue, выберите выравнивание текста и шрифт. Раскройте Специфические и в поле Действие по щелчку: введите код: тест.Kontr1.navigateTo(); Замечание. При выборе цветов нужно исходить из того, чтобы различались по цвету текст открытой области просмотра и тексты закрытых областей просмотра.
  • Перетащите третий элемент text, разместите и введите в поле Текст: Пункты сборки изделий. Раскройте Специфические. В поле Действие по щелчку: введите: сборка.Sbor.navigateTo();
  • Перетащите четвертый элемент text. Разместите и введите в поле Текст: Исходные данные. В поле Действие по щелчку: на странице Специфические введите: Данные.navigateTo();
  • Перетащите пятый элемент text, разместите и введите в поле Текст: Результаты моделирования. На панели Свойства выделите Специфические и в поле Действие по щелчку: введите: Результаты.navigateTo();
  • Таким образом, с области просмотра Mainview можно будет переходить на любую из четырех областей просмотра. При этом элемент презентации открытой области высвечивается черным цветом, а остальные элементы презентации - голубым цветом.

  • Скопируйте элементы презентации согласно Рис. 6.13. Шрифт, цвет и его размеры установите по своему усмотрению.
  • Последовательно переходите на остальные области просмотра, вставьте скопированные элементы презентации и внесите правки в их свойства согласно Табл. 6.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 по обнаружению ошибок. Если вы всё выполнили корректно, то получите результаты, показанные на Рис. 6.14.

    Замечание. При каждом запуске модели результаты будут повторяться, если используются только распределения и случайные функции из AnyLogic. Например, если вместо функции uniform(1) использовать функцию random(), которая является функцией Java, результаты моделирования воспроизводиться не будут. (рис 6.14) Результаты моделирования согласно постановке задачи

    Интерпретация результатов моделирования

    Мы провели эксперименты с моделями, выполнив в GPSS World 1000 прогонов, а в AnyLogic увеличив модельное время в 1000 раз. При этом начальное значение генераторов случайных чисел установили 82874.

    Эксперименты проводились при времени работы предприятия 40 часов (2400 единиц модельного времени).

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

    Расшифруем некоторые составные части идентификаторов:

  • ПК1…ПК4 - пункты контроля блоков 1…4 соответственно;
  • ПС - пункты сборки изделий;
  • СВК - стенды выходного контроля изделий;
  • ПП - пункт приёмки изделий.
  • Сравнительная оценка, напоминаем, также проводилась между результатами, полученными в GPSS World и AnyLogic 7. Она свидетельствует о том, что результаты моделирования, полученные в различных средах, адекватны.

    Различие мало, например, для коэффициента увеличения стоимости изделия оно составляет 0,004…0,005. Коэффициенты увеличения стоимости изделий, полученные в AnyLogic 7 и AnyLogic 6, практически во всех экспериментах совпадают.

    Коэффициенты использования различных подразделений предприятия по производству изделий также отличаются на тысячные доли 0,003…0,007 или они одинаковые. Например, наибольшее отличие коэффициента использования ПК3 (коэфИспПК3) составляет 0,007 в первом эксперименте. Во втором и третьем экспериментах он равен 1. Увеличение числа ПК3 в четвёртом эксперименте уменьшает коэфИспПК3, но при этом коэффициент использования пунктов сборки (коэфИспПС) равен 1. Следовательно необходимо увеличить число пунктов сборки для увеличения производства изделий.

    В целях уменьшения затрат на производство изделий целесообразно уменьшить число ПК1, поскольку они загружены примерно на треть (0,315…0,398) в первых трёх экспериментах и на две третьих (0,598) в последнем четвёртом эксперименте. Также можно уменьшить число ПК4.

    Показатели функционирования предприятия
    ПоказателиGPSS WorldAnyLogic6AnyLogic7
    1) Согласно постановке задачи
    колГотИзд121,628122,337121,721
    $$\Delta_{11} = \left | 121,628-121,721 \right | = 0,093$$
    стоимГотИзд744107515174763
    минСтоимГотИзд707877120070841
    $$\Delta_{12} = \left | 70787-70841 \right | = 54$$
    стоимБракБл309931223079
    коэфУвелСтоимИзд1,0951,0991,099
    $$\Delta_{13} = \left | 1,095-1,099 \right | = 0,004$$
    времяИзгИзд19,73219,61819,717
    коэфИспПК10,3150,3160,315
    коэфИспПК20,7260,7280,729
    коэфИспПК30,6960,6990,703
    коэфИспПК40,4720,4740,475
    коэфИспПС0,5810,5860,583
    коэфИспСВК0,5450,5480,545
    коэфИспПП0,5390,5390,536
    2) aveTimeShop1=15, aveTimeShop2=10, aveTimeShop3=10, aveTimeShop4=15
    колГотИзд147,909147,954148,039
    $$\Delta_{21} = \left | 147,909-148,039 \right | = 0,130$$
    стоимГотИзд904879090290941
    минСтоимГотИзд860838610986158
    $$\Delta_{22} = \left | 86083-86158 \right | = 75$$
    стоимБракБл384838243844
    коэфУвелСтоимИзд1,0961,11,1
    $$\Delta_{23} = \left | 1,096-1,100 \right | = 0,004$$
    времяИзгИзд16,22616,22116,212
    коэфИспПК10,3980,40,401
    коэфИспПК20,80,8040,801
    коэфИспПК3111
    коэфИспПК40,5660,5630,566
    коэфИспПС0,7050,7050,704
    коэфИспСВК0,660,6620,665
    коэфИспПП0,6540,6540,655
    3) aveTimeShop4=10
    колГотИзд153,743154,327154,004
    $$\Delta_{31} = \left | 153,743-154,004 \right | = 0,261$$
    стоимГотИзд940509481594614
    минСтоимГотИзд894788981889630
    $$\Delta_{32} = \left | 89478-89630 \right | = 152$$
    стоимБракБл441244504432
    коэфУвелСтоимИзд1,11,1051,105
    $$\Delta_{33} = \left | 1,100-1,105 \right | = 0,005$$
    времяИзгИзд15,6115,55115,584
    коэфИспПК10,3980,3990,398
    коэфИспПК20,80,7970,803
    коэфИспПК3111
    коэфИспПК40,850,8520,851
    коэфИспПС0,7330,7370,737
    коэфИспСВК0,6910,6910,688
    коэфИспПП0,6780,6810,682
    4) aveTimeShop1=10, postKontr3=3
    колГотИзд209,234209,086209,596
    $$\Delta_{41} = \left | 209,234-209,596 \right | = 0,362$$
    стоимГотИзд127880128328128659
    минСтоимГотИзд121774121688121984
    $$\Delta_{42} = \left | 121744-121984 \right | = 240$$
    стоимБракБл495248484880
    коэфУвелСтоимИзд1,0911,0941,095
    $$\Delta_{43} = \left | 1,091-1,095 \right | = 0,004$$
    времяИзгИзд11,4711,47811,451
    коэфИспПК10,60,5990,598
    коэфИспПК20,7990,8010,799
    коэфИспПК30,7010,70,698
    коэфИспПК40,8450,8530,847
    коэфИспПС111
    коэфИспСВК0,9360,9360,937
    коэфИспПП0,9230,9230,927
    Вернуться к учебному плану