999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

新型DCS腳本系統的研究與設計

2015-08-15 00:54:11
科技視界 2015年4期
關鍵詞:引擎

岳 萍

(電子科技大學成都學院電子工程系,四川 成都611731)

0 引言

組態軟件以集中式控制系統為基礎,由此發展而來的。體現了“分散控制、集中操作、組態方便、分級管理”的思想。作為集散控制系統軟件平臺出現的組態軟件,具有友好的人機功能,采用圖像顯示,能在線進行系統組態和參數設置。而嵌入在組態軟件中的腳本模塊則能夠為其提供二次開發功能,使系統的開發更加靈活,組態更加地方便,功能更加地豐富和完善。

綜合多種流行的組態軟件分析,其中的腳本語言實現方式大致有以下三種:第一種是內置的類似于C或者Basic的語言;第二種是采用VBA的編程語言;第三種是目前來講只有少數組態軟件所采用的面向對象的腳本語言。本文以目前在瀏覽器Mozilla FireFox上用到的底層引擎SpiderMonkey為技術基礎,實現基于SpiderMonkey的腳本引擎功能,并實現腳本模塊與組態軟件各模塊間的實時通訊。

1 組態軟件腳本模塊的研究

腳本模塊在組態軟件中的地位非常關鍵,它是連接前臺的圖形界面開發/運行模塊和臺的數據庫模塊的紐帶。圖形界面開發模塊通過調用腳本模塊進行配置,而腳本模塊又從數據庫中讀取或寫入實時數據。當圖形界面的運行模塊進入運行時,就會周期性的執行在開發模塊中配置好的腳本程序。

本設計中設計腳本模塊是基于SpiderMonkey的,而SpiderMonkey是一個JavaScipt解釋器引擎的API庫。它最大的特點是其開放性和可移植性。這使得該腳本模塊可以在多種平臺上運行。

應用程序腳本模塊的設計的根本在于怎樣將JavaScript引擎嵌入到應用程序中去。嵌入的過程如下:

1.1 創建JavaScript的Runtime

JavaScript引擎利用Runtime來管理對象、上下文和與JavaScript的函數及腳本相關的變量,為應用程序需要的對象、上下文句柄、變量和腳本分配所需要的內存。該引擎在執行函數或腳本程序之前,首先要通過調用JavaScript引擎的API函數JS_NewRuntime來初始化一個RunTime,語句為:JSRuntime*rt=JS_NewRuntime(1000000L);

Runtime可以創建一個,也可以創建多個。當不再需要Runtime時,則通過調用其API函數JS_DestroyRunTime來釋放內存資源。

1.2 創建上下文

定義上下文句柄的目的在于保護同時存在的腳本執行狀態和程序結果。而定義多少個上下文取決于需要在應用程序中同時使用的腳本數。一個上下文代表應用程序中的一個腳本,JavaScript引擎傳遞上下文信息給運行腳本的線程。可以通過調用JavaScript中的API函數JS_NewContext來創建新的上下文,一個上下文和一個Runtime關聯,語句為:JSContext*cx=JS_NewContext(rt,8192);

釋放上下文的函數為JS_DestroyContext。

1.3 創建全局對象

首先,通過調用JS_NewObject函數創建全局對象,創建完畢后,則調用JS_InitStandardClasses函數初始化全局對象。

通過創建Runtime,創建上下文,創建全局對象三步之后,就可以把JavaScript引擎嵌入到應用程序中了,這時的應用程序就可以對輸入的JavaScript語言進行編譯運行了。

此時只是完成了JavaScript引擎嵌入的最基本的工作,而如果想使該腳本引擎更加靈活,則需要用到自定義的對象屬性方法。

1.4 創建自定義對象

可以采用將定義了對象的性質和方法的代碼插入到應用程序中的方法,調用引擎來初始化一個新的對象。這種方式適用于實時性較高的工業自動化領域。

創建自定義對象的步驟如下:

1)創建一個JSPropertySpec以及一個JSFunctionSpec數據類型。

2)調用JS_NewObject和JS_ConstructObject函數來實例化該對象。

3)調用JS_DefineFunctions函數來創建對象的方法。

4)調用JS_DefineProperties函數來創建對象的屬性。

1.5 數據管理

JavaScript有自己獨特的數據類型,這些數據類型,有的可以直接應用于C語言,但是有的需要經過轉換才能夠被C語言所識別。可以通過JavaScript引擎提供的API函數將數據類型在JavaScript和C之間進行轉換。這些API函數包括:JS_ValueToString函數、JS_GetStringChars函數、JS_NewStringCopyN函數、STRING_TO_JSVAL函數等。讀者可以自行查找各個函數的用法。

