
Lập trình PLC điều khiển thang máy: Sơ đồ logic cơ bản và nâng cao
Điều khiển thang máy là một trong những bài tập PLC được xếp vào nhóm khó nhất trong các bài tập tuần tự kinh điển — không phải vì từng lệnh riêng lẻ phức tạp, mà vì bài toán đòi hỏi phối hợp đồng thời nhiều yêu cầu (từ nhiều tầng, cả trong và ngoài cabin), xử lý ưu tiên logic, và đặc biệt là các yêu cầu an toàn nghiêm ngặt. Theo Industrial Monitor Direct, đây được xếp vào nhóm bài tập nâng cao (advanced project) trong các giáo trình đào tạo PLC quốc tế, và người học nên hoàn thành các bài tập nền tảng khác trước (mạch tự giữ, timer/counter, khóa liên động) trước khi thử sức với đề tài này. Bài viết này biên dịch, tổng hợp và mở rộng từ Industrial Monitor Direct, The Engineering Projects, PLCSimulationSoftware và nhiều nguồn kỹ thuật khác để xây dựng hướng dẫn từ mô hình đơn giản tới nâng cao.
1. Vì sao điều khiển thang máy lại khó?
Theo Industrial Monitor Direct, các hệ thống điều khiển thang máy hiện đại dùng cách tiếp cận máy trạng thái (state machine) thay vì logic tổ hợp đơn giản. Bộ điều khiển cần theo dõi đồng thời:
Vị trí tầng hiện tại (Current Floor Position) — tầng nào cabin đang đứng.
Danh sách yêu cầu đang chờ (Floor Requests) — cả yêu cầu gọi tầng từ hành lang (hall call) lẫn yêu cầu chọn tầng từ trong cabin (car call).
Hướng di chuyển hiện tại (Direction) — lên hay xuống, và hướng này cần được lưu trữ như một trạng thái, không tính toán lại từ đầu mỗi chu kỳ quét.
Trạng thái cửa (Door State) — đóng/mở, có vật cản hay không.
Sai lầm phổ biến nhất của người mới, theo diễn đàn PLCTalk, là cố gắng viết logic thang máy như một chuỗi rung độc lập không có khái niệm "trạng thái được lưu trữ" — dẫn tới hiện tượng nhiều cuộn dây đầu ra (OTE) cùng điều khiển một output ở các rung khác nhau, khiến chỉ có rung cuối cùng được quét trong chu kỳ mới thực sự quyết định trạng thái output — đây chính là hệ quả trực tiếp của cơ chế chu kỳ quét (scan cycle) đã phân tích trong bài "PLC là gì?": Update Input → Scan tất cả các rung → Update Output, lặp lại.
2. Mô hình 1: Thang máy 2 tầng đơn giản nhất
Yêu cầu bài toán
Đây là mô hình đơn giản nhất để làm quen: một thang máy phục vụ 2 tầng (Trệt và Lầu 1), có 2 bảng điều khiển — một trong cabin và một ở mỗi tầng bên ngoài. Công tắc hành trình (limit switch) xác định vị trí cabin tại mỗi tầng. Theo AutomationCommunity.com, nguyên tắc đơn giản nhất cho mô hình này là ưu tiên theo yêu cầu tới trước (first request có ưu tiên).
Bảng danh sách I/O
Địa chỉ | Tên | Loại | Mô tả |
|---|---|---|---|
I0.0 | GoiTang1_TrongCabin | Input | Nút gọi Lầu 1 từ trong cabin |
I0.1 | GoiTretTrongCabin | Input | Nút gọi Trệt từ trong cabin |
I0.2 | GoiTang1_NgoaiHanh | Input | Nút gọi từ hành lang Lầu 1 |
I0.3 | GoiTret_NgoaiHanh | Input | Nút gọi từ hành lang Trệt |
I0.4 | LimitSwitch_Tret | Input | Công tắc hành trình xác nhận cabin đang ở Trệt |
I0.5 | LimitSwitch_Tang1 | Input | Công tắc hành trình xác nhận cabin đang ở Lầu 1 |
Q0.0 | Motor_ChayLen | Output | Động cơ kéo cabin đi lên |
Q0.1 | Motor_ChayXuong | Output | Động cơ kéo cabin đi xuống |
Lời giải Ladder Logic (đơn giản hóa)
Network 1 — Yêu cầu đi lên Lầu 1 (từ bất kỳ nguồn nào), chỉ chạy khi đang ở Trệt và chưa tới Lầu 1:
(I0.0 OR I0.2) ----| |----/I0.5|----------( Q0.0 )Network 2 — Yêu cầu đi xuống Trệt (từ bất kỳ nguồn nào), chỉ chạy khi đang ở Lầu 1 và chưa tới Trệt:
(I0.1 OR I0.3) ----| |----/I0.4|----------( Q0.1 )Giải thích: Với chỉ 2 tầng, bài toán được đơn giản hóa đáng kể vì không cần xử lý ưu tiên phức tạp — chỉ có duy nhất 2 hướng di chuyển khả dĩ. Điểm mấu chốt: cả hai động cơ (lên/xuống) tuyệt đối không được kích hoạt đồng thời — đây là lý do các tiếp điểm giới hạn hành trình (/I0.5 cho lên, /I0.4 cho xuống) đóng vai trò khóa an toàn kép, tự động ngắt lệnh chạy ngay khi cabin đã tới đúng vị trí đích.
3. Mô hình 2: Thang máy nhiều tầng (mở rộng 4 tầng) với xử lý ưu tiên
Yêu cầu bài toán mở rộng
Theo The Engineering Projects, với thang máy nhiều tầng, hệ thống cần lưu lại (latch) toàn bộ các yêu cầu đang chờ xử lý (không chỉ yêu cầu gần nhất), và xử lý theo nguyên tắc ưu tiên theo hướng di chuyển hiện tại (nearest floor in the current direction of travel) — đây chính là thuật toán điều phối thực tế được dùng trong hầu hết thang máy thương mại: khi đang đi lên, ưu tiên phục vụ hết các yêu cầu phía trên trước khi đổi hướng; tương tự khi đang đi xuống.
Theo PLCSimulationSoftware.com, nguyên tắc này giúp giảm thời gian chờ trung bình và tránh hiện tượng thang máy "dao động qua lại" phục vụ hai hành khách nóng vội ở hai tầng liền kề theo hai hướng khác nhau.
Bảng danh sách I/O (rút gọn, minh họa 4 tầng)
Địa chỉ | Tên | Mô tả |
|---|---|---|
I0.0 – I0.3 | GoiTang_1_4 | 4 nút gọi tầng trong cabin (Tầng 1-4) |
I1.0 – I1.3 | LimitSwitch_1_4 | 4 công tắc hành trình xác nhận vị trí (Tầng 1-4) |
M0.0 – M0.3 | YeuCau_Tang_1_4 | 4 bit chốt (latch) yêu cầu từng tầng |
MW10 | TangHienTai | Word lưu số tầng hiện tại (dạng số nguyên) |
M1.0 | Huong_DiLen | Bit trạng thái hướng đang đi lên |
M1.1 | Huong_DiXuong | Bit trạng thái hướng đang đi xuống |
Q0.0 | Motor_Len | Động cơ kéo lên |
Q0.1 | Motor_Xuong | Động cơ kéo xuống |
Logic xử lý (mô tả nguyên lý, dạng giả-code kết hợp Ladder + Structured Text cho phần so sánh)
Bước 1 — Chốt yêu cầu (mỗi khi nhấn nút gọi tầng, dù ở tầng nào, hệ thống "nhớ" yêu cầu đó cho tới khi phục vụ xong):
I0.0 ----| |------------------( S ) M0.0 [Chốt yêu cầu Tầng 1]
I0.1 ----| |------------------( S ) M0.1 [Chốt yêu cầu Tầng 2]
... (tương tự cho các tầng khác)Bước 2 — Reset yêu cầu khi cabin đã tới đúng tầng được yêu cầu:
I1.0 ----| |------------------( R ) M0.0 [Xóa yêu cầu Tầng 1 khi đã tới nơi]Bước 3 — Logic xác định hướng di chuyển (dạng giả-code Structured Text, dễ diễn đạt hơn Ladder thuần túy cho bài toán so sánh số):
IF (Trạng thái = IDLE) AND (Có yêu cầu tại TangDich <> TangHienTai) THEN
IF TangDich > TangHienTai THEN
Huong_DiLen := TRUE;
Trạng thái := DANG_DI_LEN;
ELSIF TangDich < TangHienTai THEN
Huong_DiXuong := TRUE;
Trạng thái := DANG_DI_XUONG;
END_IF;
END_IF;
IF (Trạng thái = DANG_DI_LEN) AND (LimitSwitch[TangHienTai] = TRUE) THEN
IF Co_YeuCau_Tai(TangHienTai) THEN
Motor_Len := FALSE;
Trạng thái := DUNG_MO_CUA;
END_IF;
END_IF;Giải thích: Ở bài toán nhiều tầng, việc thuần túy dùng Ladder Logic để so sánh số tầng hiện tại với số tầng đích trở nên cồng kềnh — đây chính là lý do nhiều tài liệu khuyến nghị chuyển một phần logic (đặc biệt phần so sánh số và quyết định hướng) sang Structured Text thay vì cố gắng biểu diễn hoàn toàn bằng Ladder. Đây là minh chứng thực tế rất rõ ràng cho nguyên tắc đã đề cập trong bài "Ngôn ngữ lập trình PLC": Ladder phù hợp cho logic rời rạc đơn giản, còn Structured Text phù hợp hơn cho các thuật toán có yếu tố so sánh/tính toán.
4. Xử lý an toàn cửa cabin (Door Safety Interlock)
Đây là phần quan trọng nhất về mặt an toàn trong toàn bộ bài toán thang máy, và theo Industrial Monitor Direct, đây cũng là lỗi nghiêm trọng phổ biến nhất của người mới học khi bỏ qua.
Nguyên tắc bắt buộc
Động cơ kéo cabin tuyệt đối không được phép chạy khi cửa chưa đóng hoàn toàn và khóa chặt — cần dùng công tắc hành trình xác nhận cửa đã đóng (Door Closed Limit Switch) làm điều kiện tiên quyết (interlock) trong mọi rung điều khiển động cơ Lên/Xuống.
Cảm biến vật cản cửa (Door Obstruction Photocell): khi cửa đang đóng mà phát hiện vật cản (ví dụ tay hoặc hành lý mắc kẹt), phải lập tức đảo chiều mở cửa trở lại, không được tiếp tục đóng.
Không điều khiển trực tiếp output từ nút bấm mà không qua bit chốt (latching): nút bấm chỉ nên Set một bit trạng thái yêu cầu, không nên nối trực tiếp nút bấm với cuộn dây đầu ra động cơ — tránh hiện tượng động cơ chỉ chạy khi giữ tay trên nút bấm (lỗi rất phổ biến ở người mới, theo ghi nhận từ diễn đàn PLCTalk).
Ví dụ logic khóa liên động cửa
(Yeu_Cau_DiChuyen) ----| |----CuaDaDong_LimitSwitch----/CoVatCan_PhotoEye|------------( Motor_Len hoặc Motor_Xuong )Giải thích: Đây là chuỗi điều kiện an toàn bắt buộc — lệnh di chuyển chỉ thực sự cho phép động cơ chạy khi ĐỒNG THỜI: có yêu cầu di chuyển hợp lệ, cửa đã đóng và khóa chặt (xác nhận qua công tắc hành trình vật lý, không chỉ dựa vào lệnh phần mềm "đã gửi lệnh đóng cửa"), và không có vật cản đang được phát hiện.
5. Danh sách kiểm tra (Checklist) trước khi coi chương trình hoàn chỉnh
Theo Industrial Monitor Direct, quy trình kiểm tra (testing) một chương trình thang máy trước khi coi là hoàn thành nên gồm các bước:
Kiểm tra từng đầu vào riêng lẻ: buộc (force) từng input lên mức cao và xác nhận đúng bit trạng thái tương ứng phản hồi đúng trên bộ xử lý.
Kiểm tra từng đầu ra riêng lẻ: dùng chức năng Force để kích hoạt từng output, xác nhận đèn LED chỉ thị và tải thực tế (nếu có phần cứng) hoạt động đúng.
Kiểm tra chuỗi trình tự đầy đủ: lập một quy trình test tự động chạy qua chuỗi các tầng theo thứ tự xác định (ví dụ Trệt→Tầng1→Tầng2→Tầng1→Trệt), xác minh cửa hoạt động đúng ở mỗi điểm dừng.
Kiểm tra các tình huống ưu tiên xung đột: nhấn nhiều nút gọi tầng cùng lúc ở các hướng khác nhau, xác nhận thang máy xử lý theo đúng nguyên tắc ưu tiên đã thiết kế, không bị "đứng hình" hoặc dao động qua lại vô nghĩa.
Kiểm tra các trường hợp biên (edge case): nhấn nút gọi tầng hiện tại (tầng cabin đang đứng sẵn), nhấn liên tục nhiều lần cùng một nút, mất tín hiệu cảm biến vị trí đột ngột...
6. Những lỗi thường gặp khi lập trình thang máy (theo tổng hợp cộng đồng kỹ thuật)
Nhiều cuộn dây đầu ra cùng điều khiển một output ở các rung khác nhau: theo đúng cơ chế chu kỳ quét, chỉ rung cuối cùng được quét trong chương trình mới thực sự quyết định giá trị output cuối cùng — đây là lỗi kinh điển khiến chương trình "chạy sai một cách khó hiểu" dù từng đoạn logic riêng lẻ nhìn có vẻ đúng.
Không debounce nút bấm: nút bấm cơ khí thực tế cần được xử lý dưới dạng bit chốt (Set) thay vì đọc trực tiếp trạng thái, tránh yêu cầu bị "quên" khi nhả nút quá nhanh.
Reset yêu cầu di chuyển khi CHƯA tới đúng tầng (thay vì khi ĐÃ tới tầng) — đây là lỗi logic nghiêm trọng khiến thang máy bỏ lỡ yêu cầu.
Bỏ qua khóa liên động cửa — nguy cơ an toàn nghiêm trọng nhất trong toàn bộ bài toán, tuyệt đối không được bỏ qua dù chỉ là bài tập mô phỏng.
Thiếu cơ chế xử lý mất tín hiệu cảm biến vị trí: trong thực tế, nếu công tắc hành trình bị lỗi/mất tín hiệu, hệ thống cần có cơ chế phát hiện và dừng an toàn thay vì tiếp tục chạy động cơ "mù" không biết vị trí thực tế.
7. Lộ trình luyện tập đề xuất
Vì đây là bài tập ở mức nâng cao, các nguồn đào tạo quốc tế đều khuyến nghị không nên bắt đầu trực tiếp từ đây. Trình tự luyện tập hợp lý:
Hoàn thành các bài tập nền tảng: mạch tự giữ, khóa liên động, timer, counter (xem "Tổng hợp bài tập lập trình PLC có lời giải").
Luyện tập các bài toán tuần tự trung bình: đèn giao thông, băng tải có phát hiện kẹt hàng (xem 2 bài liên quan đã có trên site).
Bắt đầu với mô hình thang máy 2 tầng đơn giản (Mô hình 1 trong bài này).
Mở rộng dần lên 3-4 tầng, bổ sung xử lý ưu tiên (Mô hình 2).
Hoàn thiện với đầy đủ khóa liên động an toàn cửa (Phần 4) và bộ checklist kiểm tra (Phần 5).
8. Câu hỏi thường gặp (FAQ)
Có bắt buộc phải dùng Structured Text cho bài toán thang máy nhiều tầng không? Không bắt buộc tuyệt đối — vẫn có thể biểu diễn hoàn toàn bằng Ladder Logic, nhưng sẽ cồng kềnh hơn đáng kể khi số tầng tăng lên. Với PLC hỗ trợ đầy đủ IEC 61131-3 (như Siemens S7-1200/1500, Mitsubishi FX5U/iQ-R), kết hợp Ladder cho phần I/O rời rạc và Structured Text cho phần so sánh/logic điều phối là cách tiếp cận thực dụng nhất.
Bài tập thang máy trong đồ án tốt nghiệp cần bao nhiêu tầng để đủ tính thuyết phục? 3-4 tầng thường là đủ để thể hiện đầy đủ các khái niệm quan trọng (xử lý ưu tiên, chốt yêu cầu, khóa liên động an toàn) mà không quá phức tạp để hoàn thành trong thời gian làm đồ án.
Có cần dùng biến tần cho động cơ kéo thang máy trong mô hình học tập không? Với mô hình demo/học tập dùng động cơ DC nhỏ hoặc động cơ bước, không nhất thiết cần biến tần; với thang máy thực tế, gần như luôn cần VFD để đảm bảo khởi động/dừng êm ái, tránh giật cabin gây khó chịu và mất an toàn cho hành khách.



