
2.2. Имитационное моделирование (gpss)
GPSS (англ. General Purpose Simulation System — общецелевая система моделирования) — язык программирования, используемый для имитационного моделирования различных систем, в основном систем массового обслуживания.
Программа моделирования на языке GPSS:
************************Исходные данные**************************************
*-------------Описание структуры-----------------------------------
Sklad STORAGE 800 ;Емкость склада: min=2хQхW_oper/Emk_jas= 2х1000x6/15=800 (ячеек под ящики и паллеты)
Nak0_zag STORAGE 1 ;Емкость входного порта склада(ячеек под ящики с заготовками)
Nak0_det STORAGE 1 ;Емкость выходного порта склада(ячеек под ящики с готовыми дет.)
Nak1 STORAGE 1 ;Емкость выходного(готовых деталей)накопителя РП1(ячеек под паллеты)
Nak2 STORAGE 2 ;
Nak3 STORAGE 2 ;
Nak4 STORAGE 5 ;
Nak5 STORAGE 2 ;
Nak6 STORAGE 2 ;
*-------------Показ-ли назн.-----------
T_mod EQU 240000 ;Т моделирования =Тф =4000 ч
t_Tr_min EQU 1.5 ;Минимально возможное вр.цикла(рейс в оду сторону)тележки:2t_пер+t_езды_min)]= 1,5 мин
t_Tr EQU 0.9 ;Ср.приращение вр.цикла тележки (t_езды_ср-t_езды_min )]= 2,4-1,5=0,9 мин.
t_Kran EQU 1 ;Вр.цикла КШ склада (забрать или выдать)t_скл= 1 мин
N_zajav EQU 4000 ;Кол. заявок-паллет от каждого источника-РП = N/Q_tr = 60000/15=4000
Q_tr EQU 15 ;Р-р тр.партии, может совпадать с емкостью тр.оснастки
Q_jas EQU 66 ;Р-р партии в пересчете на ящики (Q/Emk_jas=1000/15=66)
*t_Tel EQU 2.4 ;Вр.цикла тр.тележки: перегр+туда+там+обратно+перегр
*T_post EQU 74.3 ;Ср.периодичность пост.заявок:[(t_маш+t_уст)хQ_tr+(t_тр+t_скл)]+(t_тр+t_скл)]=[(0,71+0,2)15+(2+2)]+(2+2)]=21,65 мин
*T_post EQU 151.5 ;Ср.периодичность пост.заявок:(t_маш/Кмаш)хQ_tr=(0,71/0,363)15=29,3мин
*-------------Время машинное tмаш-------------------------
T_1 EQU 2.32 ;Вр.t_маш
T_2 EQU 1.52 ;
T_3 EQU 6 ;
T_4 EQU 6 ;
T_5 EQU 0.19 ;
T_6 EQU 1 ;пост ОТК
T_0 EQU 0.016 ;порт склада внешний: t_пер/Q_tr=0,25/15=0,016, всего 2х4000 ящиков (отдельно заполнение партии заготовок и отд.освобож.от партии дет.)
*-------------Показатели надежности РП основных операций-------------------------
t_otk2 EQU 6000 ;Вр.наработки на отказ РП2 по сумме маш.вр.(100 ч). Учитываем имитационно
*t_otk1 EQU 6000 ;Для этой и ост. РП пока не используем. Учтено расчетно в T_post(i)через Кз(i), включающего Крем(i)
t_rem2 EQU 300 ; вр. ремонта РП2 (5 ч)
*t_rem1 EQU 300
;-------------Подготовка расчетных ИД-------
T_post1 FVARIABLE ((T_1)#Q_tr)/0.5 ;Ср.вр.между поступлением заявок-палет = tмаш(i)xQ_тр/Кз(i) = 2,32x15/0,7=49 мин
T_post2 FVARIABLE ((T_2)#Q_tr)/0.8 ;1,52x15/0.8=28
T_post3 FVARIABLE ((T_3)#Q_tr)/0.7 ;6x15/0,64=140
T_post4 FVARIABLE ((T_4)#Q_tr)/0.64 ;6x15/0,64=140
T_post5 FVARIABLE ((T_5)#Q_tr)/0.3 ;0,19x15/0,3=9,5
T_post6 FVARIABLE ((T_6)#Q_tr)/0.28 ;0.5x15/0,28=44.64
*T_post0 FVARIABLE ((T_0)#Q_tr)/0.17 ;0,016x15/0,17=1.4,
;Тпост.ср =67,4
*-------------Начальное состояние--------------------------------------
INITIAL X$N_zajav0,0 ;Тек.кол.выполненных заявок (Qт,паллет,ящиков) РП0, в год.плане Max=4000
INITIAL X$N_zajav1,0 ;Max=8000 (1600-прием заг.+1600-выдача дет.)
INITIAL X$N_zajav2,0 ;Max=4000
INITIAL X$N_zajav3,0 ;Max=4000
INITIAL X$N_zajav4,0 ;Max=4000
INITIAL X$N_zajav5,0 ;Max=4000
INITIAL X$N_zajav6,0 ;Max=4000
INITIAL X$T_nar2,0 ;Сумм.вр.маш.работы РП2 после последнего отказа (текущая наработка)
INITIAL X$Tt_otk2,t_otk2 ;Вр.,через которое откажет РП2
*-------------Изм.базы генерации для опр.дисперсии результатов и з-на распред.---------
N_G EQU 1 ;начальный № всех генераторов
************************Сегмент остановки моделирования***********************************
*-------------Задание вр. моделирования----------------------------
GENERATE T_mod
*-------------Расчет производных результатов после остановки моделирования---
* SAVEVALUE K_ocer2,(SR$Nak3/1000) ;К-т простоя в очереди для источника-РП3 - дублирование отчета
*-------------Окончание моделирования----------------------------
TERMINATE 1
START 1
************************Сегмент основной - генерация заявок-паллет *************
*-----------------------РП0(порт склада внешний)---------------------
*-------------Сегмент потока партий (внешнее заполнение и изъятие из склада)-----------------------
GENERATE (Exponential(N_G,0,4000)),0,1,60,1 ;Tф*60/N*Q=4000*60/60000*1000=4000 мин,принимаем 4000, т.е.14 раз в день, загр. и выгр. партий за раз.
*SPLIT (Q_jas-1),Met0 ;Генерация кол.ящиков для данной партии, всего с родителем 15 ящиков
Met0 ENTER Nak0_zag
ADVANCE ((T_0)#Q_tr) ;Вр.перегрузки ящика в накопитель порта склада 0,01x15=0,15
QUEUE Ocer_TNS
SEIZE Kran
DEPART Ocer_TNS
ADVANCE t_Kran
LEAVE Nak0_zag
ENTER Sklad ;Поместить ящик с заг. в склад
RELEASE Kran
SAVEVALUE N_zajav0+,1
TEST NE X$N_zajav0,(N_zajav#2),Stop0
GATHER Q_jas
QUEUE Ocer_TNS
SEIZE Kran
DEPART Ocer_TNS
ADVANCE t_Kran
LEAVE Sklad ;Удалить ящик с готовыми дет.из склада
ENTER Nak0_det
RELEASE Kran
ADVANCE ((T_0)#Q_tr)
LEAVE Nak0_det ;
SAVEVALUE N_zajav0+,1
TEST NE X$N_zajav0,(N_zajav#2),Stop0
ASSEMBLE Q_jas
TERMINATE
Stop0 SAVEVALUE T_stop0,AC1
TERMINATE
*-----------------------РП1(ток)-------------------------------------
GENERATE ,,,4000,1
Metka1 ADVANCE (Exponential(N_G,0,V$T_post1))
ENTER Nak1
QUEUE Ocer_TNS
SEIZE Telegka
SEIZE Kran
DEPART Ocer_TNS
ADVANCE ((Exponential(N_G,t_Tr_min,t_Tr))#2)
ADVANCE (t_Kran#2)
LEAVE Nak1
RELEASE Telegka
RELEASE Kran
SAVEVALUE N_zajav1+,1
TEST NE X$N_zajav1,N_zajav,Stop1
*SPLIT 1,Metka1
TERMINATE
Stop1 SAVEVALUE T_stop1,AC1
TERMINATE
*-----------------------РП2(ток)-------------------------------------
GENERATE ,,,4000,1
Metka2 ADVANCE (Exponential(N_G,0,V$T_post2))
ENTER Nak2
QUEUE Ocer_TNS
SEIZE Telegka
SEIZE Kran
DEPART Ocer_TNS
ADVANCE ((Exponential(N_G,t_Tr_min,t_Tr))#2)
ADVANCE (t_Kran#2)
LEAVE Nak2
RELEASE Telegka
RELEASE Kran
SAVEVALUE N_zajav2+,1
TEST NE X$N_zajav2,N_zajav,Stop2
*SPLIT 1,Metka2
TERMINATE
Stop2 SAVEVALUE T_stop2,AC1
TERMINATE
*-----------------------РП3(зубонарез)- ЛИМИТИРУЮЩАЯ------------------------------------
GENERATE ,,,3999,1 ;Генерация кол.объектов, выставляющих заявки и приоритета
SAVEVALUE T_post3,V$T_post3 ;Перевод пер. в сохраняемую
ENTER Nak3
Metka3 ADVANCE (Exponential(N_G,0,V$T_post2)) ;Обработка на РП
*-------------Отказы---------------
SAVEVALUE T_nar3+,(T_3#Q_tr) ;Для учета фактора отказов
TEST GE X$T_nar3,X$Tt_otk3,Met3 ;Проверка: РП3 уже должена отказать?
SEIZE Remontnik
ADVANCE (Exponential(N_G,0,t_rem2))
RELEASE Remontnik
SAVEVALUE T_nar3,0 ;Обнуление счетчика вр. после последнего отказа
SAVEVALUE Tt_otk3,(Exponential(N_G,0,t_otk2));Расчет нового значения вр.будущего отказа
*----------------------------------
Met3 QUEUE Ocer_TNS
SEIZE Telegka
SEIZE Kran ;
DEPART Ocer_TNS
ADVANCE ((Exponential(N_G,t_Tr_min,t_Tr))#2)
ADVANCE (t_Kran#2)
LEAVE Nak3
RELEASE Telegka
RELEASE Kran
*-------------Проверка на выполнение программы---------------
SAVEVALUE N_zajav3+,1
TEST NE X$N_zajav3,N_zajav,Metka3
SAVEVALUE T_stop3,AC1
TERMINATE
*-------------Замыкание потока-------
Cikl2 SPLIT 1,Metka3 ;Порождение от заявки-родителя (1 шт) доп.копий (1 шт)
TERMINATE
*-----------------------РП3(долб)--------
GENERATE ,,,4000,1
ENTER Nak4
Metka4 ADVANCE (Exponential(N_G,0,V$T_post4))
QUEUE Ocer_TNS
SEIZE Telegka
SEIZE Kran
DEPART Ocer_TNS
ADVANCE ((Exponential(N_G,t_Tr_min,t_Tr))#2)
ADVANCE (t_Kran#2)
LEAVE Nak4
RELEASE Telegka
RELEASE Kran
SAVEVALUE N_zajav4+,1
TEST NE X$N_zajav4,N_zajav,Stop4
*SPLIT 1,Metka4
TERMINATE
Stop4 SAVEVALUE T_stop4,AC1
TERMINATE
*-----------------------РП3(щлиф)--------
GENERATE ,,,4000,1
ENTER Nak5
Metka5 ADVANCE (Exponential(N_G,0,V$T_post5))
QUEUE Ocer_TNS
SEIZE Telegka
SEIZE Kran
DEPART Ocer_TNS
ADVANCE ((Exponential(N_G,t_Tr_min,t_Tr))#2)
ADVANCE (t_Kran#2)
LEAVE Nak5
RELEASE Telegka
RELEASE Kran
SAVEVALUE N_zajav5+,1
TEST NE X$N_zajav5,N_zajav,Stop5
*SPLIT 1,Metka5
TERMINATE
Stop5 SAVEVALUE T_stop5,AC1
TERMINATE
*-----------------------РП6(пост ОТК)-------------------------------------
GENERATE ,,,4000,1
Metka6 ADVANCE (Exponential(N_G,0,V$T_post6))
ENTER Nak6
QUEUE Ocer_TNS
SEIZE Telegka
SEIZE Kran
DEPART Ocer_TNS
ADVANCE ((Exponential(N_G,t_Tr_min,t_Tr))#2)
ADVANCE (t_Kran#2)
LEAVE Nak6
RELEASE Telegka
RELEASE Kran
SAVEVALUE N_zajav6+,1
TEST NE X$N_zajav6,N_zajav,Stop6
*SPLIT 1,Metka6
TERMINATE
Stop6 SAVEVALUE T_stop6,AC1
TERMINATE
Результаты программы:
GPSS Мировое Сообщение о Моделировании - Романов.916.1
Sunday, May 26, 2013 20:28:04
ВРЕМЯ ОКОНЧАНИЯ ВРЕМЕНИ НАЧАЛА БЛОКИРУЕТ УСЛУГИ STORAGES
0.000 240000.000 141 3 9
НАЗВАНИЕ ОЦЕНИВАЮТ
CIKL2 89.000
KRAN 10043.000
MET0 4.000
MET3 76.000
METKA1 32.000
METKA2 49.000
METKA3 68.000
METKA4 93.000
METKA5 110.000
METKA6 126.000
NAK0_DET 10002.000
NAK0_ZAG 10001.000
NAK1 10003.000
NAK2 10004.000
NAK3 10005.000
NAK4 10006.000
NAK5 10007.000
NAK6 10008.000
N_G 1.000
N_ZAJAV 4000.000
N_ZAJAV0 10031.000
N_ZAJAV1 10032.000
N_ZAJAV2 10033.000
N_ZAJAV3 10034.000
N_ZAJAV4 10035.000
N_ZAJAV5 10036.000
N_ZAJAV6 10037.000
OCER_TNS 10041.000
Q_JAS 66.000
Q_TR 15.000
REMONTNIK 10046.000
SKLAD 10000.000
STOP0 29.000
STOP1 46.000
STOP2 63.000
STOP4 106.000
STOP5 123.000
STOP6 140.000
TELEGKA 10042.000
TT_OTK2 10039.000
TT_OTK3 10045.000
T_0 0.016
T_1 2.320
T_2 1.520
T_3 6.000
T_4 6.000
T_5 0.190
T_6 1.000
T_KRAN 1.000
T_MOD 240000.000
T_NAR2 10038.000
T_NAR3 10044.000
T_OTK2 6000.000
T_POST1 10025.000
T_POST2 10026.000
T_POST3 10027.000
T_POST4 10028.000
T_POST5 10029.000
T_POST6 10030.000
T_REM2 300.000
UNSPECIFIED
T_STOP1 10052.000
T_STOP2 10048.000
T_STOP3 10047.000
T_STOP4 10051.000
T_STOP5 10050.000
T_STOP6 10049.000
T_TR 0.900
T_TR_MIN 1.500
МАРКИРУЮТ СЧЕТ RETRYN ПОТОКА СЧЕТА ВХОДА ТИПА БЛОКА МЕСТОПОЛОЖЕНИЯ 1 GENERATE 1 0 0
2 TERMINATE 1 0 0
3 GENERATE 60 0 0
MET0 4 ENTER 60 0 0
5 ADVANCE 60 0 0
6 QUEUE 60 0 0
7 SEIZE 60 0 0
8 DEPART 60 0 0
9 ADVANCE 60 0 0
10 LEAVE 60 0 0
11 ENTER 60 0 0
12 RELEASE 60 0 0
13 SAVEVALUE 60 0 0
14 TEST 60 0 0
15 GATHER 60 60 0
16 QUEUE 0 0 0
17 SEIZE 0 0 0
18 DEPART 0 0 0
19 ADVANCE 0 0 0
20 LEAVE 0 0 0
21 ENTER 0 0 0
22 RELEASE 0 0 0
23 ADVANCE 0 0 0
24 LEAVE 0 0 0
25 SAVEVALUE 0 0 0
26 TEST 0 0 0
27 ASSEMBLE 0 0 0
28 TERMINATE 0 0 0
STOP0 29 SAVEVALUE 0 0 0
30 TERMINATE 0 0 0
31 GENERATE 4000 0 0
METKA1 32 ADVANCE 4000 0 0
33 ENTER 4000 0 0
34 QUEUE 4000 0 0
35 SEIZE 4000 0 0
36 SEIZE 4000 0 0
37 DEPART 4000 0 0
38 ADVANCE 4000 0 0
39 ADVANCE 4000 0 0
40 LEAVE 4000 0 0
41 RELEASE 4000 0 0
42 RELEASE 4000 0 0
43 SAVEVALUE 4000 0 0
44 TEST 4000 0 0
45 TERMINATE 3999 0 0
STOP1 46 SAVEVALUE 1 0 0
47 TERMINATE 1 0 0
48 GENERATE 4000 0 0
METKA2 49 ADVANCE 4000 0 0
50 ENTER 4000 0 0
51 QUEUE 4000 0 0
52 SEIZE 4000 0 0
53 SEIZE 4000 0 0
54 DEPART 4000 0 0
55 ADVANCE 4000 0 0
56 ADVANCE 4000 0 0
57 LEAVE 4000 0 0
58 RELEASE 4000 0 0
59 RELEASE 4000 0 0
60 SAVEVALUE 4000 0 0
61 TEST 4000 0 0
62 TERMINATE 3999 0 0
STOP2 63 SAVEVALUE 1 0 0
64 TERMINATE 1 0 0
65 GENERATE 3999 0 0
66 SAVEVALUE 3999 0 0
67 ENTER 3999 0 0
METKA3 68 ADVANCE 3999 0 0
69 SAVEVALUE 3999 0 0
70 TEST 3999 0 0
71 SEIZE 81 0 0
72 ADVANCE 81 0 0
73 RELEASE 81 0 0
74 SAVEVALUE 81 0 0
75 SAVEVALUE 81 0 0
MET3 76 QUEUE 3999 0 0
77 SEIZE 3999 0 0
78 SEIZE 3999 0 0
79 DEPART 3999 0 0
80 ADVANCE 3999 0 0
81 ADVANCE 3999 0 0
82 LEAVE 3999 0 0
83 RELEASE 3999 0 0
84 RELEASE 3999 0 0
85 SAVEVALUE 3999 0 0
86 TEST 3999 0 0
87 SAVEVALUE 3999 0 0
88 TERMINATE 3999 0 0
CIKL2 89 SPLIT 0 0 0
90 TERMINATE 0 0 0
91 GENERATE 4000 0 0
92 ENTER 4000 0 0
METKA4 93 ADVANCE 4000 0 0
94 QUEUE 4000 0 0
95 SEIZE 4000 0 0
96 SEIZE 4000 0 0
97 DEPART 4000 0 0
98 ADVANCE 4000 0 0
99 ADVANCE 4000 0 0
100 LEAVE 4000 0 0
101 RELEASE 4000 0 0
102 RELEASE 4000 0 0
103 SAVEVALUE 4000 0 0
104 TEST 4000 0 0
105 TERMINATE 3999 0 0
STOP4 106 SAVEVALUE 1 0 0
107 TERMINATE 1 0 0
108 GENERATE 4000 0 0
109 ENTER 4000 0 0
METKA5 110 ADVANCE 4000 0 0
111 QUEUE 4000 0 0
112 SEIZE 4000 0 0
113 SEIZE 4000 0 0
114 DEPART 4000 0 0
115 ADVANCE 4000 0 0
116 ADVANCE 4000 0 0
117 LEAVE 4000 0 0
118 RELEASE 4000 0 0
119 RELEASE 4000 0 0
120 SAVEVALUE 4000 0 0
121 TEST 4000 0 0
122 TERMINATE 3999 0 0
STOP5 123 SAVEVALUE 1 0 0
124 TERMINATE 1 0 0
125 GENERATE 4000 0 0
METKA6 126 ADVANCE 4000 0 0
127 ENTER 4000 0 0
128 QUEUE 4000 0 0
129 SEIZE 4000 0 0
130 SEIZE 4000 0 0
131 DEPART 4000 0 0
132 ADVANCE 4000 0 0
133 ADVANCE 4000 0 0
134 LEAVE 4000 0 0
135 RELEASE 4000 0 0
136 RELEASE 4000 0 0
137 SAVEVALUE 4000 0 0
138 TEST 4000 0 0
139 TERMINATE 3999 0 0
STOP6 140 SAVEVALUE 1 0 0
141 TERMINATE 1 0 0
FACILITY ЗАПИСИ UTIL. ПОЛЬЗА ВРЕМЕНИ АВЕНЮ. ВЛАДЕЛЕЦ НА РАССМОТРЕНИИ, ПРЕДАЮТ ПОВТОРНУЮ ПОПЫТКУ ЗЕМЛЕ DELAY
TELEGKA 23999 0.680 6.800 1 0 0 0 0 0
KRAN 24059 0.680 6.783 1 0 0 0 0 0
REMONTNIK 81 0.090 266.970 1 0 0 0 0 0
QUEUE ВХОД ВХОДА МАКС CONT (0) AVE.CONT. АВЕНЮ AVE.TIME (-0) RETRY
OCER_TNS 14 0 24059 1154 4.959 49.463 51.956 0
STORAGE КЕПКА. REM. Мин. Максимальные ЗАПИСИ AVL. AVE.C. UTIL. ПОВТОРИТЕ DELAY
SKLAD 800 740 0 60 60 1 33.042 0.041 0 0
NAK0_ZAG 1 1 0 1 60 1 0.001 0.001 0 0
NAK0_DET 1 1 0 0 0 1 0.000 0.000 0 0
NAK1 1 1 0 1 4000 1 0.667 0.667 0 0
NAK2 2 2 0 2 4000 1 1.098 0.549 0 0
NAK3 2 2 0 2 3999 1 1.408 0.704 0 0
NAK4 5 5 0 5 4000 1 3.291 0.658 0 0
NAK5 2 2 0 2 4000 1 1.165 0.582 0 0
NAK6 2 2 0 2 4000 1 1.098 0.549 0 0
SAVEVALUE ПОВТОРЯЮТ VALUE
T_POST3 0 128.571
N_ZAJAV0 0 60.000
N_ZAJAV1 0 4000.000
N_ZAJAV2 0 4000.000
N_ZAJAV3 0 3999.000
N_ZAJAV4 0 4000.000
N_ZAJAV5 0 4000.000
N_ZAJAV6 0 4000.000
T_NAR2 0 0
TT_OTK2 0 6000.000
T_NAR3 0 1170.000
TT_OTK3 0 1429.482
T_STOP3 0 168942.523
T_STOP2 0 131734.151
T_STOP6 0 131742.304
T_STOP5 0 139752.495
T_STOP4 0 158243.721
T_STOP1 0 160168.838