Đư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
Trang 1Chương 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 art Key=62 ? Yes
0<Key
<61 ? Y es Key>curr ?
Yes
*Key_up=1 Up_min=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 Door
E nd
Hình 2-7: Sơ đồ thuật toán
chương trình xử lý phím gọi tầng khi thang đang dừng ( run =0 )
Trang 21 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
Trang 32.3.2 Có phím gọi tầng khi thang máy đang chạy xuống ( SBN_8 ).
Start
Key=63 ? Temp=cur
r
Yes Key=
61 ? Temp=1 ?
Yes
Yes Key=
62 ?
*Temp_dn
=1 ? Yes
Yes Runni
ng=1
?
Y
es Running=1
?
Y
es*Key_dn=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_up
*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
Trang 4sang 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
Trang 58 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
Trang 62.3.3 Có phím gọi tầng khi thang máy đang chạy lên ( SBN_9 ).
Start
Key=63 ? Temp=curr+
1
Yes Key=
61 ?
Temp=60 ? Yes
Yes Key=
62 ? *Temp_up=1
?
Yes
Yes Runn
ing=1
?
Yes
Y
es Running=1 ? *Key_up=1 ? YesKey>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 ?
Yes
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 trì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
Trang 7sang 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
Trang 88 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 ) trong 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
Trang 919 Gán giá trị ô nhớ Temp vào hàng đợi xuống, tăng giá trị
số phần tử có trong hàng đợi xuống lên một giá trị, sang bước 20
20 Kết thúc chương trình