DIỄN GIẢI DỮ LIỆU MODBUS
Vì sao giao tiếp thành công nhưng giá trị đọc vẫn có thể sai?
Một lần trao đổi thành công truyền được nội dung thanh ghi, nhưng không chứng minh ứng dụng phải diễn giải nội dung đó như thế nào. Một giá trị 32 bit cần có cách sắp xếp các từ nguyên vẹn, kiểu dữ liệu, hệ số tỷ lệ và đơn vị chính xác. Giá trị đó cũng cần được cập nhật nhất quán về thời điểm. Hãy bắt đầu từ bản đồ thanh ghi của thiết bị và lưu giữ phản hồi thô. Đây là những khái niệm chung, không phải cấu hình của một thiết bị đo cụ thể hay sự bảo đảm về ảnh chụp dữ liệu nguyên tử.
Byte
Một thanh ghi 16 bit tiêu chuẩn được truyền dưới dạng hai byte có thứ tự.
Từ
Tái dựng các từ nguyên vẹn theo bản đồ thanh ghi của thiết bị và kiểu dữ liệu chính xác.
Thời điểm
Kiểm tra xem cả hai từ có thuộc cùng một lần cập nhật nhất quán hay không.
Xác nhận cách biểu diễn địa chỉ, số lượng thanh ghi, kiểu dữ liệu, hệ số tỷ lệ và đơn vị.
Lưu một yêu cầu đọc được cho phép và phản hồi tương ứng.
Xác minh cách cập nhật và dấu thời gian của bộ nhớ đệm gateway, nếu có.
Danh sách kiểm tra lựa chọn và xác minh — mở rộng
| Mục kiểm tra | Nội dung cần xác nhận | Cách xác minh |
|---|---|---|
| Mã hóa | Thứ tự byte và thứ tự các từ nguyên vẹn | Đối chiếu các byte thô với bản đồ thanh ghi chính thức |
| Ý nghĩa | Kiểu dữ liệu, hệ số tỷ lệ và đơn vị | Kiểm tra nhiều giá trị đã biết |
| Độ mới của dữ liệu | Các lần cập nhật nhất quán và tuổi dữ liệu trong bộ nhớ đệm | Đọc tài liệu triển khai và bằng chứng về dấu thời gian |
Một thiết bị đo hiển thị 25, trong khi máy tính hiển thị một giá trị thập phân bất hợp lý và nhật ký giao tiếp báo thành công. Cáp điện hoặc cáp quang không nhất thiết bị lỗi: dữ liệu có thể đã đến nguyên vẹn nhưng sau đó bị diễn giải sai. Để hiểu thứ tự từ Modbus, không cần đến cả trang phương trình. Hãy theo dõi nội dung của thanh ghi, cách bản tin mang nội dung đó và cách phần mềm tái dựng giá trị để phân biệt giữa truyền tải thành công và giá trị đọc chính xác.

