盧寧,陳天保,鄭宏遠(yuǎn),龔濤
(1.北京建筑大學(xué)機(jī)電與車輛工程學(xué)院,北京 100044;2.北京市建筑安全監(jiān)測(cè)工程技術(shù)研究中心,北京 100044)
隨著計(jì)算機(jī)技術(shù)的進(jìn)步[1],虛擬樣機(jī)技術(shù)、參數(shù)化建模和計(jì)算機(jī)輔助工程(Computer Aided Engineering,CAE)技術(shù)得到快速發(fā)展[2-3],其中,虛擬仿真技術(shù)在工業(yè)生產(chǎn)應(yīng)用中日益發(fā)揮著重要的作用。機(jī)電液一體化技術(shù)因涉及機(jī)械、電子、液壓、控制、氣動(dòng)、軟件等多個(gè)不同的學(xué)科領(lǐng)域[4],研究較為復(fù)雜。因此,機(jī)電液系統(tǒng)的虛擬仿真技術(shù)逐漸發(fā)展起來。
針對(duì)機(jī)械模型、液壓模型、控制模型,國(guó)外科技公司開發(fā)了多種強(qiáng)大的計(jì)算機(jī)輔助設(shè)計(jì)與仿真軟件。目前,國(guó)內(nèi)外還沒有成熟的機(jī)電液一體化仿真平臺(tái)商業(yè)軟件可以建立完整的機(jī)電液聯(lián)合仿真模型[5]。因此,通過多軟件聯(lián)合仿真實(shí)現(xiàn)機(jī)電液一體化的功能十分必要。文獻(xiàn)[6]利用ADAMS、Simulink、AMESim的聯(lián)合仿真接口,建立一種六自由度運(yùn)動(dòng)平臺(tái)的機(jī)電液一體化虛擬實(shí)驗(yàn)系統(tǒng),為運(yùn)動(dòng)平臺(tái)的優(yōu)化奠定了基礎(chǔ)。文獻(xiàn)[7]基于ADAMS、Simulink、AMESim的機(jī)電液聯(lián)合仿真技術(shù),比較了傳統(tǒng) PID控制和自適應(yīng)模糊PID控制2種控制方式,得出了自適應(yīng)模糊PID控制方式系統(tǒng)響應(yīng)的跟隨性能更好的結(jié)論。文獻(xiàn)[8]建立機(jī)電液聯(lián)合仿真模型,驗(yàn)證了盤型閘的恒減速制動(dòng)比二級(jí)制動(dòng)效果更優(yōu)異。
由此可見,多軟件的機(jī)電液聯(lián)合仿真技術(shù)在應(yīng)用研究中已經(jīng)越來越主流。但各軟件間的官方數(shù)據(jù)傳輸接口并沒有完成互通,研究人員在實(shí)驗(yàn)過程中,若要調(diào)整仿真參數(shù),則首先需要切換至對(duì)應(yīng)軟件,找到指定模塊中的對(duì)應(yīng)參數(shù)進(jìn)行修改。當(dāng)控制系統(tǒng)模型較為復(fù)雜時(shí),頻繁地調(diào)參及不直觀的變量位置會(huì)使得仿真效率較低。為了解決這個(gè)問題,本文作者提出建立一個(gè)第三方的仿真控制平臺(tái)管理各仿真軟件的數(shù)據(jù),以此簡(jiǎn)化仿真操作流程并提高仿真效率。
在以Simulink為主[9]的聯(lián)合仿真的基礎(chǔ)上,對(duì)各軟件的數(shù)據(jù)傳輸接口和仿真語言深入研究,通過Python分別建立與ADAMS、Simulink和AMESim的仿真交互接口,提出一種以TCP/IP作為與ADAMS命令交互的通信協(xié)議的方法;以MATLAB虛擬環(huán)境為中介,Python通過執(zhí)行MATLAB函數(shù)實(shí)現(xiàn)與Simulink的交互;以AMESim的Python應(yīng)用程序編程接口(Application Programming Interface,API)實(shí)現(xiàn)編程建模,該代碼中包含了液壓系統(tǒng)中的所有信息,從而實(shí)現(xiàn)與AMESim中元件的交互。以此構(gòu)建出能與各軟件交流的第三方仿真集成平臺(tái),并能在該平臺(tái)直接修改各軟件的主要仿真參數(shù),通過該聯(lián)合仿真平臺(tái)進(jìn)行仿真實(shí)驗(yàn),驗(yàn)證聯(lián)合仿真平臺(tái)的可行性、可操作性強(qiáng)和仿真效率高。
仿真平臺(tái)的總體架構(gòu)設(shè)計(jì)使用Python作為開發(fā)語言。作為一種解釋性語言[10],Python不僅擁有強(qiáng)大的標(biāo)準(zhǔn)庫(kù),還擁有龐大的第三方開源庫(kù)。而PyQt則是Python對(duì)Qt庫(kù)進(jìn)行完整封裝的跨平臺(tái)GUI庫(kù),它提供窗口控件集合[11]的界面設(shè)計(jì)方式和能自動(dòng)轉(zhuǎn)換成Python代碼,可以極大提高開發(fā)效率并高效運(yùn)行。因此,綜合考慮開發(fā)難度、靈活性和可移植性,使用Python作為開發(fā)語言更合適。開發(fā)的仿真平臺(tái)人機(jī)交互界面如圖1所示,通過平臺(tái)左邊的圖標(biāo)和對(duì)應(yīng)的按鈕可切換至不同的軟件設(shè)置界面。
圖1 人機(jī)交互界面Fig.1 Human-machine interface
仿真平臺(tái)的總體架構(gòu)如圖2所示,它是由仿真平臺(tái)客戶端、數(shù)據(jù)交換模塊、數(shù)據(jù)處理、仿真平臺(tái)服務(wù)端等功能模塊構(gòu)成的綜合性機(jī)電液一體化數(shù)字仿真平臺(tái)。
圖2 仿真平臺(tái)總架構(gòu)Fig.2 Overall architecture of the simulation platform
仿真平臺(tái)客戶端包括人機(jī)交互界面和仿真結(jié)果可視化顯示,不同的部分表示對(duì)應(yīng)軟件的命令交互操作界面,仿真結(jié)果通過對(duì)仿真數(shù)據(jù)的本地化儲(chǔ)存,然后進(jìn)行預(yù)處理,在去除無用參數(shù)的同時(shí)對(duì)數(shù)據(jù)進(jìn)行排列整理,使用Python的可視化繪圖庫(kù)Matplotlib對(duì)處理后的數(shù)據(jù)繪圖并以子程序的形式顯示在仿真平臺(tái)客戶端。
數(shù)據(jù)交換模塊是人機(jī)交互界面控制仿真進(jìn)程的核心方式:通過TCP/IP協(xié)議傳入ADAMS能夠識(shí)別的特定語句,能夠控制ADAMS的仿真;MATLAB可以通過指定的函數(shù)修改Simulink中一些模型的固定參數(shù),因此,對(duì)于不需變動(dòng)的固定設(shè)置可以將它編寫進(jìn)m文件,對(duì)于需要?jiǎng)討B(tài)調(diào)整的參數(shù)則需要直接寫入程序內(nèi),二者均可以通過Python啟動(dòng)MATLAB Engine直接運(yùn)行;AMESim則對(duì)Python開放了API,通過指定函數(shù)可以修改AMESim液壓模型中任意元件的大多數(shù)仿真參數(shù)。通過此模塊,用戶可以將仿真關(guān)鍵參數(shù)直接傳入仿真軟件中,從而達(dá)到快速仿真的目的,且沒有操作門檻。
仿真平臺(tái)服務(wù)端則負(fù)責(zé)實(shí)現(xiàn)機(jī)電液聯(lián)合仿真。目前,ADAMS、AMESim和Simulink間的數(shù)據(jù)接口都已經(jīng)成熟,在建立機(jī)電液聯(lián)合仿真分析平臺(tái)之前,需要先搭建出機(jī)械系統(tǒng)、液壓系統(tǒng)和控制系統(tǒng)。聯(lián)合仿真數(shù)據(jù)交換原理如圖3所示,將AMESim/MATLAB接口和ADAMS/MATLAB接口在Simulink中做對(duì)接,液壓輸出通過AMESim/MATLAB接口傳遞到Simulink中,然后通過ADAMS/MATLAB接口將輸出傳遞到機(jī)械系統(tǒng)中,以此實(shí)現(xiàn)AMESim和ADAMS在Simulink中的數(shù)據(jù)交換。
圖3 聯(lián)合仿真數(shù)據(jù)交換原理Fig.3 Principle of data exchange in co-simulation
由于軟件的開放性有限,國(guó)內(nèi)外學(xué)者對(duì)ADAMS仿真平臺(tái)的二次開發(fā)技術(shù)的應(yīng)用主要是通過定制ADAMS軟件的專用界面,通過錄制宏文件和編寫用戶子程序組成使用界面的動(dòng)作響應(yīng),以此實(shí)現(xiàn)目標(biāo)功能。ADAMS偏向于支持用戶子程序二次開發(fā)并連接至用戶定制界面的方法,且提供了FORTRAN語言編寫的子程序模板,子程序能利用通用程序設(shè)計(jì)語言的功能來定義ADAMS/View不能提供的函數(shù),它具有很強(qiáng)的通用性和靈活性。但用戶必須將寫成的子程序使用獨(dú)立的FORTRAN編譯器編譯,然后連接到ADAMS以創(chuàng)建ADAMS/Solver用戶庫(kù)文件,之后可以連同該庫(kù)與ADAMS/Solver一起運(yùn)行。此方式基于ADAMS內(nèi)置人機(jī)交互庫(kù)使用,只能保存成數(shù)據(jù)庫(kù)文件然后打開ADAMS讀取該庫(kù)文件使用,面對(duì)現(xiàn)代多種仿真技術(shù)的耦合,它在編程和功能拓展方面并不具有優(yōu)勢(shì)。
因此,針對(duì)上述缺點(diǎn),提出使用TCP/IP協(xié)議技術(shù)與ADAMS形成仿真交互。TCP/IP技術(shù)的使用提供了ADAMS二次開發(fā)的一種新方式,因?yàn)橐訲CP/IP作為通信技術(shù)而開發(fā)出的ADAMS第三方仿真平臺(tái)具有獨(dú)立性與強(qiáng)大的拓展性,這也為實(shí)現(xiàn)基于ADAMS的機(jī)電液聯(lián)合仿真平臺(tái)的開發(fā)提供了一個(gè)方向。
而與傳統(tǒng)ADAMS自身的開發(fā)環(huán)境相比,在GUI設(shè)計(jì)、靈活性和可移植性等方面,Python明顯優(yōu)于ADAMS,因此選擇Python作為ADAMS二次開發(fā)編程語言更合適。
ADAMS二次開發(fā)平臺(tái)的設(shè)計(jì)路線如圖4所示,它由仿真平臺(tái)客戶端、ADAMS服務(wù)端和交互命令模塊3個(gè)模塊組成。
圖4 ADAMS仿真平臺(tái)原理Fig.4 Principle of ADAMS simulation platform
仿真平臺(tái)客戶端是負(fù)責(zé)與用戶交互的人機(jī)交互界面,用戶可以通過此集成平臺(tái)完成對(duì)模型的導(dǎo)入、參數(shù)設(shè)置、仿真控制等操作;ADAMS服務(wù)端則是以ADAMS軟件為核心的動(dòng)力學(xué)計(jì)算模塊。啟動(dòng)文件是優(yōu)化ADAMS開啟后的默認(rèn)程序和初始化與外部軟件的通信功能,會(huì)隨著ADAMS啟動(dòng)自動(dòng)被其讀取并運(yùn)行。
交互命令模塊是仿真平臺(tái)客戶端和ADAMS服務(wù)端仿真交互的通道,仿真的控制和數(shù)據(jù)傳遞采用受ADAMS服務(wù)組件Adams Commannd Server支持的TCP/IP技術(shù)。仿真平臺(tái)通過TCP/IP通信協(xié)議訪問該接口,而ADAMS作為服務(wù)器可以偵聽來自外部應(yīng)用程序的命令。在交互命令語句復(fù)雜時(shí),可以通過命令讓ADAMS讀取宏指令,批量執(zhí)行ADAMS/View命令,仿真平臺(tái)通過命令語句更高效地控制ADAMS仿真。
ADAMS每次啟動(dòng)時(shí)都會(huì)對(duì)工作界面進(jìn)行初始化,且ADAMS的服務(wù)組件Adams Commannd Server支持的TCP/IP通信服務(wù)默認(rèn)關(guān)閉,因此需要編制啟動(dòng)文件,在軟件啟動(dòng)時(shí)簡(jiǎn)化工作界面并啟用TCP/IP服務(wù)。
在ADAMS安裝目錄中的aview文件夾下新建文本文件,并編寫ADAMS初始化程序,之后更改文件名稱和擴(kuò)展名為"aviewAS.cmd"。
部分代碼如下:
interface model_browser undisplay
!關(guān)閉模型瀏覽器
interface ribbon undisplay
!關(guān)閉狀態(tài)欄
int tool undis tool = .gui.main.status_toolbar
!關(guān)閉工具欄
int grid und grid = .gui.grid &view = ( db_default(.system_defaults,"view" ))
!關(guān)閉默認(rèn)彈出窗口
command_server start
!開啟TCP/IP服務(wù)組件
······
完成之后重新啟動(dòng)ADAMS并打開“CMD Command Window”命令框,輸入“command_server show”會(huì)出現(xiàn)圖5所示的窗口,說明啟動(dòng)文件已生效,TCP/IP服務(wù)已隨軟件自啟,地址為本機(jī),默認(rèn)端口號(hào)為5002,外部軟件可通過特定語句與ADAMS進(jìn)行交互。
圖5 顯示窗口Fig.5 Display window
由于是建立第三方仿真平臺(tái)客戶端,且首次將TCP/IP技術(shù)應(yīng)用于ADAMS二次開發(fā),Adams View Command Server傳輸?shù)拿钫Z句需要符合ADAMS的通用命令格式,因此還需要編寫基于TCP/IP協(xié)議的通用命令發(fā)送與數(shù)據(jù)接收程序,才能滿足第三方仿真平臺(tái)客戶端的使用要求。
TCP/IP收發(fā)模塊的運(yùn)行流程如圖6所示,2種通用命令為:指令命令和查詢命令。這些命令通過TCP/IP協(xié)議以字符串的形式,通過“client_socket.send(…)”程序發(fā)送給ADAMS服務(wù)端。
圖6 TCP/IP收發(fā)模塊運(yùn)行流程Fig.6 Flow of TCP/IP transceiver module operation
其中指令命令是讓ADAMS執(zhí)行相應(yīng)的動(dòng)作指令,每一條指令命令字符串必須以“cmd ”開頭才能被ADAMS識(shí)別,既可以單獨(dú)發(fā)送一條指令,包括ADAMS宏指令文件 ,也可以循環(huán)讀取并發(fā)送一個(gè)列表里的所有命令。
以導(dǎo)入名“model_import_macro.cmd”的ADAMS宏文件為例,部分代碼如下:
import socket #導(dǎo)入模塊
cmds =
[" cmd macro read macro_name=import file_name=
′D:/ADAMS/model/model_macro.cmd′",#宏文件位置
" cmd import "]#命令列表,包含兩條命令
for cmd in cmds:#循環(huán)讀取命令列表
client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
······
查詢命令是讓ADAMS以字符串形式返回查詢的數(shù)據(jù),每一條查詢指令必須以“query”開頭,以發(fā)送“OK”表示結(jié)束,ADAMS返回查詢的結(jié)果并通過“client_socket.recv(1024)”接收數(shù)據(jù)且賦給變量。
以查詢MARKER_2的坐標(biāo)值為例,部分代碼如下:
import socket #導(dǎo)入模塊
client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client_socket.connect(("localhost",5002))
queries = ["query MARKER_2.location ",
" OK"] # 查詢目標(biāo)查詢
for query in queries:
client_socket.send(bytes(query,'utf-8')) #發(fā)送命令
recv_data = client_socket.recv(1024) #接收數(shù)據(jù)
······
該收發(fā)模塊具有功能單一且需要多次使用的特點(diǎn),因此將該模塊程序設(shè)計(jì)成Python類,指令命令和查詢命令設(shè)計(jì)成構(gòu)造方法,并對(duì)此數(shù)據(jù)交換接口進(jìn)行數(shù)據(jù)封裝,以便調(diào)用所有程序,使得ADAMS部分具有強(qiáng)大的可擴(kuò)展性,可以滿足未來需要增加的仿真需求與方式。
Simulink是MATLAB的一個(gè)組件[12],能夠調(diào)用MATLAB的函數(shù)庫(kù)并能兼容其他專業(yè)軟件的擴(kuò)展,它提供的基于Windows模型化圖形輸入交互方式[13]可以快速實(shí)現(xiàn)動(dòng)態(tài)系統(tǒng)建模和仿真,是MATLAB的重要組成部分。Python無法直接與Simulink模型交互,但是可以通過與MATLAB交互實(shí)現(xiàn),MATLAB提供的外部語言接口可與其他編程語言進(jìn)行靈活的雙向集成,高版本的MATLAB引擎開放了針對(duì)Python的API,其中包含了從Python中調(diào)用MATLAB的工具庫(kù),即在Python中可以調(diào)用兼容版本的MATLAB Compiler SDK。
因此,文中對(duì)Simulink的二次開發(fā)路線如圖7所示,以MATLAB為數(shù)據(jù)傳輸中介,Simulink的變量參數(shù)改變和仿真結(jié)果輸出由MATLAB的函數(shù)命令執(zhí)行。
圖7 Python與Simulink的交互Fig.7 Python interaction with Simulink
Python通過MATLAB實(shí)現(xiàn)與Simulink的交互,這種交互方式需要解決2個(gè)關(guān)鍵技術(shù):(1)可以隨時(shí)修改Simulink中模塊的仿真參數(shù);(2)在仿真結(jié)束之后,仿真結(jié)果能夠以數(shù)組形式保存到計(jì)算機(jī)本地。因此首先需要在MATLAB中安裝Python包形式的API以激活MATLAB對(duì)Python的函數(shù)支持,之后Python可以建立MATLAB環(huán)境并能運(yùn)行m文件和在程序里直接調(diào)用MATLAB支持的函數(shù),通過在Simulink中使用特定模塊建模和在Python中靈活使用MATLAB提供的函數(shù),可以解決二次開發(fā)中的技術(shù)問題。
Python程序通過導(dǎo)入matlab.engine類可以在計(jì)算機(jī)上不啟動(dòng)MATLAB客戶端的情況下啟用新的MATLAB虛擬進(jìn)程,雖然沒有UI界面,但是存在MATLAB工作區(qū)和變量,在該環(huán)境中可以使用標(biāo)準(zhǔn)語句直接與MATLAB交互,因此第三方平臺(tái)可以通過調(diào)用MATLAB引擎與Simulink服務(wù)器交互實(shí)現(xiàn)動(dòng)態(tài)通信。
目前,通過Python建立MATLAB虛擬進(jìn)程之后,有2種方式可以實(shí)現(xiàn)MATLAB與Simulink交互,如圖8所示。既可以通過MATLAB引擎運(yùn)行m文件,也可以在Python中執(zhí)行MATLAB代碼。前者可以方便快捷地執(zhí)行模型的初始化和一些固定程序,后者在需要批量仿真或頻繁調(diào)參甚至動(dòng)態(tài)仿真的場(chǎng)合更為高效。因此,文中同時(shí)使用2種方式,啟動(dòng)模型初始化變量、結(jié)果輸出和仿真過程調(diào)參分別使用不同運(yùn)行方式,這樣不僅可以降低系統(tǒng)的耦合性,還有利于平臺(tái)功能的拓展和代碼的維護(hù)。
圖8 交互方式Fig.8 Interaction methods
MATLAB與Simulink的交互主要涉及到set_param(Object,Name1,Value1,...,NameN,ValueN)函數(shù),該函數(shù)可以將指定模型或模塊對(duì)象上的參數(shù)設(shè)置為指定的值。當(dāng)用戶修改了Simulink中的模型變量值后,set_param函數(shù)會(huì)將新參數(shù)值直接替換寫入Simulink相應(yīng)的形參中,從而實(shí)現(xiàn)動(dòng)態(tài)修改Simulink中模塊的參數(shù)。其中,set_param()函數(shù)中的Object是模型文件中需要修改的模塊的名稱,Name是該模塊中需要修改的形參名稱,Value是新的參數(shù)的值。當(dāng)同一個(gè)模塊需要修改多個(gè)形參時(shí),可以使用一個(gè)set_param()命令和多個(gè)Name-Value實(shí)參組而不是多個(gè)set_param()命令,因此該命令具有很高的效率。
因?yàn)镻ython客戶端無法直接調(diào)用Simulink的Scope模塊中的仿真結(jié)果,因此需要將仿真結(jié)果轉(zhuǎn)換成數(shù)組,然后Python讀取數(shù)組內(nèi)數(shù)據(jù)再繪制成波形圖,此功能的過程如圖9所示。set_param()命令將用戶設(shè)置的模塊參數(shù)、仿真時(shí)間和仿真開始的指令傳遞給Simulink,Simulink仿真進(jìn)程結(jié)束后,仿真模型通過To Workspace模塊將仿真結(jié)果輸出到MATLAB的工作區(qū)(Workspace)中,并通過xlswrite()函數(shù)將數(shù)據(jù)寫入到本地excel中,再由程序處理并繪制到平臺(tái)中,該方式不僅能及時(shí)保存實(shí)驗(yàn)數(shù)據(jù),還能隨時(shí)查閱過往數(shù)據(jù),有利于用戶對(duì)數(shù)據(jù)的分析。
圖9 仿真結(jié)果輸出過程Fig.9 Simulation results output process
AMESim是一種基于圖形化設(shè)計(jì)[14],包含機(jī)械、液壓、氣動(dòng)和信號(hào)等多學(xué)科復(fù)雜系統(tǒng)建模與仿真的平臺(tái)。隨著版本的迭代,AMESim提供了一套完整的API函數(shù),可以允許高級(jí)語言(如Python、C++、VB等)與模型進(jìn)行交互,包括建模、組線、設(shè)參、仿真、讀取結(jié)果等一系列功能。其中包含了允許Python、C++、VB編程語言對(duì)液壓控制系統(tǒng)進(jìn)行編程建模的功能。通過Python建立模型的代碼通用結(jié)構(gòu)如圖10所示,該結(jié)構(gòu)共分為3個(gè)部分:初始化環(huán)境、控制系統(tǒng)的構(gòu)建和完成建模并退出。
圖10 液壓系統(tǒng)建模流程Fig.10 Hydraulic system modeling flow
值得注意的是,AMESim中大多數(shù)元件都存在多個(gè)子模型,每個(gè)子模型對(duì)應(yīng)著不同的特性,因此程序在添加元件后還應(yīng)選擇一個(gè)具體的子模型。將2個(gè)元件對(duì)應(yīng)位置相互連接時(shí),由于Python語言對(duì)序列的計(jì)算是從0開始的,因此,設(shè)置連接口序號(hào)時(shí)總是為實(shí)際序號(hào)值減1的值。例如,圖10中AMEConnectTwoPortsWithLine(′pump01′,0,′tank01′,0,′hydraulic′,()),表示將名為“pump01”的液壓泵1號(hào)端口和名為“tank01”的油箱1號(hào)端口用線連接起來。聯(lián)合仿真時(shí),機(jī)電液系統(tǒng)將使用Simulink中的仿真參數(shù),AMESim中設(shè)置的仿真參數(shù)會(huì)失去作用。在編譯模型前需要將AMESim編譯器設(shè)置為Microsoft Visual C++ 2015 and higher。
文中的聯(lián)合仿真實(shí)驗(yàn)以噴管的簡(jiǎn)易模型為例,設(shè)計(jì)出一個(gè)針對(duì)該模型的機(jī)電液聯(lián)合仿真平臺(tái)。噴管簡(jiǎn)易模型如圖11所示,噴桶固定,通過并聯(lián)的2個(gè)液壓缸共同作用,調(diào)整噴嘴的位置。液壓缸的壓力輸入由聯(lián)合仿真系統(tǒng)中AMESim的輸出提供,液壓缸輸出位移反饋給AMESim,二者的數(shù)據(jù)交換經(jīng)Simulink平臺(tái)互相傳遞,AMESim中的伺服閥控制由Simulink發(fā)出信號(hào)。
圖11 ADAMS機(jī)械系統(tǒng)模型Fig.11 ADAMS mechanical system model
Simulink控制系統(tǒng)如圖12所示,系統(tǒng)共分為五部分:期望輸出、PID控制、Simulink和AMESim的接口文件AME2SLCoSim、Simulink和ADAMS的接口文件ADAMS_sub、仿真數(shù)組導(dǎo)出(實(shí)際模型軟件接口中的變量均為英文,圖中中文是為了方便理解)。其中,文中使用的期望輸出為恒值,通過設(shè)定2個(gè)自由度的期望位移,與ADAMS機(jī)械模型輸出的實(shí)時(shí)位移進(jìn)行PID控制,輸出的信號(hào)控制AMESim伺服閥的位置與開度。仿真數(shù)據(jù)通過To Workspace模塊輸出到MATLAB 工作區(qū),輸出的是不包含時(shí)間序列的同名一維數(shù)組,時(shí)間可用sim()函數(shù)單獨(dú)獲取。在此之前,需要用mex-setup將MATLAB的編譯器切換成Microsoft Visual C++ 2015(c),和AMESim編譯器保持一致。
圖12 Simulink控制系統(tǒng)模型Fig.12 Simulink control system model
控制系統(tǒng)的聯(lián)合仿真平臺(tái)需要調(diào)整的參數(shù)名稱和代碼中變量名稱如表1所示。
表1 變量名稱Tab.1 List of variable names
聯(lián)合仿真中AMESim液壓子系統(tǒng)模型如圖13所示(實(shí)際搭建模型時(shí),所有接口模塊的變量必須以英文表示,此處采用中文示意以方便理解),噴管模型由AMESim中的Hydraulic庫(kù)搭建[15],伺服閥的開度由Simulink模型中的PID控制信號(hào)調(diào)節(jié),液壓缸通過力傳感器輸出無單位數(shù)值,通過AMESim和Simulink的數(shù)據(jù)接口傳入,并直接作為ADAMS的輸入量。
圖13 AMESim液壓控制系統(tǒng)模型Fig.13 AMESim hydraulic control system
圖13所示的液壓控制系統(tǒng)中聯(lián)合仿真平臺(tái)需要調(diào)整的參數(shù)和代碼變量名稱如表2所示,若存在多個(gè)相同元件,可在AMESim變量中查看每個(gè)元件變量的參數(shù)路徑。
表2 液壓系統(tǒng)變量Tab.2 List of hydraulic system variable
前面詳細(xì)說明了ADAMS、Simulink、AMESim二次開發(fā)方式與原理,并給出了關(guān)鍵技術(shù)與參數(shù)代碼,使得這3個(gè)軟件同時(shí)具備了與利用第三方搭建的外部平臺(tái)交互的能力,故還建立了以圖11-13模型為基礎(chǔ)的人機(jī)交互界面。
人機(jī)交互界面主要為用戶提供直接交互功能,如圖1所示,主要包括仿真配置設(shè)置、參數(shù)顯示、用戶操作按鈕和數(shù)據(jù)顯示等功能,根據(jù)表1-2中參數(shù)變量建立的各軟件界面如圖1所示。用戶可通過對(duì)應(yīng)按鈕切換至不同軟件的設(shè)置界面,每次修改參數(shù)后需更新,將設(shè)置值寫入程序。仿真結(jié)果使用Python的繪圖庫(kù)Matplotlib,它不僅功能強(qiáng)大、用法簡(jiǎn)潔、可移植性強(qiáng),還提供了面向?qū)ο罄L圖的API。當(dāng)機(jī)電液聯(lián)合仿真完成后,Simulink程序分別將位移變化數(shù)值和對(duì)應(yīng)的時(shí)間序列寫入同一個(gè)excel表中,之后Matplotlib讀取表中數(shù)據(jù),經(jīng)處理后繪制折線圖顯示出來,平臺(tái)將每一次仿真結(jié)果都保存在本地,可方便用戶選擇查看。
通過對(duì)多軟件二次開發(fā)的聯(lián)合仿真平臺(tái)進(jìn)行機(jī)電液聯(lián)合仿真實(shí)驗(yàn),驗(yàn)證機(jī)電液虛擬實(shí)驗(yàn)的可行性和聯(lián)合仿真分析平臺(tái)的正確性。在聯(lián)合仿真平臺(tái)設(shè)置機(jī)電液控制系統(tǒng)的參數(shù),設(shè)置X-Y液壓缸和Y-Z液壓缸的期望位移分別為300 mm和200 mm,并通過設(shè)置PID控制液壓缸伺服閥的開度而調(diào)控液壓缸位移,設(shè)置完所有參數(shù)并更新后,點(diǎn)擊開始仿真按鈕完成仿真。聯(lián)合仿真平臺(tái)輸出的兩液壓缸實(shí)際位移如圖14所示。
圖14 實(shí)際位移Fig.14 Actual displacement:(a)X-Y hydraulic cylinder; (b)Y-Z hydraulic cylinder
分析圖14可知:該控制系統(tǒng)能很好地復(fù)現(xiàn)理論的期望值,由于AMESim中液壓缸元件存在死區(qū)容積,因此2個(gè)液壓缸位移的實(shí)際值分別在299 mm和199 mm附近波動(dòng),誤差均在2 mm以內(nèi)??芍_發(fā)的機(jī)電液聯(lián)合仿真平臺(tái)能很好地完成虛擬實(shí)驗(yàn),驗(yàn)證了建立第三方機(jī)電液聯(lián)合仿真管理平臺(tái)的可行性,體現(xiàn)出該平臺(tái)操作的簡(jiǎn)易性。
通過對(duì)ADAMS、AMESim、MATLAB/Simulink仿真語言和底層接口的深入研究,以三者為基礎(chǔ),二次開發(fā)出可視化操作的機(jī)電液聯(lián)合仿真分析平臺(tái)。通過該平臺(tái)可實(shí)現(xiàn)對(duì)3個(gè)軟件的參數(shù)配置,有效解決了傳統(tǒng)方式需要多次切換軟件并手動(dòng)尋找配置的問題,同時(shí)降低了操作門檻,提高了仿真效率。對(duì)平臺(tái)各部分模塊化的開發(fā)方式,使系統(tǒng)具有較低的耦合性,提高了仿真平臺(tái)的穩(wěn)定性。
由虛擬仿真實(shí)驗(yàn)結(jié)果可知:控制系統(tǒng)能很好地復(fù)現(xiàn)給定的期望位移,建立ADAMS、AMESim、Simulink機(jī)電液系統(tǒng)聯(lián)合仿真分析平臺(tái)的研究方法具有普遍適用性,對(duì)現(xiàn)實(shí)模型的實(shí)驗(yàn)具有一定的參考價(jià)值。