Tìm hiểu về chuẩn truyền thông Modbus và các dạng của nó

Tìm hiểu về chuẩn truyền thông Modbus và các dạng của nó

Modbus là gì?

Modbus là giao thức truyền thông nối tiếp được sử dụng để liên lạc với bộ điều khiển logic khả trình (PLC). Do giao thức mở và triển khai đơn giản, nó đã trở thành một giao thức đơn giản được sử dụng rộng rãi trong ngành. Đây là một trong những giao thức cổng giao tiếp RS485.

Trong giao tiếp giữa các bộ vi điều khiển của chúng ta hoặc giữa bộ vi điều khiển và máy tính chủ, các giao thức nội dung khác nhau sẽ được xác định. Cả hai bên giao tiếp cần phải tuân thủ giao thức này để thiết lập giao tiếp. Có thể có nhiều giao thức để đáp ứng yêu cầu liên lạc giữa các thiết bị khác nhau. Một số giao thức phổ biến bao gồm giao thức truyền thông nối tiếp I2C, SPI và UART.

Trong trường hợp quý khách cần tìm các thiết bị hỗ trợ truyền thông RS485 khác quý khách vui lòng liên hệ:

  • Hotline/Zalo: 0367 939 867
  • Email: epcbtech@gmail.com

Đội ngũ kỹ thuật của EPCB sẽ tư vấn và mua hàng phù hợp với nhu cầu sử dụng của quý khách.

Phát triển giao thức Modbus

Giao thức Modbus được Modicon (hiện thuộc sở hữu của Schneider Electric) thiết kế và phát triển vào năm 1979. Kể từ khi được giới thiệu, nó đã trở nên phổ biến như một giao thức truyền thông tiêu chuẩn trong các hệ thống công nghiệp do tính đơn giản và tính mở của nó. Đó là giao thức fieldbus thực sự đầu tiên được sử dụng trong các ứng dụng công nghiệp trên toàn thế giới.

Để tiếp tục thúc đẩy và thúc đẩy việc áp dụng Modbus cho các ứng dụng phân tán dựa trên Ethernet (TCP/IP), Schneider Electric đã chuyển giao quyền sở hữu giao thức Modbus cho tổ chức Giao diện Tự động hóa Phân tán (IDA). Họ cũng thành lập tổ chức quốc tế Modbus-IDA, chịu trách nhiệm quảng bá tiêu chuẩn Modbus và chứng nhận sản phẩm.

Ưu điểm của Modbus

  • Tiêu chuẩn giao thức mở, có sẵn công khai và không có yêu cầu về bản quyền.
  • Giao thức này hỗ trợ nhiều giao diện điện, bao gồm RS232, RS485, TCP/IP và có thể được truyền qua nhiều phương tiện khác nhau như cáp xoắn đôi, cáp quang, hồng ngoại và không dây.
  • Định dạng khung thông báo của giao thức rất đơn giản, nhỏ gọn và dễ hiểu. Nó thân thiện với người dùng và dễ dàng cho các nhà sản xuất phát triển và tích hợp, tạo điều kiện thuận lợi cho việc hình thành mạng lưới điều khiển công nghiệp.

Ví dụ: hãy xem xét giao thức truyền thông I2C, yêu cầu kết nối vật lý với bus I2C. Nó cũng yêu cầu điện trở kéo lên và xác định mức điện áp cao và thấp ở lớp vật lý. Ngược lại, giao thức Modbus là giao thức truyền tin nhắn lớp ứng dụng không xác định lớp vật lý. Nó xác định cấu trúc thông báo mà bộ điều khiển có thể hiểu và sử dụng, bất kể mạng được sử dụng để liên lạc. Tính linh hoạt này cho phép Modbus thích ứng với nhiều giao diện điện, dẫn đến việc sử dụng rộng rãi.

Tìm hiểu về chuẩn truyền thông Modbus và các dạng của nó

Thuật ngữ Modbus

  • Master: master station equipment
  • Slave: slave device
  • Server: server side
  • ADU: Application Data Unit
  • PDU: Protocol Data Unit
  • MSB: Most Significant Bit
  • LSB: Least Significant Bit
  • MBAP: Modbus Application Protocol
  • PLC: Programmable Logic Controller

Giao thức liên kết nối tiếp

  • Chế độ Master-Slave: Thông thường, có một master và nhiều Slave trên bus. Mỗi nô lệ có một ID duy nhất và chủ sẽ xác định và liên lạc với các nô lệ bằng cách sử dụng ID của họ để truyền dữ liệu.
  • Truyền bán song công: Ngược lại với truyền bán song công, truyền song công hoàn toàn cho phép truyền và nhận dữ liệu đồng thời. Do đó, ở chế độ bán song công, dữ liệu chỉ có thể được gửi hoặc nhận tại bất kỳ thời điểm nào.

