Chương trình mô phỏng được viết trên ngôn ngữ Visual Basic, gồm có 4 form: Form Main: Giao diện chính của chương trình, đề bài và nhập dữ liệu. Form Dothi: Gồm một đối tượng PictureBox để vẽ đồ thị, mô tả quá trình quá trình quá độ của hệ thống Form Solieu: Gồm một đối tượng TextBox, chứa các giá trị biên độ ứng tương ứng với các giá trị thời gian, cũng là các điểm được thể hiện trên đồ thị Form Tacgia: Ghi tên, lớp của các sinh viên làm bài tập này. Module Variable: Khai báo các biến toàn cục
Trang 1u(t) y(t)
I Đề bài: Dùng máy tính để khảo sát quá trình quá độ của hệ
thống.
a) Sơ đồ nguyên lí:
b) Tham số của hệ thống:
+ U(t) = 1(t) + K 1 , K 2 – Tham số tự chọn.
+ T – Bước cắt mẫu tự chọn.
II Phương trình sai phân của hệ thống :
2 1 2
1 2
1
1 2
1
1
4
) 4 (
) 4 (
1
) 4 (
) (
K K s s
K K
K s
s
K s
s
K K
s s
K s
W
Thay
1
1
2
z
z T
2 1 2
1
1
1 2 4 1
1 2 ) (
K K z
z T z
z T
K z
W
2 1 2
2 2
1
) 1 ( )
1 )(
1 ( 8 ) 1 ( 4
) 1 (
z T K K z
z T z
z T K
C Bz Az
z z T K
2 2
1 ( 2 1 )
Trong đó:
8 2
4 8
2 2 1
2 2 1
T K K B
T T K K A
4 8
2
K K T T C
Suy ra: ( ) ( ) ( ) 2 2 ( ) 2 ( ) ( )
1
2y z B z y z c y z K T z u z z u z u z z
) 4 (
1
s s K
2
K
Trang 2Dù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:
( 2 ) 2 ( 1 ) ( )
)
( ) 1 ( ) 2 (
1T u k u k u k K
k y C k
y B k
y
Vì tín hiệu vào là tín hiệu nhảy cấp: u(t) 1 (t) nên ta có :
1 ) ( ) 1 ( ) 2 (k u k u k
u
Vậy ta có:
2 1
4 ) ( ) 1 ( ) 2 ( y k B y k Cy k K T
A T K k y C k
y B k
y( 2) ( 1 ) ( ) 4 1 2
III Chương trình mô phỏng bằng ngôn ngữ VB:
Chương trình mô phỏng được viết trên ngôn ngữ Visual Basic, gồm có 4 form:
- Form Main: Giao diện chính của chương trình, đề bài và nhập dữ liệu
- Form Dothi: Gồm một đối tượng PictureBox để vẽ đồ thị, mô tả quá trình quá trình quá độ của hệ thống
- Form Solieu: Gồm một đối tượng TextBox, chứa các giá trị biên độ ứng tương ứng với các giá trị thời gian, cũng là các điểm được thể hiện trên đồ thị
- Form Tacgia: Ghi tên, lớp của các sinh viên làm bài tập này
- Module Variable: Khai báo các biến toàn cục
Giao diện và mã lệnh của từng Form như sau:
Form Main:
Trang 3Các đối tượng chính và thuộc tính như sau:
Mã nguồn của Form main như sau:
Private Sub Tinhtoan()
Dim K1 As Double
Dim X As Integer
K1 = Val(K1txt)
K2 = Val(K2txt)
T = Val(Ttxt)
A = K1 * K2 * T * T + 8 * T + 4
B = 2 * T * T * K1 * K2 - 8
C = K1 * K2 * T * T - 8 * T + 4
y(0) = 0
y(1) = 0
For X = 0 To 998
y(X + 2) = (-B * y(X + 1) - C * y(X) + 4 * K1 * T * T) / A Next X
ymax = 0
ymin = 0
For X = 0 To 998
If y(X) > ymax Then
ymax = y(X)
xmax = X
End If
If y(X) < ymin Then
Trang 4ymin = y(X)
xmin = X
End If
Next X
For X = 0 To 1000
If y(1000 - X) > (1 / K2) * 105 / 100 Or y(1000 - X) < (1 / K2) * 95 / 100 Then Xod = 1000 - X
Exit For
End If
Next X
End Sub
Private Sub Command1_Click()
Call Tinhtoan
Unload Dothi
Dothi.Show
Call Dothi.Vedothi
End Sub
Private Sub Command2_Click()
Dim X As Integer
Dim V, U As String
Call Tinhtoan
solieu.Show
For X = 0 To 1000
If X Mod 10 = 0 Then
V = "y[" + Str(X) + "]=" + Str(Round(y(X), 4)) + Chr(9)
If X Mod 40 = 0 Then V = V + Chr(13) + Chr(10)
U = U + V
End If
Next X
U = U + Chr(13) + Chr(10) + Chr(13) + Chr(10) + Chr(13) + Chr(10)
U = U + "Gia tri cuc dai Ymax: " + Str(ymax) + Chr(13) + Chr(10)
U = U + "Gia tri cuc tieu Ymin: " + Str(ymin) + Chr(13) + Chr(10)
U = U + "Thoi gian de dat cuc dai Tmax: " + Str(xmax * T) + " s" + Chr(13) + Chr(10)
U = U + "Thoi gian de dat on dinh Tod: " + Str(Xod * T) + " s" + Chr(13) + Chr(10)
U = U + "Do qua on dinh: " + Str((ymax - 1 / K2) * K2 * 100) + Chr(13) + Chr(10) solieu.hien.Text = U
Trang 5End Sub
Private Sub Command3_Click()
End
End Sub
Private Sub Command4_Click()
tacgia.Show
End Sub
Private Sub Form_Unload(Cancel As Integer)
End
End Sub
Form Dothi:
Mã nguồn của Form Dothi như sau:
Trang 6Public Sub Vedothi()
Dim tamthoiX, tamthoiY As Double
Dim Vach As Double
nen.CurrentX = 0
nen.CurrentY = nen.Height - 100 ' Truc hoanh cach day 100
nen.DrawWidth = 2 'Dat do day net ve la 2 de ve truc toa do
nen.Line (30, 250)-(100, 100)
nen.Line (180, 250)-(100, 100)
nen.Line (100, 100)-(100, nen.Height - 100) ' ve truc tung tu tren xuong
tamthoiY = nen.CurrentY
tamthoiX = nen.Width - 100
nen.Line (nen.CurrentX, nen.CurrentY)-(nen.Width - 100, nen.CurrentY) ' Ve truc hoanh
nen.Line (tamthoiX, tamthoiY)-(tamthoiX - 150, tamthoiY - 80)
nen.Line (tamthoiX - 150, tamthoiY + 60)-(tamthoiX, tamthoiY)
dodaix = Round((nen.Width - 200) / 10) ' Do dai mot vach tren truc
dodaiy = Round((nen.Height - 200) / 11)
Dothi.CurrentY = nen.Height + nen.Top + 100
Dothi.CurrentX = nen.Width + nen.Left
Dothi.Print ("T")
For a1 = 1 To 9 ' Khac vach truc X
nen.Line (nen.CurrentX - dodaix, nen.Height - 150)-(nen.CurrentX - dodaix, nen.Height - 50)
Dothi.CurrentX = nen.Left + nen.CurrentX - 100
Dothi.CurrentY = nen.Height + nen.Top + 100
Dothi.Print ((10 - a1) * 100 * T)
Next a1
nen.CurrentY = nen.Height - 100
If ymax <= 0.05 Then Vach = 0.005
If ymax > 0.05 And ymax <= 0.5 Then Vach = 0.05
If ymax > 0.5 And ymax <= 1 Then Vach = 0.1
If ymax > 1 And ymax <= 2 Then Vach = 0.2
If ymax > 2 And ymax <= 3 Then Vach = 0.3
If ymax > 3 And ymax <= 4 Then Vach = 0.4
If ymax > 4 And ymax <= 5 Then Vach = 0.5
If ymax > 5 And ymax <= 6 Then Vach = 0.6
For a1 = 1 To 10 ' Vong lap khac vach truc Y
nen.Line (30, nen.CurrentY - dodaiy)-(130, nen.CurrentY - dodaiy)
Dothi.CurrentX = nen.Left - 500
Dothi.CurrentY = nen.CurrentY + nen.Top - 50
Trang 7Dothi.Print (Round(a1 * Vach, 2))
Next a1
Dothi.CurrentY = Dothi.CurrentY - 900
Dothi.Print ("Bien do")
nen.CurrentX = 100
nen.CurrentY = nen.Height - 100
hesox = 1000 / (nen.Width - 200)
hesoY = Vach * 10 / (nen.Height - 200 - dodaiy)
For X = 0 To 998 'Bat dau ve do thi
nen.Line (nen.CurrentX, nen.CurrentY)(Round(X / hesox) + 100, nen.Height
-100 - Round(y(X) / hesoY))
Next X
nen.ForeColor = &HFF0000
nen.DrawWidth = 1
nen.Line (100, nen.Height - 100 - (1 / Val(Main.K2txt)) / hesoY)-(nen.Width, nen.CurrentY)
nen.ForeColor = &H0
nen.DrawStyle = 2
nen.Line (100, nen.Height - 100 - (1 / K2) * 105 / 100 / hesoY)-(nen.Width, nen.Height - 100 - (1 / K2) * 105 / 100 / hesoY)
nen.Line (100, nen.Height - 100 - (1 / K2) * 95 / 100 / hesoY)-(nen.Width, nen.Height - 100 - (1 / K2) * 95 / 100 / hesoY)
nen.ForeColor = &HFFFFFF
nen.Line (xmax / hesox + 100, nen.Height - 100 - ymax / hesoY)-(xmax / hesox +
100, nen.Height - 100)
nen.Line (100, nen.Height 100 ymax / hesoY)(xmax / hesox + 100, nen.Height
-100 - ymax / hesoY)
nen.Line (Xod / hesox + 100, nen.Height - 100 - y(Xod) / hesoY)-(Xod / hesox +
100, nen.Height - 100)
nen.ForeColor = &H1000FF
nen.FillColor = &H1000FF
nen.FillStyle = 0
nen.Circle (xmax / hesox + 100, nen.Height - 100 - ymax / hesoY), 30
hic.Caption = "Tmax=" + Str(xmax * T) + " ,Ymax=" + Str(Round(ymax, 3))
'X = X / 0
End Sub
Trang 8Form Solieu:
Form Tacgia:
Trang 9Module Variable:
Global y(0 To 2000) As Double
Global A, B, C, T, T1, T2, K2, Xod, ymax, xmax, xmin, ymin As Double
IV Chọn bước tính đủ để hệ ổn định : Ở đây ta chọn bước tính K=1000
V In kết quả 100 giá trị (mỗi giá trị cách nhau 10 bước) :
Sau khi chạy chương trình mô phỏng ta được 100 giá trị :
Trang 10VI Vẽ đường cong quá độ :
Sau khi chạy chương trình với K1=100, K2=0.3, T=0.003 như các giá trị mặc định lúc khởi động chương trình, ta được kết quả như sau:
Trang 11Mô phỏng do MatLab vẽ:
Trang 12So sánh kết quả, ta thấy giống nhau Như vậy, thuật toán mô phỏng là đúng
VII Tính và in các chỉ tiêu chất lượng của hệ thống điều khiển tự động:
Kết quả tính được sau khi chạy mô phỏng:
Gia tri cuc dai Ymax: 4.30555236391241 Gia tri cuc tieu Ymin: 0
Thoi gian de dat cuc dai Tmax: 618 s Thoi gian de dat on dinh Tod: 1.428 s
Do qua on dinh: 29.1665709173723
Các phần còn lại như thiết kế giao diện, nhập thông số từ bàn phím, in và lấy kết quả dưới dạng số, dưới dạng đường cong của quá trình quá độ Vào và ra khỏi chương trình mô phỏng đã được trình bày chi tiết ở các phần trên
Tài liệu tham khảo:
- Giáo trình mô hình hoá hệ thống và mô phỏng - GS.TS Nguyễn Công Hiền
- Lí thuyết điều khiển tự động
- Tài liệu về ngôn ngữ lập trình VB