MODBUS là gì? Giao thức truyền thông MODBUS RTU, TCP, ASCII

Trong công cuộc công nghiệp hóa – hiện đại hóa, truyền thông trong công nghiệp trở nên thiết yếu và đóng vai trò như xương sống của bất kỳ hệ thống tự động nào. Nó cung cấp cho người dùng phương tiện để trao đổi, kiểm soát dữ liệu cũng như linh hoạt hơn trong việc thiết lập kết nối giữa các thiết bị với nhau.

Giao thức là một tập hợp các quy tắc chuẩn dành cho việc biểu diễn dữ liệu, truyền nhận tín hiệu, chứng thực và phát hiện lỗi dữ liệu. Hiện nay, trong các nhà máy đã và đang sử dụng một số giao thức truyền thông phổ biến trong công nghiệp như Profibus, CANopen, Modbus, ControlNet, …

MODBUS là gì?

MODBUS là một chuẩn giao thức truyền thông công nghiệp được phát hành và phát triển bởi MODICON vào năm 1979, và chính thức thuộc về Schneider Electrics vào năm 1996. Giao thức MODBUS đơn giản và mạnh mẽ đã trở thành một giao thức truyền thông tiêu chuẩn được sử dụng rộng rãi để kết nối các thiết bị điện tử công nghiệp.

Nguyên tắc hoạt động

Modbus là một giao thức giao tiếp sử dụng Tin nhắn (Message) thuộc lớp ứng dụng (Application), tầng 7 của mô hình OSI hay tầng 5 của mô hình TCP/IP.

MODBUS hoạt động theo nguyên tắc “Master – Slave” hay còn gọi là “Chủ – Tớ”. Một Master có thể kết nối được với một hay nhiều “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ỉ Slave duy nhất từ ​​1 đến 247.

Một giao tiếp MODBUS luôn được bắt đầu bởi master. Các nút slave sẽ không bao giờ truyền dữ liệu khi không nhận được yêu cầu từ master node. Các nút slave sẽ không bao giờ giao tiếp với nhau. Nút master chỉ khởi tạo một giao dịch MODBUS ở cùng một thời điểm. Nút master đưa ra một yêu cầu MODBUS cho các nút slave ở hai chế độ Unicast và Broadcast:

  • Chế độ unicast
Master định địa chỉ một slave riêng lẻ. Sau khi nhận và xử lý yêu cầu, slave trả lại một thông điệp (‘reply’ – ‘trả lời’) cho master. Trong chế độ đó, giao dịch MODBUS bao gồm 2 thông điệp: yêu cầu từ master và trả lời từ slave.
Mỗi slave phải có một địa chỉ duy nhất (từ 1 đến 247) để có thể được đánh địa chỉ độc lập với các nút slave khác.
  • Chế độ broadcast
Master có thể gửi một yêu cầu cho tất cả các slave. Không có phản hồi được trả lại cho các yêu cầu broadcast được gửi bởi master. Các yêu cầubroadcast nhất thiết phải là các writing command – lệnh viết. Tất cả các các thiết bị phải chấp nhận broadcast cho hàm viết. Địa chỉ 0 được dành riêng để xác định một broadcast exchange.

Chuẩn MODBUS

Chuẩn MODBUS phổ biến trong công nghiệp gồm: MODBUS RTU, MODBUS TCP và MODBUS ASCII.

Mỗi chuẩn Modbus có đặc điểm khác nhau. Tùy theo thiết bị, yêu cầu của người dùng mà lựa chọn chuẩn Modbus nào.

Modbus RTU

Dữ liệu được mã hóa theo hệ nhị phân, và chỉ cần một byte truyền thông cho một byte dữ liệu. Đây là giao thức truyền thông lí tưởng đối với RS232 hay RS485/422, tốc độ từ 1200 đến 115000 baud.

Modbus RTU là giao thức phổ biến nhất, sử dụng ba phương tiện vật lý: RS 232, RS 485, RS422.

Modbus TCP

MODBUS TCP là MODBUS qua Ethernet (RJ45). Với MODBUS TCP, dữ liệu MODBUS được tóm lược đơn giản trong một gói TCP/IP. Nói một cách đơn giản, đây như là một thông điệp của Modbus RTU được truyền bằng trình bao bọc TCP/IP và được gửi qua mạng thay vì các đường nối tiếp. Máy chủ không có SlaveID vì nó sử dụng địa chỉ IP.

Modbus ASCII

Sử dụng trong giao tiếp nối tiếp, sử dụng các ký tự ASCII. Mọi thông điệp được chuyển đổi sang dạng Hexadecimal (hệ thập lục phân), và sử dụng bảng mã ASCII. Việc chuyển đổi này khiến cho một byte dữ liệu gốc thực tế cần hai byte để biểu diễn, gấp đôi so với Modbus RTU hay Modbus TCP/IP.

Trái ngược với Modbus RTU, người dùng khi sử dụng Modbus ASCIIthì có thể đọc được nội dung tin nhắn trong quá trình giám sát. Tuy nhiên, do Modbus ASCII mang nhiều thông tin mã hóa lệnh hơn nên ModbusASCII có tốc độ chậm hơn Modbus RTUvà Modbus TCP/IP, vì vậy ít được sử dụng nhiều trong thực tế.

Mã HEXA (HEXADECIMAL)