Ngoài ra, nô lệ không thể bắt đầu liên lạc với các nô lệ khác. Chỉ khi master gửi dữ liệu đến Slave (gửi yêu cầu) thì Slave mới nhận được dữ liệu từ master và sau đó phản hồi bằng dữ liệu. Sơ đồ dưới đây minh họa điều này:

Tìm hiểu về chuẩn truyền thông Modbus và các dạng của nó

Quá trình truyền thông

Trong giao tiếp Modbus, chỉ một thiết bị có thể gửi yêu cầu. Các Slave nhận dữ liệu từ Master và phản hồi tương ứng. Slave là các thiết bị ngoại vi như cảm biến nhiệt độ, độ ẩm, bộ điều khiển, đầu báo khói, cảm biến mực nước hoặc các loại thiết bị đo lường khác. Các Slave xử lý thông tin và gửi dữ liệu của họ trở lại Master. Slave không bắt đầu liên lạc với master, chúng chỉ có thể trả lời tin nhắn do master gửi.

Ngoài ra, không có cơ chế tích hợp nào trong quá trình liên lạc để xác định xem thiết bị có bận hay không. Ví dụ: nếu chủ gửi lệnh cho nô lệ, nhưng nô lệ chưa nhận được lệnh đó hoặc đang bận xử lý các tác vụ khác, nó không thể phản hồi lại chủ. Do bus RS485 chỉ chịu trách nhiệm truyền dữ liệu và thiếu các cơ chế xử lý bổ sung nên cần sử dụng các phương pháp dựa trên phần mềm để xác định xem việc nhận dữ liệu có thành công hay không.

Tìm hiểu về chuẩn truyền thông Modbus và các dạng của nó

Các loại giao thức Modbus

Các loại giao thức chính bao gồm ASCII, RTU (Thiết bị đầu cuối từ xa) và TCP.

  • Modbus RTU (Thiết bị đầu cuối từ xa): Chế độ này thường sử dụng RS-485 làm lớp vật lý và thường sử dụng cổng nối tiếp của chip để truyền thông điệp dữ liệu. Dữ liệu tin nhắn được truyền đạt ở định dạng nhị phân.
  • Modbus ASCII: Tin nhắn được truyền bằng ký tự ASCII. Định dạng ASCII sử dụng kiểm tra dự phòng dọc (VRC). Các thông báo Modbus ASCII bắt đầu bằng dấu hai chấm (“:”) và kết thúc bằng chuỗi xuống dòng/cấp dòng (CR/LF).
  • Modbus TCP/IP hoặc Modbus TCP: Đây là một biến thể của Modbus sử dụng mạng TCP/IP để liên lạc và kết nối qua cổng 502. Trong Modbus-TCP, không cần tính toán tổng kiểm tra thông báo vì lớp Ethernet đã triển khai tính toàn vẹn dữ liệu CRC32.

Tìm hiểu về chuẩn truyền thông Modbus và các dạng của nó

 

Khi sử dụng giao tiếp nối tiếp cho giao thức Modbus, bạn có thể chọn giữa chế độ RTU hoặc ASCII. Cả hai chế độ đều có cấu trúc thông báo và dữ liệu, định dạng lệnh và phản hồi được xác định và yêu cầu xác thực dữ liệu. Chế độ ASCII sử dụng Kiểm tra dự phòng theo chiều dọc (LRC) để xác thực dữ liệu, trong khi chế độ RTU sử dụng CRC 16 bit (Kiểm tra dự phòng theo chu kỳ). Khi truyền Modbus qua Ethernet bằng TCP/IP, dữ liệu được gói gọn trong các gói TCP. Trong chế độ này, việc xác thực tổng kiểm tra là không cần thiết vì TCP là giao thức hướng kết nối, đáng tin cậy đã cung cấp khả năng kiểm tra tính toàn vẹn dữ liệu.

Giao thức Modbus-RTU

Modbus-RTU là một định dạng nhỏ gọn thể hiện dữ liệu ở dạng thập lục phân. Ở định dạng RTU, mỗi lệnh được theo sau bởi tổng kiểm tra kiểm tra dự phòng theo chu kỳ (CRC). Ví dụ: nếu chúng tôi cần gửi số 10, ở chế độ RTU, chúng tôi chỉ cần gửi 0x0A. Việc truyền dữ liệu trên xe buýt sẽ được biểu diễn dưới dạng: 0000 1010.

Cấu trúc khung cho truyền thông Modbus

Một thông báo đề cập đến một khung dữ liệu duy nhất và khung dữ liệu đại diện cho một thông báo duy nhất. Nó đề cập đến một bộ dữ liệu lệnh hoàn chỉnh và về cơ bản đại diện cho một chuỗi dữ liệu. Một thông báo Modbus đề cập đến một khung dữ liệu mà master gửi đến Slave. Nó bao gồm địa chỉ của nô lệ, thao tác mà chủ muốn thực hiện, tổng kiểm tra và các thông tin liên quan khác.

Định dạng thông báo cho giao thức Modbus trên liên kết nối tiếp như sau:

Tìm hiểu về chuẩn truyền thông Modbus và các dạng của nó

  • Địa chỉ phụ: Mỗi thiết bị phụ có một địa chỉ duy nhất, chiếm một byte, trong phạm vi 0-255. Phạm vi hợp lệ cho các địa chỉ phụ là 1-247 vì 255 được dành riêng cho địa chỉ quảng bá (phát thông báo tới tất cả các thiết bị phụ).
  • Mã hàm: Chiếm 1 byte, mã hàm cho biết mục đích của lệnh. Ví dụ: bạn có thể sử dụng mã chức năng để truy vấn dữ liệu từ thiết bị phụ hoặc sửa đổi dữ liệu trên thiết bị phụ. Các mã chức năng khác nhau tương ứng với các chức năng khác nhau.
  • Dữ liệu: Phần dữ liệu thay đổi tùy theo mã chức năng. Ví dụ: nếu mã chức năng được sử dụng để truy vấn dữ liệu từ thiết bị phụ, dữ liệu có thể bao gồm địa chỉ cần truy vấn và số byte cần đọc.
  • Tổng kiểm tra: Trong quá trình truyền dữ liệu, có thể xảy ra lỗi. Tổng kiểm tra, chẳng hạn như CRC, được sử dụng để xác minh tính chính xác của dữ liệu nhận được.

Mã chức năng Modbus

Giao thức Modbus xác định nhiều chức năng và để sử dụng các chức năng này một cách thuận tiện, mỗi chức năng được gán một mã chức năng, hoạt động như một mã hoặc mã định danh. Giao thức chỉ định hơn 20 mã chức năng, nhưng có 8 mã chức năng thường được sử dụng để đọc và ghi vào vùng lưu trữ. Dưới đây là bảng minh họa các mã chức năng phổ biến này:

Function code

Function Description

01H

read output coil

02H

read input coil

03H

read holding register

04H

read input register

05H

write single coil

06H

write single register

0FH

write multi-coil

10H

write multiple registers

Kiểm tra CRC

CRC (Kiểm tra dự phòng theo chu kỳ) là một cơ chế kiểm tra lỗi được sử dụng trong giao thức Modbus. Trường CRC chiếm hai byte và chứa giá trị nhị phân 16 bit. Giá trị CRC được thiết bị truyền tính toán và thêm vào khung dữ liệu. Thiết bị nhận sẽ tính toán lại giá trị CRC khi nhận dữ liệu và so sánh nó với giá trị trường CRC trong khung nhận được. Nếu hai giá trị không khớp nhau thì đã xảy ra lỗi.

Ví dụ: nếu master gửi khung 01 06 00 01 00 17 98 04, trong đó 98 04 đại diện cho trường CRC, thiết bị phụ cần tính toán lại giá trị CRC dựa trên phần dữ liệu 01 06 00 01 00 17. Khi đó, thiết bị phụ sẽ tính toán lại giá trị CRC dựa trên phần dữ liệu 01 06 00 01 00 17. so sánh giá trị CRC được tính toán với giá trị CRC nhận được (98 04, do chủ tính toán). Nếu các giá trị không khớp, điều đó cho biết lỗi truyền dữ liệu và dữ liệu không thể được coi là hợp lệ.

Quy trình xác thực CRC (Kiểm tra dự phòng theo chu kỳ) có thể được tóm tắt như sau:

  • Khởi tạo thanh ghi 16 bit với giá trị 0xFFFF (tất cả các bit được đặt thành 1). Thanh ghi này được gọi là thanh ghi CRC.
  • XOR byte đầu tiên (8 bit) của khung dữ liệu với byte thấp của thanh ghi CRC và lưu kết quả trở lại vào thanh ghi CRC.
  • Dịch chuyển sang phải thanh ghi CRC một bit. Điền vào bit cao nhất bằng 0 và kiểm tra bit thấp nhất được dịch chuyển ra ngoài.
  • Nếu bit thấp nhất là 0, lặp lại bước 3 (shift lần nữa); nếu bit thấp nhất là 1, XOR thanh ghi CRC với giá trị cố định được xác định trước (0xA001).
  • Lặp lại bước 3 và 4 với tổng số 8 ca. Điều này hoàn tất quá trình xử lý cho một phân đoạn 8 bit hoàn chỉnh.
  • Lặp lại bước 2 đến bước 5 cho octet tiếp theo cho đến khi tất cả byte được xử lý.
  • Giá trị cuối cùng của thanh ghi CRC là giá trị CRC được tính toán.

