Cấu trúc MBAP Header trong Modbus TCP – Phân tích chi tiết từng byte

MBAP Header (Modbus Application Protocol Header) là phần tiêu đề quan trọng trong khung truyền thông Modbus TCP. Không giống Modbus RTU sử dụng CRC để kiểm tra lỗi, Modbus TCP dựa vào cơ chế kiểm soát lỗi của TCP/IP và bổ sung thêm MBAP để quản lý phiên giao tiếp. Hôm nay BKAII sẽ cùng các bạn phân tích chi tiết rõ từng byte nhé!
Hiểu rõ cấu trúc MBAP Header giúp bạn:
- Phân tích và debug lỗi truyền thông Modbus TCP
- Hiểu cách SCADA, HMI, PLC quản lý nhiều kết nối cùng lúc
- Tối ưu việc cấu hình thiết bị Ethernet công nghiệp
1. MBAP Header là gì?
MBAP Header là phần đầu của mỗi gói tin Modbus TCP, có độ dài cố định 7 byte, nằm trước phần PDU (Protocol Data Unit).
Sơ đồ tổng quát khung Modbus TCP:
| MBAP Header (7 bytes) | Function Code + Data (PDU) |
2. Cấu trúc chi tiết MBAP Header (7 bytes)
| Byte | Trường dữ liệu | Độ dài | Mô tả chức năng |
|---|---|---|---|
| 0 - 1 | Transaction Identifier | 2 byte | Định danh phiên giao dịch giữa Client và Server |
| 2 - 3 | Protocol Identifier | 2 byte | Luôn bằng 0x0000 với Modbus TCP |
| 4 - 5 | Length | 2 byte | Độ dài phần dữ liệu còn lại (Unit ID + PDU) |
| 6 | Unit Identifier | 1 byte | Địa chỉ Slave/Server logic |
3. Phân tích từng trường trong MBAP Header
3.1 Transaction ID (2 byte)
Transaction ID được Client tạo ra để đánh số từng yêu cầu gửi đi. Khi Server trả lời, nó sẽ giữ nguyên mã này để Client biết phản hồi tương ứng với yêu cầu nào.
Ví dụ:
Transaction ID = 0x0001
Ứng dụng thực tế:
- Quản lý nhiều gói tin song song
- Tránh nhầm lẫn dữ liệu khi có nhiều yêu cầu đồng thời
3.2 Protocol ID (2 byte)
Trường này luôn có giá trị:
Protocol ID = 0x0000
Nếu khác 0x0000 → gói tin không phải Modbus TCP chuẩn.
3.3 Length (2 byte)
Trường Length cho biết số byte còn lại sau trường này, bao gồm:
- Unit ID (1 byte)
- PDU (Function Code + Data)
Ví dụ: Nếu Length = 0x0006 → nghĩa là có 6 byte theo sau.
3.4 Unit Identifier (1 byte)
Dùng để xác định thiết bị đích trong các hệ thống có Gateway chuyển đổi Modbus TCP ↔ Modbus RTU.
- Nếu kết nối trực tiếp PLC qua Ethernet → thường đặt 0x01 hoặc 0xFF
- Nếu qua Gateway → Unit ID chính là địa chỉ Slave Modbus RTU phía sau gateway
4. Ví dụ khung Modbus TCP có MBAP Header
Ví dụ gói tin đọc Holding Register (Function 03):
00 01 → Transaction ID
00 00 → Protocol ID
00 06 → Length
01 → Unit ID
03 → Function Code
00 00 → Start Address
00 02 → Quantity of Registers
Sơ đồ phân tách:
| 00 01 | 00 00 | 00 06 | 01 | 03 | 00 00 | 00 02 |
T.ID P.ID LEN UID FC Addr Qty
5. So sánh MBAP với Header của Modbus RTU
| Tiêu chí | Modbus TCP (MBAP) | Modbus RTU |
|---|---|---|
| Độ dài Header | 7 byte | Không cố định |
| Kiểm tra lỗi | Dựa vào TCP/IP | CRC16 |
| Định danh phiên | Transaction ID | Không có |
6. Những lỗi thường gặp liên quan đến MBAP Header
- Sai Transaction ID → Client không nhận diện được phản hồi
- Length tính sai → Gói tin bị cắt hoặc bị từ chối
- Unit ID sai khi qua Gateway → Không tới đúng thiết bị RTU
7. Kết luận
MBAP Header chính là “bộ định tuyến nội bộ” của Modbus TCP, giúp quản lý phiên giao tiếp, độ dài dữ liệu và định danh thiết bị đích. Việc hiểu sâu MBAP không chỉ giúp bạn cấu hình đúng thiết bị mà còn giúp debug nhanh các hệ thống SCADA – PLC – HMI trong thực tế nhà máy.
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!"