Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_работа_МС_2_07.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
3.69 Mб
Скачать

2.2.Выбор программных объектов модели

В соответствии с парадигмой ООП программные объекты должны содержать всю информацию, которая необходима им для выполнения своих обязанностей. Ясно, что каждая заявка должна являться объектом, содержащим сведения о времени своего поступления в систему обслуживания, времени активизации (постановки в очередь), технологическом маршруте, текущем канале обслуживания, числе выполненных операций и прочие данные. Таким образом, должен быть предусмотрен программный класс ZAYAVKA, позволяющий создавать объекты-заявки. Количество их ограничено планом запуска на период моделирования Т. Следующим программным объектом является транспортная тележка, которая должна в своих слотах (атрибутах) содержать информацию, необходимую для подсчета времени транспортных операций, время своего освобождения, место нахождения обслуживаемой заявки. Соответствующий класс получил имя TEL. Программными объектами также должны стать каналы обслуживания класса CANAL. Канал должен содержать сведения об узле своей принадлежности, индексе обслуживаемой заявки и времени ее активации, расстоянии от канала до склада, время освобождения, время окончания ремонта (в случае выхода из строя), типе заявки и штучном времени обслуживания изделия данного типа, суммарном время занятости и транспортного обслуживания. Атрибуты хранятся в слотах. Необязательно при разработке модели сразу предусмотреть все слоты. Они могут быть добавлены по мере расширения функций класса в ходе программирования.

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

2.3.Описание процесса обслуживания

Имитационная модель отслеживает “судьбу” каждой заявки (под заявкой понимается небольшая партия заготовок одного типа) от момента ее поступления в систему до завершения маршрута обслуживания и доставки заявки в накопитель (автоматизированный склад). В систему поступают заявки различных типов, каждому из которых соответствует заданный маршрут обслуживания. Заявки не имеют относительного приоритета по признаку типа (такой поток называется однородным). Принятый порядок обслуживания – FIFO, т.е. в конкурсе заявок на обслуживание побеждает заявка с наименьшим значением времени активизации в очереди. Каждая операция (фаза) обслуживания выполняется на соответствующем технологическому маршруту и свободном в данный момент канале обслуживания. В маршруте заявки указаны узлы сети обслуживания, которые могут содержать один или более каналов обслуживания (ГПМ или модулей обработки изделий). Каналы одного узла взаимозаменяемы, но имеют различное расстояние до склада, что учитывается при расчете транспортного времени обслуживания заявки.

Заявка представляет собой партию заготовок одного типа, помещенных в общую тару (паллету, кассету и пр.). Заявки перемещаются между складом-накопителем и каналами обслуживания с помощью транспортной тележки. Тележка всегда стартует от склада, поэтому после доставки заявки на канал тележка сразу же возвращается на склад, где ожидает получения нового заказа. Одним из основных условий проведения конкурса заявок на обслуживание является незанятость тележки. Существует два типа маршрутов тележки в зависимости от места нахождения обслуживаемой заявки, выигравшей общий конкурс: склад – ГПМ, и ГПМ – склад. В первом случае канал считается занятым с момента выигрыша конкурса адресованной ему заявкой, т.е. начиная с погрузки и доставки заявки. При этом время занятости канала включает в себя время работы штабелера склада, время погрузки тележки, пробега до канала и разгрузки на канале. Только с этого момента канал может начать собственно обслуживание заявки. Тележка же считается освободившейся только после возвращения на склад. Во втором случае, когда заявка требует перевозки с ГПМ на склад, время занятости канала включает в себя время пробега тележки до канала, погрузки и возврата на склад. С этого момента как тележка, так и канал считаются свободными (время работы штабелёра в данном случае не учитывается).

Каждая заявка – это объект, содержащий в слоте post время поступления для выполнения очередной фазы обслуживания. Время поступления на первую фазу обслуживания каждой заявки каждого типа разыгрывается как случайная величина по заданному среднему значению интервала времени между заявками данного типа (математическому ожиданию) и заданной функции плотности распределения. Эту задачу выполняет правило startup, которое создает случайный план времени запуска заявок всех типов на весь период моделирования Т. Случайное время поступления заявок разыгрывается с помощью функции queue по экспоненциальному закону или функции myqueue, отлаженной студентом в 1-ой работе и переведенной им затем на язык CLIPS. Однако заявки, содержащие в слоте post случайное время запуска, считаются пока не активизированными. Активизация заявки - это постановка ее в очередь к тележке. Активизация наступает в момент (такт), когда текущее модельное время ТТЕК, наращиваемое дискретно с заданным шагом с помощью правила time, сравняется или незначительно превысит случайное время поступления заявки любого типа в слоте post. Выполнение этого условия проверяет правило time-tact, которое и устанавливает в результате случайное плановое время активизации заявки. В начале каждого нового такта модельного времени правило compute-sum-queue подсчитывает накопленные к данному моменту очереди из активизированных заявок, адресованных конкретным узлам, суммируя их с подсчитанными очередями на предыдущих шагах. В конце периода моделирования Т накопленная очередь будет поделена на число тактов модельного времени и тем самым определена средняя длина очереди.

Следующей задачей является поиск свободных на данном такте каналов узлов. Эту задачу решает правило find-free-canals, которое отыскивает освободившиеся каналы и помещает в базу соответствующие факты, содержащие номер освободившегося узла и имя принадлежащего ему канала (один узел может иметь более одного канала обслуживания).

Следующей задачей является проведение конкурсов на обслуживание как среди активизированных заявок, требующих обслуживания и находящихся на складе (правило concurs1), так и среди обслуженных заявок, находящихся в каналах и требующих отвозки на склад (правило concurs2). Каждое из правил может сработать только при условии, что тележка свободна. Дополнительным условием срабатывания правила concurs1 является наличие факта о незанятости нужного канала обслуживания. Это правило пытается отыскать активизированную заявку, находящуюся на складе, у которой узел выполнения текущей операции соответствует свободному в данный момент узлу, и при этом не существует другой заявки с теми же свойствами и меньшим временем активизации в слоте tact. Достаточно найти одну подходящую пару “заявка-канал”. В правой части правила concurs1 необходимо сообщить заявке назначенный канал, каналу сообщить время активизации и имя заявки (объекта). Кроме того, пока не определено точное время окончания обслуживания, надо сделать канал недоступным для участия в конкурсах. Для этого надо установить время его освобождения в слоте toscanal равным периоду моделирования Т, т.е. максимальному значению модельного времени. Далее нужно сообщить объекту “тележка” расстояние канала обслуживания до склада, имя канала, имя заявки и ее тип. После этого необходимо исключить повторный поиск пар, удалив факты (free..), и вызвать обработчик сообщений тележки compute-time.

Дальнейшее обслуживание заявки производится тележкой и каналом. Обработчик сообщений тележки compute-time рассчитывает время доставки заявки на канал, новое время освобождения тележки, сообщает каналу продолжительность перевозки (для расчета времени непроизводительной занятости канала), время начала обслуживания заявки каналом и место ее нахождения. Затем управление действиями передается каналу с помощью вызова его обработчика сообщений compute-proc. Канал получает от заявки имя канала и ее тип, а также выдает среднее время обработки заявки данного типа и вызывает функцию разыгрывания случайного времени обслуживания time-proc. Возвращаемое время обслуживания используется, чтобы установить в слоте post заявки новое время поступления на следующую фазу обслуживания и проверить условие отсутствия отказа канала в период обслуживания заявки путем сравнения времени окончания обслуживания и времени очередного отказа, разыгрываемого как случайная величина с помощью функции otkaz. Если отказ произошел, заявка получает новое время поступления, равное моменту отказа. Это позволит ей участвовать в конкурсе на перевозку на склад. Затем рассчитывается время восстановления канала и увеличивается счетчик числа отказов.

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

Если конкурс FIFO по времени активизации выиграла заявка, находящаяся после обслуживания в канале, то обработчик тележки compute-time выполняет другой набор действий. Помимо расчета времени транспортировки заявки на склад и установки времени освобождения тележки, необходимо определить, не является ли выполненная операция последней. Для этого надо сравнить счетчик операций заявки с числом операций в маршруте. Если операция не последняя, счетчик увеличивают на 1, определяют по нему номер узла следующей операции и сообщают его заявке. Здесь же заявке устанавливают новое время поступлении в слоте post с учетом времени ожидаемой доставки на склад, а каналу сообщается время его освобождения с учетом окончания транспортной операции. Если выполненная операция оказалась последней в маршруте заявки, то дополнительным действием является установка в слот post максимально возможного времени Т, служащего флагом окончания обслуживания и не позволяющего больше активизировать эту заявку.

Описанные операции выполняются или пытаются быть выполненными на каждом такте модельного времени. Для пошагового увеличения модельного времени служит правило time, срабатывающее в конце каждого цикла, кроме последнего.

Вывод информации осуществляет правилами derive-info с самым низким приоритетом. Они подсчитывают и выводят: среднюю длину очереди к каждому узлу за период моделирования; коэффициенты загрузки каждого канала; относительное время занятости канала выполнением транспортных операций; среднее время ожидания начала обслуживания в канале и число законченных заявок за период моделирования.