国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Lua腳本與C++交互流程及在其HSTPN仿真軟件的應(yīng)用

2018-10-24 07:59:14陳佳銘王風(fēng)立鄧君湘曹瑞珉
關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu)視圖文檔

陳佳銘 王風(fēng)立 鄧君湘 曹瑞珉

1(東北大學(xué)中荷生物醫(yī)學(xué)與信息工程學(xué)院 遼寧 沈陽 110819)2(海信網(wǎng)絡(luò)科技股份有限公司 山東 青島 266071)3(沈陽特種設(shè)備檢測研究院 遼寧 沈陽 110035)4(東北大學(xué)機(jī)械工程與自動(dòng)化學(xué)院 遼寧 沈陽 110819)

0 引 言

Petri網(wǎng)是一種簡潔的、圖形化的網(wǎng)絡(luò)模型,它既能表示靜態(tài)的系統(tǒng)拓?fù)浣Y(jié)構(gòu),也能用于系統(tǒng)動(dòng)態(tài)行為的仿真。然而,傳統(tǒng)Petri網(wǎng)并不能全面描述系統(tǒng)中連續(xù)、隨機(jī)、時(shí)延和沖突等混雜特性?;祀s隨機(jī)時(shí)延Petri網(wǎng)HSTPN[1]是基于條件事件網(wǎng)改進(jìn)的高級(jí)Petri網(wǎng)模型,其含有離散、連續(xù)、隨機(jī)、時(shí)延和控制5種庫所,能有效描述系統(tǒng)中存在的多種混雜特性, 目前已成功應(yīng)用于梯級(jí)水庫防洪控制系統(tǒng)[2]和物流自動(dòng)分揀系統(tǒng)[1]。本文針對其仿真系統(tǒng)的開發(fā),討論Lua腳本與C++的交互流程。

1 HSTPN仿真軟件功能設(shè)計(jì)

HSTPN仿真軟件的功能劃分為如圖1所示的4類功能,包括建模功能、推演功能、模型存儲(chǔ)與加載功能、數(shù)據(jù)輸出功能。

圖1 軟件功能劃分

2 軟件開發(fā)框架、工具及運(yùn)行環(huán)境

該仿真軟件的開發(fā)框架為微軟基礎(chǔ)類庫MFC的“文檔-視圖類”開發(fā)框架[3],文檔類負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)與管理,視圖類負(fù)責(zé)數(shù)據(jù)的顯示和編輯,文檔類與視圖類的交互通過指針調(diào)用實(shí)現(xiàn)。該框架將數(shù)據(jù)的管理與顯示分離,降低了類與類之間的耦合度,進(jìn)而提高了框架的可擴(kuò)展性。同時(shí),該框架可通過文檔類和視圖類的配合,靈活管理數(shù)據(jù)的顯示,方便程序的編寫與維護(hù),適合本文軟件的開發(fā)。

該仿真軟件基于MFC單文檔程序框架開發(fā),主要包含4個(gè)C++類,如圖2所示,分別為App類、框架類、視圖類和文檔類。其中App類表示應(yīng)用程序本身,框架類用于承載視圖、工具欄、菜單欄、狀態(tài)欄等,視圖類負(fù)責(zé)數(shù)據(jù)的顯示與編輯,文檔類負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)與管理。

圖2 MFC單文檔程序框架

該軟件開發(fā)工具包括Microsoft Visual Studio 2010(簡稱VS)平臺(tái)、Lua腳本和TinyXML。VS是一個(gè)基本的、完整的開發(fā)工具集,包括整體軟件生命周期中所需要的大部分工具,如UML工具、代碼管控工具、集成開發(fā)環(huán)境等[4]。

Lua是一種開源的、小巧、使用方便的解釋性語言。Lua能很方便地嵌入到應(yīng)用程序并為它們提供靈活的擴(kuò)展和定制功能。Lua還提供非常豐富和實(shí)用的功能,比如函數(shù)式編程(所有的函數(shù)都是第一類值)、協(xié)同程序、自動(dòng)內(nèi)存管理等[5]。由于Lua所有源代碼均由ANSI C編寫,它與C/C++能非常方便的交互,可使用C/C++的擴(kuò)展庫完成一些功能較復(fù)雜的應(yīng)用。而所有這些特性都?xì)w功于它有一個(gè)精簡的、巧妙的、高效的Lua虛擬機(jī)的設(shè)計(jì)[6]。Lua采用了一種最簡單的執(zhí)行框架設(shè)計(jì)方式(switch-case),由于它指令數(shù)較少,因此也獲得了較好的執(zhí)行效率。Lua以其簡潔、可擴(kuò)展、高效性以及可移植的特點(diǎn)廣泛應(yīng)用與web服務(wù)器、游戲引擎以及嵌入式開發(fā)等領(lǐng)域[7-8]。本軟件基于Lua腳本設(shè)計(jì)了連續(xù)過程的編程實(shí)現(xiàn)方案,采用了Lua 5.3版本的解釋器。

軟件的運(yùn)行平臺(tái)為Windows操作系統(tǒng),軟件的運(yùn)行需要Microsoft.NET Framework 4.0環(huán)境的支持;HSTPN推演仿真過程中,需要將模型信息全部加載到內(nèi)存中,因此要求計(jì)算機(jī)擁有3 GB及以上的內(nèi)存配置。

3 整體架構(gòu)設(shè)計(jì)

3.1 軟件分層架構(gòu)設(shè)計(jì)

根據(jù)需求分析,并結(jié)合MFC框架“文檔-視圖類”結(jié)構(gòu),設(shè)計(jì)HSTPN仿真軟件的整體架構(gòu)如圖3所示,軟件架構(gòu)劃分為四個(gè)層次,包括人機(jī)交互層、推演仿真層、數(shù)據(jù)結(jié)構(gòu)層及文件存儲(chǔ)層。

圖3 軟件整體架構(gòu)

(1) 人機(jī)交互層 該層用于實(shí)現(xiàn)軟件的人機(jī)交互界面,直接面向用戶。在人機(jī)交互層,用戶通過創(chuàng)建HSTPN模型的節(jié)點(diǎn)、設(shè)置仿真參數(shù)、基于Lua語言進(jìn)行連續(xù)方程編寫等操作完成網(wǎng)絡(luò)模型的創(chuàng)建,并通過點(diǎn)擊按鈕進(jìn)行模型推演仿真、控制仿真進(jìn)程、進(jìn)行模型存儲(chǔ)、模型加載、數(shù)據(jù)存儲(chǔ)等操作。人機(jī)交互層將用戶操作信息轉(zhuǎn)化為數(shù)據(jù),存儲(chǔ)在數(shù)據(jù)結(jié)構(gòu)層相應(yīng)的數(shù)據(jù)結(jié)構(gòu)中;該層還不斷監(jiān)測數(shù)據(jù)結(jié)構(gòu)層中各種數(shù)據(jù)的變化,并轉(zhuǎn)化為人機(jī)交互層中各種圖形的改變,從而完成模型狀態(tài)、推演動(dòng)畫及數(shù)據(jù)展示等功能。

(2) 數(shù)據(jù)結(jié)構(gòu)層 該層封裝了HSTPN仿真軟件建模、仿真、數(shù)據(jù)輸出等過程中用到的各類數(shù)據(jù)結(jié)構(gòu)。當(dāng)用戶通過人機(jī)交互界面進(jìn)行建模、參數(shù)設(shè)置等操作時(shí),數(shù)據(jù)結(jié)構(gòu)層接收人機(jī)交互層的操作信息,并將其轉(zhuǎn)換成數(shù)據(jù)存儲(chǔ)在對應(yīng)的數(shù)據(jù)結(jié)構(gòu)中;在HSTPN推演過程中,該層不斷接收模型的數(shù)據(jù)變化信息、仿真輸出數(shù)據(jù)等,并重新存儲(chǔ)到相應(yīng)的數(shù)據(jù)結(jié)構(gòu)中。

(3) 推演仿真層 該層主要完成三部分的功能,一是讀取數(shù)據(jù)結(jié)構(gòu)層存儲(chǔ)的HSTPN模型的數(shù)據(jù)信息,基于HSTPN推演引擎完成模型推演仿真,并將推演過程中的數(shù)據(jù)實(shí)時(shí)傳遞回?cái)?shù)據(jù)結(jié)構(gòu)層;二是模型推演過程中,利用推演動(dòng)畫展示程序?qū)崟r(shí)的驅(qū)使相應(yīng)的數(shù)據(jù)傳遞給人機(jī)交互層,引起人機(jī)交互層各圖形的變化,從而實(shí)現(xiàn)推演動(dòng)畫展示的功能;三是在模型推演過程中,利用仿真數(shù)據(jù)輸出程序驅(qū)動(dòng)數(shù)據(jù)結(jié)構(gòu)層中接收的仿真數(shù)據(jù)賦值給相應(yīng)的數(shù)據(jù)輸出節(jié)點(diǎn)。

(4) 文件存儲(chǔ)層 該層主要負(fù)責(zé)模型文件的存儲(chǔ)與加載、仿真數(shù)據(jù)的存儲(chǔ)功能。當(dāng)用戶通過點(diǎn)擊人機(jī)交互界面上的“保存”按鈕進(jìn)行存儲(chǔ)操作時(shí),文件存儲(chǔ)層讀取數(shù)據(jù)結(jié)構(gòu)層存儲(chǔ)的模型數(shù)據(jù)或仿真數(shù)據(jù),將其寫入文件并存儲(chǔ)在電腦磁盤中;當(dāng)用戶通過點(diǎn)擊人機(jī)交互界面上的“打開”按鈕,文件存儲(chǔ)層讀取存儲(chǔ)電腦磁盤文件中的信息,并將其轉(zhuǎn)換成相應(yīng)的數(shù)據(jù),重新存儲(chǔ)于數(shù)據(jù)結(jié)構(gòu)層。

3.2 基于MFC的軟件類架構(gòu)設(shè)計(jì)

根據(jù)圖3的軟件分層架構(gòu),結(jié)合MFC單文檔程序的框架及各C++類的功能,設(shè)計(jì)HSTPN仿真軟件的程序架構(gòu)如圖4所示,是對軟件分層架構(gòu)程序的實(shí)現(xiàn)方案。具體的對應(yīng)關(guān)系如下:

1) CHSTPN_SYSView類:

CHSTPN_SYSView類繼承自CView類,即視圖類。在MFC架構(gòu)中,視圖類負(fù)責(zé)數(shù)據(jù)的顯示與編輯,因此,在HSTPN仿真軟件中,CHSTPN_SYSView類用作人機(jī)交互層的實(shí)現(xiàn)類。圖4中CHSTPN_SYSView類的結(jié)構(gòu)圖列出了該類主要涉及的功能的實(shí)現(xiàn)方法,其中:

(1) CreateNode方法:用于創(chuàng)建HSTPN模型中的狀態(tài)節(jié)點(diǎn)及事件節(jié)點(diǎn);

(2) CreateArcs方法:用于創(chuàng)建HSTPN模型中的有向?。?/p>

(3) Draw方法:用來實(shí)現(xiàn)推演動(dòng)畫的展示、仿真數(shù)據(jù)展示等功能;

(4) MoveNode方法:用來實(shí)現(xiàn)HSTPN模型中節(jié)點(diǎn)的移動(dòng)功能;

(5) DeleteNode方法:用來實(shí)現(xiàn)HSTPN模型中節(jié)點(diǎn)刪除功能。

圖4 軟件分層架構(gòu)的程序?qū)崿F(xiàn)類關(guān)系圖

2) CHSTPN_SYSDoc類:

CHSTPN_SYSDoc類繼承自CDocument類,即文檔類。在MFC架構(gòu)中,文檔類負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)與管理,因此,數(shù)據(jù)結(jié)構(gòu)層中的各數(shù)據(jù)結(jié)構(gòu)定義在文檔類中;由于文件存儲(chǔ)層的功能本質(zhì)是對數(shù)據(jù)結(jié)構(gòu)層中的數(shù)據(jù)的直接讀取、保存和重新生成,因此,文件存儲(chǔ)層的功能也在CHSTPN_SYSDoc文檔類中實(shí)現(xiàn)。圖4中CHSTPN_SYSDoc類的結(jié)構(gòu)圖,列出了該類主要涉及的數(shù)據(jù)結(jié)構(gòu)及功能的實(shí)現(xiàn)方法,其中:

(1) vecPlaces、vecTrans、vecArcs和vecOutput:四個(gè)動(dòng)態(tài)數(shù)組,分別用于存儲(chǔ)HSTPN模型中包含的狀態(tài)節(jié)點(diǎn)、事件節(jié)點(diǎn)、有向弧和輸出節(jié)點(diǎn),上述元素的實(shí)現(xiàn)類,即CPlace、CTransition、CArc和COutput類的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)將在第4章講述;

(2) SaveModel方法:用來實(shí)現(xiàn)HSTPN模型存儲(chǔ)功能;

(3) LoadModel方法:用來實(shí)現(xiàn)HSTPN模型加載功能;

(4) SaveSimData方法:用來實(shí)現(xiàn)仿真數(shù)據(jù)存儲(chǔ)的功能。

3) CHSTPN_SYSSim類:

在軟件設(shè)計(jì)開發(fā)過程中,應(yīng)用面向?qū)ο蟮慕K枷?,推演仿真層單?dú)構(gòu)建一個(gè)類來實(shí)現(xiàn),將其命名為CHSTPN_SYSSim。CHSTPN_SYSSim類的結(jié)構(gòu)如圖4所示,其中:

(1) SimEngine方法:表示模型推演引擎,負(fù)責(zé)實(shí)現(xiàn)仿真推演功能;

(2) AnmatnDemo方法:用于模型推演的同時(shí),驅(qū)動(dòng)CHSTPN_SYSView類中Draw方法的執(zhí)行;

(3) SimDataOut方法:用來將仿真過程中模型數(shù)據(jù)賦值給輸出節(jié)點(diǎn)。

4 基于Lua腳本的連續(xù)過程的建模實(shí)現(xiàn)

4.1 Lua腳本與C++的交互流程

建模功能是HSTPN仿真軟件的基本功能,需要完成HSTPN模型的狀態(tài)節(jié)點(diǎn)、事件節(jié)點(diǎn)和有向弧創(chuàng)建,節(jié)點(diǎn)屬性設(shè)置,連續(xù)物理層的編程等操作。其中,HSTPN模型中的連續(xù)物理層一般采用微分方程或狀態(tài)方程來描述。隨著仿真案例的不同,HSTPN模型中用于描述連續(xù)過程的微分方程或狀態(tài)方程也不相同。HSTPN仿真軟件中,在連續(xù)狀態(tài)節(jié)點(diǎn)中內(nèi)嵌一個(gè)Lua腳本,用戶可在該腳本中通過Lua語言設(shè)計(jì)、編寫自己的微分方程或狀態(tài)方程,提高了軟件的可擴(kuò)展性。

當(dāng)一個(gè)連續(xù)狀態(tài)節(jié)點(diǎn)激活后,其內(nèi)嵌的Lua腳本開始執(zhí)行,此時(shí)連續(xù)狀態(tài)節(jié)點(diǎn)中創(chuàng)建一個(gè)Lua虛擬堆棧,用于Lua和C++程序之間的交互。Lua腳本與C++的交互流程如圖5所示。

圖5 Lua腳本與C++交互流程

4.2 連續(xù)模型的案例創(chuàng)建

HSTPN仿真軟件界面如圖6所示,界面分為3個(gè)區(qū)域:菜單欄與工具欄、元素選擇區(qū)、模型展示區(qū)。其中菜單欄和工具欄中列舉了“保存”、“打開”等菜單項(xiàng),模型元素選擇區(qū)列出了HSTPN博弈模型的基本元素及軟件的數(shù)據(jù)輸出節(jié)點(diǎn),模型編輯區(qū)負(fù)責(zé)HSTPN博弈模型的搭建、屬性設(shè)置、動(dòng)畫展示等。

圖6展示的仿真模型中,p4和p28兩個(gè)狀態(tài)節(jié)點(diǎn)分別用于描述兩個(gè)連續(xù)過程,通過Lua腳本進(jìn)行編程實(shí)現(xiàn),Lua腳本的創(chuàng)建過程如圖7所示。

5 結(jié) 語

本文結(jié)合MFC“文檔-視圖類”結(jié)構(gòu)設(shè)計(jì)了軟件的分層架構(gòu)及程序?qū)崿F(xiàn)框架。本軟件包含的功能主要分為四類:HSTPN模型搭建功能、推演功能、仿真模型的存儲(chǔ)與加載功能、仿真數(shù)據(jù)輸出功能。分析了Lua腳本與C++的交互流程,實(shí)現(xiàn)了連續(xù)過程編程功能。

猜你喜歡
數(shù)據(jù)結(jié)構(gòu)視圖文檔
有人一聲不吭向你扔了個(gè)文檔
5.3 視圖與投影
視圖
Y—20重型運(yùn)輸機(jī)多視圖
SA2型76毫米車載高炮多視圖
基于RI碼計(jì)算的Word復(fù)制文檔鑒別
“翻轉(zhuǎn)課堂”教學(xué)模式的探討——以《數(shù)據(jù)結(jié)構(gòu)》課程教學(xué)為例
高職高專數(shù)據(jù)結(jié)構(gòu)教學(xué)改革探討
中國市場(2016年45期)2016-05-17 05:15:48
Persistence of the reproductive toxicity of chlorpiryphos-ethyl in male Wistar rat
TRIZ理論在“數(shù)據(jù)結(jié)構(gòu)”多媒體教學(xué)中的應(yīng)用
石景山区| 茶陵县| 漠河县| 河西区| 吴旗县| 桦甸市| 清新县| 贺兰县| 句容市| 化州市| 勐海县| 本溪市| 淮滨县| 临沭县| 张家港市| 讷河市| 溧阳市| 穆棱市| 永济市| 乐亭县| 陇南市| 万安县| 阿尔山市| 庄浪县| 芦山县| 绿春县| 隆回县| 冀州市| 屏南县| 白银市| 济阳县| 岗巴县| 新沂市| 海口市| 加查县| 彰化县| 博野县| 多伦县| 祥云县| 黄平县| 新龙县|