本發(fā)明涉及一種插件更新系統(tǒng),尤其涉及一種微觀交通仿真引擎插件熱更新系統(tǒng)。
背景技術:
1、實現插件化的方法有多種,例如通過將插件編譯為動態(tài)鏈接庫的方法,主程序在運行時加載這些庫。或通過面向對象設計模式,如工廠模式、策略模式等,將插件封裝為類,通過基類和虛函數實現插件接口。現有的交通仿真系統(tǒng)的插件框架,基本沒有實現熱更新特性,大部分的流程都是在啟動時加載插件代碼,或者在第一次運行時加載插件代碼,但一旦加載完成后,再修改插件代碼就不會應用到主程序內了,需要關閉主程序重新加載插件才能應用更新內容,相當繁瑣,且在大型仿真實驗中這種方法具有很大的弊端,一次大型仿真實驗是連續(xù)的且時間很長的,很多時候需要實時修改插件內容并且不能中斷仿真,因此熱更新插件框架是非常有必要的。
技術實現思路
1、本發(fā)明的目的就在于提供一種解決上述問題,提供一個可以實時熱更新的插件化框架,能對插件進行熱更新的,一種微觀交通仿真引擎插件熱更新系統(tǒng)。
2、為了實現上述目的,本發(fā)明采用的技術方案是這樣的:一種微觀交通仿真引擎插件熱更新系統(tǒng),應用于由c++編寫的微觀交通仿真引擎和由python編寫的插件,所述微觀交通仿真引擎包括功能模塊,所述插件包括文件描述和代碼,還包括邏輯接管服務單元、文件系統(tǒng)、插件生命周期管理服務單元、預加載錯誤處理單元、插件監(jiān)控服務單元,其中;
3、邏輯接管服務單元:用于在執(zhí)行功能模塊時,將功能模塊的內部運行邏輯,修改為外部插件運行邏輯;
4、文件系統(tǒng):用于存儲插件的文件描述和代碼,并將存儲在文件系統(tǒng)中的文件描述標記為內部文件描述、插件內文件描述標記為外部文件描述;
5、插件生命周期管理服務單元:包括注冊單元、加載單元、卸載單元和更新單元;
6、注冊單元:用于對插件進行注冊,注冊時僅讀取插件的文件描述,并保存在文件系統(tǒng)中;
7、加載單元:用于對插件進行懶加載,所述懶加載為,未運行插件時僅加載外部文件描述,初次運行時加載其代碼,并將該版本保存在內存中;
8、卸載單元:用于對插件進行卸載插件,并刪除文件系統(tǒng)對應的文件描述、代碼;
9、更新單元:用于在插件發(fā)生改變時,卸載舊版本,注冊、加載新版本;
10、預加載錯誤處理單元:用于在對插件進行懶加載后,加載插件的代碼試運行進行語法檢查,若代碼無誤,保留代碼快照,并卸載插件代碼只保留插件描述信息;
11、若代碼有誤,查詢是否存有代碼快照,若有,通過代碼快照回滾至上一版本,若無,則報錯;
12、插件監(jiān)控服務單元:用于定期監(jiān)控外部文件描述是否發(fā)生變化,若變化,觸發(fā)更新單元工作。
13、所述功能模塊包括車輛模塊、路網模塊、控制模塊、相位更新模塊、仿真模型切換模塊和持久化模塊。
14、插件監(jiān)控服務單元中,定期監(jiān)控外部文件描述是否發(fā)生變化,具體為,當第一次加載插件的描述文件時,記錄一次修改時間戳至內部文件描述,定期檢查插件代碼最近一次的修改時間戳,若與內部描述文件中不同,則判斷為發(fā)生變化,并更新內部文件描述的修改的時間戳。
15、所述文件系統(tǒng)包含一目錄,用于保存文件描述,所述目錄為相對路徑或絕對路徑。
16、所述功能模塊和插件上設有邏輯接口,用于在c++和python間建立通信。
17、與現有技術相比,本發(fā)明的優(yōu)點在于:
18、(1)本發(fā)明產品采用了在項目中嵌入腳本語言解釋器的方法來實現插件化,具有以下優(yōu)點:上手快、學習成本低、開發(fā)難度?。回S富的生態(tài),python具有各種已經封裝好的第三方庫;耦合度低,跨平臺方便等。
19、(2)本發(fā)明對插件進行懶加載,未運行插件時僅加載外部文件描述,初次運行時加載其代碼,并將該版本保存在內存中,但會用預加載錯誤處理單元對代碼進行語法檢查,若代碼無誤,保留代碼快照,并卸載插件代碼只保留插件描述信息。懶加載可節(jié)省內存資源,并提高引擎初始化速度,代碼快照可增加容錯率,并增強引擎穩(wěn)定性。
20、(3)本發(fā)明通過插件監(jiān)控服務單元,對文件描述進行定期檢查,若發(fā)現文件描述發(fā)生變化,它會觸發(fā)更新單元工作;更新單元工作時,微觀交通仿真引擎會卸載舊版本,重新注冊、加載新版本。這樣,插件的更新就能夠實時應用,而不需要關閉主程序。
21、綜上,本發(fā)明的熱更新特性提高了區(qū)域微觀交通仿真的靈活性與可擴展性。
1.一種微觀交通仿真引擎插件熱更新系統(tǒng),應用于由c++編寫的微觀交通仿真引擎和由python編寫的插件,所述微觀交通仿真引擎包括功能模塊,所述插件包括文件描述和代碼,其特征在于:還包括邏輯接管服務單元、文件系統(tǒng)、插件生命周期管理服務單元、預加載錯誤處理單元、插件監(jiān)控服務單元,其中;
2.根據權利要求1所述的一種微觀交通仿真引擎插件熱更新系統(tǒng),其特征在于:所述功能模塊包括車輛模塊、路網模塊、控制模塊、相位更新模塊、仿真模型切換模塊和持久化模塊。
3.根據權利要求1所述的一種微觀交通仿真引擎插件熱更新系統(tǒng),其特征在于:插件監(jiān)控服務單元中,定期監(jiān)控外部文件描述是否發(fā)生變化,具體為,當第一次加載插件的描述文件時,記錄一次修改時間戳至內部文件描述,定期檢查插件代碼最近一次的修改時間戳,若與內部描述文件中不同,則判斷為發(fā)生變化,并更新內部文件描述的修改的時間戳。
4.根據權利要求1所述的一種微觀交通仿真引擎插件熱更新系統(tǒng),其特征在于:所述文件系統(tǒng)包含一目錄,用于保存文件描述,所述目錄為相對路徑或絕對路徑。
5.根據權利要求1所述的一種微觀交通仿真引擎插件熱更新系統(tǒng),其特征在于:所述功能模塊和插件上設有邏輯接口,用于在c++和python間建立通信。