Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- constant длительность_погрузки_на_тележку = 1.5
- constant длительность_доставки_тележкой = 2.0
- constant длительность_устаноки_на_станок = 1.0
- constant длительность_разгрузки_станка = 0.5
- constant длительность_возврата_робота = 0.2
- sequence экспоненциальный = new Exponential(123456789)
- enum Положение {
- СТАНОК_1, СТАНОК_2, СТАНОК_3, НАКОПИТЕЛЬ_1, НАКОПИТЕЛЬ_3, НАКОПИТЕЛЬ_2, ТЕЛЕЖКА_1_Н, ТЕЛЕЖКА_1_К, ТЕЛЕЖКА_2_Н, ТЕЛЕЖКА_2_К, НИГДЕ
- }
- type Накопители {
- int номер
- Положение положение
- int текущее_количество
- }
- resource накопитель_1 = Накопители.create(1, Положение.НАКОПИТЕЛЬ_1, 10)
- resource накопитель_2 = Накопители.create(2, Положение.НАКОПИТЕЛЬ_2, 0)
- resource накопитель_3 = Накопители.create(3, Положение.НАКОПИТЕЛЬ_3, 10)
- enum Состояние_тележки {СВОБОДНА, ЗАНЯТА, ЗАГРУЖЕНА, ПЕРЕМЕЩАЕТСЯ, ПРИБЫЛА, ОЖИДАЕТ}
- type Тележки {
- int номер
- Положение положение
- Состояние_тележки состояние
- }
- resource тележка_1 = Тележки.create(1, Положение.ТЕЛЕЖКА_1_Н, Состояние_тележки.СВОБОДНА)
- resource тележка_2 = Тележки.create(2, Положение.ТЕЛЕЖКА_2_Н, Состояние_тележки.СВОБОДНА)
- enum Состояние_робота {СВОБОДЕН, ЗАНЯТ}
- type Роботы {
- int номер
- Положение положение
- Состояние_робота состояние
- }
- resource робот_1 = Роботы.create(1, Положение.НАКОПИТЕЛЬ_1, Состояние_робота.СВОБОДЕН)
- resource робот_1 = Роботы.create(1, Положение.НАКОПИТЕЛЬ_3, Состояние_робота.СВОБОДЕН)
- resource робот_2 = Роботы.create(2, Положение.ТЕЛЕЖКА_1_К, Состояние_робота.СВОБОДЕН)
- resource робот_3 = Роботы.create(3, Положение.ТЕЛЕЖКА_2_К, Состояние_робота.СВОБОДЕН)
- enum Состояние_станка {СВОБОДЕН, ЗАГРУЖАЕТСЯ, ГОТОВ_К_ОБРАБОТКЕ, РАБОТАЕТ, РАЗГРУЖАЕТСЯ, ЗАКОНЧИЛ_ОБРАБОТКУ}
- type Станки {
- int номер
- Положение положение
- Состояние_станка состояние
- double длительность_обработки
- }
- resource станок_1 = Станки.create(1, Положение.СТАНОК_1, Состояние_станка.СВОБОДЕН, 28)
- resource станок_2 = Станки.create(2, Положение.СТАНОК_2, Состояние_станка.СВОБОДЕН, 28)
- resource станок_3 = Станки.create(3, Положение.СТАНОК_3, Состояние_станка.СВОБОДЕН, 15)
- enum Состояние_детали {ХРАНИТСЯ, ТРАНСПОРТИРУЕТСЯ, ОБРАБАТЫВАЕТСЯ, ОБРАБОТКА_ЗАКОНЧЕНА}
- type Детали {
- int номер
- Положение положение
- Состояние_детали состояние
- }
- resource деталь_1 = Детали.create(1, Положение.НАКОПИТЕЛЬ_1, Состояние_детали.ХРАНИТСЯ)
- resource деталь_2 = Детали.create(2, Положение.НАКОПИТЕЛЬ_1, Состояние_детали.ХРАНИТСЯ)
- resource деталь_3 = Детали.create(3, Положение.НАКОПИТЕЛЬ_1, Состояние_детали.ХРАНИТСЯ)
- resource деталь_4 = Детали.create(4, Положение.НАКОПИТЕЛЬ_1, Состояние_детали.ХРАНИТСЯ)
- resource деталь_5 = Детали.create(5, Положение.НАКОПИТЕЛЬ_1, Состояние_детали.ХРАНИТСЯ)
- resource деталь_6 = Детали.create(6, Положение.НАКОПИТЕЛЬ_1, Состояние_детали.ХРАНИТСЯ)
- resource деталь_7 = Детали.create(7, Положение.НАКОПИТЕЛЬ_1, Состояние_детали.ХРАНИТСЯ)
- resource деталь_8 = Детали.create(8, Положение.НАКОПИТЕЛЬ_1, Состояние_детали.ХРАНИТСЯ)
- resource деталь_9 = Детали.create(9, Положение.НАКОПИТЕЛЬ_1, Состояние_детали.ХРАНИТСЯ)
- resource деталь_10 = Детали.create(10, Положение.НАКОПИТЕЛЬ_1, Состояние_детали.ХРАНИТСЯ)
- resource деталь_11 = Детали.create(1, Положение.НАКОПИТЕЛЬ_3, Состояние_детали.ХРАНИТСЯ)
- resource деталь_12 = Детали.create(2, Положение.НАКОПИТЕЛЬ_3, Состояние_детали.ХРАНИТСЯ)
- resource деталь_13 = Детали.create(3, Положение.НАКОПИТЕЛЬ_3, Состояние_детали.ХРАНИТСЯ)
- resource деталь_14 = Детали.create(4, Положение.НАКОПИТЕЛЬ_3, Состояние_детали.ХРАНИТСЯ)
- resource деталь_15 = Детали.create(5, Положение.НАКОПИТЕЛЬ_3, Состояние_детали.ХРАНИТСЯ)
- resource деталь_16 = Детали.create(6, Положение.НАКОПИТЕЛЬ_3, Состояние_детали.ХРАНИТСЯ)
- resource деталь_17 = Детали.create(7, Положение.НАКОПИТЕЛЬ_3, Состояние_детали.ХРАНИТСЯ)
- resource деталь_18 = Детали.create(8, Положение.НАКОПИТЕЛЬ_3, Состояние_детали.ХРАНИТСЯ)
- resource деталь_19 = Детали.create(9, Положение.НАКОПИТЕЛЬ_3, Состояние_детали.ХРАНИТСЯ)
- resource деталь_20 = Детали.create(10, Положение.НАКОПИТЕЛЬ_3, Состояние_детали.ХРАНИТСЯ)
- def terminateCondition() {
- return накопитель_2.текущее_количество == 10
- }
- operation Погрузка_детали() {
- relevant накопитель = Накопители.all.filter[номер == 1 && текущее_количество > 0].any
- relevant деталь = Детали.all.filter[положение == Положение.НАКОПИТЕЛЬ_1].any
- relevant робот = Роботы.all.filter [
- номер == 1 && положение == Положение.НАКОПИТЕЛЬ_1 && состояние == Состояние_робота.СВОБОДЕН
- ].any
- relevant тележка = Тележки.all.filter [
- номер == 1 && положение == Положение.ТЕЛЕЖКА_1_Н && состояние == Состояние_тележки.СВОБОДНА
- ].any
- def begin() {
- накопитель.текущее_количество = накопитель.текущее_количество - 1
- деталь.состояние = Состояние_детали.ТРАНСПОРТИРУЕТСЯ
- робот.состояние = Состояние_робота.ЗАНЯТ
- тележка.состояние = Состояние_тележки.ЗАНЯТА
- робот.положение = Положение.НИГДЕ
- деталь.положение = робот.положение
- }
- def duration() {
- return экспоненциальный.next(1.0 / длительность_погрузки_на_тележку)
- }
- def end() {
- робот.состояние = Состояние_робота.СВОБОДЕН
- тележка.состояние = Состояние_тележки.ЗАГРУЖЕНА
- робот.положение = Положение.ТЕЛЕЖКА_1_Н
- деталь.положение = робот.положение
- }
- }
- operation Доставка_детали(int номер_тележки, Положение откуда, Положение куда) {
- relevant тележка = Тележки.all.filter[положение == откуда && состояние == Состояние_тележки.ЗАГРУЖЕНА].any
- relevant деталь = Детали.all.filter[положение == откуда].any
- def begin() {
- тележка.состояние = Состояние_тележки.ПЕРЕМЕЩАЕТСЯ
- }
- def duration() {
- return экспоненциальный.next(1.0 / длительность_доставки_тележкой)
- }
- def end() {
- тележка.состояние = Состояние_тележки.ПРИБЫЛА
- тележка.положение = куда
- деталь.положение = тележка.положение
- }
- }
- operation Установка_на_станке(Положение положение_станка, Положение положение_детали) {
- relevant станок = Станки.all.filter[положение == положение_станка && состояние == Состояние_станка.СВОБОДЕН].any
- relevant тележка = Тележки.all.filter[положение == положение_детали && состояние == Состояние_тележки.ПРИБЫЛА].any
- relevant робот = Роботы.all.filter[положение == положение_детали && состояние == Состояние_робота.СВОБОДЕН].any
- relevant деталь = Детали.all.filter[положение == положение_детали].any
- def begin() {
- станок.состояние = Состояние_станка.ЗАГРУЖАЕТСЯ
- тележка.состояние = Состояние_тележки.ОЖИДАЕТ
- робот.состояние = Состояние_робота.ЗАНЯТ
- }
- def duration() {
- return экспоненциальный.next(1.0 / длительность_устаноки_на_станок)
- }
- def end() {
- станок.состояние = Состояние_станка.ГОТОВ_К_ОБРАБОТКЕ
- тележка.состояние = Состояние_тележки.СВОБОДНА
- робот.состояние = Состояние_робота.СВОБОДЕН
- робот.положение = станок.положение
- деталь.положение = станок.положение
- }
- }
- operation Обработка_на_станке(Положение положение_станка) {
- relevant станок = Станки.all.filter [
- положение == положение_станка && состояние == Состояние_станка.ГОТОВ_К_ОБРАБОТКЕ
- ].any
- relevant деталь = Детали.all.filter[положение == положение_станка].any
- def begin() {
- станок.состояние = Состояние_станка.РАБОТАЕТ
- деталь.состояние = Состояние_детали.ОБРАБАТЫВАЕТСЯ
- }
- def duration() {
- return станок.длительность_обработки
- }
- def end() {
- станок.состояние = Состояние_станка.ЗАКОНЧИЛ_ОБРАБОТКУ
- деталь.состояние = Состояние_детали.ОБРАБОТКА_ЗАКОНЧЕНА
- }
- }
- operation Перегрузка_со_станка_на_тележку(Положение положение_станка) {
- relevant станок = Станки.all.filter [
- положение == положение_станка && состояние == Состояние_станка.ЗАКОНЧИЛ_ОБРАБОТКУ
- ].any
- relevant робот = Роботы.all.filter [
- состояние == Состояние_робота.СВОБОДЕН && робот_связан_со_станком(номер, станок.номер)
- ].any
- relevant тележка = Тележки.all.filter [
- номер == 2 && состояние == Состояние_тележки.СВОБОДНА && положение == Положение.ТЕЛЕЖКА_2_Н
- ].any
- relevant деталь = Детали.all.filter[положение == положение_станка].any
- def begin() {
- станок.состояние = Состояние_станка.РАЗГРУЖАЕТСЯ
- робот.состояние = Состояние_робота.ЗАНЯТ
- тележка.состояние = Состояние_тележки.ЗАНЯТА
- деталь.состояние = Состояние_детали.ТРАНСПОРТИРУЕТСЯ
- }
- def duration() {
- return экспоненциальный.next(1.0 / длительность_разгрузки_станка)
- }
- def end() {
- станок.состояние = Состояние_станка.СВОБОДЕН
- робот.состояние = Состояние_робота.СВОБОДЕН
- тележка.состояние = Состояние_тележки.ЗАГРУЖЕНА
- робот.положение = Положение.ТЕЛЕЖКА_2_Н
- деталь.положение = робот.положение
- }
- }
- boolean робот_связан_со_станком(int номер_робота, int номер_станка)
- {
- if (номер_робота == 2) {
- return номер_станка == 1 || номер_станка == 2
- } else if (номер_робота == 3) {
- return номер_станка == 3
- }
- return false
- }
- operation Окончание_обработки_на_станке_3() {
- relevant станок = станок_3.onlyif[состояние == Состояние_станка.ЗАКОНЧИЛ_ОБРАБОТКУ]
- relevant деталь = Детали.all.filter[положение == станок.положение].any
- relevant накопитель = накопитель_2
- def begin() {
- станок.состояние = Состояние_станка.РАЗГРУЖАЕТСЯ
- деталь.состояние = Состояние_детали.ТРАНСПОРТИРУЕТСЯ
- }
- def duration() {
- return экспоненциальный.next(1.0 / длительность_разгрузки_станка)
- }
- def end() {
- станок.состояние = Состояние_станка.СВОБОДЕН
- деталь.положение = накопитель.положение
- деталь.состояние = Состояние_детали.ХРАНИТСЯ
- накопитель.текущее_количество = накопитель.текущее_количество + 1
- }
- }
- operation Возврат_робота() {
- relevant робот = Роботы.all.filter [
- положение != место_возврата_робота(положение) && состояние == Состояние_робота.СВОБОДЕН
- ].any
- def begin() {
- робот.состояние = Состояние_робота.ЗАНЯТ
- }
- def duration() {
- return длительность_возврата_робота
- }
- def end() {
- робот.состояние = Состояние_робота.СВОБОДЕН
- робот.положение = место_возврата_робота(робот.положение)
- }
- }
- Положение место_возврата_робота(Положение текущее_место) {
- if (текущее_место == Положение.ТЕЛЕЖКА_1_Н) {
- return Положение.НАКОПИТЕЛЬ_1
- } else if (текущее_место == Положение.СТАНОК_1 || текущее_место == Положение.СТАНОК_2 ||
- текущее_место == Положение.ТЕЛЕЖКА_2_Н) {
- return Положение.ТЕЛЕЖКА_1_К
- } else if (текущее_место == Положение.СТАНОК_3) {
- return Положение.ТЕЛЕЖКА_2_К
- }
- return текущее_место
- }
- operation Возврат_тележки(int номер_тележки, Положение откуда, Положение куда) {
- relevant тележка = Тележки.all.filter[положение == откуда && состояние == Состояние_тележки.СВОБОДНА].any
- def begin() {
- тележка.состояние = Состояние_тележки.ЗАНЯТА
- }
- def duration () {
- return экспоненциальный.next(1.0 / длительность_доставки_тележкой)
- }
- def end() {
- тележка.состояние = Состояние_тележки.СВОБОДНА
- тележка.положение = куда
- }
- }
- logic Model {
- activity погрузка_детали = new Activity(Погрузка_детали.create())
- activity доставка_детали_на_тележке_1 = new Activity(
- Доставка_детали.create(1, Положение.ТЕЛЕЖКА_1_Н, Положение.ТЕЛЕЖКА_1_К))
- activity доставка_детали_на_тележке_2 = new Activity(
- Доставка_детали.create(2, Положение.ТЕЛЕЖКА_2_Н, Положение.ТЕЛЕЖКА_2_К))
- activity установка_на_станке_1 = new Activity(
- Установка_на_станке.create(Положение.СТАНОК_1, Положение.ТЕЛЕЖКА_1_К))
- activity установка_на_станке_2 = new Activity(
- Установка_на_станке.create(Положение.СТАНОК_2, Положение.ТЕЛЕЖКА_1_К))
- activity установка_на_станке_3 = new Activity(
- Установка_на_станке.create(Положение.СТАНОК_3, Положение.ТЕЛЕЖКА_2_К))
- activity обработка_на_станке_1 = new Activity(Обработка_на_станке.create(Положение.СТАНОК_1))
- activity обработка_на_станке_2 = new Activity(Обработка_на_станке.create(Положение.СТАНОК_2))
- activity обработка_на_станке_3 = new Activity(Обработка_на_станке.create(Положение.СТАНОК_3))
- activity перегрузка_со_станка_1_на_тележку = new Activity(
- Перегрузка_со_станка_на_тележку.create(Положение.СТАНОК_1))
- activity перегрузка_со_станка_2_на_тележку = new Activity(
- Перегрузка_со_станка_на_тележку.create(Положение.СТАНОК_2))
- activity окончание_обработки_на_станке_3 = new Activity(Окончание_обработки_на_станке_3.create())
- activity возврат_робота = new Activity(Возврат_робота.create())
- activity возврат_тележки_1 = new Activity(Возврат_тележки.create(1, Положение.ТЕЛЕЖКА_1_К, Положение.ТЕЛЕЖКА_1_Н))
- activity возврат_тележки_2 = new Activity(Возврат_тележки.create(2, Положение.ТЕЛЕЖКА_2_К, Положение.ТЕЛЕЖКА_2_Н))
- }
- frame Frame {
- def init() {
- background = new Background(800, 600, RaoColor.WHITE)
- }
- def draw() {
- drawText('Время:', 10, 5)
- drawText(currentTime.toString(), 60, 5)
- drawText('станок 1', 10, 70)
- drawText(станок_1.состояние.toString(), 350, 70)
- drawText(станок_1.положение.toString(), 600, 70)
- drawText('станок 2', 10, 85)
- drawText(станок_2.состояние.toString(), 350, 85)
- drawText(станок_2.положение.toString(), 600, 85)
- drawText('станок 3', 10, 100)
- drawText(станок_3.состояние.toString(), 350, 100)
- drawText(станок_3.положение.toString(), 600, 100)
- drawText('тележка 1', 10, 125)
- drawText(тележка_1.состояние.toString(), 350, 125)
- drawText(тележка_1.положение.toString(), 600, 125)
- drawText('тележка 2', 10, 140)
- drawText(тележка_2.состояние.toString(), 350, 140)
- drawText(тележка_2.положение.toString(), 600, 140)
- drawText('робот 1', 10, 165)
- drawText(робот_1.состояние.toString(), 350, 165)
- drawText(робот_1.положение.toString(), 600, 165)
- drawText('робот 2', 10, 180)
- drawText(робот_2.состояние.toString(), 350, 180)
- drawText(робот_2.положение.toString(), 600, 180)
- drawText('робот 3', 10, 195)
- drawText(робот_3.состояние.toString(), 350, 195)
- drawText(робот_3.положение.toString(), 600, 195)
- drawText('Кол-во детале в 1-м накопителе', 10, 220)
- drawText(накопитель_1.текущее_количество.toString(), 350, 220)
- drawText('Кол-во детале в 2-м накопителе', 10, 235)
- drawText(накопитель_2.текущее_количество.toString(), 350, 235)
- drawText('деталь 1', 10, 300)
- drawText(деталь_1.положение.toString(), 350, 300)
- drawText(деталь_1.состояние.toString(), 600, 300)
- drawText('деталь 2', 10, 315)
- drawText(деталь_2.положение.toString(), 350, 315)
- drawText(деталь_2.состояние.toString(), 600, 315)
- drawText('деталь 3', 10, 330)
- drawText(деталь_3.положение.toString(), 350, 330)
- drawText(деталь_3.состояние.toString(), 600, 330)
- drawText('деталь 4', 10, 345)
- drawText(деталь_4.положение.toString(), 350, 345)
- drawText(деталь_4.состояние.toString(), 600, 345)
- drawText('деталь 5', 10, 360)
- drawText(деталь_5.положение.toString(), 350, 360)
- drawText(деталь_5.состояние.toString(), 600, 360)
- drawText('деталь 6', 10, 375)
- drawText(деталь_6.положение.toString(), 350, 375)
- drawText(деталь_6.состояние.toString(), 600, 375)
- drawText('деталь 7', 10, 390)
- drawText(деталь_7.положение.toString(), 350, 390)
- drawText(деталь_7.состояние.toString(), 600, 390)
- drawText('деталь 8', 10, 405)
- drawText(деталь_8.положение.toString(), 350, 405)
- drawText(деталь_8.состояние.toString(), 600, 405)
- drawText('деталь 9', 10, 420)
- drawText(деталь_9.положение.toString(), 350, 420)
- drawText(деталь_9.состояние.toString(), 600, 420)
- drawText('деталь 10', 10, 435)
- drawText(деталь_10.положение.toString(), 350, 435)
- drawText(деталь_10.состояние.toString(), 600, 435)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement