Bản đồ thanh ghi Modbus – Register Map: Hiểu đúng để không đọc sai dữ liệu

Trong Modbus, dữ liệu không được truyền trực tiếp dưới dạng “nhiệt độ”, “áp suất” hay “tốc độ”, mà được tổ chức thành một cấu trúc gọi là Register Map (Bản đồ thanh ghi). Nếu không hiểu chính xác Register Map, người lập trình rất dễ đọc sai dữ liệu hoặc ghi nhầm vùng nhớ quan trọng của thiết bị.


1. Register Map trong Modbus là gì?

Register Map là cách Modbus tổ chức không gian bộ nhớ của thiết bị thành các vùng dữ liệu riêng biệt, mỗi vùng phục vụ một loại mục đích khác nhau. Mỗi vùng có quy ước địa chỉ và cách truy cập riêng.

Có 4 vùng thanh ghi chính trong Modbus:

  • Coil (0xxxx) – Vùng trạng thái ON/OFF có thể ghi
  • Discrete Input (1xxxx) – Vùng trạng thái ON/OFF chỉ đọc
  • Input Register (3xxxx) – Vùng dữ liệu analog chỉ đọc
  • Holding Register (4xxxx) – Vùng dữ liệu analog có thể ghi

2. Phân tích từng loại thanh ghi trong Modbus

2.1. Coil Register (0xxxx)

Coil là vùng thanh ghi dạng 1 bit, dùng để điều khiển các thiết bị dạng số như: relay, contactor, đèn báo, van điện từ.

Đặc điểm:

  • Chỉ chứa giá trị 0 hoặc 1
  • Có thể đọc và ghi
  • Chức năng truy cập thường dùng: Function Code 01, 05, 15

2.2. Discrete Input (1xxxx)

Discrete Input cũng là dữ liệu 1 bit nhưng ở chế độ chỉ đọc. Vùng này thường dùng để đọc trạng thái cảm biến hoặc tín hiệu đầu vào số.

Đặc điểm:

  • Chỉ đọc, không cho phép ghi
  • Dùng Function Code 02 để truy cập

2.3. Input Register (3xxxx)

Input Register là vùng thanh ghi 16 bit chỉ đọc, thường chứa dữ liệu đo đạc từ cảm biến như: nhiệt độ, áp suất, lưu lượng, độ ẩm, mức nước…

Đặc điểm:

  • Mỗi thanh ghi dài 16 bit (2 byte)
  • Chỉ đọc
  • Sử dụng Function Code 04 để đọc dữ liệu

2.4. Holding Register (4xxxx)

Holding Register là vùng thanh ghi phổ biến nhất trong Modbus, dùng để đọc và ghi các tham số quan trọng của thiết bị: setpoint, hệ số PID, tốc độ động cơ, thời gian trễ, v.v.

Đặc điểm:

  • Mỗi thanh ghi dài 16 bit
  • Có thể đọc và ghi
  • Sử dụng Function Code 03, 06, 16

3. Sự khác nhau giữa địa chỉ hiển thị và địa chỉ thực

Đây là phần gây nhầm lẫn nhiều nhất khi làm việc với Modbus.

Ví dụ: Khi tài liệu thiết bị ghi Holding Register 40001, điều này có thể tương ứng:

  • Địa chỉ hiển thị: 40001 (theo tài liệu)
  • Địa chỉ thực tế gửi trong frame: 0000 (hex)

Lý do là vì nhiều thiết bị sử dụng chuẩn địa chỉ 1-based, trong khi Modbus frame lại sử dụng 0-based addressing.

4. Ánh xạ dữ liệu thực tế trong Register Map

Một thanh ghi 16 bit đôi khi không đủ để biểu diễn dữ liệu thực tế. Khi đó, nhà sản xuất sẽ ghép 2 thanh ghi lại thành:

  • Số nguyên 32 bit
  • Số thực IEEE 754 (float)

Ví dụ:

Register 40001 = 0x447A
Register 40002 = 0x0000

Hai thanh ghi trên khi ghép lại có thể biểu diễn giá trị nhiệt độ dạng Float.

5. Thứ tự byte (Byte Order) và đảo word

Các thiết bị khác nhau có thể sử dụng thứ tự lưu trữ khác nhau:

  • Big-endian: Byte cao trước
  • Little-endian: Byte thấp trước
  • Word Swap: Đảo thứ tự 2 thanh ghi 16 bit

Đây là nguyên nhân phổ biến khiến dữ liệu đọc về bị “sai hoàn toàn” nếu không cấu hình đúng phần mềm Master.

6. Ví dụ thực tế lỗi khi hiểu sai Register Map

  • Đọc nhầm Input Register thay vì Holding Register
  • Quên trừ offset khi thiết bị dùng 1-based address
  • Không cấu hình đảo byte khi cần

7. Kết luận

Register Map chính là "bản đồ trí nhớ" của thiết bị Modbus. Khi hiểu đúng cấu trúc này, bạn có thể:

  • Đọc đúng dữ liệu từ cảm biến
  • Ghi chính xác tham số điều khiển
  • Tránh các lỗi nguy hiểm khi vận hành hệ thống

 
 

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.