So sánh PDU và ADU trong Modbus TCP – Cách đóng gói dữ liệu thực tế

Trong Modbus TCP, hai khái niệm thường gây nhầm lẫn nhất chính là PDU (Protocol Data Unit) và ADU (Application Data Unit). Hôm nay BKAII sẽ cùng các bạn phân biệt rõ hai lớp này giúp kỹ sư tự động hóa hiểu chính xác cách PLC, HMI, SCADA đóng gói và truyền dữ liệu qua mạng Ethernet.
Bài viết này hy vọng sẽ giúp bạn:
- Hiểu bản chất của PDU và ADU
- Nắm cách dữ liệu được đóng gói trong Modbus TCP
- Biết cách đọc và phân tích frame thực tế khi bắt gói tin Wireshark
1. PDU trong Modbus là gì?
PDU (Protocol Data Unit) là phần lõi của giao thức Modbus, chứa:
- Function Code – Mã hàm
- Data – Dữ liệu đi kèm (địa chỉ, số lượng thanh ghi, giá trị…)
Cấu trúc tổng quát của PDU:
| Function Code (1 byte) | Data (N bytes) |
Ví dụ PDU – Lệnh đọc Holding Register (FC = 03)
03 00 00 00 02
Giải thích:
- 03 → Function Code (Read Holding Registers)
- 00 00 → Địa chỉ bắt đầu
- 00 02 → Số lượng thanh ghi cần đọc
2. ADU trong Modbus TCP là gì?
ADU (Application Data Unit) là khung dữ liệu hoàn chỉnh được truyền đi trên mạng.
Trong Modbus TCP, ADU bao gồm:
- MBAP Header (7 byte)
- PDU
Sơ đồ cấu trúc ADU trong Modbus TCP:
| MBAP Header (7 bytes) | PDU (Function + Data) |
3. So sánh trực tiếp PDU và ADU
| Tiêu chí | PDU | ADU |
|---|---|---|
| Thành phần | Function Code + Data | MBAP Header + PDU |
| Có phụ thuộc loại Modbus? | Không (dùng chung cho RTU, ASCII, TCP) | Có (khác nhau giữa TCP và RTU) |
| Mục đích | Chứa nội dung lệnh | Đóng gói để truyền đi trên mạng |
| Có CRC? | Không | Không (Modbus TCP dùng TCP checksum) |
4. Quy trình đóng gói dữ liệu trong Modbus TCP
Quá trình đóng gói dữ liệu diễn ra theo thứ tự:
- Ứng dụng (SCADA/HMI) tạo PDU
- Hệ thống thêm MBAP Header phía trước → tạo thành ADU
- ADU được đưa vào TCP Segment → gửi qua mạng Ethernet
Sơ đồ minh họa:
Application Data
↓
PDU
↓
MBAP + PDU = ADU
↓
TCP/IP Frame
5. Ví dụ thực tế: Đóng gói một gói tin Modbus TCP
Yêu cầu: đọc 2 thanh ghi từ địa chỉ 0x0000
Bước 1 – Tạo PDU
03 00 00 00 02
Bước 2 – Thêm MBAP Header để tạo ADU
00 01 → Transaction ID
00 00 → Protocol ID
00 06 → Length
01 → Unit ID
03 00 00 00 02 → PDU
ADU hoàn chỉnh:
00 01 00 00 00 06 01 03 00 00 00 02
6. PDU và ADU trong các biến thể Modbus
| Chuẩn Modbus | Cấu trúc ADU |
|---|---|
| Modbus TCP | MBAP Header + PDU |
| Modbus RTU | Slave Address + PDU + CRC |
| Modbus ASCII | Start + Address + PDU + LRC + End |
7. Lỗi phổ biến khi hiểu sai PDU và ADU
- Nhầm lẫn PDU là toàn bộ khung Modbus
- Tính sai Length trong MBAP do hiểu nhầm ranh giới PDU
- Phân tích sai frame khi dùng Wireshark
8. Kết luận
PDU là phần nội dung lệnh, còn ADU là bản đóng gói hoàn chỉnh để truyền trên mạng. Trong Modbus TCP, ADU = MBAP Header + PDU. Hiểu đúng hai lớp này giúp bạn debug nhanh, đọc frame chính xác và thiết kế hệ thống truyền thông ổn định hơn.
Xem thêm:
- Series: Giải phẫu Modbus – Từ cơ bản đến chuyên sâu
- Các kỹ thuật tối ưu tốc độ truyền Modbus TCP trong hệ thống SCADA
- Chu trình Hỏi – Đáp trong Modbus: Master và Slave giao tiếp như thế nào?
- Phân biệt Master và Slave trong Modbus RTU & Modbus TCP (Client vs Server)
- So sánh giao thức truyền thông công nghiệp: PROFIBUS-DP và Modbus RTU
- Modbus RTU và Modbus TCP là gì? So sánh và cách chọn đúng chuẩn cho hệ thống
"BKAII - Thiết bị truyền thông TỐT nhất với giá CẠNH TRANH nhất!"