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

Phân loại Modbus
Có ba phiên bản chính của Modbus như sau:
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ỗi byte dữ liệu. Giới hạn tốc độ truyền thông thường từ 1200 đến 115200 baud, với tốc độ phổ biến nhất là từ 9600 đến 19200 baud. Modbus RTU được sử dụng rộng rãi trong công nghiệp với các giao diện như RS232 hoặc RS485.
Modbus TCP
Đây là phiên bản sử dụng qua mạng Ethernet (RJ45). Dữ liệu Modbus được đóng gói trong giao thức TCP/IP, thay vì sử dụng các kết nối nối tiếp. Máy chủ không cần SlaveID mà sử dụng địa chỉ IP thay thế.
Modbus ASCII
Mỗi thông điệp được mã hóa bằng hệ thống hexadecimal, sử dụng đặc tính ASCII 4-bit. Để truyền một byte thông tin, cần hai byte truyền thông, gấp đôi so với Modbus RTU hoặc Modbus TCP. Mặc dù chậm hơn, Modbus ASCII thích hợp cho việc sử dụng modem điện thoại hoặc kết nối sóng radio do tính ổn định của ASCII trong việc phân định thông điệp, hỗ trợ việc tránh nhầm lẫn thông tin trong môi trường truyền dẫn không ổn định.
Nguyên tắc hoạt động
Tìm hiểu về mã HEX (HEXADECIMAL)
ASCII là gì?
Địa chỉ dữ liệu và thanh ghi theo chuẩn Modbus
Trong chuẩn Modbus, thông tin dữ liệu được lưu trữ ở thiết bị Slave sẽ được chia thành 4 khoảng giá trị khác nhau, bao gồm hai khoảng lưu trữ các 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 đều có khoảng biến chỉ đọc (read-only) và biến đọc và ghi (read-write).
Trong chuẩn Modbus, mỗi khoảng có thể lưu trữ 9999 biến giá trị. Mỗi coil hoặc contact là 1 bit và được gán với một địa chỉ dữ liệu trong khoảng từ 0000 đến 270E. Mỗi register là 1 word = 16 bits = 2 bytes và cũng được gán với một địa chỉ dữ liệu từ 0000 đến 270E. Coil/Register Numbers có thể được xem như tên vị trí và “Data Addresses” và được sử dụng trong các thông điệp truyền tải.Function code
Lệnh và phản hồi trong chuẩn MODBUS
Trong chuẩn Modbus, việc giao tiếp giữa thiết bị Master và thiết bị Slave sẽ được thực hiện thông qua quá trình gửi lệnh và nhận phản hồi. Lệnh gửi bắt đầu với thiết bị Master tới thiết bị Slave có thể yêu cầu đọc hoặc ghi dữ liệu từ các thanh ghi cụ thể, cũng như thực hiện các chức năng đọc trạng thái của các coil (chẳng hạn như các thiết bị on/off) và thực hiện các chức năng điều khiển.
Phản hồi từ thiết bị Slave về thiết bị Master sẽ chứa thông tin được yêu cầu, bao gồm dữ liệu của các thanh ghi hoặc trạng thái của các coil. Quá trình này sẽ tiếp tục theo chu kỳ khi thiết bị Master gửi lệnh và thiết bị Slave phản hồi, tạo nên một luồng liên tục của truyền thông và trao đổi dữ liệu giữa các thiết bị trong hệ thống Modbus.
Kiểu dữ liệu
Trong chuẩn Modbus, việc đọc dữ liệu từ các register rất quan trọng để có thể hiểu cách dữ liệu được biểu diễn. Ví dụ, với register 40108 chứa giá trị AE41 khi chuyển sang 16 bit, chúng ta có thể hiểu rằng:
- Nếu xem register này như một số nguyên không dấu 16 bit, giá trị đó sẽ là 44,609 nếu chuyển từ hệ lục phân sang hệ thập phân.
- Nếu xem đó là số nguyên có dấu 16 bit, giá trị sẽ là -20,927 khi chuyển từ hệ lục phân sang hệ thập phân, và nếu vượt quá 32767, thi sẽ trừ đi 65535.
- Cũng có thể xem AE41 là chuỗi ASCII hai ký tự là ® A hoặc giá trị on/off rời rạc với dữ liệu hex là 0000 hoặc 0001.
- Kết hợp register 40108 với 40109 tạo ra kiểu dữ liệu 32 bit, ví dụ như số nguyên không dấu 32 bit 2,923,517,522 hoặc số nguyên có dấu 32 bit -1,371,449,774. Một dạng khác là số dấu phẩy động IEEE 32 bit, cho phép biểu diễn số thực với độ chính xác 7 chữ số.
- Khi kết hợp register, có thể lưu trữ chuỗi ASCII dài hơn, sử dụng các cặp register để lưu trữ 2 ký tự ASCII (2 byte) tương ứng.
Byte và Word trong chuẩn MODBUS
Mở rộng thanh ghi (Register) trong chuẩn MODBUS
Địa chỉ “Slave” 2-byte
Giao thức Modbus ban đầu sử dụng một byte để xác định địa chỉ "Slave", giới hạn số lượng "Slave" trên mạng ở mức 256, thậm chí trong chuẩn Modbus còn giới hạn lại mức số "Slave" ở mức 247. Tuy nhiên, để vượt qua giới hạn này, có thể sửa đổi giao thức để sử dụng hai byte cho địa chỉ, mở rộng giới hạn lên tới 65535 "Slave" trên mạng. Cả "Master" và "Slave" đều cần hỗ trợ sửa đổi này để thành công.
Mặc định, hầu hết phần mềm hỗ trợ Modbus đều sử dụng địa chỉ 1 byte. Khi nhập địa chỉ lớn hơn 255, phần mềm tự động chuyển sang định địa chỉ 2 byte và duy trì ở chế độ này với tất cả các địa chỉ cho đến khi người dùng thủ công tắt địa chỉ 2 byte.
Ứng dụng chuẩn Modbus
Sự khác biệt giữa RTU và TCP
Giao thức Modbus có hai phiên bản phổ biến là Modbus RTU và Modbus TCP, và chúng có những điểm khác biệt quan trọng:
Modbus RTU là phiên bản dành cho các kết nối nối tiếp, sử dụng định dạng dữ liệu không thường xuyên để truyền thông tin, bao gồm bit dừng, bit bắt đầu và kiểm tra lỗi kiểu CRC (Cyclic Redundancy Check). Định dạng này thích hợp cho việc truyền thông tin trong môi trường nhiễu sóng và tốc độ truyền thông thấp.
Modbus TCP, đối với, là phiên bản sử dụng TCP/IP để truyền thông và sử dụng giao thức Ethernet. Điều này cho phép truyền thông thông tin ở tốc độ cao hơn so với Modbus RTU và phù hợp cho các môi trường mạng Ethernet. Modbus TCP cũng cho phép việc sử dụng các thiết bị mạng IP và mạng không dây.
Như vậy, điểm khác biệt chính giữa Modbus RTU và Modbus TCP nằm ở định dạng truyền dữ liệu và phương thức truyền thông, ảnh hưởng đến khả năng chịu nhiễu và tốc độ truyền thông của hệ thống.
Sự khác biệt giữa ASCII và RTU
Giao thức Modbus có hai phiên bản truyền thông phổ biến là Modbus ASCII và Modbus RTU, và chúng có những điểm khác biệt như:
Modbus RTU sử dụng định dạng dữ liệu không thường xuyên để truyền thông tin, bao gồm bit dừng, bit bắt đầu và kiểm tra lỗi kiểu CRC (Cyclic Redundancy Check). Sự sắp xếp dữ liệu trong các khung truyền tin RTU là theo định dạng nhị phân, đây là một định dạng hiệu quả cho việc truyền thông tin trong môi trường nhiễu sóng ở tốc độ truyền thông thấp.
Trái ngược với Modbus RTU, Modbus ASCII sử dụng một phương thức truyền thông dựa trên văn bản, trong đó dữ liệu được trình bày dưới dạng ký tự ASCII. Định dạng ASCII có thể mang lại sự linh hoạt trong việc truyền thông và kiểm tra lỗi, nhưng yêu cầu thêm thời gian truyền thông do dữ liệu được trình bày dưới dạng ký tự và có thêm các ký tự đánh dấu.
Điểm khác biệt chính giữa Modbus ASCII và Modbus RTU nằm ở định dạng truyền dữ liệu và phương thức truyền thông, ảnh hưởng đến tốc độ và hiệu suất truyền thông của hệ thống.
Trong bài viết này, chúng ta đã tìm hiểu về các phiên bản của giao thức Modbus, bao gồm Modbus RTU, Modbus TCP và Modbus ASCII. Chúng ta đã hiểu rõ sự khác biệt về cách thức truyền thông và ứng dụng của mỗi phiên bản trong ngành công nghiệp. Việc hiểu rõ về các phiên bản này sẽ giúp chúng ta áp dụng giao thức Modbus một cách hiệu quả trong các hệ thống điện tử công nghiệp và mạng truyền thông hiện đại.