Khối block GUI xây dựng nhằm dùng trong mô phỏng để truyền dữ liệu giữa Simulink và một giao diện đồ họa (GUI) để có thể vẽ hoặc lấy số liệu từ quá trình mô phỏng quá trình. Từ mô hình quá trình đã trình bày ta xây dựng khối Block GUI có dạng (khối Tank-GUI được xây dựng bằng khối Subsystem).
Hình 3.16: Giao diện khối block Tank-GUI
Thực chất việc truyền số liệu từ GUI vào Simulink để mô phỏng là lấy số liệu từ các thanh slider tới các đầu ra của khối Tank-GUI hay chính là việc truyền giá trị của các thanh slider tới các khối Constant. Và các khối Constant này nối trực tiếp tới
37
Hình 3.17: Các đầu ra của khối Tank-GUI được làm bằng Subsystem.
3.3.2 Xây dựng giao diện GUI.
a, Xây dựng giao diện.
Ta xây dựng giao diện GUI gồm có 2 thanh trượt slider. GUI có tác dụng truyền số
liệu từ của 2 thanh trượt tới các đầu ra của khối Tank-GUI.
Hình 3.17: Giao diện GUI
Từ hình 3.17 trong đó có:
- Thanh slider 1 thẳng đứng có giá trị từ 0 → 100 là giá trị của Setpoint của khối Tank-GUI, hàm Callback của slider 1 có tác dụng chuyển giá trị của thanh slider 1 vào ô Edit Text cạnh khối Text “SetPoint”.
- Thanh slider 2 nằm ngang có giá trị từ 0 → 1 là độ mở valve 1 của khối Tank-GUI, hàm Callback của slider 2 chuyển giá trị của slider 2 vào ô Edit Text cạnh khối Text “Do mo val 1”.
38 Hàm Callback cho các thanh slider: Callback của thanh Slider 1:
function slider1_Callback(hObject, eventdata, handles) % hObject handle to slider1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'Value') returns position of slider
% get(hObject,'Min') and get(hObject,'Max') to determine range of slider
% Hints: get(hObject,'Value') returns position of slider
% get(hObject,'Min') and get(hObject,'Max') to determine range of slider
//Đặt biến NewSP bằng giá trị của thanh slider. NewSP = get(hObject, 'Value');
//Đặt giá trị của NewSP vào ô Edit Text 1. set(handles.edit2,'String',NewSP)
//Đặt giá trị NeWSP vào khối Constant trong khối Subsystem của Model Matlab123
set_param('Matlab123/Subsystem/Constant','value',num2str(NewSP)) Callback của thanh Slider 2:
function slider2_Callback(hObject, eventdata, handles) % hObject handle to slider2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'Value') returns position of slider
% get(hObject,'Min') and get(hObject,'Max') to determine range of slider
% Set the value of the KfCurrentValue to the new value % set by slider.
set(handles.edit1,'String',NewVal)
% Set the Gain parameter of the Kf Gain Block to the new value. set_param('Matlab123/Subsystem/Constant1','value',num2str(NewVal))
b, Cách thức gọi GUI khi mô phỏng.
Trong cửa sổ Simulink của file *.mdl, muốn hiện GUI khi bấm nút Start Simulation thì sử dụng tính Callbacks như sau:
- File >>Model Properties >> Callbacks >> StartFcn
- Trong vùng Simulation start function, nhập tên của GUI cần gọi.
Trong cửa sổ file “Matlab123.mdl” muốn gọi giao diện GUI có tên GUI khi nhấn Simulation ta làm như sau:
39
Hình 3.18: Giao diện Matlab123.mdl
Sau đó cửa sổ Model Properties xuất hiện. Ta đánh tên GUI có tên là GUI vào vùng Simulation start function.
40
Khi đó khi nhấn Simulation thì giao diện GUI xuất hiện. Ta di chuyển vị trí của các slider đểđặt giá trị cho các đầu ra. Kết quảđường màu vàng là giá trị
Setpoint, còn đường màu tím là độ mở valve 1.
41
CHƯƠNG 4: ĐÁNH GIÁ VÀ KẾT LUẬN
4.1 Đánh giá
Đề tài:”Thiết kế toolbox Matlab phục vụ thí nghiệm điều khiển quá trình” là một đề
tài hay và hữu ích phục vụ cho việc thí nghiệm ĐKQT ở trường Đại Học Bách Khoa, giúp cho sinh viên có cách tiếp cận với thực hành, đây là một công việc hữu ích và rất cần thiết. Bắt đầu bước vào quá trình tìm hiểu đề tài thì mọi thứđều mới do đó ban đầu công việc lập trình của chúng em không có tiến triển nhiều, hay đúng hơn là không thu nhận được điều gì. Tìm hiểu qua mạng cũng thấy được vấn đề
mình cần tìm, một mặt là do không biết là mình cần gì để tìm hiểu. Một đề tài mà hướng tìm ban đầu chỉ là tài liệu Help của matlab nhưng nó cũng là một khó khăn
đối với những sinh viên chưa tiếp cận nhiều với tài liệu chuyên ngành viết bằng tiếng Anh và ít tiếp xúc với phần mềm Matlab & Simulink để làm việc. Qua nhiều ngày đọc tài liệu mà không thu được gì vì phần Help Matlab khá đồ sộ. Phần mềm toolbox điều khiển quá trình do Thầy Nghiêm Xuân Trường được chúng em tận dụng để khai thác thông tin trong đó, nhưng cũng chỉ biết để đấy không biết cách khai thác như thế nào? Một sự khó khăn khá lớn trong việc tìm hiểu đề tài. Một lần tập trung tìm thông tin trong cuốn “Matlab & Simulink dành cho kỹ sư Điều Khiển Tự Động” của Thầy Nguyễn Phùng Quang đã giúp khơi gợi ra vấn đề và phương thức để triển khai đề tài. Phần chương 7 của cuốn sách có nói tới việc lập trình tạo ra một toolbox bằng hàm S-function. Công việc tìm kiếm cũng có tiến triển nhưng lại gặp khó khăn trong quá trình xây dựng giao diện, vì khối function chỉ có 1 vào 1 ra trong khi mô hình yêu cầu có nhiều đầu vào-ra. Quá trình mất một thời gian khá dài để có thể tìm cách lập trình cho một ví dụ đơn giản 1 vào- 1 ra chạy được. Sau rồi qua quá trình tìm hiểu thì phần Example trong thư viện User-Defined Function
đã cho thấy rằng trong matlab & Simulink có tất cả những ví dụ cần thiết để phục vụ quá trình lập trình, nhưng việc tìm được nơi có phần có ứng dụng quả thực không dễ dàng. Sau một thời gian tìm hiểu các ví dụ và làm các ví dụ đơn giản thì cuối cùng thì mô hình của khối bình trộn cũng được hoàn thành chạy khá ổn. Nhưng khi đến phần thiết kế giao diện GUI cho mô phỏng thì quả là một điều khó khăn, nếu chỉ thiết kế GUI chạy độc lập thì là một việc khá đơn giản nhưng làm thế
nào để khi bấm nút Simulation trong Simulink thì giao diện GUI hiện ra. Công việc tìm kiếm không dễ dàng và gần nhưđã có lúc bế tắc không thể nào tìm ra cách làm
được việc đó, nhưng may nhờ một lần tình cờ thì cách xuất GUI ra cũng làm được, rồi sau đó đến phần truyền tham số khi mô phỏng. Làm thể nào để khi thao tác trên GUI thì thông số cũng chuyển được qua cho Model Simulink? Lại một câu hỏi không biết tìm câu trả lời ở đâu. Một việc khá khó khăn, việc tìm kiếm chủ yếu là lên mạng tìm hiểu và tìm được tài liệu Help của Matlab nói toàn bộ về phần GUI [3]. Phần chương 10 có viết khá rõ về việc truyền giá trị trên các slider vào các khối Gain, nhưng mô hình đòi hỏi phải truyền bằng một khối khác, và sau nhiều lần thử
thì khối Constant nạp giá trị trực tiếp từ slider và đưa ra đầu ra, đáp ứng được yêu cầu cần thiết. Trong quá trình làm thì việc lấy số liệu từ Simulink ra GUI để vẽđồ
42
được các giá trị rời rạc từ Simulink sang GUI, nhưng trong đây em không viết rõ vì phần Chương 10 của tài liệu 3 có nói khá rõ việc làm này vì nó khá phức tạp.
4.2Kết luận
Đồ án này đã làm được các vấn đề sau:
- Xây dựng được khối mô hình bằng hàm S-function có tính bảo mật cao hơn với viết bằng Subsystem với đối tượng là bình trộn nhiệt độ của 2 dòng chất lỏng, với các tham số của quá trình. Tuy nhiên, để ứng dụng vào thì nghiệm thì các tham số nên được đổi tên để tránh việc sinh viên không cần làm cũng có thể xác định được đối tượng. Đây cũng sẽ là nguồn tài liệu cơ bản để có thể phát triển thêm sau này.
- Xây được được khối GUI bất kì nhưng để chạy được phù hợp với Đồ Án này thì khối GUI chưa thực hiện được nhiệm vụ dùng mô phỏng được đối tượng
đã cho. Phần GUI giải quyết được vấn đề của việc liên kết GUI và Simulink và việc truyền tham số qua lại giữa chúng. Tuy nhiên, việc truyền tín hiệu liên tục vẫn còn một số điểm nhỏ mà em chưa đủ thời gian để hoàn thành
được. Hướng phát triển thêm của đồ án này về phần truyền tham số ta có thể
sử dụng phương thức truyền tham số từ Simulink tới Work Space dưới dạng mảng và ma trận bằng khối To Workspace, rồi từđó có thể truyền tham số từ
Work Space vào GUI và lưu dữ liệu vào trong ListBox. Sau đó sẽ thực hiện lệnh vẽ các dữ liệu nhờ lệnh plot khi lập trình trong GUI.
43
TÀI LIỆU THAM KHẢO
[1] “Matlab & Simulink Dành Cho Kỹ Sư Điều Khiển Tự Động”. Nguyễn Phùng Quang. NXB Khoa Học Và Kỹ Thuật 2006.
[2] “Cơ sở hệ thống điều khiển quá trình”. Hoàng Minh Sơn. NXB Bách Khoa-Hà Nội 2006.
[3] Tài liệu Help của matlab: “Creating Graphical User Interfaces.pdf”. [4] Writing S-Function.pdf
[4] Các bài viết trong trang forum :
http://www.dientuvietnam.net/forums/matlab-labview-20sim-98/lap-trinh-gui- trong-matlab-594/