Modbus là gì?
Modbus là 1 giao thức truyền thông nối tiếp được phát triển bởi Modicon (nay là Schneider Electric) vào năm 1979 để sử dụng với các bộ điều khiển PLC. Modbus đã trở thành một giao thức truyền thông chuẩn và bây giờ là một trong những giao thức phổ biến để kết nối các thiết bị điện tử công nghiệp. Một số lý do chính để sử dụng Modbus trong môi trường công nghiệp là:
- Giao thức truyền thông mở và miễn phí bản quyền.
- Dễ dàng phát triển và bảo trì hệ thống
- Đơn giản trong lắp đặt, cấu hình và cho phép trao đổi dữ liệu cả tín hiệu rời rạc và tượng tự
Các phiên bản của truyền thông Modbus:
- Modbus RTU: Sử dụng cổng truyền thông nối tiếp, kiểu dữ liệu nhị phân
- Modbus ASCII: Sử dụng cổng truyền thông nối tiếp với các ký tự ASCII. Các gói tin được mã hóa theo hexa, sử dụng đặc tính ASCII 4 bit.
- Modbus TCP/IP: giao thức này là chuẩn Modbus truyền qua giao thức TCP/IP. Kết nối qua cổng ứng dụng 502 (port 502) của thiết bị.
Một số lưu ý khi thực hiện truyền thông Modbus.
Một số manual hướng dẫn về thanh ghi Modbus (holding register) của một số nhà sản xuất thiết bị không cung cấp địa chỉ tuyệt đối mà chỉ cung cấp địa chỉ tương đối (Relative addresses) hay còn gọi là thanh ghi cơ bản, thì người lập trình có thể sử dụng công thức sau để tìm địa chỉ tuyệt đối của Modbus:
- Địa chỉ Modbus = Req.adr + offset
- adr là 40001 hoặc 400001
Khi sử dụng Modbus mở rộng, tất cả các địa chỉ phải có chính xác 6 chữ số để tránh nhầm lẫn giữa các ngõ ra dạng bit và các dữ liệu khác.
Tập lệnh truyền thông Modbus RTU với S7 -1200
Các tập lệnh để thực hiện cấu hình truyền thông Modbus RTU cũng như thực hiện các chức năng của Modbus master và slve được thực hiện thồn qua 3 tập lệnh sau:
- Modbus_Comm_Load (MB_COMM_LOAD)
- Modbus_Master (MB_MASTER)
- Modbus_Slave (MB_SLAVE)
Các tập lệnh truyền thông Modbus nằm trong các tập lệnh truyền thông của phần mềm TIA Portal: Instructions -> Communication -> Communication Processor -> MODBUS (RTU) hay MODBUS.
Lệnh cấu hình module truyền thông cho Modbus
Lệnh Mod_Comm_Load cấu hình một module truyền thông để cho phép PLC có thể thiết lập giao thức Modbus RTU. Khi gọi lệnh thì phần mềm tự động tạo thêm một khối dữ liệu Instance DB vào trong chương trình người dùng.
Thay đổi cấu hình của Modbus_Comm_Load được lưu trên CM chứ không phải trong CPU.
Tham số của lệnh Modbus_comm_Load
Tham số | Khai báo | Kiểu dữ liệu | Miêu tả |
REQ | IN | Bool | Bắt đầu truyền dữ liệu tới module CM/CP bằng tín hiệu xung cạnh lên |
PORT | IN | PORT(Unit) | Được chỉ định bởi module truyền thông với địa chỉ quy định bởi HW identifier |
BAUD | IN | UDInt | Lựa chọn tốc độ truyền nhận dữ liệu: 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 76800, 115200 bps. |
PARITY | IN | UInt | Lựa chọn trạng thái chẵn lẻ:
– 0 = No parity (mặc định) – 1 = Odd parity (lẻ) – 2 = Even parity (chẵn) |
FLOWCTRL | IN | UInt | Kiểm soát luồng dữ liệu – flow control:
– 0 = no flow control. – 1 = Phần cứng RTS luôn ON. – 2 = Phần cứng RTS chuyển trạng thái |
RTS_ON_DLY | IN | UInt | Lựa chọn độ trễ của RTS ON:
– 0 = Không trễ – 1 đến 65535 là độ trễ tính theo mili giây từ khi RTS được kích hoạt. |
RTS_ONOFF_DLY | IN | UInt | Lựa chọn độ trễ của RTS OFF:
– 0 = Không trễ – 1 đến 65535 là độ trễ tính theo mili giây từ khi RST ngắt kích hoạt |
RESP_TO | IN | UInt | Thời gian timeout: từ 5 ms đến 65535 ms để chờ tín hiệu phản hồi của slave |
MB_DB | IN/OUT | MB_Base | Tham chiếu đến instance data block của Modbus master hoặc slave |
COM_RST | IN/OUT | Bool | Khởi động tập lệnh. Giá trị khởi đầu là TRUE sau đó chuyển trạng thái FALSE |
DONE | OUT | Bool | TRUE sau một chu kỳ nếu không có lỗi. |
ERROR | OUT | Bool | TRUE sau một chu kỳ nếu có lỗi |
STAUTS | OUT | Word | Bảng mã lỗi |
Modbus_Comm_Load được sử dụng để thực hiện cấu hình cổng ứng dụng (Port) cho giao thức Modbus RTU. Một khi đã thực hiện cấu hình Port này cho giao thức Modbus RTU thì nó chỉ có thể được sử dụng bởi các lệnh Modbus_Master hoặc Modbus_Slave.
Người thiết kế phải chạy Modbus_Comm_Load để thực hiện cấu hình cho mỗi cổng truyền thông để có thể sử dụng truyền thông modbus. Người thiết kế cần chỉ định một bộ tham số Instance DB duy nhất tới mỗi lệnh Modbus_Comm_Load tương ứng.
Lệnh Modbus_Comm_Load chỉ thực hiện một lần duy nhất trong quá trình khởi động truyền thông để nó thực hiện bắt tay giữa các thiết bị Modbus với nhau.
Lệnh truyền thông của Master
Lệnh Modbus_Master cho phép PLC thực hiện chức năng giao tiếp là Modbus master thông qua cổng truyền thông đã được cấu hình bởi lệnh Modbus_Comm_Load. Một khối dữ liệu instance DB tự động gán cho lệnh Modbus_Master trong chương trình người dùng. Tham số MB_DB của lệnh Modbus_Comm_Load phải được kết nối tới tham số MB_DB (biến static) của lệnh Modbus_Master.
Một số quy tắc giao tiếp của Modbus_Master:
Modbus_Comm_Load phải chạy để cấu hình Port, nhờ đó mà lệnh Modbus_Master có thể giao tiếp với Port này.
Một Port đã được sử dụng với chức năng Modbus master thì không được sử dụng với Modbus slave.
Lệnh Modbus không sử dụng trong các khối OB ngắt để thực hiện quá trình truyền thông.
Nếu lệnh Modbus_Master gửi một yêu cầu tới slave, phải đảm bảo rằng Modbus_Master vẫn tiếp tục thực thi cho tới khi nhận được phản hồi của slave.
Tham số của lệnh Modbus_Master
Tham số | Khai báo | Kiểu dữ liệu | Miêu tả |
REQ | IN | Bool | False = không có yêu cầu
True = yêu cầu gửi dữ liệu tới slave |
MB_ADDR | IN | UInt | Chọn địa chỉ slave để kết nối:
– Tầm địa chỉ chuẩn: 1 – 247 – Tầm địa chỉ mở rộng: 1 – 65535 – Địa chỉ Broadcast là 0. |
MODE | IN | USInt | Lựa chọn chế độ đọc/ghi hoặc chuẩn đoán thông tin của Modbus slave |
DATA_ADDR | IN | USInt | Địa chỉ bắt đầu thanh ghi, ngõ vào/ra của slave để master truy cập dữ liệu. |
DATA_LEN | IN | USInt | Độ dài dữ liệu: chỉ định số bit hoặc word để lệnh truy cập tới |
COM_RST | IN/OUT | Bool | Khởi động tập lệnh. Giá trị khởi đầu là TRUE sau đó chuyển trạng thái FALSE |
DATA_PTR | IN/OUT | Variant | Con trỏ dữ liệu (Data pointer): Chỉ định tới vùng nhớ (flag) hoặc DB để thực hiện truy xuất dữ liệu với slave. |
DONE | OUT | Bool | TRUE sau một chu kỳ nếu không có lỗi |
BUSY | OUT | Bool | – False: lệnh không kích hoạt
– True: lệnh đang thực hiện |
ERROR | OUT | Bool | TRUE sau một chu kỳ nếu bị lỗi |
STAUTS | OUT | Word | Bảng mã lỗi |
Lệnh truyền thông của Slave
Lệnh Modbus_Slave cho phép trở thành một Modbus slave thông qua module truyền thông CM/CP (RS 422/485 HF hoặc RS232 HF). Một khối dữ liệu Instance DB tự động gán cho lệnh Modbus_Slave khi gọi lệnh. Tham số MB_DB của lệnh Modbus_Comm_Load phải được kết nối tới tham số MB_DB của lệnh Modbus_Slave.
Tham số của lệnh Modbus_Slave
Tham số | Khai báo | Kiểu dữ liệu | Miêu tả |
MB_ADDR | IN | UInt | Chọn địa chỉ cho Modbus slave:
– Tầm địa chỉ chuẩn: 1 – 247 – Tầm địa chỉ mở rộng: 1 – 65535 – Địa chỉ Broadcast là 0. |
COM_RST | IN/OUT | Bool | Khởi động tập lệnh. Giá trị khởi đầu là TRUE sau đó chuyển trạng thái FALSE |
MB_HOLD_REG | IN/OUT | Variant | Con trỏ dữ liệu (Data pointer): Chỉ định tới vùng nhớ M hoặc DB làm thanh ghi holding register. |
NDR | OUT | Bool | – False: Không có dữ liệu mới
– True: chỉ thị rằng có dữ liệu mới được ghi bởi Modbus master |
DR | OUT | Bool | – False: Không đọc dữ liệu
– True: Chỉ thị rằng có dữ liệu được đọc bởi Modbus master |
ERROR | OUT | Bool | TRUE sau một chu kỳ nếu bị lỗi |
STAUTS | OUT | Word | Bảng mã lỗi |
Các tham số DATA_ADDR và MODE
Tham số DATA_ADDR chỉ định địa chỉ bắt đầu để master truy cập dữ liệu của slave. Với tham số MODE và địa chỉ Modbus cho phép người thiết kế chỉ định mã chức năng sẽ được chuyển tới slave.
Mối quan hệ giữa MODE, mã chức năng (function code)
MODE | DATA_ADDR
Địa chỉ Modbus |
DATA_LEN
Độ dài dữ liệu |
FUNCTION CODE
Mã chức năng |
Chức năng là dữ liệu |
0 | 1-9999 | 1-2000/19921 | 01 | Đọc BIT ngõ ra
0-9998 |
10001-19999 | 1-2000/19921 | 02 | Đọc BIT ngõ vào 0-9998 | |
40001-49999 | 1-125/1241 | 03 | Đọc thanh ghi Holding (word)
0-9998 |
|
400001-465535 | 1-125/1241 | 03 | 0-65534 | |
30001-39999 | 1-125/1241 | 04 | Đọc word ngõ vào
0-9998 |
|
1 | 1-9999 | 1 BIT | 05 | Ghi BIT đơn ngõ ra
0-9998 |
40001-49999 | 1 word | 06 | 0-9998 | |
400001-465535 | 1 word | 06 | 0-65524 | |
1-9999 | 2-1968/19601 | 15 | Ghi nhiều BIT ngõ ra 0-9998 | |
40001-49999 | 2-123/122 | 16 | Ghi nhiều Word ngõ ra 0-9998 | |
400001-465535 | 2-123/1221 | 16 | 0-65534 |
- Là địa chỉ mở rộng (extended addressing) của Modbus từ 1-65535
Công Ty TNHH Thương Mại Công Nghệ A&T
- Địa chỉ: Số 155 Đường Nguyễn Tất Thành, Phường Khai Quang, Thành phố Vĩnh Yên, Tỉnh Vĩnh Phúc
- VPĐD: 61/162 Vĩnh Hưng, Hoàng Mai, Hà Nội
- Hotline: 0868 706 822
- Website: www.atautomation.com.vn