Modbus trong PLC là gì? Hướng dẫn toàn diện giao tiếp Modbus RTU/TCP
PLC15 tháng 8, 2026· 19 phút đọc · 21 lượt xem

Modbus trong PLC là gì? Hướng dẫn toàn diện giao tiếp Modbus RTU/TCP

Modbus là gì? Hướng dẫn toàn diện về giao thức Modbus RTU/TCP trong PLC: cấu trúc khung tin, function code, 4 vùng nhớ dữ liệu, và ví dụ cấu hình Modbus Master trên Siemens S7-1200.

Nếu PLC là "bộ não" của một dây chuyền sản xuất, thì Modbus chính là một trong những "ngôn ngữ giao tiếp" lâu đời và phổ biến nhất giúp các bộ não này nói chuyện được với nhau — và với biến tần, cảm biến, đồng hồ đo điện, HMI của vô số hãng khác nhau. Bài viết này biên dịch, tổng hợp từ RT Automation, ScadaProtocols.com, Industrial Monitor Direct và tài liệu kỹ thuật chính thức của Siemens, để giúp bạn hiểu đầy đủ về giao thức Modbus — từ nguyên lý cơ bản tới cách cấu hình thực tế.

1. Modbus là gì? Lược sử ra đời

Theo Industrial Monitor Direct, Modbus là một giao thức nhắn tin ở tầng ứng dụng (application-layer messaging protocol), ban đầu được phát triển bởi hãng Modicon (nay chính là Schneider Electric) vào năm 1979 để giao tiếp với các bộ điều khiển logic khả trình (PLC). Giao thức này được công bố ra công chúng (public domain) vào tháng 4/2004 và hiện được duy trì bởi Modbus Organization.

Chính nhờ tính mở, đơn giản và được hỗ trợ gần như phổ biến trên mọi PLC, biến tần (VFD), cảm biến, đồng hồ đo điện và phần mềm SCADA/HMI, Modbus đã trở thành chuẩn thực tế (de facto standard) cho giao tiếp thiết bị công nghiệp qua cả kết nối serial lẫn Ethernet — dù đã hơn 45 năm tuổi, giao thức này vẫn đang được triển khai rộng rãi và chưa có dấu hiệu bị thay thế hoàn toàn, đặc biệt trong việc tích hợp các thiết bị đời cũ (legacy) vào hệ thống hiện đại.

2. Kiến trúc Master/Slave (Client/Server)

Theo RT Automation, giao thức Modbus định nghĩa hai loại thiết bị chính:

  • Client (Master): thiết bị khởi tạo giao tiếp — trong bối cảnh PLC, đây thường là PLC hoặc hệ thống SCADA.

  • Server (Slave): thiết bị phản hồi yêu cầu và trả về dữ liệu — ví dụ biến tần, cảm biến, đồng hồ đo.

Kiến trúc master/slave rõ ràng này chính là lý do khiến Modbus trở thành một trong những giao thức truyền thông công nghiệp dễ hiểu và dễ triển khai nhất. Master gửi lệnh dùng giao thức Modbus, Slave phản hồi lại dữ liệu được yêu cầu — quy trình này cho phép hệ thống tự động hóa điều khiển, đọc dữ liệu và phản hồi theo thời gian thực.

Lưu ý thuật ngữ: tài liệu hiện đại (bao gồm cả đặc tả chính thức mới) đang dần chuyển sang dùng thuật ngữ trung lập hơn "Client/Server" thay vì "Master/Slave", nhưng cấu trúc khung tin (frame), function code và mô hình dữ liệu hoàn toàn giống nhau — nhiều tài liệu kỹ thuật cũ và sách hướng dẫn thiết bị vẫn dùng thuật ngữ Master/Slave truyền thống.

3. Hai biến thể chính: Modbus RTU và Modbus TCP

Modbus RTU (serial)

