尹忠杰 牛禮民 何遠洋 詹軍 楊強(安徽工業大學機械工程學院)
混合動力電動汽車(HEV)具有高性能、低能耗和低污染的特點以及技術、經濟和環境等方面的綜合優勢,成為當今最具實際開發意義的新型清潔汽車[1]。它采用傳統內燃機和電動機作為動力源,通過熱能和電力2套系統開動汽車,達到節省燃料和降低排氣污染的目的,具有排量小、速度高和續駛里程長等優點[2]。要想實現提高整車燃油經濟性,改善動力性,降低排放的目標,則需要汽車根據不同的工況實現汽車內各動力源的智能協作。多智能體技術的應用,可很好地實現智能協作,從而適應各種復雜的工況,多智能體間的組網交互問題成為不可避免的研究熱點。文章對客戶端智能體(傳動系)和服務器端智能體(發動機和電動機)進行建模,基于Visual Basic 6.0環境建立可視化交互界面,從而實現基于多智能體技術的HEV組網技術仿真研究。
多智能體系統(MAS)是由多個彼此間存在著協商、協調和通信等關系的智能體組成的系統[3],其中每個智能體是一個物理的或抽象的實體,能作用于自身和環境,并與其他智能體通訊[4]。多智能體技術是人工智能技術的一次質的飛躍,該系統可以協調一組智能體的行為(知識、目標、方法和規劃),以協同地完成一個任務或求解問題[5]。由于其具有較強的分布性、魯棒性和協調性[6],已經成為分布式人工智能研究的一個重要分支,并在各個領域得到了廣泛應用[7]。
因此,文章擬將發動機和電動機等動力輸出裝置和傳動系等動力耦合裝置進行單智能體建模,如圖1所示,通過組建局域網將各個單智能體之間聯系起來,從而實現基于多智能體技術的HEV組網技術仿真研究。
服務器端智能體(發動機和電動機)產生的實時數據需要及時保存,而客戶端智能體(傳動系)需要將接收到的實時數據通過查閱數據表格進行反饋。而在數據表格軟件中,Excel具有可視化強的特點,可以作為服務器端和客戶端的數據載體。但是由于Visual Basic 6.0與Excel是2款不同的軟件,所以首先需要實現Visual Basic 6.0與Excel表格之間的連接。
Visual Basic 6.0的一大功能就是可以通過勾選“工程”→“引用”中的選項與安裝在電腦里的其他程序相關聯。勾選其中的“Microsoft Excel 15.0 Object Library”選項,就可以引用Excel類型庫。此外,還需要在通用聲明端將其賦給自己定義的變量,以便于在程序中使用:
Dim xlApp As Excel.Application‘定義xlApp為Excel對象
Dim xlBook As Excel.Workbook‘定義 xlBook為Excel工作簿
Dim xlSheet As Excel.Worksheet‘定義 xlSheet為Excel工作表。
服務器端智能體建模需要實現將智能體實時的數據導入、存儲和發送的功能。該多智能體仿真平臺主要有發動機和電動機2個智能體作為服務器端,以發動機智能體為例,介紹如何在Visual Basic 6.0中實現其建模:
發動機智能體的參數主要為轉速和ETC開度。首先,需要定義2個變量來存放即將導入進來的轉速和ETC開度:
DimZhuanSuAsInteger‘定義ZhuanSu為整型變量
DimETCAs Single‘定義ETC為單精度型變量
在服務器端窗口創建一個標簽lblinfo,對于導入了以后的轉速和ETC開度數據,可以在這個標簽上顯示出來,如圖2所示,方便用戶了解實時的發動機的工作狀況:
lblinfo.Caption="發動機的轉速為:"&ZhuanSu&"r/min"&Visual Basic 6.0CrLf&"ETC開度為:"&ETC&"V"&Visual Basic 6.0CrLf
接下來,先打開待存放數據的Excel表格:
Set xlApp=CreateObject("Excel.Application")‘創建Excel對象
Set xlBook=lApp.Workbooks.Open(App.Path&"發動機實時轉速、節氣門開度表.xls")‘打開創建的Excel工作薄文件
xlApp.Visible=True‘設置Excel對象可見
Set xlSheet=xlBook.Worksheets("Sheet1")‘設置sheet1為當前工作表
打開工作表后,就開始向里面寫入數據。如果是第1次保存數據,需要向表格中添加表頭,否則就在上一次保存的數據后一行追加寫入。此外,為了表格美觀整齊,在寫入數據的同時,可以調整其對齊格式,統一保留小數位數,為表格加上邊框,自動適應列寬:
If xlSheet.Cells(i,1)=""Then‘判斷是否第一次保存數據
If i=2 Then xlSheet.Cells(2,1)="時間"‘創建時間表頭
xlSheet.Cells(2,2)="發動機轉速(r/min)"‘創建轉速表頭
xlSheet.Cells(2,3)="ETC開度(V)"‘創建 ETC開度表頭
Else
xlSheet.Cells(i,1)=Date&""&Time‘寫入時間
xlSheet.Cells(i,2)=ZhuanSu‘寫入轉速
xlSheet.Cells(i,3)=ETC‘寫入ETC開度
For j=2 Toi
xlSheet.Cells(j,3).NumberFormatLocal="0.0"‘ETC開度統一保留小數一位
xlSheet.Cells(m,n).HorizontalAlignment=xlCenter‘所有表格水平居中對齊
xlSheet.Cells(m,n).VerticalAlignment=xlCenter‘所有表格豎直居中對齊
xlSheet.Cells(m,n).Borders.LineStyle=1‘為表格加上邊框
xlSheet.Cells.EntireColumn.AutoFit‘自動適應列寬。
將數據寫入以后,保存Excel文件并將Excel文件關閉,同時結束Excel對象的使用:
xlBook.Save‘保存工作簿
xlBook.Close‘關閉工作薄
xlApp.Quit‘結束 Excel對象
最終生成的Excel表格,如圖3所示。
服務器端通過winsock控件的senddata方法將轉速和ETC開度發送給客戶端,并且在其可視化窗口中的“聊天記錄”中顯示,便于用戶查看,如圖4所示。
客戶端智能體從服務器端智能體接收數據,通過查閱一個由Map圖得出的數據表格,反饋給服務器端一個合適的數據并且實現在服務器端進行保存。以如何反饋給發動機智能體在一定轉速和ETC開度條件下合適的轉矩為例,介紹如何在Visual Basic 6.0中實現其建模:
客戶端智能體在接收數據之前,也同樣需要定義變量來存放服務器端發送過來的轉速和ETC開度:
Dim ZhuanSu As Integer‘定義ZhuanSu為整型變量
DimETCAs Single‘定義ETC為單精度型變量
客戶端通過winsock控件的getdata方法接收服務器端發送的數據,并且把它存放在臨時變量tempS里,在判斷發送過來的數據是轉速還是ETC開度之后,存儲在剛才定義好的變量里,并且通過與服務器端智能體建模類似的方式,顯示在界面上,如圖5所示。
在接收到服務器端發送的轉速和ETC開度后,客戶端根據查詢它們與轉矩關系的表格,查詢到與此時發動機轉速和ETC開度所對應的轉矩,存放在定義的ZhuanJu變量里,顯示在lblinfo標簽上,如圖6所示,并且通過局域網發送回服務器端:
Dim ZhuanJu As Single‘定義ZhuanJu為單精度型變量
lblinfo.Caption=lblinfo.Caption&"發動機的轉矩為:"&ZhuanJu&"N·m"&Visual Basic 6.0CrLf‘顯示轉矩
wskserver.SendData Str(ZhuanJu)‘發送轉矩
服務器端在收到轉矩之后,把其存在服務器端定義的ZhuanJu變量里,加到聊天記錄里面,顯示在lblinfo標簽上,保存在另一個Excel工作表里,如圖7所示,存儲數據的方式與服務器端智能體建模時類似,唯一的區別是增加一列接收到的轉矩的數據。
在單智能體建模完成后,需要組建多智能體局域網。此時需將工具欄→“部件”→“控件”中的“Microsoft Winsock Control 6.0”控件(簡稱winsock控件)添加到窗口,并且將其名稱改為“wskclient”和“wskserver”。
通過按下客戶端的“連接”按鈕,客戶端首先向服務器端發起連接的需求:
DimIP As String‘定義IP為字符型變量
IP=InputBox("請輸入要連接的IP","輸入的IP",""‘輸入要連接的服務器的IP
wskclient.RemoteHost=IP‘設置通訊對方的IP
wskclient.RemotePort=1024‘設置通訊的端口號
wskclient.Connect‘向對方發出連接請求
然后在服務器端的wskserver的ConnectionRequest事件中接受客戶端的連接需求:
wskserver.Close‘關閉控件以防報錯
wskserver.Accept requestID‘接收客戶端的連接請求
此時彈出對話框“組網成功!”,即完成了多智能體局域網的組建。
在完成對于服務器端智能體和客戶端智能體的建模之后,可以進行模擬仿真,發動機端和客戶端用戶界面,如圖8和圖9所示,從而實現混合動力汽車的研究。
通過Visual Basic 6.0的平臺,生成了一款面向用戶的可視化軟件,該軟件建立了客戶端和服務器端智能體模型,通過仿真目前可以實現發動機轉速、ETC開度參數的導入、顯示及保存,以及通過局域網連接獲得對應的轉矩,制定出混合動力汽車的一套智能控制策略,從而為混合動力汽車的仿真研究提供了一種新的途徑。