PHẦN 2: CÁC SƠ ĐỒ THUẬT TOÁN SỬ DỤNG TRONG ĐIỀU KHIỂN THANG MÁY

Các chương trình xử lý phím gọi xuống

Có phím gọi xuống khi thang máy đang dừng (SBN_1)

Sơ đồ thuật toán của ct bàn phím gọi xuống khi thang đang dừng

  1. Kiểm tra trường hợp người gọi thang đứng ở đúng tầng mà Cabin thang máy đang dừng, nếu đúng thì sang bước 2, nếu sai thì sang bước 3.
  2. Gọi chương trình mở – đóng cửa rồi sang bước 7.
  3. Đưa vị trí tầng người đứng gọi thang (Key) vào hàng đợi xuống; đặt giá trị tầng lớn nhất trong hàng đợi bằng tầng được gọi; tăng số phần tử trong hàng đợi xuống lên một giá trị; thiết lập cờ busy ( báo bận ) = 1; sang bước 4.
  4. So sánh vị trí tầng người đứng gọi thang với tầng hiện tại ( Current ), nếu lớn hơn thì sang bước 5, nếu sai sang bước 6.
  5. Thiết lập cờ chạy lên ( Run = 0 ), sang bước 7.
  6. Thiết lập cờ chạy xuống ( Run = 1 ), sang bước 7.
  7. Kết thúc chương trình.

Có phím gọi xuống khi thang máy đang trong hành trình lên (SBN_2)

  1. Kiểm tra xem đã có số tầng trong hàng đợi xuống chưa, nếu đã có thì sang bước 6, nếu chưa thì sang bước 2.
  2. Đưa vị trí tầng người đứng gọi thang (Key) vào hàng đợi xuống; tăng số phần tử trong hàng đợi xuống lên một giá trị; sang bước 3.
  3. Kiểm tra xem có phải là người gọi đầu tiên không, nếu đúng thì sang bước 5, ngược lại thì sang bước 4.
  4. Kiểm tra giá trị tầng lớn nhất ( Dn_max ) trong hàng đợi so với tầng được gọi, nếu Dn_max <= key thì sang bước 6, ngược lại thì sang bước 5.
  5. Đặt Dn_max = key.
  6. Kết thúc chương trình.

Có phím gọi xuống khi thang máy đang trong hành trình xuống(SBN_3):

Sơ đồ thuật toán của ct bàn phím gọi xuống khi thang đang chạy xuống

  1. Kiểm tra xem đã có số tầng trong hàng đợi xuống chưa, nếu đã có thì sang bước 9, nếu chưa thì sang bước 2.
  2. Đưa vị trí tầng người đứng gọi thang (Key) vào hàng đợi xuống; sang bước 3.
  3. So sánh tầng gọi (Key) với tầng hiện tại (Current), nếu nhỏ hơn thì sang bước 4, ngược lại thì sang bước 5.
  4. Tăng số phần tử đang được phục vụ (Wt_up) trong hàng đợi lên 1 giá trị, sang bước 9.
  5. Tăng số phần tử chờ được phục vụ (Ac_up) trong hàng đợi lên 1 giá trị, sang bước 9.
  6. Kiểm tra xem có phải là phần tử đầu tiên được đưa vào hàng đợi chờ phục vụ, nếu đúng thì sang bước 8, ngược lại sang bước 7.
  7. So sánh phần tử nhỏ nhất trong hàng đợi lên (Up_min) với tầng gọi (Key), nếu nhỏ hơn thì sang bước 8, ngược lại sang bước 9.
  8. Đặt giá trị Up_min = key.
  9. Kết thúc chương trình.

Các chương trình xử lý phím gọi lên

Có phím gọi lên khi thang đang dừng (SBN_4)