Truyền qua các chuẩn vật lý serial như RS-232, RS-422 hoặc phổ biến nhất là RS-485 — cho phép kết nối đa điểm (multidrop) nhiều thiết bị trên cùng một đường bus 2 dây. Theo Fernhill Software, mỗi thiết bị trên đường truyền Modbus RTU được gán một Địa chỉ đơn vị (Unit Address) duy nhất trong khoảng 1 đến 247; Master có thể gửi broadcast (thông điệp chung) tới toàn bộ thiết bị bằng địa chỉ 0.

Cấu trúc khung tin Modbus RTU gồm: Địa chỉ thiết bị (1 byte) + Mã hàm/Function code + Dữ liệu + Mã kiểm tra CRC (2 byte). Tổng độ dài khung tin tối đa 256 byte. Giữa các khung tin RTU liên tiếp, cần một khoảng lặng tối thiểu 3,5 ký tự (silence interval) để thiết bị nhận phân biệt được ranh giới giữa các khung tin — đây là chi tiết kỹ thuật quan trọng mà nhiều module truyền thông công nghiệp (như CM 1241 của Siemens) tự động xử lý.

Modbus TCP (Ethernet)

Theo ControllersTech, Modbus TCP dùng kết nối TCP/IP để gửi và nhận thông điệp Modbus — về bản chất là cùng một logic cốt lõi của Modbus RTU nhưng ánh xạ qua mạng Ethernet, với MBAP header (Modbus Application Protocol header) thay thế cho địa chỉ thiết bị và CRC dùng trong RTU (vì Ethernet/TCP đã tự đảm bảo tính toàn vẹn dữ liệu ở tầng thấp hơn, không cần CRC riêng của Modbus nữa). Theo Omnitron Systems, Modbus TCP mặc định hoạt động trên cổng 502.

Bảng so sánh nhanh RTU và TCP

Tiêu chí

Modbus RTU

Modbus TCP

Lớp vật lý

RS-232/RS-422/RS-485 (serial)

Ethernet

Khoảng cách

Tới ~1.200m qua RS-485

Theo hạ tầng mạng Ethernet (có thể rất xa qua switch/router)

Số thiết bị tối đa trên 1 đường bus

Tối đa 247 (theo địa chỉ Unit ID)

Không giới hạn nghiêm ngặt theo giao thức, phụ thuộc hạ tầng mạng

Kiểm tra lỗi

CRC (16-bit)

Dựa vào TCP/IP checksum, không cần CRC riêng

Tốc độ

Chậm hơn (giới hạn bởi baud rate serial)

Nhanh hơn đáng kể

Chi phí hạ tầng

Thấp (chỉ cần cáp xoắn đôi RS-485)

Cần hạ tầng mạng Ethernet

Phù hợp nhất cho

Kết nối PLC-biến tần/cảm biến khoảng cách gần, chi phí thấp

Tích hợp nhiều thiết bị, khoảng cách xa, tốc độ cao

4. Mô hình dữ liệu Modbus: 4 vùng nhớ

Đây là kiến thức nền tảng bắt buộc phải hiểu trước khi cấu hình bất kỳ kết nối Modbus nào. Theo ControllersTech, mọi thiết bị Modbus — dù là PLC, cảm biến hay bộ điều khiển — đều phơi bày (expose) các vùng nhớ mà Master có thể đọc/ghi, chia thành 4 loại:

Vùng nhớ

Loại dữ liệu

Đọc/Ghi

Ký hiệu địa chỉ cũ (4-digit)

Mô tả

Coils

1 bit

Đọc/Ghi

0xxxx

Tương đương đầu ra số (digital output) — cờ ON/OFF mà Master có thể thiết lập

Discrete Inputs

1 bit

Chỉ đọc

1xxxx

Tương đương đầu vào số (digital input) — trạng thái mà Master chỉ có thể giám sát, không điều khiển

Input Registers

16 bit

Chỉ đọc

3xxxx

Thường chứa giá trị đo lường thời gian thực (nhiệt độ, áp suất, dòng điện...)

Holding Registers

16 bit

Đọc/Ghi

4xxxx

Vùng nhớ được dùng nhiều nhất — chứa tham số cấu hình, setpoint, giá trị đo có thể ghi đè

Lưu ý về địa chỉ: theo ModbusMaster.com, trên đường truyền thực tế, địa chỉ được đánh bắt đầu từ 0 (zero-based) — nhưng nhiều tài liệu thiết bị vẫn dùng quy ước cũ "4 chữ số" (ví dụ Holding Register đầu tiên ghi là 40001, Input Register đầu tiên ghi là 30001). Để lấy địa chỉ zero-based thực tế gửi trên đường truyền, chỉ cần bỏ chữ số đầu (chỉ loại bảng) và trừ đi 1. Đây là một trong những nguồn lỗi phổ biến nhất khi cấu hình Modbus lần đầu — đọc nhầm offset dẫn tới đọc sai thanh ghi.

5. Các Function Code quan trọng nhất

Theo ScadaProtocols.com, 6 function code quan trọng nhất dùng trong công việc hàng ngày là:

Mã (Hex)

Tên

Chức năng

01 (0x01)

Read Coils

Đọc trạng thái nhiều Coils

02 (0x02)

Read Discrete Inputs

Đọc trạng thái nhiều Discrete Inputs

03 (0x03)

Read Holding Registers

Đọc nhiều Holding Registers — mã lệnh được dùng nhiều nhất

04 (0x04)

Read Input Registers

Đọc các giá trị đo lường thời gian thực

05 (0x05)

Write Single Coil

Ghi (bật/tắt) một Coil duy nhất

06 (0x06)

Write Single Register

Ghi một Holding Register duy nhất — dùng để thay đổi setpoint

15 (0x0F)

Write Multiple Coils

Ghi nhiều Coils cùng lúc

16 (0x10)

Write Multiple Registers

Ghi nhiều Holding Registers cùng lúc — tối đa 123 thanh ghi/lần theo giới hạn PDU

Theo Industrial Monitor Direct, một mẫu hình phổ biến trong thực tế: dùng Holding Registers (FC03/FC16) cho các tham số cấu hình (configuration parameters, setpoint), và dùng Input Registers (FC04) cho dữ liệu chỉ đọc (đo lường, giá trị tính toán). Ví dụ thực tế: một đồng hồ đo điện Schneider PM5560 phơi bày giá trị điện áp pha đo được (live phase voltage) dưới dạng Input Registers (FC04, chỉ đọc), trong khi giá trị đặt khoảng thời gian đo nhu cầu (demand-interval setpoint) lại là Holding Register (FC03, có thể ghi).

Xử lý lỗi (Exception Response): khi Slave không thể xử lý yêu cầu (ví dụ địa chỉ không tồn tại), Slave sẽ phản hồi với function code gốc cộng thêm 0x80. Ví dụ nếu FC03 (0x03) thất bại, phản hồi sẽ chứa FC 0x83, kèm theo mã lỗi (exception code) giải thích nguyên nhân.

6. Ví dụ khung tin Modbus RTU thực tế

Để hình dung cụ thể, dưới đây là ví dụ đọc 3 Holding Register bắt đầu từ địa chỉ 0, từ thiết bị Slave có địa chỉ 1 (theo ScadaProtocols.com, đã diễn giải):

Yêu cầu (Request):  01 03 00 00 00 02 C4 0B
                     │  │  └──┬──┘ └──┬──┘ └─┬─┘
                     │  │  Địa chỉ  Số lượng CRC
                     │  │  bắt đầu   thanh ghi
                     │  └─ Function code (03 = Read Holding Registers)
                     └──── Địa chỉ thiết bị (Unit ID = 1)

Phản hồi (Response): 01 03 04 01 F4 00 64 FA 6D
                     │  │  │  └──┬──┘ └──┬──┘ └─┬─┘
                     │  │  │  Reg0=500  Reg1=100  CRC
                     │  │  └─ Số byte dữ liệu (04 = 4 byte = 2 thanh ghi)
                     │  └──── Function code (echo lại 03)
                     └─────── Địa chỉ thiết bị (echo lại 1)

Trong ví dụ này, giá trị thanh ghi 0 = 0x01F4 = 500 (có thể là điện áp 50.0V với hệ số tỷ lệ /10 — hệ số quy đổi này tùy thuộc vào tài liệu của từng thiết bị cụ thể, không phải chuẩn Modbus quy định).

