Giao thức Modbus là một trong những giao thức truyền thông quan trọng và phổ biến trong lĩnh vực tự động hóa công nghiệp. Được phát triển vào những năm 1970, Modbus đã trở thành một tiêu chuẩn quốc tế, được sử dụng rộng rãi để kết nối và điều khiển các thiết bị trong các hệ thống tự động hóa và quản lý.
Bài viết này sẽ đi sâu vào khám phá giao thức Modbus là gì, cách nó hoạt động, và tầm quan trọng của nó trong ngành công nghiệp hiện nay. Chúng ta cũng sẽ xem xét các ứng dụng phổ biến của Modbus và đánh giá về hiệu suất và tính khả dụng của nó trong các môi trường khác nhau. Hãy cùng tìm hiểu về một trong những giao thức quan trọng nhất trong ngành tự động hóa – Modbus.
1. MODBUS là gì?
MODBUS được Modicon (hiện nay thuộc Schneider Electric) phát triển năm 1979, là một phương tiện truyền thông với nhiều thiết bị thông qua một cặp dây xoắn đơn. Ban đầu, giao thức này hoạt động trên RS232, nhưng sau đó nó sử dụng cho cả RS485 để đạt tốc độ cao hơn, khoảng cách dài hơn, và mạng đa điểm (multi-drop). MODBUS đã nhanh chóng trở thành tiêu chuẩn thông dụng trong ngành tự động hóa, và Modicon đã cho ra mắt công chúng như một protocol miễn phí.

