專利名稱:基于IronPython腳本語言的多業(yè)務(wù)聯(lián)動(dòng)實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及智能建筑控制領(lǐng)域的流程控制技術(shù)。尤其涉及一種多業(yè)務(wù)系統(tǒng)的聯(lián)動(dòng) 控制技術(shù)。
背景技術(shù):
智能建筑中通常存在多種系統(tǒng),比如視頻系統(tǒng),配電自動(dòng)化系統(tǒng),BA系統(tǒng),智能照 明系統(tǒng),火災(zāi)報(bào)警系統(tǒng),安防系統(tǒng)等,通常這些系統(tǒng)都獨(dú)立存在,當(dāng)某一事件發(fā)生時(shí),對(duì)應(yīng)的 監(jiān)控系統(tǒng)可以做出反應(yīng)但是卻無法和相關(guān)系統(tǒng)產(chǎn)生聯(lián)動(dòng)。如何突破這種各個(gè)子系統(tǒng)分割運(yùn) 行的瓶頸,使智能建筑內(nèi)的硬件平臺(tái)、軟件平臺(tái)與應(yīng)用系統(tǒng)之間,以及系統(tǒng)、信息、組織與管 理之間實(shí)現(xiàn)高度融合和協(xié)調(diào)運(yùn)行,已經(jīng)成為智能建筑行業(yè)乃至社會(huì)各界普遍關(guān)注的焦點(diǎn)。 為了解決這一問題,各個(gè)廠家都花費(fèi)了很多精力,不僅需解決多個(gè)復(fù)雜系統(tǒng)以及多種控制 協(xié)議之間的互聯(lián)性和互操作性問題,而且要解決用戶的二次開發(fā)問題。通常對(duì)于多系統(tǒng)聯(lián) 動(dòng)的處理都是通過在原代碼添加規(guī)則代碼的方式完成,這樣不但復(fù)雜而且容易造成軟件的 不穩(wěn)定,而且很多現(xiàn)場(chǎng)的聯(lián)動(dòng)規(guī)則會(huì)發(fā)生變化,通常廠家只能通過修改源代碼完成客戶的 需求,耗時(shí)耗力。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供一種多業(yè)務(wù)系統(tǒng)聯(lián)動(dòng)實(shí)現(xiàn)的方法,有效解決多系統(tǒng)聯(lián)動(dòng)問 題,以及多系統(tǒng)聯(lián)動(dòng)規(guī)則發(fā)生變化后,用戶的二次開發(fā)問題。本發(fā)明的核心思想為通過PythonEngine腳本引擎實(shí)現(xiàn)腳本動(dòng)態(tài)加載和運(yùn)行,完 成腳本和運(yùn)行環(huán)境的交互,能靈活適合多變的業(yè)務(wù)場(chǎng)景達(dá)到流程控制的目的。本發(fā)明采用以下解決方案解決上述問題一種基于IronPython腳本語言的多業(yè)務(wù)聯(lián)動(dòng)實(shí)現(xiàn)方法,先在C#編寫的運(yùn)行 環(huán)境與IronPython之間搭建一個(gè)連接層,能夠理解來自C#與IronPython的變量與函 數(shù),使他們能夠互相通訊;再使用IronPyhon語言定義多系統(tǒng)的聯(lián)動(dòng)邏輯控制腳本,通過 IronPython腳本引擎實(shí)現(xiàn)腳本動(dòng)態(tài)加載和運(yùn)行,由聯(lián)動(dòng)邏輯控制腳本實(shí)現(xiàn)邏輯控制,實(shí)現(xiàn) 多系統(tǒng)聯(lián)動(dòng)。所述連接層的創(chuàng)建步驟包括先創(chuàng)建腳本運(yùn)行環(huán)境kriptRuntime ;該kriptRuntime是指腳本的運(yùn)行時(shí)間定 義;再構(gòu)建一個(gè)執(zhí)行上下文,用來保存需要C#編寫的運(yùn)行環(huán)境與IronPython共享的 變量;這些變量對(duì)聯(lián)動(dòng)控制有意義,并且在C#編寫的運(yùn)行環(huán)境和IronPython之間共享;然后創(chuàng)建PythonEngine引擎,用來解析和執(zhí)行動(dòng)態(tài)語言代碼;最后將以上封裝成類,作為IronPython和C#編寫的運(yùn)行環(huán)境數(shù)據(jù)共享的連接層 使用。所述聯(lián)動(dòng)邏輯控制腳本的實(shí)現(xiàn)步驟包括
步驟10 創(chuàng)建PY腳本文件;步驟20 在PY腳本文件中,根據(jù)事件發(fā)生時(shí),子系統(tǒng)如何動(dòng)作以及動(dòng)作的先后順 序,使用IronPython語言編寫控制腳本,用來控制子系統(tǒng)相應(yīng)的動(dòng)作;步驟30 將保存好的腳本文件拷貝到指定的目錄下,等待腳本引擎加載;步驟40 =IronPython腳本引擎加載并運(yùn)行指定目錄下的腳本文件;步驟50 加載完成,腳本在C#主程序的運(yùn)行環(huán)境(即宿主程序運(yùn)行環(huán)境)中運(yùn)行。所述步驟20還包括=IronPython腳本引擎將運(yùn)行環(huán)境中的控制變量加入變量 字典類,變量字典類中的控制變量可以在C#主程序的運(yùn)行環(huán)境(即宿主程序運(yùn)行環(huán)境和 IronPython腳本之間共享。所述步驟40包括步驟100 創(chuàng)建IronPython腳本引擎;步驟200 遍歷制定目錄下的腳本文件;步驟300 加載腳本文件并運(yùn)行。所述步驟50還包括:C#主程序的運(yùn)行環(huán)境(即宿主程序運(yùn)行環(huán)境)根據(jù)變量字 典中的控制變量當(dāng)前的狀態(tài)或值進(jìn)行邏輯條件判斷,若條件成立,根據(jù)在腳本中定義的事 件發(fā)生時(shí),子系統(tǒng)如何動(dòng)作以及動(dòng)作的先后順序,通過運(yùn)行環(huán)境提供的子系統(tǒng)動(dòng)作接口函 數(shù)完成操作。與現(xiàn)有技術(shù)相比,本方法有效解決多系統(tǒng)聯(lián)動(dòng)問題,以及多系統(tǒng)聯(lián)動(dòng)規(guī)則發(fā)生變 化后,用戶的二次開發(fā)問題。
圖1是本發(fā)明中的告警系統(tǒng),視頻系統(tǒng)與SCADA系統(tǒng)聯(lián)動(dòng)流程圖
具體實(shí)施例方式下面參考附圖結(jié)合實(shí)例對(duì)本發(fā)明做進(jìn)一步的描述IronPyhon腳本很容易被C#代碼調(diào)用,同時(shí)又很容易調(diào)用C#函數(shù),但是 IronPython腳本不能編譯成二進(jìn)制文件,導(dǎo)致C#與IronPython之間不能直接進(jìn)行通 訊,所以在C#編寫的運(yùn)行環(huán)境與IronPython之間搭建一個(gè)連接層,能夠理解來自C#與 IronPython的變量與函數(shù),使他們能夠互相通訊。IronPython使用PythonEngine引擎實(shí)現(xiàn)連接層,使得IronPython腳本可以和C# 編寫的運(yùn)行環(huán)境進(jìn)行交互,IronPython運(yùn)行在PythonEngine引擎上,所以引擎能訪問它的 運(yùn)行環(huán)境,IronPython可以操作運(yùn)行環(huán)境中的堆棧結(jié)構(gòu)。創(chuàng)建連接層的第一步是創(chuàng)建腳本運(yùn)行環(huán)境(kriptRimtime),這是整個(gè)執(zhí)行過程 的起點(diǎn),接著構(gòu)建一個(gè)執(zhí)行上下文,用來保存需要共享的變量。運(yùn)行環(huán)境和腳本可以通過創(chuàng) 建不同的ScriptScope來提供多個(gè)數(shù)據(jù)隔離的執(zhí)行上下文,最后創(chuàng)建PythonEngine引擎, 用來解析和執(zhí)行動(dòng)態(tài)語言代碼。將以上功能封裝成類,作為IronPython和運(yùn)行環(huán)境數(shù)據(jù)共 享的連接層使用。聯(lián)動(dòng)控制腳本的編寫主要用來實(shí)現(xiàn)多系統(tǒng)的聯(lián)動(dòng)邏輯控制多系統(tǒng)聯(lián)動(dòng)控制邏輯, 通過運(yùn)行環(huán)境和腳本之間共享的變量,根據(jù)事件發(fā)生時(shí),子系統(tǒng)如何動(dòng)作以及動(dòng)作的先后順序,使用IronPython語言編寫控制腳本,保存為PY腳本文件,由IronPython腳本引擎加 載并運(yùn)行。加載完成,腳本在運(yùn)行環(huán)境中運(yùn)行,運(yùn)行環(huán)境根據(jù)變量字典中的控制變量當(dāng)前的 狀態(tài)或值進(jìn)行邏輯條件判斷,若條件成立,根據(jù)在腳本中定義的事件發(fā)生時(shí),子系統(tǒng)如何動(dòng) 作以及動(dòng)作的先后順序,通過運(yùn)行環(huán)境提供的子系統(tǒng)動(dòng)作接口函數(shù)完成操作。當(dāng)現(xiàn)場(chǎng)邏輯 控制要求發(fā)生變化時(shí),只要修改PY腳本文件就可以完成邏輯控制的修改,完成二次開發(fā), 不需要修改軟件核心代碼。IronPython是一種開放源代碼的腳本編程語言,這種腳本語言特別強(qiáng)調(diào)開發(fā)速度 和代碼的清晰程度,IronPython和.Net框架集無縫集成。它可以用來開發(fā)各種程序,從簡(jiǎn) 單的腳本任務(wù)到復(fù)雜的、面向?qū)ο蟮膽?yīng)用程序都有大顯身手的地方。使用IronPython腳本語言建立多業(yè)務(wù)系統(tǒng)聯(lián)動(dòng)機(jī)制的方法,在腳本文件中編寫 多系統(tǒng)聯(lián)動(dòng)控制邏輯,通過PythonEngine腳本引擎實(shí)現(xiàn)腳本動(dòng)態(tài)加載和運(yùn)行,完成腳本和
運(yùn)行環(huán)境的交互。以下展示了一份控制腳本文件實(shí)例
權(quán)利要求
1.一種基于IronPython腳本語言的多業(yè)務(wù)聯(lián)動(dòng)實(shí)現(xiàn)方法,其特征是先在C#編寫的 運(yùn)行環(huán)境與IronPython之間搭建一個(gè)連接層,能夠理解來自C#與IronPython的變量與 函數(shù),使他們能夠互相通訊;再使用IronPyhon語言定義多系統(tǒng)的聯(lián)動(dòng)邏輯控制腳本,通過 IronPython腳本引擎實(shí)現(xiàn)腳本動(dòng)態(tài)加載和運(yùn)行,由聯(lián)動(dòng)邏輯控制腳本實(shí)現(xiàn)邏輯控制,實(shí)現(xiàn) 多系統(tǒng)聯(lián)動(dòng)。
2.根據(jù)權(quán)利要求1所述的基于IronPython腳本語言的多業(yè)務(wù)聯(lián)動(dòng)實(shí)現(xiàn)方法,其特征是 所述連接層的創(chuàng)建步驟包括先創(chuàng)建腳本運(yùn)行環(huán)境kriptRuntime ;該kriptRuntime是指腳本的運(yùn)行時(shí)間定義; 再構(gòu)建一個(gè)執(zhí)行上下文,用來保存需要C#編寫的運(yùn)行環(huán)境與IronPython共享的變量;然后創(chuàng)建PythonEngine引擎,用來解析和執(zhí)行動(dòng)態(tài)語言代碼;最后將以上封裝成類,作為IronPython和C#編寫的運(yùn)行環(huán)境數(shù)據(jù)共享的連接層使用。
3.根據(jù)權(quán)利要求1所述的基于IronPython腳本語言的多業(yè)務(wù)聯(lián)動(dòng)實(shí)現(xiàn)方法,其特征是 所述聯(lián)動(dòng)邏輯控制腳本的實(shí)現(xiàn)步驟包括步驟10:創(chuàng)建PY腳本文件;步驟20 在PY腳本文件中,根據(jù)事件發(fā)生時(shí),子系統(tǒng)如何動(dòng)作以及動(dòng)作的先后順序,使 用IronPython語言編寫控制腳本,用來控制子系統(tǒng)相應(yīng)的動(dòng)作;步驟30 將保存好的腳本文件拷貝到指定的目錄下,等待腳本引擎加載;步驟40 =IronPython腳本引擎加載并運(yùn)行指定目錄下的腳本文件;步驟50 加載完成,腳本在C#主程序的運(yùn)行環(huán)境即宿主程序運(yùn)行環(huán)境中運(yùn)行。
4.根據(jù)權(quán)利要求2所述的基于IronPython腳本語言的多業(yè)務(wù)聯(lián)動(dòng)實(shí)現(xiàn)方法,其特征是 所述步驟20還包括=IronPython腳本引擎將運(yùn)行環(huán)境中的控制變量加入變量字典類,變量 字典類中的控制變量可以在C#主程序的運(yùn)行環(huán)境即宿主程序運(yùn)行環(huán)境和IronPython腳本 之間共享。
5.根據(jù)權(quán)利要求2所述的基于IronPython腳本語言的多業(yè)務(wù)聯(lián)動(dòng)實(shí)現(xiàn)方法,其特征是 所述步驟40包括步驟100 創(chuàng)建IronPython腳本引擎; 步驟200 遍歷制定目錄下的腳本文件; 步驟300 加載腳本文件并運(yùn)行。
6.根據(jù)權(quán)利要求4所述的基于IronPython腳本語言的多業(yè)務(wù)聯(lián)動(dòng)實(shí)現(xiàn)方法,其特征是 所述步驟50還包括:C#主程序的運(yùn)行環(huán)境即宿主程序運(yùn)行環(huán)境根據(jù)變量字典中的控制變 量當(dāng)前的狀態(tài)或值進(jìn)行邏輯條件判斷,若條件成立,根據(jù)在腳本中定義的事件發(fā)生時(shí),子系 統(tǒng)如何動(dòng)作以及動(dòng)作的先后順序,通過運(yùn)行環(huán)境提供的子系統(tǒng)動(dòng)作接口函數(shù)完成操作。
全文摘要
本發(fā)明公開了一種基于IronPython腳本語言的多業(yè)務(wù)聯(lián)動(dòng)實(shí)現(xiàn)方法,本發(fā)明充分利用了開源語言IronPython與.Net框架集成的特點(diǎn)。通過IronPython腳本引擎實(shí)現(xiàn)腳本動(dòng)態(tài)加載和運(yùn)行,完成腳本和宿主語言環(huán)境的數(shù)據(jù)交互。本發(fā)明通過IronPython腳本語言編寫多系統(tǒng)的聯(lián)動(dòng)邏輯腳本,調(diào)用通用子系統(tǒng)函數(shù)庫(kù)實(shí)現(xiàn)對(duì)象的操作??筛鶕?jù)現(xiàn)場(chǎng)需求靈活修改聯(lián)動(dòng)規(guī)則并立即生效,不需要修改軟件核心程序,消除信息孤島,以適應(yīng)多變的聯(lián)動(dòng)業(yè)務(wù)場(chǎng)景。
文檔編號(hào)G06F9/44GK102141917SQ201110084488
公開日2011年8月3日 申請(qǐng)日期2011年4月2日 優(yōu)先權(quán)日2011年4月2日
發(fā)明者楊毅, 王偉江, 雷賢忠 申請(qǐng)人:南京天溯自動(dòng)化控制系統(tǒng)有限公司