TRƯờNG ĐạI HọC BáCH KHOA Hà NộI. KHOA ĐIệN. Bộ môn Tự động hoá xí nghiệp công nghiệp.
BàI tập dàI mô hình hoá số 1. Dùng máy tính khảo sát quá trình quá độ Của hệ điều khiển tự động.
Chủ nhiệm bộ môn Thầy giáo hướng dẫn Sinhviên
Lớp Nhóm
: TS.Nguyễn Mạnh Tiến. : GS.TS.Nguyễn Công Hiền. Th.S.Nguyễn Danh Huy. : Võ Quang Hưng Nguyễn Hữu Đông Phạm Tuấn Diện Đinh Quang Tuận : TĐH3_K46 :2
Hà Nội………..9-2004.
1) Đề bài: Dùng máy tính khảo sát quá trình quá độ của hệ điều khiển tự động. a)Sơ đồ cấu trúc của hệ thống:
Bµi tËp m« h×nh ho¸ vµ m« pháng qu¸ tr×nh qu¸ ®é hÖ thèng ®iÒu khiÓn tù ®éng
u(t)
y(t)
K2
b)Tham số của hệ thống: + u(t) = 1(t), + Ki ,Ti -theo đề bài đã cho, + T- bước cắt mẫu,tự chọn. 2)Viết phương trình sai phân của hệ thống.
K1 (T1 s + 1)(T2 s + 1) W (s) = K 1 .K 2 1+ (T1 s + 1)(T2 s + 1)
W (s) =
K1 T1 .T2 .s + (T1 + T2 ).s + 1 + K 1 .K 2
2 Z −1 T Z +1
Thay s = .
⇒ W (Z ) =
2
Vào biểu thức trên ta có:
K1 2
2.( Z − 1) 2( Z − 1) T1 .T2 . + (T1 + T2 ) + 1 + K 1 .K 2 T ( Z + 1) T ( Z + 1)
2
Bµi tËp m« h×nh ho¸ vµ m« pháng qu¸ tr×nh qu¸ ®é hÖ thèng ®iÒu khiÓn tù ®éng =
Với
K 1 .T 2 .( Z 2 + 2.Z + 1) AZ 2 + BZ + C
A = 4.T1.T2 + 2.T.T1 + 2.T.T2 + K1.K2.T2 + 2.T2 B = -8.T1.T2 + 2.K1.K2.T2 + 2.T2 C = 4.T1.T2 - 2.T.T1 - 2.T.T2 + K1.K2*T*T + T*T
Ta có hàm sai phân như sau: Y ( Z ) K 1 .T 2 .( Z 2 + 2 Z + 1) = U (Z ) AZ 2 + BZ + C ⇒ A.Z2.Y(Z) + B.Z.Y(Z) + C.Y(Z) = K1.T2.(Z2.U(Z) + 2.Z.U(Z) + U(Z))
Dùng tính chất hàm gốc của biến đổi Z ta tìm được phương trình sai phân tương ứng với phương trình: A.Y [ K + 2] + B.Y [ K + 1] + C.Y [ K ] = K 1 .T 2 .(U [ K + 2] + 2.U [ K + 1] + U [ K ] )
Vì tín hiệu vào là tín hiệu nhảy cấp U(t) = 1(t) nên ta có: U [ K + 2] = U [ K + 1] = U [ K ] = 1
Vậy ta có:
A.Y [ K + 2] + B.Y [ K + 1] + C.Y [ K ] = 4.K 1 .T 2
Cuối cùng ta tìm được phương trình sai phân của hệ thống điều khiển tự động là: Y [ K + 2] = ( − B.Y [ K + 1] − C.Y [ K ] + 4.K 1 .T 2 ) / A
Từ phương trình sai phân của hệ thống điều khiển tự động ,ta viết phương trình máy tính để tìm đáp ứng ra của hệ y(t) khi tín hiệu vào là hàm nhảy cấp 1(t) 3. Chương trình Matlab >> K1 = 4; >> K2 = 1; >> T1 = 0.1; >> T2 = 0.1; >> num =[K1] >> den =[T1*T2,T1+T2,K1*K2 + 1]; 3
Bµi tËp m« h×nh ho¸ vµ m« pháng qu¸ tr×nh qu¸ ®é hÖ thèng ®iÒu khiÓn tù ®éng
>> step(num,den) >> Step(num,den);title('Dac tinh qua do cua he thong'); >> ylabel('y(t)');xlabel('t,sec');
Kêt luận : Theo phơưng trình đặc tính của hệ thống va tiêu chuẩn Routh-hơpit ta thay đẻ hệ thống ổn định thì (K1*K2 + 1)>0 do đó tuỳ tong thông số mà ta có đạc điểm khác nhau Vứi số liệu trên thì hệ thống ổn định 3) Viết phương trình mô phỏng bằng Visual Basic. Option Explicit Dim A, B, C As Double Dim t, T1, T2, K1, K2 As Double Dim Y(10000) As Double Dim Xmax, Ymax, Hsox, Hsoy, Si, Ky As Double 4
Bµi tËp m« h×nh ho¸ vµ m« pháng qu¸ tr×nh qu¸ ®é hÖ thèng ®iÒu khiÓn tù ®éng
Dim Xmin, Ymin As Integer Dim Xsum, Ysum As Integer Dim sumy As Integer Dim Xcurrent, Ycurrent As Long Dim Tmax, Yod As Double Dim time As Double Dim i As Integer Private Sub vedothi() Dim Dem As Integer Dim Tod As Double Dim xichma As Double Graph.Cls Xmin = 400 Ymin = 300 Xmax = Graph.Width - 200 ' Ve truc toa do ' Graph.Line (Xmin, (Graph.Height - 400))-(Xmax, Graph.Height - 400)) Graph.Line (Xmax - 100, (Graph.Height - 400) 50)-(Xmax, (Graph.Height – 400)) Graph.Line (Xmax - 100, (Graph.Height - 400) + 50)-(Xmax, (Graph.Height – 400)) Graph.Line (Xmin, Graph.Height - 400)-(Xmin, Ymin) Graph.Line (Xmin - 50, Ymin + 100)-(Xmin, Ymin) Graph.Line (Xmin + 50, Ymin + 100)-(Xmin, Ymin) Graph.CurrentX = Xmax - 400 Graph.CurrentY = (Graph.Height - 400) + 100 Graph.Print ("t(sec)") Graph.CurrentX = Xmin - 250 Graph.CurrentY = Ymin - 100 Graph.Print ("y(t)") Graph.CurrentX = Xmin - 200 Graph.CurrentY = (Graph.Height - 400) + 100 Graph.Print ("0") ' Tinh cac gia tri Y' K1 = Val(txtk1.Text) K2 = Val(txtk2.Text) T1 = Val(txtt1.Text) T2 = Val(txtt2.Text) t = 0.001 5
Bµi tËp m« h×nh ho¸ vµ m« pháng qu¸ tr×nh qu¸ ®é hÖ thèng ®iÒu khiÓn tù ®éng
If (K1 * K2 + 1) <= 0 Then MsgBox (" He thong khong on dinh ") Else MsgBox (" He thong on dinh ") End If If (K1 = 0) Or (K2 = 0) Or (T1 = 0) Or (T2 = 0) Then MsgBox (" Chua nhap so lieu ") Else A = 4 * T1 * T2 + 2 * T1 * t + 2 * t * T2 + K1 * K2 * t * t + t * t B = (-8) * T1 * T2 + 2 * K1 * K2 * t * t + 2 *t*t C = 4 * T1 * T2 - 2 * t * T1 - 2 * t * T2 + K1 * K2 * t * t + t * t Y(0) = 0 Y(1) = 0 Ymax = 0 time = CStr(txtthoigian.Text) 'Tgkhao sat (s) For i = 2 To 1000 * time Step 1 Y(i) = (4 * K1 * t * t - B * Y(i - 1) - C * Y(i - 2)) / A If Y(i) > Ymax Then Ymax = Y(i) Tmax = i * t End If Next i Ymax <> 0 Then 'Tranh truong hop Ymax =0 thi bao loi Hsoy = (Graph.Height - 1000) / (Ymax) Else: Ymax = 0.001 End If Hsox = 5.4 / time 'Tim xicma xichma = Abs(Ymax - Y(1000 * time)) / Ymax*100 'Tim Tod Yod =K1/(1+K1*K2) tod = 1000*time While (Abs(y(tod) - Yod) / Yod < 0.05) tod = tod - 1 6
Bµi tËp m« h×nh ho¸ vµ m« pháng qu¸ tr×nh qu¸ ®é hÖ thèng ®iÒu khiÓn tù ®éng
Wend 'Khac do truc hoanh Si = time / (t * 5) For i = 1 To 5 Graph.Line (i * Si * Hsox + 300, Graph.Height - 350)-(i * Si * Hsox + 300, Graph.Height - 450) Graph.CurrentX = i * Si * Hsox + 200 Graph.CurrentY = Graph.Height - 300 Graph.Print CStr(i * Si * t) Next 'Khac do truc tung Ky = Ymax * Hsoy / 5 'sumy = Round(5 + (Graph.Height - 500 – Round(Ymax * Hsoy)' For i = 1 To 5 Graph.Line (350, Graph.Height - 400 – Round(Ky * i))-(450, Graph.Heig- 400 - Round(Ky * i)) Graph.CurrentX = 0 Graph.CurrentY = Graph.Height - 400 Round(Ky * i) – 100 Graph.Print Format(CStr(Ky * i / Hsoy), "#0.00") Next 'Ve duong ymax Graph.DrawStyle = 2 Graph.Line ((Tmax / t - 2) * Hsox + 400, Graph.Height - 400)-((Tmax / t - 2) * Hsox + 400, Graph.Height - 400 - Round(Hsoy * Ymax)) Graph.Line ((Tmax / t - 2) * Hsox + 400, Graph.Height - 400 - Round(Hsoy * Ymax))-(400, Graph.Height - 400 - Round(Hsoy * Ymax)) Graph.CurrentX = (Tmax / t - 2) * Hsox + 400 Graph.CurrentY = Graph.Height - 600 - Round(Hsoy * Ymax) Graph.Print "Ymax = " + Format(CStr(Ymax), "####0.0000") Graph.CurrentX = (Tmax / t - 2) * Hsox + 450 Graph.CurrentY = Graph.Height - 700 Graph.Print "Tmax = " + CStr(Tmax) Ve duong on dinh Graph.Line (400, Graph.Height - 400 - Round(Hsoy * Yod))-(Graph.Width 400, Graph.Height - 400 - Round(Hsoy * Yod)) Graph.CurrentX = Tod * Hsox + 450 7
Bµi tËp m« h×nh ho¸ vµ m« pháng qu¸ tr×nh qu¸ ®é hÖ thèng ®iÒu khiÓn tù ®éng
Graph.CurrentY = Graph.Height - 800 - Round(Yod * Hsoy) Graph.Print "Yôđ = " + Format(CStr(Yod), "####0.0000") 'Ve duong sai so Graph.Line (400, Graph.Height - 400 - Round(Hsoy * 0.95 * Yod))(Graph.Width - 400, Graph.Height - 400 - Round(Hsoy * 0.95 * Yod)) Graph.Line (400, Graph.Height - 400 - Round(Hsoy * 1.05 * Yod))(Graph.Width - 400, Graph.Height - 400 - Round(Hsoy * 1.05 * Yod)) 'Ve duong Tod Graph.Line ((Tod - 2) * Hsox + 400, Graph.Height - 400)-((Tod - 2) * Hsox + 400, Graph.Height - 400 - Hsoy * Yod) Graph.CurrentX = (Tod - 2) * Hsox + 400 Graph.CurrentY = Graph.Height - 900 Graph.Print "Tôđ = " + CStr(Tod * t) + " " Graph.DrawStyle = 0 'Ve mui ten 5% Graph.Line ((Tod - 2) * Hsox + 410, Graph.Height - 400 - Round(Hsoy * 1.05 * Yod))-((Tod - 2) * Hsox + 410, Graph.Height - 400 - Round(Hsoy * 1.05 * Yod) - 300) Graph.Line ((Tod - 2) * Hsox + 410, Graph.Height - 400 - Round(Hsoy * 1.05 * Yod))-((Tod - 2) * Hsox + 410 - 100, Graph.Height - 400 - Round(Hsoy * 1.05 * Yod) - 100) Graph.Line ((Tod - 2) * Hsox + 410, Graph.Height - 400 - Round(Hsoy * 1.05 * Yod))-((Tod - 2) * Hsox + 410 + 100, Graph.Height - 400 - Round(Hsoy * 1.05 * Yod) - 100) Graph.Line ((Tod - 2) * Hsox + 410, Graph.Height - 400 - Round(Hsoy * 0.95 * Yod))-((Tod - 2) * Hsox + 410, Graph.Height - 400 - Round(Hsoy * 0.95 * Yod) + 300) Graph.Line ((Tod - 2) * Hsox + 410, Graph.Height - 400 - Round(Hsoy * 0.95 * Yod))-((Tod - 2) * Hsox + 410 - 100, Graph.Height - 400 - Round(Hsoy * 0.95 * Yod) + 100) Graph.Line ((Tod - 2) * Hsox + 410, Graph.Height - 400 - Round(Hsoy * 0.95 * Yod))-((Tod - 2) * Hsox + 410 + 100, Graph.Height - 400 - Round(Hsoy * 0.95 * Yod) + 100) Graph.CurrentX = (Tod - 2) * Hsox + 450 Graph.CurrentY = Graph.Height - 400 - Round(Hsoy * 0.95 * Yod) + 200 Graph.Print "5% Yôđ"' Hien thi cac gia tri thoi gian txtymax.Text = Format(CStr(Ymax), "#0.00000") txtyod.Text = Format(CStr(Yod), "#0.00000") 8
Bµi tËp m« h×nh ho¸ vµ m« pháng qu¸ tr×nh qu¸ ®é hÖ thèng ®iÒu khiÓn tù ®éng
txtxichma.Text = Format(CStr(xichma), "#0.00000") txttod.Text = Format(CStr(Tod * t), "#0.00000") txttymax.Text = Format(CStr(Tmax), "#0.00000") ' ve do thi ' Xcurrent = Xmin Ycurrent = (Graph.Height - 400) txty = "" For i = 0 To 999 * time Step 1 If i Mod 10 = 0 Then txty.Text = txty.Text + "y[" + CStr(i) + "] = " + Format(CStr(Y(i)), "#0.00000") + vbNewLine End If Graph.Line (Xcurrent, Ycurrent)-(Xmin + (i + 1) * Hsox, Round((Graph.Height - 400) - Y(i + 1) * Hsoy)) Xcurrent = Xmin + i * Hsox Ycurrent = Round((Graph.Height - 400) - Y(i) * Hsoy) Next i End If End Sub Private Sub cmddothi_Click() Graph1.Visible = False If Val(txtthoigian.Text) < 10 Then vedothi Else MsgBox (" Thoi gian khao sat phai be hon 10(s) End If End Sub
")
Private Sub cmdsodo_Click() Graph1.Visible = True End Sub Private Sub Command5_Click() End End Sub Private Sub dothi1_Click(Index As Integer) Graph1.Visible = False vedothi End Sub 9
Bµi tËp m« h×nh ho¸ vµ m« pháng qu¸ tr×nh qu¸ ®é hÖ thèng ®iÒu khiÓn tù ®éng
Private Sub exit1_Click() End End Sub Private Sub sodo1_Click() Graph1.Visible = True End Sub Private Sub txtK1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Graph1.Visible = False vedothi End If End Sub Private Sub txtK2_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Graph1.Visible = False vedothi End If End Sub Private Sub txtT1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Graph1.Visible = False vedothi End If End Sub Private Sub txtT2_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Graph1.Visible = False vedothi If (K1 * K2 + 1) <= 0 Then MsgBox (" He thong khong on dinh ") Else MsgBox (" He thong on dinh ") End If End If End Sub Private Sub txtthoigian_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Graph1.Visible = False
10
Bµi tËp m« h×nh ho¸ vµ m« pháng qu¸ tr×nh qu¸ ®é hÖ thèng ®iÒu khiÓn tù ®éng
If Val(txtthoigian.Text) < 10 Then lblymax.Caption = "Ymax :" vedothi Else MsgBox (" Thoi gian khao sat phai be hon 10(s) End If End If End Sub
")
Đặc tính quá độ hệ thống điều khiển chạy bằng Visual Basic
11
Bµi tËp m« h×nh ho¸ vµ m« pháng qu¸ tr×nh qu¸ ®é hÖ thèng ®iÒu khiÓn tù ®éng
12