Trong một hệ thống MODBUS, thiết bị yêu cầu thông tin được gọi là Master và các thiết bị cung cấp thông tin là Slave . Trong mạng Modbus tiêu chuẩn, có một Master và tối đa 247 Slave , mỗi Slave có một Địa chỉ duy nhất từ 1 đến 247. Slave cũng có thể ghi thông tin vào Master
2. Nguyên lý hoạt động MODBUS
Tổng quan hệ thống:
MODBUS là một hệ thống “Master – Slave”, “Master ” được kết nối với một hay nhiều “Slave”. “Master ” thường là một PLC, PC, DCS, hay RTU. “Slave” thường là các thiết bị hiện trường chẳng hạn như cảm biến, bộ truyền động, bộ điều khiển logic lập trình , tất cả được kết nối với mạng trong cấu hình multi-drop. Khi một Master muốn có thông tin từ thiết bị, Master sẽ gửi một thông điệp về dữ liệu cần, tóm tắt dò lỗi tới địa chỉ thiết bị. Mọi thiết bị khác trên mạng sẽ nhận thông điệp này nhưng chỉ có thiết bị nào được chỉ định mới có phản ứng.Dữ liệu được gửi dưới dạng chuỗi các số một và số 0 được gọi là bit. Mỗi bit được gửi dưới dạng điện áp. Số 0 được gửi dưới dạng điện áp dương và số không là điện áp âm. Các bit được gửi rất nhanh. Tốc độ truyền điển hình là 9600 baud (bit trên giây).
Các thuật ngữ và kỹ thuật được dùng trong giao thức MODBUS:
- Data Frame
Trong giao thức Modbus, frame data là một đơn vị dữ liệu được sử dụng để truyền thông tin giữa các thiết bị Modbus. Frame data bao gồm các thành phần sau:
- Địa chỉ thiết bị (Device address): Là một byte dữ liệu xác định thiết bị mà frame data được gửi đến. Địa chỉ thiết bị có giá trị từ 1 đến 247. Ví dụ mỗi Slave trong mạng được gán một địa chỉ đơn vị duy nhất từ 1 đến 247. Khi Master yêu cầu dữ liệu, byte đầu tiên nó gửi là địa chỉ Slave . Bằng cách này, mỗi Slave biết sau byte đầu tiên có nên bỏ qua thông báo hay không.
- Mã chức năng (Function code): Là một byte dữ liệu xác định loại hành động mà frame data yêu cầu thiết bị thực hiện. Có nhiều mã chức năng khác nhau được định nghĩa trong giao thức Modbus, mỗi mã chức năng tương ứng với một loại hành động cụ thể.
- Dữ liệu (Data): Là các byte dữ liệu được sử dụng để truyền thông tin cho thiết bị. Kích thước của dữ liệu phụ thuộc vào mã chức năng được sử dụng.
- Kiểm tra CRC (CRC check): CRC là viết tắt của Cyclic Redundancy check. Là một byte dữ liệu được sử dụng để kiểm tra tính toàn vẹn của frame data. . Nó là hai byte được thêm vào cuối mỗi thông báo modbus để phát hiện lỗi. Mỗi byte trong tin nhắn được sử dụng để tính CRC. Thiết bị nhận cũng tính toán CRC và so sánh nó với CRC từ thiết bị gửi. Nếu ngay cả một bit trong tin nhắn được nhận không chính xác, CRC sẽ khác và sẽ dẫn đến lỗi.
- Hexadecimal (Hệ thập lục phân)
Khi khắc phục sự cố, có thể hữu ích khi xem dữ liệu thô thực tế đang được truyền đi. Các chuỗi dài gồm số 1 và số 0 rất khó đọc, vì vậy các bit được kết hợp và hiển thị trong hệ thập lục phân. Mỗi khối 4 bit được biểu thị bằng một trong mười sáu ký tự từ 0 đến F.
0000 = 0 | 0100 = 4 | 1000 = 8 | 1100 = C |
---|---|---|---|
0001 = 1 | 0101 = 5 | 1001 = 9 | 1101 = D |
0010 = 2 | 0110 = 6 | 1010 = A | 1110 = E |
0011 = 3 | 0111 = 7 | 1011 = B | 1111 = F |
Mỗi khối 8 bit (được gọi là byte) được biểu diễn bằng một trong 256 cặp ký tự từ 00 đến FF.
- ASCII
ASCII là viết tắt của “American Standard Code for Information Interchange”. Theo cách tương tự, cứ 4 bit có thể được kết hợp và biểu diễn bằng một trong mười sáu ký tự thập lục phân từ 0 đến F, cứ 8 bit (mỗi byte) có thể được kết hợp và biểu diễn bằng một trong 256 ký tự ASCII, bao gồm các ký tự bàn phím chung. Ví dụ: một số giá trị cho các ký tự ASCII là …
decimal(base10) | binary(base2) | Hex(base16) | ASCII(base256) |
---|---|---|---|
0 | 0000 0000 | 00 | null |
1 | 0000 0001 | 01 | “ |
34 | 0010 0010 | 22 | # |
35 | 0010 0011 | 23 | $ |
36 | 0010 0100 | 24 | % |
47 | 0010 1111 | 2F | / |
48 | 0011 0000 | 30 | 0 |
49 | 0011 0001 | 31 | 1 |
56 | 0011 1000 | 38 | 8 |
57 | 0011 1001 | 39 | 9 |
58 | 0011 1010 | 3A | : |
64 | 0100 0000 | 40 | @ |
65 | 0100 0001 | 41 | A |
66 | 0100 0010 | 42 | B |
89 | 0101 1001 | 59 | Y |
90 | 0101 1010 | 5A | Z |
91 | 0101 1011 | 5B | [ |
95 | 0101 1111 | 5F | _ |
96 | 0110 0000 | 60 | ` |
97 | 0110 0001 | 61 | a |
122 | 0111 1010 | 7A | z |
123 | 0111 1011 | 7B | { |
174 | 1010 1110 | AE | ® |
255 | 1111 1111 | FF |
- Register (Thanh ghi lưu trữ dữ liệu)

Thông tin dữ liệu được lưu trữ trong thiết bị Slave được chia trong 4 khoảng giá trị khác nhau. Hai khoảng lưu trữ các giá trị rời rạc on/off (coils) và hai khoảng lưu trữ giá trị số (register – thanh ghi). Mỗi coils và register đều có khoảng biến chỉ đọc (read-only) và biến đọc và ghi (read-write).
- Mỗi khoảng có 9999 biến giá trị
- Mỗi coil hoặc contact là 1 bit và được gán một địa chỉ dữ liệu trong khoảng từ 0000 đến 270E
- Mỗi register là 1 word = 16 bít = 2 bytes và cũng được gán một địa chỉ dữ liệu từ 0000 đến 270E
Coil/Register Numbers | Data Addresses | Type | Table Name |
---|---|---|---|
1-9999 | 0000 to 270E | Read-Write | Discrete Output Coils |
10001-19999 | 0000 to 270E | Read-Only | Discrete Input Contacts |
30001-39999 | 0000 to 270E | Read-Only | Analog Input Registers |
40001-49999 | 0000 to 270E | Read-Write | Analog Output Holding Registers |
Coil/Register Numbers có thể được coi như tên vị trị vì chúng không xuất hiện trong các thông điệp thực tế. “Data Addressses” được sử dụng trong các thông điệp truyền tải (truy xuất dữ liệu).
Ví dụ: Holding Register có số là 40001, có “Data Address” là 0000. Sự khác biệt giữa hai giá trị này là độ lệch. Mỗi bảng có một độ lệch khác nhau. 1, 10001, 30001 và 40001.
- Function code
Byte thứ hai được “Master” gửi đi là “Function code”. Con số này cho “Slave” biết được rằng, địa chỉ nào cần truy cập để đọc hay ghi giá trị.
Function Code | Action | Table Name |
---|---|---|
01 (01 hex) | Read | Discrete Output Coils |
05 (05 hex) | Write single | Discrete Output Coil |
15 (0F hex) | Write multiple | Discrete Output Coils |
02 (02 hex) | Read | Discrete Input Contacts |
04 (04 hex) | Read | Analog Input Registers |
03 (03 hex) | Read | Analog Output Holding Registers |
06 (06 hex) | Write single | Analog Output Holding Register |
16 (10 hex) | Write multiple | Analog Output Holding Registers |
Dưới đây là một số ví dụ về các mã chức năng thường được sử dụng trong giao thức Modbus:
- Function Code 01 (lệnh đọc dữ liệu từ một thanh ghi): Mã chức năng này được sử dụng để yêu cầu một thiết bị Modbus đọc dữ liệu từ một thanh ghi cụ thể.
- Function Code 02 (lệnh ghi dữ liệu vào một thanh ghi): Mã chức năng này được sử dụng để yêu cầu một thiết bị Modbus ghi dữ liệu vào một thanh ghi cụ thể.
- Function Code 03 (lệnh đọc dữ liệu từ nhiều thanh ghi): Mã chức năng này được sử dụng để yêu cầu một thiết bị Modbus đọc dữ liệu từ nhiều thanh ghi.
- Function Code 04 (lệnh ghi dữ liệu vào nhiều thanh ghi): Mã chức năng này được sử dụng để yêu cầu một thiết bị Modbus ghi dữ liệu vào nhiều thanh ghi.

Lệnh và phản hồi trong chuẩn MODBUS
Data Addresses | Read | Write Single | Write Multiple |
---|---|---|---|
Discrete Output Coils 0xxxx | FC01 | FC05 | FC15 |
Discrete Input Contacts 1xxxx | FC02 | NA | NA |
Analog Input Registers 3xxxx | FC04 | NA | NA |
Analog Output Holding Registers 4xxxx | FC03 | FC06 | FC16 |
Kiểu dữ liệu được dùng trong MODBUS
Ví dụ: FC03 cho thấy register 40108 chứa AE41 chuyển sang 16 bit là 1010 1110 0100 0001.
Register 40108 có thể được hiểu là bất kỳ kiểu dữ liệu 16 bit nào sau đây:
- Một số nguyên không dấu 16 bit (một số nguyên không dấu nằm từ 0 đến 65535): Register 40108 chứa AE41 = 44,609 (chuyển từ hệ lục phân sang hệ thập phân)
- Một số nguyên có dấu 16 bit (một số nguyên có dấu nằm từ -32768 đến 32767): AE41 = -20,927 (chuyển đổi từ hệ lục phân sang hệ thập phân không lặp lại, nếu nó quá 32767 thì trừ đi 65535)
- Một chuỗi ASCII hai ký tự (2 chữ cái đã nhập): AE41 = ® A
- Một giá trị on/off rời rạc (giá trị này hoạt động giống như số nguyên 16 bit có giá trị 0 hoặc 1. Dữ liệu hex sẽ là 0000 hoặc 0001)
Register 40108 cũng có thể được kết hợp với 40109 để tạo thành bất kỳ kiểu dữ liệu 32 bit nào sau đây:
- Một số nguyên không dấu 32 bit (một số từ 0 đến 4,294,967,295): 40108.40109 = AE41 5652 = 2.923.517.522
- Một số nguyên có dấu 32 bit (một số từ -2,147,483,648 đến 2,147,483,647) AE41 5652 = -1,371,449,774
- Một số dấu phẩy động IEEE 32 bit. Đây là một công thức toán học cho phép bất kỳ số thực nào (một số có dấu thập phân) được biểu diễn bằng 32 bit với độ chính xác khoảng bảy chữ số. AE41 5652 = -4.395978 E-11
- Một chuỗi ASCII bốn ký tự (4 chữ cái đã nhập) AE41 5652 = ® A V R. Nhiều Register hơn có thể được kết hợp để tạo thành chuỗi ASCII dài hơn. Mỗi Register được sử dụng để lưu trữ hai ký tự ASCII (2 byte)
Byte và Word trong giao thức MODBUS
Giao thức Modbus không xác định chính xác cách dữ liệu được lưu trữ trong các thanh ghi. Do đó, một số nhà sản xuất đã triển khai tích hợp chuẩn modbus trong thiết bị của họ để lưu trữ và truyền byte cao hơn đầu tiên sau đó là byte thấp hơn. (AE trước 41). Ngoài ra, cũng có những nhà sản xuất khác lưu trữ và truyền byte thấp hơn trước và sau đó là byte cao hơn (41 trước AE).
Tương tự, khi các thanh ghi được kết hợp để sử dụng các kiểu dữ liệu 32 bit. Một số thiết bị lưu trữ và truyền 16 bit cao hơn (word cao) trong thanh ghi đầu tiên và word thấp hơn trong thanh ghi thứ hai (AE41 trước 5652) trong khi những thiết bị khác làm ngược lại (5652 trước AE41)
Không quan trọng thứ tự byte hoặc word được gửi đi, miễn là thiết bị nhận biết được là làm cách nào để hoạt động chính xác theo yêu cầu.

Ví dụ: nếu số 2.923.517.522 được gửi dưới dạng số nguyên 32 bit không dấu, nó có thể được sắp xếp theo bất kỳ cách nào trong số bốn cách này.
- AE41 5652
- 5652 AE41
- 41AE 5256
- 5256 41AE
3. Phân loại chuẩn truyền thông MODBUS
Hiện nay, có 03 chuẩn modbus đang được sử dụng phổ biến trong công nghiệp – tự động hóa là: Modbus RTU, Modbus ASCII, Modbus TCP
- Modbus ASCII:
Mọi thông điệp trong giao thức Modbus ASCII đều được mã hóa bằng hexadecimal. Modbus ASCII sử dụng đặc tính ASCII 4 bit. Trong giao thức này với mỗi một byte thông tin cần 2 byte truyền thông gấp đôi so với RTU hay TCP. Tuy nhiên ASCII là giao thức chậm nhất trong 3 loại giao thức.
Nhưng giao thức này lại phù hợp với modem điện thoại hay sử dụng kết nối song radio bởi ASCII sử dụng các tính năng phân định thông điệp Điều này có nghĩa là các rắc rối trong quá trình truyền dẫn sẽ không làm thiết bị nhận dịch sai thông tin.
Chính vì tính năng phân định này, mọi rắc rối trong phương tiện truyền dẫn sẽ không làm thiết bị nhận dịch sai thông tin. Đây là chức năng rất quan trọng khi đề cập đến các giao thức truyền thông cho các modem cần độ chính xác thông tin cao, điện thoại di động, nhiễu âm thanh hay các phương tiện truyền thông chuyên dụng khác.
- Modbus RTU:
Modbus RTU là giao thức mở và sử dụng cổng kết nối RS232 hoặc RS485 để truyền dữ liệu. Mô hình hoạt động của nó cũng giống với các dạng Modbus khác là dạng Master/Slave.
Là giao thức được sử dụng rộng rãi trong nhiều lĩnh vực tự động hóa, công nghiệp,.. vì nó mang những ưu điểm đơn giản dễ dùng và ổn định.
Tốc độ của giao thức này chủ yếu từ 1200 đến 115000 baud. Tốc độ phổ biến nhất là từ 9600 đến 19200 baud. Giảm tối thiểu dây kết nối, tiết kiệm một lượng lớn Modul mở rộng PLC. Ưu điểm của giao thức này là giảm không gian lắp đặt do bộ chuyển đổi có thiết kế mỏng nhỏ gọn so với Modul mở rộng của PLC. Độ ổn định và ít nhiễu so với tín hiệu analog 4-20mA.
Nhược điểm của giao thức này là: Tín hiệu của giao thức này vẫn chậm hơn so với các giao thức trực tiếp analog hoặc Digital. Cần PLC hay Scada có cấu hình mạnh đủ để đọc tất cả các thanh ghi khi dùng nhiều bộ chuyển đổi Modbus RTU.
- Modbus TCP:
Giao thức Modbus TCP nói một cách đơn giản là giao thức RTU và giao diện TCP được truyền trên giao thức ethernet. Giao thức này cho phép giao tiếp ngang hàng nghĩa là master đọc và truyền dữ liệu cho Slave và Slave cũng vậy, master và Slave đều có thể đặt và truyền lệnh. Ở giao thức này có thể có nhiều hơn 1 thiết bị lấy dữ liệu từ máy chủ.
TCP/IP cho phép các khối dữ liệu nhị phân được trao đổi qua máy tính. chức năng của TCP cho phép các dữ liệu được nhận chính xác và IP đảm bảo rằng các thông điệp được xử lý định tuyến chính xác. Lưu ý rằng kết hợp TCP / IP chỉ là một giao thức truyền tải; và không xác định ý nghĩa của dữ liệu hoặc cách hiểu dữ liệu.
Giao thức TCP là dạng giao thức sử dụng cổng mở RJ45 hay chính là cổng internet thông thường.
4. Ứng dụng của Modbus trong công nghiệp và Smart Home
Đối với công nghiệp:
Modbus được sử dụng trong nhiều ứng dụng công nghiệp khác nhau, bao gồm:
- Điều khiển quá trình: Modbus được sử dụng để điều khiển các quá trình công nghiệp như nhiệt độ, áp suất, lưu lượng, v.v. Ví dụ, Modbus có thể được sử dụng để điều khiển nhiệt độ của một nồi hơi bằng cách đọc dữ liệu từ cảm biến nhiệt độ và sau đó sử dụng dữ liệu này để điều chỉnh đầu ra của bộ điều khiển nhiệt độ.
- Giám sát: Modbus được sử dụng để giám sát các thiết bị và quá trình công nghiệp. Ví dụ, Modbus có thể được sử dụng để giám sát nhiệt độ, áp suất, và lưu lượng của một nồi hơi.
- SCADA: Modbus được sử dụng trong các hệ thống SCADA (Supervisory Control and Data Acquisition) để thu thập dữ liệu từ các thiết bị và quá trình công nghiệp.
- Tự động hóa nhà máy: Modbus được sử dụng trong tự động hóa nhà máy để điều khiển các thiết bị và quá trình trong nhà máy. Ví dụ, Modbus có thể được sử dụng để điều khiển máy móc, thiết bị vận chuyển, và hệ thống chiếu sáng trong một nhà máy sản xuất.

Modbus RTU RS485 la gìĐối với Smart Home:
Trong nhà thông minh, Modbus có thể được sử dụng để:
- Điều khiển hệ thống chiếu sáng: Modbus có thể được sử dụng để điều khiển các thiết bị chiếu sáng như đèn, công tắc, và rèm cửa. Ví dụ, Modbus có thể được sử dụng để tự động bật đèn khi trời tối và tắt đèn khi trời sáng.
- Điều khiển hệ thống sưởi ấm, thông gió và điều hòa không khí (HVAC): Modbus có thể được sử dụng để điều khiển các thiết bị HVAC như máy điều hòa nhiệt độ, máy sưởi, và quạt. Ví dụ, Modbus có thể được sử dụng để tự động điều chỉnh nhiệt độ trong nhà dựa trên thời tiết và thói quen sử dụng của người dùng.
- Điều khiển hệ thống an ninh: Modbus có thể được sử dụng để điều khiển các thiết bị an ninh như camera, cảm biến, và báo động. Ví dụ, Modbus có thể được sử dụng để tự động kích hoạt hệ thống báo động khi có người lạ xâm nhập vào nhà.
- Giám sát nhà thông minh: Modbus có thể được sử dụng để giám sát các thiết bị và hệ thống trong nhà thông minh. Ví dụ, Modbus có thể được sử dụng để theo dõi nhiệt độ, độ ẩm, và lượng điện năng tiêu thụ trong nhà.
5. Kết luận
Trong bài viết này, chúng ta đã tìm hiểu về giao thức Modbus và các ứng dụng quan trọng của nó trong ngành công nghiệp hiện nay. Modbus đã chứng tỏ sự linh hoạt và độ tin cậy của mình trong việc kết nối và điều khiển các thiết bị trong các hệ thống tự động hóa và quản lý. Từ việc thu thập dữ liệu từ cảm biến đến điều khiển các thiết bị công nghiệp, Modbus đã đóng vai trò quan trọng trong việc cải thiện hiệu suất và tiết kiệm thời gian và nguồn lực.
Tuy nhiên, không phải lúc nào cũng có một giao thức phù hợp cho tất cả các tình huống. Đánh giá kỹ lưỡng về cách Modbus hoạt động trong môi trường cụ thể của bạn và tùy chỉnh nó nếu cần thiết là điều quan trọng. Tính khả dụng và hiệu suất của Modbus có thể được tối ưu hóa khi sử dụng các công cụ và phần mềm hỗ trợ phù hợp.
Nhìn chung, giao thức Modbus vẫn tiếp tục đóng vai trò quan trọng trong ngành tự động hóa và công nghiệp, và nó dự kiến sẽ tiếp tục phát triển và thích nghi với các tiến bộ trong công nghệ và yêu cầu ngành công nghiệp ngày càng cao.
—————————————————————–
Liên hệ ngay với KST Group để nhận những ưu đãi hấp dẫn và tư vấn nhiệt tình nhất !
THÔNG TIN LIÊN HỆ
KST Group
- Website: https://kstgroup.vn/
- Hotline: 0913 699 545 (Mr. Tuất)
- Email: xuantuat.vu@kimsontien.com
- Địa chỉ: 16 đường 35, An Khánh, Thủ Đức
- Facebook: https://www.facebook.com/kstgroupvn