Xây dựng mô hình toán học cho đối tượng điều khiển 4
Cơ sở lý thuyết 4
Một hệ thống kỹ thuật cần xây dựng xem như một khối kín với các tín hiệu vào là x1(t), x2(t), x3(t),…xr(t) và ra là y1(t), y2(t), y3(t),… ys(t) tức là hệ thống có r tín hiệu đầu vào và s tín hiệu đầu ra Mô hình mô tả hệ thống mà ta quan tâm là mô hình toán học biểu diễn sự phụ thuộc của s tín hiệu ra y1(t), y2(t), y3(t),… ys(t) theo r tín hiệu vào x1(t), x2(t), x3(t),…xr(t) sao cho nếu biết trước các tín hiệu vào x1(t), x2(t), x3(t),…xr(t) cũng như những sự kiện ban đầu của hệ thống u1(t), u2(t), u3(t),….un(t) thì với mô hình đó ta có thể tìm ra được các tín hiệu đầu ra y1(t), y2(t), y3(t),…ys(t)
Mô tả đối tượng điều khiển trong miền thời gian gồm hai phương pháp :
- Phương pháp mô tả bằng phương trình vi phân
- Phương pháp mô tả bằng không gian trạng thái a Phương pháp mô tả bằng phương trình vi phân
Phương trình vi phân mô tả quá trình động học của hệ thống biểu diễn như sau : a 0 d n y dt n + a 1 d n−1 y dt n−1 +…+ a n−1 dydt + a 0 y d m x dt m + b 1 d m−1 x dt m−1 +…+ b m−1 dx dt b m x trong đó :
Các hệ số ai cũng như bi được xác định từ các phần tử cấu thành trong hệ thống Chúng có thể là hằng số , song cũng có thể là những tham số phụ thuộc vào thời gian t hoặc những đối số khác.
Ta giải phương trình này để tìm y(t) khi có tín hiệu vào xác định sẽ biết được quá trình động học xảy ra trong hệ thống. b Phương pháp không gian trạng thái
Việc mô tả đối tượng bằng phương trình vi phân phức tạp ở vấn đề giải phương trình này , để đơn giản thay vì mô tả phương trình động học bằng phương trình vi phân bậc n thành một hệ n phương trình vi phân bậc nhất.
{ y=Cx+ x ˙ =Ax+Bu Du trong đó :x=(x1, x2, ,xn) T là véc tơ trạng thái y=(y1, y2, ,yn) T là véc tơ tín hiệu ra
A,B,C,D là các ma trận hệ số:
[ c c 21 11 c c 12 22 c c 1n 2n c n1 c n2 c nn ]; D=[ d d 11 21 d d 12 22 d d 1n 2n d n1 d n2 d nn ] Ưu điểm của phương pháp này :
- Có thể kiểm tra được tính điều khiển được và quan sát được của hệ thống
Mô tả hệ ở miền tần số :
- Mô tả hệ bằng hàm truyền đạt
Các tín hiệu x(t),y(t) là tín hiệu theo thời gian từ miền thời gian ta dùng một biến số s thay cho nó x(t) X(s) =∫ −∞ +∞ x( t )e −st dt dx dt SX(s) d n x dt n S n X(s)
Từ phương trình vi phân (*) ta chuyển sang Laplace có : a0s n Y(s) + a1s n-1 Y(s) + … + an-1sY(s) + anY(s) b0s m X(s) + b1s m-1 X(s) +…+ bm-1sX(s) + bmX(s)
X ( s ) = b 0 s m +b 1 s m−1 + + b m−1 s +b m a 0 s n +a 1 s n−1 + + a n−1 s+a n =W ( s ) là mô hình toán học hàm truyền theo tần số
Vậy hàm truyền đạt là gì ? hàm truyền của hệ thống là tỷ số của tín hiệu ra với tín hiệu vào của hệ thống đó biểu diễn theo biến đổi Laplace với điều kiện đầu triệt tiêu
Mô tả hệ thống đặc tính tần số :
Có một hệ thống chưa biết mô hình toán học chỉ biết đầu vào đầu ra ,dùng phép biến đổi Furier :s=a+jw x(t) F X(jw) =∫ −∞
X ( jw ) = b 0 ( jw ) m +b 1 ( jw ) m−1 + + b m−1 ( jw )+ b m a 0 ( jw ) n + a 1 ( jw ) n−1 + + a n−1 ( jw )+ a n ý nghĩa của đặc tính tần số của phép biến đổi Furier là ảnh của tín hiệu đầu ra của phép biến đổi Furier chia cho ảnh của tín hiệu đầu vào của phép biến đổi Furier.
Nhận xét : phương pháp này không có trong thực tế vì tín hiệu đầu ra chỉ đo tín hiệu bậc thang đơn vị được phải dùng phương pháp thực nghiệm
Việc mô tả toán học đối tượng điều khiển trên cơ sở các phương trình vật lý, rất khó thực hiện đối với các đối tượng thực tế vì các hiện tượng xẩy ra trong đối tượng rất phức tạp và chịu nhiều yếu tố tương tác khác nhau Trong kỹ thuật, người ta thường dùng các phương pháp thực nghiệm để mô tả đối tượng, nghĩa là xác định các đặc tính tĩnh và động của chúng a Xác định đặc tính tĩnh : Ðặc tính tĩnh biểu thị quan hệ giữa lượng ra với lượng vào của đối tượng Khi xây dựng hệ thống điều khiển tự động, đặc tính tĩnh cho ta biết đối tượng là tuyến tính hay không tuyến tính.Trong phạm vi tuyến tính, đối tượng sẽ có một hàm truyền duy nhất (không đổi về dạng hàm cũng như các thông số).
Thông thường việc xác định đặc tính tĩnh của đối tượng được tiến hành như sau:
Chọn một số giá trị của lượng vào đối tượng trong khoảng ta cần xác định đặc tính tĩnh Lượng vào này có thể là một đại lượng vật lý cụ thể (lưu lượng, công suất điện v.v) hoặc độ mở của cơ quan điều chỉnh (tính bằng % chu trình hoặc bằng điện áp điều khiển). Ðặt một lượng vào đối tượng có giá trị thấp nhất xv1 Theo dõi lượng ra cho đến khi đặt trạng thái xác lập xr1 (ổn định, không thay đổi nữa), ghi lại giá trị này Ðặt tiếp một lượng vào có giá trị cao hơn xv2 và ghi lại được lượng ra xác lập xr2 Tiến hành tiếp tục với các đại lượng vào từ thấp đến cao ta được các cặp xvi và xri tương ứng Lập đồ thị quan hệ xr xv ta được đường biểu diễn đặc tính tĩnh b Xác định đặc tính động
Có nhiều phương pháp thực nghiệm xác định đặc tính động của đối tượng Tuy nhiên, về tổng quát có thể chia thành hai phương pháp thông dụng :
- Xác định đặc tính động khi đối tượng có thể cho đáp ứng tự do nghĩa là không có sự tham gia của bộ điều chỉnh.
- Xác định đặc tính động của đối tượng khi có sự tham gia của bộ điều chỉnh.
Ðặt nhiễu chủ động bặc thang 1(t) hoặc dạng xung d(t)
- Phương pháp tiến hành thực nghiệm
Nhiễu ở đây được hiểu là tác động từ bên ngoài vào đối tượng hoặc hệ thống có ảnh hưởng đến các thông số trạng thái của đối tượng nhiễu Thông thường khi khảo sát đặc tính động của một đối tượng công nghệ, người ta dùng nhiễu dạng bậc thang 1(t) Ðáp ứng đầu ra
8 của đối tượng, như lý thuyết điều khiển đó là đường biểu diễn hàm h(t)
Khi dùng tác động đầu vào dạng xung d(t) , ta được đường quá độ xung Từ đường này ta có thể tính toán trực tiếp gần đúng để có được hàm truyền đối tượng Nhưng thông thường có thể dùng phương pháp xây dựng tiếp để có được đường quá độ thời gian như khi ta đặt tác động đầu vào 1(t) Muốn vậy ta chia thời gian quá độ xung thành một số khoảng bằng nhau và bằng thời gian phát xung
- Xác định hàm truyền của đối tượng
Vì là phương pháp thực nghiệm nên việc xác định hàm truyền của đối tượng cũng chỉ là gần đúng Nhiễu tác giả đã đưa ra những phương pháp khác nhau Ở đây, dẫn ra một vài phương pháp thông dụng Trong trường hợp này không thể kể đến vận chuyển, ta có thể viết hàm truyền theo:
Việc xác định các thông số của các khâu có thể thực hiện sơ bộ như sau:
K=DXv/DXr , [đơn vị đo lường vào]/[đơn vị đo lường ra]
T- đo và tính trực tiếp trên đường thực nghiệm nhận được,[s] t-đo và tính trực tiếp trên đường thực nghiệm nhận được ,[s]
Sau khi xác định các thông số của hàm truyền , cần dùng các chương trình mô phỏng theo ngôn ngữ MATLAB để có được đường biểu diễn của các hàm (sơ bộ ) này.
Tìm hiểu về Matlab 9
Giới thiệu chung về Matlab 9
Matlab (Maxtrix Laboratory) là một công cụ phần mềm của MathWork với giao diện cực mạnh cùng những lợi thế trong kĩ thuật lập trình đáp ứng được những vấn đề hết sức đa dạng : từ các lĩnh vực kỹ thuật chuyên ngành như điện, điện tử, điều khiển tự động, robot công nghiệp…cho đến các ngành xử lý toán chuyên dụng đã giải quyết được những vấn đề nói trên một cách đơn giản, trực quan.
Matlab cùng bộ lệnh rất mạnh của nó cho phép giải quyết các loại bài toán khác nhau, đặc biệt là các hệ phương trình tuyến tính, phi tuyến hay các bài toán ma trận với kết quả nhanh chóng và chính xác Bộ lệnh này ngày càng được mở rộng thông qua các hàm ứng dụng được tạo lập bởi người sử dụng hay thông qua thư viện trợ giúp Bên cạnh đó Matlab cho phép xử lý dữ liệu, biểu diễn đồ họa một cách mềm dẻo, đơn giản và chính xác trong không gian hai chiều cũng như ba chiều giúp người sử dụng có thể quan sát kết quả một cách trực quan và đưa ra giải pháp tót nhất Được tích hợp một số ngôn ngữ lập trình thông dụng khác như
C, C++, Fortran, Java….Do đó những ứng dụng của Matlab có thể chuyển đổi một cách dễ dàng, mềm dẻo sang những ngôn ngữ đó
Trong thực tế Matlab còn được ứng dụng rất rộng rãi trong nhiều lĩnh vực và nó cũng được sử dụng rất nhiều để giải các phép tính số học, ngoài ra no còn có khả năng thân thiện với người sử dụng nên no dễ dàng sử dụng hơn một số ngôn ngữ khác
Matlab cung cấp một môi trường phong phú cho biểu diễn dữ liệu, và có khả năng mạnh mẽ về đồ họa, người dùng có thể tạo các giao diện riêng cho người sử dụng (GUIs) để giải quyết những vấn đề riêng cho mình Thêm vào đó Matlab đưa ra những công cụ để giải quyết những vấn đề đặc biệt, gọi là Toolbox (hộp công cụ ) Ngoài ra ta có thể tạo Toolbox cho riêng mình.
Các phần tử cơ bản của lập trình Matlab 9
1 Giới hạn của các giá trị tính toán trong Matlab Đối với phần lớn máy tính, khoảng giá trị cho phép từ 10 −308 đến
10 308 Khi giá trị tính toán vượt quá thì Matlab biểu diễn kết quả là ∞ a Các ký tự đặc biệt :
[ ] : Dạng ma trận, dùng để quy ước cho việc biểu diễn hay vào số liệu cho các biến vector hay ma trận Các phần tử trong biến đó cách nhau bởi dấu “ space” hay
10 dấu “ ,” nếu cùng hàng hoặc cột Các cột cách nhau bởi dấu “ ;”.
( ) : Dạng chỉ số, dành cho các biến của hàm hay các chỉ số các phần tử trong ma trận khi cần được nhập hay biểu diễn.
>> : Dấu nhắc cho lệnh sau
… : Thể hiện sự tiếp tục ở dòng sau
% : Phần chú giải dòng lệnh được ghi sau dấu này không tham gia vào chương trình.
: Cách ghi tổng quát ma trận
\n : Dấu hiệu tạo dòng mới b Các giá trị đặc biệt :
pi : Giá trị của π tự động đưa vào biến này ( 3.14156…)
i, j : Các biến này có giá trị ảo √ −1
Inf : Biến này đại diện cho giá trị ∞ , thể hiện kết quả khi chia cho 0
NaN : Giá trị vô định, biểu thức không xác định : 0 chia
0clock : Hàm cho biết giá trị của thời gian hiện tại
date : Hàm cho biết giá trị hiện tại của ngày được cho bơi xâu ký tự
eps : Hàm xác định độ chính xác của số thực trong quá trình tính toán
ans : Biến này được dùng để chứa giá trị tính toán của biểu thức nhưng không ghi vào tên biến
Biến string được sử dụng như biến số thông thường khác Biến được nhập, thao tác, và lưu trữ trong các vector với mỗi phần tử của vector là một ký tự Các ký tự được lưu trữ trong vector dưới dạng mã ASCII của chính nó, tuy nhiên khi hiển thị trên màn hình thì sẽ là dòng ký tự Matlab cho phép thao tác trên các ký tự và ngoài ra còn cung cấp một số lệnh với biến string.
Các hàm toán học trong Matlab 10
Matlab sử dụng các hàm toán học để tính toán Các hàm này đúng đối với các tham số là các đại lượng vô hướng và cả ma trận Nếu hàm được dùng đối với các tham số là ma trận thì hàm sẽ cho kết quả là một ma trận có cùng kích thước và mỗi phần tử của ma trận này có giá trị tương ứng với các phần tử của ma trận đã cho.
Tham biến và tham trị của hàm được đặt trong dấu “ ( )” đi cùng với tên hàm Hàm có thể không có hoặc có nhiều tham số phụ thuộc và định nghĩa của nó Nếu hàm có nhiều tham số thì giá trị của các tham số sẽ được truyền theo đúng thứ tự của nó Một số hàm đòi hỏi truyền tham số theo những đơng vị quy định.
Một hàm có thể là tham số của một hàm khác Tên của hàm viết bằng chữ thường trừ khi sử dụng lệnh “ case off “.
1 Hàm toán học cơ bản :
abs(x) : Hàm tính giá trị tuyệt đối của x
sqrt(x) : Hàm tính căn bậc hai của x
round(x) : Làm tròn x về số nguyên gần nhất
sign(x) : Hàm cho giá trị -1 nếu x < 0
rem(x,y) : Hàm trả lại số dư của phép chia x cho y
exp(x) : Hàm tính giá trị của e x
log(x) : Hàm tính giá trị ln(x)
log10(x) : Hàm tính giá trị log 10 (x)
2 Hàm lượng giác cơ bản :
asin(x): Tính arcsin của x khi x nằm trong khoảng [-1,1]
acos(x):Tính arccos của x khi x nằm trong khoảng [-1,1]
atan(x) : Tính arctang của x trong khoảng - π /2 đến π /2
atan2(x,y): Tính arctang của y/x trong khoảng - π đến π
3 Các biểu thức quan hệ và logic :
Các phép toán quan hệ :
Toán tử logic : and; or; not
Các hàm quan hệ và logic :
- any(x ): cho giá trị là 1 nếu một phần tử của x khác
0, ngược ngược lại cho giá trị 0
- all(x): Hàm cho giá trị 1 nếu tất cả các phần tử của ma trận x khác 0
- find(x) : Hàm trả lại vector chứa chỉ số các phần tử khác 0 của x
- exits(‘A’) : Hàm trả lại giá trị 1 nếu A là biến, là 2 nếu A hoặc A.m là file, là 0 nếu A không tồn tại trong vùng làm việc
- isnan(x) : giá trị trả về là ma trận ones nếu các phần tử của ma trận x là NaN, ngược lại trả về ma trận zeros
- finite(x) : Giá trị trả về là ma trận ones nếu các phần tử của ma trận x là giá trị hữu hạn, trả về ma trận zeros khi chúng là vô hạn hoặc NaN
- isempty(x) : Giá trị trả về 1 nếu ma trận x là rỗng, và 0 nếu ngược lại
- isstr(x) : Giá trị trả về là 1 nếu x là xâu, 0 nếu ngược
- strcmp(y1, y2): So sánh hai xâu Giá trị 1 nếu hailại xâu giống hệt nhau, còn 0 nếu ngược lại
4 Cấu trúc lệnh điều kiện :
Cú pháp : if nhóm lệnh; end
Cú pháp : if nhóm lệnh A; else nhóm lệnh B; end
Cú pháp : if nhóm lệnh A; elseif nhóm lệnh B; elseif nhóm lệnh C; end
Câu điều kiện và break :
Cú pháp : if , break, end
Từ khóa break với câu lệnh if cho phép ra khỏi vòng lặp nếu biểu thức logic trong điều kiện là đúng, ngược lại sẽ thực hiện nhóm lệnh tiếp theo trong vòng lặp đó
Dùng để thực hiện 1 công việc cần lặp đi lặp lại theo một quy luật, với số bước lặp xác định trước
Cú pháp : for chỉ số = khởi đầu : bước nhảy : đích đến nhóm lệnh ; end
Cú pháp : while < biểu thức> nhóm lệnh A; end Nếu biểu thức đúng thì thực hiện nhóm lệnh A Khi thực hiện xong thì lại kiểm tra điều kiện Nếu điều kiện vẫn còn đúng thì nhóm lệnh A lại được thực hiện Khi điều kiện sai thì vòng lặp kết thúc Và một điều cần để ý là: nếu biểu thức luôn đúng, vòng lặp sẽ bị quẩn.
Trong vòng lặp “ for” hay “ while”, khi gọi “ continue” ngay lập tức chu trình tính chuyển sang bước lặp ( iteration step) kế tiếp, mọi lệnh chưa thực hiện của vòng lặp (thuộc về bước lặp hiện tại ) sẽ bị bỏ qua.
Lệnh “ break” còn mạnh hơn Ngừng vòng lặp đang tính Lệnh này còn có tác dụng cả trong các cấu trúc rẽ nhánh dùng “ if”, “ switch” Nếu “ break” được dùng trong
“scrip file” hay “ function” thì khi ấy sẽ bị ngừng ngay tại vị trí break
IV Một số nhóm lệnh lập trình trong Matlab :
Công dụng : Chuyển đổi chuỗi ký tự thành biểu thức.
Cú pháp : kq = eval(string)
Giải thích: kq: biến chứa kết quả.
Nếu string là các ký số thì chuyển thành những con số.
Nếu string là câu lệnh thì chuyển thành các lệnh thi hành được.
Công dụng : Tạo thêm hàm mới.
Giải thích: s: tên biến chứa giá trị trả về sau khi thi hành hàm. n: tên của hàm.
Công dụng: Dùng để nhập vào 1 giá trị.
Cú pháp: tên biến = input (promt)
14 tên biến = input (promt, s) Giải thích: tên biến, là nơi lưu giá trị ngập vào. promt: chuỗi ký tự muốn nhập vào. s: cho biết giá trị nhập vào là nhiều ký tự.
Ví dụ : x = input(nhập giá trị của biến x: ) nhập giá trị của biến x: 5 x = 5
Công dụng: Dừng chương trình theo ý muốn.
Cú pháp: pause on pause off pause (n) Giải thích: pause on: dừng chương trình, và chờ nhấn 1 phím bất kỳ (trừ các phím điều khiển) chương trình thực hiện tiếp. pause off: tắt chức năng pause. pause (n): dừng chương trình tại n giây.
V Tập lệnh thao tác trên ma trận và vector
1 Cộng, trừ, nhân, chia từng phần tử của ma trận với hằng số
Ma trận kết quả = ma trận [+] [-] [*] [/] hằng số.
Công dụng: Dùng để tính định thức của ma trận.
Tính định thức của ma trận a a 1 4
Công dụng: Tạo ma trận mới và xử lý đường chéo theo quy ước.
Cú pháp: v = diag(x) v = diag(x,k) Giải thích: x: là vector có n phần tử. v: là ma trận được tạo ra từ x theo quy tắc: số hàng bằng số cột và các phần tử của x nằm trên đường chéo của v. k: tham số định dạng cho v, số hàng và cột của v = n+abs(k). Nếu k = 0 đường chéo của v chính là các phần tử của x Nếu k > 0 các phần tử của x nằm phía trên đường chéo v Nếu k < 0 các phần tử của x nằm phía dưới đường chéo v
Công dụng: Tạo ma trận đơn vị.
Cú pháp: y = eye(n) y = eye(n,m) Giải thích: n: tạo ma trận có n hàng, n cột. m, n: tạo ma trận có m hàng, n cột
Công dụng: Chuyển các phần tử của các ma trận theo thứ tự cột ngược lại.
Cú pháp: b = fliplr(a) Giải thích: b: tên ma trận được chuyển đổi. a: tên ma trận cần chuyển đổi
Công dụng: Chuyển các phần tử của ma trận theo thứ tự hàng ngược lại.
Cú pháp: b = flipud(a) Giải thích: b: tên ma trận được chuyển đổi. a: tên ma trận cần chuyển đổi.
Công dụng: Tìm ma trận nghịch đảo.
Ma trận nghịch đảo = inv (ma trận)
Công dụng: Dùng để tạo 1 ma trận gồm có n hàng và m cột.
Giải thích: a11, a12, a1m là các giá trị tại hàng 1 cột 1 đến các giá trị tại hàng 1 cột m, có n dấu (;) là có n hàng
Công dụng: Lệnh này dùng để tạo 1 vector đơn gồm có n phần tử.
Tên vector = [pt1 pt2 pt3 … ptn]
Giải thích: pt1 pt2 … ptn : là các số thực.
Tên vector = gtđ:csc:gtkt Giải thích: gtđ: là giá trị bắt đầu của vector. csc: cấp số cộng. gtkt: giá trị kết thúc
Công dụng: Tạo vector có giá trị ngẫu nhiên giới hạn trong khoảng định trước.
Cú pháp: y = linspace(x1, x2) y = linspace(x1, x2, n) Giải thích: y: tên của vector. x1, x2: giới hạn giá trị lớn nhất và nhỏ nhất của vector y. n: số phần tử của vector y
Nếu không có giá trị n thì mặc định n = 100
Công dụng: Ma trận chuyển vị = ma trận đang có.
Cú pháp: (Ma tran 1) = (Ma tran)’
Tạo 1 ma trận chuyển vị từ 1 ma trận đang có.
Công dụng: Tạo 1 ma trận vuông có tổng của các phần tử trong 1 hàng, 1 cột hoặc trên đường chéo bằng nhau
Tên ma trận = magic(n) Giải thích: n: kích thước ma trận.
Giá trị của mỗi phần tử trong ma trận là một dãy số nguyên liên tục từ 1 đến 2 n
Tổng các hàng, cột và các đường chéo đều bằng nhau.
Công dụng: Ma trận kết quả = ma trận 1* ma trận 2.
Công dụng: Tạo ma trận mà giá trị của các phần tử là 1.
Cú pháp: y = ones(n) y = ones(m,n) Giải thích: y = tên ma trận. n: tạo ma trận có n hàng m, n: tạo ma trận có m hàng, n cột.
Công dụng: Tạo ma trận theo quy luận tam giác Pascal.
Cú pháp: pascal (n) Giải thích: n: là số hàng (cột)
Công dụng: Tạo ma trận mà kết mà giá trị của các phần tử là ngẫu nhiên
18 y = rand(n) y = rand(m,n) Giải thích: y: tên ma trận. n: tạo ma trận có n hàng, n cột. m, n: tạo ma trận có m hàng, n cột.
Giá trị của các phần tử nằm trong khoảng [0 1]
Công dụng: Ðịnh dạng lại kích thước ma trận.
Cú pháp: b = reshape(a,m,n) Giải thích: b: ma trận được định dạng lại. a: ma trận cần được định dạng. m, n: số hàng và số cột của b.
Ma trận a phải có số phần tử là: m*n.
Công dụng: Xoay ma trận 90 0
Cú pháp: b = rot90(a) Giải thích: b: ma trận đã được xoay 90 0 a: ma trận cần xoay
Công dụng: Tính tổng các phần tử của đường chéo ma trận
Cú pháp: d = trace(a) Giải thích: d: biến chứa kết quả. a: tên ma trận
Công dụng: Lấy phân nửa dưới ma trận, các phần tử còn lại là 0
I: tên ma trận kết quả. k: tham số.
Nếu k = 0 lấy từ đường chéo trở xuống.
Nếu k = n lấy từ đường chéo trở lên n đơn vị.
Nếu k = -n lấy từ đường chéo trở xuống n đơn vị
Công dụng: Lấy phân nửa trên ma trận theo hình tam giác.
I: tên ma trận kết qủa. k: tham số Nếu k = 0 lấy từ đường chéo trở lên.
Nếu k = n lấy từ đường chéo trở xuống n đơn vị.
Nếu k = -n lấy từ đường chéo trở lên n đơn vị
Công dụng: Tạo ma trận mà giá trị của các phần tử bằng 0
Cú pháp: y = zeros(n) y = zeros(m,n) Giải thích: y: tên ma trận. n: tạo ma trận có n hàng và n cột. m, n: tạo ma trận có m hàng, n cột.
VI Tìm hiểu về Simulink.
Simulink là phần mềm mở rộng của Matlab (một Toolbox của Matlab) dùng để mô hình hóa, mô phỏng và phân tích một hệ thống động Simulink là thuật ngữ được ghép bởi hai từ Simulation và Link.
Nó hỗ trợ các hệ thống tuyến tính và phi tuyến mô hình hóa hệ thống trong miền thời gian liên tục, trích mẫu thời gian hay là hệ thống lai (giữa liên tục và rời rạc) hệ thống có thể có nhiều phần khác nhau mà chúng được giữ lại hoặc là cập nhật từ các phần khác. Để mô hình hóa, Simulink cung cấp cho ta một giao diện đồ họa dễ sử dụng và xây dựng mô hình sử dụng thao tác “nhấn và kéo chuột” Để phục vụ việc mô hình hóa, Simulink cung cấp cho người sử dụng “giao diện đồ họa người sử dụng” (graphical user interface-GUI) để xây dựng mô hình như là những sơ đồ khối, sử dụng chức năng kéo, thả của chuột với giao diện này, ta có thể dễ dàng xây dựng mô hình và khảo sát mô hình một cách trực quan hơn Chúng ta có thể
“vẽ” ra mô hình như chúng ta có thể làm với bút và giấy (hay hầu hết các sách có nói về chúng) Phần này khác xa so với gói mô phỏng trước đó yêu cầu chúng ta tính toán trực tiếp các phương trình vi phân, hay là tính các phương trình vi phân bằng cách lập trình hay các phần mềm Simulink bao gồm các thư viện khối, nguồn, và các phần tử tuyến tính, phi tuyến, các khối kết nối Chúng ta cũngS có thể tự tạo các khối của mình
Các mô hình sắp xếp theo thứ tự, do vậy chúng ta có thể dựng mô hình theo hình thức từ dưới lên hoặc từ trên xuống bạn có thể nhìn hệ thống từ vị trí cao và sau đó khi chúng ta nháy đúp chuột vào khối để xem chi tiết của từng khối của mô hình Phương pháp này cung cấp cho chúng ta cái nhìn xuyên suốt và chúng tacó thể biết được một mô hình có tổ chức như thế nào và cách mà từng phần trong mô hình tương tác với nhau.
Sau khi chúng ta định nghĩa một mô hình, chúng ta có thể mô phỏng nó sử dụng các phương pháp tích hợp hoặc là từ bảng chọn của Simulink hoặc là bằng cách gõ lệnh từ cửa sổ chính của Matlab Bảng chọn rất thuận tiện cho các phần tương tác với nhau Trong khi các cách thực hiện bằng câu lệnh thì thuận tiện cho việc chạy mô phỏng theo mẻ sử dụng scope và các khối hiển thị khác, chúng ta có thể nhìn thấy kết quả tính toán trong khi quá trình mô phỏng đang chạy hơn nữa, chúng ta có thể thay đổi thông số và ngay lập tức sẽ nhìn thấy sự thay đổi kết quả mô phỏng có thể được đặt trong vùng làm việc của Matlab (workspace) để lưu quá trình xử lý và giao diện.
Tập lệnh thao tác trên ma trận và vector 14
1 Cộng, trừ, nhân, chia từng phần tử của ma trận với hằng số
Ma trận kết quả = ma trận [+] [-] [*] [/] hằng số.
Công dụng: Dùng để tính định thức của ma trận.
Tính định thức của ma trận a a 1 4
Công dụng: Tạo ma trận mới và xử lý đường chéo theo quy ước.
Cú pháp: v = diag(x) v = diag(x,k) Giải thích: x: là vector có n phần tử. v: là ma trận được tạo ra từ x theo quy tắc: số hàng bằng số cột và các phần tử của x nằm trên đường chéo của v. k: tham số định dạng cho v, số hàng và cột của v = n+abs(k). Nếu k = 0 đường chéo của v chính là các phần tử của x Nếu k > 0 các phần tử của x nằm phía trên đường chéo v Nếu k < 0 các phần tử của x nằm phía dưới đường chéo v
Công dụng: Tạo ma trận đơn vị.
Cú pháp: y = eye(n) y = eye(n,m) Giải thích: n: tạo ma trận có n hàng, n cột. m, n: tạo ma trận có m hàng, n cột
Công dụng: Chuyển các phần tử của các ma trận theo thứ tự cột ngược lại.
Cú pháp: b = fliplr(a) Giải thích: b: tên ma trận được chuyển đổi. a: tên ma trận cần chuyển đổi
Công dụng: Chuyển các phần tử của ma trận theo thứ tự hàng ngược lại.
Cú pháp: b = flipud(a) Giải thích: b: tên ma trận được chuyển đổi. a: tên ma trận cần chuyển đổi.
Công dụng: Tìm ma trận nghịch đảo.
Ma trận nghịch đảo = inv (ma trận)
Công dụng: Dùng để tạo 1 ma trận gồm có n hàng và m cột.
Giải thích: a11, a12, a1m là các giá trị tại hàng 1 cột 1 đến các giá trị tại hàng 1 cột m, có n dấu (;) là có n hàng
Công dụng: Lệnh này dùng để tạo 1 vector đơn gồm có n phần tử.
Tên vector = [pt1 pt2 pt3 … ptn]
Giải thích: pt1 pt2 … ptn : là các số thực.
Tên vector = gtđ:csc:gtkt Giải thích: gtđ: là giá trị bắt đầu của vector. csc: cấp số cộng. gtkt: giá trị kết thúc
Công dụng: Tạo vector có giá trị ngẫu nhiên giới hạn trong khoảng định trước.
Cú pháp: y = linspace(x1, x2) y = linspace(x1, x2, n) Giải thích: y: tên của vector. x1, x2: giới hạn giá trị lớn nhất và nhỏ nhất của vector y. n: số phần tử của vector y
Nếu không có giá trị n thì mặc định n = 100
Công dụng: Ma trận chuyển vị = ma trận đang có.
Cú pháp: (Ma tran 1) = (Ma tran)’
Tạo 1 ma trận chuyển vị từ 1 ma trận đang có.
Công dụng: Tạo 1 ma trận vuông có tổng của các phần tử trong 1 hàng, 1 cột hoặc trên đường chéo bằng nhau
Tên ma trận = magic(n) Giải thích: n: kích thước ma trận.
Giá trị của mỗi phần tử trong ma trận là một dãy số nguyên liên tục từ 1 đến 2 n
Tổng các hàng, cột và các đường chéo đều bằng nhau.
Công dụng: Ma trận kết quả = ma trận 1* ma trận 2.
Công dụng: Tạo ma trận mà giá trị của các phần tử là 1.
Cú pháp: y = ones(n) y = ones(m,n) Giải thích: y = tên ma trận. n: tạo ma trận có n hàng m, n: tạo ma trận có m hàng, n cột.
Công dụng: Tạo ma trận theo quy luận tam giác Pascal.
Cú pháp: pascal (n) Giải thích: n: là số hàng (cột)
Công dụng: Tạo ma trận mà kết mà giá trị của các phần tử là ngẫu nhiên
18 y = rand(n) y = rand(m,n) Giải thích: y: tên ma trận. n: tạo ma trận có n hàng, n cột. m, n: tạo ma trận có m hàng, n cột.
Giá trị của các phần tử nằm trong khoảng [0 1]
Công dụng: Ðịnh dạng lại kích thước ma trận.
Cú pháp: b = reshape(a,m,n) Giải thích: b: ma trận được định dạng lại. a: ma trận cần được định dạng. m, n: số hàng và số cột của b.
Ma trận a phải có số phần tử là: m*n.
Công dụng: Xoay ma trận 90 0
Cú pháp: b = rot90(a) Giải thích: b: ma trận đã được xoay 90 0 a: ma trận cần xoay
Công dụng: Tính tổng các phần tử của đường chéo ma trận
Cú pháp: d = trace(a) Giải thích: d: biến chứa kết quả. a: tên ma trận
Công dụng: Lấy phân nửa dưới ma trận, các phần tử còn lại là 0
I: tên ma trận kết quả. k: tham số.
Nếu k = 0 lấy từ đường chéo trở xuống.
Nếu k = n lấy từ đường chéo trở lên n đơn vị.
Nếu k = -n lấy từ đường chéo trở xuống n đơn vị
Công dụng: Lấy phân nửa trên ma trận theo hình tam giác.
I: tên ma trận kết qủa. k: tham số Nếu k = 0 lấy từ đường chéo trở lên.
Nếu k = n lấy từ đường chéo trở xuống n đơn vị.
Nếu k = -n lấy từ đường chéo trở lên n đơn vị
Công dụng: Tạo ma trận mà giá trị của các phần tử bằng 0
Cú pháp: y = zeros(n) y = zeros(m,n) Giải thích: y: tên ma trận. n: tạo ma trận có n hàng và n cột. m, n: tạo ma trận có m hàng, n cột.
Tìm hiểu về Simulink 20
Simulink là phần mềm mở rộng của Matlab (một Toolbox của Matlab) dùng để mô hình hóa, mô phỏng và phân tích một hệ thống động Simulink là thuật ngữ được ghép bởi hai từ Simulation và Link.
Nó hỗ trợ các hệ thống tuyến tính và phi tuyến mô hình hóa hệ thống trong miền thời gian liên tục, trích mẫu thời gian hay là hệ thống lai (giữa liên tục và rời rạc) hệ thống có thể có nhiều phần khác nhau mà chúng được giữ lại hoặc là cập nhật từ các phần khác. Để mô hình hóa, Simulink cung cấp cho ta một giao diện đồ họa dễ sử dụng và xây dựng mô hình sử dụng thao tác “nhấn và kéo chuột” Để phục vụ việc mô hình hóa, Simulink cung cấp cho người sử dụng “giao diện đồ họa người sử dụng” (graphical user interface-GUI) để xây dựng mô hình như là những sơ đồ khối, sử dụng chức năng kéo, thả của chuột với giao diện này, ta có thể dễ dàng xây dựng mô hình và khảo sát mô hình một cách trực quan hơn Chúng ta có thể
“vẽ” ra mô hình như chúng ta có thể làm với bút và giấy (hay hầu hết các sách có nói về chúng) Phần này khác xa so với gói mô phỏng trước đó yêu cầu chúng ta tính toán trực tiếp các phương trình vi phân, hay là tính các phương trình vi phân bằng cách lập trình hay các phần mềm Simulink bao gồm các thư viện khối, nguồn, và các phần tử tuyến tính, phi tuyến, các khối kết nối Chúng ta cũngS có thể tự tạo các khối của mình
Các mô hình sắp xếp theo thứ tự, do vậy chúng ta có thể dựng mô hình theo hình thức từ dưới lên hoặc từ trên xuống bạn có thể nhìn hệ thống từ vị trí cao và sau đó khi chúng ta nháy đúp chuột vào khối để xem chi tiết của từng khối của mô hình Phương pháp này cung cấp cho chúng ta cái nhìn xuyên suốt và chúng tacó thể biết được một mô hình có tổ chức như thế nào và cách mà từng phần trong mô hình tương tác với nhau.
Sau khi chúng ta định nghĩa một mô hình, chúng ta có thể mô phỏng nó sử dụng các phương pháp tích hợp hoặc là từ bảng chọn của Simulink hoặc là bằng cách gõ lệnh từ cửa sổ chính của Matlab Bảng chọn rất thuận tiện cho các phần tương tác với nhau Trong khi các cách thực hiện bằng câu lệnh thì thuận tiện cho việc chạy mô phỏng theo mẻ sử dụng scope và các khối hiển thị khác, chúng ta có thể nhìn thấy kết quả tính toán trong khi quá trình mô phỏng đang chạy hơn nữa, chúng ta có thể thay đổi thông số và ngay lập tức sẽ nhìn thấy sự thay đổi kết quả mô phỏng có thể được đặt trong vùng làm việc của Matlab (workspace) để lưu quá trình xử lý và giao diện.
Công cụ phân tích mô hình bao gồm công cụ tuyến tính hóa và công cụ chặt mà có thể truy cập được từ cửa sổ lệnh của Matlab, thêm nhiều công cụ của Matlab và các hộp công cụ ứng dụng của nó Và bởi vì Matlab và Simulink được tích hợp, cho nên chúng tacó thể mô phỏng, phân tích và duyệt lại mô hình của chúng tatrong bất cứ điều kiện nào tại bất cứ điểm nào
2 Cách thức làm việc của Simulink.
Nguyên tắc làm việc của Simulink như sau: Mỗi loại khối Simulink được liên kết với một tập các hàm hệ thống mà xác định quan hệ phụ thuộc theo thời gian với các đầu vào, trạng thái và đầu ra Các hàm hệ thống bao gồm :
- Một hàm đầu ra, Fo : mà thể hiện các quan hệ của đầu ra của hệ thống với đầu vào, trạng thái và thời gian.
- Một hàm cập nhật, Fu : thể hiện quan hệ của giá trị tương lai của trạng thái rời rạc của hệ thống với thời gian hiện tại, đầu vào và đầu ra.
- Một hàm tích phân, Fd : thể hiện quan hệ tích phân của trạng thái liên tục của hệ thống theo thời gian và giá trị hiện tại của trạng thái của khối và đầu vào.
Về mặt kí hiệu, các hàm hệ thống sẽ được diễn đạt như sau : y = Fo(t,x,u) output function x d k +1 = Fu(t,x,u) update function x c ' = F d (t,x,u) derivative function
22 ở đây, t là thời gian hiện tại, x là trạng thái của khối, u là đầu vào của khối và y là đầu ra của khối xd là tích phân rời rạc của khối, x c ' là tích phân của trạng thái liên tục của khối trong suốt quá trình mô phỏng, simulink gọi các hàm hệ thống để tính toán các đầu ra và trạng thái của hệ thống.
3 Sơ đồ khối trong Simulink
Các khối của simulink là các mô hình diễn tả bằng hình ảnh của các hệ thống động học nó bao gồm tập hợp các biểu tượng gọi là các khối được nối với nhau bằng các đường nối Mỗi khối đại diện cho một phần tử của hệ thống động học mà cung cấp các đầu ra hoặc là liên tục (với khối của tín hiệu liên tục) hoặc là tại các điểm xác định theo thời gian (các khối rời rạc) các đường nối nối các khối đầu vào các khối đầu ra Mỗi khối trong các sơ đồ khối là một trường hợp xác định của các khối mà cần đến trong mô hình hệ thống a Các khối :
Khối đại diện cho một phần tử động học của hệ thống mà Simulink biết làm cách nào để thực hiện Một khối bao gồm một hay nhiều phần tử sau : tập đầu vào, tập trạng thái và tập đầu ra như sau. u x y (đầu vào) (trạng thái) (đầu ra) Đầu ra của khối có thể là các hàm theo thời gian và các đầu vào của khối và trạng thái (nếu có) Các hàm cụ thể mà biểu thị quan hệ giữa đầu ra và đầu vào, trạng thái và thời gian phụ thuộc vào kiểu của khối mà khối đó là trường hợp cụ thể. b Các trạng thái :
Một khối có thể có trạng thái Một trạng thái là một biến mà xác định đầu ra của khối và những giá trị hiện tại của nó là các hàm của các giá trị trước của trạng thái của khối hoặc (và) là đầu vào Một khối mà có một trạng thái phải chứa các giá trị trước của trạng thái để tính toán trạng thái hiện thời do vậy các trạng thái được gọi là sự liên tục. các khối mà có trạng thái được gọi là có bộ nhớ bởi vì những khối như vậy phải chứa các giá trị trước của khối đó hoặc (và) đầu vào cúa nó để mà tính toán giá trị hiện tại của trạng thái.
Khối tích phân trong Simulink là một ví dụ về khối có trạng thái.Đầu ra của khối tích phân là tích phân của đầu vào từ lúc bắt đầu thực hiện đến lúc thời gian hiện tại sự tích phân tại bước thời gian hiện tại phụ thuộc vào đầu vào của khối tích phân lúc trước đó Do vậy quá trình tích phân là một trạng thái của khối tích phân và trên thực tế là chỉ có trạng thái đó của khối một ví dụ khác về các khối có trạng thái
1 In1 là khối lưu trữ (nhớ) của simulink, khối này chứa các giá trị đầu vào của nó tại thời điểm tính toán và đầu ra tại thời điểm sau Trạng thái của khối này là giá trị trước của đầu vào của nó.
Tìm hiểu về Script M-file 29
Trong Matlab các lệnh được thực hiện trong cửa sổ lệnh là nhanh va hiệu quả Tuy nhiên khi số lệnh tăng lên hay cần thay đổi giá trị của một hay nhiều biến và thực hiện một số lệnh với giá trị mới, nếu cứ phải đánh lặp lại các lệnh thì rất dài dòng Matlab cung cấp một giải pháp cho vấn đề này là cho phép thay thế các lệnh Matlab bằng một tệp tin văn bản đơn giản và Matlab mở tệp tin, thực hiện chính xác như gõ lệnh tại cửa sổ lệnh Những tệp tin này gọi là Scrip file “Script ” để chỉ rằng thực tế Matlab đọc từ tệp tin kịch bản tìm thấy trong tệp tin “M_file ” để chỉ rằng tên “script file” đó phải kết thúc bằng phần mở rộng là “.m”.
Matlab dùng các trạng thái của biến Matlab hiện tại và tạo lên các lệnh của nó, bắt đầu bằng tên M_file Lệnh trong M_file truy cập đến tát cả các biến trong không gian làm việc của Matlab, và tất cả các biến trong M_file trở thành một phần của không gian làm việc. Thông thường các lệnh đọc trong M_file không được hiển thị như là nó được tính trong cửa sổ lệnh
M_file có đặc điểm bạn có thể thay đổi lai nội dung của tệp tin và lưu lại trên đĩa để có thể sử dụng về sau khi cần.
2 Một số hàm đặc biệt của M-file
Tùy theo những ứng dụng của “scrip file”, Matlab cung cấp một số hàm đặc biệt để sử dụng thùy theo mục đích.
Các hàm M_file disp(ans) Hiển thị các kết quả mà không hiện tên biến
Echo Điều khiển cửa sổ lệnh lặp các lệnh của script file
Input Sử dụng dấu nhắc để đưa dữ liệu
Keyboard vàoTrao điều khiển tạm thời cho bàn
Pause phímDừng lại cho đến khi người dùng nhấn một phím bất kì pause(n) Dừng lại n giây
Waitforbuttonpress Dừng lại cho đến khi người dùng nhấn chuột hoặc phím
3 Các h àm trong M_FILE a Giới thiệu.
Khi ta sử dụng các hàm Matlab như inv, abs, sqrt … Matlab nhận giá trị truyền vào, dựa vào kết quả đó, tính toán kết quả và trả lại cho chúng ta kết quả tính toán Và như vậy các lệnh tính toán bằng hàm cũng như các biến trung gian được tạo ra bởi các lệnh này đều không được nhìn thấy, mà cúng ta chỉ thấy các giá trị nhập vào và các giá trị đưa ra Các thuộc tính này làm cho hàm trở nên rất hữu dụng đối với các lệnh tính toán mà phải dùng đến các hàm toán học phức tạp. Dựa vào ưu điểm này, Matlab cung cấp một cấu trúc để ta có thể tự tạo cho mình dưới dạng M_file
Một hàm M_file rất giống với một scrip file bởi vì chúng cùng là các tệp tin văn bản và cùng có phần mở rộng là “.m” Điểm khác nhau giữa scrip file và các hàm M_file là các hàm M_file không được nhập vào từ cửa sổ lệnh mà thông qua một trình soạn thảo văn bản từ bên ngoài Hàm M_file còn khác script file ở chỗ nó chỉ thông tin với Matlab thông qua các biến truyền vào cho nó và thông qua các biến ra mà nó tạo thành, các biến trung gian ở bên trong hàm thì không xuất hiện hay tương tác với môi trường của Matlab. b Các quy luật và thuộc tính.
Hàm M_file phải tuân theo những quy luật và thuộc tính nhất định và chúng còn có một số tính chất rất quan trọng bao gồm :
Tên hàm và tên tệp tin phải là một.
Khi Matlab thực hiện lần đầu hàm M_file, nó sẽ mở tệp tin văn bản tương ứng và dịch các dòng lệnh của tệp tin đó ra một dạng mã lưu trong bộ nhớ nhằm mục đích tăng tốc độ thực hiện các lời gọi hàm tiếp theo Nếu trong hàm có chứa lời gọi hàm M_file khác thì các hàm đó cũng được dịch vào trong bộ nhớ.
Các dòng ghi lời chú thích cho tới dòng đầu tiên không phải là chú thích trong hàm M_file là những dòng văn bản, nó sẽ hiện ra khi ta sử dụng help
Mỗi hàm có một không gian làm việc riêng tách biệt so với môi trường Matlab, mối quan hệ duy nhất giữa các biến trong hàm với môi trường Matlab là các biến vào và ra của hàm đó Nếu bản thân hàm giá trị bị thay đổi thì sự thay đổi này chỉ tác động bên trong của hàm đó mà không làm ảnh hưởng đến các biến của môi trường Matlab Các biến được tạo ra bên trong một hàm thì chỉ nằm trong không gian làm việc của hàm đó và được giải phóng khi hàm kết thúc, vì vậy không thể sử dụng thông tin của lần gọi trước cho lần gọi sau.
Số các tham số vào và ra khi một hàm được gọi thì chỉ có tác dụng bên trong hàm đó, biến nargin chứa các tham số đưa vào còn biến nargout chứa các giá trị đưa ra, trong thực tế thì các biến này thường được sử dụng để xác định giá trị ra dựa vàosố lượng các đối số đưa vào.
Các hàm có thể dùng chung các biến với các hàm khác, với môi trường Matlab và có thể đệ quy nếu như các biến được khai báo là toàn cục Để có thể truy cập đến các biến trong một hàm hoặc trong môi trường Matlab thì các biến đó phải được khai báo là biến toàn cục trong mỗi hàm sử dụng nó.
Việc thi hành hàm M_file sẽ kết thúc khi gặp dòng cuối cùng của tệp tin đó hoặc gặp dòng lệnh “ return” Lệnh “ return” giúp ta kết thúc một hàm mà không cần phải thi hành hết các lệnh của hàm
đó.Hàm error của Matlab sẽ hiển thị một chuỗi lên cửa sổ lệnh và dừng thực hiện hàm, trả điều khiển về cho cửa sổ lệnh và bàn phím.
Một M_file có thể chứa nhiều hàm Hàm chính trong M_file phải được đặt tên trùng với tên của M_file như đề cập ở trên Các hàm khác được khai báo thông qua câu lệnh function được viết sau hàm đầu tiên Các hàm con chỉ được sử dụng bởi hàm chính, có nghĩa là ngoài hàm chính ra thì không có hàm nào khác có thể gọi được chúng Tính năng này cung cấp một giải pháp hữu hiệu để giải quyết từng phần của hàm chính một cách riêng rẽ làm giảm bớt các khó khăn khi ta lập trình một hàm lớn.
Tìm hiểu về S-function 32
S-Function là đoạn mã mô tả khối Simulink Nó được viết bởi các ngôn ngữ như Matlab, C, C++, Ada, Fortran Với các ngôn ngữ C, C++, Ada, Fortran thì S-Function được biên dịch sang Mex-files. Cùng với các Mex-file khác, chúng được liên kết động với Matlab khi cần.
S-function cú pháp gọi đặc biệt để có thể tương tác với giải pháp, phương trình của Simulink Dạng của S-function rất chung và có thể cung cấp cho ta những hệ thống liên tục, gián đoạn, và hệ gồm cả liên tục và gián đoạn.
2 Sử dụng S-function trong mô hình
Lấy khối S-fuction trong thư viện của Simulink đưa vào trong mô hình Sau đó xác định tên của S-function trong trường tên như hình sau :
Trong đó tên của S-function có thể là C Mex-file hoặc M-file Nếu
C Mex-file và M-file cùng tồn tại với cùng tên thì C Mex-file sẽ được S-function ưu tiên sử dụng Ngoài ra trường tham số của S- function cho phép ta xác định các tham số phù hợp Để sử dụng trường này thì ta phải biết các tham số đòi hỏi, thứ tự mà hàm yêu cầu Các tham số được đặt cách nhau dấu “ ,” và dặt theo đúng thứ tự Các tham số có thể là hằng số, tên của biến đã được định nghĩa ở trong môi trường làm việc của mô hình, hay Matlab đưa ra. Điểm thuận tiện của việc sử dụng S-function là ta có thể xây dựng khối phổ biến có thể dùng nhiều lần trong mô hình, các tham số biến đổi đối với mỗi minh họa của khối.
3 Những phương thức S-function gọi
S-function bao gồm những phương thức gọi thực thi các công việc yêu cầu đối với mỗi trạng thái mô phỏng Trong quá trình mô phỏng của mô hình, tại mỗi trạng thái, Simulink gọi phương thức thích hợp cho mỗi khối S-function trong mô hình Nhiệm vụ thực thi bởi các phương thức của S-function bao gồm :
Khởi tạo (Initialization ) : Trước khi chạy vòng lặp mô phỏng đầu tiên, Simulink khởi tạo S-function Trong giai đoạn này Simulink sẽ làm những nhiệm vụ sau :
- Khởi tạo SimStruct ( Cấu trúc chứa thông tin về S- function ).
- Đặt số lượng và kích thước cổng vào và cổng ra
- Đặt thời gian trích mẫu cho khối.
- Cấp phát vùng lưu trữ và kích thước mảng.
Tính toán tại bước trích mẫu tiếp theo ( Nếu ta để thời gian trích mẫu biến đổi )
Tính toán đầu ra : Sau khi lời gọi hoàn thành tất cả cổng ra của khối phù hợp với bước tính hiện tại
Cập nhật trạng thái gián đoạn trong bước tính : (Dùng với trạng thái gián đoạn )
Tích phân (Integration) : chỉ áp dụng đối với mô hình trạng thái liên tục Nếu trong S-function có chứa trạng thái liên tục, Simulink gọi tới đầu ra (output) và đạo hàm (derivative) Từ đó Simulink có thể tính toán các trạng thái của S-function.
4 Bổ sung thêm về S-function
S-function gồm hai dạng M-file và MEX-file và chúng ta sẽ xem xét sự thuận lợi của mỗi dạng này.
M-file S-function gồm các hàm của Matlab theo mẫu sau:
Trong đó : f là tên của S-function t là thời gian x là vectơ trạng thái phù hợp với khối S-function u là đầu vào của khối flag chỉ ra cho biết nhiệm vụ nào đang thực thi
34 p1, p2,… là các tham số của khối
Trong suốt quá trình mô phỏng Simulink lặp đi lặp lại lời gọi f, sử dụng flag để chỉ nhiệm vụ nào thực hiện Mỗi lần S-function thực thi nhiệm vụ, nó trả lại kết quả là cấu trúc theo một định dạng theo đúng cú pháp.
Ta có bảng thủ tục của M-file S-function như sau :
Giai đoạn mô phỏng Thủ tục S-function Flag
Tính toán bước trích mẫu tiếp theo (Chỉ khi thời gian trích mẫu thay đổi ). mdlGetTimeOfNextVarHit flag = 4
Tính toán đầu ra mdlOutputs flag = 3
Cập nhật trang thái gián đoạn mdlUpdate flag = 2
Tính toán đạo hàm mdlDerivatives flag = 1
Kết thúc nhiệm vụ mô phỏng mdlTerminate flag = 9
Cũng như M-file S-function, MEX-file S-function bao gồm các lời gọi thủ tục mà Simulink gọi để thực thi khối biến đổi liên quan đến nhiệm vụ trong suốt quá trình mô phỏng Tuy nhiên có sự khác nhau khá quan trọng Trước tiên là sự bổ sung bởi các ngôn ngữ lập trình khác như C, C++, Ada, Fortran Simulink gọi các thủ tục của MEX S-function trực tiếp thay vì thông qua giá trị
“ flag” Do Simulink gọi hàm trực tiếp nên MEX –file S-function phải tuân theo quy ước chuẩn lý thuyết bởi Simulink Ngoài ra tập hợp các lời gọi hàm mà MEX-function có thể bổ sung lớn hơn của M-file S-function Mặt khác MEX-function truy nhập thẳng vào dữ liệu bên trong cấu trúc, gọi SimStruct để Simulink sử dụng thông tin về S-function MEX-file S-function cũng có thể sử dụng MEX-file API của Matlab để truy cập trực tiếp vào không gian làm việc của Matlab ( workspace)
5 Nhận xét về MEX-file và M-file S-function
M-file và MEX-file S-function mỗi loại có thuận lợi riêng.Điểm thuận lợi của M-file S-function là dễ dàng mở rộng Sự phát triển củaM-file S-function tránh được thời gian ( biên dịch, liên kết, thực thi) yêu cầu bởi sự phát triển khi biên dịch Ngoài ra M-file S-function cũng dễ dàng truy nhập tới Matlab và các hàm chức năng Hàm M- file S-function sẽ buộc Simulink quét và phân tích từng dòng mỗi khi gọi nên khá chậm.
Hàm MEX-file S-function do người sử dụng biên dịch sẵn từ trước thành dạng file chạy và có thể gọi khi cần Điểm thuận tiện của MEX-file là tính linh hoạt Với số lượng lớn hơn về lời gọi lại và truy nhập tới SimStruct, bổ sung một số chức năng mà M-file S- function không truy cập được Chẳng hạn như chức năng bao gồm khả năng về kiểu dữ liệu : số thực, số phức, ma trận đầu vào.
6 Các bước thực hiện M-file S-function
Các chương trình con và cờ ( flag ) của giai đoạn tương ứng :
Bắt đầu quá trrình mô phỏng Lập trị (Initialization)
Tính thời điểm của bước trích mẫu tiếp theo (Các khối có chu kì linh hoạt
Tính vector biến ra y cho bước lớn nhất x
Xác định vị trí các điểm không
Kết thúc quá trình mô phỏng Thực hiên nhiệm vụ tiếp theo
Tùy theo đối tượng mà ta sử dụng hàm con nào, và hàm con nào không cần thiết.
Hàm con mdlInitializeSizes có tác dụng xác định những đặc điểm cơ bản của khối S-function: Chu kì trích mẫu, giá trị ban đầu của các biến trạng thái, kích cỡ (size) của mảng (array) Simulink cần những thông tin đó để nhận biết S-function Lệnh “ sizes = simsizes ” có tác dụng gán cho biến sizes một cấu trúc gồm các mảng sau :
- NumContStates : Số lượng biến trạng thái liên tục
- NumDiscStates : Số lượng biến trạng thái gián đoạn
- NumOutputs : Số lượng biến ra
- NumInputs : Số lượng biến vào
- DirFeedthrough : Cờ giành cho dirrect feedthrough
- NumSampleTimes : Số lượng chu kỳ trích mẫu
Các mảng trên có giá trị mặc định là 0, người sử dụng sẽ điền các giá trị thích hợp Khi gọi hàm simsizes lần 2: “ sys simsizes(sizes) “, các thông tin chứa trong cấu trúc sizes được chuyển sang cho biến sys dưới dạng Array, và sẽ được Simulink hỏi đến trong giai đoạn lập trị ( khi flag = 0).
Lợi thế lớn nhất của S-function viết bằng ngôn ngữ C là khả năng truy cập vào phần cứng, điều không thể làm được với M-file S- function Thêm vào đó S-function viết bằng C MEX-file sẽ tăng tốc độ tính toán lên rất nhiều, cho phép ta rút ngắn thời gian khi mô phỏng các hệ thống lớn phức tạp.
8 Một số khái niệm cơ sở của S-function: Để xây dựng hàm S-function đúng thì ta cần hiểu khái niệm một số từ khóa :
Setting sample times and offsets
Direct feedthrough có nghĩa là đầu ra ( hoặc thời gian trích mẫu biến đổi cho khối thời gian trích mẫu biến đổi ) được điều khiển trực tiếp bởi giá trị của đầu vào.
Giới thiệu về phần mềm mô phỏng 39
Giới thiệu về phần mềm EJS 39
EJS là viết tắt của phần mềm Easy Java Simulations
EJS có thể hoạt động với Matlab và Simulink EJS bao gồm các tệp phân tán gọi là Ejs_externalApps.bat để chạy Ejs với sự lựa chọn : - externalApps đã được chọn.
EJS liên kết với Matlab đồng nghĩa với chúng ta có thể :
- Gọi bất cứ một hàm Matlab nào (được xây dựng hay định nghĩa ở M-File) tại bất cứ vị trí trên mô hình.
Sử dụng Matlab trong EJS 39
1 Gọi hàm trong Matlab Để bắt đầu sử dụng Matlab với EJS là tạo ra một trang đặc biệt của các biến cho mô hình như hình minh họa sau :
Trong đó các biến được đặt giá trị đầu, được định nghĩa kiểu, và có thể kết nối với các biến của Matlab Chúng ta có thể tạo và khởi tạo giá trị theo cách thông thường Ngoài ra có thể dùng từ khóa _external cùng với các phương thức phù hợp để xây dựng các dòng lệnh theo kiểu : _external.setValue() ; _external.eval() ; _external.getDouble() … Sau đây là danh sách các phương thức có thể sử dụng cùng với _external
Void eval (String _mFile, String
Xác định giá trị của lệnh phù hợp với không gian làm việc của Matlab
Void setValue (String _mFile, String
_variable, (type) _value) Đặt giá trị cho các biến , mà các biến được cung cấp phù hợp trong không gian làm việc của Matlab.String getString (String _variable) Lấy ra giá trị của biến từ không gian
String _variable) làm việc của Matlab Kiểu trả về là chuỗi double getDouble ( String _variable) double getDouble ( String _mFile,
Lấy ra giá trị của biến phù hợp với kiểu trả về là kiểu thực double[] getDoubleArray (String
Lấy ra giá trị của mảng thực một chiều từ các biến double[][] getDoubleArray2D
Lấy ra giá trị của mảng thực hai chiều từ các biến
Chỉ ra bắt đầu của mã thô Matlab Chỉ ra bắt đầu mã thô Matlab cho một phiên
Chỉ ra kết thúc của mã thô Matlab
Mã thô Matlab ở đây là những dòng lệnh gõ trong cửa sổ lệnh.
2 Sử dụng Matlab trong EJS để tính toán
Chúng ta có thể sử dụng tất cả các chức năng toán học mạnh mẽ của Matlab từ EJS Matlab có thể xử lý mô hình phức tạp, kết nối đơn giản với EJS Thay vì viết những đoạn mã Java phức tạp cho tính toán thì kiểu sử dụng các hàm Matlab (xây dựng bên trong hoặc định nghĩa trong M_file) sẽ làm bài toán đơn giản đi rất nhiều.
Ví dụ : Đoạn mã trong hai từ khóa đặc biệt % BEGIN CODE và % END CODE đã sử dụng chức năng tính toán, các hàm toán học của Matlab.
3 Sử dụng đồ họa của Matlab
Chúng ta cũng có thể sử dụng chức năng đồ họa của Matlab
Ví dụ : Đầu tiên chúng ta tạo mới một phương thức gọi hàm (như ví dụ này là “plot() ”) Với tư tưởng hiển thị động trong cửa sổ Matlab bất cứ khi nào hệ số thay đổi trong EJS, Matlab sẽ ngay lập tức cập nhật đồ thị của mình Với bài toán này thì các hệ số được thay đổi bởi các thanh trượt nên ta phải kết hợp hàm plot() vào thuộc tính “ On drag “ cho mỗi thanh trượt hệ số :
Mỗi lần dịch chuyển thanh trượt thay đổi hệ số, cửa sổ Matlab hiển thị kết quả minh họa đồ thị hàm số :
Chúng ta có thể sử dụng M-file của Matlab nếu cần khởi tạo không gian làm việc Matlab Để minh họa ta sẽ xem xét ví dụ : vẽ đồ thị của hàm y = k*sin(x) với k = 2 được lưu trong M-file và được khai báo trong External File trong trang khai báo biến :
Ngay khi chạy thi M-file ThirdExample.m sẽ xác định giá trị trước khi chạy mô phỏng Vì vậy biến k có thể sử dụng được trong không gian làm việc của Matlab.
Và như vậy chúng ta có đồ thị như sau :
5 Sử dụng nhiều phiên Matlab :
Trong trường hợp chúng ta muốn chạy cùng lúc nhiều phiên Matlab, điều này thực sự có ích khi tính toán phức tạp và chúng ta muốn giữ không gian làm việc hoàn toàn riêng biệt Chúng ta tạo nhiều trang biến mà mỗi trang phù hợp với một M-file khac nhau trong External File.
Chú ý là M-file không nhất thiết phải tồn tại Nếu M-file không tồn tại thì sẽ xuất hiện cảnh báo, bất chấp cảnh báo không gian làm việc của Matlab vẫn sẽ chạy tốt.
Và nếu chúg ta sử dụng những dòng lệnh sau :
Chúng ta sẽ nhận được cảnh báo như sau :
Warning : the M-file Mfile1.m does not exist !
Warning : the M-file Mfile2.m does not exist !
Tuy nhiên hai phiên Matlab vẫn sẽ được tạo ra và trong chúng biến k sẽ có giá trị 1.0 và 2.0 tách biệt theo thứ tự định sẵn.
Nếu chỉ có một phiên Matlab được bắt đầu, tham số String có thể bị cấm hoạt động
Nếu tên một trang biến không có trong trường Matlab File thì tên phù hợp với nó trong phiên sẽ để trống “”.
Nếu có nhiều phiên mở và không tham số String cho phiên được cung cấp thì tất cả các phiên se nhận dòng lệnh eval và setValue Dòng lệnh getValue sẽ trả về giá trị đầu tiên mà nó
tìm.Nếu hai trang biến xác định cùng một M-file, duy nhất một phiên với tên đó được bắt đầu.
III Sử dụng mô hình Simulink
Sử dụng mô hình Simulink từ EJS là hoàn toàn có thể và đơn giản mặc dù một số công việc phải tính toán trước
Các bước EJS cần để sử dụng mô hình Simulink là :
Tạo sự thay đổi nhỏ ở mô hình Simulink để có thể kết nối phù hợp với môi trường làm việc của Matlab.
Tạo một tệp tin M-file để báo cho EJS biết về mô hình đang được sử dụng, các biến , các tham số có thể truy nhập và nó hoạt động như sụ kết nối trung gian.
Kết nối các biến của EJS với các biến phù hợp của Matlab.
EJS phải bao gồm các lời gọi phương thức để có thể điều khiển quá trình thực thi của mô hình Simulink.
Chúng ta minh họa các bước trên với mô hình simppend.mdl
1 Những yêu cầu thay đổi đối với mô hình Simulink
Từ khi Simulink kết nối với EJS thông qua môi trường làm việc của Matlab, điều đầu tiên chúng ta cần thay đổi mô hình để có thể gửi giá trị của các biến tới không gian làm việc của Matlab và đồng thời nhận giá trị từ các biến hoặc tham số từ không gian làm việc của Matlab.
Sự thay đổi thứ hai bắt nguồn từ thực tế Simulink thường chạy và tạm dừng bởi người dùng thông qua giao diện của Simulink Vì vậy chúng ta thay đổi mô hình để nó có thể hoạt động chính xác khi EJS điều khiển.
Sự thay đổi cuối không bắt buộc, đó là dỡ bỏ bất kì trạng thái nào của mô hình Simulink Thông thường chúng ta không cần thiết giữ nguyên gốc mô hình.
Trong ví dụ này thì sự thay đổi như sau
Mô hình simppend.mdl nguyên bản : sau thay đổi ta được mô hình simppend.mdl
Trong đó một số tham số của các khối được đặt như sau :
Còn lại cá khối theta, omega, time đều được đặt các tham số theo kiểu sau
2 Tạo M-file kết nối tới server
Bước này tạo M-file để EJS có thể sử dụng rút ra nhhững thông tin mà nó cần cho cơ cấu bên trong Tệp tin này chứa thông tin các biến mà ta sẽ truy nhập trong mỗi mô hình.
Với ví dụ này thì tệp tin simppend.m chỉ cần khai báo như sau : theta = 0; %Ejs Variable omega = 0; %Ejs Variable time = 0; %Ejs Variable model = ‘simppend.mdl’ %Ejs Model