1.6 編譯執行腳本

在執行腳本之前,可以調用API函數JS_CompileScript來進行預編譯:

JS_CompileScript(Context(),GlobalObject(),lines,strlen(lines),0,0);

編譯正確,返回JS_TRUE,否則,返回JS_FALSE。編譯正確后,通過調用JS_EvaluateScript方法進行對腳本執行:

JS_EvaluateScript(Context(),GlobalObject(),lines,strlen(lines),0,0,rr);

同樣,如果執行正確,則返回JS_TRUE,否則,返回JS_FALSE。

1.7 清理腳本引擎

跟其它的程序運行過程一樣,在程序結束前,需要對腳本引擎進行清理,SpiderMonkey采用的是自動內存管理機制,調用下面兩個函數就可以將垃圾清理干凈:JS_DestroyContext(cx);JS_DestroyRuntime(rt);

2 結束語

通過對組態軟件進行JavaScript引擎的嵌入,使得組態軟件的可擴展性得到了更好的發揮,靈活性更進一步得到了提高。

猜你喜歡
引擎
以學促干 挺膺擔當 激活砥礪前行的紅色引擎
江陰市“三個創新”打造危化品安全監管新引擎
新海珠,新引擎,新活力!
消費繼續發揮經濟增長第一引擎作用
消費導刊(2018年8期)2018-05-25 13:19:23
三生 三大引擎齊發力
藍谷: “涉藍”新引擎
商周刊(2017年22期)2017-11-09 05:08:31
休閑垂釣 傳統漁業新引擎
中國水產(2017年2期)2017-02-25 07:56:29
信息化,“盛京”加速的新引擎
中國衛生(2015年4期)2015-11-08 11:16:18
無形的引擎
河南電力(2015年5期)2015-06-08 06:01:46
基于Cocos2d引擎的PuzzleGame開發
主站蜘蛛池模板: 日韩区欧美区| 国产成人综合亚洲网址| 99久久无色码中文字幕| 特级做a爰片毛片免费69| 青草精品视频| 国产欧美精品一区aⅴ影院| 国产精品视频久| 久久久久夜色精品波多野结衣| 精品1区2区3区| 亚洲日韩每日更新| 亚洲色图综合在线| 国产高清精品在线91| 亚洲男人的天堂久久香蕉网 | 国产97色在线| 亚洲中久无码永久在线观看软件| 99热最新网址| 久久久精品无码一区二区三区| 性色生活片在线观看| 无码'专区第一页| 国产正在播放| 人人澡人人爽欧美一区| 亚洲综合在线最大成人| 性欧美久久| 欧美亚洲另类在线观看| 国产午夜一级毛片| 亚洲精品在线91| 亚洲性视频网站| 中文字幕伦视频| 无码日韩精品91超碰| 精品欧美一区二区三区久久久| 亚洲精品麻豆| 国产免费久久精品99re不卡| 美女内射视频WWW网站午夜| 无码又爽又刺激的高潮视频| 久久黄色视频影| 大乳丰满人妻中文字幕日本| 思思热精品在线8| 免费人成视频在线观看网站| 91无码人妻精品一区二区蜜桃| 亚洲一区二区成人| 国产欧美在线| 五月婷婷精品| 亚洲无码免费黄色网址| 亚州AV秘 一区二区三区| 久久久久亚洲Av片无码观看| 久久男人视频| 亚洲美女操| 好久久免费视频高清| AV不卡无码免费一区二区三区| 日韩毛片在线播放| 亚洲精品天堂在线观看| 成色7777精品在线| 欧美中文字幕在线播放| 狠狠做深爱婷婷久久一区| 精品国产香蕉在线播出| 99九九成人免费视频精品| 久久国产精品国产自线拍| 尤物视频一区| 午夜激情福利视频| 91麻豆国产视频| 88国产经典欧美一区二区三区| 一级毛片免费观看久| 亚洲第一综合天堂另类专| 欧美中文一区| 欧美中文字幕一区| 国产爽歪歪免费视频在线观看 | 亚洲综合九九| 精品精品国产高清A毛片| 久久精品aⅴ无码中文字幕| 免费不卡视频| 真人免费一级毛片一区二区| 最新亚洲人成无码网站欣赏网| 亚洲大学生视频在线播放| 国产激爽大片高清在线观看| 国内精品久久久久鸭| 国产无遮挡裸体免费视频| 精品人妻一区无码视频| 熟女成人国产精品视频| 在线播放真实国产乱子伦| 激情成人综合网| 露脸国产精品自产在线播| 国产精品无码作爱|