Bắt đầu từ các ngăn dữ liệu được đánh số
Modbus quy định các quy tắc trao đổi dữ liệu của thiết bị công nghiệp. Khi đọc thanh ghi giữ hoặc thanh ghi đầu vào, hãy hình dung vùng dữ liệu của thiết bị như một dãy ngăn được đánh số. Mỗi thanh ghi như vậy chứa 16 bit, tức hai byte; mỗi byte chứa tám bit. Đây là các đơn vị dữ liệu logic, không có nghĩa là bên trong thiết bị đo có một dãy chip riêng biệt về mặt vật lý.
Số thứ tự cho phần mềm biết nơi cần tìm, nhưng không giải thích đầy đủ dữ liệu được lưu ở đó là gì. Cùng hai byte có thể biểu diễn một số nguyên không dấu hoặc một tập hợp cờ trạng thái. Bản đồ thanh ghi của thiết bị giải thích dữ liệu biểu thị nhiệt độ, áp suất, năng lượng hay đại lượng khác. Hãy xem bản đồ này như một bảng kê đóng gói: địa chỉ, kiểu dữ liệu, đơn vị, hệ số tỷ lệ và các điều kiện hợp lệ phải đi cùng nhau. Chỉ sao chép địa chỉ là chưa đủ.
Cũng cần kiểm tra cách biểu diễn địa chỉ. Tài liệu hướng dẫn có thể dùng số tham chiếu thanh ghi giữ như 40001, trong khi bản tin dùng độ lệch bắt đầu; một số phần mềm tự chuyển đổi cho người dùng. Hãy đối chiếu với một yêu cầu mẫu trong cùng tài liệu để xác định giao diện yêu cầu số tham chiếu hay độ lệch. Điều này giúp tránh đọc lệch toàn bộ dữ liệu đi một ngăn. Liên tục hoán đổi từ để bù cho lỗi địa chỉ chỉ khiến việc chẩn đoán khó hơn.
Byte nào rời thanh ghi trước?
Giá trị thanh ghi ví dụ 0x1234 có thể tách thành các byte 12 và 34. Ký pháp thập lục phân chỉ là cách ghi dữ liệu thô gọn hơn, không phải phép tính nâng cao bắt buộc tại hiện trường. Cách mã hóa thanh ghi Modbus tiêu chuẩn đặt byte cao, 12, trước byte thấp, 34. Phần mềm nhận sử dụng thứ tự đó để khôi phục cùng nội dung 16 bit.
Đây là thứ tự byte trong bản tin, không được nhầm với thứ tự của từng bit nối tiếp trong một byte. Cách bố trí bộ nhớ máy tính lại là một vấn đề riêng: cách lưu trữ gốc của bộ xử lý không cho phép ứng dụng thay đổi cách mã hóa bản tin của giao thức. Bản ghi bắt gói cho thấy các byte của bản tin; trình gỡ lỗi có thể đã hiển thị một giá trị bộ nhớ được chuyển đổi. Hãy xác định điểm quan sát trước khi so sánh chúng.
Hai thanh ghi làm phát sinh vấn đề thứ tự từ
Một giá trị 32 bit không thể nằm gọn trong một thanh ghi 16 bit và thường chiếm hai thanh ghi liền kề. Ngoài thứ tự byte trong từng thanh ghi, còn có câu hỏi khác: thanh ghi đứng trước chứa 16 bit cao hay 16 bit thấp của giá trị hoàn chỉnh? Đó chính là thứ tự từ được bàn đến ở đây. Thiết bị và cấu hình có thể khác nhau, nên chỉ riêng việc hỗ trợ Modbus không xác lập một cách sắp xếp chung.
Ví dụ, 25.0 ở định dạng dấu phẩy động độ chính xác đơn IEEE 754 có bốn byte 41 C8 00 00. Một bản đồ thanh ghi minh họa đặt 41C8 trong thanh ghi N và 0000 trong N+1; một bản đồ khác đảo thứ tự hai từ. Cả hai đều cho ra 25.0 khi được đọc và tái dựng theo bản đồ tương ứng. Áp dụng cách diễn giải thứ nhất cho cách sắp xếp thứ hai có thể tạo ra giá trị hoàn toàn sai dù trao đổi thành công. Đây là các ví dụ phục vụ giải thích, không phải địa chỉ hay thiết lập của thiết bị đo thực tế.

