Giải Phẫu Frame Modbus RTU: Address – Function – CRC
Trong lĩnh vực tự động hóa công nghiệp, Modbus RTU là một trong những giao thức truyền thông phổ biến nhất, đặc biệt trong các hệ thống SCADA, PLC, HMI. Hiểu rõ cấu trúc Frame Modbus RTU là bước đầu quan trọng để đảm bảo việc giao tiếp giữa các thiết bị diễn ra chính xác và ổn định.
Giải phẫu Modbus – Từ cơ bản đến chuyên sâu
Xem toàn bộ series để nắm vững cấu trúc giao thức, khung dữ liệu và cách triển khai thực tế.
1. Khái niệm cơ bản về Modbus RTU Frame
Một Frame Modbus RTU bao gồm ba phần cơ bản: Address, Function Code, và CRC. Mỗi phần đều có vai trò quan trọng trong việc nhận dạng thiết bị, xác định hành động, và kiểm tra lỗi dữ liệu.
1.1 Address (Địa chỉ thiết bị)
Địa chỉ thiết bị (Device Address) là byte đầu tiên trong Frame Modbus RTU. Nó xác định thiết bị Slave nào sẽ nhận và phản hồi Frame từ Master. Giá trị của Address thường nằm trong khoảng từ 1 đến 247. Address 0 được dùng để broadcast, tức gửi tới tất cả các thiết bị mà không cần phản hồi.
Ví dụ:
- Address = 0x01: Thiết bị Slave số 1
- Address = 0x0A: Thiết bị Slave số 10
- Address = 0x00: Broadcast đến tất cả các thiết bị
1.2 Function Code (Mã chức năng)
Mỗi Frame Modbus RTU tiếp theo là Function Code, xác định loại hành động mà Master yêu cầu Slave thực hiện. Function Code thường chiếm 1 byte và được chuẩn hóa theo Modbus Specification.
Các Function Code phổ biến:
- 0x01 – Read Coils: Đọc trạng thái các cuộn dây (coil)
- 0x03 – Read Holding Registers: Đọc giá trị các thanh ghi giữ
- 0x05 – Write Single Coil: Ghi một coil
- 0x10 – Write Multiple Registers: Ghi nhiều thanh ghi
Mỗi Function Code được Slave phản hồi với dữ liệu tương ứng hoặc mã lỗi nếu có sự cố.
1.3 CRC (Cyclic Redundancy Check)
CRC là phần cuối cùng của Frame, dùng để kiểm tra lỗi truyền dữ liệu. Trong Modbus RTU, CRC chiếm 2 byte, được tính dựa trên toàn bộ dữ liệu từ Address đến dữ liệu cuối cùng trước CRC. Slave sẽ tính CRC lại khi nhận Frame và so sánh với giá trị CRC gửi đến để phát hiện lỗi.
Lưu ý: Nếu CRC không khớp, Frame sẽ bị loại bỏ và Master có thể gửi lại.
2. Cấu trúc tổng thể của Frame Modbus RTU

| Phần | Byte | Chức năng |
|---|---|---|
| Address | 1 | Xác định Slave nhận Frame |
| Function Code | 1 | Xác định hành động/command |
| Data | N | Chứa dữ liệu đọc/ghi hoặc tham số |
| CRC | 2 | Kiểm tra lỗi dữ liệu |
3. Ví dụ phân tích Frame Modbus RTU
Ví dụ Master gửi Frame đọc giá trị Holding Register từ Slave 1:
01 03 00 0A 00 01 25 CD
- 01: Address của Slave 1
- 03: Function Code đọc Holding Registers
- 00 0A: Địa chỉ thanh ghi bắt đầu
- 00 01: Số lượng thanh ghi cần đọc
- 25 CD: CRC kiểm tra lỗi
4. Lời kết
Hiểu rõ Address, Function Code, CRC giúp kỹ sư tự động hóa dễ dàng debug, phân tích giao tiếp Modbus RTU, và đảm bảo hệ thống hoạt động ổn định. Trong các bài viết tiếp theo của series, chúng tôi sẽ đi sâu vào phân tích dữ liệu trả về, lỗi Modbus và cách xử lý trong môi trường công nghiệp thực tế.
👉Bài tiếp theo trong series: Phân Tích Frame Phản Hồi Modbus RTU: Byte Count – Data – Exception