Công cụ Modbus RTU trên trình duyệt – đọc/ghi thanh ghi, tính CRC, giải mã khung
Kết nối máy tính với thiết bị Modbus RTU qua bộ chuyển đổi USB–RS485, đọc và ghi thanh ghi ngay trên trình duyệt Chrome hoặc Edge, không cần cài phần mềm. Hiển thị giá trị dạng số nguyên, số thực 32 bit với nhiều thứ tự byte, kèm nhật ký khung truyền dạng hex.
Phần tạo khung và giải mã khung chạy được trên mọi trình duyệt, kể cả điện thoại – hữu ích khi đọc tài liệu, kiểm tra CRC hoặc phân tích dữ liệu bắt được từ đường truyền.
1. Kết nối và đọc/ghi thiết bị (Web Serial)
Chưa kết nối
| Địa chỉ | Thanh ghi 4x/3x | Giá trị |
|---|
Nhật ký khung truyền (TX/RX) sẽ hiển thị ở đây.
2. Tạo khung Modbus RTU và tính CRC
Dùng các thông số ở mục 1 (ID, chức năng, địa chỉ, số lượng, giá trị ghi) để tạo khung yêu cầu hoàn chỉnh – dán vào phần mềm terminal hoặc đối chiếu với tài liệu thiết bị.
3. Giải mã khung phản hồi
Dán khung hex (có hoặc không có khoảng trắng). Công cụ kiểm tra CRC, nhận diện mã lỗi (exception) và tách giá trị thanh ghi theo kiểu dữ liệu đã chọn ở mục 1.
Tra nhanh Modbus
| Mã lỗi | Ý nghĩa | Cách xử lý thường gặp |
|---|---|---|
| 01 | Illegal Function | Thiết bị không hỗ trợ mã chức năng – thử 03 thay vì 04 hoặc ngược lại. |
| 02 | Illegal Data Address | Sai địa chỉ: kiểm tra địa chỉ 0-based hay 1-based (40001 tương ứng địa chỉ 0). |
| 03 | Illegal Data Value | Số lượng thanh ghi vượt giới hạn hoặc giá trị ghi ngoài dải cho phép. |
| 04 | Slave Device Failure | Lỗi bên trong thiết bị – xem mã lỗi trên màn hình thiết bị. |
| 06 | Slave Device Busy | Thiết bị đang bận, tăng thời gian giữa các lệnh. |
| Không phản hồi | Timeout | Kiểm tra A/B đảo dây, tốc độ baud, parity, địa chỉ slave, điện trở đầu cuối 120 Ω và đất chung. |
- Địa chỉ thanh ghi: tài liệu ghi 40001 thì nhập địa chỉ 0 với chức năng 03; 30001 → địa chỉ 0 với chức năng 04.
- Số thực 32 bit chiếm 2 thanh ghi; nếu giá trị hiển thị vô lý, thử đổi thứ tự byte (ABCD ↔ CDAB).
- Mạng RS-485: nối dây kiểu bus (daisy-chain), không đấu hình sao; điện trở 120 Ω ở hai đầu xa nhất; cáp xoắn đôi có chống nhiễu.
Kiến thức chuyên sâu: Modbus RTU và RS-485 từ gốc
Modbus là giao thức truyền thông công nghiệp phổ biến nhất nhờ đơn giản và mở. Phần lớn sự cố “không đọc được Modbus” đến từ một số nguyên nhân lặp đi lặp lại: sai địa chỉ thanh ghi, sai thứ tự byte, sai thông số cổng hoặc đấu dây RS-485 chưa đúng. Hiểu các nguyên tắc dưới đây sẽ giúp bạn xử lý phần lớn tình huống trong vài phút.
1. Cấu trúc khung Modbus RTU
Modbus hoạt động theo mô hình hỏi–đáp: một master (PLC, SCADA, máy tính) gửi yêu cầu, một slave (đồng hồ điện, biến tần, cảm biến) trả lời. Mỗi khung gồm:
01 03 00 00 00 02 C4 0B = gửi slave 1, chức năng 03 (đọc holding register), bắt đầu từ địa chỉ 0, đọc 2 thanh ghi, CRC = C4 0B. Phản hồi 01 03 04 00 7B 01 C8 8A 2C = slave 1, chức năng 03, 4 byte dữ liệu: thanh ghi thứ nhất 0x007B = 123, thanh ghi thứ hai 0x01C8 = 456, CRC = 8A 2C.Trong RTU, ranh giới giữa các khung được xác định bằng khoảng lặng tối thiểu 3,5 ký tự. Ở 9600 bps (11 bit mỗi ký tự kể cả start, parity/stop), một ký tự mất khoảng 1,15 ms, nên khoảng lặng khoảng 4 ms; từ 19200 bps trở lên, tiêu chuẩn khuyến nghị giá trị cố định 1,75 ms. Bộ chuyển đổi USB–RS485 có độ trễ lớn hoặc phần mềm gửi từng byte rời rạc có thể làm khung bị cắt đôi.
2. Bốn vùng dữ liệu và chuyện “40001 hay 0”
| Vùng | Kiểu | Quyền | Mã chức năng | Ký hiệu truyền thống |
|---|---|---|---|---|
| Coil | 1 bit | Đọc/ghi | 01, 05, 15 | 0xxxx |
| Discrete Input | 1 bit | Chỉ đọc | 02 | 1xxxx |
| Input Register | 16 bit | Chỉ đọc | 04 | 3xxxx |
| Holding Register | 16 bit | Đọc/ghi | 03, 06, 16 | 4xxxx |
Trên đường truyền, địa chỉ luôn bắt đầu từ 0. Ký hiệu “40001” là cách viết của tài liệu: chữ số 4 chỉ vùng holding register, 0001 là thanh ghi thứ nhất – tương ứng địa chỉ 0 với mã chức năng 03. Nếu đọc được nhưng dữ liệu “lệch một thanh ghi”, gần như chắc chắn là nhầm giữa địa chỉ 0-based và 1-based.
3. Số thực, số 32 bit và thứ tự byte
Một thanh ghi chỉ có 16 bit. Giá trị lớn hơn 65535 hoặc số thực (FLOAT32 theo IEEE 754) phải ghép hai thanh ghi liên tiếp. Tiêu chuẩn Modbus không quy định thứ tự ghép, nên mỗi hãng làm một kiểu:
- ABCD (big-endian): thanh ghi đầu là phần cao – phổ biến nhất.
- CDAB (word swap): thanh ghi đầu là phần thấp – hay gặp ở đồng hồ điện, một số PLC.
- BADC, DCBA: ít gặp hơn, có đảo byte trong mỗi thanh ghi.
0x41BC và 0x0000. Ghép ABCD → 0x41BC0000 = 23,5 (hợp lý cho nhiệt độ). Nếu thiết bị dùng CDAB mà bạn ghép ABCD, giá trị sẽ thành một số cực nhỏ vô nghĩa. Mẹo: khi không có tài liệu, thử lần lượt các kiểu trong công cụ ở trên cho đến khi ra giá trị khớp với màn hình thiết bị.Giá trị nhân hệ số (scaling): nhiều thiết bị gửi số nguyên đã nhân 10 hoặc 100 để giữ phần thập phân. Ví dụ thanh ghi nhiệt độ đọc 235 với hệ số 0,1 nghĩa là 23,5 °C. Luôn kiểm tra cột “scale”, “resolution” hoặc “unit” trong bảng thanh ghi của nhà sản xuất.
4. Lớp vật lý RS-485: phần lớn lỗi nằm ở đây
- Truyền vi sai: tín hiệu là hiệu điện áp giữa hai dây A và B, nên chống nhiễu tốt và đi xa tới khoảng 1200 m ở tốc độ thấp. Dùng cáp xoắn đôi có chống nhiễu.
- Đấu kiểu bus (daisy-chain): dây đi lần lượt qua từng thiết bị, nhánh rẽ càng ngắn càng tốt. Không đấu hình sao.
- Điện trở đầu cuối 120 Ω: đặt ở hai đầu xa nhất của bus để chống phản xạ tín hiệu – không đặt ở mọi thiết bị.
- Điện trở phân cực (bias): giữ đường truyền ở trạng thái xác định khi không ai truyền; thường có sẵn trong master hoặc bộ chuyển đổi.
- Số thiết bị: chuẩn RS-485 cho 32 tải đơn vị trên một đoạn; thiết bị 1/4 hoặc 1/8 tải cho phép nhiều hơn. Địa chỉ Modbus hợp lệ là 1–247.
- Đất chung (GND/0 V tham chiếu): nên nối dây tham chiếu giữa các thiết bị để điện áp chung không vượt giới hạn, đặc biệt khi thiết bị dùng nguồn khác nhau.
5. Tính thời gian quét để chọn tốc độ phù hợp
6. Quy trình xử lý sự cố 6 bước
- Không có phản hồi (timeout): kiểm tra nguồn thiết bị, địa chỉ slave, tốc độ baud, parity, stop bit – năm thông số này phải khớp tuyệt đối.
- Kiểm tra đấu dây A/B, thử đảo dây; đo điện áp giữa A và B khi bus rảnh (thường vài trăm mV).
- Thử kết nối trực tiếp chỉ với một thiết bị bằng dây ngắn để loại trừ lỗi đường truyền.
- Có phản hồi nhưng CRC sai: nhiễu, thiếu điện trở đầu cuối, cáp không xoắn/không chống nhiễu, đi chung máng với cáp động lực biến tần.
- Phản hồi mã lỗi (exception): đọc mã lỗi để biết sai chức năng, sai địa chỉ hay sai giá trị (bảng tra ở trên).
- Đọc được nhưng giá trị vô lý: kiểm tra lệch địa chỉ 0/1, thứ tự byte, hệ số nhân, kiểu có dấu/không dấu.
7. Modbus RTU và Modbus TCP
Modbus TCP giữ nguyên phần mã chức năng và dữ liệu, chỉ thay địa chỉ slave và CRC bằng một header 7 byte (MBAP) chạy trên Ethernet, cổng 502. Gateway Modbus TCP/RTU cho phép SCADA đọc các thiết bị RS-485 qua mạng LAN; trường “Unit ID” trong header TCP được gateway dùng làm địa chỉ slave phía RTU.
Cần đưa dữ liệu Modbus lên SCADA, cloud hoặc dashboard?
HOANTRANTDH cung cấp bộ chuyển đổi tín hiệu, gateway Modbus TCP/RTU, bộ thu thập dữ liệu và triển khai SCADA cho nhà máy.
Câu hỏi thường gặp
Trình duyệt nào kết nối được cổng COM?
Chrome và Edge bản máy tính (Windows, macOS, Linux) hỗ trợ Web Serial. Firefox, Safari và trình duyệt điện thoại chưa hỗ trợ – vẫn dùng được phần tạo khung, tính CRC và giải mã.
Dữ liệu có gửi lên máy chủ không?
Không. Trình duyệt giao tiếp trực tiếp với cổng COM trên máy bạn; trang web chỉ chạy mã JavaScript tại chỗ.
Có hỗ trợ Modbus TCP không?
Trình duyệt không mở được kết nối TCP thô tới cổng 502. Với Modbus TCP, hãy dùng gateway hoặc phần mềm chuyên dụng; phần giải mã khung vẫn dùng được cho phần dữ liệu PDU.
Tìm hiểu thêm: Bộ chuyển đổi tín hiệu Seneca · SCADA Studio · Kết nối dữ liệu nhà máy · Công cụ tính toán kỹ thuật