English is Below …

Sau khi đã trải qua hai phần đầu với nhiều kiến thức nền tảng và lý thuyết quan trọng về lập trình PLC dòng FX, tôi nhận ra rằng — cần một ví dụ có tính ” Thực Chiến ” hơn, giúp cho bạn đọc có tự tin hơn về chặng đường học lập trình PLC gian nan phía trước.

Vì vậy, trong Phần 3: Kiến Thức Mở Rộng, tôi muốn chuyển hướng sang một nội dung mang tính thực chiến hơn, nơi các khái niệm sẽ được gắn liền với bài toán thật, dữ liệu thật, và giải pháp cụ thể.

Đây không chỉ là phần “mở rộng” về mặt kiến thức, mà còn là phần giúp người học rèn tư duy kỹ sư, biết cách kết hợp lý thuyết và thực hành để xử lý các tình huống như: lọc nhiễu tín hiệu analog, xử lý dữ liệu số, so sánh, tính toán, điều khiển tốc độ cao, hay tích hợp các module mở rộng.

Tôi tin rằng, chính ở giai đoạn này, việc lập trình PLC sẽ trở nên sống động hơn — không còn là việc ghi nhớ các lệnh, mà là xây dựng giải pháp thông minh cho bài toán thực tế. Chúng ta cùng bắt đầu nào!

Phần 3 – Xử Lý Lọc Nhiễu Tín Hiệu Analog Bằng Phương Pháp Trung Bình Trượt và Lọc Mũ EMA

1. Tổng quan về lọc tín hiệu analog

Khi PLC đọc giá trị analog từ cảm biến (như cảm biến khoảng cách, nhiệt độ, áp suất…), tín hiệu thường chứa nhiễu dao động nhỏ do môi trường, nguồn điện, hoặc dao động cơ học… Nếu đưa trực tiếp giá trị ADC vào chương trình điều khiển, hệ thống có thể:

  • Hiển thị giá trị nhấp nháy liên tục,
  • Kích hoạt sai điều kiện ngưỡng,
  • Gây dao động trong điều khiển PID.


Để giải quyết vấn đề này, phải lọc nhiễu!
Và trong thực tế thì có rất nhiều phương pháp lọc nhiễu khác nhau được sử dụng, tùy vào yêu cầu cụ thể kỹ sư lập trình sẽ chọn phương pháp lọc nhiễu khác nhau.
Ví dụ
1. Xử lý tín hiệu analog của cảm biến nhiệt độ, độ trễ chu kỳ hiển thị nhiệt độ 1s/lần. Phương pháp phổ biến là trung bình cộng, hoặc trung bình trượt(Moving Average).
2. Xử lý tín hiệu analog của cảm biến khoảng cách, chu kỳ hiển thị 1ms/lần. Có thể dùng phương pháp trung bình trượt (Moving Average) hoặc Lọc Mũ (Exponential Moving Average – EMA).

Ngoài ra có rất nhiều phương pháp khác nữa, nhưng tôi chỉ nêu 2 phương pháp phổ biến thường được sử dụng như trên. Khi thành thạo 2 phương pháp này thì các bạn có thể tự mình phát triển thêm phương pháp khác tùy thuộc vào tính chất của dự án.

Bây giờ tôi sẽ đi sâu vào cơ sở toán học của từng phương pháp.

2. Lọc trung bình trượt 10 mẫu (Moving Average Filter)

2.1 Cơ Sở Toán Học

Lọc trung bình trượt (MA) lấy trung bình của N mẫu gần nhất (thường là 10 mẫu) để làm mượt giá trị hiện tại. Khi có mẫu mới, mẫu cũ nhất bị loại bỏ – đây chính là cơ chế FIFO (First In First Out).

Công thức:

equation

Giải thích các thành phần:

  • equation : Giá trị đầu ra tại mẫu thứ n
  • equation : Giá trị đầu vào tại các mẫu trước đó
  • N: Số lượng mẫu trung bình
  • equation​: Tổng từ i=0 đến i=N−1
  • equation​: Hệ số trung bình, chia cho tổng số mẫu

Ưu điểm

  • Lọc nhiễu mạnh, hiệu quả với nhiễu ngẫu nhiên.
  • Dễ hiểu, dễ lập trình.
  • Không yêu cầu kiến thức điều khiển nâng cao.

Nhược điểm

  • Gây độ trễ tín hiệu ≈ N/2 chu kỳ lấy mẫu.
  • Cần bộ nhớ mảng (buffer) để lưu mẫu cũ.

Thuật toán FIFO trong PLC

  1. Duy trì một mảng chứa 10 mẫu gần nhất.
  2. Khi có mẫu mới:
    • Loại mẫu đầu tiên.
    • Dịch các phần tử còn lại lên.
    • Ghi mẫu mới vào cuối mảng.
  3. Cộng tổng 10 phần tử rồi chia 10.

