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

通用虛擬儀器前面板運行平臺設計①

2020-03-23 06:04:22陳昌浩李曉明
計算機系統應用 2020年2期
關鍵詞:界面

陳昌浩, 李曉明

(浙江理工大學 機械與自動控制學院, 杭州 310018)

虛擬儀器(Visual Instruments, VI)是指結合軟、硬件資源構造測量儀器, 即用戶在通用計算機的硬件和軟件平臺上, 可自定義儀器操作面板和測量功能的軟件系統[1].軟件在虛擬儀器中有著舉足輕重的地位, 美國國家儀器公司(NI)曾提出“軟件即儀器”(Software is Instrument)這一理念, 形象的概括了軟件的重要地位,它擔負著儀器系統數據分析處理、實時顯示、動態修改等重擔[2].而衡量一款虛擬儀器軟件的好壞很大程度上取決于前面板設計的方便與否.目前, 虛擬儀器前面板的開發主要有兩種: 一種是基于文本語言來編寫儀器軟件的底層驅動、數據處理算法、虛擬儀器面板顯示等, 這類語言主要有C/C++, Java, C#等.近年也出現了使用諸于G 語言[3], Unity3D 等新興編程語言來完成虛擬儀器軟件的開發[4], 另一種是以NI 的LabView 為代表的可視化圖形編程語言開發方式[5].兩種方式各有優缺點, 前者運行效率高, 容易實現復雜的數據處理算法, 有較為完備的圖形框架, 容易自由定制復雜功能的儀器面板界面, 但是編程語言上手門檻較高, 學習成本大, 開發周期較長, 后者使用圖形化界面開發, 容易上手, 開發周期短, 但是有不易于拓展、運行效率低等缺點.

目前國內外對儀器軟件開發平臺的研究不多, 大多數科研人員都是應用儀器技術來解決自身領域的問題[6,7].特別是國內, 雖然有一些學者, 如華中科技大學的學者基于iOS 的虛擬儀器瀏覽器[8]、基于前端響應式技術的可重構手機虛擬儀器[9]、基于Unity3D 的虛擬儀器模型[4], 浙江大學學者設計的虛擬儀器共享平臺[10]等, 雖然取得了一些成果, 但大部分虛擬儀器測試系統主要還是基于國外軟件平臺的二次開發和硬件方案提供.雖然國外以NI 的LabView 為代表的虛擬儀器開發軟件在重用和硬件解耦等方面有很大的改善, 但還是有些不足: 軟件模塊的開發閉源, 用戶只能使用軟件提供的模塊, 對于軟件進行功能拓展還是需要重新開發,開發成本高[11].

基于以上的不足, 本文借助Java 語言和SWT/JFace圖形包, 研究并實現了通用虛擬儀器前面板的運行平臺, 定義了一套儀器顯示組件的標準, 平臺界面由各個不同的組件組合完成, 開發者可根據需求自己設計組件拓展.提供了儀器軟件與硬件系統的數據交換的接口, 減少了軟件硬件的耦合性, 使得應用軟件能適用非主流特別是自主研發的硬件系統.

1 通用虛擬儀器前面板運行平臺工作原理

儀器前面板運行平臺既可獨立運行, 也能作為基礎平臺嵌入其他自動測試系統, 它的工作原理如圖1所示, 平臺加載保存有寫好的組件的jar 包, 加載來自網絡或本地的儀器腳本, 解析腳本生成儀器前面板虛擬界面, 并與底層硬件系統通訊, 交換硬件系統和虛擬面板中的數據.具體工作方式如下:

腳本: 一般是XML 文件, 存放界面中組件的信息[12],包括容器組件和一般組件, 腳本文件可以是本地文件也可以是網絡文件.本地文件存放在指定的文件夾中,在Windows 和Linux 操作系統中, 一般存放于項目所在根目錄下的UI 文件夾中, 網絡文件存儲在其他PC機器之中, 如果遠程用戶想運行平臺, 就可以通過TCP 協議傳輸網絡腳本數據到平臺.為區別于以.xml 結尾的配置文件, 腳本文件的格式設置為.uixml

組件jar 包: 平臺采用模塊化的設計, 組件獨立于平臺, 存放在jar 包中, 方便拓展.一般將jar 包放入一個文件夾中, 統一管理, 在PC 系統中, 組件jar 包通常存放于UI 文件夾下的component 文件夾.

界面運行: 平臺加載腳本解析之后生成可視化圖形界面, 用戶可以直接操作面板, 平臺提供數據交換支持.平臺使用Java 語言和SWT/JFace 圖形包來生成圖形界面, 滿足跨平臺需要, 該平臺和界面可以運行在Windows 系統和Linux 系統之上.

圖1 前面板運行平臺工作原理

2 虛擬儀器前面板運行平臺實現方法

虛擬儀器的基本組成模塊是組件, 組件是具有某種功能的獨立模塊, 依據實現功能的不同有容器組件和功能組件, 組件之間的關系如圖2 所示.容器組件是用來安放其他組件的組件, 功能組件是實現人機交互功能的組件.將容器組件和功能組件按照一定順序組裝好就能形成一個虛擬儀器.下文將圍繞控件介紹運行平臺的實現方法.

圖2 前面板界面示意圖

2.1 基于觀察者模式的數據交換機制

觀察者模式是一種一對多的設計思想, 多個觀察者訂閱同一個主題時, 當主題有變化時, 通知觀察者獲取新的主題, 當一個觀察者改變主題的屬性值時, 其他觀察者也能及時接收到改變[13].組件與組件之間需要通訊, 組件與硬件系統之間也需要通訊, 為了解決這種一對多的依賴關系, 本課題采用了數據池數據綁定的數據交換機制: 平臺中開辟一個數據池, 采用KVO(Key-Value-Object)的方式存儲數據, key 對應一個屬性, value 對應組件的屬性值, 一個屬性可以被多個組件綁定; 同時, 數據池中的數據也可以通過接口和硬件系統交換數據.

數據池數據綁定的工作原理是: 數據池中定義一個數據對象A, 組件B 需要對象A 的數據, 組件D 也需要對象A 的數據, 硬件系統中的硬件模塊C 輸出的數據對應對象A 的數據, 當C 交換數據將對象A 的數據改變時, 數據池會發送通知給組件B 和D, 告訴B 和D 對象A 的最新數據.數據綁定的關系如圖3 所示.

圖3 數據綁定關系

數據池使用單例設計模式, 平臺中只有一個數據池, 要綁定的數據都在數據池中操作, 使用數據綁定的方法有: register (String tag, IDataBinder binder); //注冊變量到數據池, bind (String tag, IDataBinder binder);//組件綁定變量, publish (String tag, Object value,IDataBinder binder); //改變變量的屬性值, 通知綁定的其他組件新的屬性值; IDataBinder 是一個數據綁定的接口, 組件都要繼承該接口, 接口中只有一個方法:newValue (String tag, Object value), 每個組件都要實現該方法, 數據池使用組件的該方法通知到各個組件新的屬性值.

2.2 組件熱加載機制

平臺使用了模塊化的設計思想, 組件是一個個獨立的模塊, 可以自由的拓展.為了方便組件的添加, 可將設計好的組件打包成jar 包, 存放到項目根路徑下的UI 文件夾下面, 在使用到這個組件時, 平臺動態加載jar 包尋找該組件, 并使用Java 反射機制創建組件.

2.2.1 雙親委派機制

雙親委派機制是JVM (Java 虛擬機)加載類的機制.JVM 虛擬機根據類的全限定名來加載類, 而類加載器是JVM 加載類的實現, 圖4 是類加載器之間關系, 雙親委派機制是為了避免不同的類加載器加載同一個類[14].

圖4 類加載器之間關系

雙親委派機制的工作流程如下:

(1) 類加載器收到類加載請求;

(2) 把這個請求委托給父加載器去完成, 一直向上委托直到啟動類加載器;

(3) 類加載器檢查能不能加載這個類, 如果可以就加載這個類并結束加載, 如果不能, 拋出異常, 通知子加載器進行加載;

(4) 循環步驟(3).

2.2.2 運行時類加載器

