Chơng trình chính Start

Một phần của tài liệu Tín hiệu hóa và lý thuyết chung về tối u luật điều khiển thang máy (Trang 27 - 33)

Start Keyboard busy=0 ? Run=0 ? Running=1 Run up Ac_up=0 ? S03=1 ? Keyboard *Temp_up=1 ? Slow_down Stop S04 =1 ? S05 =1 ? ++Current *Curr_up=0 --Ac_up Set TIM00 Call Door TIM00=0 ? Ac_up=0 ? Wt_dn=0 ? Call Door Curr_dn = 0 --Wt_dn Temp=curr+1 Dn_max>curr ? Dn_max=curr ? Run = 1 Ac_dn=Wt_dn Wt_dn =0 Wt_dn=0 ? Over_weight ? Bell Keyboard Keyboard Keyboard Open_fast ? Keyboard Close =1 ? S05=1 ? ++Current Reset S03,S04,S05 Busy = 0 Temp=Dn_max? Keyboard S05 =1 ? ++Current Reset S03,S04,S05 ++Current *Curr_up=0 Ac_dn=Wt_dn Wt_dn=0 Ac_up=0 ? TIM00=0 ? Call Door S04 =1 ? Stop S05 =1 ? Slow_down Open_fast ? Keyboard Busy = 0 Run =1 Set TIM00 Keyboard Bell Keyboard Close =1 ? Over_weight ? Running=1 Run dn --Current Reset S03,S04,S05 S05 =1 ? S03 =1 ? Temp=curr Keyboard Ac_up=0 ? Temp=Up_min? Slow_down *Temp_dn=1 ? Slow_down S04 =1 ? Stop S04 =1 ? Stop S05 =1 ? --Current *Curr_dn=0 Ac_up=Wt_up Wt_up=0 S05 =1 ? --Current *Curr_dn=0 --Ac_dn Set TIM00 Set TIM00Run =0

Keyboard TIM00=0 ? TIM00=0 ? Open_fast ? Call Door Call Door Busy = 0 Ac_up=0 ? Ac_dn=0 ? Wt_up=0 ? Run = 0 Ac_up=Wt_up Wt_up =0 Wt_up=0 ? Call Door Curr_up = 0 --Wt_up Up_min=curr ? Up_min>curr ? Busy = 0 Open_fast ? Keyboard Keyboard ++Current Reset S03,S04,S05 Keyboard S05 =1 ? Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes

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

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. (adsbygoogle = window.adsbygoogle || []).push({});

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.

63. Ra lệnh giảm tốc, chuyển sang bớc 64. (adsbygoogle = window.adsbygoogle || []).push({});

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.

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. (adsbygoogle = window.adsbygoogle || []).push({});

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.

Chơng III

Một phần của tài liệu Tín hiệu hóa và lý thuyết chung về tối u luật điều khiển thang máy (Trang 27 - 33)