Анимация
JavaScript
|
Главная Библионтека QUEUE и ELEVATOR. Узлы, представляющие деятельность людей, будут находиться в пуле после основной программы. 001 002 003 004 005 006 007 008 МОДЕЛЬ РАБОТЫ ЛНФТА IN EQU LLINK1 EQU RLINK1 EQU NEXTINST EQU OUT EQU LLINK2 EQU RLINK2 EQU 1:1 2:3 4:5 0:2 1:1 2:3 4:5 Определение полей внутри узлов. 009 * ТАБЛИЦЫ ФИКСИРОВАННОГО РАЗМЕРА И ЗАГОЛОВКИ СПИСКОВ
активное состояние. 048 D2 049 D3 CON О CON О Индикация состояния бездействия. Индикация открытых дверей, активное состояние 1 Следующая часть программы содержит основные подпрограммы и главные управляющие процедуры процесса моделирования. Подпрограммы INSERT и DELETE выполняют типичные манипуляции дважды связанными списками. Они помещают текущий узел в список QUEUE или ELEVATOR либо извлекают его из этих списков. (В программе "текущий узел" С всегда представлен индексным регистром 6.) Для работы со списком WAIT также предусмотрены некоторые подпрограммы. Так, подпрограмма SORTIN помещает текущий узел в список WAIT, сортируя его по полю NEXTTIME. А подпрограмма IMMED вставляет текущий узел в середину списка WAIT. Подпрограмма HOLD помещает текущий узел в список WAIT, причем значение поля NEXTTIME равно текущему времени плюс значение регистра А. Подпрограмма DELETEW удаляет текущий узел из списка WAIT. Процедура CYCLE является сердцевиной модели управления, поскольку именно она определяет, какое действие будет выполнено дальше (а именно - первый элемент списка WAIT, который, как нам теперь известно, не пуст), и переходит к его выполнению. Существует два особых входа в процедуру CYCLE: во-первых, CYCLE1 устанавливает значение NEXTINST в текущем узле, а во-вторых, HOLDC выполняет то же самое с дополнительным вызовом подпрограммы HOLD. Таким образом, результат выполнения команды "JMP HOLDC" со значением t в регистре А будет заключаться в приостановке действий на t единиц по моделируемой шкале времени с переходом в дальнейшем к следующему адресу.
Теперь рассмотрим код сопрограммы U. В начале шага U1 текущим узлом С является узел USER1 (см. выше строки 012-014) и указанные в строках 099 и 100 действия повторно помещают человека USER1 в список WAIT так, что следующий человек появится в системе спустя INTERTIME единиц времени. В строках 101-114 создается узел для этого нового человека и записываются этажи входа (IN) и выхода (OUT). Стек AVAIL является односвязным по полю RLINK1 каждого узла. Обратите внимание, что в строках 101-108 действие "С <= AVAIL" вьшолняется с помощью метода POOLMAX, 2.2.3-(7); при этом вряд ли здесь понадобится проверка события переполнения (OVERFLOW), так как общий размер пула (количество людей в данной модели работы лифта в произвольный момент времени) едва ли превышает 10 узлов (40 слов). Возврат узла в стек AVAIL представлен в строках 156-158. Во всей этой программе индексный регистр 4 равен переменной FLOOR, а индексный регистр 5 положителен, отрицателен или равен нулю в зависимости от текущего состояния, т. е. при выполнении условия STATE = GOINGUP. STATE = GOINGDOWN или STATE = NEUTRAL соответственно. Переменные GALLUP [j], CALLCAR [j] и CALLDOWN[j] занимают соответственно поля (1:1), (3:3) и (5:5) ячеек CALL-1-j".
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 [ 106 ] 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 |