Hoặc tối ưu hơn:

  • Duy trì tổng cộng (rolling sum).
  • Khi thêm mẫu mới, trừ mẫu cũ ra khỏi tổng, rồi cộng mẫu mới vào → Tính trung bình nhanh hơn.

3. Lọc Mũ (Exponential Moving Average – EMA)

Lọc Mũ (Exponential Moving Average – EMA) là một phương pháp lọc tín hiệu phổ biến trong xử lý dữ liệu thời gian thực, đặc biệt trong các hệ thống đo lường và điều khiển công nghiệp. Nguyên lý của EMA dựa trên việc cập nhật giá trị trung bình một cách “mềm”, trong đó mẫu dữ liệu mới nhất được gán trọng số cao hơn so với các mẫu cũ.

3.1 Cơ Sở Toán Học

Công thức cơ bản của EMA là:

equation

Giải thích thành phần:
1. x[n]– Giá trị đầu vào hiện tại

Đây là dữ liệu mới nhất mà cảm biến hoặc hệ thống đo được tại thời điểm n.
Ví dụ: giá trị điện áp, nhiệt độ, khoảng cách, hoặc tín hiệu đo được trong một chu kỳ lấy mẫu.

2. y[n] – Giá trị đầu ra sau khi lọc tại thời điểm n

Đây là giá trị trung bình có trọng số theo hàm mũ, được tính dựa trên:

  • Dữ liệu mới nhất x[n], và
  • Kết quả lọc trước đó y[n−1].

Giá trị này chính là tín hiệu sau khi đã được làm mượt, giảm nhiễu, và được dùng cho các bước xử lý hoặc điều khiển tiếp theo.

3. y[n−1]y[n-1]y[n−1] – Giá trị đầu ra trước đó

Là kết quả EMA của chu kỳ ngay trước đó (n−1).
Nó thể hiện “ký ức” của hệ thống, giúp bộ lọc không phản ứng quá đột ngột với các biến động ngắn hạn.

4. α – Hệ số làm mịn (smoothing factor)

trọng số quy định mức ảnh hưởng của giá trị mới x[n] so với giá trị cũ y[n−1].

  • 0<α<1
  • Nếu α lớn (gần 1) → phản ứng nhanh, ít làm mượt, nhạy với thay đổi.
  • Nếu α nhỏ (gần 0) → phản ứng chậm, mượt hơn, giảm nhiễu tốt hơn.

5. Ý nghĩa tổng thể

Công thức này biểu diễn trung bình có trọng số theo thời gian, trong đó các mẫu mới có ảnh hưởng lớn hơn và các mẫu cũ dần bị giảm ảnh hưởng theo cấp số mũ.
Đây là lý do nó được gọi là Lọc Mũ (Exponential Moving Average).

So với phương pháp Trung Bình Trượt (Moving Average), EMA có ưu điểm là không cần lưu trữ nhiều mẫu và độ trễ thấp hơn, rất phù hợp cho các hệ thống nhúng như PLC, Arduino hoặc bộ vi điều khiển, nơi tài nguyên tính toán hạn chế nhưng yêu cầu phản hồi nhanh.

4. Viết Chương Trình PLC

Tiếp theo, tôi sẽ sử dụng PLC FX của hãng Mitsubishi để đọc tín hiệu analog từ cảm biến IL600 của hãng Keyence và viết chương trình thể hiện 2 thuật toán lọc nhiễu Trung Bình Trượt (Moving Average) và Lọc Mũ (Exponential Moving Average – EMA).
Hệ thống gồm có:
1. PLC FX3G
2. Module FX3G – 2AD – DB ( module đọc tín hiệu Analog cho dòng FX3G )
3. Cảm Biến IL 600
4. Máy tính cài đặt phần mềm GX Works 2


4.1 Sơ Đồ Hệ Thống

Sơ đồ nối dây cảm biến IL1000 FX3G-2AD-BD

  • Trường hợp tín hiệu Analog dạng Áp ( 0 – 5V hoặc 1 – 5V ).
  • Trường hợp tín hiệu Analog dạng dòng ( 4 – 20mA ).

Sự khác nhau giữa việc đọc tín hiệu dạng áp hay dòng nằm ở PLC, theo hướng dẫn của nhà sản xuất có sự khác nhau ở các bước ADC hiển thị giá trị analog ở thanh ghi D8260.

Có nghĩa là ở dạng Áp thì giá trị ADC của thanh ghi D8206 ở dạng 12 bit ( 0 – 4095 ), còn ở dạng dòng thì thanh ghi D8260 ở dạng 11 bit ( 0 – 2040 ).

4.2 Chương Trình PLC