編寫好的靜態代碼通常是由AppClassLoader 類加載器來加載, 但是這種類加載器只能加載在編譯之前就已經寫好的代碼, 這樣組件信息和平臺耦合在了一起.根據雙親委派機制, 本方案使用了URLClassLoader來加載jar 包中的組件, URLClassLoader 是拓展類加載器的一種, 是JDK 提供的一種可加載外部文件中的類的信息的類加載器, 配合應用程序加載器即可加載平臺中預寫好的組件和外部拓展的組件.本文中, 我們對URLClassLoader 進行封裝, 使用RuntimeClassLoader來處理組件jar 包的加載, 組件加載的步驟如圖5 所示.

平臺每次啟動的時候讀取路徑信息, 加載組件jar 包到classPath 中, 讓JVM 能夠尋找到組件的信息,加載的過程使用RuntimeClassLoader 的addJarToPath(String path)方法; 當有腳本運行時, 平臺解析腳本文件, 讀取其中的組件類名和初始化參數, 使用Runtime ClassLoader 的loadClass (String className)提供反射支持, 生成組件, 同時調用組件的init()方法加載初始化參數完成組件的初始化.

圖5 組件加載過程

2.3 組件定義及裝配

2.3.1 組件模型

組件根據功能側重點的不同, 可分為容器組件和功能組件, 這兩種組件之間有一些共同點, 也有一些不同點, 容器組件可看做是功能組件的拓展, 具有可放置組件的容器.組件的模型如圖6 所示.

圖6 組件模型

組件包括界面顯示的內容以及人機交互處理, 包含兩大部分: 顯示部分和數據部分, 顯示部分顯示組件的外貌, 數據部分處理與用戶有關的輸入和輸出, 以及相關的事件.本方案設計中事件也是按照數據的方式進行處理.

容器組件可看做特殊的組件, 其界面UI 不止有實現部分, 還有可放置組件的容器凹槽, 起到布局定位的作用, 容器組件界面UI 如圖7 所示.

圖7 容器組件界面UI

組件的裝配原理: 將組件放入容器凹槽即可.

2.3.2 組件類定義

平臺的所有組件必須遵從相同的接口原則, 這樣才能相互通訊, 也方便拓展.為了統一組件的開發方法,提高開發效率, 本文設計了組件的接口, 及其基礎實現類, 開發的組件只需要繼承基礎實現類, 按照功能需求重寫相關的方法即可快速開發該組件, 組件接口和實現類的關系如圖8 所示.

Component 接口定義了所有組件都需要用到的一些方法, Container 接口繼承Component 接口定義了容器組件需要用到的方法, ComponentAdapter 抽象類實現了Component 接口, 給一些方法提供默認實現,ContainerAdapter 抽象類繼承ComponentAdapter 并實現Container 接口給容器組件的一些方法提供默認實現.除默認實現方法外, 拓展的組件還需重寫和實現部分方法, 如表1 所示.

2.3.3 組件組合原則

容器組件規范了組件的相對位置,、大小以及其他裝飾物等.而功能組件專門處理人機交互功能, 功能組件可以簡單到類似于一個標簽, 一個按鈕, 也可以復雜到一個功能完備的示波器界面.容器組件側重布局, 而功能組件側重交互處理, 所以需要將兩種組件恰好的組合在一起, 形成前面板的界面顯示[15].下面是組件組合的一些原則:

(1) 容器組件上可以放置任意界面組件, 功能組件只能放置在容器組件內.

(2) 任何一個程序界面至少包含一個容器組件.

(3) 容器組件放置組件的位置如果已經放置有組件, 不能再放置組件.

2.4 組件裝配與解析

2.4.1 儀器腳本描述方法

平臺采用腳本作為描述組件組合的工具, 腳本語言采用可拓展標記語言(eXtensiable Markup Language,XML)[16].XML 語言支持拓展, 我們使用自定義標簽描述組件以及組件的屬性和數據綁定[17,18].為方便識別組件的屬性和數據綁定, 采用組件標簽嵌套屬性標簽的格式來描述組件.根據組件功能特性的不同, 我們采用<component>, <container>兩種標簽分別來描述功能組件和容器組件.

圖8 組件類圖

表1 組件類實現和重寫方法

