Chng 5: Xử
lý
phím
gọi
tầng
2.3.1 Có
phím
gọi tầng khi thang máy đang
dừng
(
SBN_7 ).
St
a
r
t
Key=62
?
Ye
s
0<Key
<61
?
Y
e
s
Key>curr
?
Ye
s
*Key_up=1
Up_mi
n=key
++
Ac_up
Busy=1;
run=0
Key<c
urr
?
Ye
s
*Key
dn=1
Dn_ma
x
=key
++
Ac_d
n
Busy=1;
run=1
Call
Do
or
E
nd
Hình 2-7:
Sơ đồ
thuật
toán
ch
ơn
g
trình xử lý phím
gọi
tầng
khi thang
đang
dừng ( run =0
).
1. Kiểm tra
phím
mở cửa nhanh, nếu có
thì
chuyển sang
b
ớc
7,
ng
ợc
lại
thì
chuyển sang
b
ớc 2.
2.
Phát
hiện xem phím bấm có
nằm
trong
khoảng
0 < key
< 61 không, nếu
đúng thì
sang
b
ớc
3,
ng
ợc l
ạ
i
sang
b
ớc
8. Trong
tr
ờng
hợp
này, chỉ
cho phép tín hiệu gọi tầng
v
à
tín hiệu mở cửa
nhanh, cấm
phím
dừng khẩn
cấp
và phím đóng
cửa
nhanh.
3. So
s
á
nh
tầng
đợc
gọi xem có nhỏ hơn tầng hiện
t
ạ
i
không,
nếu
đúng
thì
sang
b
ớc
6,
ng
ợc
lại thì
sang
b
ớc 4.
4. Kiểm tra xem
phím
bấm có
lơn hơn
tầng hiện
tại không,
nếu
đúng thì
sang b
ớc
5,
ng
ợc
lại
sang
b
ớc 8.
5.
Đ
a
tầng
đợc
gọi
vào hàng đợi lên; gán
gi
á
trị
nhỏ nhất
trong
hàng đợi
lê
n
= tầng
đợc
gọi;
tăng giá trị
số phần tử trong
hàng đợi lên
một
giá trị;
thiết lập cờ busy = 1; bật cờ run = 0 (
chạy lên
), sang
b
ớc
8
.
6.
Đ
a
tầng
đợc
gọi
vào hàng đợi
xuống;
gán
gi
á
trị
lớn
nhất
trong
hàng
đợi
xuống = tầng
đợc
gọi;
tăng
gi
á
trị
số phần tử trong
hàng
đợi
xuống
lên
một
giá trị;
thiết lập cờ busy = 1; bật cờ run
= 1 (
chạy
xuống ), sang
b
ớc
8
.
7. Gọi
ch
ơng
trình
mở -
đóng
cửa ( door ), sang
b
ớc 8.
8. Kết thúc
ch
ơng
trình.
++
A
c
_dn
2.3.2 Có
phím
gọi tầng khi thang máy đang chạy xuống
( SBN_8 ).
Star
t
Key=63
?
Temp=cur
r
Yes
Key=
61 ?
Tem
p=1 ?
Yes
Yes
Key=
62 ?
*Temp_dn
=1
?
Yes
Yes
Runni
ng=1
?
Y
es
Runni
ng=1
?
Y
es
*Key_d
n=1 ?
Y
es
Key<
=curr
?
*Temp
_
dn=1
++Ac
_dn
Close-fast=1
Open-
fast=1
*Key_dn=1
*Key_u
p=1 ?
Yes
*Key
_up=1
++Wt_u
p
*Up_min<key
?
No
No
Wt_up=1 ?
Up
_min=key
H
ì
nh
2-8:
Sơ
đ
ồ
thuật
toán
xử lý
phím
gọi
tầng
khi thang
đang
trong
hành
tr
ì
nh
chạy
xuống ( run=1
).
End
1. Kiểm tra
phím
dừng khẩn cấp có
m
ã
( Scan code ) = 63 ,
nếu có
thì
chuyển
sang
b
−
íc
16,
ng
−
îc
l¹i
chuyÓn sang
b
−
íc 2.
2. KiÓm tra
phÝm ®ãng
cöa nhanh cã
m·
( Scan code ) = 61,
nÕu cã
th×
chuyÓn sang
b
−
íc
3,
ng
−
îc
l¹i th×
chuyÓn sang
b
−
íc 5.
3. KiÓm tra cê ®ang
ch¹y
running, nÕu
®−îc
bËt th× chuyÓn
sang
b
−
íc 20,
kh«ng th×
sang
b
−
íc 4.
4. ThiÕt lËp cê
®ãng
cöa nhanh, sang
b
−
íc 20.
5. KiÓm tra
phÝm
më cöa nhanh cã
m·
( Scan code ) = 62,
nÕu cã th× chuyÓn sang
b
−
íc
6,
ng
−
îc
l¹i th×
chuyÓn sang
b
−
íc 8.
6. KiÓm tra cê ®ang
ch¹y
running, nÕu
®−îc
bËt th×
chuyÓn sang
b
−
íc 20,
kh«ng th×
sang
b
−
íc 7.
7. ThiÕt lËp cê më cöa nhanh, sang
b
−
íc 20.
8. So
s
á
nh
tầng
đợc
gọi với
giá
tr
ị
tầng hiện
tại,
nếu lớn
hơn
thì
chuyển
sang
b
ớc
9,
ng
ợc
lại
sang
b
ớc 11.
9. Kiểm tra xem
giá trị
tầng
đợc
gọi
đã
có trong
hàng đợi lên
hay
ch
a,
nếu có
thì
về
b
ớc
20,
ng
ợc
lại
sang
b
ớc 10.
10.
Đ
a
giá trị
tầng
đợc
gọi
v
à
o
hàng đợi lên; tăng giá trị
của
phần tử có trong
hàng đợi
l
ê
n
( Ac_up ) một
giá trị,
sang
b
ớc 20.
11. Kiểm tra xem
giá
trị tầng
đợc
gọi
đã
có trong
hàng đợi
xuống hay
ch
a,
nếu có
thì
về
b
ớc
20,
ng
ợc
lại
sang
b
ớc 12.
12.
Đ
a
giá
trị tầng
đợc
gọi
v
à
o
hàng đợi
xuống;
tăng giá
trị
của phần tử
có
trong
hàng đợi
xuống ( Wt_dn )
lên
một
giá trị,
sang
b
ớc 13.
13. Kiểm tra xem tầng
đợc
gọi có
phải là
phần tử
đ
ầu
tiên
trong
hàng
đợi
xuống
không,
nếu
đúng
sang
b
ớc
15,
ng
ợc
lại
sang
b
ớc
14.
14. Kiểm tra xem tầng
đợc
gọi có lớn hơn
giá
trị lớn nhất
trong hàng đợi xuống hay
không,
nếu
đúng
th
ì
sang
b
ớc
15,
ng
ợc
lại
sang
b
ớc 20.
15.
Gán giá
trị Dn_max =
giá trị
tầng
đợc
gọi, sang
b
ớc 20.
16.
Đ
a
giá trị
tầng hiện
tại
cộng 1
vào ô
nhớ
tạm
Temp, sang
b
ớc 17.
17. So
s
á
nh gi
á
trị
ô
nhớ Temp với 60, nếu
bằng
về
b
ớc
20,
ng
ợc
lại
sang b
ớc 18.
18. Kiểm tra
giá trị ô
nhớ Temp có trong
hàng đợi
hay
ch
a,
có
thì
chuyển
sang b
ớc
20,
ch
a
sang
b
ớc 19.
19.
Gán giá
tr
ị
ô
nhớ Temp
v
à
o
hàng đợi
lên, tăng
giá
trị số
phần tử có trong
hàng đợi
l
ê
n
lên
một
giá trị,
sang
b
ớc 20.
20. Kết thúc
ch
ơng
trình.
2.3.3 Có
phím
gọi tầng khi thang máy đang chạy lên (
SBN_9 ).
St
art
Key=63
?
Temp=curr+
1
Yes
Key=
61 ?
Temp=60
?
Yes
Ye
s
Key=
62 ?
*Temp
_up=1
?
Yes
Yes
Runn
ing=1
?
Yes
Y
es
Running=
1 ?
*Key_
up=1 ?
Y
es
Key>
curr ?
*Temp
_up=
1
++Ac
_up
Close-
fast=1
Open-
fast=1
*Key_
up=1
++Ac
_up
*Key_
dn=1 ?
Yes
*
Key_dn=1
++Wt
_dn
Dn_max<key
?
Ye
s
No
Wt_dn=1 ?
Dn_max=key
H
ì
nh
2-9
:
Sơ đồ
xử
lý
phím
gọi
tầ
ng
khi thang
đang
trong
hành
t
r
ì
nh
l
ê
n ( run =0 ).
End
1. Kiểm tra
phím
dừng khẩn cấp có
m
ã
( Scan code ) = 63 ,
nếu có
thì
chuyển
sang
b
−
íc
16,
ng
−
îc
l¹i
chuyÓn sang
b
−
íc 2.
2. KiÓm tra
phÝm ®ãng
cöa nhanh cã
m·
( Scan code ) = 61,
nÕu cã
th×
chuyÓn sang
b
−
íc
3,
ng
−
îc
l¹i th×
chuyÓn sang
b
−
íc 5.
3. KiÓm tra cê ®ang
ch¹y
running, nÕu
®−îc
bËt th×
chuyÓn sang
b
−
íc 20,
kh«ng th×
sang
b
−
íc 4.
4. ThiÕt lËp cê
®ãng
cöa nhanh, sang
b
−
íc 20.
5. KiÓm tra
phÝm
më cöa nhanh cã
m·
( Scan code ) = 62,
nÕu cã th× chuyÓn sang
b
−
íc
6,
ng
−
îc
l¹i th×
chuyÓn sang
b
−
íc 8.
6. KiÓm tra cê ®ang
ch¹y
running, nÕu
®−îc
bËt th× chuyÓn
sang
b
−
íc 20,
kh«ng th×
sang
b
−
íc 7.
7. ThiÕt lËp cê më cöa nhanh, sang
b
−
íc 20.
8. So
sánh
tầng
đợc
gọi với
giá
trị tầng hiện
tại,
nếu
nhỏ
hơn
hoặc
bằng
thì
chuyển sang
b
ớc
9,
ng
ợc
lại
sang
b
ớc 11.
9. Kiểm tra xem
giá
trị tầng
đợc
gọi
đã
có trong
hàng
đợi
xuống hay
ch
a,
nếu có
thì
về
b
ớc
20,
ng
ợc
lại
sang
b
ớc 10.
10.
Đ
a
giá
trị tầng
đợc
gọi
v
à
o
hàng đợi
xuống;
tăng giá
trị của phần tử
có
trong
hàng đợi
xuống ( Ac_dn )
lên
một
gi
á
trị,
sang
b
ớc 20.
11. Kiểm tra xem
giá trị
tầng
đợc
gọi
đã
có trong
hàng
đợi lên
hay
ch
a,
nếu có
thì
về
b
ớc
20,
ng
ợc
lại
sang
b
ớc 12.
12.
Đ
a
giá trị
tầng
đợc
gọi
v
à
o
hàng đợi lên; tăng giá trị
của phần tử có trong
hàng đợi
xuống ( Wt_up )
lên
một
giá trị,
sang
b
ớc 13.
13. Kiểm tra xem tầng
đợc
gọi có
phải là
phần tử
đầu
tiên
trong
hàng đợi
l
ê
n
không,
nếu
đúng
sang
b
ớc
15,
ng
ợc
lạ
i
sang
b
ớc
14.
14. Kiểm tra xem tầng
đợc
gọi có nhỏ
hơn giá
trị nhỏ
nhất ( Up_min )
tr
ong
hàng
đợi
l
ê
n
hay
không,
nếu
đúng
th
ì
sang
b
ớc
15,
ng
ợc
lại
sang
b
ớc
20.
15.
Gán giá
trị Up_min =
giá trị
tầng
đợc
gọi, sang
b
ớc
20.
16.
Đ
a
giá trị
tầng hiện
tại vào ô
nhớ
tạm
Temp, sang
b
ớc 17.
17. So
sánh giá trị ô
nhớ Temp với 1, nếu
bằng
về
b
ớc
20,
ng
ợc
lại
sang
b
ớc
18.
18. Kiểm tra
giá trị ô
nhớ Temp có trong
hàng đợi
hay
ch
a,
có
thì
chuyển
sang b
ớc
20,
ch
a
sang
b
ớc
19.
19.
Gán giá trị ô
nhớ Temp
vào hàng đợi
xuống,
tăng
gi
á
tr
ị
số phần tử có
tr
ong
hàng đợi
xuống
lên
một
giá trị,
sang
b
ớc 20.
20. Kết thúc
ch
ơng
trình.