Báo Cáo Lý Thuyết Scada Modbus Rtu.pdf

23 0 0
Tài liệu đã được kiểm tra trùng lặp
Báo Cáo Lý Thuyết Scada Modbus Rtu.pdf

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Trang 1

ĐẠI HỌC QUỐC GIA HÀ NỘITRƯỜNG ĐẠI HỌC CÔNG NGHỆ

BÁO CÁO LÝ THUYẾT SCADA

Trang 2

2.3 Các đối tượng dữ liệu 5

2.4 Mô hình địa chỉ Modbus 5

2.5 Mã hàm 6

2.6 Modbus RTU 8

2.7 Một số mã hàm dùng trong Modbus chế độ RTU 10

2.7.1 01 (0x01) Read Coils 10

2.7.2 02 (0x02) Read Discrete Inputs 11

2.7.3 03 (0x03) Read Holding Registers 12

2.7.4 04 (0x04) Read Input Registers 12

2.7.5 05 (0x05) Write Single Coil 13

2.7.6 06 (0x06) Write Single Register 13

CHƯƠNG 3: MÔ PHỎNG SCADA DÙNG QMODBUS CHẾ ĐỘ TRUYỀN RTU TRONG PROTEUS 14

3.1 Qmodbus dùng mã hàm 01 (0x01) Read Coils 15

3.2 Qmodbus dùng mã hàm 02 (0x02) Read Discrete Inputs 16

3.3 Qmodbus dùng mã hàm 03 (0x03) Read Holding Registers 17

3.4 Qmodbus dùng mã hàm 04 (0x04) Read Input Registers 17

3.5 Qmodbus dùng mã hàm 05 (0x05) Write Single Coil 18

3.6 Qmodbus dùng mã hàm 06 (0x06) Write Single Register 18

TÀI LIỆU THAM KHẢO 19

Trang 3

CHƯƠNG 1: GIỚI THIỆU1.1 Lịch sử và ứng dụng

1.1.1 Lịch sử

- Phát triển đầu tiên bởi Modicon (nay thuộc Schneider Electric) - Dựa trên các ứng dụng trong công nghiệp.

- Là một chuẩn mở, miễn phí bản quyền.

- Tiếp tục được phát triển và quản lý bởi Modbus Organization từ tháng 4 – 2004

1.1.2 Ứng dụng

- Có thể được sử dụng để kết nối máy tính giám sát với các thiết bị vào ra từ xa (remote terminal unit)

- Được sử dụng trong các hệ thống giám sát và thu thập dữ liệu điều khiển

Trang 4

Hình 1: Ví dụ về kiến trúc mạng MODBUS

- Modbus làm việc ở tầng 1(Physical) , tầng 2(Data link) và tầng 7(Application) trong mô hình OSI

+ Tầng 1(Physical): Modbus thông qua các giao thức nối tiếp phổ biến như TIA/EIA-485 (RS485), TIA/EIA-232 (RS232).

+ Tầng 2(Data link): Giao thức Modbus Serial Line là 1 giao thức Master/Slave + Tầng 7(Application): Giao thức Modbus là chuẩn giao thức và dich vụ thuộc tầng ứng dụng , cung cấp giao tiếp client/server thiết bị kết nối qua đường Bus hay mạng.

Hình 2: Giao thức MODBUS và mô hình ISO/OSI

Trang 5

CHƯƠNG 2: MODBUS2.1 Cơ chế giao tiếp

2.1.1 Mạng Modbus chuẩn

- Sử dụng trên các bộ điều khiển Modicon, sử dụng giao diện nối tiếp RS-232C.- Modbus dựa vào kiến trúc Master/Slave để giao tiếp giữa các thiết bị Một thiết

bị chủ gửi yêu cầu cho các thiết bị tớ và các thiết bị tớ sẽ đáp ứng bằng dữ liệu trả lại hoặc đáp ứng một yêu cầu nhất định của thiết bị chủ.