Hoán đổi từ khác với hoán đổi byte bên trong từ
Hãy hình dung hai cuốn sách, mỗi cuốn có một trang trên và một trang dưới, đại diện cho bốn byte dữ liệu. Đổi vị trí hai cuốn sách tương tự như hoán đổi hai từ 16 bit; đổi các trang bên trong từng cuốn tương tự như hoán đổi byte bên trong từ. Các thao tác này tác động đến những ranh giới khác nhau. Các nhãn phần mềm như big-endian, little-endian hoặc swap có thể chỉ những cấp độ khác nhau, vì vậy chỉ tên mục trong menu là chưa đủ để xác định phép biến đổi.
Ghi lại bốn byte thô theo thứ tự nhận được và viết thứ tự tái dựng của phần mềm bên cạnh. Mỗi lần chỉ thay đổi một thiết lập diễn giải đã được xác định rõ và đối chiếu với bản đồ thanh ghi chính thức. Tránh áp dụng cùng một phép hoán đổi một cách máy móc cho mọi điểm dữ liệu hoặc xem một con số có vẻ hợp lý là bằng chứng rằng toàn bộ bản đồ đều đúng. Các giá trị gần bằng không có thể che giấu lỗi thứ tự, vì vậy hãy kiểm tra nhiều giá trị đã biết và khác biệt nhau.
CRC ở cuối khung Modbus RTU là mã phát hiện lỗi giúp kiểm tra xem nội dung truyền đi có bị thay đổi hay không. Nếu thiết bị chủ động trả về dữ liệu theo thứ tự từ thấp trước, CRC của nó vẫn có thể hợp lệ. Việc phần mềm sau đó diễn giải dữ liệu theo thứ tự từ cao trước sẽ không khiến CRC báo lỗi diễn giải đó. Đọc một địa chỉ khác nhưng hợp lệ cũng có thể vượt qua phép kiểm tra. Hãy lưu riêng bằng chứng về dữ liệu đã đến và cách dữ liệu đó được diễn giải.
Cùng các byte có thể cần những cách diễn giải khác nhau
Thứ tự chính xác chỉ là một yêu cầu. Số nguyên 32 bit và giá trị dấu phẩy động 32 bit sử dụng các cách diễn giải khác nhau. Định dạng dấu phẩy động có thể biểu diễn phần lẻ, nhưng điều đó không có nghĩa là mọi mục dữ liệu bốn byte đều phải được giải mã thành số dấu phẩy động. Số nguyên có dấu cho phép giá trị âm, còn số nguyên không dấu có cách diễn giải dải giá trị khác. Hãy xác định các lựa chọn này từ tài liệu thiết bị thay vì đoán dựa trên mức độ hợp lý của giá trị trên màn hình.
Hệ số tỷ lệ và đơn vị cũng là một phần của chuỗi diễn giải. Nếu bản đồ thanh ghi nêu rõ số nguyên thô 253 tương ứng với 25.3 độ C, phần mềm phải áp dụng quy ước đó thay vì hiển thị 253 độ C. Đây là ví dụ riêng, không liên quan đến giá trị dấu phẩy động 25.0 ở trên. Cũng cần kiểm tra cách mã hóa giá trị không hợp lệ, chỉ báo ngoại tuyến và các bit dành riêng. Vẽ một mã đặc biệt biểu thị dữ liệu không khả dụng như một phép đo bình thường có thể tạo ra một biến động quy trình trông thuyết phục nhưng không có thật.

