Анимация
JavaScript


Главная  Библионтека 

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

P00LMAX(0:2)

POOLMAX <- C,

Предполагается, что переполнение не происходит.

0,6(FILINK1)

AVAIL

AVAIL <-RLINKl(AVAIL).

INFLOOR

rll <- INFLOOR (вычисляется подпрограммой VALUES).

0,6(IN)

IN(C) <- rll.

OUTFLOOR

rI2 <- OUTFLOOR

(вычисляется подпрограммой VALUES).

3,6(OUT)

OUT (С) Ч- rI2.

ENTA

Поместить константу 39 (код операции JMP)

в третье слово структур1>1 (6).

ENTA

U2. Получение сигнала и ожидание. Установить гА <- FLOOR.

DECA

FLOOR - IN.

TEMP

Сохранить значение С.

JANZ

Соверпшть пересод, если FLOOR ф IN.

ENT6

ELEVl

Установить С Ч- LOC(ELEVl).

2.6(NEXTINST)

Находится ли лифт на шаге Е6?

DECA

JANZ

ENTA

Если да, перейти к шагу ЕЗ.

2,6(NEXTINST)

DELETEW

Удалить его из списка WAIT

и повторно вставить в начало списка WAIT.

Совершить переход, если D3 = 0.

В противном случае присвоить D1 ненулевое значение.

Установить D3 <- 0.

IMMED

Вставить ELEV1 в начало списка WAIT.

(rll и rI2 изменены.)

DEC2 0.1

rI2 <- OUT - IN.

ENTA

Совершить переход, если лифт направляется вверх.

CALL,1(5:5)

Установить CALLDOWNCIN] <- 1.

CALL.1(1:1)

Установить CALLUPCIN] ч- 1.

Если D2 = 0, вызвать подпрограмму DECISION.

ELEVl+2(NEXTINST)

DECA

Если лифт находится на шаге Е1, вызвать

DECISION

подпрограмму DECISION.

TEMP

из. Вход в очередь.

0.6(IN)

ENTl

QUEUE,1

гП <- LOC(QUEUE[IN]).

INSERT

Вставить NODE (С) с правого конца QUEUE [IN].

GIVEUPTIME

HOLDC

Подождать GIVEUPTIME единиц времени.

0,6(IN)

U4. Откгз от длительного ожидания.

DECA

IN(C) - FLOOR.

JANZ



JANZ

DELETE

AVAIL

0,6(RLINK1)

AVAIL

CYCLE

DELETE

ENTl

ELEVATOR

INSERT

ENTA

з.б(оит)

CALL.2(3:3)

J5NZ

CYCLE

DEC2

ENT5

ENT6

ELEV2

DELETEW

ENTA

FLOOR = IN(C). Cm. упр. 7.

U6. Выход из лисЬта. NODE (С) удаляется

из QUEUE или ELEVATOR. AVAIL <= С.

Продолжить моделирование. U5. Вход в лифт. NODE (С) удаляется из QUEUE.

Вставить его с правой стороны списка ELEVATOR.

Установить CALLCAR [OUT (С)] <- 1. Совершить переход, если STATE ф NEUTRAL rI20UT(C) - FLOOR.

Установить направление движения для STATE Установить С <- L0C(ELEV2). Удалить шаг Е5 из списка WAIT

Повторить шаг Е5 спустя 25 единиц времени.

Код сопрограммы Е представляет собой очень прямолинейную реализацию приведенного выше полуформального описания. Вероятно, наиболее интересная его часть связана с подготовкой независимых действий лифта на шаге ЕЗ и поиском в списках ELEVATOR и QUEUE на шаге Е4.

* СОПРОГРАММА Е

CYCLE1

Установить NEXTINST r- El, перейти к CYCLE.

El. Ожидание вызова. (Никаких действий.)

HOLDC

Е2. Изменение состояния?

CALL+1,4

Движение вверх (GOINGUP).

CALL+2,4

CALL+3,4

CALL+4.4

Есть ли вызовы на верхние этажи

CALL-1.4(3:3)

Если нет, посылали ли пассажиры лифта

CALL-2,4(3:3)

запрос для перехода к нижним этажам?

CALL-3,4(3:3)

CALL-4,4(3:3)

CALL-1,4

Движение вниз GOINGDOWN.

CALL-2.4

Действия те же, что и в строках 178-186.

CALL+4,4(3:3)

ENN5

Изменить направление движения в STATE.

CALL,4

Установить переменные CALL равными нулю.

JANZ

Совершить переход при вызове обратного

направления;

ENT5

в противном случае установить STATE

NEUTRAL.



ENT6 ELEV3

E3. Открытие дверей.

LDA 0,6

Если шаг Е9 уже запланирован,

JANZ DELETEW

удалить его из списка WAIT.

ENTA 300

JMP HOLD

Запланировать шаг Е9 спустя 300 единиц времени.

ENT6 ELEV2

ENTA 76

JMP HOLD

Запланировать шаг Е5 спустя 76 единиц времени.

ST6 D2

Установить D2 не равной нулю.

ST6 DI

Установить D1 не равной нулю.

ENTA 20

ENT6 ELEVl

JMP HOLDC

ENTA 0,4

Е4. Выход из лифта и вход в него.

SLA 4

Ввести значение FLOOR в поле OUT регистра гА.

ENT6 ELEVATOR

С Ч- LOC(ELEVATOR).

LD6 3,6(LLINK2)

C<-LLINK2(C).

CMP6 =ELEVATOR=

Поиск в списке ELEVATOR справа налево.

JE IF

Если С = LOC(ELEVATOR), завершить поиск.

CMPA 3.6(OUT)

Сравнить OUT (С) с FLOOR.

JNE IB

Если они не равны, продолжить поиск;

ENTA U6

в противном случае приготовиться

JMP 2F

к переходу человека к шагу U6.

LD6 QUEUE+3.4(RLINK2)

Установить С <- RLINK2 (LOC (QUEUE [FLOOR])).

CMP6 3,6(RLINK2)

Верно ли, что С = RLINK2(C)?

JE IF

Если верно, то очередь пуста.

JMP DELETEW

Если неверно, отменить шаг U4 для этого человека.

ENTA U5

Подготовиться к замене шага U4 шагом U5.

STA 2,6(NEXTINST)

Установить NEXTINST(C).

JMP IMMED

Поместить человека в начало списка WAIT.

ENTA 25

JMP E4A

Подождать 25 единиц времени и повторить шаг Е4

STZ DI

Установить D1 <- 0.

ST6 D3

Установить D3 не равной нулю.

JMP CYCLE

Вернуться к моделированию других событий.

JMP HOLDC

LDA DI

Е5. Закрытие дверей.

JAZ *+3

Верно ли, что D1 = 0?

ENTA 40

Если неверно, значит, люди все еше входят или выходят.

JMP E5A

Подождать 40 единиц времени и повторить шаг Е5.

STZ D3

Если D1 = 0, установить D3 <- 0.

ENT6 ELEVl

ENTA 20

JMP HOLDC

Подождать 20 единиц времени, затем перейти к шагу Е6.

245 246

J5N *+2

STZ CALL.4(1:3)

Е6. Подготовка к движению. Если STATE ф GOINGDOWN,

J5P *+2

то сбросить значения CALLUP и CALLCAR для этого этажа.

STZ CAbL,4(3:5)

Если ф GOINGUP, сбросить CALLCAR и CALLDOWN



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