matlab的gui學習以及新的電機控制想法

最近因爲一直想做個對永磁同步電機進行電磁計算的小程序,覺得學習windows api可能有點費時,而且一些複雜算法在matlab中可能更容易實現就學習了matlab gui的編程。用gui做了幾個小例子,分別是學生成績查詢、gui控制simulink等分享一下心得。
1.gui控制simulink實例:
這是一個用gui控制simulink的實例,通過輸入放大倍數可以將正弦波形繪製在gui的座標系上。
在這裏插入圖片描述
在這裏插入圖片描述
其按鈕的回調函數是:
function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) a=str2num(get(handles.edit1,'String')); options=simset('SrcWorkspace','current'); sim('s2',[],options); axes(handles.axes1); plot(time,b);
通過這個例子我們可以理解一個gui控件的回調函數主要包括三個參數分別是hobject,eventdata,與handles。其中hobject是當前控件的句柄,handles是整個gui的句柄,而eventdata是保留參數。而實現調用simulink主要是兩個函數一個是simset一個是sim。
在這裏插入圖片描述
第二個例子是學生成績查詢系統。
在這裏插入圖片描述
其讀取文件控件的代碼塊如下:function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [FileName PathName]=uigetfile({'*.xlsx','ExcelFiles(*.xlsx)';... '*.txt','TXTfiles(*.txt)';'.','ALL files(*.)'},'choose a file');%打開文件,將文件名與路徑分別存儲 L=length(FileName);%判斷文件名的長度,如果小於5則沒有打開文件報錯 if L<5 msgbox('please choose a new file','wrong file'); return; end test=FileName(1,L-3:L);%文件名最後四位提取出來 switch test case '.txt' str=[PathName FileName];%將文件路徑與文件名保存在str中以便顯示在edit中 set(handles.edit1,'string',str); fin=fopen(str,'r');%打開str str=fgetl(fin);%讀一行 [str1 str2 str3 str4]=strread(str,'%s %s %s %s','delimiter',' ');%將一行字符分別存儲在四個str中 xingming(1)=str1; counter=2; h=waitbar(0,'請稍等正在讀取文件。。。'); while feof(fin)==0%判斷是否到達文件尾部 str=fgetl(fin); [name chinese english math]=strread(str,'%s %d %d %d','delimiter',' '); xingming(counter)=name; chengji(counter-1,:)=[chinese english math]; counter=counter+1; end h=waitbar(1,h,'已完成讀取'); pause(2); set(handles.listbox1,'string',xingming); handles.chengji=chengji; guidata(hObject,handles); delete(h); fclose(fin); case 'xlsx' str=[PathName FileName]; h=waitbar(0,'請稍等正在讀取文件。。。'); set(handles.edit1,'string',str); [chengji xingming]=xlsread(str);%讀字符和數字分別放在chengji和xingming h=waitbar(1,h,'已完成讀取'); pause(2); set(handles.listbox1,'string',xingming(:,1)); handles.chengji=chengji; delete(h); guidata(hObject,handles); otherwise msgbox('please choose a new file','wrong file'); return; end
像 listbox這些控件的一個關鍵參數就是value,這個value值決定了你在控件中選中的是第幾行,往往在顯示的時候需要用到。這個例子中涉及了像調用打開文件的函數,將excel和txt的文本讀取的函數、滾動條函數、以及消息對話框函數等等。
因爲本人主要研究方向是電機這一塊,因此正在準備做一個gui界面能夠輸入電機的本體設計參數然後進行電磁計算,再利用一些優化算法例如遺傳算法、粒子羣算法對本體結構進行優化。便於控制。看了遺傳算法和粒子羣算法的大致知識,發現一個問題就是電機的適應度函數,不太好用具體的函數形式寫出來。
目前本人有個想法是通過gu輸入參數後,利用matlab去自動打開maxwell將gui輸入的參數做成電機模型,自動仿真,然後利用matlab將maxwell的仿真結果提取出來。這樣就無需考慮適應度函數的問題。(可能仿真時間非常長)然後再利用算法去優化參數不斷進行有限元仿真。目前正在研究中。不知道我這個想法有沒有可能實現。有大佬做過希望可以給我一點指導。
我還有做了一些gui模型例如畫板、gui之間傳遞信息需要的加我微信。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章