(完整文檔版)使用AMESIM進行控制策略仿真驗證_第1頁
(完整文檔版)使用AMESIM進行控制策略仿真驗證_第2頁
(完整文檔版)使用AMESIM進行控制策略仿真驗證_第3頁
(完整文檔版)使用AMESIM進行控制策略仿真驗證_第4頁
(完整文檔版)使用AMESIM進行控制策略仿真驗證_第5頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

(完整word版)使用AMESIM進行控制策略仿真驗證(完整word版)使用AMESIM進行控制策略仿真驗證(完整word版)使用AMESIM進行控制策略仿真驗證使用AMESIM進行控制策略仿真驗證概述在機電液控制系統的早期設計階段,已經構想出了初步控制策略,但還不具備條件進行RCP仿真或HiL仿真時,在計算機上對控制策略進行數字仿真是驗證其性能和減少BUG的唯一手段。目前電液控制系統的被控對象通常采用AMESIM建模。而控制策略的實現,如果采用AMESIM的”signal,controllib"的話,實現起來相當復雜。因此,很多仿真人員都愿意采用MATLAB/SIMULINK作為控制策略的實現平臺,這雖然降低的實現的復雜性,但卻必須采用AMESIM-SIMULINK聯合仿真的形式執行驗證,增加了驗證的難度并降低了執行的可靠性。事實上,AMESIM的”signal,controllib”中除了常規的模塊外,還有一個非常特別的“dynamic_extern_excutable(DYNEXE0)"模塊。顧名思義,它能夠調用外部應用程序參與仿真。這個模塊為控制策略的實現提供了絕佳的途徑。DYNEXE0模塊介紹描述DYNEXE0是一個用于與外部應用程序進行交互的接口模塊。模塊的左側端口和右側端口分別代表其輸入和輸出.在庫中選擇該模塊時,便可對輸入和輸出數量以及外部應用程序的整型參數和實型參數的數量進行定義,如下圖所示。需要注意的是,DYNEXE0不會對參數的有效性進行驗證。驗證必須在外部程序中完成。參數在仿真開始時被發送到應用程序中,AMESIM通過特殊“管道”與外部程序進通訊。通訊采用AMESIM內部的“HYPERLINK”qthelp://lmsimagine.lab/ame_dir/doc/stdlib/html/utils/OpenPipe.html”OpenPipe”應用進行初始化.注意:AMESIM必須采用C++編譯器才能使用DYNEXE0模塊!用法由于一般的控制系統都是MIMO系統,因此必須采用DYNMUX2和DYNDMUX2與DYNEXE0進行連接,如下圖所示即為一個5輸入5輸出系統。示例以如下圖所示正流量挖掘機控制策略驗證為例。正流量挖掘機控制策略的輸入為9個先導壓力和2個主泵壓力,還有2個主泵反饋電流,以及一個仿真時間輸入(后面會講到它的作用);輸出為2個主泵電流和4個優先控制電流。圖中的DYNEXE0模塊實際為一個15輸入10輸出系統,多出的輸入和輸出端口不使用即可。控制策略實現控制策略在外部應用程序中實現。應用程序代碼可在VisualStudio環境中采用標準C語言編寫,并引用AMESIM提供的頭文件。編程環境設置以VisualStudio2010為例,按以下步驟設置編程環境.Step1:新建項目。在VisualStudio中新建一個名為ZE230EEP的C++空項目,如下圖所示。點擊確定之后,VisualStudio生成如下圖所示窗口。窗口左側為解決方案資源管理器,可以看到新建的項目“ZE230EEP”已經列在了解決方案樹形目錄下。Step2:添加源文件.右鍵點擊解決方案資源管理器中的“源文件”項,依次選擇“添加”、“新建項”菜單,出現如下圖所示對話框。從對話框中添加一個名稱為“Controller.cpp"的C++文件,點擊確定。Step3:配置項目屬性。右鍵點擊解決方案資源管理器中的項目名,選擇屬性菜單,出現如下圖所示對話框.切換到“C/C++”目錄項,點擊“常規”條目,在右側的“附加包含目錄”中添加“D:\AMESim\v1300\lib”路徑,即AMESIM的安裝目錄。注意:路徑必須使用標準絕對路徑,而不能使用環境變量!再切換到“高級”條目,在“編譯為"選項中選擇“編譯為C代碼(/TC)”,如下圖所示。然后切換到“鏈接器"目錄項,點擊“常規”條目,在“附加庫目錄”中添加“D:\AMESim\v1300\lib\win32”路徑,如下圖所示.再切換到“輸入”條目,在“附加依賴項”中添加“AME。lib”,在“忽略特定默認庫”中添加“MSVCRTD.lib",如下圖所示。最后點擊“確定",完成項目的配置。Step4:在源代碼中添加AMESIM頭文件.雙擊打開Controller。cpp,這是一個空白文件,在文件中添加以下代碼:#include<signal.h>#include〈stdio.h〉#include<stdlib。h>#include<math.h〉#include〈ameutils。h〉以上五個頭文件都是項目必須的,前四個為編程環境自帶,而ameutils。h由AMESIM提供。添加后,可以看到解決方案資源管理器的“外部依賴項"目錄中多了很多頭文件,且VisualStudio的自動代碼檢查并未報錯,表明ameutils。h已經被項目所識別。源代碼結構說明#include〈signal。h>#include〈stdio。h〉#include〈stdlib。h〉#include〈math.h〉#include<ameutils。h>/*TODO:添加需要包含的額外頭文件*//*例如:*/#include〈function。h〉//可將自定義函數寫在function。h里面/*常量定義*//*注意:此處定義的參數及變量數量必須與AMESIM模型中DYNEXE0模塊定義的數量保持一致*/#define NUM_IP 1//整型參數數量#define NUM_RP 2//實型參數數量#define NUM_INPUTS 2//輸入數量#define NUM_OUTPUTS 2//輸出數量/*TODO:添加需要定義的其它常量*//*例如:*/#define GRAVITY 9。81#define PI 3。1416/*TODO:也可在此位置添加所需的自定義函數,而不放在function.h里*//*例如最大值函數:*/staticdoubleMax(double_x,double_y){ return_x〉_y?_x:_y;}/*主函數*/intmain(){ int num_rp =NUM_RP; int num_ip =NUM_IP; int num_inputs =NUM_INPUTS; int num_outputs =NUM_OUTPUTS; /*數組iparam用于存儲整型參數*/ int file[2],iparam[NUM_IP],flag; /*數組rparam用于存儲實型參數,數組input用于存儲控制策略的輸入,數組output用于存儲控制策略的輸出*/ double rparam[NUM_RP],input[NUM_INPUTS],output[NUM_OUTPUTS]; /*TODO:添加與控制算法有關的程序內部參數、內部變量定義,以及內部變量的初始化*/ /*例如:*/ int control_mode;//整型參數 double Kc;//實型參數 double current_max;//實型參數 double speed=0;//內部變量 double pressure=0;//內部變量 double current_pump=0;//內部變量 double current_motor=0;//內部變量 /*連接AMESIM模型*/ /*將AMESIM模型DYNEXE0模塊中定義的實型參數讀入到rparam數組中,整型參數讀入到iparam數組中*/ connec_(file,&num_rp,rparam,&num_ip,iparam,&num_inputs,&num_outputs); /*TODO:將模型參數賦值給之前定義的內部參數,以便從參數名即可獲知參數的意義*/ /*例如:*/ control_mode =iparam[0]; Kc =rparam[0]; Current_max =rparam[1]; /*循環執行控制策略算法邏輯*/ while(1) { /*從AMESIM獲取輸入,并將其存儲到數組input中*/ getinp_(&(file[0]),&num_inputs,input,&flag); /*TODO:將input數組中的元素賦值給內部變量,以便從變量名即可獲知變量的意義*/ /*例如:*/ speed=input[0]; pressure=input[1]; /*TODO:添加控制策略的算法邏輯*/ /*TODO:將算法輸出賦值給output數組中的元素*/ /*例如:*/ output[0]=current_pump; output[1]=current_motor; /*向AMESIM發送輸出*/ senout_(&(file[1]),&num_outputs,output); } return0;}仿真步長與控制周期AMESIM采用的是變步長仿真機制,每個仿真步長內,外部程序中的控制算法邏輯都會被執行一次。但是實際電液控制系統中,控制算法邏輯具有固定的控制周期,比如0。01s,即控制算法每0.01s才執行一次,輸出也是每0。01s即更新一次.如果仿真步長與控制周期不一致(絕對會不一致),就極有可能導致仿真結果出現謬誤。為了解決上述問題,必須從AMESIM建模和控制策略實現兩方面進行改進.首先,為DYNEXE0模塊增加一個仿真時間采樣輸入(必須使用零階保持器),如下圖所示。并將采樣器的采樣時間設置為與控制周期一致.這樣一來,AMESIM的仿真步長就會被限制在控制周期以內(仿真步長不大于控制周期),且必然有一部分仿真時刻與控制時刻重合.再在源代碼中插入一段代碼: double time=-1; connec_(file,&num_rp,rparam,&num_ip,iparam,&num_inputs,&num_outputs); while(1) { getinp_(&(file[0]),&num_inputs,input,&flag); if(input[0]==time)//input[0]為仿真時間采樣輸入 { senout_(&(file[1]),&num_outputs,output); continue; } time=input[0]; /*TODO:添加控制策略的算法邏輯*/這段代碼的意義是:當本次仿真時刻與上次仿真

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論