
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.172] |
![]() |
|
Страницы: (54) 1 [2] 3 4 ... 53 54 ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
На сборочный участок цеха предприятия через 10 ± 4 минут поступают партии, каждая из которых состоит из трех деталей. Половина всех поступающих деталей перед сборкой должна пройти предварительную обработку в течение 7 ± 3 минуты. На сборку поступают обработанная и необработанная детали. Процесс сборки занимает 6 ± 2 минут.
Смоделировать работу производственного участка в течение 8 часов. вот до чего я дошел только не знаю правильно ли исходя из логики языка. GENERATE 10,4 ; генерируем транзакт SPLIT 3,PARTY ; создаем партию из трех транзактов TERMINATE ; уничтожаем транзакт PARTY TRANSFER 0.5,OBR,SBOR ; половину на обработку OBR QUEUE que_obr ; занятие очереди перед обработкой SEIZE obr1 ; занятие обработки DEPART que_obr ; очищение очереди перед обработкой ADVANCE 7,3 ; обработка RELEASE obr1 ; очищение бработки TRANSFER ,SBOR ; отправление на сборку SBOR QUEUE que_sbor ; занятие очереди перед сборкой ASSEMBLE 2 ; соединение двух транзактов SEIZE sbor1 ; занятие сборки DEPART que_sbor ; очищение очереди перед сборкой ADVANCE 6,2 ; сборка RELEASE sbor1 ; очищение сборки TERMINATE ; уничтожение транзактов GENERATE 480 ; 480 транзактов 8*60=480 TERMINATE 1 ; уничтожаем по одному |
Сообщ.
#17
,
|
|
|
а у меня получилось вот что
![]() ![]() ;На сборочный участок цеха предприятия через 10±4 минут поступают партии, каждая из которых состоит из трех деталей. ;Половина всех поступающих деталей перед сборкой должна пройти предварительную обработку в течение 7±3 минуты. ;На сборку поступают обработанная и необработанная детали. Процесс сборки занимает 6±2 минут. ;Смоделировать работу производственного участка в течение 8 часов. ;------------------------------------; SBOR STORAGE 2 ; ;------------------------------------; GENERATE ,,,1 ;геним транзакт MET1 ADVANCE 10,4 ;задержка генерации на 10+-4 мин SPLIT 3,MET2 ;клоним 3 транзакта, отправляем их на метку TRANSFER ,MET1 ;отправляем родителя на метку MET2 TRANSFER .5,MET3 ;половину пропускаем, половину отправляем на метку QUEUE OCH1 ;занять очередь 1 SEIZE PREDV ;первичная обработка DEPART OCH1 ;покинуть очередь ADVANCE 7,3 ;задержка на время обработки RELEASE PREDV ;покинуть первичную обработку MET5 MATCH MET3 ;ждать, пока в MET3 прийдет транзакт TRANSFER ,MET4 ;перейти на метку MET3 MATCH MET5 ;ждать, пока в MET5 прийдет транзакт MET4 QUEUE OCH2 ;занять очередь 2 ENTER SBOR ;занять устройство сборки DEPART OCH2 ;покинуть очередь 2 ASSEMBLE 2 ;собрать из двух деталей одну ADVANCE 6,2 ;Задержка на время обработки LEAVE SBOR ;покидаем сборку LEAVE SBOR ;пришло две детали, а входит одно. потому покидаем два раза. TERMINATE ;транзакт покидает систему ;------------------------------------; GENERATE (8#60) ;геним транзакт через 8 часов TERMINATE 1 ;из счетчика завершений вычитаем 1 ;------------------------------------; START 1 ; ;------------------------------------; щя гляну-покритикую твое решение )) ![]() ![]() ;------------------------------------; GENERATE 10,4 ; SPLIT 3,PARTY ;Если генить транзакты таким образом, то они будут из разных семейств => соединяться асемблом не будут TERMINATE ; ;------------------------------------; PARTY TRANSFER 0.5,OBR,SBOR ; OBR QUEUE que_obr ;Желательно, что б имена были не длиннее 5 символов, хотя это не пренципиально SEIZE obr1 ; DEPART que_obr ; ADVANCE 7,3 ; RELEASE obr1 ; TRANSFER ,SBOR ; SBOR QUEUE que_sbor ; ASSEMBLE 2 ;необходимо различать транзакты, какие проходили первичную обработку, а какие нет. иначе будешь склеивать два, которые не проходили первичную, пока третий будет на первичной обработке SEIZE sbor1 ;не пренципиально, но сборка предполагаеться внутри устройства, хотя так тоже можно. DEPART que_sbor ; ADVANCE 6,2 ; RELEASE sbor1 ; TERMINATE ; ;------------------------------------; GENERATE 480 ; TERMINATE 1 ; ;------------------------------------; start 1 ; ;------------------------------------; |
Сообщ.
#18
,
|
|
|
спасибо но ведь они соединялись только действительно там были одни обработанные и необработанные детали, просто в методе про match ничего небыло, и принцип его я чет не догоняю, можно на пальцах объяснить а что он собственно делает
|
Сообщ.
#19
,
|
|
|
Вырезка из отчета
Цитата SBOR 11 QUEUE 139 0 0 12 ASSEMBLE 139 45 0 13 SEIZE 47 0 0 Хорошенькое соединялись. на момент окончания моделирвоания в блоке асембл зависло 45 транзактов из 139. Это треть от всех транзактов, побывавших в модели. Т.е. как я и говорил - два транзакта из партии склеились, а третьему склеиваться нескем, ибо транзактов его семейства в модели больше не осталось. Если увеличишь время моделирования скажем раз в 10.. или 100, то увидишь, что асембл стабильно задерживает ровно треть транзактов. Только ненадо думать, что сборка обрабатывать не успевает. у сборки загрузенность 61%, это почти две трети от идеала. Блок Асембл клеит не все транзакты, а только те, которые пренадлежат к одному семейству. Если на пальцах - транзакты одного семейства - это те, у которых один родитель (самый простой вариант) Как видишь в моем варианте модели все транзакты модели одного семейтсва (один родитель генит все транзакты), а в товем каждая новая партия - новое семейство (из дженерейта выходит новый родитель, к предыдущему транзакту никакого отношения не имеющий). Блок MATCH - синхронизирует два транзакта ОДНОГО семейтсва. В его параметр ложится метка на другой блок MATCH, с которым он синхронизируеться. т.е. транзакт приходит в блок MATCH и ждет, пока в другой блок MATCH прийдет транзакт ТОГО ЖЕ семейства. Когда такой приходит - они оба одновременно покидают блоки MATCH. В данном случае так работают оба блока MATCH, поскольку завязаны друг на друга. Подробнее тут - Блок MATCH, Семейства транзактов З.Ы.: "Полезные ссылки" читать надо. Вверху страниццы выделено красным восклиццательным знаком. |
Сообщ.
#20
,
|
|
|
я тут мозгами пораскинул на досуге..
то что я написал раньше - туфта. ![]() ![]() ;------------------------------------; SBOR STORAGE 2 ; ;------------------------------------; GENERATE ,,,1 ;геним транзакт MET1 ADVANCE 10,4 ;задержка генерации на 10+-4 мин SPLIT 3,MET2 ;клоним 3 транзакта, отправляем их на метку TRANSFER ,MET1 ;отправляем родителя на метку MET2 TRANSFER .5,MET3 ;половину пропускаем, половину отправляем на метку QUEUE OCH1 ;занять очередь 1 SEIZE PREDV ;первичная обработка DEPART OCH1 ;покинуть очередь ADVANCE 7,3 ;задержка на время обработки RELEASE PREDV ;покинуть первичную обработку QUEUE OCH2 ;занять очередь 2 LINK 2,FIFO ;ПОСТАВИТЬ В 2-Й СПИСОК ПОЛЬЗОВАТЕЛЯ ;------------------------------------; MET3 QUEUE OCH2 ;занять очередь 2 LINK 1,FIFO ;ПОСТАВИТЬ В 1-Й СПИСОК ПОЛЬЗОВАТЕЛЯ ;------------------------------------; MET4 ENTER SBOR ;занять устройство сборки DEPART OCH2 ;покинуть очередь 2 ASSEMBLE 2 ;собрать из двух деталей одну ADVANCE 6,2 ;Задержка на время обработки LEAVE SBOR ;покидаем сборку LEAVE SBOR ;пришло две детали, а входит одно. потому покидаем два раза. TERMINATE ;транзакт покидает систему ;------------------------------------; GENERATE ,,,1 ;геним POVT TEST G CH1,0 ;если первый список пользователя больше нуля, то дальше TEST G CH2,0 ;если второй список пользователя больше нуля, то дальше UNLINK 1,MET4,1 ;отправить из 1-го списка пользователя на метку МЕТ4 один транзакт UNLINK 2,MET4,1 ;отправить из 2-го списка пользователя на метку МЕТ4 один транзакт TRANSFER ,POVT ;перейти на метку ;------------------------------------; GENERATE (8#60) ;геним транзакт через 8 часов TERMINATE 1 ;из счетчика завершений вычитаем 1 ;------------------------------------; START 1 ; ;------------------------------------; вот так должно быть. в предыдущем варианте синхронизация не обеспечивала условие, что склеятся именно обработанный с необработанным. Если к примеру через синхронизацию прошло две пары транзактов, то может склеяться два обработанных, а потом два необработанных. хотя на самом деле это вопрос спорный, ибо в очереди действует дисциплина обслуживания ФИФО, первый пришел-первый обслужился, а поскольку синхронизируемые пары транзактов имеют одинаковое время, а пришедшие после пары - другое отличное время.. короче склеиваться должны только пары, которые синхронизировались блоком матч. |
Сообщ.
#21
,
|
|
|
Поставил gpss world попробовал сделать то что ты передевылал для меня.Так вот во время симуляции на 2 пункте описания которое ты писал у меня зависает программа.Не знаю в чём дело.Может я что то неправильно делаю!
|
Сообщ.
#22
,
|
|
|
всмысле на втором пункте? что пишет?
|
Сообщ.
#23
,
|
|
|
Вот сам листинг который ты писал я его вбил в gpss/world
fun FUNCTION RN1,C13 0,0/0.1,0.104/0.2,0.222/0.3,0.357/0.4,0.511/0.5,0.693/ 0.6,0.915/0.7,1.304/0.8,1.610/0.9,2.303/0.97,3.507/ 0.995,5.298/0.999,7 tab TABLE Mp1,0,60,50 ;незнаю что имел ввиду автор - сделал время пребывания транзакта в системе var1 VARIABLE 3600/X1 var2 VARIABLE 60#X2 GENERATE V$var1,FN$fun mark 1 ;запомнил текущее внемя в первом транзакте QUEUE 1 SEIZE 1 DEPART 1 ADVANCE V$var2,FN$fun RELEASE 1 TABULATE tab TERMINATE 1 INITIAL X1,20 INITIAL X2,1 START 10000 В жпсс/в он проводиться след образом - 1. запускаешь симуляцию, получаешь отчет. 2. клацаешь в главной панели window-> simulation window ->bloks window 3. нажимаешь ctrl+alt+r и быстренько жмешь на кнопочку Halt 4. потом нажимая на кнопочку step можешь смотреть как движуться транзакты Так вот после запуска симуляции в панели window программа зависает и выходит. |
Сообщ.
#24
,
|
|
|
1. выделяешь текст программы.
2. создаешь текстовый файл 3. кидаешь в него текст программы. 4. стираешь, если там моявилось что то лишнее 5. копируешь текст из блокнота 6. запускаешь ЖПСС 7. копируешь туда текст 8. запускаешь 9. радуешья )) |
Сообщ.
#25
,
|
|
|
Цитата Ura2007 @ В жпсс/в он проводиться след образом - 1. запускаешь симуляцию, получаешь отчет. 2. клацаешь в главной панели window-> simulation window ->bloks window 3. нажимаешь ctrl+alt+r и быстренько жмешь на кнопочку Halt 4. потом нажимая на кнопочку step можешь смотреть как движуться транзакты Это если ты хочешь по шагу посмотреть как транзакты движуться.. зачем тебе это? =) -Added Цитата Ura2007 @ Окей,спасибо попробую так! Добавлено быстренько жмешь на кнопочку Halt Это какая кнопка? Где её найти? 2. клацаешь в главной панели window-> simulation window ->bloks window в этом окошке |
Сообщ.
#26
,
|
|
|
Всё нормально теперь всё ок.Заработало.
|
Сообщ.
#27
,
|
|
|
чет не отсылается письмо. давай я тебе по аське перекину
|
Сообщ.
#28
,
|
|
|
Кстати вот эта функция зачем нужна в программе это точки для графика какого-то распределения?
fun FUNCTION RN1,C13 0,0/0.1,0.104/0.2,0.222/0.3,0.357/0.4,0.511/0.5,0.693/ 0.6,0.915/0.7,1.304/0.8,1.610/0.9,2.303/0.97,3.507/ 0.995,5.298/0.999,7 Добавлено Можно залить сюда http://webfile.ru/ я скачаю по ссылке которую тебе дадут |
Сообщ.
#29
,
|
|
|
да откуда ж я знаю зачем она нужна?
распредиление какое то, в блоке адванс. как то задержка колебаеться в зависимости от значений функции. |
Сообщ.
#30
,
|
|
|
пдэфник боева и киев жпсс - оч советую. остальное так.. можно посмотреть
rapidshar.come зеркало ifolder.ru зеркало webfile.ru зеркало sharemania.ru |