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)

ByteTrường dữ liệuĐộ dàiMô 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 SCADAPLCHMI trong thực tế nhà máy.


 
 

Số lượng người đang truy cập...

Không thể hiển thị dữ liệu người dùng trực tuyến vào lúc này.