Tải bản đầy đủ (.pdf) (16 trang)

thiết kế hệ thống điều khiển thang máy, chương 7 pptx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.53 MB, 16 trang )

Chng 7:
Ch

ơng trình
ngắt đọc phím
gọi
thang
1. Kiểm tra xem
phím
bấm
tr

ớc
đó đã
đợc
xử lý
ch

a,
nếu
ch

a
(
key_buff
= 1 )
thì
sang
b

ớc


3, rồi ( key_buff2 = 0 )
thì
sang
b

ớc 2.
2.
Tính toán
v
à
đ
a
ra

của
p
h
í
m
đợc
gọi ( Scan code ), set
key_buff2=1.
3. Kết thúc
ch

ơng
trình.
Keyboard
2.7
Ch


¬ng
tr×nh
ch
Ýnh
S
ta
rt
Ke
yb
oa
rd
Keyboard
Bel
l
Keyboard
Y
e
s
bu
sy
=0
?
B
e
ll
Ke
yb
oa
rd

Yes
Y
e
s
Y
e
s
Yes
Close
=1
?
Over_weight
?
R
un
=0
?
Ov
er_
wei
ght
?
Clo
se
=1
?
Y
e
s
Keyboard

R
u
nni
ng
=1
R
u
n
dn
S0
3
=1
?
Y
e
s

C
u
rre
nt
Rese
t
S03,
S04,
S05
Y
e
s
S0

5
=1
?
++
C
u
rre
nt
Rese
t
S0
3,
S
04,
S0
5
Y
e
s
S0
5
=1
?
Running=1
Run up
S03=1
?
Keyboard
Y
e

s
T
em
p
=curr Keyboard
Ke
yb
oard
++Current
*Curr_up=0
Ac_dn=Wt_dn
Wt_dn=0
Run=1
Set
TIM00
Current
*Curr_dn=0
Ac_up=Wt_up
Wt_up=0
Run =0
Set
TIM00
Temp=curr+1
++C
urrent
Rese
t
S
03,
S0

4,
S
05
S05
=1
?
Ke
yb
oa
rd
Ac_u
p=0
?
Yes
*Te
mp
_dn
=1
?
Y
e
s
Te
m
p
=U
p
_
min
?

Y
e
s
Slo
w
_
d
o
w
n
T
e
m
p
=
D
n_
m
a
x
?
Y
e
s
Sl
o
w
_
do
wn

Yes
Ac
_u
p=
0 ?
*Te
mp
_up
=1
?
Y
e
s
Ke
yb
oa
rd
++
C
u
rre
nt
Rese
t
S03,
S04,
S05
Yes
S0
5=

1
?
Sl
ow
_do
w
n
S04
=1
?
Yes
S0
4
=1
?
Y
e
s
Slow_down
S04
=1
?
Yes
S
t
o
p
S
t
o

p
S0
4
=1
?
Y
e
s
Sto
p
S05
=1
?
Yes
S05
=1
?
Yes

C
urrent
*C
urr_dn=0
Ac_dn
Set
TI
M00
S0
5
=1

?
Y
e
s
S
t
o
p
S05
=1 ?
Yes
++
es
Call
Door
Ca
l
l
D
o
o
r
Curr_dn
= 0
Wt_dn
C
urrent
*C
urr_u
p

=0
Ac_up
S
e
t
T
I
M0
0
Open_f
ast
?
Ke
yboard
TI
M0
0=
0
?
TI
M0
0=
0
?
Ke
yb
oa
rd
Ke
yb

oa
rd
TI
M0
0=
0
?
TI
M0
0=
0
?
Keyboard
Open_f
ast
?
Yes
Yes
Call D
oor
Ca
ll
Do
or
Yes
Op
en
_fa
st
?

Op
en
_fa
st ?
Y
Y
e
s
Y
es
Ca
ll
Do
or
Yes
Busy
=
0
Cal
l
Do
or
Cur
r_u
p
=
0

Wt
_u

p
Wt
_u
p=
0 ?
Y
e
s
Y
e
s
Y
e
s
Ac
_d
n=
0 ?
Y
e
s
Wt
_u
p=
0 ?
Up
_m
in=
cur
r

?
Up
_m
in>
cur
r
?
Y
e
s
Ac
_u
p=
0
?
Y
e
s
Bu
sy
=
0
Bu
sy
=
0
Y
e
s
Ac

_u
p=
0
?
Ac_
up=
0
?
Y
e
s
Wt_
dn=0
?
Yes
Yes
Dn_
max
=cur
r
?
Yes
Dn_m
ax>cu
rr
?
Yes
Wt_
dn=
0

?
Busy
= 0
Run =
0
Ac_u
p
=Wt_u
p
Wt_up =0
R
un =
1
Ac_
dn=
Wt_
dn
Wt_dn
=0
H
ì
nh
2-13:
L

u
đồ
thuật
toán
của ch


ơng
tr
ì
nh ch
í
nh
điều khiển
thang m
á
y
nhà
cao
tầng.
1. Gọi
ch

ơng
trình đọc bàn phím
( Keyboard ), chuyển sang
b

ớc 2.
2. Kiểm tra cờ busy, busy = 0 chuyển sang
b

ớc
1,
busy=chuyển sang
b


ớc 3.
3. Kiểm tra cờ run, run = 0 chuyển sang
b

ớc
4, run = 1
chuyển sang
b

ớc 50.
4. Kiểm tra cờ Over_weight (
quá tải
), nếu Over_weight
= 0 chuyển
sang b

ớc
6, Over_weight = 1 chuyển sang
b

ớc 5.
5.
Báo chuông quá tải,
gọi
ch

ơng
trình
Keyboard, chuyển

sang
b

ớc 4.
6. Kiểm tra cờ đóng cửa
hoàn toàn
( Close ), close = 1
chuyển sang
b

ớc 8, ng

ợc
lại
chuyển sang
b

ớc 7.
7. Gọi
ch

ơng
trình đọc bàn phím
( Keyboard ), chuyển sang
b

ớc 6.
8. Thiết
lập
cờ running = 1 (

đang chạy
),

ra lệnh
chạy
lên, chuyển
sang b

ớc 9.
9. Kiểm tra sensor S03, nếu có chuyển sang
b

ớc
11,
ng

ợc
lại
chuyển
sang b

ớc 10.
10. Gọi
ch

ơng
trình đọc bàn phím
( Keyboard ) , chuyển sang
b


ớc 9.
11.
Gán
Temp = current + 1 ( current

tầng hiện
tại
), chuyển
sang
b

ớc 12.
12. Kiểm tra Ac_up ( số phần tử có trong
hàng đợi lên
cần
đợc
phục vụ trong
hành
trình hiện
tại
), Ac_up = 0
chuyển sang
b

ớc
37,
ng

ợc
lại

chuyển sang
b

ớc 13.
13. Kiểm tra xem tầng sắp
đến
có cần dừng
không,
nếu có
chuyển sang
b

ớc
17,
ng

ợc
lại
chuyển sang
b

ớc 14.
14. Gọi
ch

ơng
trình đọc bàn phím
( Keyboard ) , chuyển sang
b


ớc 15.
15. Kiểm tra sensor S05, nếu có chuyển sang
b

ớc
16,
ng

ợc
lại
chuyển
sang b

ớc 14.
16.
Tăng chỉ
số tầng hiện
tại,
Reset
các
sensor S03, S04, S05,
chuyển sang
b

ớc
9.
17. Ra lệnh
giảm
tốc, chuyển sang
b


ớc 18.
18. Kiểm tra Sensor S04, nếu có chuyển sang
b

ớc
19,
ng

ợc
lại
chuyển
sang b

ớc 18.
19. Ra lệnh dừng, chuyển sang
b

ớc 20.
20. Kiểm tra sensor S05, nếu có chuyển sang
b

ớc
21,
ng

ợc
lại
chuyển
sang b


ớc 20.
21.
Tăng giá trị
tầng hiện
tại, xoá hàng đợi,
trừ số phần tử
trong
hàng đợi lên đi
một
giá trị
, set TIM0 ( trễ thời gian
chờ mở cửa ), chuyển sang
b

ớc 22.
22. Kiểm tra TIM0, nếu hết thời gian trễ chuyển sang
b

ớc
25,
ng

ợc
lại
chuyển sang
b

ớc 23.
23. Gọi

ch

ơng
trình đọc bàn phím
( Keyboard ) , chuyển sang
b

ớc 24.
24. Kiểm tra cờ mở cửa nhanh ( Open_fast ), nếu có
chuyển sang
b

ớc 25,
ng

ợc
lại
chuyển sang
b

ớc 22.
25. Gọi
ch

ơng
trình
mở cửa ( door ) , chuyển sang
b

ớc 26.

26. Kiểm tra Ac_up ( số phần tử có trong
hàng đợi lên
cần
đợc
phục vụ trong
hành
trình hiện
tại
), Ac_up = 0
chuyển sang
b

ớc
27,
ng

ợc
lại
chuyển sang
b

ớc 1.
27. Kiểm tra số phần tử trong
hàng đợi
xuống Wt_dn,
Wn_dn = 0 thì chuyển sang
b

ớc
28,

ng

ợc
lại
chuyển
sang
b

ớc 29.
28. Thiết lập cờ busy = 0, chuyển sang
b

ớc 1.
29. So
sánh giá trị
Dn_max ( phần tử lớn nhất trong
hàng đợi
xuống ) với
tầng
hiện
tại
, nếu Dn_max = current
chuyển sang
b

ớc
30,
ng

ợc

lại
chuyển sang
b

ớc 31.
30. Gọi
ch

ơng
trình
mở cửa,
xoá
phần tử trong
hàng đợi
xuống,
giảm
số phần tử trong
hàng đợi
xuống
đi
một
giá trị,
chuyển sang
b

ớc 32.
31. So
sánh giá trị
Dn_max ( phần tử lớn nhất trong
hàng đợi

xuống ) với
tầng
hiện
tại
, nếu Dn_max > current chuyển
sang
b

ớc
1,
ng

ợc l

i
chuyển
sang b

ớc 33.
32. Kiểm tra xem có phần tử trong
hàng đợi
xuống
không,
nếu có chuyển
sang
b

ớc
33,
ng


ợc
lại
chuyển sang
b

ớc 28.
33. Thiết lập cờ run =1,
gán
Ac_dn = Wt_dn,
gán
Wt_dn
=0 ( chuyển phần
tử
từ
hàng
đ
ợi
chờ
đợc
phục vụ sang
hàng
đợi cần
đợc
phục vụ ), chuyển sang
b

ớc 1.
34. So
s

á
nh
giá
trị Temp với Dn_max, nếu Temp = Dn_max
thì chuyển
sang
b

ớc
38,
ng

ợc
lại
chuyển sang
b

ớc 35
35. Gọi
ch

ơng
trình đọc bàn phím
( Keyboard ), chuyển sang
b

ớc 37.
36. Kiểm tra sensor S05, nếu có chuyển sang
b


ớc
36,
ng

ợc
lại
chuyển
sang b

ớc 37.
37. Tăng
giá
trị tầng hiện
tại,
reset
các
sensor S03, S04

S05, chuyển
sang
b

ớc 9.
38. Ra lệnh
giảm
tốc, chuyển sang
b

ớc 39.
39. KiÓm tra Sensor S04, nÕu cã chuyÓn sang

b

íc
40,
ng

îc
l¹i
chuyÓn
sang b

íc 39.
40. Ra lÖnh dõng, chuyÓn sang
b

íc 41.
41. KiÓm tra sensor S05, nÕu cã chuyÓn sang
b

íc
42,
ng

îc
l¹i
chuyÓn
sang b

íc 41.
42.

Tăng giá
tr

tầng hiện
tại, xo
á
h
à
ng
đợi,
trừ số phần tử trong
hàng đợi
xu
ống
đi
một
giá trị
, chuyển Ac_dn = Wt_dn,
gán
Wt_dn = 0,
chuyển sang
b

ớc
44.
43. Thiết lập cờ run =1, set TIM0 ( trễ thời gian chờ mở cửa
),chuyển sang
b

ớc

44.
44. Kiểm tra TIM0, nếu hết thời gian trễ chuyển sang
b

ớc
47,
ng

ợc
lại
chuyển sang
b

ớc 45.
45. Gọi
ch

ơng
trình đọc bàn phím
( Keyboard ) , chuyển sang
b

ớc 46.
46. Kiểm tra cờ mở cửa nhanh ( Open_fast ), nếu có
chuyển sang
b

ớc 47, ng

ợc

lại
chuyển sang
b

ớc 44.
47. Gọi
ch

ơng
trình
mở cửa ( door ) , chuyển sang
b

ớc 48.
48. Kiểm tra Ac_dn ( số phần tử có trong
hàng
đợi xuống
cần
đợc
phục vụ trong hành trình hiện
tại
), Ac_dn = 0
chuyển sang
b

ớc
49,
ng

ợc

lại
chuyển sang
b

ớc 1.
49. Thiết lập cờ busy = 0, chuyển sang
b

ớc 1.
50. Kiểm tra cờ Over_weight (
quá tải
), nếu Over_weight
= 0 chuyển
sang b

ớc
51, Over_weight = 1 chuyển
sang
b

ớc 50.
51.
Báo chuông quá tải,
gọi
ch

ơng
trình
Keyboard, chuyển
sang

b

ớc 50.
52. Kiểm tra cờ đóng cửa
hoàn toàn
( Close ), close = 1
chuyển sang
b

ớc 53, ng

ợc
lại
chuyển sang
b

ớc 54.
53. Gọi
ch

ơng
trình đọc bàn phím
( Keyboard ), chuyển sang
b

ớc 52.
54. Thiết lập cờ running = 1 (
đang chạy
),


ra lệnh
chạy
xuống, chuyển
sang b

ớc 55.
55. Kiểm tra sensor S03, nếu có chuyển sang
b

ớc
57,
ng

ợc
lại
chuyển
sang b

ớc 56.
56. Gọi
ch

ơng
trình đọc bàn phím
( Keyboard ) , chuyển sang
b

ớc 57.
57.
Gán

Temp = current ( current

tầng hiện
tại
), chuyển
sang
b

ớc 58.
58. Kiểm tra Ac_dn ( số phần tử có trong
hàng đợi lên
cần
đợc
phục vụ trong
hành
trình hiện
tại
), Ac_dn = 0
chuyển sang
b

ớc
80,
ng

ợc
lại
chuyển sang
b


ớc 59.
59. Kiểm tra xem tầng sắp
đến
có cần dừng
không,
nếu có
chuyển sang
b

ớc
63,
ng

ợc
lại
chuyển sang
b

ớc 60.
60. Gọi
ch

ơng
trình đọc bàn phím
( Keyboard ) , chuyển sang
b

ớc 61.
61. Kiểm tra sensor S05, nếu có chuyển sang
b


ớc
62,
ng

ợc
lại
chuyển
sang b

ớc 59.
62.
Giảm
chỉ số tầng hiện
tại,
Reset
các
sensor S03, S04,
S05, chuyển
sang b

ớc 55.
63. Ra lệnh
giảm
tốc, chuyển sang
b

ớc 64.
64. Kiểm tra Sensor S04, nếu có chuyển sang
b


ớc
65,
ng

ợc
lại
chuyển
sang b

ớc 64.
65. Ra lệnh dừng, chuyển sang
b

ớc 66.
66. Kiểm tra sensor S05, nếu có chuyển sang
b

ớc
67,
ng

ợc
lại
chuyển
sang b

ớc 66.
67.
Giảm giá

trị tầng hiện
tại,
xoá hàng đợi, trừ số phần tử
trong hàng đợi xuống
đi
một
giá
trị , set TIM0 ( trễ thời
gian chờ mở cửa ), chuyển
sang b

ớc 68.
68. Kiểm tra TIM0, nếu hết thời gian trễ chuyển sang
b

ớc
69,
ng

ợc
lại
chuyển sang
b

ớc 71.
69. Gọi
ch

ơng
trình đọc bàn phím

( Keyboard ) , chuyển sang
b

ớc 70.
70. Kiểm tra cờ mở cửa nhanh ( Open_fast ), nếu có
chuyển sang
b

ớc 71, ng

ợc
lại
chuyển sang
b

ớc 68.
71. Gọi
ch

ơng
trình
mở cửa ( door ) , chuyển sang
b

ớc 72.
72. Kiểm tra Ac_dn ( số phần tử có trong
hàng đợi lên
cần
đợc
phục vụ trong

hành
trình hiện
tại
), Ac_dn = 0
chuyển sang
b

ớc
73,
ng

ợc
lại
chuyển sang
b

ớc 1.
73. Kiểm tra số phần tử trong
hàng đợi
xuống Wt_up,
Wn_up = 0 thì chuyển sang
b

ớc
74,
ng

ợc
lại
chuyển

sang
b

ớc 75.
74. Thiết lập cờ busy = 0, chuyển sang
b

ớc 1.
75. So
sánh
gi
á
trị
Up_min ( phần tử nhỏ
nhất
trong
hàng đợi
lên
) với tầng hiện
tại
, nếu Up_min = current chuyển
sang
b

