Modbus là gì? Mô hình dữ liệu của giao thức Modbus
Modbus là gì?
Modbus (hay MODBUS) là một giao thức truyền thông dữ liệu máy khách/máy chủ trong lớp ứng dụng. Ban đầu nó được thiết kế để sử dụng với bộ điều khiển logic lập trình (PLC), nhưng đã trở thành một giao thức truyền thông tiêu chuẩn thực tế để truyền thông giữa các thiết bị điện tử công nghiệp trong nhiều loại buses và mạng.
Modbus thường được sử dụng để kết nối máy tính giám sát nhà máy/hệ thống với một thiết bị đầu cuối từ xa (RTU) trong các hệ thống điều khiển giám sát và thu thập dữ liệu (SCADA). Nhiều kiểu dữ liệu được đặt tên theo điều khiển công nghiệp các thiết bị nhà máy, chẳng hạn như logic bậc thang, do được sử dụng trong điều khiển rơle: đầu ra vật lý một bit được gọi là cuộn dây, và đầu vào vật lý một bit được gọi là đầu vào rời rạc hoặc tiếp điểm.
Mô tả giao thức
Các tiêu chuẩn hoặc bus Modbus bao gồm:
Giao tiếp nối tiếp không đồng bộ trong nhiều tiêu chuẩn và công nghệ: EIA/TIA-232-E, EIA-422, EIA/TIA-485-A, cáp quang, tần số vô tuyến,…
MODBUS PLUS, một mạng truyền token tốc độ cao.
Để hỗ trợ giao tiếp Modbus trên mạng, nhiều modem và gateway tích hợp các thiết kế độc quyền (xem sơ đồ: Kiến trúc mạng cho giao tiếp Modbus). Việc triển khai có thể triển khai giao tiếp hữu tuyến hoặc vô tuyến, chẳng hạn như trong băng tần vô tuyến ISM, và thậm chí cả Dịch vụ Tin nhắn Ngắn (SMS) hoặc Dịch vụ Vô tuyến Gói Chung (GPRS).
Các phiên bản giao thức
Modbus định nghĩa một máy khách (client), là một thực thể khởi tạo một giao dịch để yêu cầu bất kỳ tác vụ cụ thể nào từ bộ thu yêu cầu của nó. “Bộ thu yêu cầu” của máy khách, mà máy khách đã khởi tạo giao dịch, sau đó được gọi là máy chủ.
Modbus định nghĩa một đơn vị dữ liệu giao thức (PDU) độc lập với các giao thức lớp thấp hơn trong ngăn xếp giao thức của nó. Việc ánh xạ giao thức MODBUS trên các bus hoặc mạng cụ thể đòi hỏi một số trường bổ sung, được định nghĩa là đơn vị dữ liệu ứng dụng (ADU). ADU được tạo bởi một máy khách bên trong mạng Modbus khi máy khách khởi tạo một giao dịch. Nội dung bao gồm:
PDU = Mã chức năng + dữ liệu
ADU = Địa chỉ bổ sung + PDU + kiểm tra lỗi
ADU được Tổ chức Modbus chính thức gọi là khung Modbus, mặc dù khung được sử dụng làm đơn vị dữ liệu trong lớp liên kết dữ liệu trong mô hình OSI và TCP/IP (trong khi Modbus là giao thức lớp ứng dụng).
Kích thước tối đa của PDU là 253 byte. Kích thước tối đa của ADU trên mạng RS232/RS485 là 256 byte, và với TCP là 260 byte.
Để mã hóa dữ liệu, Modbus sử dụng biểu diễn big-endian cho địa chỉ và trường dữ liệu. Do đó, đối với giá trị 16 bit, byte quan trọng nhất sẽ được gửi trước.
Mã hàm là 1 byte, cung cấp mã của hàm cần thực thi. Mã hàm là các giá trị số nguyên, nằm trong khoảng từ 1 đến 255, và phạm vi từ 128 đến 255 dành cho phản hồi ngoại lệ.
Giao dịch Modbus và PDU
Một giao dịch Modbus giữa máy khách và máy chủ bao gồm:
Bước 1: Máy khách khởi tạo một yêu cầu với PDU = Mã hàm + yêu cầu dữ liệu
Bước 2: Máy chủ nhận được yêu cầu từ máy khách. Sau đó, máy chủ sẽ đọc/phân tích mã hàm, lấy địa chỉ trường dữ liệu của PDU, sau đó lấy giá trị trường dữ liệu này và cuối cùng thực hiện hành động dựa trên mã hàm. Nếu không có lỗi nào trong các bước đó, máy chủ sẽ phản hồi với PDU = Mã hàm + phản hồi dữ liệu.
Miễn là không có lỗi nào trong các bước đó, mã hàm phản hồi của máy chủ cũng sẽ là mã hàm được gửi từ máy khách. Nếu có bất kỳ lỗi nào trong các bước đó, máy chủ sẽ phản hồi với PDU = Mã hàm ngoại lệ + Mã ngoại lệ
Bước 3: Máy khách nhận được phản hồi và kết thúc giao dịch.
Dựa trên đó, Modbus định nghĩa 3 loại PDU:
- MODBUS Request PDU, mb_req_pdu
- MODBUS Response PDU, mb_rsp_pdu
- MODBUS Exception Response PDU, mb_excep_rsp_pdu
Mô hình dữ liệu Modbus
Modbus định nghĩa mô hình dữ liệu của mình dựa trên một loạt các bảng có bốn loại chính:
| Primary tables | Access | Size | Features |
| Discrete input | R | 1 bit (0–1) | Read on/off value |
| Coil (discrete output) | R/W | 1 bit (0–1) | Read/Write on/off value |
| Input register | R | 16 bit words (0–65,535) | Read measurements and statuses |
| Holding register | R/W | 16 bit words (0–65,535) | Read/Write configuration values |
Phản hồi ngoại lệ
Khi máy khách gửi yêu cầu đến máy chủ, có thể có bốn sự kiện có thể xảy ra cho yêu cầu đó:
- Nếu máy chủ nhận được yêu cầu và thực thi thành công, máy chủ sẽ trả về phản hồi bình thường.
- Nếu máy chủ không nhận được yêu cầu do lỗi kênh giao tiếp, máy chủ sẽ không phản hồi bất kỳ thông tin nào cho máy khách. Khi đó, máy khách sẽ gặp lỗi yêu cầu hết thời gian chờ.
- Nếu máy chủ nhận được yêu cầu và phát hiện lỗi trên kênh giao tiếp (ví dụ: kiểm tra chẵn lẻ, LRC, CRC), máy chủ sẽ không phản hồi bất kỳ thông tin nào cho máy khách. Khi đó, máy khách sẽ gặp lỗi yêu cầu hết thời gian chờ.
- Nếu máy chủ nhận được yêu cầu và không thể thực thi (ví dụ: máy khách yêu cầu đọc một thanh ghi không tồn tại), máy chủ sẽ trả về phản hồi ngoại lệ cho máy khách để chỉ ra bản chất của lỗi.
- So với thông báo phản hồi bình thường, thông báo ngoại lệ bao gồm hai trường khác:
- Mã hàm: Bit MSB của mã hàm Exception là 1. Điều này sẽ làm cho mã hàm này cao hơn 0x80 so với mã hàm của thông báo yêu cầu.
- Dữ liệu: Máy chủ trả về mã ngoại lệ bên trong trường Dữ liệu. Trường này xác định bản chất của lỗi.
Giao thức Modbus qua Đường truyền Nối tiếp
Chuẩn Modbus cũng định nghĩa Modbus qua Đường truyền Nối tiếp, một giao thức trên tầng liên kết dữ liệu của mô hình OSI, cho phép giao thức Modbus tầng ứng dụng được truyền thông qua bus nối tiếp. Giao thức Modbus Serial Line là giao thức máy khách/ máy chủ, hỗ trợ một chủ và nhiều tớ trên bus nối tiếp. Với giao thức Modbus ở tầng ứng dụng, mô hình máy khách/máy chủ được sử dụng cho các thiết bị trên kênh truyền thông.
Quy ước đặt tên của tổ chức này đảo ngược cách sử dụng phổ biến là có nhiều máy khách và chỉ một máy chủ. Để tránh nhầm lẫn này, lớp truyền tải RS-485 sử dụng các thuật ngữ “nút” hoặc “thiết bị” thay vì “máy chủ”, và “máy khách” không phải là một “nút”.
Tổ chức (Modbus) đang sử dụng “máy khách-máy chủ” để mô tả giao tiếp Modbus, được đặc trưng bởi giao tiếp giữa [các thiết bị máy khách], thiết bị này khởi tạo giao tiếp và gửi yêu cầu đến (các) thiết bị máy chủ, thiết bị này xử lý yêu cầu và trả về phản hồi (hoặc thông báo lỗi) phù hợp.
Modbus RTU
Modbus RTU (Remote Terminal Unit), là triển khai phổ biến nhất hiện có cho Modbus, sử dụng biểu diễn dữ liệu nhị phân nhỏ gọn cho giao thức truyền thông.
Định dạng RTU tuân theo các lệnh/dữ liệu với một tổng kiểm tra dự phòng tuần hoàn như một cơ chế kiểm tra lỗi để đảm bảo độ tin cậy của dữ liệu. Một thông điệp Modbus RTU phải được truyền liên tục mà không có sự gián đoạn giữa các ký tự. Các thông điệp Modbus được đóng khung (phân tách) bằng các khoảng thời gian rỗi (im lặng). Mỗi byte (8 bit) dữ liệu được gửi dưới dạng 11 bit:
- 1 bit bắt đầu
- 8 bit dữ liệu/thông điệp, bit ít quan trọng nhất được gửi trước
- 1 bit chẵn lẻ
- 1 bit dừng
Modbus ASCII
Modbus ASCII sử dụng các ký tự ASCII (char) cho giao tiếp giao thức. Định dạng ASCII sử dụng tổng kiểm tra dư thừa theo chiều dọc.
Các thông điệp Modbus ASCII được đóng khung bằng dấu hai chấm (“:”, giá trị ASCII 3A16) và ký tự xuống dòng (CR/LF, giá trị ASCII 0D16 và 0A16) ở cuối. Khung Modbus ACSII không cần phải được gửi theo từng đợt như Modbus RTU, mặc định cho phép độ trễ lên đến 1 giây giữa mỗi lần truyền ký tự. Mỗi ký tự ASCII được gửi dưới dạng 10 bit:
- 1 bit bắt đầu
- Ký tự ASCII 7 bit, bit ít quan trọng nhất được gửi trước
- 1 bit chẵn lẻ
- 1 bit dừng
Modbus messaging on TCP/IP
Modbus TCP
Modbus TCP (hoặc Modbus TCP/IP) là một biến thể của giao thức Modbus được sử dụng để truyền thông qua mạng TCP/IP, thường kết nối qua cổng 502. Giao thức này không yêu cầu tính toán mã kiểm tra (checksum) vì các tầng thấp hơn trong mô hình mạng đã cung cấp cơ chế bảo vệ kiểm tra lỗi.
Thuật ngữ trong Modbus TCP tương tự như giao thức Modbus qua đường truyền nối tiếp (Serial line), nghĩa là thiết bị gửi lệnh Modbus được gọi là “client” và thiết bị phản hồi lại được gọi là “server”.
Đơn vị dữ liệu ứng dụng (ADU) trong Modbus TCP chính thức được gọi là “Modbus TCP/IP ADU” bởi tổ chức Modbus, và cũng được một số bên khác gọi là “Modbus TCP frame”.
Cấu trúc của MODBUS TCP/IP ADU gồm:
MODBUS TCP/IP ADU = MBAP Header + Function Code + Data
Trong đó, MBAP (viết tắt của Modbus Application Protocol Header) là phần tiêu đề chuyên biệt được sử dụng trên TCP/IP để xác định Đơn vị Dữ liệu Ứng dụng Modbus (Modbus Application Data Unit).
Các phiên bản giao thức Modbus khác qua TCP/IP
Modbus qua TCP/IP, Modbus qua TCP, hoặc Modbus RTU/IP – một biến thể khác với Modbus TCP ở chỗ giá trị tổng kiểm tra được bao gồm trong tải trọng, giống như Modbus RTU.
Modbus qua UDP – một số người đã thử nghiệm sử dụng Modbus qua UDP trên mạng IP, giúp loại bỏ chi phí phát sinh của TCP.
Các phiên bản giao thức Modbus khác
Bên cạnh Modbus RTU, Modbus ASCII và Modbus TCP được sử dụng rộng rãi, còn có nhiều biến thể của giao thức Modbus:
Modbus Plus (Modbus+, MB+ hoặc MBP) – Modbus Plus là giao thức độc quyền của Schneider Electric, mặc dù chưa được công bố chứ không phải được cấp bằng sáng chế, và không giống như các biến thể khác, nó hỗ trợ giao tiếp ngang hàng giữa nhiều máy khách. Mặc dù có tên gọi như vậy, Modbus Plus không phải là một biến thể của Modbus. Nó là một giao thức khác, liên quan đến việc truyền mã thông báo. Nó yêu cầu một bộ đồng xử lý chuyên dụng để xử lý nhanh.
Enron Modbus – một phần mở rộng khác của Modbus tiêu chuẩn do Enron phát triển, hỗ trợ các biến số nguyên và dấu phẩy động 32 bit, cũng như dữ liệu lịch sử và dữ liệu luồng. Các kiểu dữ liệu được ánh xạ bằng các địa chỉ chuẩn. Dữ liệu lịch sử đáp ứng tiêu chuẩn công nghiệp của Viện Dầu khí Hoa Kỳ (API) về cách lưu trữ dữ liệu.
Hạn chế của giao thức Modbus
Vì Modbus được thiết kế vào cuối những năm 1970 để giao tiếp với các bộ điều khiển logic khả trình, số lượng kiểu dữ liệu bị giới hạn ở những kiểu mà PLC tại thời điểm đó có thể hiểu được. Các đối tượng nhị phân lớn không được hỗ trợ.
Không có cách chuẩn nào để một nút tìm mô tả của một đối tượng dữ liệu, ví dụ, để biết rằng giá trị thanh ghi biểu thị nhiệt độ từ 30 đến 175 độ.
Vì Modbus là giao thức máy khách/máy chủ, nên không có cách nào để thiết bị hiện trường lấy dữ liệu bằng cơ chế xử lý sự kiện (ngoại trừ qua Ethernet TCP/IP, được gọi là open-mbus) vì nút máy khách phải thường xuyên thăm dò từng thiết bị hiện trường và tìm kiếm những thay đổi trong dữ liệu.
Điều này tiêu tốn băng thông và thời gian mạng trong các ứng dụng mà băng thông có thể tốn kém, chẳng hạn như qua liên kết vô tuyến tốc độ bit thấp.
Modbus bị giới hạn ở việc định địa chỉ 247 thiết bị trên một liên kết dữ liệu, điều này giới hạn số lượng thiết bị hiện trường có thể được kết nối với một trạm gốc (một lần nữa, Ethernet TCP/IP là một ngoại lệ).
Bản thân giao thức Modbus không cung cấp khả năng bảo mật chống lại các lệnh trái phép hoặc việc đánh cắp dữ liệu.