Chương trình ngắt đọc phím gọi thang

73. Kiểm tra số phần tử trong hàng đợi xuống Wt_up,

Wn_up = 0 thì chuyển sang bước74, 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ước77,ngược lại chuyển sang bước76.

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ước78.

 

pdf16 trang | Chia sẻ: thienmai908 | Lượt xem: 1419 | Lượt tải: 0download
Nội dung tài liệu Chương trình ngắt đọc phím gọi thang, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Chương 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 mã của phí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 BellKeyboard Y e s bu sy =0 ? B e llKeyboard Yes Y e s Yes Yes Close =1 ?Over_weight ? Run=0? Over_weight? Close=1? Y e s Keyboard Ru nni ng =1Rundn S0 3 =1 ? Y e s -- Cu rre ntResetS03,S04,S05 Y e s S0 5 =1 ? ++ Cu rre ntResetS03,S04,S05 Y e s S0 5 =1 ? Running=1Run up S03=1 ? Keyboard Y e s Temp=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 ++CurrentResetS03,S04,S05 S05 =1 ? Ke yb oa rd Ac_u p=0 ? Yes *Te mp _dn =1 ? Y e s Te mp =U p_ min ? Y e s Slo w_ do wn Te mp =D n_ ma x? Y e s Slo w_ do wn YesAc_up=0 ? *Te mp _up =1 ? Y e s Ke yb oa rd ++ Cu rre ntResetS03,S04,S05 Yes S0 5= 1 ? Slow_down 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 Stop S05 =1 ? Yes S05 =1 ? Yes --Current*Curr_dn=0--Ac_dnSet TIM00 S0 5 =1 ? Y e s S t o p S05 =1 ? Yes ++ es Call Door Call Door Curr_dn = 0 --Wt_dn Current*Curr_up=0--Ac_up Set TI M00 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 Door Ca ll Do or YesOpen_fast? Open_fast ?Y Y e s Y es Ca ll Do or Yes Busy = 0 Cal l Do orCurr_up =0--Wt_up 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 ?Yes 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 YesDn_max=curr ? Yes Dn_m ax>cu rr ? YesWt_dn=0 ? Busy = 0 Run = 0Ac_up=Wt_upWt_up =0 R un = 1 Ac_dn=Wt_dnWt_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 ), và 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 là 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 và 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 ), và 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 là 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 và 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 có đủ đ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 mô phỏng thang máy trên máy tính.

Các file đính kèm theo tài liệu này:

  • pdfchuong_7_356.pdf
Tài liệu liên quan