Advertisement
Guest User

Untitled

a guest
Oct 20th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 22.88 KB | None | 0 0
  1. constant длительность_погрузки_на_тележку = 1.5
  2. constant длительность_доставки_тележкой = 2.0
  3. constant длительность_устаноки_на_станок = 1.0
  4. constant длительность_разгрузки_станка = 0.5
  5. constant длительность_возврата_робота = 0.2
  6.  
  7. sequence экспоненциальный = new Exponential(123456789)
  8.  
  9. enum Положение {
  10.     СТАНОК_1, СТАНОК_2, СТАНОК_3, НАКОПИТЕЛЬ_1, НАКОПИТЕЛЬ_3, НАКОПИТЕЛЬ_2, ТЕЛЕЖКА_1_Н, ТЕЛЕЖКА_1_К, ТЕЛЕЖКА_2_Н, ТЕЛЕЖКА_2_К, НИГДЕ
  11. }
  12.  
  13. type Накопители {
  14.     int номер
  15.     Положение положение
  16.     int текущее_количество
  17. }
  18.  
  19. resource накопитель_1 = Накопители.create(1, Положение.НАКОПИТЕЛЬ_1, 10)
  20. resource накопитель_2 = Накопители.create(2, Положение.НАКОПИТЕЛЬ_2, 0)
  21. resource накопитель_3 = Накопители.create(3, Положение.НАКОПИТЕЛЬ_3, 10)
  22.  
  23. enum Состояние_тележки {СВОБОДНА, ЗАНЯТА, ЗАГРУЖЕНА, ПЕРЕМЕЩАЕТСЯ, ПРИБЫЛА, ОЖИДАЕТ}
  24. type Тележки {
  25.     int номер
  26.     Положение положение
  27.     Состояние_тележки состояние
  28. }
  29. resource тележка_1 = Тележки.create(1, Положение.ТЕЛЕЖКА_1_Н, Состояние_тележки.СВОБОДНА)
  30. resource тележка_2 = Тележки.create(2, Положение.ТЕЛЕЖКА_2_Н, Состояние_тележки.СВОБОДНА)
  31.  
  32. enum Состояние_робота {СВОБОДЕН, ЗАНЯТ}
  33. type Роботы {
  34.     int номер
  35.     Положение положение
  36.     Состояние_робота состояние
  37. }
  38. resource робот_1 = Роботы.create(1, Положение.НАКОПИТЕЛЬ_1, Состояние_робота.СВОБОДЕН)
  39. resource робот_1 = Роботы.create(1, Положение.НАКОПИТЕЛЬ_3, Состояние_робота.СВОБОДЕН)
  40. resource робот_2 = Роботы.create(2, Положение.ТЕЛЕЖКА_1_К, Состояние_робота.СВОБОДЕН)
  41. resource робот_3 = Роботы.create(3, Положение.ТЕЛЕЖКА_2_К, Состояние_робота.СВОБОДЕН)
  42.  
  43. enum Состояние_станка {СВОБОДЕН, ЗАГРУЖАЕТСЯ, ГОТОВ_К_ОБРАБОТКЕ, РАБОТАЕТ, РАЗГРУЖАЕТСЯ, ЗАКОНЧИЛ_ОБРАБОТКУ}
  44. type Станки {
  45.     int номер
  46.     Положение положение
  47.     Состояние_станка состояние
  48.     double длительность_обработки
  49. }
  50. resource станок_1 = Станки.create(1, Положение.СТАНОК_1, Состояние_станка.СВОБОДЕН, 28)
  51. resource станок_2 = Станки.create(2, Положение.СТАНОК_2, Состояние_станка.СВОБОДЕН, 28)
  52. resource станок_3 = Станки.create(3, Положение.СТАНОК_3, Состояние_станка.СВОБОДЕН, 15)
  53.  
  54. enum Состояние_детали {ХРАНИТСЯ, ТРАНСПОРТИРУЕТСЯ, ОБРАБАТЫВАЕТСЯ, ОБРАБОТКА_ЗАКОНЧЕНА}
  55. type Детали {
  56.     int номер
  57.     Положение положение
  58.     Состояние_детали состояние
  59. }
  60. resource деталь_1 = Детали.create(1, Положение.НАКОПИТЕЛЬ_1, Состояние_детали.ХРАНИТСЯ)
  61. resource деталь_2 = Детали.create(2, Положение.НАКОПИТЕЛЬ_1, Состояние_детали.ХРАНИТСЯ)
  62. resource деталь_3 = Детали.create(3, Положение.НАКОПИТЕЛЬ_1, Состояние_детали.ХРАНИТСЯ)
  63. resource деталь_4 = Детали.create(4, Положение.НАКОПИТЕЛЬ_1, Состояние_детали.ХРАНИТСЯ)
  64. resource деталь_5 = Детали.create(5, Положение.НАКОПИТЕЛЬ_1, Состояние_детали.ХРАНИТСЯ)
  65. resource деталь_6 = Детали.create(6, Положение.НАКОПИТЕЛЬ_1, Состояние_детали.ХРАНИТСЯ)
  66. resource деталь_7 = Детали.create(7, Положение.НАКОПИТЕЛЬ_1, Состояние_детали.ХРАНИТСЯ)
  67. resource деталь_8 = Детали.create(8, Положение.НАКОПИТЕЛЬ_1, Состояние_детали.ХРАНИТСЯ)
  68. resource деталь_9 = Детали.create(9, Положение.НАКОПИТЕЛЬ_1, Состояние_детали.ХРАНИТСЯ)
  69. resource деталь_10 = Детали.create(10, Положение.НАКОПИТЕЛЬ_1, Состояние_детали.ХРАНИТСЯ)
  70. resource деталь_11 = Детали.create(1, Положение.НАКОПИТЕЛЬ_3, Состояние_детали.ХРАНИТСЯ)
  71. resource деталь_12 = Детали.create(2, Положение.НАКОПИТЕЛЬ_3, Состояние_детали.ХРАНИТСЯ)
  72. resource деталь_13 = Детали.create(3, Положение.НАКОПИТЕЛЬ_3, Состояние_детали.ХРАНИТСЯ)
  73. resource деталь_14 = Детали.create(4, Положение.НАКОПИТЕЛЬ_3, Состояние_детали.ХРАНИТСЯ)
  74. resource деталь_15 = Детали.create(5, Положение.НАКОПИТЕЛЬ_3, Состояние_детали.ХРАНИТСЯ)
  75. resource деталь_16 = Детали.create(6, Положение.НАКОПИТЕЛЬ_3, Состояние_детали.ХРАНИТСЯ)
  76. resource деталь_17 = Детали.create(7, Положение.НАКОПИТЕЛЬ_3, Состояние_детали.ХРАНИТСЯ)
  77. resource деталь_18 = Детали.create(8, Положение.НАКОПИТЕЛЬ_3, Состояние_детали.ХРАНИТСЯ)
  78. resource деталь_19 = Детали.create(9, Положение.НАКОПИТЕЛЬ_3, Состояние_детали.ХРАНИТСЯ)
  79. resource деталь_20 = Детали.create(10, Положение.НАКОПИТЕЛЬ_3, Состояние_детали.ХРАНИТСЯ)
  80.  
  81. def terminateCondition() {
  82.     return накопитель_2.текущее_количество == 10
  83. }
  84.  
  85. operation Погрузка_детали() {
  86.     relevant накопитель = Накопители.all.filter[номер == 1 && текущее_количество > 0].any
  87.     relevant деталь = Детали.all.filter[положение == Положение.НАКОПИТЕЛЬ_1].any
  88.     relevant робот = Роботы.all.filter [
  89.         номер == 1 && положение == Положение.НАКОПИТЕЛЬ_1 && состояние == Состояние_робота.СВОБОДЕН
  90.     ].any
  91.     relevant тележка = Тележки.all.filter [
  92.         номер == 1 && положение == Положение.ТЕЛЕЖКА_1_Н && состояние == Состояние_тележки.СВОБОДНА
  93.     ].any
  94.  
  95.     def begin() {
  96.         накопитель.текущее_количество = накопитель.текущее_количество - 1
  97.         деталь.состояние = Состояние_детали.ТРАНСПОРТИРУЕТСЯ
  98.         робот.состояние = Состояние_робота.ЗАНЯТ
  99.         тележка.состояние = Состояние_тележки.ЗАНЯТА
  100.  
  101.         робот.положение = Положение.НИГДЕ
  102.         деталь.положение = робот.положение
  103.     }
  104.  
  105.     def duration() {
  106.         return экспоненциальный.next(1.0 / длительность_погрузки_на_тележку)
  107.     }
  108.  
  109.     def end() {
  110.         робот.состояние = Состояние_робота.СВОБОДЕН
  111.         тележка.состояние = Состояние_тележки.ЗАГРУЖЕНА
  112.  
  113.         робот.положение = Положение.ТЕЛЕЖКА_1_Н
  114.         деталь.положение = робот.положение
  115.     }
  116. }
  117.  
  118. operation Доставка_детали(int номер_тележки, Положение откуда, Положение куда) {
  119.     relevant тележка = Тележки.all.filter[положение == откуда && состояние == Состояние_тележки.ЗАГРУЖЕНА].any
  120.     relevant деталь = Детали.all.filter[положение == откуда].any
  121.  
  122.     def begin() {
  123.         тележка.состояние = Состояние_тележки.ПЕРЕМЕЩАЕТСЯ
  124.     }
  125.  
  126.     def duration() {
  127.         return экспоненциальный.next(1.0 / длительность_доставки_тележкой)
  128.     }
  129.  
  130.     def end() {
  131.         тележка.состояние = Состояние_тележки.ПРИБЫЛА
  132.  
  133.         тележка.положение = куда
  134.         деталь.положение = тележка.положение
  135.     }
  136. }
  137.  
  138. operation Установка_на_станке(Положение положение_станка, Положение положение_детали) {
  139.     relevant станок = Станки.all.filter[положение == положение_станка && состояние == Состояние_станка.СВОБОДЕН].any
  140.     relevant тележка = Тележки.all.filter[положение == положение_детали && состояние == Состояние_тележки.ПРИБЫЛА].any
  141.     relevant робот = Роботы.all.filter[положение == положение_детали && состояние == Состояние_робота.СВОБОДЕН].any
  142.     relevant деталь = Детали.all.filter[положение == положение_детали].any
  143.  
  144.     def begin() {
  145.         станок.состояние = Состояние_станка.ЗАГРУЖАЕТСЯ
  146.         тележка.состояние = Состояние_тележки.ОЖИДАЕТ
  147.         робот.состояние = Состояние_робота.ЗАНЯТ
  148.     }
  149.  
  150.     def duration() {
  151.         return экспоненциальный.next(1.0 / длительность_устаноки_на_станок)
  152.     }
  153.  
  154.     def end() {
  155.         станок.состояние = Состояние_станка.ГОТОВ_К_ОБРАБОТКЕ
  156.         тележка.состояние = Состояние_тележки.СВОБОДНА
  157.         робот.состояние = Состояние_робота.СВОБОДЕН
  158.  
  159.         робот.положение = станок.положение
  160.         деталь.положение = станок.положение
  161.     }
  162. }
  163.  
  164. operation Обработка_на_станке(Положение положение_станка) {
  165.     relevant станок = Станки.all.filter [
  166.         положение == положение_станка && состояние == Состояние_станка.ГОТОВ_К_ОБРАБОТКЕ
  167.     ].any
  168.     relevant деталь = Детали.all.filter[положение == положение_станка].any
  169.  
  170.     def begin() {
  171.         станок.состояние = Состояние_станка.РАБОТАЕТ
  172.         деталь.состояние = Состояние_детали.ОБРАБАТЫВАЕТСЯ
  173.     }
  174.  
  175.     def duration() {
  176.         return станок.длительность_обработки
  177.     }
  178.  
  179.     def end() {
  180.         станок.состояние = Состояние_станка.ЗАКОНЧИЛ_ОБРАБОТКУ
  181.         деталь.состояние = Состояние_детали.ОБРАБОТКА_ЗАКОНЧЕНА
  182.     }
  183. }
  184.  
  185. operation Перегрузка_со_станка_на_тележку(Положение положение_станка) {
  186.     relevant станок = Станки.all.filter [
  187.         положение == положение_станка && состояние == Состояние_станка.ЗАКОНЧИЛ_ОБРАБОТКУ
  188.     ].any
  189.     relevant робот = Роботы.all.filter [
  190.         состояние == Состояние_робота.СВОБОДЕН && робот_связан_со_станком(номер, станок.номер)
  191.     ].any
  192.     relevant тележка = Тележки.all.filter [
  193.         номер == 2 && состояние == Состояние_тележки.СВОБОДНА && положение == Положение.ТЕЛЕЖКА_2_Н
  194.     ].any
  195.     relevant деталь = Детали.all.filter[положение == положение_станка].any
  196.  
  197.     def begin() {
  198.         станок.состояние = Состояние_станка.РАЗГРУЖАЕТСЯ
  199.         робот.состояние = Состояние_робота.ЗАНЯТ
  200.         тележка.состояние = Состояние_тележки.ЗАНЯТА
  201.         деталь.состояние = Состояние_детали.ТРАНСПОРТИРУЕТСЯ
  202.     }
  203.  
  204.     def duration() {
  205.         return экспоненциальный.next(1.0 / длительность_разгрузки_станка)
  206.     }
  207.  
  208.     def end() {
  209.         станок.состояние = Состояние_станка.СВОБОДЕН
  210.         робот.состояние = Состояние_робота.СВОБОДЕН
  211.         тележка.состояние = Состояние_тележки.ЗАГРУЖЕНА
  212.  
  213.         робот.положение = Положение.ТЕЛЕЖКА_2_Н
  214.         деталь.положение = робот.положение
  215.     }
  216. }
  217.  
  218. boolean робот_связан_со_станком(int номер_робота, int номер_станка)
  219. {
  220.     if (номер_робота == 2) {
  221.         return номер_станка == 1 || номер_станка == 2
  222.     } else if (номер_робота == 3) {
  223.         return номер_станка == 3
  224.     }
  225.  
  226.     return false
  227. }
  228.  
  229. operation Окончание_обработки_на_станке_3() {
  230.     relevant станок = станок_3.onlyif[состояние == Состояние_станка.ЗАКОНЧИЛ_ОБРАБОТКУ]
  231.     relevant деталь = Детали.all.filter[положение == станок.положение].any
  232.     relevant накопитель = накопитель_2
  233.  
  234.     def begin() {
  235.         станок.состояние = Состояние_станка.РАЗГРУЖАЕТСЯ
  236.         деталь.состояние = Состояние_детали.ТРАНСПОРТИРУЕТСЯ
  237.     }
  238.  
  239.     def duration() {
  240.         return экспоненциальный.next(1.0 / длительность_разгрузки_станка)
  241.     }
  242.  
  243.     def end() {
  244.         станок.состояние = Состояние_станка.СВОБОДЕН
  245.         деталь.положение = накопитель.положение
  246.         деталь.состояние = Состояние_детали.ХРАНИТСЯ
  247.         накопитель.текущее_количество = накопитель.текущее_количество + 1
  248.     }
  249. }
  250.  
  251. operation Возврат_робота() {
  252.     relevant робот = Роботы.all.filter [
  253.         положение != место_возврата_робота(положение) && состояние == Состояние_робота.СВОБОДЕН
  254.     ].any
  255.  
  256.     def begin() {
  257.         робот.состояние = Состояние_робота.ЗАНЯТ
  258.     }
  259.  
  260.     def duration() {
  261.         return длительность_возврата_робота
  262.     }
  263.  
  264.     def end() {
  265.         робот.состояние = Состояние_робота.СВОБОДЕН
  266.         робот.положение = место_возврата_робота(робот.положение)
  267.     }
  268. }
  269.  
  270. Положение место_возврата_робота(Положение текущее_место) {
  271.     if (текущее_место == Положение.ТЕЛЕЖКА_1_Н) {
  272.         return Положение.НАКОПИТЕЛЬ_1
  273.     } else if (текущее_место == Положение.СТАНОК_1 || текущее_место == Положение.СТАНОК_2 ||
  274.         текущее_место == Положение.ТЕЛЕЖКА_2_Н) {
  275.         return Положение.ТЕЛЕЖКА_1_К
  276.     } else if (текущее_место == Положение.СТАНОК_3) {
  277.         return Положение.ТЕЛЕЖКА_2_К
  278.     }
  279.  
  280.     return текущее_место
  281. }
  282.  
  283. operation Возврат_тележки(int номер_тележки, Положение откуда, Положение куда) {
  284.     relevant тележка = Тележки.all.filter[положение == откуда && состояние == Состояние_тележки.СВОБОДНА].any
  285.  
  286.     def begin() {
  287.         тележка.состояние = Состояние_тележки.ЗАНЯТА
  288.     }
  289.  
  290.     def duration () {
  291.         return экспоненциальный.next(1.0 / длительность_доставки_тележкой)
  292.     }
  293.  
  294.     def end() {
  295.         тележка.состояние = Состояние_тележки.СВОБОДНА
  296.         тележка.положение = куда
  297.     }
  298. }
  299.  
  300. logic Model {
  301.     activity погрузка_детали = new Activity(Погрузка_детали.create())
  302.     activity доставка_детали_на_тележке_1 = new Activity(
  303.         Доставка_детали.create(1, Положение.ТЕЛЕЖКА_1_Н, Положение.ТЕЛЕЖКА_1_К))
  304.     activity доставка_детали_на_тележке_2 = new Activity(
  305.         Доставка_детали.create(2, Положение.ТЕЛЕЖКА_2_Н, Положение.ТЕЛЕЖКА_2_К))
  306.     activity установка_на_станке_1 = new Activity(
  307.         Установка_на_станке.create(Положение.СТАНОК_1, Положение.ТЕЛЕЖКА_1_К))
  308.     activity установка_на_станке_2 = new Activity(
  309.         Установка_на_станке.create(Положение.СТАНОК_2, Положение.ТЕЛЕЖКА_1_К))
  310.     activity установка_на_станке_3 = new Activity(
  311.         Установка_на_станке.create(Положение.СТАНОК_3, Положение.ТЕЛЕЖКА_2_К))
  312.     activity обработка_на_станке_1 = new Activity(Обработка_на_станке.create(Положение.СТАНОК_1))
  313.     activity обработка_на_станке_2 = new Activity(Обработка_на_станке.create(Положение.СТАНОК_2))
  314.     activity обработка_на_станке_3 = new Activity(Обработка_на_станке.create(Положение.СТАНОК_3))
  315.     activity перегрузка_со_станка_1_на_тележку = new Activity(
  316.         Перегрузка_со_станка_на_тележку.create(Положение.СТАНОК_1))
  317.     activity перегрузка_со_станка_2_на_тележку = new Activity(
  318.         Перегрузка_со_станка_на_тележку.create(Положение.СТАНОК_2))
  319.     activity окончание_обработки_на_станке_3 = new Activity(Окончание_обработки_на_станке_3.create())
  320.  
  321.     activity возврат_робота = new Activity(Возврат_робота.create())
  322.     activity возврат_тележки_1 = new Activity(Возврат_тележки.create(1, Положение.ТЕЛЕЖКА_1_К, Положение.ТЕЛЕЖКА_1_Н))
  323.     activity возврат_тележки_2 = new Activity(Возврат_тележки.create(2, Положение.ТЕЛЕЖКА_2_К, Положение.ТЕЛЕЖКА_2_Н))
  324. }
  325.  
  326. frame Frame {
  327.     def init() {
  328.         background = new Background(800, 600, RaoColor.WHITE)
  329.     }
  330.     def draw() {
  331.         drawText('Время:', 10, 5)
  332.         drawText(currentTime.toString(), 60, 5)
  333.  
  334.         drawText('станок 1', 10, 70)
  335.         drawText(станок_1.состояние.toString(), 350, 70)
  336.         drawText(станок_1.положение.toString(), 600, 70)
  337.         drawText('станок 2', 10, 85)
  338.         drawText(станок_2.состояние.toString(), 350, 85)
  339.         drawText(станок_2.положение.toString(), 600, 85)
  340.         drawText('станок 3', 10, 100)
  341.         drawText(станок_3.состояние.toString(), 350, 100)
  342.         drawText(станок_3.положение.toString(), 600, 100)
  343.  
  344.         drawText('тележка 1', 10, 125)
  345.         drawText(тележка_1.состояние.toString(), 350, 125)
  346.         drawText(тележка_1.положение.toString(), 600, 125)
  347.         drawText('тележка 2', 10, 140)
  348.         drawText(тележка_2.состояние.toString(), 350, 140)
  349.         drawText(тележка_2.положение.toString(), 600, 140)
  350.  
  351.         drawText('робот 1', 10, 165)
  352.         drawText(робот_1.состояние.toString(), 350, 165)
  353.         drawText(робот_1.положение.toString(), 600, 165)
  354.         drawText('робот 2', 10, 180)
  355.         drawText(робот_2.состояние.toString(), 350, 180)
  356.         drawText(робот_2.положение.toString(), 600, 180)
  357.         drawText('робот 3', 10, 195)
  358.         drawText(робот_3.состояние.toString(), 350, 195)
  359.         drawText(робот_3.положение.toString(), 600, 195)
  360.  
  361.         drawText('Кол-во детале в 1-м накопителе', 10, 220)
  362.         drawText(накопитель_1.текущее_количество.toString(), 350, 220)
  363.         drawText('Кол-во детале в 2-м накопителе', 10, 235)
  364.         drawText(накопитель_2.текущее_количество.toString(), 350, 235)
  365.  
  366.         drawText('деталь 1', 10, 300)
  367.         drawText(деталь_1.положение.toString(), 350, 300)
  368.         drawText(деталь_1.состояние.toString(), 600, 300)
  369.         drawText('деталь 2', 10, 315)
  370.         drawText(деталь_2.положение.toString(), 350, 315)
  371.         drawText(деталь_2.состояние.toString(), 600, 315)
  372.         drawText('деталь 3', 10, 330)
  373.         drawText(деталь_3.положение.toString(), 350, 330)
  374.         drawText(деталь_3.состояние.toString(), 600, 330)
  375.         drawText('деталь 4', 10, 345)
  376.         drawText(деталь_4.положение.toString(), 350, 345)
  377.         drawText(деталь_4.состояние.toString(), 600, 345)
  378.         drawText('деталь 5', 10, 360)
  379.         drawText(деталь_5.положение.toString(), 350, 360)
  380.         drawText(деталь_5.состояние.toString(), 600, 360)
  381.         drawText('деталь 6', 10, 375)
  382.         drawText(деталь_6.положение.toString(), 350, 375)
  383.         drawText(деталь_6.состояние.toString(), 600, 375)
  384.         drawText('деталь 7', 10, 390)
  385.         drawText(деталь_7.положение.toString(), 350, 390)
  386.         drawText(деталь_7.состояние.toString(), 600, 390)
  387.         drawText('деталь 8', 10, 405)
  388.         drawText(деталь_8.положение.toString(), 350, 405)
  389.         drawText(деталь_8.состояние.toString(), 600, 405)
  390.         drawText('деталь 9', 10, 420)
  391.         drawText(деталь_9.положение.toString(), 350, 420)
  392.         drawText(деталь_9.состояние.toString(), 600, 420)
  393.         drawText('деталь 10', 10, 435)
  394.         drawText(деталь_10.положение.toString(), 350, 435)
  395.         drawText(деталь_10.состояние.toString(), 600, 435)
  396.     }
  397. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement