Networks Business Online Việt Nam & International VH2

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

Đăng ngày 26 June, 2022 bởi admin

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. MODBUS đã nhanh chóng trở thành trở thành tiêu chuẩn truyền thông trong các ngành công nghiệp tự động hóa bởi tính ổn định, dễ dàng, thuận tiện và đặc biệt hơn nữa là MIỄN PHÍ và hiện được duy trì bởi tổ chức “modbus.org”.

Nguyên tắc hoạt động của MODBUS

MODBUS hoạt động giải trí theo nguyên tắc “ Master – Slave ” hay còn gọi là “ Chủ – Tớ ”. Một Master hoàn toàn có thể liên kết được với một hay nhiều “ Slave ”. “ Master ” thường là PLC, PC, DCS, RTU hay SCADA. “ Slave ” thường là những thiết bị cấp hiện trường. Nói một cách dễ hiểu, nó là một chiêu thức được sử dụng để truyền thông tin qua đường dây tiếp nối đuôi nhau giữa những thiết bị điện tử. Thiết bị nhu yếu thông tin được gọi là Modbus Master và thiết bị cung ứng thông tin là Modbus Slaves. 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. Master cũng hoàn toàn có thể ghi thông tin vào những Slave .

Mạng truyền thông công nghiệp MODBUS

Phân loại chuẩn MODBUS

Hiện nay, MODBUS được biết đến và sử dụng phổ biến trong công nghiệp gồm 3 chuẩn: MODBUS RTU, MODBUS TCP và MODBUS ASCII.

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 tài liệu. Đây là giao thức truyền thông lí tưởng so với RS232 hay RS485, vận tốc từ 1200 đến 115000 baud. Tốc độ phổ cập nhất là từ 9600 đến 19200 baud. MODBUS RTU là giao thức truyền thông công nghiệp được sử dụng thoáng rộng nhất, do đó phần nhiều trong bài viết này sẽ tập trung chuyên sâu đề cập đến MODBUS RTU .

Modbus TCP

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

Trong đó:

TCP ( Transmission Control Protocol ) là giao thức tinh chỉnh và điều khiển đường truyền và IP ( Internet Protocol ) là giao thức Internet. Các giao thức này được sử dụng cùng nhau và là giao thức truyền tải cho internet. Khi thông tin modbus được gửi bằng những giao thức này, tài liệu được chuyển tới TCP nơi thông tin bổ trợ được đính kèm và cấp cho IP. IP sau đó đặt tài liệu trong một gói ( hoặc gói dữ liệu ) và truyền nó .
TCP phải được thiết lập liên kết trước khi truyền tài liệu, vì nó là giao thức dựa trên liên kết. Master ( hoặc Client trong Modbus TCP ) thiết lập liên kết với Slave ( hoặc Server ). Server chờ một liên kết đến từ Client. Sau khi liên kết được thiết lập, Server sẽ phản hồi những truy vấn từ Client cho đến khi Client ngắt liên kết .

Modbus ASCII

Mọi thông điệp được mã hóa bằng hexadecimal, sử dụng đặc tính ASCII 4 bit. Đối với mỗi một byte thông tin, cần có 2 byte truyền thông, gấp đôi so với MODBUS RTU hay MODBUS TCP. Tuy nhiên, MODBUS ASCII chậm nhất trong số 3 loại giao thức, nhưng lại tương thích với modem điện thoại thông minh hay liên kết sử dụng sóng radio bởi ASCII sử dụng những tính năng phân định thông điệp. Nhờ tính năng phân định này, mọi rắc rối trong phương tiện đi lại truyền dẫn sẽ không làm thiết bị nhận dịch sai thông tin. Điều này rất quan trọng khi đề cập đến những giao thức truyền thông cho những modem cần độ đúng chuẩn thông tin cao, điện thoại di động, nhiễu âm thanh hay những phương tiện đi lại truyền thông chuyên được dùng khác .

Mã HEXA (HEXADECIMAL)