- Một thông báo yêu cầu gồm: địa chỉ trạm nhận, mã hàm dịch vụ, dữ liệu đi kèm và thông tin kiểm tra lỗi

2.1.2 Modbus trên các mạng khác

- Một số mạng như Modbus Plus và MAP sử dụng Modbus là giao thức cho tầng ứng dụng Ví dụ trong giao tiếp Peer-to-Peer , các bộ điều khiển có thể đóng vai trò là chủ hoặc tớ trong các trường hợp nhất định Nhưng nhìn chung ở mức giao tiếp thông báo , giao thức Modbus vẫn tuân theo nguyên tắc chủ/tớ (Master/Slave) mặc dù phương thức giao tiếp là Peer-to-Peer Một bộ điều khiển gửi yêu cầu thông báo và đợi thiết bị tớ(Slave) trả lời thì trong trường hợp này đóng vai trò là chủ(Master).

Trang 6

Ngược lại, khi nó nhận được thông báo và phải đáp ứng lại yêu cầu đó thì trong trường hợp này đóng vai trò là tớ(Slave).

2.1.3 Chu trình yêu cầu – đáp ứng

- Giao thức Modbus định nghĩa khuôn dạng của thông báo yêu cầu cũng như của thông báo đáp ứng.

- Một thông báo yêu cầu bao gồm:

+ Địa chỉ trạm nhận yêu cầu (0 – 247) với địa chỉ 0 là gửi đồng loạt yêu cầu từ thiết bị chủ( Master) đến các thiết bị tớ(Slave).

+ Mã hàm gọi yêu cầu đến các thiết bị tớ(Slave) + Dữ liệu theo yêu cầu của mã hàm.

+ Kiểm soát lỗi giúp trạm tớ kiểm tra tính toàn vẹn của nội dung thông báo nhận được.

Ví mã hàm 3 ((0x03) Read Holding Registers) có chức năng yêu cầu đọc thông số của thanh ghi và trả lại kết quả.

Hình 3: Chu trình yêu cầu – đáp ứng Modbus

Trang 7

2.2 Cấu trúc bức điện

Hình 4: Khung Modbus - Trong đó:

+ Address: Địa chỉ của trạm tớ( Slave) do chúng ta đặt.

+ Function code: Mã hàm với các chức năng tương ứng theo phần 2.5 mã hàm.

+ Data : Dữ liệu phản hồi tương ứng với Function code.

+ Error check: Kiểm tra xem có lỗi không, xem đã nhận được thông báo chưa và nếu có lỗi thì sẽ phản hồi lại trạm chủ (Master).

2.3 Các đối tượng dữ liệu

Hình 5: Mô hình dữ liệu Modbus

- Các kiểu dữ liệu được chia làm 2 kiểu chính: Cuộn dây(Coils) và thanh ghi(Registers) Trong đó các cuộn dây(Coils) có thể hiểu được tín hiệu số ON(1) hoặc OFF(0) Các cuộn dây(Coils) có thể vừa là dữ liêu đầu vào hoặc đầu ra - Thanh ghi(Registers) có 16-bit (2byte), thanh ghi có giá trị từ 0-65535 (0-FFFF) Hạn chế của thanh ghi (Registers) là không thể hiện số âm, số phẩy và các giá trị lớn hơn 65535

Trang 8

2.4 Mô hình địa chỉ Modbus

Hình 6: Mô hình địa chỉ Modbus

- Modbus xác định các quy tắc địa chỉ PDU Trong Modbus PDU mỗi dữ liệu

Sau đó nó sẽ phải liên kết với các ứng dụng thiết bị.

- Việc ánh xạ giữa mô hình dữ liệu Modbus và ứng dụng thiết bị phụ thuộc theo mục đích thiết bị của nhà cung cấp.

2.5 Mã hàm

