




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章綜合類工業(yè)APP開(kāi)發(fā)2024.04MWORKSAPI與工業(yè)應(yīng)用開(kāi)發(fā)前驅(qū)純電車APP背景01主要內(nèi)容CONTENTS02前驅(qū)純電車APP需求分析03前驅(qū)純電車APP設(shè)計(jì)04前驅(qū)純電車APP開(kāi)發(fā)05前驅(qū)純電車APP測(cè)試06前驅(qū)純電車APP部署前驅(qū)純電車APP背景01前驅(qū)純電車APP背景——前驅(qū)車&后驅(qū)車前驅(qū)車后驅(qū)車前驅(qū)純電車APP背景車輛動(dòng)力學(xué)性能是車輛的關(guān)鍵性能之一。車輛動(dòng)力學(xué)性能直接涉及車輛的制動(dòng)系統(tǒng)、轉(zhuǎn)向系統(tǒng)、懸架系統(tǒng)、傳動(dòng)系統(tǒng)、輪胎,并且與整車質(zhì)量分布、車身剛度都密切相關(guān)。此外,制動(dòng)防抱死系統(tǒng)、牽引力控制系統(tǒng)、車輛穩(wěn)定性控制系統(tǒng)、主動(dòng)懸掛控制系統(tǒng)等目前在汽車領(lǐng)域不斷得到推廣應(yīng)用的各種底盤(pán)電控系統(tǒng)的基礎(chǔ)都是車輛的動(dòng)力學(xué)性能。車輛動(dòng)力學(xué)性能不同,這些底盤(pán)電控系統(tǒng)的匹配參數(shù)也會(huì)由此發(fā)生改變。前驅(qū)純電車APP背景車輛動(dòng)力學(xué)特性影響車輛兩方面的性能,一是車輛的安全性,主要體現(xiàn)在制動(dòng)性能、操穩(wěn)性能方面;二是車輛的舒適性,體現(xiàn)為車輛行駛過(guò)程中的振動(dòng)頻率及幅值的大小、各種沖擊度的大小等,舒適性能主要與車輛的懸架系統(tǒng)相關(guān)。隨著國(guó)內(nèi)汽車普及率大幅提高,人們駕駛經(jīng)驗(yàn)的不斷增長(zhǎng),對(duì)駕駛過(guò)程中安全性和舒適性要求的不斷提升,車輛動(dòng)力學(xué)也將越發(fā)得到汽車企業(yè)和消費(fèi)者的重視。同時(shí)由于車輛動(dòng)力學(xué)特性涉及眾多領(lǐng)域,影響多方面性能,其開(kāi)發(fā)難度很大,復(fù)雜程度很高,僅根據(jù)開(kāi)發(fā)者的經(jīng)驗(yàn)是無(wú)法實(shí)現(xiàn)開(kāi)發(fā)目標(biāo)的。為此,在汽車整車企業(yè)中普遍采用專業(yè)軟件進(jìn)行車輛動(dòng)力學(xué)建模仿真,利用仿真結(jié)果指導(dǎo)方案設(shè)計(jì)及問(wèn)題整改。前驅(qū)純電車APP背景車輛設(shè)計(jì)分析應(yīng)用是指利用建模和仿真技術(shù)對(duì)車輛進(jìn)行設(shè)計(jì)和性能分析的過(guò)程。隨著計(jì)算機(jī)性能的飛速提升,通過(guò)計(jì)算機(jī)建模仿真實(shí)現(xiàn)車輛的設(shè)計(jì)和性能分析已經(jīng)在現(xiàn)代汽車工程中扮演著重要的角色,其優(yōu)勢(shì)集中在如下一些方面。1.提高設(shè)計(jì)效率傳統(tǒng)的車輛設(shè)計(jì)需要進(jìn)行大量的試驗(yàn)和實(shí)驗(yàn)驗(yàn)證,耗費(fèi)時(shí)間和成本較高。建模和仿真技術(shù)可以大大加快設(shè)計(jì)過(guò)程。通過(guò)建立精確的數(shù)學(xué)模型和仿真環(huán)境,利用多次虛擬實(shí)驗(yàn)對(duì)車輛的各個(gè)方面進(jìn)行分析和優(yōu)化,從而在設(shè)計(jì)階段就能夠找到最佳方案,提高設(shè)計(jì)效率。前驅(qū)純電車APP背景2.預(yù)測(cè)和評(píng)估性能建模和仿真應(yīng)用可以預(yù)測(cè)和評(píng)估車輛在不同條件下的性能。例如,利用計(jì)算流體力學(xué)(CFD)技術(shù)可以模擬車輛在空氣流動(dòng)中的行為,包括空氣阻力、氣流分布等。通過(guò)對(duì)空氣動(dòng)力學(xué)性能的仿真分析,可以優(yōu)化車身外形和空氣動(dòng)力學(xué)條件,降低阻力,提高燃油經(jīng)濟(jì)性和行駛穩(wěn)定性。3.系統(tǒng)優(yōu)化和集成車輛是一個(gè)復(fù)雜的系統(tǒng),由多個(gè)子系統(tǒng)組成,如發(fā)動(dòng)機(jī)、傳動(dòng)系統(tǒng)、懸掛系統(tǒng)、制動(dòng)系統(tǒng)等。建模和仿真應(yīng)用可以將這些子系統(tǒng)進(jìn)行集成,并優(yōu)化整體性能。例如,通過(guò)建立發(fā)動(dòng)機(jī)和傳動(dòng)系統(tǒng)的動(dòng)力學(xué)模型,可以優(yōu)化齒輪比、換擋策略等參數(shù),以提高車輛的加速性能和燃油經(jīng)濟(jì)性。前驅(qū)純電車APP背景4.評(píng)估系統(tǒng)可靠性車輛安全性是設(shè)計(jì)中至關(guān)重要的考慮因素。通過(guò)建模和仿真應(yīng)用,可以評(píng)估車輛在不同碰撞和事故情況下的安全性能,如碰撞保護(hù)、車身剛度等。此外,還可以對(duì)車輛的可靠性進(jìn)行評(píng)估,包括零部件的壽命和可靠性分析,以提高整車的質(zhì)量和可靠性。5.環(huán)境友好和能源效率隨著對(duì)環(huán)境影響和能源消耗的關(guān)注日益增加,建模和仿真應(yīng)用在開(kāi)發(fā)環(huán)境友好和能源高效的車輛方面起著關(guān)鍵作用。通過(guò)仿真分析,可以評(píng)估車輛的排放性能、能源利用效率,并優(yōu)化動(dòng)力系統(tǒng)和能源管理策略,以減少尾氣排放和能源消耗。前驅(qū)純電車APP背景——為什么輕量化?輕量化應(yīng)用開(kāi)發(fā)VS綜合類工業(yè)應(yīng)用開(kāi)發(fā)1.模型體量不同:相比于輕量化工業(yè)應(yīng)用,綜合類工業(yè)應(yīng)用由于需要涉及某個(gè)行業(yè)或領(lǐng)域的工業(yè)技術(shù)和方法,往往需要涵蓋多個(gè)方面,而輕量化工業(yè)應(yīng)用往往只考慮上述各個(gè)方面中的某一方面。車輛設(shè)計(jì)分析綜合工業(yè)應(yīng)用,其模型的構(gòu)建涉及設(shè)計(jì)效率的提高、車輛性能的評(píng)估和預(yù)測(cè)、車輛系統(tǒng)的優(yōu)化和集成、車輛安全性和可靠性的評(píng)估,以及車輛的環(huán)境友好和能源效率等方面。這些方面同時(shí)又和材料性質(zhì),能源效率等方面相結(jié)合,需要大量的子模型以實(shí)現(xiàn)完整車輛模型的構(gòu)建以及仿真精確度的保證。2.交互界面完善程度不同:綜合類工業(yè)應(yīng)用由于需要使用的模型數(shù)量較多,不能像輕量化工業(yè)應(yīng)用直接在交互界面打開(kāi)時(shí)實(shí)現(xiàn)模型的加載,而需要針對(duì)不同需求加載不同的模型進(jìn)行后續(xù)各類任務(wù)。前驅(qū)純電車APP需求分析02前驅(qū)純電車APP需求分析開(kāi)發(fā)一個(gè)前驅(qū)純電車APP的需求目標(biāo)是主要基于功能需求和非功能性需求等多方面來(lái)確保實(shí)現(xiàn)一個(gè)高效、可靠且易于使用的前驅(qū)純電車APP。從業(yè)務(wù)需求方面看,旨在滿足各種對(duì)車輛的需求,提供一個(gè)設(shè)計(jì)車輛模型和分析評(píng)估預(yù)測(cè)各種數(shù)據(jù)時(shí)高效的軟件。前驅(qū)純電車APP需求分析1.功能需求(1)車輛模型導(dǎo)入:支持將各種車輛模型庫(kù)以及模型文件導(dǎo)入到軟件中進(jìn)行仿真;(2)模型建立和編輯:提供一個(gè)可視化界面,用于創(chuàng)建和編輯車輛模型。用戶可以添加和調(diào)整模型的各個(gè)組件,如車輛動(dòng)力系統(tǒng)、傳動(dòng)系統(tǒng)、懸掛系統(tǒng)等;(3)參數(shù)設(shè)置:允許用戶設(shè)置模型的各種參數(shù),如車輛質(zhì)量、車輛尺寸、輪胎特性等。用戶可以根據(jù)實(shí)際情況對(duì)這些參數(shù)進(jìn)行調(diào)整;(4)運(yùn)行仿真:能夠模擬車輛在不同條件的運(yùn)行行為,包括加速減速、轉(zhuǎn)彎、制動(dòng)等;(5)可視化結(jié)果:將模擬結(jié)果以圖表或動(dòng)畫(huà)的形式呈現(xiàn)給用戶,以便他們能夠直觀地理解車輛的行為。例如,顯示車輛的速度、加速度、輪胎力等信息;(6)控制算法評(píng)估:允許用戶導(dǎo)入和測(cè)試不同車輛的控制算法,并修改不同參數(shù)觀察比對(duì)效果,并評(píng)估在仿真過(guò)程中的性能和效果。前驅(qū)純電車APP需求分析2.界面需求(1)工具欄界面支持打開(kāi)模型、保存模型、檢查模型、翻譯模型、仿真模型、仿真設(shè)置等基礎(chǔ)功能、保證方便快捷;(2)進(jìn)度和狀態(tài)界面顯示當(dāng)前計(jì)算任務(wù)的進(jìn)度和狀態(tài),以便用戶了解計(jì)算的進(jìn)行情況;提供取消或暫停計(jì)算任務(wù)的選項(xiàng),以便用戶靈活控制任務(wù)的執(zhí)行。(3)模型編輯界面:提供用戶友好的表單或輸入控件,以便用戶輸入計(jì)算模型所需的參數(shù)和數(shù)據(jù);支持模型各種數(shù)據(jù)的編輯如文本編輯、圖形編輯;提供輸入驗(yàn)證和錯(cuò)誤提示,確保輸入的合法性和準(zhǔn)確性。前驅(qū)純電車APP需求分析3.非功能性需求(1)實(shí)時(shí)性和性能:確保軟件能夠以實(shí)時(shí)響應(yīng)的速度進(jìn)行車輛仿真,以提供流暢的用戶體驗(yàn);(2)可視化和用戶界面:提供直觀友好的用戶界面,以便用戶可以輕松配置和控制仿真參數(shù),并觀察仿真結(jié)果的可視化呈現(xiàn);(3)穩(wěn)定性和可靠性:確保軟件在長(zhǎng)時(shí)間運(yùn)行和大規(guī)模仿真的情況下保持穩(wěn)定且可靠。前驅(qū)純電車APP設(shè)計(jì)階段03前驅(qū)純電車APP設(shè)計(jì)——1功能設(shè)計(jì)通過(guò)匯總需求分析中的功能設(shè)計(jì),前驅(qū)純電車APP總體劃分為四大模塊,分別為:前驅(qū)純電車模型操作模塊前驅(qū)純電車模型仿真模塊前驅(qū)純電車模型視圖切換模塊前驅(qū)純電車使用許可模塊通過(guò)這些模塊實(shí)現(xiàn)對(duì)所構(gòu)建的前驅(qū)純電車簡(jiǎn)單無(wú)控制模型的模型打開(kāi),信息瀏覽,參數(shù)調(diào)整,模型仿真,視圖切換等功能。模塊的設(shè)計(jì)遵循功能結(jié)構(gòu)圖設(shè)計(jì)原則:內(nèi)部高聚合,外部低耦合。
前驅(qū)純電車APP設(shè)計(jì)——1功能設(shè)計(jì)
前驅(qū)純電車模型操作模塊是APP基礎(chǔ),用于實(shí)現(xiàn)基礎(chǔ)模型庫(kù)的加載以及各類與模型本身相關(guān)的操作。前驅(qū)純電車模型仿真模塊是APP核心部分,通過(guò)對(duì)載入的前驅(qū)純電車模型的參數(shù)以及仿真參數(shù)進(jìn)行配置,可以仿真得到車輛在道路上運(yùn)行情況,得到車輛運(yùn)行性能數(shù)據(jù)。前驅(qū)純電車模型視圖切換模塊和前驅(qū)純電車使用許可模塊是APP輔助部分,主要用于模型多種視圖的切換和相關(guān)許可證的加載。前驅(qū)純電車APP設(shè)計(jì)——1功能設(shè)計(jì)1.前驅(qū)純電車模型操作模塊該模塊包含加載模型庫(kù),打開(kāi)前驅(qū)純電車模型,檢查前驅(qū)純電車模型,保存前驅(qū)純電車模型,卸載前驅(qū)純電車模型這五個(gè)功能。該模塊用于前驅(qū)純電車APP中對(duì)模型本身的相關(guān)操作。前驅(qū)純電車APP設(shè)計(jì)——1功能設(shè)計(jì)2.前驅(qū)純電車模型仿真模塊
該模塊包含前驅(qū)純電車模型參數(shù)設(shè)置瀏覽,前驅(qū)純電車模型仿真設(shè)置,檢查前驅(qū)純電車模型,翻譯前驅(qū)純電車模型,仿真前驅(qū)純電車模型,前驅(qū)純電車模型仿真結(jié)果瀏覽,前驅(qū)純電車模型變量曲線顯示這六個(gè)功能。該模塊用于前驅(qū)純電車APP中模型的仿真。前驅(qū)純電車APP設(shè)計(jì)——1功能設(shè)計(jì)3.前驅(qū)純電車模型視圖切換模塊
該模塊包含前驅(qū)純電車模型圖標(biāo)視圖,前驅(qū)純電車模型組件視圖,前驅(qū)純電車模型文本視圖這三個(gè)功能。該模塊用于前驅(qū)純電車設(shè)計(jì)分析應(yīng)用中模型視圖切換的相關(guān)操作。前驅(qū)純電車APP設(shè)計(jì)——1功能設(shè)計(jì)4.前驅(qū)純電車使用許可模塊該模塊用于前驅(qū)純電車APP的許可證選擇。前驅(qū)純電車APP設(shè)計(jì)——2界面設(shè)計(jì)根據(jù)需求分析中的界面需求,界面中需要包含:工具欄各種功能的快捷操作按鈕,方便用戶進(jìn)行各種操作;模型層界面用于展示模型的圖標(biāo)、圖形、文本視圖,并允許進(jìn)行編輯;組件參數(shù)界面用于設(shè)置控制汽車相關(guān)參數(shù),讓用戶直觀地了解模型的行為;仿真結(jié)果界面用于顯示保存仿真結(jié)果,并以曲線的方式查看可視化數(shù)據(jù),讓用戶直觀查看模型數(shù)據(jù);模型瀏覽器需能夠顯示用戶開(kāi)發(fā)的模型庫(kù)和軟件本身自帶的模型庫(kù)組件,方便用戶瀏覽和使用;仿真設(shè)置界面,讓用戶可以靈活地調(diào)整仿真環(huán)境和參數(shù).前驅(qū)純電車APP設(shè)計(jì)——2界面設(shè)計(jì)前驅(qū)電動(dòng)車APP界面前驅(qū)純電車APP設(shè)計(jì)——3架構(gòu)設(shè)計(jì)QT框架進(jìn)行界面開(kāi)發(fā)底層核心模型處理采用Sysplorer.SDK核心啟動(dòng)類前驅(qū)純電車APP設(shè)計(jì)——3架構(gòu)設(shè)計(jì)為了實(shí)現(xiàn)界面和核心模型的集成顯示,應(yīng)用程序?qū)⑹褂肧DK提供的界面集成功能,即應(yīng)用程序?qū)⑼ㄟ^(guò)SDK提供的接口,將核心模型的數(shù)據(jù)和結(jié)果集成到QT界面中進(jìn)行顯示。用戶可以在QT界面中直觀地查看和操作核心模型的相關(guān)信息,并進(jìn)行必要的參數(shù)設(shè)置和仿真控制。通過(guò)整合QT框架和Sysplorer.SDK,應(yīng)用程序可以充分發(fā)揮兩者的優(yōu)勢(shì),實(shí)現(xiàn)界面和核心模型的緊密結(jié)合,從而提供一個(gè)功能完善、易用且具有良好用戶體驗(yàn)的應(yīng)用程序。這種集成架構(gòu)可以提高開(kāi)發(fā)效率和應(yīng)用程序的可維護(hù)性,同時(shí)滿足復(fù)雜模型處理和界面展示的需求。前驅(qū)純電車APP設(shè)計(jì)——3架構(gòu)設(shè)計(jì)QT框架:界面開(kāi)發(fā)提供了豐富的GUI組件和工具,使界面的設(shè)計(jì)和開(kāi)發(fā)更加簡(jiǎn)便和高效。通過(guò)QT框架,可以創(chuàng)建用戶友好的界面,包括工具欄、菜單、對(duì)話框等,以滿足應(yīng)用程序的界面需求。Sysplorer.SDK:底層核心模型處理一個(gè)提供核心模型處理功能的軟件開(kāi)發(fā)工具包,它包含了一系列功能豐富的API和工具,用于進(jìn)行核心模型的建立、編輯和仿真等操作調(diào)用Sysplorer.SDK提供的API,應(yīng)用程序可以方便地進(jìn)行核心模型的處理和管理。前驅(qū)純電車APP設(shè)計(jì)——3架構(gòu)設(shè)計(jì)核心啟動(dòng)類通過(guò)繼承QApplication類作為應(yīng)用程序的核心類,負(fù)責(zé)管理應(yīng)用程序的運(yùn)行和事件循環(huán)。作為一個(gè)單例對(duì)象,核心啟動(dòng)類在整個(gè)應(yīng)用程序的生命周期中只有一個(gè)實(shí)例,確保應(yīng)用程序的統(tǒng)一管理和控制。核心啟動(dòng)類還需要考慮其他關(guān)鍵功能的初始化和管理。核心啟動(dòng)類還需要初始化和管理模型管理服務(wù)接口。
這涉及與后端服務(wù)進(jìn)行通信,獲取、加載和管理應(yīng)用程序所需的模型數(shù)據(jù)。這些模型數(shù)據(jù)可能包括算法模型、配置文件、數(shù)據(jù)集等。通過(guò)與模型管理服務(wù)接口的集成,核心啟動(dòng)類可以方便地獲取和管理所需的模型數(shù)據(jù),并在應(yīng)用程序的運(yùn)行過(guò)程中進(jìn)行相應(yīng)的處理和使用。核心啟動(dòng)類還需要初始化和管理應(yīng)用程序的主窗口界面。
這包括創(chuàng)建主窗口對(duì)象、設(shè)置主窗口的屬性和樣式、加載并顯示主窗口界面等。主窗口界面通常是用戶與應(yīng)用程序進(jìn)行交互和操作的主要界面,因此核心啟動(dòng)類需要確保主窗口的正確初始化和顯示,以提供良好的用戶體驗(yàn)。
綜上所述,核心啟動(dòng)類在繼承QApplication類的基礎(chǔ)上,承擔(dān)了更多的職責(zé),包括license管理、模型管理服務(wù)接口的初始化和管理,以及主窗口界面的初始化和顯示。通過(guò)合理設(shè)計(jì)和管理核心啟動(dòng)類,可以確保應(yīng)用程序的正常運(yùn)行,并提供豐富的功能和良好的用戶體驗(yàn)。前驅(qū)純電車APP設(shè)計(jì)——3架構(gòu)設(shè)計(jì)
前驅(qū)電車啟動(dòng)類線程管理類:用于管理各類線程的執(zhí)行啟動(dòng);仿真管理類:用于管理仿真的開(kāi)始、停止、以及仿真相關(guān)數(shù)據(jù)模型管理器:由SDK提供,用于初始化SDK底層模型操作類Licesse服務(wù)類:由SDK提供,用于初始化相關(guān)licens服務(wù)和可視化面板主界面窗口類:通過(guò)Qt中的QMainWindow實(shí)現(xiàn)主窗口顯示,集成各類SDK提供的面板用于呈現(xiàn)前驅(qū)APP開(kāi)發(fā)的仿真建模等。前驅(qū)純電車APP設(shè)計(jì)——3架構(gòu)設(shè)計(jì)主界面窗口類通過(guò)繼承QMainWindow首先會(huì)在內(nèi)部實(shí)現(xiàn)基礎(chǔ)工具欄和按鈕的初始化增加。這些基礎(chǔ)工具欄和按鈕可以包括常用的操作按鈕、菜單項(xiàng)、工具欄等,用于
提供用戶與應(yīng)用程序的交互功能。用戶可以通過(guò)點(diǎn)擊按鈕或選擇菜單項(xiàng)來(lái)執(zhí)行相應(yīng)的操作,如打開(kāi)、保存、導(dǎo)入、導(dǎo)出等。其次,在主界面窗口類中會(huì)分別實(shí)現(xiàn)幾大面板。完成基本界面和功能類的設(shè)計(jì)后,考慮底層數(shù)據(jù)管理相關(guān)處理。在檢查、打開(kāi)模型、加載模型庫(kù)的過(guò)程中由于會(huì)耗費(fèi)一定時(shí)間,通過(guò)給每個(gè)功能設(shè)計(jì)線程,可以提高程序的執(zhí)行效率和響應(yīng)速度,在圖形界面應(yīng)用程序中,將耗時(shí)的操作放在一個(gè)獨(dú)立的線程中執(zhí)行,可以避免阻塞用戶界面,讓用戶繼續(xù)進(jìn)行其他操作等,線程的管理將所有線程管理起來(lái)方便調(diào)用操作等。前驅(qū)純電車APP設(shè)計(jì)——3架構(gòu)設(shè)計(jì)主窗口界面中初始化的主要視圖窗口:參數(shù)面板:由SDK提供,可直接集成,用于顯示和編輯模型中組件的參數(shù)信息;仿真結(jié)果顯示面板:用于顯示仿真結(jié)果數(shù)據(jù),并可根據(jù)數(shù)據(jù)顯示曲線窗口;模型瀏覽樹(shù)面板:顯示已打開(kāi)的模型庫(kù)和模型文件,通過(guò)使用SDK提供的MwMoClassTreeModel進(jìn)行數(shù)據(jù)管理;仿真設(shè)置面板:獲取并仿真設(shè)置數(shù)據(jù);中央視圖類:由SDK提供,直接顯示模型中央視圖;模型視圖控制中心:由SDK提供,用于SDK底層接口對(duì)模型的操作對(duì)其他面板的數(shù)據(jù)更新操作等.此外本程序界面主要涉及到仿真結(jié)果數(shù)據(jù),將仿真處理和仿真結(jié)果數(shù)據(jù)、仿真設(shè)置數(shù)據(jù)通過(guò)一個(gè)仿真類統(tǒng)一管理起來(lái),通過(guò)數(shù)據(jù)管理類,可以提供統(tǒng)一的數(shù)據(jù)訪問(wèn)接口,使得其他模塊或組件可以方便地訪問(wèn)和操作數(shù)據(jù)。前驅(qū)純電車APP設(shè)計(jì)——3架構(gòu)設(shè)計(jì)涉及到相關(guān)的主要功能由線程管理控制:檢查模型、翻譯模型、加載模型庫(kù)、打開(kāi)模型文件。仿真相關(guān)控制通過(guò)仿真管理類管控,共同管理SDK提供的仿真控制、仿真結(jié)果數(shù)據(jù)、以及仿真設(shè)置數(shù)據(jù)。前驅(qū)純電車APP設(shè)計(jì)——3架構(gòu)設(shè)計(jì)通過(guò)上述對(duì)前驅(qū)純電車APP類的分析和設(shè)計(jì),為保證覆蓋基本功能,主要類如MwVehicleApp、MwVehicleMainWindow、MwVehicleClassBrowser、MwVehicleResultBrowser、MwVehicleSimManager需要包含相關(guān)接口。MwVehicleApp為啟動(dòng)類需包含初始化類,用于初始化各種類和界面,此外還應(yīng)包含加載翻譯文件類,SDK提供的相關(guān)界面默認(rèn)為英文,通過(guò)提供的翻譯包可記載為中文顯示。MwVehicleMainWindow為界面窗口類該類為功能的主要處理中心窗口類,需包含主要功能函數(shù),如開(kāi)始仿真函數(shù)、加載模型函數(shù)、打開(kāi)模型文件函數(shù)、檢查模型、編譯模型、打開(kāi)仿真設(shè)置、打開(kāi)license設(shè)置等基礎(chǔ)功能。前驅(qū)純電車APP設(shè)計(jì)——3架構(gòu)設(shè)計(jì)MwVehicleClassBrowser為模型瀏覽器界面窗口類,主要用于顯示軟件自帶模型庫(kù)和用戶模型庫(kù),顯示時(shí)需要顯示文字和模型庫(kù)圖標(biāo),因此需包含獲取文本函數(shù)接口、獲取圖標(biāo)函數(shù)接口,此外需含有雙擊時(shí)事件處理操作和臟標(biāo)處理操作。MwVehicleResultBrowser類為結(jié)果顯示樹(shù)面板類主要需包含加載顯示仿真數(shù)據(jù)函數(shù)接口、打開(kāi)曲線窗口接口、增加節(jié)點(diǎn)結(jié)果等主要函數(shù)功能。MwVehicleSimManager為仿真結(jié)果管理類需包含開(kāi)始仿真、獲取仿真數(shù)據(jù)、獲取仿真設(shè)置數(shù)據(jù)等主要函數(shù)接口。結(jié)果管理類需包含開(kāi)始仿真、獲取仿真數(shù)據(jù)、獲取仿真設(shè)置數(shù)據(jù)等主要函數(shù)接口。通過(guò)上述對(duì)前驅(qū)純電車APP類的分析和設(shè)計(jì),為保證覆蓋基本功能,主要類如MwVehicleApp、MwVehicleMainWindow、MwVehicleClassBrowser、MwVehicleResultBrowser、MwVehicleSimManager需要包含相關(guān)接口。前驅(qū)純電車APP設(shè)計(jì)——4接口設(shè)計(jì)前驅(qū)純電車APP類設(shè)計(jì)為滿足相關(guān)功能主要類的相關(guān)接口設(shè)計(jì)前驅(qū)純電車APP案例接口設(shè)計(jì)前驅(qū)純電車APP案例中使用到的SDK相關(guān)類和接口前驅(qū)純電車APP設(shè)計(jì)——4接口設(shè)計(jì)前驅(qū)純電車APP案例接口設(shè)計(jì)前驅(qū)純電車APP設(shè)計(jì)——接口設(shè)計(jì)類接口注釋MwClassManagerInitialize()MwClassManager初始化GetCoreOption()獲取MwCoreOption類GetMoHandler()獲取MwMoHandler類MwCoreOptionLoadChineseTranslateFile()加載中文翻譯文件MwMoGraphicsViewControllerSigUpdate()模型視圖更新信號(hào)SetMdiInterface()設(shè)置視圖接口GetIcon()獲取模型圖標(biāo)SetClassDirty()設(shè)置臟標(biāo)MwMoWindowMdiOpenMoWindow()顯示打開(kāi)的模型GetCurrentClassKey()獲取當(dāng)前模型窗口模型鍵值SaveCurrentWindow()保存當(dāng)前模型窗口模型鍵值SwitchCurrentMoView()視圖類型切換MwMoClassTreeModelAppendTopClass()增加頂層模型RemoveClass()移除模型MwModelParameterTabWidgetSlotUpdate()更新面板前驅(qū)純電車APP案例中使用到的SDK相關(guān)類和接口類接口注釋MwClassManagerInitialize()MwClassManager初始化MwMoHandlerOpenFile()打開(kāi)模型文件(mo,bmf,mef)UnloadModel()卸載已加載或打開(kāi)的模型GetTopClassInFileByKey()根據(jù)key獲取模型頂層類鍵值SaveModel()將修改內(nèi)容保存到模型底層文件CompileModel()編譯模型CheckModel()檢查模型文本GetKeyByTypeName()根據(jù)模型的名稱獲取模型keyLoadMoLibrary()加載模型庫(kù)(mo)GetTopClassInFile()獲取文件中的頂層GetFullnameProp()獲取模型或元素的全名MwSimControlGetSimData()獲取仿真數(shù)據(jù)RebindSimData()綁定仿真數(shù)據(jù)StartSimulate()開(kāi)始仿真MwSimDataInitializeSimInst()初始化仿真實(shí)例ApplyExperimentData()應(yīng)用仿真設(shè)置GetVarTreeRoot()讀取結(jié)果變量MwSimConfigWidgetGetSimConfig()獲取仿真設(shè)置MwSimPlotWindowAddCurveToCurrentView()添加變量到曲線圖MwLicenseServiceStartupLicenseSetDialog()彈出License配置對(duì)話框前驅(qū)純電車APP開(kāi)發(fā)04前驅(qū)電車APP類實(shí)現(xiàn)前驅(qū)電車APP類實(shí)現(xiàn)前驅(qū)電車APP類實(shí)現(xiàn)電動(dòng)發(fā)動(dòng)機(jī)模型以純電車車型為例,動(dòng)力性庫(kù)能夠應(yīng)用于車輛百公里加速仿真分析,評(píng)估車輛從加速到100km/h的加速性能。根據(jù)仿真結(jié)果對(duì)變速器控制策略、電池續(xù)航功能、發(fā)動(dòng)機(jī)扭矩控制策略等優(yōu)化。案例具體模型如下圖所示。前驅(qū)電車APP類實(shí)現(xiàn)前驅(qū)電車APP類實(shí)現(xiàn)前驅(qū)電車APP類實(shí)現(xiàn)前驅(qū)電車APP類實(shí)現(xiàn)前驅(qū)電車APP類實(shí)現(xiàn)前驅(qū)電車APP類實(shí)現(xiàn)前驅(qū)電車APP類實(shí)現(xiàn)前驅(qū)電車APP類實(shí)現(xiàn)前驅(qū)電車APP類實(shí)現(xiàn)前驅(qū)電車APP類實(shí)現(xiàn)前驅(qū)電車APP類實(shí)現(xiàn)程序入口創(chuàng)建一個(gè)MwVehicleApp實(shí)例,調(diào)用Initialize初始化后調(diào)用Exec開(kāi)啟車輛APP。#include"mw_vehicle_app.h"intmain(intargc,
char
*argv[]){MwVehicleAppmw_app(argc,argv);mw_app.Initialize();
returnmw_app.Exec();}前驅(qū)電車APP類實(shí)現(xiàn)MwVehicleApp作為車輛APP應(yīng)用程序和Qt事件循環(huán)的入口,繼承QApplication,負(fù)責(zé)初始化使用SDK開(kāi)發(fā)APP依賴的一些必要的環(huán)境以及創(chuàng)建車輛APP主窗口。voidMwVehicleApp::Initialize(){classManager=
newMwClassManager();classManager->Initialize();LoadChineseTranslateFile();pLicenseService=
newMwLicenseService(nullptr);pLicenseService->Initialize();taskManager=
newMwVehicleTaskManager();simManager=
newMwVehicleSimManager();mainWin=
newMwVehicleMainWindow();mainWin->showMaximized();}LoadChineseTranslateFile為加載SDK的中文翻譯,調(diào)用MwCoreOption的LoadChineseTranslateFile接口。voidMwVehicleApp::LoadChineseTranslateFile(){ClassMgrPtr->GetCoreOption()->LoadChineseTranslateFile(this);}1.MwVehicleAPP啟動(dòng)類前驅(qū)電車APP類實(shí)現(xiàn)MwVehicleMainWindow為車輛APP主窗口,繼承QMainWindow,負(fù)責(zé)如下事務(wù):(1)提供各功能的按鈕及接口實(shí)現(xiàn),包括打開(kāi)模型、保存模型、切換模型視圖、檢查模型、翻譯模型、仿真模型、仿真設(shè)置和使用許可。(2)構(gòu)建各個(gè)面板組件,包括中央模型視圖、左側(cè)模型瀏覽器、底部參數(shù)面板、右側(cè)仿真結(jié)果瀏覽器。初始化界面前需要先創(chuàng)建MwMoGraphicsViewController實(shí)例,其負(fù)責(zé)同步各個(gè)面板因模型變化而產(chǎn)生的界面刷新。2.MwVehicleMainWindow界面窗口類前驅(qū)電車APP類實(shí)現(xiàn)通過(guò)連接MwMoGraphicsViewController的SigUpdate信號(hào)和各面板的SlotUpdate槽函數(shù)來(lái)同步界面更新。2.MwVehicleMainWindow前驅(qū)電車APP類實(shí)現(xiàn)3.MwMoWindowMdiMwMoWindowMdi是SDK提供的模型視圖組件,基類為QMdiArea,支持顯示組件的圖標(biāo)視圖、組件視圖和文本視圖,并支持編輯。中央模型視圖如下所示。使用時(shí)注意創(chuàng)建對(duì)象后,調(diào)用MwMoGraphicsViewController的SetMdiInterface接口將MwMoWindowMdi設(shè)置進(jìn)去。mdiModelView=
newMwMoWindowMdi(moController,
this);moController->SetMdiInterface(mdiModelView);前驅(qū)電車APP類實(shí)現(xiàn)4.MwVehicleClassBrowserPanelMwVehicleClassBrowserPanel繼承QDockWidget,為模型瀏覽器的面板容器,其內(nèi)部創(chuàng)建MwVehicleClassBrowser。模型瀏覽器如右圖所示。MwVehicleClassBrowserPanel繼承QDockWidget,為模型瀏覽器的面板容器,其內(nèi)部創(chuàng)建MwVehicleClassBrowser。classBrowser=
newMwVehicleClassBrowser(this);this->setWidget(classBrowser);前驅(qū)電車APP類實(shí)現(xiàn)4.MwVehicleClassBrowserPanelMwVehicleClassBrowser繼承QTreeView,用于顯示模型樹(shù),其內(nèi)部創(chuàng)建MwMoClassTreeModel,并將其設(shè)置為模型瀏覽器的數(shù)據(jù)模型,如下為代碼部分。treeModel=
newMwMoClassTreeModel(ClassMgrPtr);this->setModel(treeModel);MwMoClassTreeModel基類為QStandardItemModel,是SDK提供的模型瀏覽器數(shù)據(jù)模型,負(fù)責(zé)構(gòu)造內(nèi)核加載的模型對(duì)應(yīng)的上層數(shù)據(jù)樹(shù)狀結(jié)構(gòu),設(shè)置到QTreeView中使用。前驅(qū)電車APP類實(shí)現(xiàn)5.MwVehicleParamBrowserPanelMwVehicleParamBrowserPanel繼承QDockWidget,為參數(shù)面板的面板容器,其內(nèi)部創(chuàng)建MwModelParameterTabWidget。代碼實(shí)現(xiàn)和參數(shù)面板如下所示。paramBrowser=
newMwModelParameterTabWidget(mo_controller,MwParamEditMode::PEM_Panel,
this);this->setWidget(paramBrowser);MwModelParameterTabWidget為SDK提供的參數(shù)面板組件,其可以通過(guò)連接MwMoGraphicsViewController的SigUpdate信號(hào),實(shí)現(xiàn)對(duì)當(dāng)前選中組件的參數(shù)顯示和編輯。前驅(qū)電車APP類實(shí)現(xiàn)6.MwVehicleResultBrowserPanelMwVehicleResultBrowserPanel繼承QDockWidget,為結(jié)果瀏覽器的面板容器,其內(nèi)部創(chuàng)建MwVehicleResultBrowser。MwVehicleResultBrowser繼承QTreeWidget,用于顯示仿真結(jié)果變量樹(shù)。resultBrowser=
newMwVehicleResultBrowser(this);this->setWidget(resultBrowser);前驅(qū)純電車APP模型操作模塊1.加載模型庫(kù)MwVehicleMainWindow中實(shí)現(xiàn)了加載系統(tǒng)模型庫(kù)的接口LoadLibrary,接口中創(chuàng)建一個(gè)MwVehicleLoadLibraryTask線程進(jìn)行模型庫(kù)加載。voidMwVehicleMainWindow::LoadLibrary(constQString&lib_name,
constQString&lib_ver){
if
(TaskMgrPtr->IsTaskRunning())
{ShowStatus(QStringLiteral("當(dāng)前有任務(wù)正在進(jìn)行,無(wú)法加載模型庫(kù)。"));
return;
}
if
(ClassMgrPtr->GetMoHandler()->GetKeyByTypeName(lib_name.toStdString()))
{ShowStatus(QStringLiteral("模型庫(kù)已加載。"));
return;
}ShowStatus(QStringLiteral("正在加載模型庫(kù)")
+
lib_name+
""
+lib_ver);EnableUI(false,
true);MwVehicleLoadLibraryTask*load_library_task=
newMwVehicleLoadLibraryTask(lib_name,lib_ver);TaskMgrPtr->Execute(load_library_task);}前驅(qū)純電車APP模型操作模塊1.加載模型庫(kù)MwVehicleLoadLibraryTask繼承QThread,負(fù)責(zé)在線程中執(zhí)行加載模型庫(kù)的操作,通過(guò)調(diào)用SDK提供的MwMoHandler中的LoadMoLibrary接口實(shí)現(xiàn)。voidMwVehicleLoadLibraryTask::run(){loadSuccess=ClassMgrPtr->GetMoHandler()->LoadMoLibrary(libName.toStdString(),libVersion.toStdString());emitSigLoadLibraryFinish();}前驅(qū)純電車APP模型操作模塊1.加載模型庫(kù)voidMwVehicleMainWindow::SlotLoadLibraryFinish(QThread*thread){MwVehicleLoadLibraryTask*load_lib_task=
dynamic_cast<MwVehicleLoadLibraryTask*>(thread);
if
(load_lib_task!=
nullptr
&&load_lib_task->IsLoadLibrarySuccess())
{QStringlib_name;load_lib_task->GetLibName(lib_name);dockClassBrowser->GetClassBrowser()->AddLibrary(lib_name);
}}模型庫(kù)加載成功后,觸發(fā)MwVehicleMainWindow中的SlotLoadLibraryFinish槽函數(shù),調(diào)用MwVehicleClassBrowser中的AddLibrary接口更新模型瀏覽器界面,顯示模型樹(shù)。前驅(qū)純電車APP模型操作模塊1.加載模型庫(kù)voidMwVehicleClassBrowser::AddLibrary(constQString&lib_name){clearSelection();MWintmo_key=ClassMgrPtr->GetMoHandler()->GetKeyByTypeName(lib_name.toStdString());treeModel->AppendTopClass(mo_key,QStringLiteral("模型庫(kù)"));UpdateModelIcon(mo_key);
this->expand(treeModel->GetItem(mo_key)->index());}AddLibrary接口調(diào)用MwMoClassTreeModel的AppendTopClass接口實(shí)現(xiàn)模型庫(kù)樹(shù)結(jié)構(gòu)的顯示。前驅(qū)純電車APP模型操作模塊1.加載模型庫(kù)voidMwVehicleClassBrowser::UpdateModelIcon(MWintkey){QStandardItem*item=treeModel->GetItem(key);
if
(item==
nullptr)
{
return;
}MwMoGraphicsViewController*mo_controller=AppPtr->GetMainWindow()->GetMoGraphicsViewController();item->setIcon(mo_controller->GetIcon(key,QSize(20,
20)));
for
(inti=
0;i<item->rowCount();
++i)
{UpdateNestedModelIcon(item->child(i,
0));
}}接口中的UpdateModelIcon為更新模型樹(shù)中指定模型及其嵌套模型的圖標(biāo),調(diào)用MwMoGraphicsViewController中的GetIcon接口獲取模型圖標(biāo)。前驅(qū)純電車APP模型操作模塊2.打開(kāi)前驅(qū)純電車模型voidMwVehicleMainWindow::SlotOpenModel(){
if
(TaskMgrPtr->IsTaskRunning()){ShowStatus(QStringLiteral("當(dāng)前有任務(wù)正在進(jìn)行,無(wú)法打開(kāi)模型。"));
return;}QStringstr_file=QFileDialog::getOpenFileName(this,QStringLiteral("打開(kāi)模型文件"),
"",
tr("*.mo"));
if
(str_file.isEmpty())
return;
if
(ClassMgrPtr->GetMoHandler()->GetTopClassInFile(str_file.toStdWString())){ShowStatus(QStringLiteral("模型已加載。"));
return;
}ShowStatus(QStringLiteral("正在打開(kāi)模型")
+
str_file);EnableUI(false,
true);MwVehicleOpenFileTask*open_file_task=
newMwVehicleOpenFileTask(str_file);TaskMgrPtr->Execute(open_file_task);}MwVehicleMainWindow中實(shí)現(xiàn)了打開(kāi)模型的接口SlotOpenModel,接口中創(chuàng)建一個(gè)MwVehicleOpenFileTask線程來(lái)打開(kāi)模型文件。前驅(qū)純電車APP模型操作模塊2.打開(kāi)前驅(qū)純電車模型voidMwVehicleOpenFileTask::run(){openSuccess=ClassMgrPtr->GetMoHandler()->OpenFile(filePath.toStdWString());emitSigOpenFileFinish();}MwVehicleOpenFileTask繼承Qthread,負(fù)責(zé)在線程中執(zhí)行打開(kāi)模型文件的操作,通過(guò)調(diào)用SDK的MwMoHandler中的OpenFile接口實(shí)現(xiàn)。前驅(qū)純電車APP模型操作模塊2.打開(kāi)前驅(qū)純電車模型voidMwVehicleMainWindow::SlotOpenModelFinish(QThread*thread){MwVehicleOpenFileTask*open_file_task=
dynamic_cast<MwVehicleOpenFileTask*>(thread);
if
(open_file_task!=
nullptr
&&open_file_task->IsOpenFileSuccess())
{MWintmo_key=open_file_task->GetTopClassKeyInFile();dockClassBrowser->GetClassBrowser()->AddUserModel(mo_key);mdiModelView->OpenMoWindow(mo_key,
true,MwModelicaLayer::MLAYER_DIAGRAM);
}}模型文件加載成功后,觸發(fā)MwVehicleMainWindow中的SlotOpenModelFinish槽函數(shù),調(diào)用MwVehicleClassBrowser中的AddUserModel接口更新模型瀏覽器界面,顯示模型樹(shù),并且調(diào)用MwMoWindowMdi的OpenMoWindow接口,在模型視圖中顯示打開(kāi)的模型。前驅(qū)純電車APP模型操作模塊2.打開(kāi)前驅(qū)純電車模型前驅(qū)純電車APP模型操作模塊2.打開(kāi)前驅(qū)純電車模型voidMwVehicleClassBrowser::AddUserModel(MWintmo_key){clearSelection();treeModel->AppendTopClass(mo_key,QStringLiteral("用戶模型"));UpdateModelIcon(mo_key);
this->expand(treeModel->GetItem(mo_key)->index());}AddUserModel接口調(diào)用MwMoClassTreeModel的AppenTopClass接口實(shí)現(xiàn)用戶模型樹(shù)結(jié)構(gòu)的顯示,并調(diào)用UpdateModelIcon接口更新模型圖標(biāo)。前驅(qū)純電車APP模型操作模塊3.檢查前驅(qū)純電車模型voidMwVehicleMainWindow::SlotCheckModel(){
if
(TaskMgrPtr->IsTaskRunning()){ShowStatus(QStringLiteral("當(dāng)前有任務(wù)正在進(jìn)行,無(wú)法檢查模型。"));
return;
}QStringmodel_name=QString::fromStdString(moController->GetCurrentClassName());
if
(model_name.isEmpty()){
return;
}ShowStatus(QStringLiteral("正在檢查模型")
+
model_name);EnableUI(false,
true);MwVehicleCheckModelTask*check_model_task=
newMwVehicleCheckModelTask(model_name);TaskMgrPtr->Execute(check_model_task);}MwVehicleMainWindow中實(shí)現(xiàn)了檢查模型語(yǔ)法語(yǔ)義是否正確的模型檢查接口SlotCheckModel,接口中創(chuàng)建一個(gè)MwVehicleCheckModelTask線程進(jìn)行模型檢查。前驅(qū)純電車APP模型操作模塊3.檢查前驅(qū)純電車模型voidMwVehicleCheckModelTask::run(){checkSuccess=ClassMgrPtr->GetMoHandler()->CheckModel(modelName.toStdString());emitSigCheckModelFinish();}MwVehicleCheckModelTask繼承QThread,負(fù)責(zé)在線程中執(zhí)行檢查模型的操作,通過(guò)調(diào)用SDK的CheckModel接口實(shí)現(xiàn)。前驅(qū)純電車APP模型操作模塊4.保存前驅(qū)純電車模型MwVehicleMainWindow中實(shí)現(xiàn)了保存模型的接口SlotSaveModel,該接口:Step1:調(diào)用MwMoWindowMdi的GetCurrentClassKey獲取當(dāng)前模型窗口的模型鍵值;Step2:調(diào)用MwMoHandler的GetTopClassFileByKey獲取當(dāng)前模型的頂層類鍵值,以此頂層模型為保存的對(duì)象;Step3:調(diào)用MwMoWindowMdi的SaveCurrentWindow接口以及MwMoHandler的SaveModel接口保存窗口狀態(tài)和底層模型文件;Step4:調(diào)用MwMoGraphicsViewController的SetClassDirty移除頂層模型的臟標(biāo)志。前驅(qū)純電車APP模型操作模塊4.保存前驅(qū)純電車模型MwVehicleMainWindow實(shí)現(xiàn)代碼如下。voidMwVehicleMainWindow::SlotSaveModel(){
if
(TaskMgrPtr->IsTaskRunning()){ShowStatus(QStringLiteral("當(dāng)前有任務(wù)正在進(jìn)行,無(wú)法保存模型。"));
return;
}MWintclass_key=mdiModelView->GetCurrentClassKey();
if
(class_key==
0)
return;QStringmo_name=QString::fromStdString(ClassMgrPtr->GetMoHandler()->GetFullnameProp(class_key));MWinttop_class_key=ClassMgrPtr->GetMoHandler()->GetTopClassInFileByKey(class_key);ShowStatus(QStringLiteral("正在保存模型")
+
mo_name);
if
(mdiModelView->SaveCurrentWindow()
&&
ClassMgrPtr->GetMoHandler()->SaveModel(ClassMgrPtr->GetMoHandler()->GetFullnameProp(top_class_key))
==MWStat_Ok){moController->SetClassDirty(top_class_key,
false);ShowStatus(QStringLiteral("模型")
+
mo_name+QStringLiteral("保存成功。"));
}else{ShowStatus(QStringLiteral("模型")
+
mo_name+QStringLiteral("保存失敗。"));
}}前驅(qū)純電車APP模型操作模塊5.卸載前驅(qū)純電車模型MwVehicleMainWindow中實(shí)現(xiàn)了卸載模型的接口SlotUnloadModel,接口中調(diào)用MwVehicleClassBrowser中的UnloadModel接口卸載模型樹(shù),然后調(diào)用MoWindowMdi的CloseMoWindow關(guān)閉模型窗口,最后調(diào)用MwMoHandler的UnloadModel接口卸載底層模型數(shù)據(jù)。前驅(qū)純電車APP模型操作模塊5.卸載前驅(qū)純電車模型MwVehicleMainWindow實(shí)現(xiàn)代碼如下。voidMwVehicleMainWindow::SlotUnloadModel(){
if
(TaskMgrPtr->IsTaskRunning()){ShowStatus(QStringLiteral("當(dāng)前有任務(wù)正在進(jìn)行,無(wú)法卸載模型。"));
return;
}MWintmo_key=dockClassBrowser->GetClassBrowser()->GetCurrentClassKey();QStringmo_name=QString::fromStdString(ClassMgrPtr->GetMoHandler()->GetFullnameProp(mo_key));ShowStatus(QStringLiteral("正在卸載模型")
+
mo_name);dockClassBrowser->GetClassBrowser()->UnloadModel(mo_key);mdiModelView->CloseMoWindow(mo_key);
if
(ClassMgrPtr->GetMoHandler()->UnloadModel(mo_name.toStdString()))
{ShowStatus(QStringLiteral("模型")
+
mo_name+QStringLiteral("卸載成功。"));
}else{ShowStatus(QStringLiteral("模型")
+
mo_name+QStringLiteral("卸載失敗。"));
}}前驅(qū)純電車APP模型仿真模塊1.前驅(qū)純電車模型仿真設(shè)置MwVehicleMainWindow中實(shí)現(xiàn)了仿真設(shè)置的接口SlotSimConfig,接口創(chuàng)建一個(gè)MwVehicleSimConfigDialog對(duì)話框并彈出。voidMwVehicleMainWindow::SlotSimConfig()
{
MwVehicleSimConfigDialogsim_config_dlg(SimMgrPtr->GetExperimentData(),
this);
sim_config_dlg.exec();
}前驅(qū)純電車APP模型仿真模塊MwVehicleSimConfigDialog中創(chuàng)建一個(gè)SDK提供的MwSimConfigWidget仿真設(shè)置組件,并將其設(shè)置到對(duì)話框內(nèi)顯示。voidMwVehicleSimConfigDialog::SetupUi()
{
centralLayout=
newQVBoxLayout(this);
simConfigWgt=
newMwSimConfigWidget(expData,
this);
centralLayout->addWidget(simConfigWgt);
}
前驅(qū)純電車APP模型仿真模塊2.翻譯前驅(qū)純電車模型MwVehicleMainWindow中實(shí)現(xiàn)了翻譯模型的接口CompileModel,接口中創(chuàng)建一個(gè)MwVehicleCompileModelTask線程進(jìn)行模型翻譯。voidMwVehicleMainWindow::CompileModel(booltranslate_and_sim)
{
if
(TaskMgrPtr->IsTaskRunning()){ShowStatus(QStringLiteral("當(dāng)前有任務(wù)正在進(jìn)行,無(wú)法翻譯模型。"));
return;
}
QStringmodel_name=QString::fromStdString(moController->GetCurrentClassName());
if
(model_name.isEmpty()){
return;
}
ShowStatus(QStringLiteral("正在翻譯模型")
+
model_name);
dockResultBrowser->GetResultBrowser()->CloseAllPlotWindow();
EnableUI(false,
true);
MwVehicleCompileModelTask*compile_model_task=
newMwVehicleCompileModelTask(model_name,translate_and_sim);
TaskMgrPtr->Execute(compile_model_task);
}前驅(qū)純電車APP模型仿真模塊MwVehicleCompileModelTask繼承QThread,負(fù)責(zé)在線程中創(chuàng)建仿真實(shí)例目錄并調(diào)用MwMoHandler的CompileModel接口翻譯模型。voidMwVehicleCompileModelTask::run()
{SimMgrPtr->CreateSimInstDir(modelName);SimMgrPtr->GetSimInstDir(modelName,simInstDir);
compileSuccess=ClassMgrPtr->GetMoHandler()->CompileModel(modelName.toStdString(),simInstDir.toStdWString());
emitSigCompileModelFinish();
}前驅(qū)純電車APP模型仿真模塊前驅(qū)純電車APP模型仿真模塊3.仿真前驅(qū)純電車模型MwVehicleMainWindow中實(shí)現(xiàn)了仿真模型的接口StartSimulate,接口調(diào)用MwVehicleSimManager的SimulateModel接口實(shí)現(xiàn)仿真。voidMwVehicleMainWindow::StartSimulate()
{
if
(TaskMgrPtr->IsTaskRunning())
{ShowStatus(QStringLiteral("當(dāng)前有任務(wù)正在進(jìn)行,無(wú)法仿真模型。"));
return;
}QStringmodel_name=QString::fromStdString(moController->GetCurrentClassName());
if
(model_name.isEmpty())
{
return;
}
ShowStatus(QStringLiteral("正在仿真模型")
+
model_name);EnableUI(false,
true);
SimMgrPtr->SimulateModel(model_name);
}前驅(qū)純電車APP模型仿真模塊SimulateModel接口首先將先前與MwSimControl綁定的MwSimData銷毀,并創(chuàng)建新的MwSimData與之綁定,然后調(diào)用MwSimData的InitializeSimInst初始化仿真實(shí)例,并調(diào)用MwSimData的ApplyExperimentData應(yīng)用仿真設(shè)置。最后調(diào)用SimControl的StartSimualte啟動(dòng)仿真。boolMwVehicleSimManager::SimulateModel(constQString&model_name)
{
modelName=model_name;MwSimData*sim_data=simCtrl->GetSimData();
if
(sim_data)
{
deletesim_data;simCtrl->RebindSimData(nullptr);
}
QStringresult_path,inst_path;
GetSimInstDir(model_name,inst_path);
GetSimResultPath(model_name,result_path);
sim_data=
newMwSimData(model_name.toStdWString(),result_path.toStdWString(),inst_path.toStdWString());
sim_data->InitializeSimInst();
sim_data->ApplyExperimentData(expData);
simCtrl->RebindSimData(sim_data);
returnsimCtrl->StartSimulate(MwSimControl::Sim_ContinueMode);
}
前驅(qū)純電車APP模型仿真模塊4.前驅(qū)純電車模型仿真結(jié)果加載MwVehicleResultBrowser中實(shí)現(xiàn)了加載仿真結(jié)果的接口LoadSimData,接口加載仿真結(jié)果并構(gòu)造一棵變量樹(shù)。voidMwVehicleResultBrowser::LoadSimData(MwSimData*sim_data)
{
this->clear();
popro::MwVarTree*var_root=sim_data->GetVarTreeRoot();
if
(var_root==
nullptr)
return;QTreeWidgetItem*top_item=
newQTreeWidgetItem();top_item->setText(0,QString::fromStdWString(var_root->Name()));
top_item->setData(0,Qt::UserRole,QVariant::fromValue(QString::fromStdWString(var_root->GetFullName())));
this->addTopLevelItem(top_item);AppendChildItem(sim_data,top_item,var_root);
this->expandToDepth(0);
}前驅(qū)純電車APP模型仿真模塊5.前驅(qū)純電車模型變量曲線顯示MwVehicleResultBrowser中實(shí)現(xiàn)了顯示變量曲線的接口PlotCurve,接口創(chuàng)建一個(gè)MwSimPlotWindow并添加曲線到
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025屆江蘇省連云港市灌云縣高三第二次診斷性檢測(cè)英語(yǔ)試卷含答案
- 2025屆云南省麗江縣第三中學(xué)高三第六次模擬考試英語(yǔ)試卷含答案
- 2025屆天津四中高三第四次模擬考試英語(yǔ)試卷含解析
- 2025年上海市外國(guó)語(yǔ)大學(xué)附屬上外高中高三下學(xué)期第五次調(diào)研考試英語(yǔ)試題含答案
- 2025年陜西省漢中中學(xué)高三第六次模擬考試英語(yǔ)試卷含答案
- 農(nóng)村土地流轉(zhuǎn)規(guī)范化管理中的土地流轉(zhuǎn)糾紛解決機(jī)制報(bào)告
- 2025年職業(yè)資格-社會(huì)工作者綜合能力初級(jí)模擬考試題庫(kù)試卷
- 裝備制造業(yè)自主創(chuàng)新能力提升中的企業(yè)技術(shù)創(chuàng)新能力評(píng)價(jià)與提升策略報(bào)告
- 2025經(jīng)濟(jì)適用房租售合同模板
- 智能客服情感分析技術(shù):跨界融合與創(chuàng)新應(yīng)用的研究報(bào)告
- 土地旋耕合同協(xié)議書(shū)范本
- 2025年山東省應(yīng)急管理普法知識(shí)競(jìng)賽參考試題庫(kù)500題(含答案)
- 訂餐協(xié)議合同協(xié)議
- 湖北省武漢市2025屆高中畢業(yè)生四月調(diào)研考試數(shù)學(xué)試卷及答案(武漢四調(diào))
- 普通高等學(xué)校軍事理論教程
- 焊縫超聲波探傷檢測(cè)報(bào)告
- 全國(guó)高中語(yǔ)文優(yōu)質(zhì)課一等獎(jiǎng)《雷雨》 課件
- 鍋爐專項(xiàng)吊裝施工方案
- 碳排放核算方法課件
- 江蘇省工程技術(shù)研究中心名錄
- 發(fā)育生物學(xué) 第一章 緒論
評(píng)論
0/150
提交評(píng)論