CRC trong Modbus: Cách tính và ý nghĩa từng bit

Trong giao thức Modbus RTU, CRC (Cyclic Redundancy Check) là cơ chế kiểm tra lỗi quan trọng nhất giúp đảm bảo dữ liệu truyền đi không bị sai lệch. Khác với LRC trong Modbus ASCII, CRC có khả năng phát hiện lỗi mạnh hơn rất nhiều và được xem là “lớp bảo vệ cuối cùng” của mỗi khung truyền.

Bài viết này thuộc chuyên đề:
Series “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ế.

Bài viết này sẽ giúp bạn hiểu rõ:

  • CRC trong Modbus là gì?
  • Cách tính CRC-16 theo chuẩn Modbus
  • Ý nghĩa từng bit trong CRC
  • Ví dụ thực tế khung truyền Modbus RTU

1. CRC trong Modbus là gì?

CRC (Cyclic Redundancy Check) là chuỗi 16 bit được Modbus thêm vào cuối mỗi khung dữ liệu để thiết bị nhận có thể kiểm tra thông tin có bị lỗi trong quá trình truyền hay không.

CRC được tính dựa trên:

  • Địa chỉ Slave
  • Mã hàm (Function Code)
  • Dữ liệu (Data Field)

Lưu ý: CRC không mã hóa dữ liệu mà chỉ dùng để phát hiện lỗi truyền.

---

2. Thuật toán CRC-16 chuẩn Modbus

Modbus RTU sử dụng thuật toán CRC-16 với các tham số chuẩn:

Tham sốGiá trị
Độ dài CRC 16 bit
Polynomial 0xA001
Giá trị khởi tạo 0xFFFF
Thứ tự bit LSB first

---

3. Cách tính CRC từng bước (dễ hiểu cho kỹ sư)

Bước 1: Khởi tạo

Gán CRC ban đầu = 0xFFFF

Bước 2: XOR từng byte

XOR CRC với từng byte dữ liệu trong frame.

Bước 3: Duyệt từng bit

Với mỗi byte:

  1. Tách từng bit (8 lần lặp)
  2. Nếu bit thấp nhất (LSB) = 1 → dịch phải 1 bit và XOR với 0xA001
  3. Nếu LSB = 0 → chỉ dịch phải

Bước 4: Xuất kết quả CRC

Sau khi xử lý xong toàn bộ dữ liệu, bạn nhận được giá trị CRC 16 bit.

---

4. Ý nghĩa từng bit trong CRC

CRC được lưu trong thanh ghi 16 bit:

Bit 15 ... Bit 8 | Bit 7 ... Bit 0
  CRC High Byte   |   CRC Low Byte

Vai trò của từng nhóm bit

Vùng bitTênÝ nghĩa kỹ thuật
Bit 0 (LSB) Bit quyết định Quyết định có áp dụng phép XOR với polynomial hay không
Bit 1 – 7 CRC Low byte Đóng vai trò phát hiện lỗi ngắn (short bit error)
Bit 8 – 14 CRC High byte Tăng độ nhạy với chuỗi lỗi dài (burst error)
Bit 15 (MSB) Bit bậc cao nhất Hỗ trợ phát hiện lỗi dịch pha và nhiễu liên tục

---

5. Ví dụ tính CRC thực tế trong Modbus RTU

Frame yêu cầu

01 03 00 00 00 02

Kết quả CRC

CRC = C4 0B (hex)

Thứ tự gửi CRC trong Modbus

  • Byte thấp gửi trước: 0B
  • Byte cao gửi sau: C4

Khung hoàn chỉnh

01 03 00 00 00 02 0B C4

---

6. Những lỗi CRC thường gặp trong thực tế

  • Dây truyền quá dài, không có điện trở kết thúc (termination)
  • Nhiễu điện từ từ biến tần, động cơ lớn
  • Nối đất (ground) không đồng mức giữa các thiết bị
  • Cấu hình Baudrate hoặc Parity sai

Dấu hiệu dễ nhận biết:

  • Timeout liên tục
  • Gói tin nhận sai CRC
  • PLC báo Communication Error

---

7. Mối liên hệ giữa CRC và độ tin cậy hệ thống

CRC không làm cho hệ thống “miễn nhiễm lỗi”, nhưng:

  • Giảm rủi ro thao tác sai thiết bị
  • Tăng độ an toàn vận hành
  • Giúp hệ thống phát hiện lỗi sớm để retry

Trong môi trường công nghiệp khắc nghiệt, đây là lớp bảo vệ không thể thiếu.

---

8. Kết luận

CRC trong Modbus không chỉ là 2 byte ở cuối gói tin, mà là cả một thuật toán toán học giúp hệ thống công nghiệp vận hành ổn định, chính xác và an toàn.

Nếu bạn hiểu được CRC → bạn đã hiểu 50% nền tảng của Modbus RTU.



 
 

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.