Bước 1: Tạo cửa số App Designer mới
Trong cửa sổ Command Windows gõ lệnh “appdesigner” và Enter, sau đó chọn Blank App.
Cửa sổ App Designer mới:
156 Hình 5.3. Cửa sổ App Designer mới
Bước 2: Thiết kế giao diện với cửa số Designer View
Đầu tiên ta sử dụng hai khối là Edit Field (Numeric) và Button để tạo giao diện cho bài toán. Ta có thể thay đổi tên các đối tượng hoặc tạo màu cho đối tượng nhờ các thuộc tính của nó.
Hình 5.4. Thiết kế giao diện cho bài toán
157 Bước 3: Tiến hành viết code cho bài toán với cửa số Code View
Sau khi tạo xong giao diện ban đầu thì sẽ tới phần viết code cho bài toán. Ta click chuột phải vào Button, nhấn vào Callbacks và chọn Add ButtonPushedFcn callback như hình bên dưới.
Hình 5.5. Viết code cho bài toán
Sau đó màn hình sẽ hiện lên cửa sổ Code View và vị trí mà ta cần nhập code vào.
Khoảng trắng là chỗ để viết code lên, còn khoảng màu xám là code mà hệ thống đã tạo sẵn nên ta không thể nhập hoặc sửa được.
Hình 5.6. Cửa sổ code view
158 Trước khi viết code thì ta cần chú ý tên của các đối tượng mà cần lấy ra khi triển khai. Tên của các đối tượng có thể thấy ở bên phải màn hình, ở mục COMPONENT BROWSER. Các bạn có thể thay đổi tên đối tượng để tiện cho việc viết code.
Tiếp theo qua phần Code View, ta có thể viết code cho phép toán cộng theo cách mô tả:
Dòng lệnh a = app.Nhap_AEditField.Value có nghĩa là ta gán giá trị của ô Edit Field đầu tiên cho a, “app” là đường dẫn của App Design, Nhap_AEditField là tên đối tượng (có thể nhìn bên phải màn hình), Value là lấy giá trị của nó. Tương tự các dòng lệnh b = app.Nhap_BEditField.Value.
Dòng lệnh c = a +b là ta gán tổng hai giá trị a và b cho một biến c nào đó.
Dòng lệnh app.TongButton. Text = num2str(c) là ta lấy giá trị của c để gán vào giá trị của Button để khi tính hiện lên giá trị tổng. Mà Button định dạng kiểu string, c hiện tại là kiểu Numberic nên phải chuyển từ kiểu số sang kiểu chuỗi. Dùng lệnh num2str() để chuyển kiểu số sang kiểu chuỗi.
Tương tự như vậy ta có thể viết code cho phép toán trừ, nhân và chia.
Hình 5.7. Hoàn thành code view
159 Bước 4: Mô phỏng mô bài toán
Sau khi lập trình xong ta nhấn RUN để chạy chương trình thì màn hình sẽ hiển thị một giao diện giống như ta đã thiết kế ở bên cửa sổ Design View. Ta nhập 2 số bất kì và nhấn ‘Button’ tương ứng với các phép toán cộng, trừ, nhân và chia thì ta sẽ được kết quả.
Hình 5.8. Xuất ra kết quả của bài toán
5.4.2. Sử dụng App Designer kết hợp với Simulink để tạo giao diện cho mô hình hệ thống xe lửa.
Ta có một bài toàn được mô phỏng từ Simulink (Trên mục 2.2.4.2. Xây dựng mô hình toán học bằng Simulink)
Hình 5.9. Ví dụ từ bài toán xây dụng mô hình Simulink
160 Model được tạo từ Simulink:
Hình 5.10. Ví dụ từ bài toán Simulink Các bước thực hiện bài toán:
Bước 1: Tạo cửa số App Designer mới
Trong cửa sổ Command Windows gõ lệnh “appdesigner” và Enter, sau đó chọn Blank App.
Cửa sổ App Designer mới:
Hình 5.11. Cửa sổ App Designer mới
161 Bước 2: Thiết kế giao diện với cửa số Designer View
Giao diện gồm có 2 phần:
Tab Model and Parameters (mô hình và các thông số đầu vào):
Hình 5.12. Thiết kế giao diện Model and Parameter Tab Results (hiển thị kết quả)
Hình 5.13. Thiết kế giao diện Results
162 Bước 3: Tiến hành viết code cho bài toán với cửa số Code View
Trong khung của khối Dropdown nhấp chuột phải chọn Callbacks để chuyển qua cửa sổ CodeView.
Hình 5.14. Tiến hành viết code cho bài toán với cửa số Code View Tiến hành viết code:
function ResultsdisplayDropDownValueChanged(app, event) value = app.ResultsdisplayDropDown.Value;
% đặt biến value bằng giá trị của app DropDown simin = Simulink.SimulationInput('trainsimulink');
% đặt biến simin là giá trị đầu vào của mô phỏng model simulink tên
“trainsimulink”
simin = simin.setVariable('M1',app.ENGINEMASSM1kgSpinner.Value);
simin = simin.setVariable('M2',app.CARMASSM2kgSpinner.Value);
simin = simin.setVariable('k', app.SPRINGCONSTANTKNmSpinner.Value);
simin = simin.setVariable('F',app.FORCEINPUTFNSpinner.Value);
simin = simin.setVariable('muy',app.FRICTIONCOEFFICIENTSpinner.Value);
% gán các biến trong model “trainsimulink” vào các giá trị của các app trong giao diện App Designer
stoptime = num2str(app.STOPTIMEsSpinner.Value);
163
% biến stoptime được gán giá trị của app STOPTIMEsSpinner và chuyển từ kiểu number sang kiểu string
simin = simin.setModelParameter('Stoptime', stoptime);
% gán thông số Stoptime của model simulink bằng giá trị của biến stoptime simOut = sim(simin);
% đặt biến simOut bằng kết quả sau khi mô phỏng của model “trainsimulink”
if strcmp(value,'Force input(N)') % so sánh biến value với chuỗi được đặt trước (ở đây là “Force input(N)”)
app.UIAxes.Title.String = value;
app.UIAxes.XLabel.String = 'time(s)';
app.UIAxes.YLabel.String = 'N';
% đặt các nhãn của trục X, Y và tên của đồ thị plot(app.UIAxes,simOut.y.time,
simOut.y.signals(2).values,"LineWidth",3,"Color",'blue');
% vẽ đồ thị vào app UIAxes với trục x là time còn trục y là giá trị của tín hiệu output ta cần
elseif strcmp(value,'Velocity(m/s)') app.UIAxes.Title.String = value;
app.UIAxes.XLabel.String = 'time(s)';
app.UIAxes.YLabel.String = 'm/s';
plot(app.UIAxes,simOut.y.time,
simOut.y.signals(1).values,"LineWidth",2,"Color",'red');
elseif strcmp(value, 'Choose') cla(app.UIAxes);
% làm mới app UIAxes end
end
Trong Callbacks của nút OPEN MODEL
164 Ta viết:
function OPENMODELButtonPushed(app, event) open_system('trainsimulink.slx')
end
%
Bước 4: Tiến hành mô phỏng
Sau khi lập trình xong ta nhấn RUN để chạy chương trình thì màn hình sẽ hiển thị một giao diện giống như ta đã thiết kế ở bên cửa sổ Design View. Ta có thể thay đổi các thông số đầu vào để quan sát sự thay đổi của tín hiệu đầu ra.
Đồ thị vận tốc:
Hình 5.15. Xuất ra kết quả vận tốc
165 Đồ thị lực đầu vào: