Автор: Пользователь скрыл имя, 04 Ноября 2012 в 14:28, курс лекций
Дисциплина «Моделирование в проектировании сложных систем» рассматривает вопросы применения имитационного моделирования при проектировании сложных технических и других систем, к которым относятся гибкие производственные системы (ГПС), их подсистемы, и другие объекты дискретного производства, а также транспортные, информационные, банковские, торговые, и т.п. системы, в основе которых с точки зрения моделей лежат системы массового обслуживания.
Операнд С задает смещение, т.е. время прихода первого транзакта, по умолчанию это время определяется операндами А и В.
Операнд D – ограничитель. Он задает общее число транзактов, которые могут войти в модель в период моделирования, по умолчанию ограничения нет.
Операнд Е определяет уровень приоритета транзактов. Чем большее целое число задано, тем выше уровень приоритета. По умолчанию – уровень нулевой.
На блок–диаграммах
оператор GENERАТЕ изображается следующим
образом:
В блоке GENERАТЕ обязателен или операнд А или D, остальные в соответствии с моделируемой ситуацией могут отсутствовать.
ТЕRМINАТЕ – завершать. Это блок, через который транзакты удаляются из модели. Его формат:
ТЕRМINАТЕ [A]
и графическое изображение:
Операнд А является указателем уменьшения счетчика завершения моделирования. Счетчик завершения – это ячейка памяти, в которую заносится целое положительное число, записанное в начале моделирования в операнде А команды SТАRТ. Оператор SТАRТ имеет формат:
SТАRТ А, [B], C, [D]
операнд B задает разрешение (по умолчанию) или запрет (NP) на вывод статистики.
операнд С в этом пакете не используется (в предыдущей версии GPSS–PC он задает «снимки»). В D указывается целое положительное число для вывода списков событий.
оператор SТАRТ располагают либо в конце текста программы (после его ввода сразу начнется выполнение программы), либо в командной строке (в интерактивном режиме).
В модели может быть несколько блоков ТЕRМINАТЕ, а счетчик завершений один. Поэтому надо следить за тем, какие блоки ТЕRМINАТЕ уменьшают значение счетчика завершений, а какие – нет.
Если моделируемая система работает определенное время, то для окончания моделирования в программе организуется модуль таймера. Если, например, моделирование длится 1000 единиц, то этот модуль выглядит так:
GENERATE 1000
TERMINATE 1
START 1
Во всех других точках модели операнды А блоков ТЕRМINАТЕ должны быть заданы по умолчанию.
Если же необходимо закончить процесс моделирования после обработки определенного количества транзактов, например, деталей, то в операнд А команды SТАRТ заносят это число, а в операнды А блоков ТЕRМINАТЕ, которые удаляют из модели соответствующие транзакты – детали, по единице. Например, на участке на трех станках обрабатываются детали соответственно первого, второго и третьего типов. Необходимо закончить моделирование после обработки 500 деталей первых двух типов. Это может быть реализовано так:
.
.
.
TERMINATE 1; Удаление деталей первого типа
.
.
.
TERMINATE 1; Удаление деталей второго типа
.
.
.
TERMINATE ; Удаление деталей третьего типа
.
.
.
START 500
ADVANCE – задержать. Этот блок реализует задержку транзакта на время, указанное в операндах А и В. Формат блока:
ADVANCE [A], [B]
В операнде
А указывается
среднее время задержки на обслуживание,
в
В – половина
интервала при равномерном законе или
модификатор–функция при других законах
распределения. Время задержки вычисляется
соответственно как А ± В и А # В. Значения А и В
по умолчанию равны нулю. Если оба операнда
заданы по умолчанию, то задержка равна
нулю и транзакт переходит в следующий
оператор. Графическое изображение блока
ADVANCE:
Блок SEIZE (занять) моделирует занятие устройства, блок RELEASE (освободить) имитирует освобождение устройства.
Форматы этих блоков:
SEIZE А
RELEASE А
В операнде А указывается цифровое или символическое имя устройства.
При работе модели автоматически формируется информация о работе устройств (о загрузке, числе входов, среднем интервале занятости и т.п.). Часто в модели используется последовательность блоков: SEIZE – ADVANCE – RELEASE, как в следующем фрагменте:
Однако не следует делать вывод, что эта последовательность обязательна.
В качестве регистратора очереди используются блоки QUEUE (стать в очередь) и DEPART (выйти из очереди).
Форматы этих блоков:
QUEUE А, [B]
DEPART A, [B]
В операндах А указывается символическое или числовое
имя очереди, в
В – число,
на которое увеличивается (в первом блоке)
и уменьшается (во втором блоке) длина
очереди; по умолчанию это число равно
единице.
В результате
моделирования формируется
Рассмотрим фрагмент блок–диаграммы модели с блоками занятия, задержки, освобождения устройства и регистрации очереди.
Примечание: Не следует считать, что регистратор очереди нужен всегда, где в системе есть очередь. Программа работает и без блоков QUEUE и DEPART, но в этом случае не формируется статистика об очереди.
Пример 3.1. На рабочее место одного рабочего поступают заготовки через каждые (8 ± 4) минут, время на изготовление одной детали – (7 ± 1) минут. Время работы – 1 смена. Дисциплина обслуживания: первым пришел – первым обслужен. Составить модель работы рабочего, сформировать информацию о загрузке рабочего и об очереди.
За единицу
модельного времени принимаем 1 минуту,
тогда время моделирования
Программа модели и выходная статистика имеют вид:
; Программа модели
generate 8,4
queue qmaster
seize master
depart qmaster
advance 7,1
release master
terminate
generate 480
terminate 1
START 1
Выходная статистика
START TIME END TIME BLOCKS FACILITIES STORAGES
0.000 480.000 9 1 0
LABEL LOC BLOCK TYPE ENTRY COUNT CURRENT COUNT RETRY
1 GENERATE 59 0 0
2 QUEUE 59 0 0
3 SEIZE 59 0 0
4 DEPART 59 0 0
5 ADVANCE 59 1 0
6 RELEASE 58 0 0
7 TERMINATE 58 0 0
8 GENERATE 1 0 0
9 TERMINATE 1 0 0
FACILITY ENTRIES UTIL. AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAY
MASTER 59 0.848 6.898 1 60 0 0 0 0
QUEUE MAX CONT. ENTRY ENTRY (0) AVE.CONT. AVE.TIME AVE.(–0) RETRY
QMASTER 2 0 59 25 0.238 1.933 3.354 0
Анализ статистики показывает, что рабочий изготовил за смену 58 деталей, при этом его загрузка составила 84,8 %, а среднее время изготовления одной детали – 6,898 минут. Средняя длина очереди 0,238 деталей, среднее время ожидания заготовки в очереди 1,933 минуты; максимальная длина очереди 2 детали; 25 заготовок сразу попали к рабочему (нулевое вхождение в очередь); без учёта этих заготовок среднее время нахождения детали в очереди составило 3,354 минуты.
3.2 Внутренняя логика работы пакета
Как отмечено ранее, из возможных шести списков событий обязательны СТС и СБС. При работе модели транслятор продвигает транзакты в модели, изменяя их положение в списках и блоках.
Рассмотрим внутреннюю логику пакета на предыдущем примере.
Первым действием является ввод модели. До этой фазы проверяются все операторы и в первую очередь отыскивается блок GENERATE (блок № 1 в выходной статистике). Так как операнды А и В этого блока соответственно равны 8 и 4, то определяется время прихода первого транзакта в блок. Допустим это время равно 10. Транзакту для дальнейшего движения присваивается номер 1 и он помещается в список будущих событий.
Далее для блока GENERATE № 8 следующему транзакту присваивается номер 2 и он также помещается в СБС со временем 480 единиц.
Читая команду START, транслятор заносит в счетчик завершения 1. На этом фаза ввода заканчивается.
Если в карте START задан операнд D (например, START 1, , , 1), то в выходной статистике для этого момента СТС (СЕС) пуст, а в СБС (FEC) будет информация, которая содержится в общем случае в полях:
CEC XN PRI M1 ASSEM CURRENT NEXT PARAMETER VALUE
Здесь СEC (CURRENT EVENTS CHAIN) – список текущих событий, XN – номер транзакта; PRI – приоритет транзакта; M1 – время ввода в модель; ASSEM – номер семейства транзакта; CURRENT – номер блока, в котором находится транзакт в данный момент; NEXT – номер блока, куда войдет транзакт; PARAMETER и VALUE – имя и значение параметра транзакта.
Информация о списке будущих событий FEC(F – Future) аналогична, только вместо поля M1 поле BDT – время, когда транзакт покинет список будущих событий.
В данном рассмотрении будем учитывать только 5 полей, исключив поля ASSEM, PARAMETER и VALUE.
В нашем случае:
СТС – пусто;
СБС – 1 0 10 0 1
2 0 480 0 8
Поскольку СТС пуст, происходит коррекция таймера. Таймер устанавливается в значение 10 (время движения первого транзакта) и транзакт № 1 перемещается в СТС. Информация о списках следующая:
СТС – 1 0 0 0 1
СБС – 2 0 480 0 8
Выполнение фазы просмотра. Транзакт № 1 из СТС продвигается в блок 1 (GENERATE). Так как транзакт может беспрепятственно пойти в блок 2 (QUEUE), то движение транзакта приостанавливается и создается его последователь, который будет двигаться через разыгранное время из интервала 8 ± 4, допустим через 5 единиц, т.е. в 10 + 5 = 15 единиц. Следующему транзакту присваивается № 3 и с этим временем он помещается в СБС. Транзакт же № 1 продвигается в блоки QUEUE, SEIZE, DEPART и АDVANCЕ. Так как в блоке АDVANCЕ он задерживается на (7 ± 1) единиц (допустим на 6 единиц), то он выводится из СТС и помещается в СБС со временем 10 + 6 = 16 единиц.
Так как транзакт № 1 прошел через блок SEIZE, транслятор просматривает СТС. Но он пуст. На этом фаза просмотра закончена. Содержимое списков событий: СТС – пусто;
СБС – 3 0 15 0 1
1 0 16 5 6
2 0 480 0 8
Далее выполняется вторая фаза коррекции таймера и процесс продвижения транзактов продолжается по рассмотренному алгоритму.
В предыдущем примере реализована дисциплина обслуживания: первым пришел – первым обслужен. В реальных системах часто возникают задачи, когда на одном оборудовании обрабатываются партии деталей различных типов (основные в данный плановый период и второстепенные – «фоновые», которые будут нужны в более поздние сроки). Рассмотрим этот случай на конкретном примере.
Пусть на одном обрабатывающем центре обрабатываются две группы деталей, причем детали первого типа имеют более низких приоритет, чем детали второго типа. Для деталей первого типа интервалы поступления (420 ± 360) с, интервалы обслуживания (300 ± 90) с; для деталей второго типа интервалы поступления (360 ± 240) с, интервалы обслуживания (100 ± 30) с. Время работы – 1 смена, т.е. 28800 с.
В данном случае реализуется дисциплина обслуживания: первым пришел – первым обслужен внутри приоритетного класса (рис. 3.1).
Рисунок 3.1
Как бы ни поступали детали, они будут выстраиваться в очередь на обработку по приоритетам: в начале – с более высоким (2), в конце – с более низким (1). При моделировании этой ситуации необходимы кроме модуля таймера два модуля, каждый для своего типа деталей. При единице модельного времени в 1 с и принятых обозначениях имен (ОТО – обрабатывающего центра и OTOQ – очереди к нему) программа имеет вид:
; Модуль обработки первого типа деталей
GENERАТЕ 420, 360,,, 1
QUEUE OTOQ
SEIZE OTO
DEPART OTOQ
АDVANСЕ 300, 90
RЕLЕАSЕ OTO
ТЕRМINАТЕ
; Модуль обработки второго типа деталей
GENERАТЕ 360, 240,,, 2
QUEUE OTOQ
SEIZE OTO
DEPART OTOQ
АDVANСЕ 100, 30
RЕLЕАSЕ OTO
ТЕRМINАТЕ
; Модуль таймера
GENERАТЕ 28800
ТЕRМINАТЕ 1
START 1
Анализ выходной статистики показывает, что количество обработанных деталей равно 140, коэффициент загрузки обрабатывающего центра равен 0,932, максимальная очередь равна 3, средняя очередь равна 0,77.
Если же в этой программе установить одинаковый приоритет для обоих типов деталей, например, задав операнды Е в первых двух блоках GENERАТЕ по умолчанию, то при незначительном увеличении количества деталей (142) и коэффициента загрузки оборудования (0,959) резко возрастут максимальная очередь (до 7), что приведет к необходимости увеличения размеров накопителя деталей, и среднее содержимое очереди (до 2,731), которое вызовет дополнительные потери от пролеживания деталей.
Другие дисциплины обслуживания можно реализовать с помощью средств, которые будут рассмотрены при изучении различных режимов блока ТRАNSFЕR и блоков списка пользователя.
Комплекс
однородных параллельно работающих
одноканальных устройств с
Работа МКУ в режиме его занятия и освобождения моделируется тремя операторами: командой STORAGE и блоками ENTER и LEAVE.
Информация о работе Моделирование в проектировании сложных систем