Khi quy trình khắc phục sự cố, khi xem tài liệu thô thực tiễn đang được truyền. Các chuỗi dài gồm số 1 và số 0 rất khó đọc, vì thế những bit được phối hợp và hiển thị ở dạng thập lục phân. Mỗi khối 4 bit được màn 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 trình 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ự như, cứ 4 bit hoàn toàn có thể được tích hợp và màn 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 ) hoàn toàn có thể được phối hợp và trình diễn bằng một trong 256 ký tự ASCII, gồm có những ký tự bàn phím chung. Ví dụ : 1 số ít giá trị cho những 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

Địa chỉ dữ liệu và thanh ghi theo chuẩn MODBUS

Thông tin dữ liệu được tàng trữ trong thiết bị Slave được chia trong 4 khoảng chừng giá trị khác nhau. Hai khoảng chừng tàng trữ những giá trị rời rạc on / off ( coils ) và hai khoảng chừng tàng trữ giá trị số ( register – thanh ghi ). Mỗi coils và register đều có khoảng chừ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 hoàn toàn có thể được coi như tên vị trị vì chúng không Open trong những thông điệp thực tiễn. “ Data Addressses ” được sử dụng trong những thông điệp truyền tải ( truy xuất tài liệu ) .
Ví dụ : Holding Register có số là 40001, có “ Data Address ” là 0000. Sự độc lạ 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 vấn để đọ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

Lệnh và phản hồi trong chuẩn MODBUS

Click vào những link trong bảng để xem ví dụ về những nhu yếu và phản hồi

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

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:

  1. 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)
  2. 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)
  3. Một chuỗi ASCII hai ký tự (2 chữ cái đã nhập): AE41 = ® A
  4. 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:

  1. 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
  2. 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
  3. 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
  4. 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 chuẩn MODBUS

Chuẩn Modbus không xác lập đúng mực cách tài liệu được tàng trữ trong những thanh ghi. Do đó, một số ít nhà phân phối đã tiến hành tích hợp chuẩn modbus trong thiết bị của họ để tàng trữ và truyền byte cao hơn tiên phong sau đó là byte thấp hơn. ( AE trước 41 ). Ngoài ra, cũng có những đơn vị sản xuất khác tàng 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 những thanh ghi được phối hợp để sử dụng những kiểu tài liệu 32 bit. Một số thiết bị tàng trữ và truyền 16 bit cao hơn ( word cao ) trong thanh ghi tiên phong 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ị phân biệt được là làm cách nào để hoạt động giải trí đúng chuẩn theo nhu yế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ó hoàn toàn có thể được sắp xếp theo bất kể cách nào trong số bốn cách này .

  1. AE41 5652
  2. 5652 AE41
  3. 41AE 5256
  4. 5256 41AE

Mở rộng thanh ghi (Register) trong chuẩn MODBUS

Phạm vi của những thanh ghi giữ đầu ra tựa như là 40001 đến 49999, nó ý niệm rằng không hề có nhiều hơn 9999 thanh ghi. Mặc dù điều này thường là đủ cho hầu hết những ứng dụng, nhưng có những trường hợp cần thêm nhiều địa chỉ thanh ghi nữa .
Các thanh ghi 40001 đến 49999 tương ứng với địa chỉ tài liệu từ 0000 đến 270E. Nếu tất cả chúng ta sử dụng những địa chỉ tài liệu còn lại từ 270F đến FFFF, thì số thanh ghi có sẵn sẽ gấp hơn sáu lần, tổng số là 65536. Điều này sẽ tương ứng với những địa chỉ thanh ghi từ 40001 đến 105536 .
Chú ý : nhiều trình tinh chỉnh và điều khiển phần mền sử dụng modbus ( PC Master ) được viết với số lượng giới hạn địa chỉ từ 40001 đến 49999 và không hề truy vấn những địa chỉ thanh ghi lan rộng ra trong những thiết “ Slave ”. Và nhiều thiết bị “ Slave ” không tương hỗ sử dụng những địa chỉ thanh ghi lan rộng ra. Mặt khác, một số ít thiết bị “ Slave ” tương hỗ những thanh ghi lan rộng ra này và một số ít ứng dụng “ Master ” hoàn toàn có thể truy vấn được nó, đặc biệt quan trọng nếu ứng dụng được viết trên nền tảng hoàn toàn có thể tùy chỉnh .

