Hướng dẫn lập trình Matlab và ứng dụng Matlab vào lập trình hệ thống điều khiển tự động hóa.
Trang 1Để khởi động MATLAB ta nhấn đúp vào icon của nó trên màn hình.
2.Đánh lệnh trong cửa sổ lệnh : Khi ta đánh lệnh vào cửa sổ lệnh, nó sẽ được
thi hành ngay và kết quả hiện lên màn hình. Nếu ta không muốn cho kết quả hiện lên màn hình thì sau lệnh ta đặt thêm dấu “;”. Nếu lệnh quá dài, không vừa một dòng dòng có thể đánh lệnh trên nhiều dòng và cuối mỗi dòng đặt thêm dấu rồi xuống dòng. Khi soạn thảo lệnh ta có thể dùng các phím tắt : ↑ Ctrl‐P gọi lại lệnh trước đó
home Ctrl‐A về đầu dòng
end Ctrl‐E về cuối dòng
esc Ctrl‐U xoá dòng
Trang 3Muốn lấy tổng của các hàng ta cần chuyển vị ma trận bằng cách đánh vào lệnh:
Trang 4Ngoài ra toán tử “:” tham chiếu tới tất cả các phần tử của một hàng hay một cột.
ta tạo được ma trận B từ ma trận A bằng cách đổi thứ tự các cột từ [1 2 3 4] thành [ 1 3 2 4 ]
Trang 5pascal(n) tạo ra ma trận xác định dương mà các phần tử lấy từ tam giác Pascal.
Trang 6f. M‐file: M‐file là một file text chứa các mã của MATLAB. Để tạo một
ma trận ta viết một m‐file và cho MATLAB đọc file này. Ví dụ ta tạo file
Trang 101. Script file: Kịch bản là M‐file đơn giản nhất, không có đối số. Nó rất có ích
khi thi hành một loạt lệnh MATLAB theo một trình tự nhất định. Ta xét ví dụ hàm fibno để tạo ra các số Fibonnaci.
• Phần văn bản trợ giúp để giúp người dùng hiểu tác dụng của hàm.
• Thân hàm chứa mã MATLAB
• Các lời giải thích dùng để cho chương trình sáng rõ. Nó được đặt sau dấu %.
Trang 11Các biến khai báo trong một hàm của MATLAB là biến địa phương. Các hàm khác không nhìn thấy và sử dụng được biến này. Muốn các hàm khác dùng được biến nào đó của hàm ta cần khai báo nó là global. Ví dụ ta cần giải
hệ phương trình :
2 1 2
2
2 1 1
1
yyy
y
yyy
y
β+
format short e 5 digit floating point 3.1416e+00
format long e 15 digit floating point 3.141592653589793e+00format short g Best of 5 digit fixed or floating 3.1416
Trang 13.0)3.0x(
1)
Trang 16
6. Chỉ vẽ các điểm số liệu: Để vẽ các điểm đánh dấu mà không nối chúng lại với nhau ta dùng đặc tả nói rằng không có các đường nối giữa các điểm ta gọi
8. Vẽ với hai trục y: Lệnh plotyy cho phép tạo một đồ thị có hai trục y. Ta cũng
Trang 17để vẽ. Tuy nhiên ta có thể mô tả lại phạm vi giá trị trên trục và khoảng cách đánh dấu theo ý riêng. Ta có thể dùng các lệnh sau:
Trang 20Ví dụ: Khảo sát nhịp độ sinh học liên quan đến mật độ trichloetylene(TCE) cho số liệu:
Trang 21Ví dụ:
Trang 23Ví dụ: Ta khảo sát hàm sin(r)/r. Để tính hàm trong khoảng ‐8 và 8 theo x và y
ta chỉ cần chuyển một vec tơ đối số cho meshgrid :
Trang 24contour3 hiển thị các mặt đẳng mức tạo bởi một giá trị cho trước của
ma trận Z.
contourf hiển thị đồ thị contour 2D và tô màu vùng giữa 2 các đường contourc hàm cấp thấp để tính ma trận contour
Trang 25Các hàm contour(z,n) và contour(z,v) cho phép ta chỉ rõ số lượng mức contour hay một mức contour cần vẽ nào đó với z là ma trận số liệu, n là số đường contour và v là vec tơ các mức contour. MATLAB không phân biệt giữa đại lượng vec tơ một phần tử hay đại lượng vô hướng. Như vậy nếu v là vec tơ
một phần tử mô tả một contour đơn ở một mức hàm contour sẽ coi nó là số lượng đường contour chứ không phải là mức contour. Như vậy,contour(z,v) cũng như contour(z,n). Để hiển thị một đường đẳng mức ta cần cho v là một
vec tơ có 2 phần tử với cả hai phần tử bằng mức mong muốn.V í dụ để tạo ra một đường đẳng mức 3D của hàm peaks
Trang 26r = ones(size(theta));
Trang 27attv)
Trang 29hệ đầy đủ bằng 0 gọi là hệ underdetermined. Một hệ như vậy có thể có vô số nghiệm với một hay nhiều biến phụ thuộc vào các biến còn lại. Với một hệ như vậy phương pháp Cramer hay phương pháp ma trận nghịch đảo không dùng được. Khi số phương trình nhiều hơn số ẩn phương pháp chia trái cũng cho nghiệm với một vài ẩn số được cho bằng 0. Một ví dụ đơn giản là phương trình x + 3y = 6. Phương trình này có rất nhiều nghiệm trong đó có một nghiệm
Ví dụ: Cho hệ phương trình
x + 2y + z = 8
0x + y + 0z = 2
x + y + z = 6
Trang 30143
Nếu ta loại trừ một hàng và một cột của ma trận chúng ta còn lại ma trận 2×2. Tuỳ theo hàng và cột bị loại ta có 9 ma trận con. Định thức của các ma trận này gọi là định thức con. Ví dụ nếu ta bỏ hàng 1 và cột 1 ta có:
37
210
=
Trang 31Các định thức con có thể dùng để xác định hạng của ma trận. Hạng của ma
trận được định nghĩa như sau: Một ma trận A m×n có hạng r ≥ 1 nếu và chỉ nếu định thức của A chứa một định thức r × r và mọi định thức con vuông có r+1 hàng hay hơn bằng 0.
Trang 32Ví dụ: Giải mạch điện gồm 3 nhánh nối song song: nhánh 1 có tổng trở Z1 = 5+2j và nguồn e = 100 sin(314t + 300), nhánh 2 có tổng trở Z2 = 3+4j và nhánh 3
có tổng trở 5+6j. Ta viết phương trình của mạch điện theo dòng nhánh. Sau đó rút ra ma trận A và B. Các lệnh MATLAB:
Trang 331 .Nội suy hàm một biến :MATLAB dùng 2 kiểu nội suy : nội suy đa thức và nội suy trên cơ sở biến đổi Fourrier nhanh,
a. Nội suy đa thức : MATLAB dùng hàm interp1(x,y,xi,< phương pháp>)
với x, là giá trị của hàm tại những điểm đã cho và xi là giá trị mà tại đó ta cần nội suy ra giá trị yi. <phương pháp> có thể là một trong các giá trị sau :
‘nearest’‐ phương pháp này đặt giá trị nội suy vào giá trị đã cho gần nhất, Phương pháp này nhanh nhưng kết quả kém chính xác nhất
Ví dụ: yi = interp1(x,y,1.6,ʹsplineʹ)
yi =
24.9782 ‘cubic’‐ phương pháp này coi đường cong qua 2 điểm là đường cong bậc
Trang 342. Nội suy hàm hai biến : Hàm interp2 thực hiện nội suy hàm 2 biến.Dạng hàm tổng quát :
Trang 35có thể đưa về hệ phương trình vi phân cấp 1 bằng cách đặt y1 = y ; y2 = y’ , . . ,
yn = y(n‐1). Như vậy:
)y.,,
y,y,tfy
yy
yy
n 2 1 n
3 2
2 1
3 2
2 1
yyy3
Trang 36[ t , y] = ode45( ‘f’,[ 0 1],[0 ; 1 ; ‐1])
Mỗi hàng trong vec tơ nghiệm tương ứng với một thời điểm trong vec tơ cột t. Như vậy trong ví dụ trên, y(:,1) là nghiệm, y(:,1) là đạo hàm bậc nhất của nghiệm và y(:,2) là đạo hàm bậc hai của nghiệm.
Ví dụ: Tìm dòng qua độ khi đóng mạch RC nối tiếp vào nguồn một chiều biết tích số RC = 0.1, điện áp nguồn là 10V và điện áp ban đầu trên tụ là 2V.
Phương trình của mạch là:
dt
du + Thay số vào ta có:
Trang 39b = tril(a) tạo ra ma trận b cùng cỡ với ma trận a, chứa các phần tử của
ma trận a nằm dưới đường chéo chính. Các phần tử khác bằng 0.
b = tril(a, k) tạo ra ma trận b cùng cỡ với ma trận a, chứa các phần tử của
ma trận a ngay trên đường chéo và phía dưới đường chéo thứ k. Các phần tử khác bằng 0.
Ví dụ: P(x) = x3 – 2x – 5
Trang 42
Các lệnh sau(lưu vào file ct3_1.m) thực hiện công việc trên:
Trang 43‐ Khung thứ nhất có góc trái dưới tại điểm có toạ độ 10% chiều ngang và 10% chiều cao của khung ngoài Figure.
Trang 44‐ Khung thứ 2 có góc trái phía dưới tại điểm có toạ đọ ứng với 10% chiều ngang và 60% chiều cao của khung ngoìa Figure.
text_ f = uicontrol(gcf,ʹStyleʹ,ʹTextʹ,ʹStringʹ,ʹFahrenheit: ʹ,
ʹPositionʹ,[0.3 0.7 0.2 0.05],ʹHorizontalAlignmentʹ,ʹLeftʹ);
Chuỗi kí tự “Fahrenhaeit” được đặt vào đúng vị trí dồn trái của ô có Position ghi trong đoạn chương trình trên. Đoạn lệnh sau dùng Edit để viết chuỗi kí tự “68.0” vào vị trí bên cạnh của “Fahrenheit”. Chuỗi kí tự có vị trí dồn phải trong ô (Position Box).
[0.6 0.3 0.1 0.05],ʹHorizontalAlignmentʹ,ʹLeftʹ);
3. Tự động cập nhật giá trị lên GUI: Để hoàn thiện ví dụ GUI ta thực hiện
chương trình với nhiệm vụ tính quy đổi từ độ K sang độ C và tự động điền kết quả vào các ô bên cạnh chuỗi Celcius. Đoạn mã sau phục vụ mục đích callback
Trang 45set(text_c2,ʹStringʹ,c);
Đoạn mã trên nhận giá trị do lệnh uicontrol “edit” đọc vào dưới dạng chuỗi (string) và sau đó:
Trang 48mã trên, giá trị ‘Value’ đặt sẵn là 2. Khi Callback gọi ct3_8.m:
Trang 50set(frame_1,ʹBackgroundColorʹ, [0.5 0.5 0.5]);
set(frame_2,ʹBackgroundColorʹ, [0.5 0.5 0.5]);
text_f = uicontrol(gcf,ʹStyleʹ, ʹTextʹ, ʹStringʹ, ʹFahrenheit: ʹ,ʹPositionʹ, [0.3 0.7 0.2 0.05],ʹHorizontalAlignmentʹ,ʹLeftʹ);
Trang 51tử thì radiobutton có thể đồng thời chứa nhiều phần tử.
Cuối cùng ta xét phương án dùng listbox. Giao diện cần tạo như sau:
Trang 52
Vùng thiết
kế Các phần tử
Việc đầu tiên là ta thiết kế giao diện mong muốn. Ta sẽ dùng chuột kéo các phần tử cần dùng từ bên trái và thả vào layout rỗng bên phải. Ta có thể dịch chuyển các phần tử này đế các vị trí mong muốn và cân chỉnh bằng công
cụ Alignment. Với mỗi phần tử ta cấn xác định thuộc tính cho nó bằng cách bấm đúp vào phần tử hay bấm vào công cụ soạn thảo thộc tính
Sau khi thiết kế xong ta lưu nó lại. Lúc này MATLAB tự động tạo ra file
*.fig dùng lưu giao diện vừa tạo và file *.m chưa các mã lệnh cần thực hiện. Việc cuối cùng là viết các mã lện vào file *.m. Trong quá trình thiết kế ta có thể chạy thử xem sau mỗi bước thiết kế đã đạt yêu cầu chưa bằng cách bấm vào ô chạy thử
2. Một số ví dụ tạo GUI:
a. Đếm số lần bấm chuột: Ta thiết kế một giao diện như sau:
Trang 53
Ta muốn là khi bấm chuột, số lần bấm sẽ được đếm và ghi lại. Trước hết
ta gọi guide và có được một layout rỗng. Vào Property Inspector (ô soạn thảo thuộc tính) và ghi vào Name chuỗi ʺct3_17ʺ và chấp nhận thuộc tích Tag mặc định của nó là figure1; dùng Font chữ mặc định, cỡ chữ 12, bold. Ta dùng ô Edit Text để ghi lại số lần bấm. Ta vào Property Inspector rồi chọn String. Ta nhập vào ô này chuỗi ʺSo lan bam chuot: 0ʺ. Ta ghi vào ô Tag chuỗi ʺeditmotʺ
và cũng dùng Font chữ mắc định, cỡ chữ 12 và bold. Tiếp theo kéo Pushbutton vào layout và soạn thảo thuộc tính cho nó với Font chữ mặc định, cỡ chứ 12, bold. Trong thuôc tính String ghi chuỗi ʺ Bam chuotʺ; ghi và Tag chuỗi ʺpushbuttonmotʺ. Như vậy là ta đã thiết kế xong. Bây giờ ta lưu lại với tên là ct3_17.fig và ct3_17.m.
Nhiệm vụ tiếp theo là ghi các lệnh cần thiết vào file ct3_17.m. File này đã được MATLAB tự động tạo ra. Ta phải thêm vào đó các mã lệnh để khi bấm chuột thì số lần bấm được thể hiện trên ô Edit Text. Ta sẽ ghi các mã lệnh này vào phần:
Trang 54varargout{1} = fig;
end elseif
b. Chuyển đổi từ độ Fahrenheit sang độ Celcius: Ta thiết kế một GUI để
chuyển đổi nhiệt độ. Giao diện có dạng như sau:
Trang 56
đổi thuộc tính của mô hình. Các khối nhìn thấy được, ngược lại, không đóng vai trò quan trọng trong mô hình hoá. Chúng chỉ giúp ta xây dựng mô hình một cách trực quan bằng đồ hoạ. Một vài khối của Simulink có thể là thấy được trong một số trường hợp và lại không thấy được trong một số trường hợp khác. Các khối như vậy được gọi là các khối nhìn thấy có điều kiện
3. Mô tả thông số của khối: Để mô tả thông số của khối ta dùng hộp thoại
Block Properties. Để hiển thị hộp thoại này ta chọn khối và chọn Block Properties từ menu Edit. Ta có thể nhắp đúp chuột lên khối để hiên thị hộp thoại này. Hộp thoại Block Properties gồm :
Trang 577. Xử lí tên khối: Mỗi khối có tên, phải là duy nhất và phải chứa ít nhất một kí
tự. Mặc định tên khối nằm dưới khối. Với tên khối ta có thể thực hiện các thao tác sau đây:
• Thay đổi tên khối bằng cách bấm chuột vào tên đã có và nhập lại tên
mới. Nếu muốn thay đổi font chữ dùng cho tên khối hãy chọn khối và vào
menu Format và chọn Font.
• Thay đổi vị trí đặt tên khối từ dưới lên trên hay ngược lại bằng cách kéo tên khối tới vị trí mong muốn.
• Không cho hiển thị tên khối bằng cách vào menu Format và chọn Hide Names hay Show Names
Trang 58ta thây đổi mô hình sau khi chọn Wide Vector Lines ta phải cập nhật hình vẽ bằng cách chọn Update Diagram từ menu Edit. Khởi động lại Simulink cũng
• Mở rộng đầu vào: khi dùng khối với nhiều đầu vào ta có thể trộn lẫn các đại lượng vec tơ và đại lượng vô hướng Khi này các đầu vào vô hướng được mở rộng thành vec tơ với số phần tử như của đầu vào vec tơ,các phần tử đều có trị số như nhau
• Mở rộng thông số: ta có thể đặc tả các thông số đối với khối được vec tơ hoá thành đại lượng vec tơ hay đại lượng vô hướng. Khi ta đặc tả các thông số vec tơ, mỗi một phần tử thông số được kết hợp với phần tử tương ứng trong vec tơ đầu vào. Khi ta đặc tả các thông số vec tơ, Simulink áp dụng mở rông vô hướng để biến đổi chúng thành vec tơ có kích thước phù hợp.
12. Gán độ ưu tiên cho khối: Ta có thể gán độ ưu tiên cho khối không nhìn
thấy trong mô hình. Khối có độ ưu tiên cao hơn được đánh giá trước khối có
độ ưu tiên nhỏ hơn. Ta có thể gán độ ưu tiên bằng cách dùng lệnh tương tác hay dùng chương trình. Để dùng chương trình ta dùng lệnh:
set_param(b,ʹPriorityʹ,ʹnʹ)
Trong đó b là khối và n là một số nguyên, số càng thấp, độ ưu tiên càng cao.
Để gán độ ưu tiên bằng lệnh ta nhập độ ưu tiên vào trường Priority trong hộp thoại Block Priorities của khối.
Trang 59Các đường mang các tín hiệu. Mỗi đường mang một tín hiệu vô hướng hay vec tơ. Mỗi đường nối cổng ra của một khối với cổng vào của một hay nhiều khối khác.
3. Chèn khối vào một đường: Ta có thể chèn một khối vào một đường bằng
cách kéo và thả khối đó lên đường nối. Khối mà ta chèn vào chỉ có một đầu vào và một đầu ra.
4. Nhãn của tín hiệu: Ta có thể gán nhãn cho tín hiệu để ghi chú cho mô hình.
Nhãn có thể nằm trên hay dưới đường nối nằm ngang, bên phải hay bên trái đường nối thẳng đứng.
Trang 60và ghi nhãn. Để di chuyển nhãn, sửa một nhãn, click lên nhãn rồi đánh nhãn mới sau khi xóa nhãn cũ
§6. GHI CHÚ
Ghi chú là đoạn văn bản cung cấp thông tin về mô hình. Ta có thể thêm ghi chú vào bất kì trông nào của mô hình. Để tạo một ghi chú, nhấn đúp chuột vào vùng trống của mô hình. Khi này trên màn hình xuất hiện một hình chữ nhật có con nháy ở trong. Ta có thể đánh văn bản ghi chú vào khung này. Khi muốn di chuyển phần ghi chú đến một vị trí khác, ta bấm chuột vào đó và kéo đến vị trí mới rồi thả chuột. Để sửa một ghi chú, bấm chuột vào nó để hiển thị khung văn bản và bắt đầu sửa.
Trang 61• tạo một khối hằng trong mô hình và cho nó giá trị phức.
• tạo một tín hiệu thực tương ứng với phần thực và phần ảo của tín hiệu phức và kết hợp các phần này thành tín hiệu phức bằng cách sử dụng khối biến đổi tín hiệu thực‐ảo thành tín hiệu phức.
Ta có thể xử lí tín hiệu phức nhờ các khối chấp nhận tín hiệu phức. Phần lớn các khối của Simulink chấp nhận tín hiệu vào là số phức.
Trang 62cách chọn khối hệ thống con rồi chọn Hide Port Labels từ menu Format. Ta
cũng có thể dấu một hay nhiều nhãn bằng cách chọn các khối inport hay
outport thích hợp trong khối hệ thống con và chọn Hide Name từ menu Format
§10. MÔ HÌNH HOÁ
Một trong những vấn đề xuất hiện khi dùng Simulink là làm thế nào để xây dựng một mô hình từ các phương trình hay hệ thống đã cho đã cho. Sau đây là một số ví dụ về cách xây dựng mô hình.
nhiệt độ Celcius biến đổi từ 0 đến 10o.
Trang 63=+
1zz
1zz
2 1
2 1
Trang 64• khối Sum trong thư viện Math để tạo phép tính
• khối Scope trong thư viện Sink để xem kết quả
• khối Signal Generator trong thư viện Sources để tạo nguồn
• khối Integrator trong thư viện Continuous để tích phân
Sơ đồ mô phỏng như sau(lưu trong ct4_4.mdl):