Lưu ý về thứ tự byte (Byte Order): dữ liệu Modbus mặc định theo chuẩn big-endian (byte cao trước, byte thấp sau). Tuy nhiên, với các giá trị 32-bit (số thực dấu phẩy động, số nguyên dài) dùng 2 thanh ghi liên tiếp, một số thiết bị dùng thứ tự AB CD (big-endian chuẩn) trong khi số khác dùng CD AB (word-swapped) — đây là nguồn lỗi rất phổ biến khi tích hợp thiết bị đa hãng, luôn cần kiểm tra kỹ tài liệu (datasheet/register map) của từng thiết bị cụ thể.

7. Cấu hình Modbus RTU Master trên Siemens S7-1200 (ví dụ thực tế)

Đây là ứng dụng thực tế phổ biến nhất tại Việt Nam: dùng S7-1200 làm Modbus Master để đọc/ghi dữ liệu từ biến tần hoặc bộ điều khiển nhiệt độ qua RS-485. Theo tài liệu chính thức của Siemens và Industrial Monitor Direct, quy trình cơ bản gồm:

Phần cứng cần thiết

Module truyền thông CM 1241 RS485 (mã 6ES7 241-1CH30-0XB0) hoặc CM 1241 RS422/485 (6ES7 241-1CH32-0XB0) gắn thêm vào CPU S7-1200 — CPU có thể gắn tối đa 3 module truyền thông.

Khối lệnh (Instruction) cần dùng trong TIA Portal

Từ thư viện Instructions → Communication → MODBUS:

  • MB_COMM_LOAD: khởi tạo cấu hình cổng serial (baud rate, parity, số bit dữ liệu, số bit stop) — chỉ cần gọi một lần khi khởi động (dùng bit "First Scan"), trừ khi cần thay đổi cấu hình cổng trong lúc chạy.

  • MB_MASTER: chọn thiết bị Slave cần giao tiếp (Modbus Address), chọn function code (đọc/ghi), địa chỉ bắt đầu Modbus và độ dài dữ liệu, định nghĩa vùng nhớ lưu dữ liệu cục bộ.

Các tham số cấu hình chính của MB_COMM_LOAD:

  • PORT: Hardware ID của module CM 1241.

  • BAUD: tốc độ baud (300 đến 115200), phải khớp với thiết bị Slave.

  • PARITY: 0 = None, 1 = Odd, 2 = Even — phải khớp chính xác với Slave, đây là nguyên nhân lỗi giao tiếp phổ biến nhất.

  • DATA_BITS, STOP_BITS: số bit dữ liệu và bit dừng.

Lưu ý quan trọng khi triển khai (theo Industrial Monitor Direct):

  • Chỉ dùng một MB_MASTER instance cho mỗi lần gọi trong một chu kỳ OB1 — gọi 2 lần MB_MASTER trong cùng một chu kỳ quét sẽ gây xung đột, trả về lỗi Status 80C8 (yêu cầu bị từ chối vì cổng đang bận) hoặc làm hỏng khung dữ liệu phản hồi.

  • Với nhiều Slave trên cùng một bus RS-485 (multidrop), cần lần lượt gọi MB_MASTER cho từng Slave, chỉ kích hoạt yêu cầu tiếp theo (REQ) sau khi bit BUSY của yêu cầu trước đã về 0.

  • CM 1241 tự động xử lý khoảng lặng 3,5 ký tự bắt buộc giữa các khung Modbus RTU — không cần lập trình viên tự tính toán thời gian này.

  • Tham số RESP_TO trên MB_COMM_LOAD quyết định thời gian chờ tối đa cho phản hồi từ Slave — cần đặt đủ lớn để tránh timeout giả trên các đường bus dài hoặc thiết bị Slave phản hồi chậm.