Giao thức Modbus-ACSII

Modbus-ASCII là định dạng biểu diễn trong đó dữ liệu được biểu thị bằng mã ASCII và mỗi byte 8 bit được truyền dưới dạng hai ký tự ASCII. Định dạng ASCII sử dụng kiểm tra dự phòng theo chiều dọc (LRC) làm tổng kiểm tra.

Ví dụ: nếu chúng ta cần gửi số 10, ở chế độ ASCII, chúng ta sẽ chuyển đổi các chữ số '1' và '0' thành dạng biểu diễn ASCII của chúng. Vì vậy, chúng tôi sẽ gửi các byte 0x31 (mã ASCII cho '1') và 0x30 (mã ASCII cho '0'). Việc truyền dữ liệu trên xe buýt sẽ được biểu diễn dưới dạng: 0011 0001 0011 0000

Cấu trúc khung thông báo Modbus-ASCII

  • Bit bắt đầu: 1 byte cho biết bắt đầu khung thông báo.
  • Bit địa chỉ: 2 byte biểu thị địa chỉ của thiết bị phụ.
  • Bit chức năng: 2 byte xác định mã chức năng cho biết hoạt động sẽ được thực hiện.
  • Bit dữ liệu: n bit dữ liệu, bit có trọng số nhỏ nhất được gửi trước
  • LRC (Kiểm tra dự phòng theo chiều dọc): Không giống như CRC, chế độ Modbus ASCII sử dụng LRC để kiểm tra lỗi. LRC được tính toán dựa trên biểu diễn ASCII của địa chỉ, chức năng và byte dữ liệu.
  • Kẻ kết thúc: Khung thông báo được kết thúc bởi các ký tự \r (trả về vận chuyển) và \n (nguồn cấp dòng), cho biết kết thúc tin nhắn.

Tìm hiểu về chuẩn truyền thông Modbus và các dạng của nó

Trong Modbus-ASCII, có các ký tự bắt đầu và kết thúc (CR LF) đóng vai trò là chỉ báo cho phần đầu và phần cuối của khung dữ liệu. Mặt khác, Modbus-RTU không có các điểm đánh dấu như vậy và dựa vào các khoảng thời gian để xác định điểm bắt đầu và kết thúc của khung. Giao thức chỉ định khoảng thời gian là 3,5 ký tự. Điều này có nghĩa là trước khi bắt đầu một khung, phải có khoảng thời gian nhàn rỗi lớn hơn 3,5 ký tự và sau khi kết thúc khung, cũng phải có khoảng thời gian nhàn rỗi là 3,5 ký tự để tránh tình trạng chồng gói hoặc “trục trặc” .

Lưu ý: Khoảng thời gian 3,5 ký tự biểu thị khoảng thời gian cụ thể nhưng phụ thuộc vào tốc độ truyền. Trong giao tiếp nối tiếp, 1 ký tự thường bao gồm 1 bit bắt đầu, 8 bit dữ liệu (trong hầu hết các trường hợp), 1 bit chẵn lẻ (hoặc không có) và 1 bit dừng. Như vậy, 1 ký tự bao gồm 11 bit. Do đó, 3,5 ký tự tương ứng với 38,5 bit. Ý nghĩa của tốc độ baud là bit của bit nhị phân được truyền trong một giây. Vì vậy, đối với tốc độ truyền là 9600, 3,5 ký tự = 9600/38,5 = 0,00401s * 1000 = 4,01ms.

Giao thức Modbus-TCP

Modbus-TCP không cần địa chỉ nô lệ mà cần tiêu đề MBAP. Và nó không yêu cầu kiểm tra lỗi vì bản thân TCP cũng có khả năng kiểm tra lỗi.

Area

Length

Describe

Client computer

Server

Transaction identifier

2 bytes

Identification of Modbus request/response transactions

client start

The server re-copied from the received request

Protocol identifier

2 bytes

0=Modbus protocol

client start

The server re-copied from the received request

Length

2 bytes

the number of bytes that follow

client start(request)

server(response) start

Unit identifier

1 byte

Identification of remote slaves connected on a serial link or other bus

client start

The server re-copied from the received request

Nói một cách đơn giản, Modbus-TCP có nguồn gốc từ Modbus-ASCII nhưng loại bỏ xác minh tổng kiểm tra và thêm năm byte số 0, theo sau là một byte đơn có giá trị 0x06.