На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Страницы: (54) 1 [2] 3 4 ...  53 54  ( Перейти к последнему сообщению )  
> GPSS , Вопрос для знающих
    На сборочный участок цеха предприятия через 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 ; уничтожаем по одному
      а у меня получилось вот что

      ExpandedWrap disabled
        ;На сборочный участок цеха предприятия через 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   ;
        ;------------------------------------;


      щя гляну-покритикую твое решение ))

      ExpandedWrap disabled
        ;------------------------------------;
            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   ;
        ;------------------------------------;
        спасибо но ведь они соединялись только действительно там были одни обработанные и необработанные детали, просто в методе про match ничего небыло, и принцип его я чет не догоняю, можно на пальцах объяснить а что он собственно делает
          Вырезка из отчета
          Цитата
          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, Семейства транзактов

          З.Ы.: "Полезные ссылки" читать надо. Вверху страниццы выделено красным восклиццательным знаком.
            я тут мозгами пораскинул на досуге..
            то что я написал раньше - туфта.

            ExpandedWrap disabled
              ;------------------------------------;
              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   ;
              ;------------------------------------;


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

            хотя на самом деле это вопрос спорный, ибо в очереди действует дисциплина обслуживания ФИФО, первый пришел-первый обслужился, а поскольку синхронизируемые пары транзактов имеют одинаковое время, а пришедшие после пары - другое отличное время.. короче склеиваться должны только пары, которые синхронизировались блоком матч.
              Поставил gpss world попробовал сделать то что ты передевылал для меня.Так вот во время симуляции на 2 пункте описания которое ты писал у меня зависает программа.Не знаю в чём дело.Может я что то неправильно делаю!
                всмысле на втором пункте? что пишет?
                  Вот сам листинг который ты писал я его вбил в 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 программа зависает и выходит.
                    1. выделяешь текст программы.
                    2. создаешь текстовый файл
                    3. кидаешь в него текст программы.
                    4. стираешь, если там моявилось что то лишнее
                    5. копируешь текст из блокнота
                    6. запускаешь ЖПСС
                    7. копируешь туда текст
                    8. запускаешь
                    9. радуешья ))
                      Цитата Ura2007 @
                      В жпсс/в он проводиться след образом -
                      1. запускаешь симуляцию, получаешь отчет.
                      2. клацаешь в главной панели window-> simulation window ->bloks window
                      3. нажимаешь ctrl+alt+r и быстренько жмешь на кнопочку Halt
                      4. потом нажимая на кнопочку step можешь смотреть как движуться транзакты


                      Это если ты хочешь по шагу посмотреть как транзакты движуться.. зачем тебе это? =)

                      -Added
                      Цитата Ura2007 @
                      Окей,спасибо попробую так!

                      Добавлено
                      быстренько жмешь на кнопочку Halt

                      Это какая кнопка? Где её найти?

                      2. клацаешь в главной панели window-> simulation window ->bloks window

                      в этом окошке
                        Всё нормально теперь всё ок.Заработало.
                          чет не отсылается письмо. давай я тебе по аське перекину
                            Кстати вот эта функция зачем нужна в программе это точки для графика какого-то распределения?
                            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/ я скачаю по ссылке которую тебе дадут
                              да откуда ж я знаю зачем она нужна?
                              распредиление какое то, в блоке адванс. как то задержка колебаеться в зависимости от значений функции.
                                пдэфник боева и киев жпсс - оч советую. остальное так.. можно посмотреть
                                rapidshar.come
                                зеркало ifolder.ru
                                зеркало webfile.ru
                                зеркало sharemania.ru
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (54) 1 [2] 3 4 ...  53 54


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0379 ]   [ 16 queries used ]   [ Generated: 28.03.24, 14:16 GMT ]