15.1 C
London
Thứ Hai, Tháng 7 21, 2025
Trang chủMCUSTM32 cơ bảnModbus RTU STM32 (Phần 1)

Modbus RTU STM32 (Phần 1)

Trong các hệ thống điều khiển công nghiệp, Modbus RTU là một trong những giao thức truyền thông phổ biến và dễ triển khai nhất nhờ tính đơn giản, ổn định và khả năng tương thích cao. STM32 – dòng vi điều khiển mạnh mẽ và phổ biến – hoàn toàn có thể tích hợp Modbus RTU để giao tiếp với PLC, HMI hoặc các thiết bị khác thông qua giao thức RS485. Bài viết này sẽ giúp bạn hiểu rõ nguyên lý hoạt động của Modbus RTU, cách tích hợp thư viện FreeModbus với STM32 HAL, và thực hiện một demo thực tế. Cùng bắt đầu nhé!

Giới thiệu chung

Modbus là gì?

Là giao thức truyền thông nối tiếp chuẩn công nghiệp, hoạt động theo mô hình master-slave, thường dùng qua chuẩn RS485.

Modbus có 3 dạng:

  • Modbus TCP: Sử dụng đường truyền vật lý thông qua mạng LAN
  • Modbus ASCII: Sử dụng đường truyền vật lý UART, RS232, RS422
  • Modbus RTU: Sử dụng đường truyền vật lý UART, RS232, RS485

Tại sao trong công nghiệp lại sử dụng nhiều giao thức Modbus?

Giao thức đơn giản, dễ triển khai, độ tin cậy cao, và được hỗ trợ rộng rãi bởi PLC, HMI và thiết bị công nghiệp.

STM32 có phù hợp không?

STM32 có tài nguyên đủ mạnh, hỗ trợ UART và Timer, rất phù hợp để làm thiết bị slave hoặc master trong mạng Modbus, cụ thể là Modbus RTU.

Mục tiêu bài viết

Hướng dẫn bạn tích hợp thư viện FreeModbus với STM32 (dùng HAL), giao tiếp được với phần mềm Modbus master thực tế qua RS485.

Tổng quan lý thuyết về Modbus RTU

Như đã nói ở phần trước, giao thức Modbus có 3 dạng: Modbus TCP, Modbus ASCII, Modbus RTU. Trong phạm vi bài viết này, mình sẽ đề cập đến việc triển khai giao thức Modbus RTU.

Modbus RTU là 1 dạng trong giao thức Modbus sử dụng đường truyền vật lý RS485 theo cơ chế MasterSlave.

Thiết bị Master gửi yêu cầu đến Slave, slave xử lý và phản hồi lại; tất cả thiết bị dùng chung đường truyền (RS485).

Trong giao thức Modbus RTU, có bốn loại thanh ghi (registers) chính, chia theo chức năng và khả năng truy cập (đọc/ghi). Dưới đây là mô tả chi tiết:

Loại thanh ghi

Địa chỉ logic

Kích thước

Truy cập

Mã chức năng

Ứng dụng

Coils

00001–09999

1 bit

Read/Write

0x01, 0x05, 0x0F

Ngõ ra số (Digital Output)

Discrete Inputs

10001–19999

1 bit

Read

0x02

Ngõ vào số (Digital Input)

Input

30001–39999

16 bit

Read

0x04

Ngõ vào analog (ADC, sensor)

Holding

40001–49999

16 bit

Read/Write

0x03, 0x06, 0x10

Giá trị cài đặt, điều khiển, lưu trữ

Mình sẽ lấy ví dụ để các bạn dễ hình dung về ứng dụng của 4 loại thanh ghi này trong Modbus:

Coils – Điều khiển rơ-le gia nhiệt

  • Dùng để bật/tắt rơ-le điều khiển điện trở nhiệt.
  • Khi nhiệt độ thấp, coil được ghi giá trị 1 để bật gia nhiệt.
  • Khi đủ nhiệt, master ghi 0 để tắt rơ-le.
  • Được điều khiển qua lệnh 0x05 hoặc 0x0F

Discrete Inputs – Giám sát công tắc cửa tủ

  • Kết nối với công tắc từ ở cửa tủ điều khiển.
  • Master đọc trạng thái đóng/mở của cửa bằng 0x02.
  • Nếu cửa mở (giá trị 1), hệ thống báo lỗi hoặc ngừng gia nhiệt.

Input Registers – Đọc nhiệt độ cảm biến

  • Giá trị từ cảm biến nhiệt (ADC) được cập nhật vào Input Register.
  • Master đọc giá trị nhiệt độ hiện tại bằng lệnh 0x04.
  • Ví dụ: Giá trị 230 = 23.0°C nếu dùng hệ số chia 10

Holding Registers – Cài đặt ngưỡng nhiệt độ

  • Người dùng từ HMI nhập giá trị nhiệt độ mục tiêu, ví dụ 250 (25.0°C).
  • Master ghi giá trị vào Holding Register qua lệnh 0x06 hoặc 0x10.
  • STM32 đọc giá trị này để so sánh và điều khiển bật/tắt coil.

Trên đây là lý thuyết cơ bản và ngắn gọn về giao thức Modbus. Các bạn có thể đọc kỹ hơn về giao thức này tại đây. Phần 2 mình sẽ hướng dẫn các bạn cấu hình và thêm thư viện FreeModbus vào vi điều khiển STM32, sử dụng STM32Cube MX + Keil C để tạo ra 1 chương trình Modbus.

5/5 - (1 bình chọn)
BÀI VIẾT LIÊN QUAN

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây

BÀI VIẾT NỔI BẬT