Thứ tự chính xác vẫn cần thời điểm lấy mẫu nhất quán
Khi hai thanh ghi được đọc bằng các yêu cầu riêng biệt, thiết bị có thể cập nhật giữa hai lần đọc. Xét ví dụ minh họa một bộ đếm không dấu 32 bit thay đổi từ 0000 FFFF sang 0001 0000. Đọc từ cao cũ 0000 rồi đọc từ thấp mới 0000 sẽ tạo ra 0000 0000. Kết quả đó không phải giá trị cũ hoàn chỉnh, cũng không phải giá trị mới hoàn chỉnh. Vấn đề nằm ở tính nhất quán khi lấy mẫu.
Đọc hai thanh ghi liên tiếp trong một yêu cầu thường làm giảm khoảng thời gian phát sinh do các yêu cầu riêng biệt, nhưng không chứng minh rằng mọi thiết bị đều cung cấp ảnh chụp dữ liệu nguyên tử. Hãy kiểm tra tài liệu triển khai về cơ chế chốt dữ liệu, cách làm mới, số thứ tự hoặc dấu thời gian xác định một lần cập nhật nhất quán. Nếu gateway lưu đệm dữ liệu, hãy ghi lại cả thời điểm cập nhật bộ nhớ đệm. Một bản tin vừa được trả về không nhất thiết chứa giá trị vừa được đo, và thăm dò nhanh hơn không thể thay thế cơ chế bảo đảm tính nhất quán.
Phân định trách nhiệm dọc theo đường truyền thông
Trang web của FCTELE giới thiệu modem quang Modbus công nghiệp gắn thanh DIN FCP-D8G, dùng để truyền thông nối tiếp Modbus điểm-điểm qua cáp quang. Điều này minh họa một sự phân định hữu ích: liên kết quang truyền tải dữ liệu giao tiếp, còn bản đồ thanh ghi của thiết bị đo xác định ý nghĩa của dữ liệu. Sử dụng modem quang Modbus không đồng nghĩa với việc tự động nhận diện thứ tự từ dấu phẩy động của mọi thiết bị đo, chuyển đổi đơn vị hoặc cung cấp ảnh chụp phép đo đồng bộ. Hãy xác minh các khả năng thực tế theo tài liệu của phiên bản sản phẩm áp dụng.
Bắt đầu xác minh với một thiết bị và một điểm dữ liệu chỉ đọc được cho phép. Lưu yêu cầu và phản hồi của cùng một giao dịch, xác nhận đích, mã hàm, quy ước địa chỉ bắt đầu và số lượng thanh ghi, sau đó kiểm tra các thanh ghi thô, thứ tự từ, kiểu dữ liệu, hệ số tỷ lệ, đơn vị và thời điểm cập nhật. Kiểm tra tính toàn vẹn thành công chỉ là một bước, không phải bằng chứng rằng cách diễn giải nghiệp vụ là chính xác. Hãy giải thích và ghi lại toàn bộ chuỗi đọc này trước khi mở rộng sang các điểm dữ liệu khác. Hồ sơ đó sẽ hỗ trợ kiểm tra có hệ thống khi thiết bị đo hoặc phần mềm thay đổi.
Nếu một điểm dữ liệu được đọc đúng bằng công cụ cục bộ nhưng sai khi qua liên kết quang, hãy so sánh phản hồi thô từ cùng thiết bị với cùng cấu hình, sau đó kiểm tra việc chọn kênh, thiết lập nối tiếp và nhật ký. Các byte thô giống nhau nhưng giá trị hiển thị khác nhau gợi ý vấn đề ở thiết lập bộ giải mã; các byte khác nhau hoặc giao dịch không khớp cần được điều tra thêm dọc theo đường truyền thông. Trình tự này giúp giảm việc thay thế phần cứng không cần thiết mà không quy các lỗi truyền tải thực sự thành vấn đề thứ tự từ.
Tài liệu tham khảo và phạm vi
Tổ chức Modbus: thanh ghi và định dạng dữ liệu; Giao thức ứng dụng V1.1b3, mục 4.2: mã hóa byte; Schneider Electric: ánh xạ thanh ghi và ví dụ về thứ tự từ; Schneider Electric: đọc các giá trị dấu phẩy động đã hoán đổi; Thông tin modem quang FCTELE FCP-D8G Modbus (tiếng Trung). Các thiết lập của bên thứ ba không xác lập khả năng của sản phẩm FCTELE. Các hình minh họa và ví dụ là phần giải thích được xây dựng độc lập, không phải kết quả đo hay hướng dẫn đấu dây.
Dịch từ bài viết kỹ thuật bằng tiếng Trung: Đọc bài viết gốc bằng tiếng Trung.
Câu hỏi thường gặp
Vì sao một lần trao đổi Modbus thành công vẫn có thể hiển thị giá trị sai?
Truyền tải và diễn giải là hai việc riêng biệt. Hãy kiểm tra đích, quy ước địa chỉ, số lượng thanh ghi, thứ tự từ, kiểu dữ liệu, hệ số tỷ lệ, đơn vị và thời điểm cập nhật. CRC hợp lệ không chứng minh cách diễn giải nghiệp vụ là chính xác.
Hoán đổi hai thanh ghi có giống hoán đổi byte không?
Không. Một thao tác thay đổi vị trí của các từ 16 bit nguyên vẹn; thao tác kia có thể thay đổi vị trí byte trong một từ. Hãy kiểm tra bản đồ thanh ghi của thiết bị và cách tái dựng thực tế thay vì chỉ dựa vào nhãn trong menu.
Một yêu cầu đọc hai thanh ghi có bảo đảm cùng một thời điểm lấy mẫu không?
Không. Đọc theo khối có thể giảm khoảng thời gian phát sinh do các yêu cầu riêng biệt, nhưng ảnh chụp dữ liệu nguyên tử, cơ chế chốt dữ liệu và cách làm mới phụ thuộc vào việc triển khai. Dữ liệu được gateway lưu đệm cũng cần được kiểm tra thời điểm cập nhật.
Đọc thêm
Nhiều PLC và một bộ chia Modbus · Đóng khung byte và lấy mẫu UART


