Рисунок 2.1 – Структурная схема объекта моделирования
Цель моделирования:
Изучение влияния интенсивности поступления деталей на загрузку транспортного робота и станков обработки.
1 Декомпозиция сложной системы.
Декомпозиция системы осуществляется просто: отдельными элементами модели будут очереди, транспортный робот, станки (в дальнейшем этапы обработки).
2 Выбор параметров и переменных.
В качестве параметров системы будет интенсивность поступления деталей на транспортировку и обработку на станках (
) ( ).Переменными модели системы являются функция распределения длительности перевозки или обработки детали на i-том этапе
.В качестве статистик моделирования будут выступать:
- - коэффициенты загрузки этапов обработки (
);- - количество обработанных деталей на автоматизированном участке (
) и на i-м этапе обработки ( );- - размер очереди к каждому этапу обработки (
);- - общее время обработки деталей на i-ом участке обработки (
).3 Уточнение критериев эффективности.
Так как структура модели проста, то в качестве критериев эффективности могут выступать коэффициент загруженности этапов обработки (
) и среднее значение времён обработки деталей ( ).В результате имитационного моделирования нужно найти следующие функциональные зависимости:
и .4 Аппроксимация реальных процессов математическими величинами.
При задании функций распределения
длительность обработки детали на i-ом этапе обработки достаточна аппроксимация ступенчатыми функциями.5 Выдвижение гипотез и предположений.
Выдвигаем гипотезу, что
и имеют вид полиномов, порядок и значение коэффициентов, которых необходимо определить в ходе имитационных экспериментов.6 Установление основной структуры моделирования.
С помощью таких эмпирических зависимостей можно предсказывать характеристики загрузки этапов обработки (
) и времена обработки деталей на этапе обработки ( ) в зависимости от изменяющихся характеристик входного потока деталей ( ) при заданных [1].Активность поступления деталей
1 Поиск места для детали:
'Ищется место для детали. Либо новая строка, либо на место ушедшей.
i = 2
While Cells(i, 1).Value > 0
i = i + 1
Wend
Cells(i, 1).Value = ModelTime
lsum = lsum + (ModelTime - tlprev) * l
l = l + 1
tlprev = ModelTime
2 Генерация поступления и определение типа детали
'Генерируем поступление деталей в зависимости от параметров табличного распределения и определяем тип детали в зависимости от значения параметра равномерного распределения.
tActions(0) = tActions(0) + RndN1(k, min, max, v)
If tActions(0) > tRun Then
tActions(0) = TBIG
End If
i = 2
While Worksheets("Elements").Cells(i, 2).Value > ""
i = i + 1
Wend
Sheets("Elements").Select
det = RndP(Rp)
If det = 1 Then
Cells(i, 2) = 1
Else
Cells(i, 2) = 2
EndIf
Активность перевозки детали
1 Поиск первой детали в очереди
'найти первую деталь в очереди, т.е. с минимальным значением в столбце 1 листа Elements
last = Range("A30000").End(xlUp).Row
tinmin = TBIG
For i = 2 To last
If (Cells(i, 3).Value = "") And (Cells(i, 1).Value > 0) And (Cells(i,1).Value < tinmin) Then
inmin = Cells(i, 1).Value
imin = i
End If
Next i
lsum = lsum + (ModelTime - tlprev) * l
l = l - 1
tlprev = ModelTime
2 Перевозка детали транспортным роботом
'присвоение состоянию робота значение 1, т.е. робот занят
'начало перевозки детали роботом
state = 1
tkprev = ModelTime
tActions(1) = ModelTime
Cells(imin, 3) = tActions(1)
If Cells(imin, 2) = 1 Then
tActions(2) = tActions(1) + Tdown
Else
tActions(3) = tActions(1) + Tup
End If
'окончание перевозки детали роботом, в зависимости от типа детали на перевозку затрачивается различное количество времени
'еслитипдетали 1
If (tActions(2) <= ModelTime) And (Cells(imin, 2) = 1) And (state = 1) Then
ksum = ksum + (ModelTime - tkprev)
tkprev = ModelTime
l1 = l1 + 1 'увелечение очереди на 1 к первому станку
Cells(imin, 4) = tActions(2) 'окончание перевозки детали роботом
tActions(1) = tActions(2) + Tdown 'возвращение робота от первого станка
tActions(2) = TBIG
End If
'еслитипдетали 1
If (tActions(3) <= ModelTime) And (Cells(imin, 2) = 2) And (state = 1) Then
ksum = ksum + (ModelTime - tkprev)
tkprev = ModelTime
l2 = l2 + 1 'увелечение очереди на 1 ко второму станку
Cells(imin, 4) = tActions(3) 'окончание перевозки детали роботом
tActions(1) = tActions(3) + Tup 'возвращение робота от второго станка
tActions(3) = TBIG
EndIf
'изменение состояния робота на 0, т.е. незанет
If (state = 1) And (tActions(1) <= ModelTime) Then
state = 0
tActions(1) = TBIG
EndIf
Активность начала обработки детали на станке
'обработка детали первого типа
If (state1 = 0 Andl1 > 0) Then
'найти первую деталь в очереди, т.е. с минимальным значением в столбце 4 листа Elements
last = Range("D30000").End(xlUp).Row
tinmin = TBIG
For i = 2 To last
If (Cells(i, 5).Value = "") And (Cells(i, 2) = 1) And
(Cells(i, 1).Value > 0) And (Cells(i, 1).Value < tinmin) Then
tinmin = Cells(i, 1).Value
imin1 = i
End If
Next i
i1 = 1
state1 = 1 'станок занят
l1 = l1 – 1 'уменьшение очереди к станку на 1
If ModelTime > Cells(imin1, 4) Then
tActions(4) = ModelTime
Else
tActions(4) = Cells(imin1, 4)
End If
Cells(imin1, 5) = tActions(4)
tActions(6) = tActions(4) + one 'времяобработкидеталитипанастанке
EndIf
обработка детали второго типа
If (state2 = 0 And l2 > 0) Then
'найти первую деталь в очереди, т.е. с минимальным значением в столбце 4 листа Elements
last = Range("D30000").End(xlUp).Row
tinmin = TBIG
For i = 2 To last
If (Cells(i, 5).Value = "") And (Cells(i, 2) = 2) And
(Cells(i, 1).Value > 0) And (Cells(i, 1).Value < tinmin) Then
tinmin = Cells(i, 1).Value
imin2 = i
End If
Next i
i2 = 0
state2 = 1
l2 = l2 - 1
If ModelTime > Cells(imin2, 4) Then
tActions(5) = ModelTime
Else
tActions(5) = Cells(imin2, 4)
End If
Cells(imin2, 5) = tActions(5)
tActions(7) = tActions(5) + two
EndIf
Активность окончания обработки детали на станке
'окончание обработка детали первого типа
If (tActions(6) <= ModelTime) Then
NextModelTime = False
'откорректировать значения для среднего времени пребывания детали в системе
Nb = Nb + 1
tbuysum = tbuysum + (ModelTime - Cells(imin1, 1).Value)
If i1 = 1 Then
state1 = 0
End If
Cells(imin1, 6) = tActions(6)
tActions(6) = TBIG
End If
'окончание обработка детали второго типа
If (tActions(7) <= ModelTime) Then
NextModelTime = False
'откорректировать значения для среднего времени пребывания детали в системе
Nb = Nb + 1
tbuysum = tbuysum + (ModelTime - Cells(imin2, 1).Value)
If i2 = 0 Then
state2 = 0
End If
Cells(imin2, 6) = tActions(7)
tActions(7) = TBIG
Call Trace("Finish", imin2)
4 ВЕРИФИКАЦИЯ ИМИТАЦИОННОЙ МОДЕЛИ
Порядок выполнения активностей рассмотрим на примере одной детали при первом прогоне. Arrival, Begin, Processing, Finish – это активности. В первой активности происходит генерация деталей. Первая активность появляется согласно закону нормального табличного распределения с параметрами k, min, max, v(i), где i=
. Поэтому первая активность появляется случайным образом. На рисунке 4.1 видно, что деталь после ее появления начинают обрабатывать во второй, третьей, а затем и в четвертой активности.Рисунок 4.1 - Изменение откликов на листе Trace