” Hãy để lý thuyết vừa đủ…”

Câu trên là tôi trích trực tiếp từ giáo trình khi học tại hãng Mitsubishi ở Tokyo (理屈はほどほどにして…), đó là phương châm từ đầu của tôi khi viết bộ tài liệu ” Học Lập Trình PLC cùng Chuyên Gia của Hãng Mitsubishi “. Lý thuyết về PLC vốn rất rộng, cho nên vừa thực hành vừa ôn luyện lý thuyết là cách tốt nhất giúp bạn thành thạo lập trình PLC.

Bắt đầu thôi!

Phần thứ hai sẽ đi vào các trường hợp ứng dụng của PLC FX trong thực tế, bao gồm:

  • Viết chương trình điều khiển tín hiệu giao thông
  • Tối ưu hóa chương trình điều khiển
  • Sử dụng các lệnh tối ưu và kỹ thuật debugging

1. Điều Khiển Đèn Tín Hiệu Giao Thông

Bài thực hành này mô phỏng hệ thống điều khiển đèn giao thông sử dụng PLC FX3U. Ba đèn tín hiệu (đỏ – vàng – xanh) được điều khiển lần lượt qua các ngõ ra Y000 (Đỏ), Y001 (Vàng) và Y002 (Xanh).
Khi nhấn nút khởi động (X000), hệ thống bắt đầu chu kỳ: đèn xanh sáng 10 giây, đèn vàng 5 giây, đèn đỏ 10 giây, sau đó lặp lại. Nếu nút dừng tuần hoàn (X001) được nhấn, hệ thống sẽ dừng sau khi hoàn thành một chu kỳ.
lưu ý: Nút bấm X000 và X001 là những nút bấm nhả, không tự duy trì trạng thái như công tắc hay nút bấm giữ.

Time Chart – Chu trình hoạt động đèn giao thông

Thời gian (s)Tín hiệu ra (Output)Trạng thái đèn
0 – 10Y002 = ON, Y001 = OFF, Y000 = OFFĐèn xanh sáng
10 – 15Y001 = ON, Y002 = OFF, Y000 = OFFĐèn vàng sáng
15 – 25Y000 = ON, Y002 = OFF, Y001 = OFFĐèn đỏ sáng
25 – 35Y002 = ON, Y001 = OFF, Y000 = OFFChu kỳ lặp lại → xanh
  1. Đoạn chương trình Bật – Tắt đèn Xanh.

Giải thích đoạn chương trình:

  • Khi X000 bật (ON), M1 sẽ ON trong 1 chu kỳ quét (scan) bằng lệnh PLS.
  • Khi M1 ON trong 1 chu kỳ quét, Y002 (đèn xanh) và Timer T0 sẽ đồng thời được kích hoạt.
  • Sau 1 chu kỳ quét, M1 sẽ OFF. Tiếp điểm Y002 (4) sẽ thay thế M1 để duy trì trạng thái của mạch.
  • Timer T0 được kích hoạt, bộ đếm của Timer 0 sẽ bắt đầu đếm từ 0 → 100 ( tương đương 10s ).
  • Sau 10s, Tiếp điểm T0 (1) chuyển từ trạng thái thường đóng → thường mở.
  • Mạch bị hở tại T0(1), Y002 chuyển từ trạng thái ON→OFF. Đèn Xanh Tắt.

Suy nghĩ thêm:

  • Nếu dùng X000 thay xung M1 thì có sự khác nhau như thế nào ?
  • Tiếp điểm thường đóng Y001 (2), Y000 (3) trong mạch có mục đích là gì ?

2. Đoạn chương trình Bật – Tắt đèn Vàng.

Giải thích đoạn chương trình:

  • Tiếp điểm Thường Mở của Timer T0 được dùng để kích hoạt Y001 ( Đèn Vàng Bật ).
  • Bộ đếm của Timer T1 được kích hoạt song song với Y001.
  • Sau thời gian cài đặt là K50 ( tương ứng với 5s), Tiếp điểm Thường đóng T1 sẽ chuyển sang trạng thái thường mở.
  • Cuộn dây Y001 chuyển trạng thái từ ON→OFF. Đèn Vàng Tắt

3. Đoạn chương trình Bật – Tắt đèn Đỏ.

Giải thích đoạn chương trình:

  • Tiếp điểm Thường Mở của Timer T1 được dùng để kích hoạt Y000 ( Đèn Đỏ Bật ).
  • Bộ đếm của Timer T2 được kích hoạt song song với Y000.
  • Sau thời gian cài đặt là K100 ( tương ứng với 10s), Tiếp điểm Thường đóng T2 sẽ chuyển sang trạng thái thường mở.
  • Cuộn dây Y000 chuyển trạng thái từ ON→OFF. Đèn Đỏ Tắt

