Modbus, một giao thức truyền thông công nghiệp phổ biến, cung cấp giải pháp linh hoạt và hiệu quả cho tự động hóa. Dùng rộng rãi từ điều khiển thiết bị đến thu thập dữ liệu, Modbus đa dạng với các phiên bản RTU, TCP và ASCII, phù hợp với nhiều nhu cầu và cấu hình hệ thống khác nhau. Cùng FIBARO Việt Nam tìm hiểu qua bài viết dưới đây.
1. Giao thức Modbus là gì?
Modbus hoặc MODBUS là giao thức truyền dữ liệu máy khách/máy chủ trong lớp ứng dụng của mô hình OSI. Ban đầu nó được Modicon (nay là Schneider Electric) xuất bản vào năm 1979 để sử dụng với bộ điều khiển logic lập trình (PLC). Modbus đã trở thành một giao thức truyền thông tiêu chuẩn trên thực tế để liên lạc giữa các thiết bị điện tử công nghiệp trong nhiều loại xe buýt và mạng.
Giao thức Modbus hỗ trợ cả truyền thông nối tiếp và truyền thông qua mạng, làm cho nó thích hợp với nhiều loại hệ thống khác nhau. Tính đến ngày nay, Modbus vẫn được sử dụng rộng rãi do khả năng tương thích với nhiều loại thiết bị và hệ thống khác nhau, từ các ứng dụng quản lý năng lượng, giám sát và điều khiển quá trình, đến tích hợp trong các giải pháp IoT công nghiệp.
Với khả năng hoạt động ổn định và hiệu quả trong môi trường công nghiệp, “Modbus” và các biến thể của nó như “Modbus RTU” và “Modbus TCP/IP” tiếp tục được các nhà phát triển hệ thống và kỹ sư lựa chọn để tạo ra các giải pháp tự động hóa hiện đại và thông minh.
>> Nguồn: Modbus (Wiki)
2. Nguyên tắc hoạt động của Modbus
Modbus là một giao thức truyền thông dựa trên kiến trúc master-slave, hoặc client-server trong trường hợp của Modbus TCP/IP. Cơ bản, giao thức này quy định cách các thiết bị trong một hệ thống mạng trao đổi thông tin. Dưới đây là nguyên tắc hoạt động chính của Modbus:
- Giao tiếp Master-Slave: Trong Modbus RTU và ASCII, một thiết bị master duy nhất trong mạng có thể gửi yêu cầu dữ liệu hoặc gửi lệnh đến nhiều thiết bị slave. Các thiết bị slave sau đó phản hồi lại master. Điều này đảm bảo rằng không có xung đột trong giao tiếp giữa các thiết bị.
- Giao tiếp Client-Server trong Modbus TCP/IP: Khác với RTU và ASCII, Modbus TCP/IP sử dụng mô hình client-server. Ở đây, một hoặc nhiều clients có thể gửi yêu cầu đến server. Giao thức này hoạt động trên nền tảng TCP/IP, cho phép truyền thông qua mạng LAN hoặc Internet.
- Cấu trúc Tin nhắn Modbus: Mỗi tin nhắn Modbus bao gồm địa chỉ của thiết bị slave, mã chức năng (định nghĩa loại yêu cầu hoặc lệnh), dữ liệu và một trường kiểm tra lỗi. Điều này đảm bảo rằng thông tin được truyền đi chính xác và không bị lỗi.
- Hỗ trợ Nhiều Loại Dữ liệu: Modbus hỗ trợ nhiều loại dữ liệu, bao gồm cả số nguyên và số thực, giúp nó thích hợp cho nhiều loại ứng dụng khác nhau trong tự động hóa công nghiệp.
- Đơn giản và Hiệu quả: Một trong những lợi ích lớn của Modbus là sự đơn giản trong thiết kế, làm cho nó dễ dàng tích hợp và triển khai, đồng thời đảm bảo hiệu quả cao trong truyền thông.
3. Phân loại chuẩn Modbus
Modbus, với sự linh hoạt và đa dạng trong các phương thức truyền thông, được phân loại thành ba chuẩn chính: Modbus RTU, Modbus TCP/IP, và Modbus ASCII. Mỗi chuẩn có đặc điểm kỹ thuật và ứng dụng riêng biệt, phù hợp với nhu cầu cụ thể trong các hệ thống tự động hóa công nghiệp.
1. Modbus RTU (Remote Terminal Unit)
- Định nghĩa: Modbus RTU là chuẩn truyền thông nối tiếp, sử dụng dữ liệu nhị phân. Đây là hình thức phổ biến nhất của Modbus, được sử dụng trong các ứng dụng cần truyền thông nhanh và hiệu quả.
- Cấu trúc Dữ liệu: Truyền tải dữ liệu ở dạng nhị phân, cho phép truyền thông tốc độ cao và ít lỗi.
- Ứng dụng: Đặc biệt hữu ích trong các hệ thống tự động hóa công nghiệp nơi cần truyền dữ liệu nhanh chóng và tin cậy giữa các thiết bị nối tiếp.
- Tính năng: “Modbus RTU” được biết đến với khả năng truyền thông hiệu quả, giảm thiểu thời gian đáp ứng và tăng cường độ tin cậy.
2. Modbus TCP/IP
- Định nghĩa: Modbus TCP/IP kết hợp giao thức Modbus với giao thức truyền thông Internet TCP/IP, cho phép truyền thông qua mạng LAN hoặc Internet.
- Cấu trúc Dữ liệu: Sử dụng cấu trúc gói tin của TCP/IP, giúp truyền dữ liệu qua mạng một cách hiệu quả và an toàn.
- Ứng dụng: Thích hợp cho các ứng dụng cần tích hợp hệ thống tự động hóa với mạng IT, cung cấp khả năng kết nối từ xa và giám sát trung tâm.
- Tính năng: “Modbus TCP/IP” đặc biệt hữu ích trong môi trường tự động hóa công nghiệp hiện đại, nơi cần tích hợp với các công nghệ thông tin và truyền thông.
3. Modbus ASCII
- Định nghĩa: Modbus ASCII sử dụng ký tự ASCII để truyền thông, phù hợp với các đường truyền chậm hoặc cần kiểm tra và xác nhận thông tin chính xác.
- Cấu trúc Dữ liệu: Mỗi ký tự được truyền dưới dạng một byte ASCII, giúp việc kiểm tra và xác định lỗi trở nên dễ dàng hơn.
- Ứng dụng: Phù hợp cho các ứng dụng cần độ tin cậy cao trong truyền thông, nhưng không yêu cầu tốc độ truyền dữ liệu cao.
- Tính năng: “Modbus ASCII” thường được sử dụng trong các ứng dụng cần kiểm soát chặt chẽ lỗi và độ chính xác trong truyền thông.
Sự kết hợp giữa các chuẩn “Modbus RTU”, “Modbus TCP/IP”, và “Modbus ASCII” tạo nên một hệ thống truyền thông đa dạng và linh hoạt, phù hợp với nhiều loại hệ thống tự động hóa khác nhau, từ các ứng dụng công nghiệp đơn giản đến những hệ thống tự động hóa phức tạp và tích hợp nhiều công nghệ.
4. Bảng So Sánh Sự Khác Biệt Giữa Modbus RTU, TCP và ASCII
Dưới đây là bảng so sánh trực quan giúp hiểu rõ hơn về sự khác biệt giữa Modbus RTU, TCP và ASCII:
Tiêu Chí | Modbus RTU | Modbus TCP | Modbus ASCII |
---|---|---|---|
Truyền Thông | Qua cổng nối tiếp (Serial) | Qua mạng Ethernet | Qua cổng nối tiếp (Serial) |
Định Dạng Dữ Liệu | Dữ liệu nhị phân | Dữ liệu nhị phân với MBAP Header | Mỗi byte dưới dạng 2 ký tự ASCII |
Đặc Điểm Chính | Tốc độ truyền thông nhanh | Hỗ trợ kết nối mạng | Dễ dàng kiểm tra và gỡ lỗi |
Kết Cấu Thông Điệp | Địa chỉ Slave, mã chức năng, dữ liệu, CRC | MBAP Header, thông tin yêu cầu/phản hồi | Dấu hai chấm, thông tin yêu cầu/phản hồi, LRC, ký tự xuống dòng |
Phù Hợp Cho | Môi trường đáp ứng nhanh | Hệ thống tự động hóa tích hợp mạng | Môi trường truyền thông chậm hơn, độ tin cậy cao |
Bảng này cung cấp cái nhìn tổng quan về sự khác biệt giữa ba phiên bản của Modbus, giúp lựa chọn phù hợp với nhu cầu cụ thể của từng hệ thống tự động hóa công nghiệp. Modbus RTU thường được ưa chuộng cho tốc độ truyền thông nhanh, trong khi TCP phù hợp với các hệ thống cần kết nối mạng và ASCII hữu ích cho việc kiểm tra và gỡ lỗi dễ dàng.
5. Cơ Bản về Dữ Liệu và Định Dạng Trong Modbus
5.1. Mã HEXA (HEXADECIMAL)
Trong quá trình khắc phục sự cố và phân tích dữ liệu thô trong giao thức Modbus, việc đọc và hiểu các chuỗi dài gồm số 1 và số 0 có thể trở nên phức tạp và khó khăn. Để giải quyết vấn đề này, dữ liệu thường được kết hợp và hiển thị dưới dạng thập lục phân (HEXADECIMAL), giúp quá trình phân tích trở nên dễ dàng hơn.
Chuyển Đổi từ Binary sang Hexadecimal:
- Trong hệ thập lục phân, mỗi khối 4 bit (đơn vị nhỏ nhất của dữ liệu nhị phân) được biểu diễn bằng một trong mười sáu ký tự từ 0 đến F. Việc này giúp rút ngắn và đơn giản hóa việc đọc dữ liệu.
Dưới đây là bảng chuyển đổi từ binary sang hexadecimal:
| Binary | Hex | | Binary | Hex | | Binary | Hex | | Binary | Hex |
| —— | — | | —— | — | | —— | — | | —— | — |
| 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òn được gọi là byte, lại được biểu diễn bằng một cặp ký tự thập lục phân, từ 00 đến FF. Điều này tạo nên 256 cặp ký tự thập lục phân khác nhau, đủ để biểu diễn mọi giá trị có thể của một byte.
Ứng Dụng trong Modbus:
Trong Modbus, việc sử dụng mã HEXADECIMAL có vai trò quan trọng trong việc phân tích và khắc phục sự cố. Khi xem xét các gói tin truyền thông, định dạng thập lục phân giúp kỹ sư và nhà phát triển dễ dàng xác định và phân tích dữ liệu, từ đó nhanh chóng tìm ra nguyên nhân và giải pháp cho các vấn đề gặp phải.
5.2. ASCII là gì?
ASCII, viết tắt của “American Standard Code for Information Interchange”, là một bảng mã ký tự được sử dụng để biểu diễn văn bản trong máy tính và các thiết bị điện tử khác. Trong ASCII, mỗi ký tự được mã hóa thành một giá trị số cụ thể. Ví dụ: mỗi 8 bit (một byte) có thể biểu diễn một trong 256 ký tự ASCII khác nhau, bao gồm các ký tự thông thường trên bàn phím.
Biểu Đồ Mã ASCII:
Dưới đây là bảng biểu diễn một số giá trị ASCII, cùng với dạng binary và hexadecimal tương ứng:
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 |
Bảng mã ASCII được sử dụng rộng rãi trong lập trình máy tính và truyền thông dữ liệu, bởi nó cung cấp một phương tiện tiêu chuẩn để mã hóa các ký tự văn bản. Trong giao thức Modbus, phiên bản Modbus ASCII sử dụng hệ thống mã này để biểu diễn dữ liệu, giúp dễ dàng truyền và nhận thông tin qua các thiết bị truyền thông.
5.3. Kiểu Dữ Liệu trong Modbus
Trong Modbus, các register có thể chứa dữ liệu ở nhiều dạng khác nhau, tùy thuộc vào kiểu dữ liệu bạn muốn biểu diễn. Điều này cho phép sự linh hoạt trong việc lưu trữ và truyền tải dữ liệu. Ví dụ, xét register 40108 chứa giá trị AE41, có thể được hiểu là nhiều dạng dữ liệu khác nhau.
Kiểu Dữ Liệu 16 bit:
Biểu Diễn | Giá Trị Đọc Được | Chú Thích |
---|---|---|
Số nguyên không dấu 16 bit | AE41 = 44,609 | Chuyển từ hệ lục phân sang hệ thập phân |
Số nguyên có dấu 16 bit | AE41 = -20,927 | Chuyển từ hệ lục phân sang hệ thập phân, áp dụng chuyển đổi dấu |
Chuỗi ASCII 2 ký tự | AE41 = ® A | Biểu diễn dưới dạng ký tự |
Giá trị on/off rời rạc | 0000 hoặc 0001 | Giá trị chỉ 0 hoặc 1 |
Kiểu Dữ Liệu 32 bit (Kết hợp 2 Register):
Biểu Diễn | Giá Trị Đọc Được | Chú Thích |
---|---|---|
Số nguyên không dấu 32 bit | 40108.40109 = AE41 5652 = 2.923.517.522 | Chuyển từ hệ lục phân sang hệ thập phân |
Số nguyên có dấu 32 bit | AE41 5652 = -1,371,449,774 | Chuyển từ hệ lục phân sang hệ thập phân, áp dụng chuyển đổi dấu |
Số dấu phẩy động IEEE 32 bit | AE41 5652 = -4.395978 E-11 | Dạng số thực với độ chính xác cao |
Chuỗi ASCII 4 ký tự | AE41 5652 = ® A V R | Biểu diễn dưới dạng ký tự |
Register 40108 và các register khác trong Modbus có thể được sử dụng để lưu trữ và biểu diễn một loạt dữ liệu khác nhau, cho phép sự linh hoạt và đa dạng trong việc quản lý dữ liệu trong các hệ thống tự động hóa.
5.4. Byte và Word trong Chuẩn Modbus
Chuẩn Modbus không đặt ra quy định cứng nhắc về cách dữ liệu được lưu trữ trong các thanh ghi, điều này dẫn đến sự đa dạng trong cách triển khai của các nhà sản xuất khác nhau.
Cách Sắp Xếp Byte:
Có hai phương thức chính trong việc lưu trữ và truyền dữ liệu:
- Byte Order: Big-Endian – Byte cao (high byte) trước, sau đó là byte thấp (low byte). Ví dụ: AE trước 41.
- Byte Order: Little-Endian – Byte thấp trước, sau đó là byte cao. Ví dụ: 41 trước AE.
Kết Hợp Thanh Ghi cho Dữ Liệu 32 bit:
Khi kết hợp thanh ghi để sử dụng các kiểu dữ liệu 32 bit, cũng có hai phương thức:
- Word Order: High Word First – Word cao (high word) trong thanh ghi đầu tiên, sau đó là word thấp (low word) trong thanh ghi tiếp theo. Ví dụ: AE41 trước 5652.
- Word Order: Low Word First – Ngược lại, word thấp trước, sau đó là word cao. Ví dụ: 5652 trước AE41.
Quan Trọng là Sự Nhất Quán:
Điều quan trọng không phải là thứ tự byte hoặc word được sắp xếp như thế nào, mà là sự nhất quán và đồng bộ giữa thiết bị gửi và nhận, đảm bảo rằng cả hai đều “hiểu” được dữ liệu theo cùng một cách.
Ví Dụ với Số 2.923.517.522:
Nếu số 2.923.517.522 được gửi dưới dạng số nguyên không dấu 32 bit, nó có thể được sắp xếp theo bốn cách khác nhau:
- AE41 5652 (Big-Endian, High Word First)
- 5652 AE41 (Little-Endian, Low Word First)
- 41AE 5256 (Big-Endian, Low Word First)
- 5256 41AE (Little-Endian, High Word First)
Sự linh hoạt này cho phép Modbus phù hợp với nhiều kiến trúc hệ thống khác nhau, nhưng đồng thời cũng yêu cầu sự chú ý khi thiết lập giao tiếp giữa các thiết bị khác nhau.
6. Truyền Thông và Địa Chỉ Trong Modbus
6.1. Địa chỉ dữ liệu và thanh ghi theo chuẩn Modbus
Trong Modbus, thông tin dữ liệu được lưu trữ trong thiết bị Slave được tổ chức thành bốn khoảng giá trị khác nhau. Hai khoảng lưu trữ giá trị rời rạc on/off (coils) và hai khoảng lưu trữ giá trị số (register – thanh ghi). Mỗi coil và register có phần biến chỉ đọc (read-only) và biến đọc và ghi (read-write).
Chi Tiết Địa Chỉ và Khoảng Giá Trị:
- Mỗi Khoảng: Có tới 9999 biến giá trị.
- Coil và Contact: 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.
- Register: Mỗi register là 1 word (16 bit = 2 bytes) và cũng được gán một địa chỉ dữ liệu từ 0000 đến 270E.
Bảng Phân Loại:
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 |
Trong Modbus, “Coil/Register Numbers” có thể được xem như tên vị trí vì chúng không xuất hiện trong các thông điệp truyền tải thực tế. “Data Addresses” được sử dụng trong các thông điệp để truy xuất dữ liệu.
Ví dụ về Địa Chỉ và Độ Lệch:
- Holding Register với số 40001 sẽ có “Data Address” là 0000. Điều này cho thấy có sự khác biệt giữa Coil/Register Numbers và Data Addresses, được gọi là độ lệch. Mỗi bảng có một độ lệch khác nhau: 1, 10001, 30001 và 40001.
Thông qua cách tổ chức này, Modbus cung cấp một cách hiệu quả và rõ ràng để quản lý và truy cập dữ liệu trong các thiết bị Slave, hỗ trợ nhu cầu đa dạng của các ứng dụng tự động hóa công nghiệp.
6.2. Function Code trong Giao thức Modbus
Trong giao thức Modbus, byte thứ hai được gửi bởi “Master” là “Function Code”. Đây là một con số quan trọng, thông báo cho “Slave” biết cần truy cập địa chỉ nào để đọc hoặc ghi giá trị. Function Code xác định loại hoạt động mà Master muốn thực hiện trên Slave.
Tổng quan về Function Codes:
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 |
Mỗi Function Code tương ứng với một loại hành động cụ thể:
- Đọc (Read): Lấy dữ liệu từ các coils hoặc registers trên thiết bị Slave.
- Ghi (Write): Cập nhật giá trị cho một hoặc nhiều coils hoặc registers trên thiết bị Slave.
Ứng dụng của Function Codes:
Function Codes giúp tối ưu hóa quá trình giao tiếp giữa Master và Slave trong Modbus. Tùy thuộc vào yêu cầu cụ thể, Master sẽ sử dụng Function Code phù hợp để thực hiện các hoạt động như đọc hoặc ghi dữ liệu. Điều này đảm bảo rằng truyền thông giữa các thiết bị diễn ra một cách chính xác và hiệu quả, là yếu tố quan trọng trong các hệ thống tự động hóa công nghiệp sử dụng Modbus.
6.3. Lệnh và Phản Hồi trong Chuẩn Modbus
Trong Modbus, việc gửi lệnh và nhận phản hồi là một phần quan trọng của quá trình giao tiếp giữa Master và Slave. Các lệnh được xác định dựa trên loại dữ liệu cần truy cập và hoạt động mong muốn (đọc hoặc ghi). Dưới đây là bảng tổng hợp các lệnh và phản hồi liên quan đến bốn loại dữ liệu chính trong Modbus.
Bảng Lệnh và Phản Hồi:
Data Addresses | Read (FC) | Write Single (FC) | Write Multiple (FC) |
---|---|---|---|
Discrete Output Coils (0xxxx) | 01 | 05 | 15 |
Discrete Input Contacts (1xxxx) | 02 | NA | NA |
Analog Input Registers (3xxxx) | 04 | NA | NA |
Analog Output Holding Registers (4xxxx) | 03 | 06 | 16 |
Giải Thích Chi Tiết:
- Discrete Output Coils (0xxxx):
- Đọc (Read) với Function Code 01 (FC01).
- Ghi đơn (Write Single) với Function Code 05 (FC05).
- Ghi nhiều (Write Multiple) với Function Code 15 (FC15).
- Discrete Input Contacts (1xxxx):
- Chỉ hỗ trợ đọc (Read) với Function Code 02 (FC02).
- Không hỗ trợ ghi (Write).
- Analog Input Registers (3xxxx):
- Chỉ hỗ trợ đọc (Read) với Function Code 04 (FC04).
- Không hỗ trợ ghi (Write).
- Analog Output Holding Registers (4xxxx):
- Đọc (Read) với Function Code 03 (FC03).
- Ghi đơn (Write Single) với Function Code 06 (FC06).
- Ghi nhiều (Write Multiple) với Function Code 16 (FC16).
Ứng Dụng:
Các lệnh và phản hồi này cho phép Master điều khiển và giám sát thiết bị Slave một cách hiệu quả trong hệ thống tự động hóa sử dụng giao thức Modbus. Ví dụ, Master có thể gửi yêu cầu để đọc trạng thái của các coils hoặc giá trị của các registers, và sau đó nhận phản hồi từ Slave với thông tin cần thiết.
—————————————————————-
Liên hệ với FIBARO Việt Nam để được tư vấn miễn phí:
📍 Facebook: https://www.facebook.com/FIBAROVN
📍 Showroom: Số 16, đường 35, An Khánh, Quận 2, Thành phố Hồ Chí Minh
☎️ Hotline: 0913 699 545
📧 Email: xuantuat.vu@kimsontien.com
Last Updated on 16/03/2024 3:34 sáng by Ms. Huyen