Lọc Nhiễu Trung Bình Trượt (Moving Average)

  • Xây Dựng Thuật Toán
    1. Sử dụng thanh ghi D8260 để đọc giá trị ADC từ cảm biến
    2. Tạo một mảng lưu trữ giá trị ADC từ cảm biến. Số lượng phần tử của mảng không cố định, tùy vào biên độ của nhiễu.
    3. Tính trung bình cộng mảng theo từng vòng quét của chương trình. Giá trị trung bình thu được chính là thành quả.
  • Thực Thi pseudocode ( Chương trình mô tả )
    Bước 1. Lấy Mẫu Mới
    D8260 = > D100 // MOV D8260 D100 (đọc giá trị mới từ A/D hay nguồn đo)
    Bước 2: Tạo Mảng 6 thanh ghi để lưu giá trí Analog từ 6 vòng quét chương trình ( trường hợp 5 phần tử ).
    WSFL D100 D102 K6 K1 // Sau mỗi vòng quét của chương trình, giá trị của D100 sẽ được dịch sang D102,D103 … D107
    Bước 3. Cập nhật tổng trượt
    D120 := D120 + D102 // cộng mẫu mới
    D120 := D120 – D107 // trừ mẫu cũ bị đẩy ra
    Bước 4. Tính Giá Trị Trung Bình
    D122 := D120 / 5 // Giá trị trung bình được lưu ở thanh D122
  • Chương Trình PLC

Giải thích
M8002: được bật 1 lần duy nhất ở vòng Scan đầu tiên. Mục đích Reset giá trị D120
Timer: T0 tạo xung 1s. // Tôi thiết lập chu kỳ 1s để chúng ta có thể xem giám sát sự biến động của số liệu dễ hơn. Trong thực tế, có thể thay thế bằng chu kỳ ngắn hơn như 10ms hoặc 1ms.

Dưới đây là video

Đánh Giá Chung về Phương pháp lọc nhiễu Trung Bình Trượt

  • Chương trình đơn giản, dễ thực thi.
  • Độ trễ của tín hiệu ( N-1 )/2 chù kỳ quét của chương trình lấy mẫu.

Lọc Mũ (Exponential Moving Average – EMA)

  • Xây Dựng Thuật Toán

Có thể hiểu đơn giản phương pháp lọc EMA như sau: Giá trị Sau khi lọc bằng giá trị lọc lần trước cộng thêm phần bù. Phần bù này chính là chêch lệch giữa giá trị thực tế hiện tại với giá trị lọc lần trước nhân với hệ số.
Lưu ý:

  1. Phần bù có thể là âm hoặc dương
  2. hệ số nhân là trọng số, có giá trị trong khoảng ( 0 ,1 ). Giá trị trọng số càng nhỏ thì độ lọc càng mịn, độ trễ càng cao.

Triển Khai

  • Chương Trình PLC

Dưới đây là video

5. So Sánh 2 Phương Pháp

So sánh nhanh

Tiêu chíMoving Average (MA)Exponential Moving Average (EMA)
Độ trễCố định ≈ (N−1)/2 · Ts (lớn nếu N lớn)Nhỏ hơn MA với cùng “độ mượt”; do là IIR bậc 1
Độ mượt / Khử nhiễuMạnh với nhiễu ngẫu nhiên; có “cửa sổ” rõ ràngMượt tốt; phản hồi êm, không cắt “đột ngột”
Đáp ứng bậc thangChậm, tuyến tính theo N; có gợn biên độ passbandMượt, một cực (1-pole) kiểu RC; ít gợn
Nhạy với outlier (đột biến)Bền hơn (spike bị “pha loãng” trong N mẫu)Nhạy hơn (spike kéo y[n] theo, nhất là α lớn)
Bộ nhớCần buffer N mẫu (hoặc rolling sum)Chỉ giữ y[n−1] → rất tiết kiệm
Tính toánCộng trừ nhiều; chia cho N (nên chọn N là 2^k trên vi điều khiển)Rất nhẹ: 1 nhân + 2 cộng; hợp với PLC/MCU
Điều chỉnh tham sốTrực quan bằng N (tăng N = mượt hơn nhưng trễ hơn)Dùng α (gần 1 = nhanh; gần 0 = mượt)
Tần số / PhaFIR có nhiều điểm triệt (notch) nhưng ripple passbandIIR bậc 1, pha trễ ít, biên độ −3 dB xác định
Khởi tạoCần đủ N mẫu đầuChạy ngay: đặt y[0]=x[0] hoặc giá trị khởi tạo
Ứng dụng điển hìnhHiển thị chậm, logging, loại nhiễu ngẫu nhiên mạnhĐiều khiển thời gian thực, phản hồi nhanh, tài nguyên hạn chế

Gợi ý chọn phương pháp

  • Ưu tiên MA khi:
    • Cần lọc mạnh và ổn định cho tín hiệu chậm (nhiệt độ, mức…)
    • Muốn giảm ảnh hưởng outlier (spike) mà không cần phản hồi nhanh.
  • Ưu tiên EMA khi:
    • Yêu cầu độ trễ thấp, phản hồi nhanh (khoảng cách 1–10 ms, điều khiển tốc độ…).
    • Hạn chế RAM/CPU (PLC, Arduino), muốn code gọn, chạy mỗi scan.

Trên đây là những trải nghiệm của tôi về 2 phương pháp lọc nhiễu từ cảm biến Analog thường dùng trong công nghiệp, hy vọng những kiến thức trên sẽ giúp ích cho các bạn trong quá trình học tập và làm việc.


After completing the first two parts with important foundational and theoretical knowledge about programming the FX series PLC, I realized that we need a more “practical, real-world” example—one that helps learners build confidence for the challenging journey of mastering PLC programming ahead.

Therefore, in Part 3: Extended Knowledge, I want to shift toward a more hands-on, application-driven topic, where concepts are tied directly to real problems, real data, and concrete solutions.

This is not only an “extension” of knowledge, but also a stage where learners develop engineering thinking—knowing how to combine theory and practice to handle real situations such as analog signal noise filtering, digital data processing, comparisons, calculations, high-speed control, and integrating expansion modules.

I believe that in this stage, PLC programming becomes more vivid—not just memorizing instructions, but constructing intelligent solutions for real-world applications.
Let’s get started!

Part 3 – Filtering Analog Signal Noise Using Moving Average and Exponential Moving Average (EMA)

1. Overview of Analog Signal Filtering

When a PLC reads analog values from sensors (such as distance, temperature, pressure sensors, etc.), the signal often contains small fluctuations caused by environment, power supply noise, or mechanical vibration.
If we use the raw ADC value directly in the control program, the system may:

  • Display rapidly fluctuating values,
  • Trigger threshold conditions incorrectly,
  • Cause instability in PID control.

To solve this problem—we must filter the noise.
In practice, there are many filtering methods, and depending on the application, the programmer will choose the suitable one.

Examples:

  1. Temperature sensor signal processing, display updates once every 1 second → Use Simple Average or Moving Average.
  2. Distance sensor with sampling cycle 1 ms → Use Moving Average or Exponential Moving Average (EMA).

There are many other methods, but we will focus on these two common approaches. Once you master them, you can adapt and expand based on your project needs.

Now, let’s go into the mathematical foundation of each method.

2. Moving Average Filter (Example: 10 samples)

2.1 Mathematical Basis

The Moving Average (MA) calculates the average of the latest N samples (commonly N=10). When a new sample arrives, the oldest one is removed — this is the FIFO mechanism.

equation

Advantages

  • Strong filtering effect for random noise
  • Easy to understand and program
  • No advanced control theory required

Disadvantages

  • Introduces latency ≈ N/2 sample cycles
  • Requires memory buffer for storing samples

Optimized Approach:
Maintain a rolling sum rather than re-summing all samples every scan.

3. Exponential Moving Average (EMA)

EMA is commonly used in real-time measurement and industrial control systems.
It updates the filtered value smoothly, giving more weight to the newest sample.

Formula:

equation

Where:

SymbolMeaning
x[n]Current input value
y[n]Filtered output value
y[n−1]Previous filtered value
αSmoothing factor (0 < α < 1)
  • α close to 1 → reacts quickly, less smoothing.
  • α close to 0 → reacts slowly, smoother output.

Advantages compared to Moving Average:

  • No need to store multiple samples
  • Much lower latency
  • Suitable for PLC, Arduino, and microcontrollers where resources are limited

4. PLC Implementation

We will use Mitsubishi FX PLC to read analog signals from a Keyence IL600 sensor and implement both Moving Average and EMA filtering methods.

System Components:

  1. PLC FX3G
  2. FX3G-2AD-BD Analog Input Module
  3. Keyence IL600 Sensor
  4. PC running GX Works2

4.1 System Wiring Diagram

  • Supports Voltage Input (0–5V / 1–5V)
  • Supports Current Input (4–20mA)

Note:
Voltage mode uses 12-bit ADC (0–4095)
Current mode uses 11-bit ADC (0–2040)

4.2 PLC Program Example – Moving Average

Algorithm Steps:

  1. Read ADC value → store to D100
  2. Use WSFL to shift values in the buffer (FIFO)
  3. Update rolling sum (add new, subtract old)
  4. Divide sum to get the average → store to D122

Evaluation of the Moving Average Method

  • Simple and easy to implement
  • Signal latency is approximately (N−1)/2 sample cycles

EMA Implementation

The EMA method updates output by adding a compensation term proportional to the difference between new and previous values.

  • Compensation may be positive or negative
  • The smoothing factor α determines responsiveness vs. stability

Video References