1. Trang chủ
  2. » Giáo Dục - Đào Tạo

bài giảng thí nghiệm đo lường và điều khiển bằng máy tính1

23 5 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 23
Dung lượng 1,52 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Kit điều khiển công suất đối tượng: Bộ điều khiển đối tượng lò nhiệt đã được tích hợp vào Kit điều khiển trung tâm có dạng như Hình 1: Hình 1: Kit đối tượng điều khiển công suất lò nhi

Trang 1

THÍ NGHIỆM ĐO LƯỜNG & ĐIỀU KHIỂN

BẰNG MÁY TÍNH BTN #3: GIAO TIẾP MODBUS TCP/IP VỚI PLC S7-1200

THÁNG 4 NĂM 2022

BỘ MÔN TỰ ĐỘNG, KHOA ĐIỆN ĐIỆN TỬ - ĐẠI HỌC BÁCH KHOA TP.HCM

Trang 2

BTN 3: GIAO TIẾP MODBUS TCP/IP VỚI PLC S7-1200

I MỤC ĐÍCH THÍ NGHIỆM:

• Giúp sinh viên củng cố kiến thức thiết lập và lập trình giao diện kết nối ngoại vi qua cổng LAN

• Nắm bắt và hiểu sâu về giao thức truyền thông Modbus TCP/IP

• Lập trình giao tiếp dữ liệu với giao thức Modbus TCP/IP trên phần mềm

• Cấu hình và sử dụng lệnh Modbus TCP/IP trên PLC S7-1200

• Lập trình thu thập dữ liệu thông qua kết nối TCP/IP

• Nắm bắt cấu trúc phần cứng của hệ thống điều khiển nhiệt độ và lập trình, kiểm chứng

và đánh giá chất lượng điều khiển hệ thống điều khiển nhiệt độ

II CHUẨN BỊ THÍ NGHIỆM:

Trước khi học thí nghiệm, sinh viên cần tìm hiểu trước các nội dung sau:

- Tìm hiểu về giao thức MODBUS, bao gồm cả MODBUS RTU, ASCII và TCP/IP

- Tìm hiểu cách lập trình PLC S7-1200 là một MODBUS Server

- Tìm hiểu cách lập trình giao diện máy tính bằng ngôn ngữ C# trên Visual Studio, giao tiếp TCP/IP với PLC S7-1200

- Tìm hiểu cách điều khiển mô hình lò nhiệt (sinh viên có thể tham khảo bài 4 Thí nghiệm Lý thuyết Điều khiển nâng cao)

III GIỚI THIỆU MÔ HÌNH THÍ NGHIỆM

A Kit thí nghiệm trung tâm – Sinh viên xem trong Bài thí nghiệm 1

B Kit điều khiển công suất đối tượng:

Bộ điều khiển đối tượng lò nhiệt đã được tích hợp vào Kit điều khiển trung tâm có dạng như Hình 1:

Hình 1: Kit đối tượng điều khiển công suất lò nhiệt

Trang 3

- Tín hiệu GND là mass chung giữa kit điều khiển trung tâm và kit đối tượng (đã được nối ngầm)

- PLS1 là tín hiệu điều khiển công suất lò nhiệt, trong đó mức cao (24V) là kích mở

lò nhiệt, mức thấp (0V) là ngắt lò nhiệt

- Lưu ý: Để lò nhiệt hoạt động thì núm vặn nhiệt độ phải giữ nguyên một mức trong

suốt quá trình hoạt động (nên đặt ở mức nhiệt độ cao nhất là 230 độ), núm vặn

hẹn giờ phải được vặn khỏi vị trí 0

IV THÍ NGHIỆM:

A Thí nghiệm 1: Kết nối Modbus giữa PLC và PC

Đầu tiên, sinh viên phải lập trình PLC để cấu hình thiết bị này là một MODBUS

Server Sinh viên tham khảo Bài thí nghiệm 1 để biết cách tạo một project mới trong

TIA Portal Sau khi tạo project mới, lập trình các bước tiếp theo như sau:

Tạo data block cấu hình hoạt động Modbus Server:

Trong trường CONNECT, thiết lập các thông số khởi tạo như sau (các thông số còn lại giữ nguyên):

- InterfaceId = 64

- ID = 64

- LocalPort = 502

Trang 4

Tạo data block trao đỗi dữ liệu giữa PLC và máy tính như sau:

Trong chương trình chính, gọi hàm Modbus server V4.0 như sau (sinh viên có thể tìm trong Instructions à Communication à Others à Modbus TCP à MB_SERVER)

Sau khi hoàn tất, sinh viên nạp chương trình xuống PLC

Trang 5

Tiếp theo, sinh viên lập trình kết nối Modbus TCP giữa PC và PLC đọc và ghi multi register với function code 16 (write multi registers) và 03 (read holding registers)

Thiết kế giao diện có dạng như hình dưới:

Thực hiện chương trình C# cho phép đọc và ghi 6 thanh ghi dữ liệu từ PLC như giao diện trên

- Địa chỉ PLC kết nối là 192.168.0.1, Port 502 cho kết nối Modbus

- Nút nhấn Write điều khiển ghi dữ liệu vào xuống PLC

- Nút nhấn Read yêu cầu đọc nội dung các thanh ghi từ PLC

- Địa chỉ bắt đầu ghi và đọc được thiết lập ở nội dung Start Address

Hướng dẫn thực hiện:

- Để kết nối theo chuẩn TCP/IP, cần sử dụng các thư viện hỗ trợ sau:

using System.Net;

using System.Net.Sockets;

Trang 6

- Khởi tạo và kết nối

this.mSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,

this.bufferReceiver = new byte[READ_BUFFER_SIZE];

this.bufferSender = new byte[WRITE_BUFFER_SIZE];

this.mSocket.SendBufferSize = READ_BUFFER_SIZE;

this.mSocket.ReceiveBufferSize = WRITE_BUFFER_SIZE;