Mã hàm Modbus bao gồm 3 loại: - Mã hàm chung (Public Function Code):

+ Là mã hàm được xác định rõ ràng.

Trang 9

+ Đảm bảo duy nhất.

+ Được xác thực bởi Modbus.org + Tài liệu chung.

+ Có các bài kiểm tra phù hợp.

+ Bao gồm mã hàm chung được xác định và chưa được xác định nhưng để dùng trong tương lai.

- Mã hàm do người dùng xác định (User-Defined Function Codes): + Có 2 phạm vi từ 65-72 và từ 100-110 thập phân.

+ Người dùng có thể chọn và thực hiện mã hàm không được hỗ trợ + Mã hàm được không là duy nhất.

+ Nếu muốn sửa chức năng của mã hàm chung thì người dùng phải khởi tạo RFC đưa thay đổi vào mục chung và gán mã chung mới.

+ Tổ chức Modbus bảo đảm quyền RFC (Request for Comments) được đề xuất.

- Mã hàm dành riêng (Reserved Function Codes):

+ Là mã hàm sử dụng riêng của các công ty, không có sẵn để sử dụng.

Trang 10

Hình 7: Các loại mã hàm của Modbus - Định nghĩa của mã hàm chung (Public Function Code Definition)

Hình 8: Định nghĩa mã hàm chung của Modbus

2.6 Modbus RTU

- Modbus RTU là 1 chế độ truyền của Modbus, được dùng phổ biến và Modbus

RTU cũng sử dụng cơ chế chủ /tớ (Master/Slave).

- Thiết bị dùng mạng Modbus chuẩn ở chế độ RTU (Remote Terminal Unit), mỗi

byte trong thông báo được gửi thành một ký tự 8 bit Modbus Rtu có ưu điểm là có hiệu suất truyền hơn chế độ truyền ASCII Các thông báo được truyền thành 1 dòng liên tục.

Trang 11

Hình 9: Chuỗi bit trong chế độ RTU

Hình 10: Chuỗi bit trong chế độ RTU không có Parity - Mỗi ký tự trong khung:

+ 1 bit bắt đầu (1 start bit)

+ 8 bit dữ liệu, ưu tiên gửi bit thấp trước + 1 bit parity chẵn/lẻ , nếu sử dụng parity + 1 bit kết thúc (1 stop bit)

Như hình 10 cho thấy nếu không có bit Parity thì thay bằng bit kết thúc(Stop bit).

Hình 11: Khung thông báo Modbus chế độ RTU - Như trên hình 11 ta thấy kích thước tối đa của khung RTU là 256 bytes.

Hình 12: Khung thông báo chi tiết Modbus chế độ RTU

- Một thông báo bắt đầu với một khoảng trống tối thiểu là 3.5 thời gian ký tự Sau đó đến 8 bit địa chỉ, tiếp đó là 8 bit mã hàm, đến các byte dữ liệu và cuối cùng là

Trang 12

thông tin kiểm tra lỗi CRC (16bit) Kết thúc cũng bằng một khoảng trống yên lặng tối thiểu 3.5 thời gian ký tự trước khi bắt đầu thông báo mới.

- Đa thức phát của CRC là G=1010 0000 0000 0001.

Hình 13: Mô tả khung thông báo Modbus chế độ RTU 3.5 ký tự - Khoảng trống kết thúc của khung trước cũng có thể là khoảng trống bắt đầu của

Trang 13

Hình 15: Minh họa về cơ chế chủ/tớ (Master/Slave)