ớc
77,
ng

ợc
lại

chuyển
sang b

ớc 76.
76. Gọi
ch
ơ
ng
trình
mở cửa,
xoá
phần tử trong
hàng đợi lên,
giảm
số phần
tử
trong
hàng đợi lên đi
một
giá trị,
chuyển sang
b

ớc 78.
77. So
sánh
gi
á
trị
Up_min ( phần tử nhỏ

nhất
trong
hàng đợi
lên
) với tầng hiện
tại
, nếu Up_min > current chuyển
sang
b

ớc
1,
ng

ợc
lại
chuyển sang
b

ớc
79.
78. Kiểm tra xem có phần tử trong
hàng
đợi lên không,
nếu có chuyển
sang b

ớc
79,
ng


ợc
lại
chuyển sang
b

ớc 74.
79. Thiết lập cờ run =1,
gán
Ac_up = Wt_up,
gán
Wt_up
=0 ( chuyển phần
tử
từ
hàng
đ
ợi
chờ
đợc
phục vụ sang
hàng
đợi cần
đợc
phục vụ ), chuyển sang
b

ớc 1.
80. So
sánh

gi
á
trị Temp với Up_min, nếu Temp = Up_min
thì chuyển
sang
b

ớc
84,
ng

ợc
lại
chuyển sang
b

ớc 81.
81. Gọi
ch

ơng
trình đọc bàn phím
( Keyboard ), chuyển sang
b

ớc 82.
82. Kiểm tra sensor S05, nếu có chuyển sang
b

ớc

83,
ng

ợc
lại
chuyển
sang
b

ớc 80.
83.
Giảm giá
trị tầng hiện
tại,
reset
các
sensor S03, S04

S05, chuyển
sang b

ớc 55.
84. Ra lệnh
giảm
tốc, chuyển
sang
b

ớc 85.
85. Kiểm tra Sensor S04, nếu có chuyển sang

b

ớc
86,
ng

ợc
lại
chuyển
sang b

ớc 85.
86. Ra lệnh dừng, chuyển
sang
b

ớc 87.
87. Kiểm tra sensor S05, nếu có chuyển sang
b

ớc
88,
ng

ợc
lại
chuyển
sang b

ớc 87.

88.
Giảm giá trị
tầng hiện
tại, xoá hàng đợi,
trừ số phần tử
trong
hàng đợi lên đi
một
giá trị
, chuyển Ac_up = Wt_up,
gán
Wt_up = 0,
chuyển sang
b

ớc 89.
89. Thiết lập cờ run =1, set TIM0 ( trễ thời gian chờ mở cửa
),chuyển sang
b

ớc
90.
90. Kiểm tra TIM0, nếu hết thời gian trễ chuyển sang
b

ớc
93,
ng

ợc

lại
chuyển sang
b

ớc 91.
91. Gọi
ch

ơng
trình đọc bàn phím
( Keyboard ) ,
chuyển sang
b

ớc 92.
92. Kiểm tra cờ mở cửa nhanh ( Open_fast ), nếu có
chuyển sang
b

ớc 93, ng

ợc
lại
chuyển sang
b

ớc 90.
93. Gọi
ch


ơng
trình
mở cửa ( door ) , chuyển
sang
b

ớc 94.
94. Kiểm tra Ac_up ( số phần tử có trong
hàng
đợi xuống
cần
đợc
phục vụ trong hành trình hiện
tại
), Ac_up = 0
chuyển sang
b

ớc
95,
ng

ợc
lại
chuyển sang
b

ớc 1.
95. Thiết lập cờ busy = 0, chuyển
sang

b

ớc 1.
Trên cơ
sở
các
thuật
toán đã
trình
bày,
ch

ơng
trình
điều
khiển thang máy
đã
đợc
viết theo
sơ đồ
Ladder
trên
phần mềm
SYSMAC
do
hãng
OMRON
cung
cấp,
đã

đợc soát
lỗi
và nạp
v
à
o
PLC. Tuy
nhiên
do
không

đủ điều
kiện (thiếu
các
bàn phím đầu
v
à
o,
các rơ
le trung gian v.vv ) nên không thể
chạy
thử
nghiệm
ch

ơng
trình. Do đó trong phần tiếp theo, em sẽ trình
bày
ch


ơng
trình

phỏng thang
máy trên máy
tính.

×