Sau khi đèn Đỏ tắt, chu kỳ thứ nhất đã kết thúc. Để thực hiện tiếp những chu kỳ tiếp theo ( vòng lặp ), chúng ta cần thêm một đoạn chương trình để thực hiện điều này.

4. Đoạn chương trình Bật – Tắt quá trình Lặp

Giải thích đoạn chương trình:

  • Tiếp điểm Thường Mở của Timer T2 được dùng để kích hoạt Rơ Le M0 bằng lệnh SET. M0 sẽ được dùng để thực hiện kích hoạt Y002, chức năng của nó tương tự xung M1 hay tiếp điểm Y000 ở đoạn chương trình bật tắt đèn Xanh.
  • Nút bấm X001 được dùng để Reset Rơ-Le M0 bằng lệnh RST. Lệnh này có tác dụng hủy chế độ lặp đi lặp lại của chương trình điều khiển.

Lệnh [ END ] là câu lệnh kết thúc chương trình. Đây là câu lệnh bắt buộc được đặt dưới cùng của chương trình chính.

Video Demo chương trình

Kiến Thức Bổ Sung

  1. Mạch alternate (オルタネート回路)

Đây là mạch điều khiển dùng một nút nhấn duy nhất để bật / tắt đèn.

Hiện tại, ta gán:

  • Nút nhấn là X000
  • Đèn là Y000

Ngoài ra ta có thể sử dụng luôn lệnh FNC66 có chức năng tương tự mạch alternate

2. Các Lệnh Tính Toán

Lệnh ứng dụng FNC20 là lệnh ADD, có chức năng cộng các giá trị hoặc giá trị của thanh ghi.
Ví dụ: Cộng giá trị 10 với 20 rồi lưu vào thanh ghi D0.

Ngoài ra, các bạn có thể tìm hiểu thêm về các lệnh tính toán khác qua bảng dưới đây.

Tham khảo danh sách các lệnh Ứng Dụng thương dùng trong lập trình PLC của hãng Mistubishi tại đây!

2. Tối Ưu Hóa Chương Trình Điều Khiển

Trong hệ thống điều khiển bằng PLC, việc tối ưu hóa chương trình không chỉ giúp tăng tốc độ phản hồi mà còn nâng cao tính chính xác và ổn định của hệ thống. Một trong những kỹ thuật quan trọng để đạt được điều đó là Tối Ưu Hóa Luồng Thực Thi Chương Trình (Program Flow) bằng cách sử dụng lệnh làm mới Vào/Ra ( REF ) một cách linh hoạt.

2.1 Nguyên tắc quét chương trình của PLC

Thông thường, PLC thực hiện chương trình theo chu trình sau:

  • Xử lý đầu vào (Input Refresh): Tín hiệu từ thiết bị đầu vào (sensor, công tắc…) được nạp vào vùng nhớ input.
  • Thực hiện chương trình điều khiển: Dựa trên các trạng thái input vừa đọc, PLC xử lý logic trong chương trình.
  • Xử lý đầu ra (Output Refresh): Giá trị logic đầu ra được ghi vào vùng nhớ ảnh output, sau đó xuất ra thiết bị thực.

Tuy nhiên, cách làm này sẽ xẩy ra độ trễ do:

  • Đầu Ra (OUTPUT) chỉ được cập nhật sau khi chương trình đã được thực thi xong ( Tới đoạn có dòng lệnh END/FEND)
  • Đầu Vào (INPUT) không thể thay đổi trong khi đang xử lý chương trình.

Để giảm độ trễ lệnh REF là một ví dụ điển hình.

2.2 Sử dụng lệnh REF để tối ưu hóa luồng chương trình

Lệnh REF (FNC50) cho phép:

  • Đầu Ra ( OUTPUT ) được thực thi ngay lập tức tại bất kỳ vị trí nào trong chương trình.
  • Đầu Vào ( INPUT ) luôn được làm mới giữa chu trình quét mà không cần chờ đến chu kỳ tiếp theo.

Ví Dụ Minh Họa

Trong ví dụ này, chu trình quét (scan cycle) được chia thành hai phần chính: Sequence A và Sequence B.

Trình tự thực thi của chương trình

(1): Tự động lưu các giá trị INPUT vào các vùng nhớ liên quan đến INPUT
(2): Xử lý các dòng lệnh trong Sequence A, nhưng vẫn chưa thực thi.
(3): Lệnh REF giúp thực thi ngay lập tức các thiết bị OUTPUT trong Sequence A ( từ Y0 đến Y7), và kiểm tra lại các điều kiện vào từ X10 đến X27.
(4): Tiếp tục xử lý dòng lệnh trong Sequence B, nhưng vẫn chưa thực thi các thiết bị OUTPUT.
(5): Sau khi gặp lệnh END, Thực thi toàn bộ các thiết bị OUTPUT trong Sequence B.