IPEndPoint sever = new IPEndPoint(IPAddress.Parse(txtIPAddress.Text),

this.mSocket.Connect(sever);

Dựa trên giao thức Modbus, thông tin địa chỉ, mã lệnh, và dữ liệu được thiết lập bởi các hàm ghi và đọc dữ liệu như sau:

- Hàm tạo khung truyền Modbus cho thao tác ghi dữ liệu

private byte[] WriteMultipleRegistersMsg(ushort id, byte slaveAddress, ushort

starAddress, byte function, byte[] values)

{

int byteCount = values.Length;

byte[] frame = new byte[13 + byteCount];

frame[0] = (byte)(id >> 8);

frame[1] = (byte)id;

frame[8] = (byte)(starAddress >> 8);

frame[9] = (byte)starAddress;

ushort amount = (ushort)(byteCount / 2);

frame[10] = (byte)(amount >> 8);

frame[11] = (byte)amount;

frame[12] = (byte)byteCount;

Array.Copy(values, 0, frame, 13, byteCount);

return frame;

}

- Hàm tạo protocol Modbus cho thao tác đọc dữ liệu

private byte[] ReadHoldingRegisterMsg(ushort id, byte slaveAddress, ushort starAddress,

byte function, uint numberOfPoints)

{

byte[] frame = new byte[12];

Trang 7

frame[0] = (byte)(id >> 8);

frame[1] = (byte)id;

frame[8] = (byte)(starAddress >> 8);

frame[9] = (byte)starAddress;

frame[10] = (byte)(numberOfPoints >> 8);

frame[11] = (byte)numberOfPoints;

Trang 8

private const int READ_BUFFER_SIZE = 50;

private const int WRITE_BUFFER_SIZE = 50;

private byte[] bufferReceiver = null;

private byte[] bufferSender = null;

private Socket mSocket = null;

public void Connect()

Trang 10

throw new Exception("06/0x06: Slave Device Busy.");

string result = string.Empty;

foreach (var item in data)

Trang 11

string result = string.Empty;

result = string.Format("Register {0}: ", data);

//Convert a Byte Array To an Int Array

public static short[] ConvertByteArrayToIntArray(byte[] bytes)

//Convert a Int To a Byte Array

public static byte[] ConvertIntToByteArray(short value)

//Convert a Int Array To a Byte Array

public static byte[] ConvertIntArrayToByteArray(ushort[] value)

{

byte[] arr = new byte[value.Length*2];

int counter = 0;

Trang 12

for (int cnt = 0; cnt < value.Length; cnt++)

Trang 13

int byteCount = values.Length;

byte[] frame = new byte[13 + byteCount];

Trang 14

ushort startAddress = (ushort)txtWrAddress.Value;

ushort value1 = (ushort)Convert.ToInt16(txtReg1.Text);

ushort value2 = (ushort)Convert.ToInt16(txtReg2.Text);

ushort value3 = (ushort)Convert.ToInt16(txtReg3.Text);

ushort value4 = (ushort)Convert.ToInt16(txtReg4.Text);

ushort value5 = (ushort)Convert.ToInt16(txtReg5.Text);

ushort value6 = (ushort)Convert.ToInt16(txtReg6.Text);

ushort[] input = new ushort[6] { value1, value2, value3, value4, value5, value6 };

byte[] values = ConvertIntArrayToByteArray(input);

txtError.Text = string.Empty;

byte[] frame = WriteMultipleRegistersMsg(id, slaveAddress, startAddress, function, values);

txtSendMess.Text = Display(frame);

Trang 15

byte[] buffReceiver = this.Read();

int SizeByte = bufferReceiver[8];

byte[] byteMsg = null;

if (function != bufferReceiver[7])

{

byte[] errorbytes = new byte[3];

Array.Copy(bufferReceiver, 6, errorbytes, 0, errorbytes.Length);

this.CheckValidate(errorbytes);

byteMsg = new byte[9];

Array.Copy(bufferReceiver, 0, byteMsg, 0, byteMsg.Length);

}

else

{

byteMsg = new byte[READ_BUFFER_SIZE];

Array.Copy(bufferReceiver, 0, byteMsg, 0, byteMsg.Length);

Trang 16

byte[] buffReceiver = this.Read();

int SizeByte = bufferReceiver[8];

short[] temp = null;

if (function != bufferReceiver[7])

{

byte[] byteMsg = new byte[9];

Array.Copy(bufferReceiver, 0, byteMsg, 0, byteMsg.Length);

txtRecMess.Text = Display(byteMsg);

byte[] errorbytes = new byte[3];

Array.Copy(bufferReceiver, 6, errorbytes, 0, errorbytes.Length);

this.CheckValidate(errorbytes);

}

else

{

byte[] byteMsg = new byte[9 + SizeByte];

Array.Copy(bufferReceiver, 0, byteMsg, 0, byteMsg.Length);

byte[] data = new byte[SizeByte];

txtRecMess.Text = Display(byteMsg);

Array.Copy(bufferReceiver, 9, data, 0, data.Length);

temp = ConvertByteArrayToIntArray(data);

Trang 17

}

if (temp == null) return;

string result = string.Empty;

foreach (var item in temp)

- Chạy chương trình và kiểm tra truy xuất dữ liệu giữa PLC và máy tính (mở đồng

thời chương trình giao diện máy tính và chức năng Monitoring trong TIA Portal

để kiểm tra dữ liệu BUFF)

- Báo cáo kết quả với thầy/cô hướng dẫn thí nghiệm

Trang 18

B Thí nghiệm 2: Xây dựng các bộ điều khiển ON-OFF và PID cho mô hình

lò nhiệt

1 Điều khiển ON-OFF cho mô hình lò nhiệt Chuẩn bị thí nghiệm:

Ø Đấu dây kết nối giữa lò nhiệt và Panel điều khiển như sau:

o Nối ngõ ra Q0.0 với xung PLS1 của Bộ công suất

o Nối tín hiệu Analog từ bộ transmitter vào ngõ vào Analog AI1

Ø Tính toán thông số nhiệt độ:

o Transmitter cho ra điện áp từ 2V đến 10V tương ứng với nhiệt độ từ 0oC đến

500oC

o Giá trị chuyển đổi ADC nằm trong ô nhớ IW64 của PLC

o Giá trị của IW64 tại 10V là 27648

Như vậy có thể biến đổi tuyến tính từ giá trị của thanh ghi IW64 ra nhiệt độ theo công thức:

𝑡 = 𝑎 + 𝑏 ∗ 𝐼𝑊64 Sinh viên dựa vào các dữ kiện đã cho để xác định a và b

Ø Thiết lập thời gian hẹn giờ của lò nhiệt là 60 phút, núm vặn nhiệt độ nên đặt mức cao

- Chu kì lấy mẫu là 0.5s

- Việc điều khiển được thực hiện từ máy tính thông qua việc ghi tín hiệu điều khiển vào thanh ghi BUFF.data[0]

- Tín hiệu nhiệt độ được gửi lên PC thông qua thanh ghi BUFF.data[6]

- Sử dụng công cụ Chart (hoặc ZedGraph) để vẽ đồ thị nhiệt độ theo thời gian

- Từ kết quả thu được, sinh viên tính hệ số của bộ điều khiển PID theo công thức:

Trang 19

2 Điều khiển PID mô hình lò nhiệt Hướng dẫn thiết lập PWM cho mô hình lò nhiệt:

- Để điều khiển lò nhiệt với tỉ lệ phần trăm công suất trải dài từ 0% đến 100%, có thể sử dụng nhiều cách khác nhau Một phương án đơn giản trước đây là đóng mở theo chu kì điều khiển, ví dụ cần đưa 60% công suất cho lò nhiệt thì có thể lập trình trong 100 chu kì lấy mẫu thì 60 chu kì mở lò nhiệt và 40 chu kì đóng Phương

án này thường gọi là lập trình PWM phần mềm (software PWM), thường tiêu tốn nhiều thời gian để lập trình và chỉ hữu dụng khi phần cứng không có ngoại vi PWM (ví dụ như vi điều khiển 8051) Đối với thiết bị PLC S7-1200 có hỗ trợ sẵn

PWM nên có thể sử dụng trực tiếp chức năng này để tiết kiệm thời gian hơn

- Sinh viên có thể thiết lập PWM trên chân P0.0 của PLC S7-1200 theo các bước sau Đầu tiên, vào Device configuration à Properties à General à Pulse Generators (PTO/PWM) à PTO1/PWM1, chọn Enable this pulse generator để

kích hoạt chức năng PTO/PWM

Trang 20

- Chuyển sang tab Parameter assignment, sinh viên thiết lập như hình dưới để cấu hình chức năng PWM

- Kiểm tra ngõ ra PWM là chân Q0.0 trong tab Hardware outputs

- Kiểm tra thanh ghi để điều khiển PWM là thanh ghi QW1000 trong tab I/O addresses

Trang 21

- Kiểm tra thông số HID trong tab Hardware identifier

- Trong chương trình chính: tạo hàm CTRL_PWM để cấu hình điều khiển PWM như hình dưới Trong đó ngõ vào PWM chính là thông số HID đã kiểm tra ở phía trên

- Để cập nhật thông số trong mỗi chu kì, ghi giá trị điều khiển vào thanh ghi QW1000 Lưu ý rằng với cấu hình như đã hướng dẫn ở trên, thanh ghi QW1000 bằng 0 tương ứng với việc ngắt lò nhiệt hoàn toàn (0% công suất), thanh ghi QW1000 bằng 100 ứng với việc cấp 100% công suất

Yêu cầu điều khiển PID cho mô hình lò nhiệt:

- Điều khiển PID cho hệ thống lò nhiệt, nhiệt độ đặt do người dùng nhập vào trên giao diện máy tính

- Chu kì lấy mẫu là 0.2s

- Các thông số của bộ điều khiển xác định theo công thức ở phần điều khiển OFF, phương trình của bộ điều khiển PID trong miền rời rạc như sau (trong đó k

ON-là thời điểm hiện tại, k-1 ON-là trước đó 1 chu kì lấy mẫu):

Trang 22

- Việc điều khiển được thực hiện từ máy tính thông qua việc ghi tín hiệu điều khiển (là phần trăm công suất) vào thanh ghi BUFF.data[0]

- Tín hiệu nhiệt độ được gửi lên PC thông qua thanh ghi BUFF.data[6]

- Ngoài ra, các thông số KP, TI, TD có thể được người dùng nhập vào trên giao diện máy tính

- Sử dụng công cụ Chart (hoặc ZedGraph) để vẽ đồ thị nhiệt độ theo thời gian

Lưu ý: sinh viên phải thực hiện scale tín hiệu điều khiển u(k) từ 0 đến 1 thành phần trăm

công suất từ 0 đến 100 phần trăm

Nội dung Báo cáo thí nghiệm:

- Trình bày giải thuật điều khiển ON/OFF được thực hiện ở thí nghiệm 2.1?

- Trình bày giải thuật điều khiển PID được thực hiện ở thí nghiệm 2.2?

- (Các) đoạn Chương trình liên quan đến thuật toán điều khiển ON/OFF?

- (Các) đoạn Chương trình liên quan đến thuật toán điều khiển PID?

- Nêu cách thiết lập PLC hoạt động phát xung PWM, chương trình PLC nhận lệnh và thực hiện điều khiển PWM?

- Trình bày các giải pháp khác có thực hiện cho 2 bài toán ở thí nghiệm 2.1 và 2.2

Trang 23

Bảng nhận xét, đánh giá của GV Thông tin Sinh viên:

Nhóm:

Họ và Tên SV:

MSSV:

Các Nhiệm vụ và nội dung thực hiện trong buổi thí nghiệm:

Đánh giá của GV:

STT Tiêu chí Mức 1 Mức 2 Mức 3 Mức 4 Mức 5

1 Chuẩn bị Bài TN

2 Mức đô hoàn thành BTN

3 Mức độ nắm bắt nội dung thí nghiệm

4 Mức độ giải quyết các bài toán trực tiếp của GVHD

5 Nội dung báo cáo thí nghiệm

6 Mức độ trả lời các câu hỏi trong BTN

7 Tính sáng tạo của giải thuật đề xuất

8 Liên kết giữa các thành viên trong nhóm

Các ý kiến khác:

Ngày đăng: 02/11/2022, 09:07

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w