功能組件的通用描述格式如下:

Component 標簽表示該組件是功能組件, name 表示組件的名稱, class 表示組件的全限定類名, 平臺解析腳本時需要根據類名使用反射來生成組件, param 標簽描述組件的屬性, 組件需要根據param 標簽的屬性完成初始化.

Data-binding 標簽表示數據綁定, local 對應組件自身的屬性的數據綁定, external 表示要對外進行數據交換的屬性, 即該標簽描述了組件的輸入輸出端口.某些儀器功能中, 有的組件可能相對獨立, 不受外部系統的輸入輸出影響, 可以省略external 屬性, 其他屬性根據組件的功能不同而變化.

容器組件的通用描述格式如下:

Container 標簽該組件是容器組件, 相比于功能組件省略了數據綁定的描述, 添加了slot 標簽描述組件的布局位置, slot 標簽表示容器凹槽, name 是凹槽的名稱, ratio 是凹槽占該容器組件的比例, 容器凹槽標簽下可以繼續嵌套其他組件標簽.

儀器腳本由組件組合而成, 平臺定義一個XML 腳本表示一個儀器前面板, 使用標簽<application>來描述,即該標簽是儀器腳本的根元素.根元素下可放置組件,若組件為容器組件, 容器凹槽內可繼續嵌套組件, 若干個組件一層層嵌套就組合成一個布局和功能完整的儀器腳本.

下面一段腳本描述了一個包含啟動和停止按鈕的儀器界面:

appliaciton 表示該腳本文件是儀器前面板腳本,FillContainer 容器組件包含兩個InstrumentButton 按鈕組件, ratio 屬性設置其各容器凹槽的布局, direct 屬性設置容器凹槽的水平和垂直排列, InstrumentButton 是一個按鈕組件, name 是組件的名稱, text 是按鈕組件顯示的文本, 兩個組件都綁定了mouse.down 的內部屬性, 啟動按鍵綁定數據常量池startButtonOut 對象, 停止按鍵綁定stopButtonOut 對象, 如果其他組件想要響應按鈕, 只需綁定按鈕對應的數據常量池對象即可.

2.4.2 儀器腳本解析

腳本文件描述了組件的屬性和組件組合的方式,平臺的作用是按順序完整讀取腳本并生成前面板界面.平臺解析腳本的流程如圖9 所示.

圖9 平臺解析腳本流程圖

一個腳本文件我們默認為一個儀器前面板界面,則腳本文件只能有一個根節點, 且該根節點標簽為application, 如果不是application 或根節點多于一個,則腳本讀取失敗.讀取根節點下組件生成組件對象, 讀取組件的參數完成組件初始化, 如果組件為功能組件,完成組件的數據綁定, 如果為容器組件則遍歷讀取容器凹槽內的組件, 若凹槽內組件為容器組件, 則遞歸調用處理容器組件的方法, 否則調用處理功能組件的方法[19].待組件都處理完成, 則啟動平臺, 生成儀器界面,用戶可在界面中與平臺交互.

3 虛擬儀器前面板運行平臺應用實例

自動測試實驗中經常用到信號發生器和示波器,信號發生器可以產生多種類型的信號, 示波器負責顯示輸入的信號, 本文將兩種裝置組合在一起, 設計了一個信號發生器顯示裝置.

它由5 個組件組成, 一個示波器組件, 一個信號發生器組件, 一個啟動示波器按鈕, 一個停止示波器按鈕,一個控制臺顯示組件.它的工作原理是: 用戶點擊示波器啟動按鈕, 平臺接收到按鈕狀態的改變, 發送通知給示波器組件, 示波器組件開始工作, 等待信號輸入, 用戶點擊信號發生器按鈕, 啟動或停止信號發生器的工作, 按鈕的工作狀態改變會輸出到控制臺中方便用戶觀察當前狀態.發生器工作時, 每隔一定時間就生成一定幅度、頻率、相移的信號數據, 并更新信號的數據池, 平臺發送通知給示波器輸入信號的改變, 示波器接收輸入信號, 更新顯示的波形.圖10 是腳本運行界面.

圖10 信號發生顯示器運行界面

4 結論與展望

