Giao thức Modbus được sử dụng rất nhiều trong công nghiệp, Trong bài này chúng ta cùng tìm hiểu Modbus là gì?. Modbus là một phương tiện truyền thông giữa nhiều thiết bị thông qua các dây kết nối. Về mặt hệ thống, modbus bao gồm 1 master và nhiều slave hay nói một cách đơn giản là 1 chủ kết nối với nhiều tớ. Chủ có thể là PC, PLC,RTU... , tớ là các thiết bị thông thường như biến tần, bộ điều khiển nhiệt độ, servo.. Tuy nhiên mạng kết nối ở đây vẫn là mạng ngang hàng (peer to peer).
Khi bộ điều khiển bắt đầu một thông điệp, nó sẽ bắt đầu từ thiết bị chủ (master) trước, và đợi phản hồi từ thiết bị tớ. Hay nói một cách khác, thiết bị tớ nhận thông điệp từ thiết bị chủ, lập tức hình thanh một thông điệp và gửi ngược lại
Đoạn mã truy vấn (Query): Khung mã hàm (function code) trong đoạn truy vấn “nói” với thiết bị được đánh dấu địa chỉ id(Slave id) loại hành động cần thực hiện. Khung data chứa nọi dữ liệu cần thiết mà thiết bị “tớ” cần để thực hiện hành động. Một ví dụ, Mã chức năng 03 sẽ thực hiện một đoạn truy vấn đến thiết bị “tớ”(Slave) để đọc các thanh ghi chứa dữ liệu và phản hồi về nội dung của chúng. Khung data phải chứa các thông tin trong đó cung cấp thanh ghi bắt đầu và bao nhiêu thanh ghi cần đọc. Khung CRC là khung check lỗi, cung cấp giải pháp cho thiết bị “tớ” xác định tính bảo toàn thông điệp trong quá trình truyền đi.
Đoạn mã phản hồi (Response): Nếu thiết bị “tớ” tạo một đoạn phản hồi bình thường, Mã chức năng trong đó sẽ giống với mã chức năng trong đoạn truy vấn. Khung data chứa các dữ liệu thu thập được từ thiết bị “tớ”, như các giá trị các thanh ghi, trạng thái(status)..vv. Nếu có xuất hiện lỗi, Đoạn mã chức năng sẽ được thay đổi để xác định rằng đoạn phản hồi là một đoạn phản hồi lỗi, và khung data chứa mã mô tả lỗi đó. Khung CRC cho phép master xác nhận rằng thông điệp đó là hợp lệ
Bộ điều khiển có thể được cài đặt để kết nối với mạng modbus thông thường với 2 mode truyền là ASCII hoặc RTU. Người dùng lưa chọn chế độ mong muốn với các tham số cổng truyền thông(baudrate, parity, stopbit.. ). Chế độ và các tham số cổng truyền thông phải giống nhau đối với mọi thiết bị trong mạng
Việc lựa chọn giữa chế độ ASCII hoặc RTU để kết nối với mạng Modbus. Nó đinh nghĩa nội dung bit của thông điệp được truyền đi trong mạng. Nó xác định cách mà dữ liệu được đóng gói và giải mã. Về chế độ ASCII chúng ta sẽ thảo luận trong bài viết khác. Ở đây ta sẽ tập trung vào chế độ RTU, sử dụng đường truyền vật lý RS-232 và RS-485
Cấu trúc bản tin Modbus RTU:
Một bản tin Modbus RTU bao gồm: 1byte địa chỉ -1 byte mã hàm-n byte dữ liệu-2byte CRC
Trong đó:
Cách đấu nối hệ thống Modbus RTU qua cổng cổng RS485
Tiến hành làm thực tế
Chuẩn bị :
PLC Delta DVP32EH00R3
Module Relay RS485
Đối với module trên trước hết ta cài đặt id là 1(có thể là địa chỉ khác tùy người dùng)
Đoạn mã (HEX) để bật relay như sau : 01 06 00 01 01 00 D9 9A
Trong đó
Tương tự để tắt relay ta có mã : 01 06 00 01 02 00 D9 6A
Sơ đồ đấu nối giữa PLC và module relay
Hướng dẫn cài đặt và truyền thông trên PLC Delta:
Click next , sau đó
Click next
Cuối cùng chọn Finish, ta được
Sau khi cài đặt xong ta đã có được cấu hình cho việc truyền nhận modbus RTU giờ ta cần cài đặt thanh ghi để truyền thông điệp đi theo ý muốn .Bảng thanh ghi như sau
Dựa vào bảng trên ta cách đóng mở relay đã trình bày ở trên ta chọn các thông số gửi đi để điều khiển đóng mở relay như sau:
Cấu trúc lệnh RS được dùng để thực hiện truyền dữ liệu đi và nhận dữ liệu về.
Ở đây nói một cách rõ ràng hơn là khi truyền đi ta truyền từ D100~D107, và khi nhận về ta ghi các giá trị vào D120~D121.
Giải thích :
Khi mới vào chương trình M1002 On trong vòng quét đầu tiên, cài đặt cho PLC vào chế độ Modbus RTU và các tham số truyền nhận. Sau đó On bit M228 để đặt giá trị cho các thanh ghi truyền đi. Cuối cùng khi X0 On PLC sẽ truyền đi dữ liệu từ thanh ghi D100~D107 và nhận về dữ liệu ghi vào thanh ghi từ D120~D127. Sau khi quá trình nhận dữ liệu kết thúc bit M1123 sẽ được reset
Bài viết của mình còn nhiều thiếu sót mong anh em đừng ném đá. Nếu anh em cần code để về thử nghiệm thì ở đây nhé
Khi bộ điều khiển bắt đầu một thông điệp, nó sẽ bắt đầu từ thiết bị chủ (master) trước, và đợi phản hồi từ thiết bị tớ. Hay nói một cách khác, thiết bị tớ nhận thông điệp từ thiết bị chủ, lập tức hình thanh một thông điệp và gửi ngược lại
Đoạn mã truy vấn (Query): Khung mã hàm (function code) trong đoạn truy vấn “nói” với thiết bị được đánh dấu địa chỉ id(Slave id) loại hành động cần thực hiện. Khung data chứa nọi dữ liệu cần thiết mà thiết bị “tớ” cần để thực hiện hành động. Một ví dụ, Mã chức năng 03 sẽ thực hiện một đoạn truy vấn đến thiết bị “tớ”(Slave) để đọc các thanh ghi chứa dữ liệu và phản hồi về nội dung của chúng. Khung data phải chứa các thông tin trong đó cung cấp thanh ghi bắt đầu và bao nhiêu thanh ghi cần đọc. Khung CRC là khung check lỗi, cung cấp giải pháp cho thiết bị “tớ” xác định tính bảo toàn thông điệp trong quá trình truyền đi.
Đoạn mã phản hồi (Response): Nếu thiết bị “tớ” tạo một đoạn phản hồi bình thường, Mã chức năng trong đó sẽ giống với mã chức năng trong đoạn truy vấn. Khung data chứa các dữ liệu thu thập được từ thiết bị “tớ”, như các giá trị các thanh ghi, trạng thái(status)..vv. Nếu có xuất hiện lỗi, Đoạn mã chức năng sẽ được thay đổi để xác định rằng đoạn phản hồi là một đoạn phản hồi lỗi, và khung data chứa mã mô tả lỗi đó. Khung CRC cho phép master xác nhận rằng thông điệp đó là hợp lệ
Bộ điều khiển có thể được cài đặt để kết nối với mạng modbus thông thường với 2 mode truyền là ASCII hoặc RTU. Người dùng lưa chọn chế độ mong muốn với các tham số cổng truyền thông(baudrate, parity, stopbit.. ). Chế độ và các tham số cổng truyền thông phải giống nhau đối với mọi thiết bị trong mạng
Việc lựa chọn giữa chế độ ASCII hoặc RTU để kết nối với mạng Modbus. Nó đinh nghĩa nội dung bit của thông điệp được truyền đi trong mạng. Nó xác định cách mà dữ liệu được đóng gói và giải mã. Về chế độ ASCII chúng ta sẽ thảo luận trong bài viết khác. Ở đây ta sẽ tập trung vào chế độ RTU, sử dụng đường truyền vật lý RS-232 và RS-485
Cấu trúc bản tin Modbus RTU:
Một bản tin Modbus RTU bao gồm: 1byte địa chỉ -1 byte mã hàm-n byte dữ liệu-2byte CRC
Trong đó:
- Byte địa chỉ: Xác định thiết bị mang địa chỉ được nhận dữ liệu (đối với Slave) hoặc dữ liệu nhận được từ địa chỉ nào (Master)
- Byte mã hàm: Xác định yêu cầu từ master. Bảng mã phía bên dưới
- Byte dữ liệu: Xác định dữ liệu trao đổi giữa Master và Slave
- Đọc dữ liệu:
- Master: 2byte địa chỉ dữ liệu, 2 byte độ dài dữ liệu
- Slave: 2byte địa chỉ dữ liệu, 2 byte độ dài dữ liệu
- Ghi dữ liệu:
- Master: 2 byte địa chỉ dữ liệu, 2 byte độ dài dữ liệu, n byte dữ liệu cần ghi.
- Slave: 2 byte địa chỉ dữ liệu, 2 byte độ dài dữ liệu
- Đọc dữ liệu:
- Byte CRC: 2byte kiểm tra lỗi của hàm truyền. Cách tính giá trị của byte CRC 16bit.
Cách đấu nối hệ thống Modbus RTU qua cổng cổng RS485
Tiến hành làm thực tế
Chuẩn bị :
PLC Delta DVP32EH00R3
Module Relay RS485
Đối với module trên trước hết ta cài đặt id là 1(có thể là địa chỉ khác tùy người dùng)
Đoạn mã (HEX) để bật relay như sau : 01 06 00 01 01 00 D9 9A
Trong đó
- 01 là id
- 06 là mã hàm
- 00 01 là 2 byte địa chỉ (relay1). Với relay 2 sẽ là 00 02
- 01 00 là dữ liệu cần ghi
- D9 9A là mã CRC
Tương tự để tắt relay ta có mã : 01 06 00 01 02 00 D9 6A
Sơ đồ đấu nối giữa PLC và module relay
Hướng dẫn cài đặt và truyền thông trên PLC Delta:
- Cài đặt truyền thông trên PLC Delta bằng phần mềm WPL Soft:
WPL Soft có tích hợp wizard hỗ trợ cho việc truyền thông RS485 chỉ bằng việc cài đặt trên phần mềm.
- Bước 1: Chọn biểu tượng như hình bên dưới
- Bước 2 : Bảng cài đặt trên PLC sẽ xuất hiện ta làm lần lượt theo các hình sau
Click next , sau đó
Click next
Cuối cùng chọn Finish, ta được
Sau khi cài đặt xong ta đã có được cấu hình cho việc truyền nhận modbus RTU giờ ta cần cài đặt thanh ghi để truyền thông điệp đi theo ý muốn .Bảng thanh ghi như sau
Dựa vào bảng trên ta cách đóng mở relay đã trình bày ở trên ta chọn các thông số gửi đi để điều khiển đóng mở relay như sau:
Cấu trúc lệnh RS được dùng để thực hiện truyền dữ liệu đi và nhận dữ liệu về.
Ở đây nói một cách rõ ràng hơn là khi truyền đi ta truyền từ D100~D107, và khi nhận về ta ghi các giá trị vào D120~D121.
Giải thích :
Khi mới vào chương trình M1002 On trong vòng quét đầu tiên, cài đặt cho PLC vào chế độ Modbus RTU và các tham số truyền nhận. Sau đó On bit M228 để đặt giá trị cho các thanh ghi truyền đi. Cuối cùng khi X0 On PLC sẽ truyền đi dữ liệu từ thanh ghi D100~D107 và nhận về dữ liệu ghi vào thanh ghi từ D120~D127. Sau khi quá trình nhận dữ liệu kết thúc bit M1123 sẽ được reset
Bài viết của mình còn nhiều thiếu sót mong anh em đừng ném đá. Nếu anh em cần code để về thử nghiệm thì ở đây nhé