Advertisement
Guest User

Untitled

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