Sơ đồ thuật toán của ct bàn phím gọi lên khi thang đang dừng

  1. Kiểm tra trường hợp người gọi thang đứng ở đúng tầng mà Cabin thang máy đang dừng, nếu đúng thì sang bước 2, nếu sai thì sang bước 3.
  2. Gọi chương trình mở – đóng cửa (Call door) rồi sang bước 7.
  3. Đưa vị trí tầng người đứng gọi thang (Key) vào hàng đợi lên; đặt giá trị tầng nhỏ nhất trong hàng đợi lên bằng tầng được gọi; tăng số phần tử trong hàng đợi lên một giá trị; thiết lập cờ busy (báo bận) = 1; sang bước  4.
  4. So sánh vị trí tầng người đứng gọi thang với tầng hiện tại (Current), nếu lớn hơn thì sang bước 5, ngược lại thì sang bước 6.
  5. Thiết lập cờ chạy lên (Run = 0), sang bước 7.
  6. Thiết lập cờ chạy xuống (Run = 1), sang bước 7.
  7. Kết thúc chương trình.

Có phím gọi lên khi thang máy đang trong hành trình xuống (SBN_5)

Sơ đồ thuật toán của ct bàn phím gọi lên khi thang đang chạy xuống

  1. Kiểm tra xem đã có số tầng trong hàng đợi lên chưa, nếu đã có thì sang bước 6, nếu chưa thì sang bước 2.
  2. Đưa vị trí tầng người đứng gọi thang (Key) vào hàng đợi lên; tăng số phần tử trong hàng đợi lên một giá trị; sang bước 3.
  3. Kiểm tra xem có phải là người gọi đầu tiên không, nếu đúng thì sang bước 5 ngược lại thì sang bước 4.
  4. Kiểm tra giá trị tầng nhỏ nhất (Up_min) trong hàng đợi so với tầng được gọi, nếu Up_min >= key thì sang bước 6, ngược lại thì sang bước 5.
  5. Đặt Up_min = key.
  6. Kết thúc chương trình.

Có phím gọi lên khi thang máy đang trong hành trình lên (SBN_6)

Sơ đồ thuật toán của ct bàn phím gọi lên khi thang đang chạy lên

  1. Kiểm tra xem đã có số tầng trong hàng đợi lên chưa, nếu đã có thì sang bước 9, nếu chưa thì sang bước 2.
  2. Đưa vị trí tầng người đứng gọi thang (Key) vào hàng đợi lên; sang bước 3.
  3. So sánh tầng gọi (Key) với tầng hiện tại (Current), nếu nhỏ hơn thì sang bước 4, ngược lại thì sang bước 5.
  4. Tăng số phần tử đang được phục vụ (Ac_dn) trong hàng đợi lên 1 giá trị, sang bước 9.
  5. Tăng số phần tử chờ được phục vụ (Wt_dn) trong hàng đợi lên 1 giá trị, sang bước 9.
  6. Kiểm tra xem có phải là phần tử đầu tiên được đưa vào hàng đợi chờ phục vụ, nếu đúng thì sang bước 8, ngược lại sang bước 7.
  7. So sánh phần tử lớn nhất trong hàng đợi xuống (Dn_max) với tầng gọi (Key), nếu nhỏ hơn thì sang bước 9, ngược lại sang bước 8.
  8. Đặt giá trị Dn_max = key.
  9. Kết thúc chương trình.

Xử lý phím gọi tầng

Có phím gọi tầng khi thang máy đang dừng ( SBN_7 )

Sơ đồ thuật toán ct xử lý phím gọi tầng khi thang đang dừng

  1. 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.

Có phím gọi tầng khi thang máy đang chạy xuống (SBN_8)

Sơ đồ thuật toán ct xử lý phím gọi tầng khi thang đang chạy xuống

  1. Kiểm tra phím dừng khẩn cấp có mã (Scan code) = 63, nếu có thì chuyển sang 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.
  8. 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.

Có phím gọi tầng khi thang máy đang chạy lên (SBN_9)

Sơ đồ thuật toán ct xử lý phím gọi tầng khi thang đang chạy lên

  1. Kiểm tra phím dừng khẩn cấp có mã ( Scan code ) = 63, nếu có thì chuyển sang 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.
  8. 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 19.
  19. 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.

Chương trình xử lý phím chung Keyboard

