Bài viết

Truyền thông Modbus: Nguyên lý, Ứng dụng và Cách Triển Khai

  1. Giới thiệu về Modbus

Modbus là một giao thức truyền thông công nghiệp được phát triển vào năm 1979 bởi Modicon (Schneider Electric). Đây là một trong những giao thức phổ biến nhất trong lĩnh vực tự động hóa công nghiệp vì tính đơn giản, hiệu quả và khả năng tích hợp với nhiều loại thiết bị khác nhau.

Modbus được thiết kế để truyền dữ liệu giữa các thiết bị điều khiển (PLC, DCS, SCADA) và các cảm biến, thiết bị đo lường thông qua một mạng truyền thông chung.

  1. Các loại giao thức Modbus

Modbus có nhiều biến thể để phù hợp với các yêu cầu truyền thông khác nhau:

2.1. Modbus RTU (Remote Terminal Unit)

  • Chạy trên chuẩn RS-232, RS-485 hoặc RS-422.
  • Dữ liệu được truyền theo định dạng nhị phân giúp tăng tốc độ và hiệu quả.
  • Sử dụng cơ chế kiểm tra lỗi CRC (Cyclic Redundancy Check) để đảm bảo tính toàn vẹn dữ liệu.
  • Phù hợp với các hệ thống cần truyền dữ liệu nhanh và ổn định.

2.2. Modbus ASCII

  • Sử dụng ký tự ASCII để truyền dữ liệu, dễ đọc hơn so với Modbus RTU.
  • Sử dụng kiểm tra lỗi LRC (Longitudinal Redundancy Check).
  • Thường được dùng trong các hệ thống yêu cầu tính tương thích cao nhưng tốc độ không phải yếu tố quan trọng.

2.3. Modbus TCP/IP

  • Chạy trên nền Ethernet TCP/IP, sử dụng cổng 502.
  • Không cần cơ chế kiểm tra lỗi như RTU vì Ethernet đã có sẵn phương thức kiểm tra lỗi.
  • Dễ dàng tích hợp với các hệ thống điều khiển hiện đại (SCADA, IoT, Cloud).
  1. Cách thức hoạt động của Modbus

Modbus hoạt động theo mô hình Master-Slave hoặc Client-Server.

3.1. Master-Slave (RTU, ASCII)

  • Một thiết bị Master (chủ) gửi yêu cầu đến Slave (thiết bị cấp dưới).
  • Slave phản hồi yêu cầu của Master.
  • Mỗi mạng Modbus RTU hoặc ASCII chỉ có một Master nhưng có thể có nhiều Slave (1-247 địa chỉ).

3.2. Client-Server (Modbus TCP/IP)

  • Client (thiết bị gửi yêu cầu) có thể là một hệ thống SCADA, PLC hoặc HMI.
  • Server (thiết bị nhận yêu cầu) có thể là cảm biến, mô-đun I/O, thiết bị đo.
  • Giao tiếp sử dụng Ethernet giúp mở rộng khả năng truyền dữ liệu trên mạng lớn hơn.

3.3. Các hàm cơ bản trong Modbus

Modbus sử dụng các Function Code để giao tiếp với thiết bị:

Mã lệnh

Chức năng

01

Đọc trạng thái Coil (bit)

02

Đọc Input trạng thái (bit)

03

Đọc thanh ghi giữ (16-bit)

04

Đọc Input thanh ghi (16-bit)

05

Ghi một Coil đơn (bit)

06

Ghi một thanh ghi đơn (16-bit)

15

Ghi nhiều Coil

16

Ghi nhiều thanh ghi

  1. Địa chỉ thanh ghi trong Modbus

Trong Modbus, dữ liệu được tổ chức thành bốn loại bảng chính, mỗi loại có một phạm vi địa chỉ khác nhau và mục đích sử dụng riêng.

4.1. Bốn loại bảng trong Modbus

Modbus sử dụng hệ thống đánh số từ 0, nhưng khi đọc tài liệu hoặc sử dụng phần mềm cấu hình, nhiều nhà sản xuất sử dụng hệ thống đánh số bắt đầu từ 1. Vì vậy, cần chú ý khi làm việc với địa chỉ.

Loại thanh ghi

Địa chỉ bắt đầu

Phạm vi

Đọc/Ghi

Chức năng

Coils (Output Coils)

00001

00001 - 09999

Đọc/Ghi

Điều khiển đầu ra (relay, LED, motor, van điện từ, v.v.)

Discrete Inputs (Input Status)

10001

10001 - 19999

Chỉ đọc

Trạng thái đầu vào số (công tắc, cảm biến, tín hiệu số)

Holding Registers (Output Registers)

40001

40001 - 49999

Đọc/Ghi

Lưu trữ giá trị điều khiển (biến tần, PID, cảm biến analog)

Input Registers (Input Registers)

30001

30001 - 39999

Chỉ đọc

Dữ liệu cảm biến (nhiệt độ, áp suất, dòng điện, điện áp, v.v.)

4.2. Chi tiết từng loại thanh ghi

4.2.1. Coils (00001 - 09999)

Coil là đầu ra số (bit) có thể bật hoặc tắt. Các thiết bị như relay, LED, van điện từ thường sử dụng loại này.

  • Lệnh Modbus sử dụng:
    • Function Code 01 (Đọc nhiều Coils).
    • Function Code 05 (Ghi 1 Coil).
    • Function Code 15 (Ghi nhiều Coils).
  • Ví dụ:
    • Coil 00001 có thể là đầu ra relay 1.
    • Coil 00005 có thể là đầu ra kích hoạt động cơ.

4.2.2. Discrete Inputs (10001 - 19999)

Discrete Input là đầu vào số (bit), thường được sử dụng cho các tín hiệu số từ công tắc, cảm biến.

  • Lệnh Modbus sử dụng:
    • Function Code 02 (Đọc trạng thái đầu vào số).
  • Ví dụ:
    • Input 10001 có thể là trạng thái cảm biến từ (ON/OFF).
    • Input 10005 có thể là tín hiệu từ công tắc hành trình.

4.2.3. Holding Registers (40001 - 49999)

Holding Registers là thanh ghi 16-bit có thể đọc và ghi, dùng để lưu trữ giá trị điều khiển như tốc độ biến tần, cài đặt PID, thông số cảm biến.

  • Lệnh Modbus sử dụng:
    • Function Code 03 (Đọc nhiều Holding Registers).
    • Function Code 06 (Ghi một Holding Register).
    • Function Code 16 (Ghi nhiều Holding Registers).
  • Ví dụ:
    • 40001 có thể là tốc độ quạt trong hệ thống HVAC (giá trị từ 0 - 1000).
    • 40005 có thể là giá trị đặt nhiệt độ của bộ điều khiển PID (từ 0 - 100°C).

4.2.4. Input Registers (30001 - 39999)

Input Registers là thanh ghi 16-bit chỉ đọc, thường chứa dữ liệu từ cảm biến analog như nhiệt độ, áp suất, dòng điện.

  • Lệnh Modbus sử dụng:
    • Function Code 04 (Đọc nhiều Input Registers).
  • Ví dụ:
    • 30001 có thể là giá trị nhiệt độ đo được từ cảm biến RTD (dạng 16-bit, từ -50°C đến 150°C).
    • 30010 có thể là giá trị dòng điện đo từ cảm biến dòng (0-20mA tương ứng với 0-1000).

4.3. Cách truy xuất dữ liệu Modbus

Để đọc và ghi dữ liệu trong Modbus, bạn cần biết Function Codeđịa chỉ thanh ghi.
Dưới đây là ví dụ truy vấn Modbus để đọc giá trị từ địa chỉ 40001 (Holding Register đầu tiên).

Ví dụ truy vấn Modbus RTU

Giả sử bạn có một thiết bị có địa chỉ Slave ID = 1 và muốn đọc giá trị tại thanh ghi 40001:

  • Yêu cầu (Request - gửi từ Master đến Slave):

01 03 00 00 00 01 85 DB

    • 01 → Slave ID.
    • 03 → Function Code (Đọc Holding Register).
    • 00 00 → Địa chỉ bắt đầu (40001 thực tế là 0 khi gửi qua Modbus).
    • 00 01 → Số lượng thanh ghi muốn đọc.
    • 85 DB → CRC (Checksum)

 

  • Phản hồi (Response - Slave gửi lại Master):

01 03 02 00 64 B8 44

    • 02 → Số byte dữ liệu trả về (1 thanh ghi = 2 byte).
    • 00 64 → Dữ liệu trả về (giá trị decimal = 100).

Giá trị đọc từ 40001 là 100.

4.4. Một số lưu ý quan trọng

  1. Modbus đánh số từ 0, nhưng nhiều phần mềm cấu hình lại đánh số từ 1. Ví dụ, 40001 trong phần mềm có thể là 0 trong gói tin Modbus.
  2. Modbus RTU sử dụng CRC-16 để kiểm tra lỗi, còn Modbus TCP/IP không cần vì Ethernet đã có kiểm tra lỗi riêng.
  3. Các thiết bị có thể có thanh ghi tùy chỉnh, nên cần đọc tài liệu của thiết bị để biết đúng địa chỉ cần đọc.
  1. Ứng dụng của Modbus

Modbus được sử dụng rộng rãi trong các lĩnh vực như:

  • Tự động hóa nhà máy: Kết nối PLC, cảm biến, bộ điều khiển nhiệt độ, biến tần.
  • SCADA và giám sát từ xa: Truyền dữ liệu từ thiết bị đo lường đến hệ thống giám sát.
  • Năng lượng: Theo dõi hệ thống điện mặt trời, quản lý hệ thống đo lường công suất.
  • IoT & Công nghiệp 4.0: Kết nối dữ liệu lên nền tảng đám mây qua Modbus TCP/IP.
  1. Cách triển khai Modbus

Tùy vào nhu cầu, bạn có thể triển khai Modbus bằng nhiều cách:

6.1. Cấu hình phần cứng

  • Modbus RTU: Dùng dây RS-485, kết nối tối đa 32 thiết bị trên một đường truyền.
  • Modbus TCP/IP: Kết nối thông qua mạng Ethernet với cáp CAT5/CAT6.

6.2. Cấu hình phần mềm

  • PLC: Cấu hình Modbus trong phần mềm lập trình PLC như TIA Portal (Siemens), GX Works (Mitsubishi).
  • SCADA: Dùng phần mềm như Ignition, WinCC, FactoryTalk để đọc dữ liệu từ Modbus.
  • Python/Node.js: Dùng thư viện như pymodbus hoặc node-modbus để giao tiếp Modbus TCP/IP.
  1. Kết luận

Modbus là một giao thức truyền thông mạnh mẽ, dễ triển khai, và vẫn là lựa chọn hàng đầu trong công nghiệp. Việc hiểu rõ về Modbus giúp bạn dễ dàng kết nối các thiết bị trong hệ thống tự động hóa, giám sát và điều khiển hiệu quả.

Nếu bạn đang làm việc với Modbus, hãy cân nhắc chọn loại giao thức phù hợp để tối ưu hóa hiệu suất hệ thống của mình!