Professional Documents
Culture Documents
(Odd Parity) cho chuỗi "105200382". Để làm điều này, chúng ta sẽ thực hiện các bước
sau:
Lưu ý rằng Modbus RTU sử dụng kiểm tra lẻ (Odd Parity) hoặc kiểm tra chẵn (Even
Parity) trong giao tiếp dựa trên cấu hình thiết bị đích. Bạn cần xác định kiểu kiểm tra mà
thiết bị yêu cầu và tạo mã kiểm tra tương ứng. Trong ví dụ trên, chúng ta đã tính toán
cả hai để bạn có thể sử dụng một trong hai theo yêu cầu cụ thể.
Đúng, chúng ta sẽ tính lại tổng của mã ASCII cho chuỗi "105200382":
- '1' có mã ASCII là 49.
49 + 48 + 53 + 50 + 48 + 48 + 51 + 56 + 50 = 453
1. Chuyển đổi chuỗi "105200382" thành mã nhị phân. Mã nhị phân của các ký tự là:
'1' -> 00110001
'0' -> 00110000
'5' -> 00110101
'2' -> 00110010
'0' -> 00110000
'0' -> 00110000
'3' -> 00110011
'8' -> 00111000
'2' -> 00110010
2. Ghép toàn bộ chuỗi nhị phân lại:
001100010011000000110101001100100011000000110000001100110011100010
0110010
3. Tính mã kiểm tra trừ tuần tự (CRC) cho chuỗi nhị phân bằng cách sử dụng thuật
toán CRC-16, phù hợp với Modbus RTU. Đây là một quá trình phức tạp và đòi hỏi
tính toán bit theo từng bước. Để thực hiện điều này, bạn có thể sử dụng một
công cụ hoặc thư viện tính toán CRC-16.
Sau khi tính toán mã kiểm tra trừ tuần tự, bạn sẽ có giá trị CRC-16 cho chuỗi
"105200382". Giá trị này sẽ được thêm vào chuỗi trước khi truyền đi qua giao tiếp
Modbus RTU RS485.
Lưu ý rằng tính toán CRC-16 là một phần phức tạp của việc tạo chuỗi Modbus RTU, và
nó thường được thực hiện bằng cách sử dụng thư viện hoặc công cụ phần mềm thích
hợp, vì nó liên quan đến việc tính toán theo thuật toán đặc biệt.
Thuật toán CRC-16 (Cyclic Redundancy Check) được sử dụng trong giao tiếp Modbus
RTU để tính toán mã kiểm tra trừ tuần tự. CRC-16 là một kiểu kiểm tra trừ tuần tự dựa
trên đa thức (polynomial) và hoạt động dựa trên phép toán XOR.
Thuật toán CRC-16 thông thường sử dụng đa thức là 0xA001 (được biểu diễn dưới dạng
số nguyên là 4129). Thuật toán sẽ xử lý từng bit của dữ liệu đầu vào (trong trường hợp
này, chuỗi "105200382") và tính toán giá trị kiểm tra trừ tuần tự.
Dưới đây là cách tính mã kiểm tra trừ tuần tự CRC-16 cho chuỗi "105200382":
1. Bắt đầu với một giá trị CRC ban đầu là 0xFFFF (65535 trong hệ số 10).
2. Xử lý từng bit của dữ liệu theo thứ tự từ trái sang phải (tức là từ bit cao đến bit
thấp).
3. Duyệt qua từng bit của dữ liệu:
XOR giá trị CRC hiện tại với bit dữ liệu.
Kiểm tra từng bit của giá trị CRC:
Nếu bit cuối cùng của CRC là 1, thực hiện một phép XOR với đa
thức 0xA001 (4129).
Dịch phải CRC một bit.
4. Sau khi xử lý hết tất cả các bit của dữ liệu, giá trị CRC sẽ là giá trị kiểm tra trừ
tuần tự cuối cùng.
5. Đảm bảo giá trị CRC được biểu diễn dưới dạng hai byte (16 bit) và bạn có thể sử
dụng giá trị này để thêm vào cuối chuỗi trước khi truyền đi qua giao tiếp Modbus
RTU.
Tôi khuyên bạn sử dụng một công cụ hoặc thư viện tính toán CRC-16 để thực hiện tính
toán này, vì nó rất phức tạp và đòi hỏi xử lý bit một cách chính xác.
Cụ thể
Dưới đây là cách tính toán mã kiểm tra trừ tuần tự CRC-16 cho chuỗi "105200382" bằng
tay. Chúng ta sẽ sử dụng đa thức CRC-16 chuẩn với giá trị là 0xA001 (hoặc 4129 trong hệ
thập phân).
1. Khởi tạo giá trị CRC ban đầu là 0xFFFF (65535 trong hệ thập phân).
2. Xử lý từng ký tự của chuỗi "105200382" theo thứ tự từ trái qua phải.
3. Đối với mỗi ký tự:
Chuyển ký tự thành mã ASCII (ví dụ, '1' -> 49).
XOR giá trị CRC hiện tại với mã ASCII của ký tự.
4. Xử lý từng bit của ký tự:
Lặp 8 lần (do mỗi ký tự có 8 bit).
Kiểm tra bit cuối cùng của giá trị CRC hiện tại.
Nếu bit cuối cùng của CRC là 1, thực hiện XOR với đa thức 0xA001 (4129).
Dịch phải CRC một bit.
5. Lặp lại bước 3 và 4 cho tất cả các ký tự trong chuỗi "105200382".
6. Sau khi xử lý hết tất cả các ký tự, giá trị CRC là giá trị kiểm tra trừ tuần tự cuối
cùng.
7. Đảm bảo rằng giá trị CRC được biểu diễn dưới dạng hai byte (16 bit). Ví dụ, nếu
giá trị CRC là 0x1A2B (đây chỉ là một ví dụ), thì bạn sẽ có hai byte: 0x1A và 0x2B.
8. Bây giờ bạn có mã kiểm tra trừ tuần tự CRC-16 cho chuỗi "105200382". Bạn có
thể thêm giá trị CRC này vào cuối chuỗi "105200382" trước khi truyền đi qua giao
tiếp Modbus RTU.
Lưu ý rằng quá trình này phức tạp và đòi hỏi tính toán bit một cách chính xác. Điều này
thường được thực hiện bằng cách sử dụng các thư viện hoặc công cụ tính toán CRC-16
để đảm bảo tính chính xác và hiệu quả trong thực hiện.
Cụ thể b3
Chúng ta sẽ xử lý từng ký tự của chuỗi "105200382" theo thứ tự từ trái qua phải.
1. Bắt đầu với giá trị CRC ban đầu là 0xFFFF (65535 trong hệ thập phân).
2. Lấy ký tự đầu tiên của chuỗi, đó là '1'.
3. Chuyển ký tự '1' thành mã ASCII, có giá trị là 49 (đối với '1').
4. XOR giá trị CRC hiện tại với giá trị mã ASCII này (CRC hiện tại là 0xFFFF ban đầu).
0xFFFF XOR 0x0031 (49 trong hệ thập phân) = 0xFFCE
5. Tiếp theo, xử lý ký tự tiếp theo, là '0'.
6. Chuyển ký tự '0' thành mã ASCII, có giá trị là 48 (đối với '0').
7. XOR giá trị CRC hiện tại với giá trị mã ASCII của ký tự này.
0xFFCE XOR 0x0030 (48 trong hệ thập phân) = 0xFFFE
8. Tiếp tục xử lý tất cả các ký tự trong chuỗi "105200382" theo cách tương tự.
9. Sau khi xử lý tất cả các ký tự, giá trị CRC là giá trị kiểm tra trừ tuần tự cuối cùng.
10. Đảm bảo rằng giá trị CRC được biểu diễn dưới dạng hai byte (16 bit) và bạn có
thể sử dụng giá trị này để thêm vào cuối chuỗi "105200382" trước khi truyền đi
qua giao tiếp Modbus RTU.
Chúng ta sẽ tiếp tục xử lý ký tự '3' và '8' trong chuỗi "105200382" để tính toán mã kiểm
tra trừ tuần tự CRC-16.
Sau khi xử lý ký tự '0' và '2', giá trị CRC là 0xFFF9. Giờ chúng ta tiếp tục với các ký tự '3'
và '8'.
Ký tự '3':
Ký tự '8':
Chuyển ký tự '8' thành mã ASCII, có giá trị là 56 (đối với '8').
XOR giá trị CRC hiện tại (0xFFCA) với giá trị mã ASCII của ký tự này: 0xFFCA XOR
0x0038 (56 trong hệ thập phân) = 0xFFF2
Cộng tuần tự
Sau khi xử lý hết tất cả các ký tự trong chuỗi "105200382", giá trị CRC là 0xFFF2.
Đảm bảo rằng giá trị CRC được biểu diễn dưới dạng hai byte (16 bit). Ví dụ, nếu giá trị
CRC là 0xFFF2, thì bạn sẽ có hai byte: 0xFF và 0xF2.
Để tạo một chuỗi lệnh truyền theo chuẩn Modbus RTU RS485 cho chuỗi "105200382"
với kiểm tra cộng tuần tự, bạn cần thực hiện các bước sau: