1. MODBUS là gì?
Modbus là chuẩn giao thức truyền thông công nghiệp do hãng Modicon (nay thuộc Schneider Electric) công bố năm 1979 để nối các PLC của hãng với nhau. Giao thức quy định cấu trúc khung dữ liệu và tập lệnh đọc, ghi, không quy định phần cứng đường truyền.Modbus trở thành tiêu chuẩn thực tế (de facto) của ngành tự động hoá vì ba lý do: đặc tả công khai, miễn phí bản quyền và đơn giản để cài đặt trên vi điều khiển nhỏ. Từ năm 2004, đặc tả Modbus do tổ chức phi lợi nhuận Modbus Organization duy trì và công bố. Tổ chức này đã đổi cách gọi Master/Slave thành Client/Server trong tài liệu mới, nhưng phần lớn tài liệu kỹ thuật và phần mềm tại nhà máy vẫn dùng thuật ngữ cũ, nên bài viết giữ cách gọi Master/Slave.

2. Nguyên tắc hoạt động của MODBUS
Modbus hoạt động theo nguyên tắc Master – Slave (chủ – tớ). Một Master nối với một hoặc nhiều Slave. Master thường là PLC, máy tính công nghiệp, DCS, RTU hoặc máy chủ SCADA. Slave thường là thiết bị cấp hiện trường: mô-đun vào ra, biến tần, đồng hồ điện, bộ điều khiển nhiệt độ, cảm biến có ngõ ra số. Thiết bị yêu cầu dữ liệu là Modbus Master; thiết bị cung cấp dữ liệu là Modbus Slave. Trong một mạng Modbus nối tiếp tiêu chuẩn chỉ có một Master và tối đa 247 Slave, mỗi Slave mang một địa chỉ duy nhất từ 1 đến 247. Master đọc dữ liệu từ Slave và cũng ghi được dữ liệu xuống Slave, ví dụ đặt tần số cho biến tần.
3. Các tiêu chuẩn Modbus được sử dụng phổ biến
Ba biến thể Modbus đang được dùng phổ biến trong công nghiệp là Modbus RTU, Modbus ASCII và Modbus TCP. Cả ba dùng chung tập mã hàm và mô hình dữ liệu, khác nhau ở cách mã hoá khung và đường truyền vật lý.
| Tiêu chí | Modbus ASCII | Modbus RTU | Modbus TCP |
|---|---|---|---|
| Đường truyền | RS-232, RS-485, modem | RS-232, RS-485 | Ethernet, cổng TCP 502 |
| Mã hoá | Ký tự ASCII, 2 ký tự cho 1 byte | Nhị phân, 1 byte cho 1 byte | Nhị phân trong gói TCP/IP |
| Kiểm lỗi | LRC | CRC 16 bit | Do tầng TCP/IP đảm nhiệm |
| Phân định khung | Ký tự bắt đầu ":" và kết thúc CR LF | Khoảng lặng ≥ 3,5 ký tự | Tiêu đề MBAP có trường độ dài |
| Định danh thiết bị | Địa chỉ Slave 1–247 | Địa chỉ Slave 1–247 | Địa chỉ IP, thêm Unit ID khi qua gateway |
| Điểm mạnh | Chịu đường truyền kém, dễ đọc khi gỡ lỗi | Hiệu suất cao, được hỗ trợ rộng nhất | Tốc độ cao, nhiều Master, dùng chung hạ tầng mạng nhà máy |
3.1 Modbus ASCII
Trong Modbus ASCII, mỗi byte dữ liệu được mã hoá thành hai ký tự ASCII ở hệ thập lục phân, nên khối lượng truyền gấp đôi Modbus RTU với cùng nội dung. Khung bắt đầu bằng ký tự ":" và kết thúc bằng CR LF, do đó thiết bị nhận xác định được ranh giới khung ngay cả khi có khoảng ngắt bất thường trên đường truyền. Nhờ đặc điểm này, Modbus ASCII chậm nhất trong ba biến thể nhưng phù hợp với đường truyền qua modem điện thoại, sóng vô tuyến hoặc đường dây nhiễu, nơi khoảng lặng giữa các ký tự không ổn định.3.2 Modbus RTU
Modbus RTU mã hoá dữ liệu ở dạng nhị phân, một byte truyền cho một byte dữ liệu, kiểm lỗi bằng CRC 16 bit. Khung được phân định bằng khoảng lặng tối thiểu 3,5 ký tự, nên đòi hỏi đường truyền có định thời ổn định. Modbus RTU chạy trên RS-232 (điểm – điểm) hoặc RS-485 (đa điểm), tốc độ từ 1200 đến 115200 baud, phổ biến nhất là 9600 và 19200 baud. Đây là biến thể được hỗ trợ rộng nhất: hầu hết PLC, biến tần, đồng hồ điện năng và bộ điều khiển nhiệt độ đều có sẵn cổng RS-485 Modbus RTU.
3.3 Modbus TCP
Modbus TCP là Modbus chạy trên Ethernet (đầu nối RJ45). Khung Modbus được đặt trong gói TCP/IP với một tiêu đề MBAP (Modbus Application Protocol header) chứa mã giao dịch, độ dài và Unit ID. Về bản chất, đây là thông điệp Modbus RTU bỏ trường CRC, gửi qua mạng IP thay cho đường nối tiếp. Thiết bị Modbus TCP được định danh bằng địa chỉ IP, lắng nghe ở cổng 502; trường Unit ID chỉ cần thiết khi đi qua gateway nối xuống mạng RS-485. Modbus TCP cho phép nhiều Master cùng truy vấn một Slave và tận dụng switch, cáp mạng sẵn có của nhà máy.
4. Địa chỉ dữ liệu và thanh ghi theo chuẩn MODBUS
Dữ liệu trong thiết bị Slave được tổ chức thành bốn vùng. Hai vùng chứa giá trị rời rạc bật/tắt (coil và ngõ vào rời rạc), hai vùng chứa giá trị số 16 bit (thanh ghi, register). Mỗi loại có một vùng chỉ đọc (read-only) và một vùng đọc – ghi (read-write).- Mỗi vùng có tối đa 9999 phần tử theo cách đánh số truyền thống.
- Mỗi coil hoặc ngõ vào rời rạc là 1 bit, được gán địa chỉ dữ liệu từ 0000 đến 270E (hệ thập lục phân).
- Mỗi thanh ghi là 1 word = 16 bit = 2 byte, cũng được gán địa chỉ dữ liệu từ 0000 đến 270E.
| Số hiệu coil/thanh ghi | Địa chỉ dữ liệu | Quyền truy cập | Tên vùng |
|---|---|---|---|
| 1 – 9999 | 0000 – 270E | Đọc – ghi | Discrete Output Coils (coil ngõ ra) |
| 10001 – 19999 | 0000 – 270E | Chỉ đọc | Discrete Input Contacts (ngõ vào rời rạc) |
| 30001 – 39999 | 0000 – 270E | Chỉ đọc | Analog Input Registers (thanh ghi ngõ vào) |
| 40001 – 49999 | 0000 – 270E | Đọc – ghi | Analog Output Holding Registers (thanh ghi lưu giữ) |
5. Kiểu dữ liệu MODBUS
Đặc tả Modbus chỉ định nghĩa thanh ghi 16 bit, không định nghĩa kiểu dữ liệu. Cách hiểu nội dung thanh ghi do hãng thiết bị quy định trong tài liệu. Lấy ví dụ thanh ghi 40108 chứa giá trị AE41 (hệ thập lục phân), giá trị này có thể được hiểu theo một trong các kiểu 16 bit sau:- Số nguyên không dấu 16 bit (0 đến 65535): AE41 = 44609.
- Số nguyên có dấu 16 bit (-32768 đến 32767): AE41 = -20927 (bù hai: giá trị lớn hơn 32767 thì trừ đi 65536).
- Chuỗi hai ký tự ASCII: AE41 = "®A".
- Giá trị bật/tắt rời rạc lưu trong thanh ghi: chỉ nhận 0000 hoặc 0001.
- Số nguyên không dấu 32 bit (0 đến 4294967295): AE415652 = 2923517522.
- Số nguyên có dấu 32 bit (-2147483648 đến 2147483647): AE415652 = -1371449774.
- Số thực dấu phẩy động IEEE 754 32 bit, độ chính xác khoảng bảy chữ số thập phân: AE415652 ≈ -4,395978 × 10⁻¹¹.
- Chuỗi bốn ký tự ASCII: "®AVR". Ghép nhiều thanh ghi hơn sẽ được chuỗi dài hơn, mỗi thanh ghi chứa hai ký tự.
6. Thứ tự byte và word trong chuẩn Modbus
Đặc tả Modbus quy định trong một thanh ghi 16 bit, byte cao truyền trước byte thấp (big-endian). Với giá trị 32 bit ghép từ hai thanh ghi, đặc tả không quy định thanh ghi nào chứa word cao. Do đó, một số hãng đặt word cao ở thanh ghi đầu (AE41 trước 5652), hãng khác đặt word thấp ở thanh ghi đầu (5652 trước AE41). Một số hãng còn đảo cả thứ tự byte trong từng thanh ghi. Vì vậy, khi ghép giá trị 32 bit, phần mềm Master thường có tuỳ chọn hoán đổi word (word swap) và hoán đổi byte (byte swap). Cách xác định nhanh: đọc một thanh ghi có giá trị đã biết, ví dụ điện áp lưới hoặc tần số 50 Hz, rồi thử các tổ hợp hoán đổi đến khi giá trị hiển thị đúng.
7. Mở rộng thanh ghi trong chuẩn Modbus
Theo cách đánh số truyền thống, vùng Holding Register có số hiệu 40001 đến 49999, tức tối đa 9999 thanh ghi, đủ cho phần lớn thiết bị. Tuy nhiên, trường địa chỉ trong khung Modbus dài 16 bit, cho phép địa chỉ dữ liệu từ 0000 đến FFFF, tức 65536 thanh ghi. Nếu tính theo số hiệu, vùng này kéo dài từ 40001 đến 105536. Nhiều trình điều khiển Modbus trên máy tính (PC Master) được viết với giới hạn 40001 đến 49999 và không truy cập được thanh ghi mở rộng; nhiều thiết bị Slave cũng không hỗ trợ. Ngược lại, thiết bị đời mới với bản đồ dữ liệu lớn (đồng hồ điện năng nhiều thông số, bộ điều khiển đa kênh) có thể đặt dữ liệu ở vùng mở rộng. Khi chọn phần mềm hoặc thiết bị Master, cần kiểm tra có hỗ trợ địa chỉ 6 chữ số hoặc địa chỉ thô 0 đến 65535 hay không.8. Ứng dụng của Modbus trong nhà máy
Modbus là giao thức mở: hãng sản xuất tích hợp Modbus vào thiết bị mà không trả phí bản quyền. Nhờ đó, Modbus có mặt trong hầu hết thiết bị điện tử công nghiệp và là phương tiện phổ biến nhất để nối thiết bị của các hãng khác nhau vào một hệ thống.
- Đưa tín hiệu từ thiết bị đo (nhiệt độ, độ ẩm, áp suất, lưu lượng, điện năng) về bộ điều khiển hoặc máy tính thu thập dữ liệu.
- Nối PLC với biến tần, bộ điều khiển nhiệt độ, van điều khiển để đọc trạng thái và đặt giá trị.
- Nối máy tính giám sát với thiết bị đầu cuối từ xa (RTU) trong hệ thống SCADA của trạm bơm, trạm điện, xử lý nước.
- Làm giao thức chung khi phần mềm MES hoặc hệ thống giám sát năng lượng cần đọc dữ liệu từ máy móc nhiều hãng.
9. Lợi ích khi sử dụng Modbus
- Tương thích rộng: thiết bị của hầu hết các hãng đều hỗ trợ, thuận lợi khi nhà máy có máy móc nhiều đời và nhiều nguồn gốc.
- Chi phí thấp: không phí bản quyền, phần cứng RS-485 rẻ, cáp xoắn đôi hai dây, khoảng cách đến khoảng 1200 m mà không cần bộ lặp.
- Dễ triển khai và bảo trì: khung dữ liệu đơn giản, có thể theo dõi bằng công cụ miễn phí; kỹ thuật viên dễ tìm lỗi.
- Kết nối được với hệ thống giám sát, thu thập dữ liệu cấp trên và các ứng dụng IoT công nghiệp thông qua gateway hoặc Modbus TCP.