- Ví dụ theo hình 15, giả sử trạm chủ (Master) gửi yêu cầu với địa chỉ 0 đồng loạt tới 3 trạm tớ(Slave) nhưng chỉ yêu cầu trạm tớ(Slave2) phản hồi lại, kèm theo đó yêu cầu của trạm chủ(Master) là mã hàm 1 trong phần 2.5 mã hàm Khi đó chỉ có trạm tớ(Slave2) gửi lại phản hồi ON(1) hoặc OFF(0) theo yêu cầu của mã hàm 1 Các yêu cầu thông báo cách nhau bằng 1 khoảng yên lặng tối thiểu 3.5 thời gian ký tự rồi sau đó khi gửi yêu cầu mã hàm 1 xong , trạm tớ sẽ phản hồi yêu cầu theo mã hàm đó cuối mỗi khung là thông tin kiểm tra lỗi CRC.

2.7 Một số mã hàm dùng trong Modbus chế độ RTU

- Chi tiết một số mã hàm trong phần mềm QmodBus để sử dụng cho Chương 3mô phỏng SCADA dùng QmodBus chế độ truyền RTU trong proteus.

Bảng 1: Bản đồ bộ nhớ Modbus RTU (MODBUS RTU Memory Map) Modbus RTU Data Type Common name Starting address

Modbus Coils Bits, binary values, flags 00001 Digital Inputs Binary inputs 10001 Analog Inputs Binary inputs 30001 Modbus Registers Analog values, variables 40001

2.7.1 01 (0x01) Read Coils

- Mã hàm này được sử dụng để đọc từ 1 – 2000 trạng thái của cuộn dây(coils) từ

thiết bị điều khiển từ xa Có 2 trạng thái được phản hồi ON(1) và OFF(0).

- Trong yêu cầu PDU địa chỉ cuộn dây(Coils) được đánh bắt đầu từ địa chỉ 0.- LSB (Least Significant Bit) của byte dữ liệu đầu tiên chứa địa chỉ đầu ra.- Các cuộn dây(Coils) khác theo sau phía cuối có thứ tự cao của byte này và từ

thấp đến cao trong các byte tiếp theo.

Trang 14

Bảng 2: Request ( Yêu cầu của mã hàm 01)

Starting Address 2 Bytes 0x0000 to 0xFFFF Quantity of coils 2 Bytes 1 to 2000 (0x7D0) Bảng 3: Response ( Phản hồi của mã hàm 01)

Function Code 1 Byte 0x01

Byte count 1 Byte N*

Coil status n Bytes n = N or N+1

*N = Quantity of Outputs / 8, if the remainder is different of 0 N = N+1

Bảng 4: Error ( Lỗi của mã hàm 01)

Function code 1 Byte Function code + 0x80

Exception code 1 Byte 01 or 02 or 03 or 04

2.7.2 02 (0x02) Read Discrete Inputs

- Mã hàm này được sử dụng để đọc từ 1 – 2000 trạng thái của đầu vào rời rạc

(discrete inputs) từ thiết bị điều khiển từ xa Có 2 trạng thái được phản hồi ON(1) và OFF(0).

- Trong yêu cầu PDU địa chỉ đầu vào rời rạc (discrete inputs) được đánh bắt đầu

từ địa chỉ 0.

- LSB (Least Significant Bit) của byte dữ liệu đầu tiên chứa địa chỉ đầu ra.- Các đầu vào khác theo sau phía cuối có thứ tự cao của byte này và từ thấp đến

cao trong các byte tiếp theo.

Bảng 5: Request ( Yêu cầu của mã hàm 02)

Starting Address 2 Bytes 0x0000 to 0xFFFF Quantity of Inputs 2 Bytes 1 to 2000 (0x7D0) Bảng 6: Response ( Phản hồi của mã hàm 02)

Input Status N* x 1 Byte

*N = Quantity of Outputs / 8, if the remainder is different of 0 N = N+1 Bảng 7: Error ( Lỗi của mã hàm 02)

Exception code 1 Byte 01 or 02 or 03 or 04

Trang 15

2.7.3 03 (0x03) Read Holding Registers

- Mã hàm này được sử dụng để đọc nội dung thanh ghi từ thiết bị điều khiển từ

xa