Địa chỉ “Slave” 2-byte

Bởi một byte đơn thường được sử dụng để xác lập địa chỉ “ Slave ” và mỗi “ Slave ” trên mạng nhu yếu một địa chỉ duy nhất, nên số “ Slave ” trên mạng được số lượng giới hạn ở 256. Giới hạn được xác lập trong modbus thậm chí còn còn thấp hơn và ở mức 247 .
Để vượt qua số lượng giới hạn này, hoàn toàn có thể thực thi một sửa đổi so với giao thức để sử dụng hai byte cho địa chỉ. “ Master ” và “ Slave ” đều phải được tương hỗ sửa đổi này. Khi đó hoàn toàn có thể chỉ định lan rộng ra số lượng giới hạn về số lượng “ Slave ” trong mạng lên 65535 bởi hai byte cho địa chỉ .
Theo mặc định, hầu hết ứng dụng tương hỗ Modbus sử dụng địa chỉ 1 byte. Khi một địa chỉ lớn hơn 255 được nhập vào, ứng dụng sẽ tự động hóa chuyển sang định địa chỉ 2 byte và không thay đổi ở chính sách này cho tổng thể những địa chỉ cho đến khi tắt định địa chỉ 2 byte theo cách bằng tay thủ công .

Ứng dụng chuẩn MODBUS

Modbus là một giao thức mở, điều này có nghĩa là những nhà phân phối trọn vẹn hoàn toàn có thể tích hợp chuẩn Modbus vào thiết bị của họ không lấy 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 đi lại thông dụng nhất hiện có để liên kết những thiết bị điện tử công nghiệp. Nó được sử dụng thoáng rộng bởi nhiều nhà phân phối 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à tinh chỉnh và điều khiển trở lại bộ điều khiển và tinh chỉnh chính hoặc mạng lưới hệ thống thu thập dữ liệu, ví dụ như mạng lưới hệ thống đo nhiệt độ và nhiệt độ và truyền hiệu quả tới máy tính. Modbus thường được sử dụng để liên kết máy tính giám sát với thiết bị đầu cuối từ xa ( RTU ) trong mạng lưới hệ thống tinh chỉnh và đ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ổ cập cho những đường tiếp nối đuôi nhau ( Modbus RTU và Modbus ASCII ) và cho Ethernet ( Modbus TCP ) .

Sự khác biệt giữa RTU và 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 nhu yếu duy nhất. Các byte này được lặp lại bởi Server vì những phản hồi của nó hoàn toàn có thể không được nhận theo thứ tự như những nhu yế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 lập số byte trong thông điệp cần theo dõi .
Định dạng đơn vị chức năng ( UnitlD ) : 1 byte được đặt bởi Client và được Server lặp lại để xác lập một Slave từ xa được liên kết trên đường truyền tiếp nối đuôi nhau hoặc trên những bus khác .

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

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 ASCII và 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 hảo được thực thi bằng cách thêm những 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 tài 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ự giờ đây được coi là một ký tự ASCII và được sửa chữa thay thế bằng giá trị hex của nó để đưa ra thông điệp ở đầu cuối .
3A 3131 3033 3030 3642 3030 3033 3745 0D 0A
Kích thước nhu yế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 nhu yếu Modbus RTU này là 8 byte ( 80 bit )
Trên đây, MESIDAS đã san sẻ rất cụ thể cho những bạn về chuẩn truyền thông Modbus. Chúng tôi kỳ vọng rằng, với những kỹ năng và kiến thức về Modbus mà những bạn có được trải qua bài viết này sẽ giúp ích cho những bạn trong quy trình nghiên cứu và điều tra, học tập và thao tác. Xin cảm ơn !

5
3
votes

Article Rating