bài tập lớn mô hình hóa hệ thống Đề số 8 :Cho hệ điều khiển tự động có sơ đồ cấu trúc như sau: U(t) y(t)Thông số : K1 = 50 ; K2 = 5 ; K3 = 0,5 ; T1 = 0,01 ; T2 = 0,1 ; T3 = 0,2Chọn chu kỳ trích mẫu T = 0,001 (s)
Trang 1LỜI MỞ ĐẦU
Mô hình hoá là một phương pháp nghiên cứu khoa học được ứng dụng rất rộng rãi: từ nghiên cứu, đến thiết kế chế tạo, vận hành Ngày nay nhờ sự trợ giúp của máy tính có tốc độ cao, bộ nhớ lớn mà phương pháp mô hình hoá được phát triển mạnh mẽ và đưa lại hiệu quả lớn.
Mô hình hoá và mô phỏng là một công cụ mạnh của cán bộ nghiên cứu, cán bộ
kỹ thuật để giải các bài toán kỹ sư, quy hoạch, tối ưu hóa v.v… Phương pháp mô hình hóa và mô phỏng được dùng phổ biến trong các trường đại học, các viện nghiên cứu cũng như các cơ sở sản xuất và đã đưa lại hiệu quả to lớn.
Ngày nay khó có thể tìm thấy lĩnh vực hoạt động nào của con người mà không sử dụng phương pháp mô hình hóa ở những mức độ khác nhau Với tầm quan trọng trên, môn mô hình hoá đã được đưa vào trong chương trình giảng dạy dành cho sinh viên Đại Học Hàng Hải Để có thể nắm bắt một cách có hiệu quả các kiến thức của môn học này, em đã được giao và tiến hành làm bài tập lớn Do đây là lần đầu tiên tiếp xúc với dạng bài tập này nên không thể tránh khỏi những sai sót nhất định,
em rất mong nhận được các ý kiến đóng góp của thầy, cô giáo.
Trang 2K
.
1 1
1
2
S T
K
) 1
3
S T
K
Đề số 8 :
Cho hệ điều khiển tự động có sơ đồ cấu trúc như sau:
U(t) y(t)
Thông số : K1 = 50 ; K2 = 5 ; K3 = 0,5 ; T1 = 0,01 ; T2 = 0,1 ; T3 = 0,2
Chọn chu kỳ trích mẫu T = 0,001 (s)
1.Viết phương trình sai phân của hệ thống
Hàm truyền của hệ thống:
2 1 3 3 2 2 1
3 3 2 1
2 1 3
2 1
3 2 1 3
2 1
3 2 1
3 2
1
3 2 1 3
2 1
2 1
2 1
3
3 2
2 1
1
2
2 1
1
1
.
.
.
.
.
) 1 ( 1 1
1
1 1 1
) 1 ( 1 1
1 1
.
1 1 1 1
1 1 )
(
)
(
)
(
K K K S
T T T S T T T T T T S T T T
K K S T K K
K K K S T S T S T
S T K
K
S T S T S T
K K K S T S T S T
S T S T
K K
S T
K S T
K S T K
S T
K S T K S
U
S
Y
S
G
Z
Z T
2 1
3 3 2 2 1
3 3
2
1
2 1 3
2 1
1 1
1 2 1
1 2
1
1 2
1
1 2
) (
) (
)
(
K K K Z
Z T T T T Z
Z T T T T T T T Z
Z T
T
T
T
K K Z
Z T T K K
Z
U
Z
Y
Z
W
Trang 3Biến đổi hàm truyền trên ta có:
H Z G Z F Z E
D Z C Z B Z A Z
U
Z
Y
Z
W
)
(
)
(
)
2 3
Trong đó:
3 2 1 2 1
3 2 1 2 1
3T K K K K T T
3 2 1 2 1
3T K K K K T T
3 2 1 2 1
3 2 1
2 3
2 3 1 2 1 3
2
8 T T T T T T T T T T T T T T T K K K
3 2 1
2 3
2 3 1 2 1 3
2
.
24 T T T T T T T T T T T T T T T K K K
3 2 1
2 3
2 3 1 2 1 3
2
.
24 T T T T T T T T T T T T T T T K K K
3 2 1
2 3
2 3 1 2 1 3
2
8 T T T T T T T T T T T T T T T K K K
Ta có hàm sai phân như sau :
Z F Z Y Z G Z Y Z H Y Z A Z U Z B Z U Z C Z U Z D U Z Y
Z
Dùng tính chất dịch 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 trên :
E.Y(k+3) + F.Y(k+2) + G.Y(k+1) + H.Y(k) = A.U(k+3) + B.U(k+2) + C.U(k+1) + D.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+3) = U(k+2) = U(k+1) = U(k) = 1
Vậy ta có :
E.Y(k+3) + F.Y(k+2) + G.Y(k+1) + H.Y(k) = A + B + C + D
>> Y(k+3) = (-F.Y(k+2) – G.Y(k+1) –H.Y(k) + A + B + C + D) / E
2 Viết phương trình mô phỏng bằng Visual Basic 6.0
Option Explicit
Dim A, B, C, D, E, F, G, H As Double
Dim t, T1, T2, T3, K1, K2, K3 As Double
Dim Y(10000) As Double
Trang 4Dim Xmax, Ymax, Hsox, Hsoy, Si, Ky As Double
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
Public 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)
K3 = Val(txtk3.Text)
T1 = Val(txtt1.Text)
T2 = Val(txtt2.Text)
Trang 5T3 = Val(txtt3.Text)
t = 0.001
If (K1 = 0) Or (K2 = 0) Or (K3 = 0) Or (T1 = 0) Or (T2 = 0) Or (T3 = 0) Then
MsgBox (" Chua nhap so lieu ")
Else
A = t ^ 3 * K1 * K2 + K1 * K2 * T3 * 2 * t ^ 2
B = 3 * t ^ 3 * K1 * K2 + 2 * t ^ 2 * K1 * K2 * T3
C = 3 * t ^ 3 * K1 * K2 - K1 * K2 * T3 * 2 * t ^ 2
D = t ^ 3 * K1 * K2 - K1 * K2 * T3 * 2 * t ^ 2
E = 8 * T1 * T2 * T3 + 4 * t * (T1 * T2 + T2 * T3 + T1 * T3) + 2 * t ^ 2 * (T1 + T2 + T3) + t ^ 3 * (1 + K1
* K2 * K3)
F = -24 * T1 * T2 * T3 - 4 * t * (T1 * T2 + T2 * T3 + T1 * T3) + 2 * t ^ 2 * (T1 + T2 + T3) + 3 * t ^ 3 * (1 + K1 * K2 * K3)
G = 24 * T1 * T2 * T3 - 4 * t * (T1 * T2 + T2 * T3 + T1 * T3) - 2 * t ^ 2 * (T1 + T2 + T3) + 3 * t ^ 3 * (1 + K1 * K2 * K3)
H = -8 * T1 * T2 * T3 + 4 * t * (T1 * T2 + T2 * T3 + T1 * T3) - 2 * t ^ 2 * (T1 + T2 + T3) + t ^ 3 * (1 + K1
* K2 * K3)
Y(3) = 0
Y(4) = 0
Ymax = 0
time = CStr(txtthoigian.Text) ' THoi gian khao sat (s)
For i = 2 To 998 * time Step 1
Y(i + 3) = (A + B + C + D - F * Y(i + 2) - G * Y(i + 1) - H * Y(i)) / E
If Y(i) > Ymax Then
Ymax = Y(i)
Tmax = i * t
End If
Next i
If Ymax <> 0 Then 'Tranh truong hop Ymax =0 thi bao loi
Hsoy = (Graph.Height - 1000) / (Ymax) ' ' Them 700 de khong vuot ra khoi graph
Else: Ymax = 0.001
End If
Hsox = 5.4 / time
'Tim yod gan nhat
Yod = 1
Trang 6'Tim do qua dieu chinh'
xichma = (Abs(Ymax - Yod) / Yod) * 100
'Tim Tod
Tod = 998 * time
Do While (Abs(Y(Tod) - Yod) / Yod < 0.05)
Tod = Tod - 1
Loop
'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.Height - 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
Trang 7Graph.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 + 900
Graph.CurrentY = Graph.Height - 800 - Round(Yod * Hsoy)
Graph.Print "Yôd = " + 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ôd = " + 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
Trang 8Graph.CurrentY = Graph.Height - 400 - Round(Hsoy * 0.95 * Yod) + 200
Graph.Print "5% Yôd"
' Hien thi cac gia tri thoi gian
txtymax.Text = Format(CStr(Ymax), "#0.00000")
txtyod.Text = Format(CStr(Yod), "#0.00000")
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 997 * time Step 1
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
For i = 1 To 991 Step 1
If i Mod 10 = 0 Then
txty.Text = txty.Text + "y[" + CStr(i) + "] = " + Format(CStr(Y(i)), "#0.00000") + vbNewLine
End If
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
Trang 9Private 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
If Val(txtthoigian.Text) <= 11 Then
lblymax.Caption = "Ymax :"
vedothi
Else
MsgBox (" Thoi gian khao sat phai be hon hoac bang 10(s) ") End If
End Sub
Private Sub exit1_Click(Index As Integer)
End
End Sub
Private Sub sodo1_Click(Index As Integer)
Graph1.Visible = True
End Sub
Private Sub Command1_Click(Index As Integer)
Graph1.Visible = False
vedothi
End Sub
Private Sub exit_Click(Index As Integer)
End
End Sub
Private Sub txtK1_KeyPress(KeyAscii As Integer)
Trang 10If 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 txtK3_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Graph1.Visible = False
vedothi
End If
End Sub
Private Sub txtnhom2_Change()
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
End If
End Sub
Trang 11Private Sub txtT3_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Graph1.Visible = False
vedothi
End If
End Sub
Private Sub txtthoigian_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Graph1.Visible = False
If Val(txtthoigian.Text) <= 10 Then
lblymax.Caption = "Ymax :"
vedothi
Else
MsgBox (" Thoi gian khao sat phai be hon hoac bang 10(s) ") End If
End If
End Sub
3 Chọn số bước tính đủ để hệ thống ổn định
chọn k = 1000
4 In kết quả In 100 giá trị của Y(k) cách 10 giá trị in 1 số y[0] = 0.0
y[10] = 0.05762
y[20] = 0.63931
y[30] = 1.91635
y[40] = 3.51482
y[50] = 4.74567
y[60] = 4.91463
y[70] = 3.67620
y[80] = 1.29396
y[90] = -1.33790
y[100] = -2.98009
y[110] = -2.57527
y[500] = -10.91373 y[510] = 279.76264 y[520] = 505.19599 y[530] = 537.75235 y[540] = 313.50134 y[550] = -120.37808 y[560] = -601.36686 y[570] = -903.34959 y[580] = -832.63270 y[590] = -331.74655 y[600] = 458.35744 y[610] = 1218.78296
Trang 12y[120] = 0.18410
y[130] = 4.51774
y[140] = 8.67353
y[150] = 10.55278
y[160] = 8.66178
y[170] = 3.00040
y[180] = -4.56747
y[190] = -10.77315
y[200] = -12.21072
y[210] = -6.98695
y[220] = 3.96761
y[230] = 16.65834
y[240] = 25.24158
y[250] = 24.45513
y[260] = 12.36406
y[270] = -7.85746
y[280] = -28.22840
y[290] = -38.71452
y[300] = -31.68001
y[310] = -6.25750
y[320] = 29.54457
y[330] = 60.60001
y[340] = 70.37794
y[350] = 48.76724
y[360] = -1.33241
y[370] = -62.21740
y[380] = -106.46127
y[390] = -108.06294
y[400] = -55.65503
y[410] = 38.24692
y[420] = 137.50895
y[620] = 1566.21841 y[630] = 1226.46912 y[640] = 197.07974 y[650] = -1184.05890 y[660] = -2321.35362 y[670] = -2592.05594 y[680] = -1647.41160 y[690] = 346.96454 y[700] = 2665.40119 y[710] = 4242.04201 y[720] = 4113.43258 y[730] = 1920.24446 y[740] = -1765.24743 y[750] = -5491.05180 y[760] = -7425.14444 y[770] = -6166.96274 y[780] = -1546.84304 y[790] = 4984.82794 y[800] = 10672.89594 y[810] = 12495.98548 y[820] = 8594.23070 y[830] = -523.15336 y[840] = -11642.07815 y[850] = -19761.78838 y[860] = -20124.11018 y[870] = -10626.03386 y[880] = 6482.07020 y[890] = 24629.36050 y[900] = 35101.61774 y[910] = 30817.94743 y[920] = 10236.61866
Trang 13y[430] = 194.38567
y[440] = 170.24564
y[450] = 56.93096
y[460] = -111.65193
y[470] = -265.86321
y[480] = -325.89723
y[490] = -238.71689
y[930] = -20508.96448 y[940] = -48739.11204 y[950] = -59873.11489 y[960] = -44166.42152 y[970] = -2727.69959 y[980] = 50337.62054 y[990] = 91677.73526
5 Vẽ đường cong quá trình quá độ
6 Tính và in ra các chỉ tiêu chất lượng của hệ điều khiển tự động
- Giá trị ổn định của tín hiệu ra: y(k)ôđ = 1.00000
- Độ quá điều chỉnh: σmax = 93575 %