孫懷宇 劉東斌 彭弗楠 王祝敏 高楓
摘要:化工實(shí)驗(yàn)仿真軟件需要準(zhǔn)確的模型,嚴(yán)密的邏輯和美觀逼真的界面。使用C#.net或Flash單獨(dú)開發(fā)都有各自的優(yōu)點(diǎn)和缺點(diǎn)。該論文應(yīng)用Flash開發(fā)仿真界面,使用C#.net開發(fā)邏輯、算法及數(shù)據(jù)庫(kù)訪問(wèn),結(jié)合二者開發(fā)了化工原理阻力實(shí)驗(yàn)仿真程序。分析了在Flash中制作界面的工作及技術(shù),研究了二者之間參數(shù)及事件的傳遞方法。為提高開發(fā)效率,研究了自動(dòng)生成ActionScript 代碼的方法。二者結(jié)合開發(fā)的軟件具有結(jié)構(gòu)良好,界面美觀,功能強(qiáng)大等特點(diǎn)。
關(guān)鍵詞:化工實(shí)驗(yàn);仿真軟件;Flash C#.net
中圖分類號(hào):TQ016.1 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)18-0086-02
Research of Development of Chemical Experiments Simulation Software Using Flash and C#
SUN Huai-yu, LIU Dong-bin, PENG Fei-nan,WANG Zhou-min,GAO Feng
(Shenyang University of chemical Technology, Shenyang 110142, China)
Abstract: Chemical experiment simulation software needs accurate numerical models, rigorous logic and aesthetics realistic interface. Development by Flash or C#.net has its own advantages and disadvantages. In this paper, Flash is employed to develop the simulation interface while C#.net is employed to development logic, algorithms and database access. The combination is used to developed simulation program for resistance experiment in unit operations of chemical engineering. The work and technology needed in Flash is researched, and transfer of parameters between the two parts is also discussed. A program that can automatically generate Action Script code is also developed in order to improve development efficiency. The simulation software developed by this method has good structure, beautiful interface and powerful functions.
Key words: chemical experiment; simulation software; Flash; C#.net
1 背景
化工實(shí)驗(yàn)是化工及相關(guān)學(xué)生學(xué)習(xí)中重要的教學(xué)環(huán)節(jié),是學(xué)生實(shí)踐理論知識(shí)的重要過(guò)程?;し矫娴膶?shí)驗(yàn)包括化工原理實(shí)驗(yàn)、化工專業(yè)實(shí)驗(yàn)等。在教學(xué)實(shí)踐中,實(shí)際的實(shí)驗(yàn)存在消耗大、設(shè)備復(fù)雜、操作步驟多等特點(diǎn)。而且一旦出現(xiàn)誤操作,會(huì)給操作者帶來(lái)傷害或?qū)υO(shè)備帶來(lái)?yè)p壞。所以使用仿真實(shí)驗(yàn)對(duì)學(xué)生進(jìn)行培訓(xùn),有安全,方便等的特點(diǎn),也可以在教學(xué)中使用仿真實(shí)驗(yàn)作為實(shí)際實(shí)驗(yàn)的預(yù)習(xí)。
當(dāng)前的實(shí)驗(yàn)仿真軟件向著高仿真,高性能,網(wǎng)絡(luò)化的方向發(fā)展,目的是更好地培養(yǎng)學(xué)生的工程能力,為學(xué)生掌握知識(shí)提供更好的支撐。這些實(shí)驗(yàn)的模擬都需要較精確的數(shù)學(xué)模型,同時(shí)要求有美觀易用的界面。
在學(xué)校的機(jī)房環(huán)境中,一般還是以C/S結(jié)構(gòu)的軟件為主,即在學(xué)生機(jī)上運(yùn)行仿真軟件,操作記錄等通過(guò)訪問(wèn)服務(wù)器保存在數(shù)據(jù)庫(kù)中。開發(fā)這樣的軟件一般使用VB,VB.net和C#.net等語(yǔ)言[1],這些語(yǔ)言對(duì)于訪問(wèn)數(shù)據(jù)庫(kù)、實(shí)現(xiàn)算法及進(jìn)行分?jǐn)?shù)的評(píng)定都很強(qiáng)大,但界面方面稍顯不足,雖然可以使用加載圖片、自定義控件等技術(shù)顯示圖形及動(dòng)畫[2],但也存在不易放大縮小,圖形不夠美觀,動(dòng)畫占用CPU較高等缺點(diǎn)。
Flash是ADOBE公司的矢量圖形軟件[3],具有圖形編輯功能靈活,動(dòng)畫能力強(qiáng)的特點(diǎn),而且內(nèi)部的ActionScript腳本有較強(qiáng)的編程能力。使用Flash開發(fā)出的動(dòng)畫文件可以自由進(jìn)行縮放,并支持動(dòng)畫功能。但在實(shí)現(xiàn)較復(fù)雜的仿真算法及開發(fā)C/S架構(gòu)的軟件訪問(wèn)數(shù)據(jù)庫(kù)等方面有一定的不足。
所以,如何結(jié)合這兩者聯(lián)合進(jìn)行開發(fā),揚(yáng)長(zhǎng)避短,開發(fā)出界面美觀,且功能強(qiáng)大的化工實(shí)驗(yàn)仿真軟件是值得研究的方法。本論文以化工原理阻力仿真實(shí)驗(yàn)為例,討論在結(jié)合C#與Flash開發(fā)過(guò)程中的技術(shù)問(wèn)題及解決方法。
2 總體結(jié)構(gòu)
軟件的網(wǎng)絡(luò)結(jié)構(gòu)描述如下,數(shù)據(jù)庫(kù)服務(wù)器上安裝SQL Server[4],所有的學(xué)生名單,實(shí)驗(yàn)成績(jī)及仿真記錄都保存在此服務(wù)器上。教師機(jī)用于教師維護(hù)班級(jí)和學(xué)生名單、監(jiān)視仿真過(guò)程及統(tǒng)計(jì)分?jǐn)?shù),學(xué)生在終端上進(jìn)行實(shí)驗(yàn)仿真,整個(gè)系統(tǒng)使用局域網(wǎng)連接。
實(shí)驗(yàn)仿真軟件的客戶端主體使用C#.net開發(fā),主要包括數(shù)據(jù)通信,數(shù)學(xué)模型實(shí)現(xiàn)及仿真成績(jī)?cè)u(píng)分等功能。仿真軟件的界面使用Flash CS3制作,用于顯示界面,接受用戶的操作及顯示仿真過(guò)程的數(shù)據(jù)及動(dòng)畫等??蛻舳诵枰惭bFlash Player,F(xiàn)lash導(dǎo)出的SWF文件使用AxShockwaveFlash控件放置于C#程序中。
3 聯(lián)合開發(fā)的主要技術(shù)實(shí)現(xiàn)
為了開發(fā)出可用的仿真軟件,F(xiàn)lash與C#之間的通信及交流是必不可少的,本部分以化工原理流體阻力仿真實(shí)驗(yàn)為例,著重說(shuō)明Flash界面的制作要點(diǎn)及Flash與C#中的通信技術(shù)。
3.1 Flash制作實(shí)驗(yàn)界面
Flash開發(fā)實(shí)驗(yàn)界面工作,包括界面的制作及部件的制作。我們按照實(shí)際的實(shí)驗(yàn)裝置,開發(fā)實(shí)驗(yàn)背景,為保證畫面的真實(shí)感,使用實(shí)際設(shè)備的照片進(jìn)行適當(dāng)修改后作為背景。在界面中有很多需要重復(fù)使用的部件,如開關(guān)閥,液位計(jì),儀表等。這些都可以制作為Flash中的部件,以便重復(fù)使用。這些部件可以分為以下幾類:1是圖片切換,如閥門,使用兩張或多張不同的圖片表示閥的開和關(guān),2是液位,使用色柱表示容器中液體的液位,3是動(dòng)畫,例如使用箭頭顯示流體的流動(dòng),4是儀表,用于顯示實(shí)驗(yàn)中測(cè)量的數(shù)據(jù)。為能對(duì)部件的顯示及動(dòng)作進(jìn)行控制,需要在部件中使用代碼。例如圖片切換部件的控制代碼如下:
stop();
function V(s:String ):Boolean {
var i:int;
switch (s)
{
case "OFF":
i=1; break;
case "ON":
i=2; break;
}
gotoAndStop(i); //顯示指定幀
return true;
}
為了在程序中能對(duì)部件進(jìn)行控制,需要在“屬性”中為每個(gè)部件指定一個(gè)唯一的名稱,如“VALVE1”。
3.2 Flash控件與C#的通信
通信部分可以分為以下幾個(gè)功能。
3.2.1 C#向Flash的通信
在C#使用控件的CallFunction方法向Flash傳遞參數(shù)。假設(shè)FlashSim為控件名,則調(diào)用方法后sRet為Flash返回的字符串。
string s;
funName=”flashFunction”;
s = "
sRet=FlashSim.CallFunction(s);
在Flash中,為了能夠處理此方法,需要先定義回調(diào)的函數(shù)
ExternalInterface.addCallback ("flashFunction",flashFunction);
function flashFunction (s:String)
{
// 對(duì)s字符串的處理;
return "sReturn"; //返回結(jié)果字符串
}
3.2.2 Flash向C#通信
Flash通過(guò)控件事件的方式向C#傳遞消息,為了能夠產(chǎn)生事件,需要在Flash代碼中引入相關(guān)的庫(kù):
import MyClass;
import flash.external.*;
之后,可以使用如下的代碼產(chǎn)生事件,其中sRet為要傳遞給C#的字符串。
ExternalInterface.call ("test", sRet);
在C#中就可以通過(guò)處理控件的FlashCall事件來(lái)得到Flash返回的字符串。
private void FlashSim_FlashCall(object sender, AxShockwaveFlashObjects. _IShockwaveFlashEvents_FlashCallEvent e)
{
string s = nodeXml(e.request.ToString()) [0] .ChildNodes[0].InnerText.ToString();
}
3.3 Flash中腳本代碼的自動(dòng)生成
在仿真軟件的開發(fā)過(guò)程中,由于涉及的部件較多,所以重復(fù)的ActionScript代碼開發(fā)工作較多。所以我們還研究了使用EXCEL VBA自動(dòng)生成Flash腳本的技術(shù)[5]。具體方法如下:在EXCEL中列出如下內(nèi)容:1需要從C#中獲得的變量,2所有Flash部件,包括部件的名稱,點(diǎn)擊時(shí)產(chǎn)生的事件等。3變量與部件之間的賦值關(guān)系,4變量與總部件之間的邏輯關(guān)系。
生成的代碼包括如下功能:1)初始化界面及部件,2)初始化控件列表,3)初始化變量列表,4)更新顯示,5)賦值計(jì)算及邏輯計(jì)算等。
這樣,在開發(fā)過(guò)程中通過(guò)簡(jiǎn)單地進(jìn)行EXCEL表格中數(shù)據(jù)的維護(hù),就可以生成Flash中的ActionScript腳本,極大地方便了開發(fā)過(guò)程,提高了開發(fā)效率。
4 開發(fā)實(shí)例
應(yīng)用此技術(shù)開發(fā)了化工的相關(guān)流程仿真系統(tǒng),此程序可以對(duì)直管阻力及局部阻力進(jìn)行測(cè)量[6]。在界面開發(fā)中,閥門、流量動(dòng)畫、液位、顯示儀表等都使用了Flash部件。使用此技術(shù)開發(fā)的界面具有界面美觀,編程方便等特點(diǎn)。
5 結(jié)束語(yǔ)
應(yīng)用Flash與C#結(jié)合的技術(shù)開發(fā)了化工原理流體阻力實(shí)驗(yàn)仿真程序,其中的界面及手動(dòng)閥,液位計(jì),流動(dòng)動(dòng)畫等使用Flash進(jìn)行開發(fā)。C#程序負(fù)責(zé)數(shù)學(xué)模型的實(shí)現(xiàn)、分?jǐn)?shù)的計(jì)算及數(shù)據(jù)庫(kù)的通信。實(shí)際上是將使用C#開發(fā)業(yè)務(wù)邏輯層,使用Flash開發(fā)用戶界面層。開發(fā)出的軟件具有運(yùn)行速度快,界面美觀,功能強(qiáng)大等特點(diǎn)。而且應(yīng)用Flash部件庫(kù)的功能,可以極大地提高界面制作的效率。此方法還可以應(yīng)用于化工專業(yè)實(shí)驗(yàn)開發(fā)及化工過(guò)程控制仿真中。
參考文獻(xiàn):
[1] Bill Evjen. C#高級(jí)編程[M]. 8版.北京: 清華大學(xué)出版社, 2013.
[2] 李海. Visual Basic 編程ActiveX控件[M]. 北京: 北京航空航天大學(xué)出版社, 2000.
[3] Reinhardt Robert, Dowd Snow. Flash CS4 Professional Bible[M]. Wiley, 2009.
[4] 周立柱.SQL Server數(shù)據(jù)庫(kù)原理-設(shè)計(jì)與實(shí)現(xiàn)[M]. 北京: 清華大學(xué)出版社, 2004.
[5] 格林. Excel 2007 VBA參考大全[M]. 北京: 人民郵電出版社, 2013.
[6] 夏清, 陳常貴. 化工原理[M]. 天津: 天津大學(xué)出版社, 2007.