Sơ-đồ-thuật-toán-của-ct-bàn-phím

  1. Kiểm tra xem có phím gọi tầng không, nếu có chuyển sang bước 2, ngược lại sang bước 8.
  2. Kiểm tra cờ busy, nếu busy = 1 chuyển sang bước 3, ngược lại sang bước 6.
  3. Kiểm tra cờ run, nếu run = 0 chuyển sang bước 4, nếu run = 1 chuyển sang bước 5.
  4. Gọi chương trình con SBN 002, sang bước 8.
  5. Gọi chương trình con SBN 003, sang bước 8.
  6. Gọi chương trình con SBN 001, sang bước 8.
  7. Reset cờ key_buff1 (có phím gọi tầng) = 0, sang bước 8.
  8. Kiểm tra xem có phím gọi thang không, có sang bước 9, ngược lại sang bước 21.
  9. Kiểm tra cờ run, run = 0 thì sang bước 10, run = 1 sang bước 12.
  10. Kiểm tra cờ busy, busy = 1 thì sang bước 11, busy = 0 sang bước 13.
  11. Kiểm tra cờ run, run = 0 thì sang bước 15, run = 1 sang bước 14.
  12. Kiểm tra cờ busy, busy = 1 thì sang bước 17, busy = 0 sang bước 16.
  13. Gọi chương trình con SBN 007, sang bước 20.
  14. Gọi chương trình con SBN 009, sang bước 20.
  15. Gọi chương trình con SBN 008, sang bước 20.
  16. Gọi chương trình con SBN 004, sang bước 20.
  17. Kiểm tra cờ run, run = 0 thì sang bước 19, run = 1 sang bước 18.
  18. Gọi chương trình con SBN 005, sang bước 20.
  19. Gọi chương trình con SBN 006, sang bước 20.
  20. Reset cờ key_buff 02 ( có phím gọi thang ) = 0.
  21. Kết thúc chương trình.

Chương trình đóng – mở cửa (Door)

Sơ đồ thuật toán của ct cửa

  1. Ra lệnh mở cửa; đặt bộ đếm TIM 002, chuyển sang bước 2.
  2. Kiểm tra xem đã hết thời gian trễ chưa, nếu chưa thì sang bước 3, ngược lại sang bước 5. 
  3. Gọi chương trình đọc phím (Read_key), sang bước 4.
  4. Kiểm tra xem có cờ đóng cửa nhanh không, nếu có thì sang bước 5, ngược lại về bước 2.
  5. Ra lệnh đóng cửa, đặt bô TIM 003, sang bước 6.
  6. Kiểm tra xem đã hết thời gian trễ chưa, nếu chưa thì sang bước 7, ngược lại sang bước 8.
  7. Gọi chương trình đọc phím (Read_key), sang bước 6.
  8. Kết thúc chương trình.

Các chương trình ngắt

Chương trình ngắt sensor.

Sơ đồ thuật toán xử lý ngắt Sensor

  1. Tăng giá trị sensor lên một giá trị, chuyển sang bước 2.
  2. So sánh giá trị của sensor với số 3, nếu bằng sang bước 3, lớn hơn sang bước 4, nếu nhỏ hơn sang bước 6.
  3. Set cờ S03 = 1, sang bước 7.
  4. So sánh giá trị của sensor với số 5, nếu bằng sang bước 5, nhỏ hơn sang bước 6.
  5. Set cờ S05 = 1, Reset giá trị sensor = 0, chuyển sang bước 7.
  6. Set cờ S04 = 1, chuyển sang bước 7.
  7. Kết thúc chương trình.

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

Sơ đồ thuật toán xử lý ngắt bàn phím gọi tầng

  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_buff1 = 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_buff1=1.
  3. Kết thúc chương trình.

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

Sơ đồ thuật toán xử lý ngắt bàn 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.

Chương trình chínhLưu-đồ-thuật-toán-của-ct-chính-đk-thang-máy-nhà-cao-tầng

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 đó phần tiếp theo sẽ trình bày chương trình mô phỏng thang máy trên máy tính.

Xem tiếp: Ứng dụng PLC cho hệ thống điều khiển thang máy (phần 3)