Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 16 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
16
Dung lượng
1,53 MB
Nội dung
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 mã 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 ), 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 [...]... 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 ... 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... 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 (... 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... 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... 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... 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 . 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. 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. 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ở