Khi quá trình khắc phục sự cố, khi xem dữ liệu thô thực tế đang được truyền. 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ị ở dạng thập lục phân. Mỗi khối 4 bit được biểu diễn 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 (gọi là byte) được biểu diễn bằng một trong 256 cặp ký tự từ 00 đến FF.

ASCII là gì?

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

Sự khác biệt giữa Modbus RTU và Modbus TCP

Một tiêu đề 7 byte mới được gọi là MBAP Header (Modbus Application Header) được thêm vào đầu thư. Tiêu đề này có dữ liệu sau:

Mã định danh (Transaction ID): 2 byte do Client đặt để nhận dạng từng yêu cầu duy nhất. Các byte này được lặp lại bởi Server vì các phản hồi của nó có thể không được nhận theo thứ tự như các yêu cầu.

Định dạng giao thức (Protocol ID): 2 byte do Client đặt, luôn luôn = 00 00

Độ dài (Length): 2 byte xác định số byte trong thông điệp cần theo dõi.

Định dạng đơn vị (UnitlD): 1 byte được đặt bởi Client và được Server lặp lại để xác định một Slave từ xa được kết nối trên đường truyền nối tiếp hoặc trên các bus khác.

Yêu cầu tương đương với ví dụ về Modbus RTU này:

11 03 006B 0003 7687

Trong đó:

  • 11: Địa chỉ SlaveID (17 = 11 hex)
  • 03: Function code (đọc thanh ghi giữ đầu ra tương tự (Analog Output Holding Registers))
  • 006B: địa chỉ dữ liệu của thanh ghi đầu tiên được yêu cầu. (40108-40001 = 107 = 6B hex)
  • 0003: tổng số thanh ghi được yêu cầu. (đọc 3 thanh ghi 40108 đến 40110)
  • 7687: CRC (kiểm tra dự phòng theo chu kỳ) để kiểm tra lỗi.

Modbus TCP tương đương sẽ là:

0001 0000 0006 11 03 006B 0003

Trong đó:

  • 0001: mã định danh
  • 0000: định dạng giao thức
  • 0006: độ dài tin nhắn (6 byte)
  • 11: định dạng đơn vị (17 = 11 hex)
  • 03: Function code (đọc thanh ghi giữ đầu ra tương tự (Analog Output Holding Registers))
  • 006B: địa chỉ dữ liệu của thanh ghi đầu tiên được yêu cầu. (40108-40001 = 107 = 6B hex)
  • 0003: tổng số thanh ghi được yêu cầu. (đọc 3 thanh ghi 40108 đến 40110)

Sự khác biệt giữa Modbus ASCII và Modbus RTU

Ví dụ: cùng phản hồi yêu cầu hiển thị các byte dữ liệu của Registers 40108 đến 40110 từ địa chỉ 17 của Slave

11 03 00 6B 00 03

Yêu cầu từ Modbus ASCII hoàn chỉnh được thực hiện bằng cách thêm các ký tự phân định thông điệp trước. Dấu hai chấm được thêm vào đầu thông điệp, LRC, ký tự xuống dòng và nguồn cấp dữ liệu dòng được thêm vào cuối thông điệp như sau:

: 1 1  0 3  0 0  6 B  0 0  0 3  7 E  CR LF

Mỗi ký tự bây giờ được coi là một ký tự ASCII và được thay thế bằng giá trị hex của nó để đưa ra thông điệp cuối cùng.

3A 3131 3033 3030 3642 3030 3033 3745 0D 0A

Kích thước yêu cầu Modbus ASCII này là 17 byte (170 bit)

Thông điệp Modbus RTU tương đương sẽ là:

11 03 00 6B 00 03 76 87

Kích thước yêu cầu Modbus RTU này là 8 byte (80 bit)

Ứng dụng chuẩn MODBUS

Modbus là một giao thức mở, điều này có nghĩa là các nhà sản xuất hoàn toàn có thể tích hợp chuẩn Modbus vào thiết bị của họ miễn phí mà không phải trả tiền bản quyền. Nó đã trở thành một tiêu chuẩn giao thức truyền thông trong công nghiệp và đang là phương tiện phổ biến nhất hiện có để kết nối các thiết bị điện tử công nghiệp. Nó được sử dụng rộng rãi bởi nhiều nhà sản xuất trong nhiều ngành công nghiệp.

Modbus thường được sử dụng để truyền tín hiệu từ thiết bị đo đạc và điều khiển trở lại bộ điều khiển chính hoặc hệ thống thu thập dữ liệu, ví dụ như hệ thống đo nhiệt độ và độ ẩm và truyền kết quả tới máy tính. Modbus thường được sử dụng để kết nối máy tính giám sát với thiết bị đầu cuối từ xa (RTU) trong hệ thống điều khiển giám sát và thu thập dữ liệu (SCADA). Các phiên bản của giao thức Modbus phổ biến cho các đường nối tiếp (Modbus RTU và Modbus ASCII) và cho Ethernet (Modbus TCP).

Với những thông tin được cung cấp ở trên về MODBUS, Chúng tôi hy vọng những thông tin trong bài sẽ giúp ích cho bạn trong việc tìm hiểu về MODBUS cũng như biết thêm nhiều ứng dụng của nó. Xin cảm ơn!

Đăng nhận xét