- Trong yêu cầu PDU địa chỉ các thanh ghi được đánh bắt đầu từ đại chỉ 0.- Dữ liệu phản hồi của thanh ghi là 2 bytes trên mỗi thanh.

- Mỗi thanh ghi thì bits đầu tiên thứ tự cao và byte thứ hai chứa bits giá trị thấp.

Bảng 8: Request ( Yêu cầu của mã hàm 03)

Starting Address 2 Bytes 0x0000 to 0xFFFF Quantity of Registers 2 Bytes 1 to 125 (0x7D) Bảng 9: Response ( Phản hồi của mã hàm 03)

Byte count 1 Byte 2 x *N

Register value N* x 2 Bytes

*N = Quantity of Registers

Bảng 10: Error ( Lỗi của mã hàm 03)

Exception code 1 Byte 01 or 02 or 03 or 04

2.7.4 04 (0x04) Read Input Registers

- Mã hàm này được sử dụng để đọc từ 1 - 125 thanh ghi đầu vào từ thiết bị điều

khiển từ xa

- Trong yêu cầu PDU địa chỉ các thanh ghi được đánh bắt đầu từ đại chỉ 0.- Dữ liệu phản hồi của thanh ghi là 2 bytes trên mỗi thanh.

- Mỗi thanh ghi thì bits đầu tiên thứ tự cao và byte thứ hai chứa bits giá trị thấp.

Bảng 11: Request ( Yêu cầu của mã hàm 04)

Starting Address 2 Bytes 0x0000 to 0xFFFF Quantity of Input Registers 2 Bytes 0x0001 to 0x007D Bảng 12: Response ( Phản hồi của mã hàm 04)

Byte count 1 Byte 2 x *N

Input Registers N* x 2 Bytes

*N = Quantity of Input Registers

Bảng 13: Error ( Lỗi của mã hàm 04)

Trang 16

Exception code 1 Byte 01 or 02 or 03 or 04

2.7.5 05 (0x05) Write Single Coil

- Mã hàm này được sử dụng để ghi một đầu ra duy nhất ON(1) hoặc OFF(0)

trong thiết bị điều khiển từ xa.

- Trạng thái ON(1) hoặc OFF(0) được chỉ định bởi một hằng số trong trường dữ

liệu Giá trị FF00 hex đưa ra yêu cầu ON cho đầu ra , giá trị 0000 hex yêu cầu OFF còn các trường hợp khác không ảnh hưởng đến đầu ra.

- Trong yêu cầu PDU địa chỉ cuộn dây(coil) được đánh từ 0 và có hai trạng thái

ON(1) và OFF(0) được quy định bởi hằng số trong trường giá trị cuộn dây Với giá trị 0xFF00 là ON còn 0x0000 là OFF , các giá trị khác không ảnh hưởng Bảng 14: Request ( Yêu cầu của mã hàm 05)

Output Address 2 Bytes 0x0000 to 0xFFFF Output Value 2 Bytes 0x0000 or 0xFF00 Bảng 15: Response ( Phản hồi của mã hàm 05)

Output Address 2 Bytes 0x0000 to 0xFFFF Output Value 2 Bytes 0x0000 or 0xFF00 Bảng 16: Error ( Lỗi của mã hàm 05)

Exception code 1 Byte 01 or 02 or 03 or 04

2.7.6 06 (0x06) Write Single Register

- Mã hàm này được sử dụng để ghi thanh ghi duy nhất từ thiết bị điều khiển từ

- Trong yêu cầu PDU địa chỉ các thanh ghi được đánh bắt đầu từ đại chỉ 0.- Phản hồi lại nội dung của thanh ghi sau khi được ghi dữ liệu.

Bảng 17: Request ( Yêu cầu của mã hàm 06)

Register Address 2 Bytes 0x0000 to 0xFFFF Register Value 2 Bytes 0x0000 to 0xFFFF Bảng 17: Response ( Phản hồi của mã hàm 06)