本文在分析了當前虛擬儀器的研究現狀, 針對當前大多虛擬儀器開發軟件不易拓展的問題, 提出了一種通用儀器軟件的前面板運行平臺, 采用模塊化組件的方式, 用數據常量池數據綁定來交換數據, 以XML 腳本語言為載體, 組合組件來滿足不同的測試功能需求.上文信號發生顯示器的運行也說明了該通用儀器前面板運行平臺的可行性.不過儀器腳本文件的編寫格式較復雜和冗余, 接下來的研究工作是設計更通用的腳本標簽格式, 采用圖形化的編輯界面來設計儀器前面板, 搭建一個較為完備的通用儀器軟硬件開發平臺.

猜你喜歡
界面
聲波在海底界面反射系數仿真計算分析
微重力下兩相控溫型儲液器內氣液界面仿真分析
國企黨委前置研究的“四個界面”
當代陜西(2020年13期)2020-08-24 08:22:02
基于FANUC PICTURE的虛擬軸坐標顯示界面開發方法研究
西門子Easy Screen對倒棱機床界面二次開發
空間界面
金秋(2017年4期)2017-06-07 08:22:16
鐵電隧道結界面效應與界面調控
電子顯微打開材料界面世界之門
人機交互界面發展趨勢研究
手機界面中圖形符號的發展趨向
新聞傳播(2015年11期)2015-07-18 11:15:04
主站蜘蛛池模板: 狠狠色婷婷丁香综合久久韩国| 亚洲不卡av中文在线| 免费人欧美成又黄又爽的视频| 国产精品美女自慰喷水| 亚洲第一成年网| 国产高潮流白浆视频| 天天色天天操综合网| 亚洲黄色激情网站| 精品国产香蕉伊思人在线| 国产一区二区三区夜色 | 久久国产乱子伦视频无卡顿| 亚洲国产亚综合在线区| 久久国产乱子伦视频无卡顿| 欧美一级黄色影院| 国产成熟女人性满足视频| 日本精品一在线观看视频| 国产综合另类小说色区色噜噜| 久久精品女人天堂aaa| 亚洲综合精品香蕉久久网| 免费高清a毛片| 澳门av无码| 亚洲最新在线| 欧美专区日韩专区| 毛片大全免费观看| 四虎永久在线| 一本一道波多野结衣一区二区 | 亚洲免费黄色网| 国产精品hd在线播放| 亚洲天堂首页| 精品国产一二三区| P尤物久久99国产综合精品| 99久久无色码中文字幕| 久久无码av三级| 四虎影视8848永久精品| 亚洲成人播放| 中文字幕av一区二区三区欲色| 亚洲精品制服丝袜二区| 午夜老司机永久免费看片| 国产91小视频在线观看| 四虎永久在线视频| 国产色爱av资源综合区| 色综合久久88| 亚洲中文字幕无码爆乳| 色综合久久88| 日韩av电影一区二区三区四区 | 久久青草视频| 美女被狂躁www在线观看| 亚洲欧美不卡| 欧美精品啪啪一区二区三区| 久久精品国产精品国产一区| 国产呦精品一区二区三区下载 | 国产三级毛片| av手机版在线播放| 极品性荡少妇一区二区色欲| 国产成人一区二区| 青青操视频在线| 国产尹人香蕉综合在线电影| 国产精品一线天| 亚洲专区一区二区在线观看| 欧美亚洲一区二区三区导航| 成人va亚洲va欧美天堂| 老司机久久99久久精品播放| a网站在线观看| 美女视频黄又黄又免费高清| 国产亚洲精品va在线| 日韩区欧美国产区在线观看| 亚洲欧美一区二区三区图片| 欧美日韩在线亚洲国产人| 久久久久人妻精品一区三寸蜜桃| 97超爽成人免费视频在线播放| 日韩欧美中文在线| 99精品视频在线观看免费播放| 91尤物国产尤物福利在线| 自慰网址在线观看| 华人在线亚洲欧美精品| 日韩色图在线观看| 国产精品爆乳99久久| 在线观看国产精品一区| 高清大学生毛片一级| 免费看a级毛片| 国产原创自拍不卡第一页| 偷拍久久网|