● Như vậy, trong một chu kỳ xử lý, việc xử lý I/O xảy ra 2 lần
⇒ Giúp hệ thống phản hồi nhanh hơn và cập nhật dữ liệu đầu vào kịp thời cho phần chương trình phía sau.

lợi ích

Hữu ích khi bạn cần xử lý các sự kiện nhanh hoặc cập nhật trạng thái cảm biến ngay lập tức.

Lệnh REF cho phép cập nhật đầu vào/ra ngay lập tức tại giữa chu kỳ quét.

Phù hợp với yêu cầu điều khiển nhanh – chính xác – đồng bộ.

Lưu ý:
Khi trong cùng một chu kỳ quét thực hiện nhiều lần xử lý đầu vào, nếu trong khoảng thời gian đó có sự thay đổi trạng thái ON/OFF của đầu vào thì kết quả tính toán của chuỗi A và chuỗi B có thể khác nhau.
Trong trường hợp được minh họa ở hình trên, nếu không có khóa liên động giữa các đầu ra Y0 và Y1, thì Y0 và Y1 có thể hoạt động cùng lúc.

Khóa liên động (出力のインタロック) ở đây là các tiếp được thường đóng Y0 và Y1 được thêm lồng vào chương trình A và B.

2.3 Lệnh điều chỉnh bộ lọc tín hiệu vào: REFF

Chức năng và cơ chế hoạt động của lệnh điều chỉnh bộ lọc đầu vào (REFF) trong PLC Mitsubishi.

● Thông thường, các đầu vào phần cứng của PLC được trang bị bộ lọc C-R (digital filter) khoảng 10ms nhằm chống nhiễu và hiện tượng chattering (rung tiếp điểm) nhằm loại bỏ những xung có độ rộng nhỏ hơn 10ms.
Tuy nhiên, đối với các đầu vào không tiếp điểm (non-contact) đã được thiết kế để tránh nhiễu, thì bộ lọc nói trên lại trở thành trở ngại khi cần thu thập tín hiệu tốc độ cao.

Để khắc phục nhược điểm trên, lệnh REFF ( FNC51) là một giải pháp phần mềm đáng lưu ý.

● Đối với các ngõ vào X000 đến X017 của PLC, lệnh REFF (FNC51) có thể thay đổi giá trị lọc từ 0ms đến 60ms, thay vì luôn cố định 10ms.

Khi sử dụng ngắt (interrupt pointer), bộ đếm tốc độ cao (high-speed counter) với X000~X007, hoặc lệnh SPD (FNC56) thì bộ lọc đầu vào sẽ tự động được đặt về giá trị tối thiểu (5μs đến 200μs, tùy theo loại máy và số chân đầu vào).

Ví dụ minh họa cho lệnh REFF

Tổng Kết:

  • REFF (FNC51) cho phép thay đổi giá trị bộ lọc đầu vào từ 0 đến 60ms.
  • Có thể thay đổi bộ lọc nhiều lần trong một chu kỳ scan.
  • Tác động ngay tại thời điểm thực thi lệnh REFF, không phải đợi đến cuối chu kỳ.

2.4 Sử dụng Lệnh nhảy (CJ)

Lệnh nhảy (CJ) là lệnh dùng để bỏ qua một phần của chương trình điều khiển, nhằm rút ngắn chu kỳ quét (scan time) hoặc cho phép sử dụng cuộn dây kép (double coil).

” Bỏ qua công đoạn giặt quần áo thôi “

Khi đầu vào điều khiển (駆動入力) OFF, con trỏ sẽ quét qua tất cả các dòng lệnh theo thứ tự từ trên xuống dưới.
Khi đầu vào điều khiển (駆動入力) bật ON, lệnh nhảy sẽ được thực thi. Con trỏ nhảy tới dòng lệnh có nhãn là P0, và tiếp tục quét các dòng lệnh từ P0.

Ví dụ Minh Họa

Video Demo Chương Trình

Lưu ý khi sử dụng lệnh CJ ( lệnh nhảy )

  • Sử dụng timer
  • Nếu timer hết thời gian trong lúc bị nhảy:
    • Routine timer sẽ ON (kích hoạt tiếp điểm) ngay lập tức.
    • 1ms timer thì không ON, nhưng sẽ phát ra tín hiệu ON sau khi nhảy kết thúc.

Lưu ý: Đây là sự khác biệt giữa hai loại timer chính xác cao.

  • Sử dụng Counter

Lưu ý:

Loại CounterKhi bị nhảyGhi chú
Counter thường (C0…)Ngừng đếmTiếp tục sau khi thoát khỏi vùng CJ
Counter tốc độ cao (C235…)Vẫn tiếp tục đếmKể cả khi bị nhảy, vẫn hoạt động bình thường
Lệnh RST CounterCó hiệu lực nếu nằm ngoài CJDù counter bị nhảy, vẫn có thể reset chính xác

2.4 Sử dụng Lệnh gọi chương trình Con: CALL, SRET

Learn PLC Programming with a Mitsubishi Expert

Lesson 2: Mastering the MELSEC-F Series

(Part 2: Practical Applications)

“Let the theory be just enough…”

The sentence above is directly quoted from the official training materials I studied at Mitsubishi Electric in Tokyo (original: 理屈はほどほどにして…). This has been my guiding principle from the beginning when writing the training manual “Learn PLC Programming with a Mitsubishi Expert.”
Since the theory of PLCs is vast, the best way to master PLC programming is to practice while reviewing the key concepts in parallel.

1. Traffic Light Control

This practical example simulates a traffic light control system using a Mitsubishi FX3U PLC.
Three signal lamps (Red – Yellow – Green) are controlled via outputs:

  • Y000 (Red),
  • Y001 (Yellow), and
  • Y002 (Green).

When the Start button (X000) is pressed, the system begins the cycle:

  • Green ON for 10 seconds,
  • Yellow ON for 5 seconds,
  • Red ON for 10 seconds,
  • then repeat.

If the Stop button (X001) is pressed, the system stops after completing the current cycle.

Note: The buttons X000 and X001 are momentary push buttons (not toggle switches).

Time Chart – Traffic Light Operating Cycle

Time (s)OutputsLight Status
0 – 10Y002 = ON, others OFFGreen light ON
10 – 15Y001 = ON, others OFFYellow light ON
15 – 25Y000 = ON, others OFFRed light ON
25 – 35Y002 = ON, others OFFLoop → Green again

Green Light ON/OFF Program Segment

Explanation:

  • When X000 turns ON, M1 is activated for one scan cycle using the PLS (pulse) command.
  • While M1 is ON for one scan, both Y002 (Green Light) and Timer T0 are activated.
  • After that scan, M1 turns OFF. The Y002 contact (4) replaces M1 to maintain the state.
  • Timer T0 begins counting from 0 to 100 (equivalent to 10 seconds).
  • After 10 seconds, T0 (1) contact changes from Normally Closed to Normally Open.
  • The circuit breaks at T0 (1), turning Y002 OFF – Green Light turns OFF.

Think about this:

  • What would be different if you use X000 directly instead of pulse M1?
  • What is the purpose of normally closed contacts Y001 (2) and Y000 (3) in the circuit?

Yellow Light ON/OFF Program Segment

Explanation:

  • Normally Open contact of Timer T0 is used to activate Y001 (Yellow Light).
  • Timer T1 starts simultaneously with Y001.
  • After the preset time K50 (5 seconds), normally closed T1 contact becomes open.
  • Y001 coil switches from ON to OFF – Yellow Light turns OFF.

Red Light ON/OFF Program Segment

Explanation:

  • Normally Open contact of Timer T1 activates Y000 (Red Light).
  • Timer T2 starts together with Y000.
  • After the preset time K100 (10 seconds), normally closed T2 contact becomes open.
  • Y000 coil switches from ON to OFF – Red Light turns OFF.

After the Red Light turns OFF, the first cycle is completed.
To continue the loop for the next cycles, we need an additional segment of code.

Cycle Repeat Activation Program Segment

Explanation:

  • Normally Open contact of Timer T2 triggers Relay M0 using the SET command.
    M0 will then be used to activate Y002, functioning like pulse M1 or Y000 contact in the Green Light segment.
  • Button X001 is used to reset M0 using the RST command.
    This stops the repeating cycle of the control program.
  • The [END] instruction marks the end of the program.
    It must be placed at the end of the main program block.

Demo Video of the Program

2. Application Circuit Using PLC Instructions

Alternate Control Circuit (オルタネート回路)

This circuit uses a single push button to toggle the light ON and OFF.

Currently assigned:

  • Push button: X000
  • Light: Y000

Instead of using ladder logic to build the alternate circuit, we can simply use:

FNC66 – ALT Instruction
which performs the same toggle function.

3. Arithmetic Instruction

The application instruction FNC20 – ADD performs addition between constants or data registers.

Example: Add 10 and 20, store the result in register D0.

Besides FNC20, you can explore other arithmetic instructions in the table below.

For reference, here is a list of frequently used application instructions in Mitsubishi PLC programming!