Register Address 2 Bytes 0x0000 to 0xFFFF Register Value 2 Bytes 0x0000 to 0xFFFF Bảng 19: Error ( Lỗi của mã hàm 06)

Trang 17

Error code 1 Byte 0x86

Exception code 1 Byte 01 or 02 or 03 or 04

proteus qua Qmodbus chế độ truyền RTU.

Hình 16: Hệ thống SCADA đơn giản dùng Qmodbus chế độ truyền RTU

Trang 18

Hình 17: Qmodbus chế độ truyền RTU

- Như trên hình 17 đó là giao diện phần mềm Qmodbus , trong mục Settings đầu tiên Serial port thì em dùng phần mềm tạo COM kết nối Qmodbus và proteus, tiếp đến là chọn dải băng tần 9600 , sau đó là data bits chon 8 bit , 1 stop bits, Parity chọn mặc định (none) giống với khung thông báo Modbus chế độ truyền RTU.

+ Mục Modbus Request Slave Id do mình khởi tạo ID = 1, tiếp đến là mã hàm , địa chỉ bắt đầu và số lượng

+ Mục Registers là nơi hiển thị thông báo phản hồi dữ liệu các thông số theo mã hàm mình chọn.

+ Mục raw data received là nơi hiển thị các dữ liệu nhận, còn mục Modbus requests/ responses hiện lịch sử các yêu cầu và phản hồi của trạm chủ/tớ.

3.1 Qmodbus dùng mã hàm 01 (0x01) Read Coils

- Ban đầu thông số của các Coils trong hình là ở trạng thái OFF, muốn có trạng

thái khác thì dùng phần 3.5 Qmodbus dùng mã hàm 05 (0x05) Write Single Coil để viết trạng thái cho nó theo ý mình mong muốn.

Trang 19

Hình 18: Qmodbus dùng mã hàm 01

- Coil có input D8 như trên hình sẽ có địa chỉ là 7 vì địa chỉ bắt đầu từ 0 Một phần

do code mình quy ước để tránh giống các dữ liệu của thông số khác Tương tự vậy với các Coil khác trên hình có địa chỉ giảm đi 1 Trên hình phần Qmodbus ta thấy thông báo trạng thái của các Coil là ON(1).

3.2 Qmodbus dùng mã hàm 02 (0x02) Read Discrete Inputs

- Mã hàm 02 khi trạng thái ON(1) hoặc OFF(0) , như hình dưới D2 ứng với input có địa chỉ là 1, tương tự D3,4,5,6,7 cũng giảm đi 1 Như trong hình D2,3,6 mở khi ấn send thì thông báo trả về như hình dưới input địa chỉ tương ứng của nó 1,2,5 sẽ ở trạng thái OFF(0) còn các địa chỉ còn lại công tắc đóng hoạt động ở trạng thái ON(1)

Trang 20

Hình 19: Qmodbus dùng mã hàm 02

- Tương tự vậy ta thử với đóng tất cả các công tắc và ấn send thì thông báo phản hồi tất cả sẽ ở trạng thái ON(1) như hình dưới đây.

Hình 20: Qmodbus dùng mã hàm 02 ví dụ tiếp

3.3 Qmodbus dùng mã hàm 03 (0x03) Read Holding Registers

- Ban đầu thông số của các thanh ghi là 0, giả sử dùng phần 3.6 Qmodbus dùng

mã hàm 06 (0x06) Write Single Register để viết thông số là của A10, A11 có địa chỉ

là 9,10 viết thông số data lần lượt là 21, 2022 Khi dùng mã 03 đọc thông số thanh ghi ta sẽ thấy được dữ liệu ghi ở mã hàm 06 kia Địa chỉ bắt đầu chọn là 9 và số lượng 2.

Ngày đăng: 04/05/2024, 12:46

Tài liệu cùng người dùng

Tài liệu liên quan