
Tổng hợp 14 bài tập lập trình PLC có lời giải chi tiết (cơ bản đến nâng cao)
Học lập trình PLC hiệu quả nhất không phải bằng cách đọc lý thuyết suông, mà bằng cách giải một loạt bài tập từ dễ đến khó, hiểu rõ vì sao logic đó đúng. Bài viết này biên dịch, tổng hợp và mở rộng từ các nguồn đào tạo PLC quốc tế uy tín (PLCProgramming.io, ControlSystemGuide, PLCSimulationSoftware, PLC Academy, Industrial Monitor Direct) để xây dựng 14 bài tập kinh điển nhất mà bất kỳ ai học PLC cũng nên thành thạo, xếp theo độ khó tăng dần — từ tiếp điểm cơ bản, mạch tự giữ, timer/counter, cho tới xử lý tín hiệu analog và giới thiệu điều khiển PID. Toàn bộ ký hiệu địa chỉ minh họa theo chuẩn Siemens (I/Q/M/T/C) — nếu bạn dùng PLC Mitsubishi, chỉ cần thay tương ứng I→X, Q→Y, M→M, T→T, C→C (xem thêm bài "Hướng dẫn lập trình PLC Mitsubishi FX3U" để hiểu rõ cách đánh địa chỉ của Mitsubishi).
Trước khi bắt đầu: Nguyên tắc làm bài tập PLC hiệu quả
Theo PLCSimulationSoftware.com, cách học PLC hiệu quả nhất không phải là đọc một sơ đồ Ladder có sẵn rồi cảm thấy mình đã hiểu — mà là tự tay dựng logic, chạy thử, quan sát và tự sửa lỗi khi nó chưa hoạt động đúng. Đọc một rung logic đúng hoàn toàn khác với việc tự viết ra được nó. Vì vậy, với mỗi bài tập dưới đây, bạn nên:
Đọc đề bài và tự vẽ sơ đồ Ladder của riêng mình trước khi xem lời giải.
Liệt kê đầy đủ danh sách I/O trước khi viết logic.
Chỉ xem lời giải sau khi đã thử ít nhất một lần.
Nếu có phần mềm mô phỏng (TIA Portal Simulator, GX Simulator2...), hãy chạy thử thực tế thay vì chỉ đọc trên giấy.
Với mỗi bài, hãy tự đặt câu hỏi "test case biên" — ví dụ điều gì xảy ra nếu hai điều kiện đối lập cùng xảy ra một lúc? Đây chính là cách kỹ sư chuyên nghiệp kiểm tra chương trình trước khi coi là hoàn chỉnh.
Bài 1 (Cơ bản): Điều khiển đèn bằng tiếp điểm thường mở/thường đóng
Đề bài: Có một công tắc (X0) và một đèn báo (Y0). Khi công tắc đóng, đèn sáng; khi công tắc mở, đèn tắt.
Danh sách I/O:
Input: I0.0 — Công tắc
Output: Q0.0 — Đèn báo
Lời giải:
I0.0 -----| |------------------( Q0.0 )Giải thích: Đây là bài tập đơn giản nhất — dùng tiếp điểm thường mở (Normally Open) nối trực tiếp tới cuộn dây đầu ra. Khi I0.0 = 1, mạch logic thông, Q0.0 được kích hoạt.
Biến thể để tự luyện thêm: thử đổi yêu cầu thành "đèn sáng khi công tắc MỞ" — bạn sẽ cần dùng tiếp điểm thường đóng (/I0.0) thay vì thường mở.
Bài 2 (Cơ bản): Điều khiển động cơ Start/Stop với mạch tự giữ (Seal-in)
Đề bài: Có nút nhấn Start (I0.0, thường mở), nút nhấn Stop (I0.1, thường mở), điều khiển động cơ Q0.0. Khi nhấn Start, động cơ chạy và tự duy trì dù đã nhả tay khỏi nút Start; khi nhấn Stop, động cơ dừng ngay lập tức.
Đây được coi là bài tập nền tảng nhất trong toàn bộ lập trình PLC — theo PLCSimulationSoftware.com, đây gần như luôn là bài tập đầu tiên mọi người học PLC cần nắm vững, vì mẫu hình "tự giữ" (latching) xuất hiện trong gần như mọi mạch điều khiển động cơ thực tế.
Danh sách I/O:
Input: I0.0 — Start (thường mở), I0.1 — Stop (thường mở)
Output: Q0.0 — Động cơ
Lời giải:
I0.0 ----| |----+----------/I0.1|------------( Q0.0 )
|
Q0.0 ----| |----+ (nhánh song song - tiếp điểm tự giữ)Giải thích: Tiếp điểm Q0.0 (chính đầu ra của rung này) được nối song song với I0.0. Khi nhấn Start (I0.0=1), Q0.0 được kích hoạt; ngay khi đó, tiếp điểm phụ Q0.0 cũng đóng lại, giữ mạch thông ngay cả khi nhả nút Start. Muốn dừng, chỉ cần I0.1 (Stop) chuyển sang trạng thái làm hở mạch (dùng tiếp điểm thường đóng của Stop trong chuỗi nối tiếp) là đủ để ngắt toàn bộ rung, bất kể trạng thái tự giữ.
Lưu ý an toàn quan trọng (theo PLCProgramming.io): mạch Start/Stop cần thiết kế theo nguyên tắc "Stop luôn thắng" (stop-dominant) — nếu Start và Stop cùng được kích hoạt đồng thời, Stop phải luôn được ưu tiên ngắt mạch. Đây không chỉ là quy ước lập trình mà còn liên quan trực tiếp đến an toàn vận hành thực tế.
Test case biên nên tự kiểm tra: giữ đồng thời cả Start và Stop — kết quả đúng phải là động cơ KHÔNG chạy (vì tiếp điểm /I0.1 sẽ mở khi I0.1=1, bất kể I0.0 thế nào).
Bài 3 (Cơ bản-Trung bình): Điều khiển động cơ quay thuận/nghịch có khóa liên động
Đề bài: Có nút Start Thuận (I0.0), Start Nghịch (I0.1), Stop (I0.2). Điều khiển 2 đầu ra: Q0.0 (chạy thuận) và Q0.1 (chạy nghịch). Hai chiều không được phép chạy đồng thời (khóa liên động - interlock), tránh gây đoản mạch hoặc hư hỏng động cơ.
Danh sách I/O:
Input: I0.0 — Start Thuận, I0.1 — Start Nghịch, I0.2 — Stop
Output: Q0.0 — Chạy thuận, Q0.1 — Chạy nghịch
Lời giải:
Network 1 (Chạy thuận):
I0.0 ----| |----+----/I0.2|----/Q0.1|-----------( Q0.0 )
|
Q0.0 ----| |----+Network 2 (Chạy nghịch):
I0.1 ----| |----+----/I0.2|----/Q0.0|-----------( Q0.1 )
|
Q0.1 ----| |----+Giải thích: Mỗi chiều có mạch tự giữ riêng (giống Bài 2), nhưng quan trọng nhất là mỗi rung đều chứa thêm tiếp điểm thường đóng của đầu ra chiều ngược lại (ví dụ rung Q0.0 có thêm /Q0.1) — đây chính là khóa liên động phần mềm: nếu Q0.1 đang bật (đang chạy nghịch), tiếp điểm /Q0.1 sẽ mở, ngăn Q0.0 được kích hoạt dù có nhấn Start Thuận. Đây là ứng dụng thực tế phổ biến trong điều khiển cổng, tời nâng, băng tải hai chiều.
Lưu ý thực tế quan trọng: trong hầu hết các ứng dụng công nghiệp thực tế, khóa liên động chỉ bằng phần mềm là chưa đủ — nên bổ sung thêm khóa liên động cơ khí/điện (ví dụ dùng tiếp điểm phụ NC chéo giữa hai contactor thuận/nghịch) để đảm bảo an toàn kép, phòng trường hợp PLC gặp sự cố hoặc lỗi chương trình.
Bài 4 (Trung bình): Trễ khởi động động cơ bằng Timer On-Delay (TON)
Đề bài: Khi nhấn nút Start (I0.0), động cơ bơm mồi (Q0.0) chạy ngay lập tức. Sau khi bơm mồi chạy đủ 5 giây, động cơ chính (Q0.1) mới được phép khởi động.
Danh sách I/O:
Input: I0.0 — Start
Output: Q0.0 — Bơm mồi, Q0.1 — Động cơ chính
Timer: T1
Lời giải:
Network 1:
I0.0 ----| |------------------( Q0.0 )Network 2 (Timer):
I0.0 ----| |------------------( T1, TON, PT = T#5S )Network 3:
T1.Q ----| |------------------( Q0.1 )Giải thích: Khi I0.0 lên mức 1, Q0.0 (bơm mồi) chạy ngay và đồng thời Timer T1 bắt đầu đếm. Sau 5 giây, bit Done của T1 (T1.Q) chuyển sang 1, kích hoạt Q0.1 (động cơ chính). Đây chính là ứng dụng thực tế của nguyên lý TON đã phân tích trong bài "Timer và Counter trong PLC".
Bài 5 (Trung bình): Giữ quạt làm mát chạy thêm sau khi tắt máy bằng Timer Off-Delay (TOF)
Đề bài: Khi động cơ chính (I0.0, giả lập trạng thái động cơ đang chạy) hoạt động, quạt làm mát (Q0.0) chạy theo. Khi động cơ chính dừng, quạt vẫn tiếp tục chạy thêm 180 giây (3 phút) để tản nhiệt trước khi tắt hẳn.
Danh sách I/O:
Input: I0.0 — Trạng thái động cơ chính đang chạy
Output: Q0.0 — Quạt làm mát
Timer: T2
Lời giải:
I0.0 ----| |------------------( T2, TOF, PT = T#180S )
T2.Q ----| |------------------( Q0.0 )Giải thích: Với timer TOF, đầu ra Q của timer bật lên ngay lập tức khi đầu vào IN (ở đây là I0.0) bật, và chỉ tắt sau khi đầu vào IN đã tắt được đủ khoảng thời gian đặt trước (180 giây). Đây chính là ví dụ kinh điển nhất cho ứng dụng TOF — quạt bật ngay khi máy chạy, và tự động tắt trễ sau khi máy đã dừng.
Bài 6 (Trung bình): Đếm sản phẩm trên băng tải có Reset
Đề bài: Một cảm biến quang (I0.0) phát hiện sản phẩm đi qua trên băng tải. Sau khi đếm đủ 25 sản phẩm, kích hoạt tín hiệu đóng thùng (Q0.0). Có nút Reset (I0.1) để đưa bộ đếm về 0 sau khi đã đóng xong một thùng.
Danh sách I/O:
Input: I0.0 — Cảm biến sản phẩm, I0.1 — Nút Reset
Output: Q0.0 — Tín hiệu đóng thùng
Counter: C1
Lời giải:
I0.0 ----| |------------------( C1, CTU, CU )
I0.1 ----| |------------------( C1, R )
PV = 25
C1.QU ----| |------------------( Q0.0 )Giải thích: Mỗi lần cảm biến I0.0 phát hiện một cạnh lên (một sản phẩm đi qua), Counter C1 tăng thêm 1. Khi giá trị hiện tại (CV) đạt tới giá trị đặt (PV = 25), bit Done (QU) chuyển lên 1, kích hoạt Q0.0. Nút I0.1 dùng để reset bộ đếm về 0 sau khi đóng thùng xong, sẵn sàng đếm lô hàng kế tiếp.
Lỗi thường gặp cần tránh (đã phân tích trong bài Timer và Counter): quên thêm logic Reset khiến Counter giữ nguyên giá trị tối đa vĩnh viễn sau lần đếm đầu tiên — đây là lỗi rất phổ biến với người mới bắt đầu.
Bài 7 (Nâng cao): Điều khiển trình tự đèn giao thông đơn giản
Đề bài: Xây dựng chương trình điều khiển một cột đèn giao thông đơn giản, tuần hoàn liên tục theo chu kỳ: Xanh (10 giây) → Vàng (3 giây) → Đỏ (10 giây) → quay lại Xanh...
Danh sách I/O:
Output: Q0.0 — Đèn Xanh, Q0.1 — Đèn Vàng, Q0.2 — Đèn Đỏ
Timer: T1 (đếm xanh), T2 (đếm vàng), T3 (đếm đỏ)
Bit trung gian: M0.0 — Bit tự chạy chu kỳ (Start/tự động chạy liên tục)
Lời giải (dạng mô tả logic tuần tự, đơn giản hóa):
Network 1 — Xanh sáng khi bắt đầu chu kỳ hoặc sau khi Đỏ kết thúc:
(Khởi động ban đầu HOẶC T3.Q) ---AND--- NOT(T1.Q) ------( Q0.0 )
(đồng thời chạy T1, PT=10s)Network 2 — Vàng sáng sau khi Xanh kết thúc, trước khi Đỏ bắt đầu:
T1.Q ---AND--- NOT(T2.Q) --------------( Q0.1 )
(đồng thời chạy T2, PT=3s)Network 3 — Đỏ sáng sau khi Vàng kết thúc:
T2.Q ---AND--- NOT(T3.Q) --------------( Q0.2 )
(đồng thời chạy T3, PT=10s)Giải thích: Đây là bài tập kinh điển thuộc nhóm "starter exercises" — kết hợp cả timer nối tiếp lẫn logic loại trừ lẫn nhau giữa 3 trạng thái đèn. Về bản chất, đây là một dạng máy trạng thái đơn giản (state machine) được hiện thực bằng chuỗi timer nối tiếp: đèn tiếp theo chỉ bật khi timer của đèn trước đó đã hoàn thành (Done = 1) và timer của chính nó chưa hoàn thành.
(Bài toán này được mở rộng đầy đủ với mô hình ngã tư 2 hướng và xử lý người đi bộ trong bài riêng "Lập trình PLC điều khiển đèn giao thông" trên site.)
Bài 8 (Nâng cao): Khởi động động cơ theo phương pháp Sao-Tam giác (Star-Delta)
Đề bài: Đây là bài tập thực tế phổ biến cho động cơ công suất lớn (trên 7,5kW). Khi nhấn Start (I0.0): kích hoạt đồng thời Contactor chính (Q0.0) và Contactor Sao (Q0.1); sau 8 giây, ngắt Contactor Sao, đợi thêm 100ms (thời gian chết an toàn để tránh ngắn mạch), rồi kích hoạt Contactor Tam giác (Q0.2). Nhấn Stop (I0.1) bất kỳ lúc nào sẽ ngắt toàn bộ 3 contactor ngay lập tức. Sao và Tam giác phải khóa liên động lẫn nhau.
Danh sách I/O:
Input: I0.0 — Start, I0.1 — Stop
Output: Q0.0 — Contactor chính, Q0.1 — Contactor Sao, Q0.2 — Contactor Tam giác
Timer: T1 (8 giây - chuyển sao/tam giác), T2 (100ms - thời gian chết an toàn)
Lời giải (mô tả logic):
Network 1 — Contactor chính (tự giữ, dừng bởi Stop):
I0.0 ----| |----+----/I0.1|------------( Q0.0 )
|
Q0.0 ----| |----+Network 2 — Contactor Sao (chạy khi Q0.0 bật và chưa đủ 8 giây, khóa liên động với Tam giác):
Q0.0 ----| |----/T1.Q|----/Q0.2|------------( Q0.1 )
(đồng thời chạy T1, PT=8s, chỉ khi Q0.0=1)Network 3 — Timer chờ 100ms sau khi Sao ngắt:
Q0.0 ----| |----T1.Q|----/Q0.1|------------( T2, TON, PT=T#100MS )Network 4 — Contactor Tam giác (chạy sau khi hết thời gian chết an toàn):
T2.Q ----| |----/Q0.1|------------( Q0.2 )Giải thích: Đây là bài tập kết hợp nhiều khái niệm cùng lúc: mạch tự giữ (Bài 2), timer nối tiếp (Bài 4/7), và khóa liên động (Bài 3) — tất cả trong một ứng dụng công nghiệp thực tế rất phổ biến (khởi động động cơ công suất lớn để giảm dòng khởi động). Điểm mấu chốt kỹ thuật quan trọng nhất là thời gian chết an toàn 100ms giữa lúc ngắt Sao và đóng Tam giác — đây là yêu cầu bắt buộc trong thực tế để tránh hiện tượng hồ quang điện/ngắn mạch khi hai contactor chuyển tiếp quá sát nhau.
Bài 9 (Nâng cao): Bỏ phiếu 2-trên-3 (Voting Logic) cho hệ thống an toàn
Đề bài: Ba cảm biến (I0.0, I0.1, I0.2) cùng giám sát một điều kiện (ví dụ mức nhiệt độ cao bất thường). Đầu ra cảnh báo/trip (Q0.0) chỉ kích hoạt khi ít nhất 2 trong 3 cảm biến cùng báo động — đây là nguyên lý phổ biến trong các hệ thống an toàn và đo lường dự phòng (redundant instrumentation) để tránh báo động giả từ một cảm biến lỗi đơn lẻ.
Danh sách I/O:
Input: I0.0, I0.1, I0.2 — Ba cảm biến
Output: Q0.0 — Tín hiệu Trip
Lời giải:
(I0.0 AND I0.1) OR (I0.1 AND I0.2) OR (I0.0 AND I0.2) --------( Q0.0 )Dạng Ladder (3 nhánh song song, mỗi nhánh là 2 tiếp điểm nối tiếp):
I0.0 --| |--I0.1--| |--+
|
I0.1 --| |--I0.2--| |--+----------------( Q0.0 )
|
I0.0 --| |--I0.2--| |--+Giải thích: Đây là logic tổ hợp (combinational logic) đơn giản nhưng mang tính ứng dụng cao trong lĩnh vực an toàn — mỗi nhánh song song đại diện cho một cặp cảm biến; chỉ cần bất kỳ 2 trong 3 cặp cùng đóng (nghĩa là ít nhất 2 cảm biến cùng báo) là đủ để kích hoạt Q0.0. Cấu trúc này giúp hệ thống vẫn hoạt động tin cậy ngay cả khi một cảm biến đơn lẻ bị lỗi hoặc báo sai (false positive).
Lưu ý quan trọng: với các ứng dụng an toàn thực sự quan trọng (Safety Instrumented System), nên dùng khối hàm/PLC an toàn (Safety PLC) được chứng nhận SIL, thay vì tự viết logic voting bằng lệnh thông thường như trên — ví dụ này chỉ mang tính minh họa nguyên lý logic, không thay thế được yêu cầu chứng nhận an toàn trong công nghiệp thực tế.
Bài 10 (Nâng cao): Chốt lỗi (Latch/Unlatch) dùng lệnh Set/Reset
Đề bài: Khi có tín hiệu lỗi tức thời (I0.0, chỉ tồn tại trong thời gian ngắn — ví dụ một xung lỗi), đèn báo lỗi (Q0.0) phải bật lên và giữ nguyên cho tới khi người vận hành nhấn nút Reset (I0.1) xác nhận đã xử lý xong sự cố.
Danh sách I/O:
Input: I0.0 — Xung lỗi, I0.1 — Nút Reset xác nhận
Output: Q0.0 — Đèn báo lỗi
Lời giải:
I0.0 ----| |------------------( S ) Q0.0 [Lệnh SET]
I0.1 ----| |------------------( R ) Q0.0 [Lệnh RESET]Giải thích: Khác với mạch tự giữ dùng tiếp điểm phản hồi song song (Bài 2), bài này dùng cặp lệnh Set (S) và Reset (R) riêng biệt — đây là cách tiếp cận thay thế phổ biến, đặc biệt phù hợp cho các tín hiệu cảnh báo/lỗi cần "chốt" trạng thái độc lập với thời gian tồn tại của tín hiệu kích hoạt ban đầu. Lưu ý: nếu cả lệnh Set và Reset cùng được thực thi trong cùng một chu kỳ quét, thứ tự đặt lệnh trong chương trình (lệnh nào đứng sau sẽ có hiệu lực cuối cùng) sẽ quyết định trạng thái cuối của Q0.0 — đây là điểm cần đặc biệt lưu ý khi thiết kế logic Set/Reset để tránh hành vi không mong muốn.
Bài 11 (Nâng cao): Xử lý tín hiệu Analog — Chuyển đổi tín hiệu 4-20mA sang đơn vị kỹ thuật
Đề bài: Một cảm biến áp suất xuất tín hiệu dòng điện 4-20mA (tương ứng dải đo 0-10 bar). Module Analog Input của PLC chuyển đổi tín hiệu này thành giá trị số thô (raw count) trong khoảng 0-27648 (chuẩn Siemens). Hãy viết chương trình chuyển đổi giá trị thô này sang đơn vị kỹ thuật thực tế (bar) để hiển thị và dùng cho logic điều khiển.
Lý thuyết nền tảng: Đây là một trong những khái niệm mà nhiều người tự học cảm thấy chưa vững nhất, vì tín hiệu analog không đơn giản là "có/không" như tín hiệu số mà là một dải giá trị liên tục cần được chia tỷ lệ (scaling) theo công thức nội suy tuyến tính:
Giá trị kỹ thuật = ((Raw − RawMin) ÷ (RawMax − RawMin)) × (EUMax − EUMin) + EUMinTrong đó: Raw là giá trị thô đọc được, RawMin/RawMax là dải giá trị thô tương ứng với tín hiệu đầu vào (thường 0 và 27648 cho chuẩn Siemens 4-20mA), EUMin/EUMax là dải giá trị kỹ thuật mong muốn (ở đây là 0 và 10 bar).
Danh sách I/O:
Input Analog: IW64 — Giá trị thô từ module Analog Input (kiểu INT, dải 0-27648)
Output: MD10 — Giá trị áp suất đã quy đổi (kiểu REAL, đơn vị bar)
Lời giải (dạng SCL/Structured Text — phù hợp hơn Ladder cho bài toán tính toán):
MD10 := (REAL_TO_DINT(IW64) - 0) * (10.0 - 0.0) / (27648 - 0) + 0.0;Hoặc dùng khối hàm SCALE có sẵn trong TIA Portal (họ khối chuẩn NORM_X kết hợp SCALE_X):
NORM_X (chuẩn hóa Raw về khoảng 0.0-1.0) → SCALE_X (nhân với dải EU mong muốn) → MD10Giải thích: Đây là ứng dụng thực tế rất phổ biến, xuất hiện trong hầu như mọi hệ thống có cảm biến analog (áp suất, nhiệt độ, lưu lượng, mức bồn...). Điểm quan trọng cần lưu ý: không được quên phần offset 4mA — vì tín hiệu 4-20mA có "điểm 0 sống" (live zero) tại 4mA chứ không phải tại 0mA, việc quên trừ offset này là lỗi rất phổ biến khiến giá trị hiển thị sai toàn bộ dải đo.
Test case biên nên tự kiểm tra: với Raw = 0 (tương ứng 4mA/0 bar) → kết quả phải ra đúng 0.0 bar; với Raw = 27648 (tương ứng 20mA/10 bar) → kết quả phải ra đúng 10.0 bar; với Raw = 13824 (giữa dải) → kết quả phải ra đúng 5.0 bar.
Bài 12 (Nâng cao): Điều khiển mức bồn chứa dạng Bật/Tắt (Bang-Bang Level Control)
Đề bài: Một bồn chứa có 2 công tắc phao: phao mức thấp (I0.0) và phao mức cao (I0.1). Khi mức nước xuống dưới phao thấp, van cấp nước (Q0.0) mở; khi mức nước lên tới phao cao, van đóng lại. Có công tắc chọn chế độ Auto (I0.2).
Danh sách I/O:
Input: I0.0 — Phao mức thấp (1 = mức thấp, cần cấp nước), I0.1 — Phao mức cao (1 = đã đầy), I0.2 — Chế độ Auto
Output: Q0.0 — Van cấp nước
Lời giải:
I0.0 ----| |----+----/I0.1|----I0.2----( Q0.0 )
|
Q0.0 ----| |----+Giải thích: Đây là vòng điều khiển "bang-bang" (on/off control) cổ điển nhất trong điều khiển mức — khi mức xuống thấp (I0.0=1), van mở và tự giữ (seal-in) cho tới khi đạt mức cao (I0.1=1, ngắt qua tiếp điểm /I0.1). Chế độ Auto (I0.2) đóng vai trò điều kiện cho phép — nếu chuyển sang Manual, van sẽ không tự động hoạt động theo phao nữa (cần thêm logic Manual riêng để hoàn thiện, không trình bày ở đây để giữ ví dụ tập trung vào logic bang-bang chính).
Mở rộng cho người muốn luyện tập thêm: hãy tự thử thêm rung "bảo vệ mức thấp-thấp" (Low-Low) độc lập — khi mức xuống quá thấp bất thường, kích hoạt báo động khẩn cấp riêng biệt, tách rời khỏi logic điều khiển thông thường. Đây là nguyên tắc quan trọng trong thiết kế an toàn: logic bảo vệ khẩn cấp nên độc lập với logic điều khiển quá trình thông thường, không nên gộp chung vào cùng một rung.
Bài 13 (Nâng cao): Luân phiên 2 bơm (Lead/Lag Pump Alternation)
Đề bài: Một trạm bơm có 2 bơm (Bơm A - Q0.0, Bơm B - Q0.1) hoạt động luân phiên sau mỗi chu kỳ, để hai bơm mòn đều nhau thay vì một bơm luôn phải chạy chính (dẫn tới hao mòn không đều). Khi có yêu cầu bơm (I0.0), bơm nào chưa chạy lần gần nhất sẽ được chọn làm bơm chính.
Danh sách I/O:
Input: I0.0 — Yêu cầu bơm (ví dụ từ phao mức thấp)
Output: Q0.0 — Bơm A, Q0.1 — Bơm B
Memory: M0.0 — Bit "Bơm A chạy lần gần nhất"
Lời giải (mô tả logic):
Network 1 — Chọn bơm chạy dựa trên bit luân phiên:
I0.0 ----| |----/M0.0|------------( Q0.0 ) [Bơm A chạy nếu M0.0=0, tức lần trước là Bơm B]
I0.0 ----| |----M0.0|-------------( Q0.1 ) [Bơm B chạy nếu M0.0=1, tức lần trước là Bơm A]Network 2 — Đảo bit luân phiên khi kết thúc chu kỳ bơm (cạnh xuống của I0.0):
/I0.0 ---| |----(cạnh lên của tín hiệu đã đảo)------( M0.0 đảo trạng thái, dùng lệnh XOR hoặc NOT )Giải thích: Kỹ thuật luân phiên (alternation) này rất phổ biến trong các ứng dụng bơm nước thải, bơm tăng áp, quạt thông gió dự phòng kép — mục tiêu là phân bổ đều thời gian hoạt động giữa các thiết bị dự phòng để kéo dài tuổi thọ tổng thể của hệ thống thay vì để một thiết bị luôn "gánh" chính. Trong thực tế triển khai trên TIA Portal/Studio 5000, phần đảo bit thường dùng lệnh chuyên dụng phát hiện cạnh (Rising/Falling Edge detection) kết hợp với lệnh XOR hoặc NOT để đảo trạng thái M0.0 chỉ đúng một lần mỗi chu kỳ, tránh đảo liên tục nhiều lần trong một chu kỳ quét.
Mở rộng thực tế: hệ thống bơm chuyên nghiệp thường bổ sung thêm logic "bơm dự phòng tự động chạy" (auto-lag) — nếu bơm chính không đạt lưu lượng/áp suất yêu cầu sau một khoảng thời gian, tự động khởi động thêm bơm thứ hai chạy song song thay vì chỉ luân phiên đơn thuần.
Bài 14 (Nâng cao): Trình tự trộn theo mẻ đơn giản (Basic Batch Mixing Sequence)
Đề bài: Một quy trình trộn theo mẻ đơn giản gồm các bước: (1) Mở van nguyên liệu A trong 10 giây, (2) Mở van nguyên liệu B trong 5 giây, (3) Bật động cơ trộn trong 30 giây, (4) Mở van xả trong 15 giây, sau đó quay lại chờ mẻ tiếp theo. Có nút Start (I0.0) để bắt đầu mỗi mẻ.
Danh sách I/O:
Input: I0.0 — Start mẻ mới
Output: Q0.0 — Van A, Q0.1 — Van B, Q0.2 — Động cơ trộn, Q0.3 — Van xả
Timer: T1 (10s), T2 (5s), T3 (30s), T4 (15s)
Memory: M0.0 — Bit chốt "đang chạy mẻ"
Lời giải (mô tả logic theo chuỗi timer nối tiếp — áp dụng đúng kỹ thuật đã học ở Bài 7):
Network 1: I0.0 (cạnh lên) ------------------( S ) M0.0 [Bắt đầu mẻ mới]
Network 2: M0.0 ----| |----/T1.Q|------------( Q0.0 ) [Van A mở, đồng thời chạy T1 PT=10s]
Network 3: T1.Q ----| |----/T2.Q|------------( Q0.1 ) [Van B mở, đồng thời chạy T2 PT=5s]
Network 4: T2.Q ----| |----/T3.Q|------------( Q0.2 ) [Động cơ trộn chạy, đồng thời chạy T3 PT=30s]
Network 5: T3.Q ----| |----/T4.Q|------------( Q0.3 ) [Van xả mở, đồng thời chạy T4 PT=15s]
Network 6: T4.Q ------------------------------( R ) M0.0 [Kết thúc mẻ, reset bit chốt, sẵn sàng mẻ tiếp theo]Giải thích: Đây là bài tập tổng hợp gần như đầy đủ các kỹ thuật đã học trong toàn bộ 13 bài trước: chốt trạng thái bằng Set/Reset (Bài 10), chuỗi timer nối tiếp (Bài 4, 7, 8), và tư duy trình tự theo bước rõ ràng — chính là mô hình thu nhỏ của các quy trình sản xuất theo mẻ (batch process) trong ngành thực phẩm, hóa chất, dược phẩm. Với các quy trình mẻ phức tạp hơn trong thực tế (có nhánh rẽ điều kiện, xử lý lỗi giữa chừng, nhiều mẻ chạy song song), nên cân nhắc chuyển sang Sequential Function Chart (SFC) thay vì chuỗi timer thuần túy — như đã phân tích trong bài "Ngôn ngữ lập trình PLC".
Bảng tổng hợp kỹ thuật theo từng bài
Bài | Kỹ thuật chính | Mức độ |
|---|---|---|
1 | Tiếp điểm NO/NC cơ bản | Cơ bản |
2 | Mạch tự giữ (Seal-in) | Cơ bản |
3 | Khóa liên động (Interlock) | Cơ bản-Trung bình |
4 | Timer TON | Trung bình |
5 | Timer TOF | Trung bình |
6 | Counter CTU + Reset | Trung bình |
7 | Chuỗi Timer nối tiếp (state machine đơn giản) | Nâng cao |
8 | Kết hợp Seal-in + Timer + Interlock | Nâng cao |
9 | Logic tổ hợp Voting (an toàn) | Nâng cao |
10 | Set/Reset Latch | Nâng cao |
11 | Xử lý tín hiệu Analog (Scaling) | Nâng cao |
12 | Điều khiển Bang-Bang (mức bồn) | Nâng cao |
13 | Luân phiên thiết bị (Lead/Lag) | Nâng cao |
14 | Trình tự theo mẻ (Batch Sequence) | Nâng cao |
Tổng kết: Lộ trình luyện tập đề xuất
Theo PLCSimulationSoftware.com, thứ tự luyện tập hiệu quả nhất nên đi theo đúng trình tự từ Bài 1 đến Bài 14 ở trên — vì mỗi bài sau đều xây dựng dựa trên khái niệm của bài trước: tiếp điểm cơ bản → mạch tự giữ → khóa liên động → timer → counter → xử lý analog → kết hợp thành trình tự phức tạp. Việc bỏ qua bước và nhảy thẳng vào bài khó thường là nguyên nhân khiến người tự học bị "kẹt" giữa chừng.
Nếu bạn muốn thực hành sâu hơn với từng khái niệm riêng lẻ, site đã có các bài phân tích chuyên sâu: "Timer và Counter trong PLC", "PLC Normally Open và Normally Closed", "Tín hiệu Interrupt trong PLC", "Hiểu Address Number trong Ladder Logic của PLC", và các bài ứng dụng thực hành mở rộng: "Lập trình PLC điều khiển đèn giao thông", "Lập trình PLC điều khiển băng tải", "Lập trình PLC điều khiển thang máy".