8. Modbus trên các hãng PLC phổ biến khác tại Việt Nam

  • Mitsubishi FX: hỗ trợ Modbus RTU qua module truyền thông mở rộng gắn thêm vào CPU, hoặc qua adapter RS-485 tích hợp trên một số model — cần cấu hình thêm tham số D8120 (thanh ghi cấu hình cổng truyền thông) theo tài liệu chính thức.

  • Delta DVP: hầu hết các CPU DVP tích hợp sẵn cổng RS-232/RS-485 hỗ trợ Modbus RTU cả vai trò Master lẫn Slave ngay từ đầu, không cần module mở rộng riêng — đây là một lợi thế đáng kể của Delta trong các ứng dụng cần giao tiếp Modbus đơn giản, chi phí thấp.

  • Omron, LS Electric: đều hỗ trợ Modbus RTU/TCP qua cổng tích hợp sẵn hoặc module mở rộng tùy dòng CPU cụ thể.

(Xem thêm các bài giới thiệu từng hãng trên site để biết chi tiết cấu hình cụ thể.)

9. Ưu điểm và hạn chế của Modbus

Ưu điểm:

  • Đơn giản, dễ hiểu, dễ triển khai — phù hợp cho cả người mới bắt đầu.

  • Chuẩn mở (open standard), miễn phí sử dụng, không cần trả phí bản quyền.

  • Được hỗ trợ gần như phổ biến trên mọi thiết bị công nghiệp (PLC, VFD, cảm biến, đồng hồ đo).

  • Chi phí triển khai thấp, đặc biệt với Modbus RTU chỉ cần cáp xoắn đôi RS-485.

Hạn chế:

  • Không có cơ chế bảo mật tích hợp sẵn (không mã hóa, không xác thực) — cần các biện pháp bảo mật bổ sung ở tầng mạng nếu triển khai trên hệ thống có kết nối internet.

  • Modbus RTU có tốc độ chậm hơn đáng kể so với các giao thức Ethernet công nghiệp hiện đại (Profinet, EtherNet/IP, EtherCAT).

  • Giới hạn 247 thiết bị trên một đường bus RTU có thể là rào cản với hệ thống rất lớn.

  • Không có cơ chế chuẩn hóa việc mô tả ý nghĩa dữ liệu (ví dụ: thanh ghi nào là gì) — mỗi thiết bị tự định nghĩa register map riêng, đòi hỏi luôn phải tra cứu tài liệu (datasheet) của từng thiết bị cụ thể.

10. Câu hỏi thường gặp (FAQ)

Modbus RTU và Modbus TCP khác nhau cơ bản nhất ở điểm nào? Modbus RTU truyền qua serial (RS-485/RS-422/RS-232), phù hợp khoảng cách gần, chi phí thấp; Modbus TCP truyền qua Ethernet, tốc độ nhanh hơn và phù hợp mạng lớn — nhưng cả hai dùng chung logic function code và mô hình dữ liệu cốt lõi.

Vì sao đọc Holding Register 40001 trong tài liệu thiết bị lại phải gửi địa chỉ 0 trên đường truyền thực tế? Đây là do quy ước đánh số "4 chữ số" truyền thống (40001 = Holding Register đầu tiên) khác với địa chỉ zero-based thực tế gửi trên khung tin Modbus — cần bỏ chữ số đầu và trừ 1 để có địa chỉ chính xác.

Có cần license hay trả phí gì để dùng Modbus không? Không — Modbus là chuẩn mở, được công bố public domain từ năm 2004, không yêu cầu bất kỳ khoản phí bản quyền nào để triển khai.

Modbus có an toàn để kết nối qua internet không? Bản thân giao thức Modbus không có cơ chế mã hóa hay xác thực — nếu cần truyền qua mạng công cộng/internet, bắt buộc phải bổ sung các lớp bảo mật khác (VPN, tường lửa, mạng riêng ảo) thay vì để cổng Modbus TCP (502) tiếp xúc trực tiếp với internet.

⚡
Chưa biết chọn UPS công suất bao nhiêu?
Nhập danh sách thiết bị, công cụ sẽ tính tự động và gợi ý model phù hợp.
Tính công suất miễn phí

Cần tư vấn giải pháp UPS?

UPSsmart hỗ trợ tư vấn miễn phí, không ràng buộc.