亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于mxGraph的組態(tài)設(shè)計(jì)器設(shè)計(jì)方案

        2020-12-31 07:50:20孔曉陽(yáng)代真虎
        關(guān)鍵詞:內(nèi)容用戶(hù)設(shè)計(jì)

        孔曉陽(yáng) 代真虎

        (上海寶信軟件股份有限公司 上海:201900)

        隨著HTML5標(biāo)準(zhǔn)的發(fā)布,在Web瀏覽器前端可以完成的功能越來(lái)越多,其性能水平與CS架構(gòu)的前端軟件之間的差距在快速縮小。同時(shí)眾多相關(guān)廠商先后發(fā)布基于H5標(biāo)準(zhǔn)的產(chǎn)品,一時(shí)間各種前端框架、前端解決方案百花齊放。傳統(tǒng)工業(yè)監(jiān)控組態(tài)軟件大多基于CS架構(gòu)搭建,此類(lèi)軟件與其他第三方系統(tǒng)集成、移動(dòng)端集成以及多屏自適應(yīng)等方面有諸多不便,難以適應(yīng)目前工業(yè)互聯(lián)網(wǎng)國(guó)家戰(zhàn)略下對(duì)于工業(yè)領(lǐng)域IT系統(tǒng)的融合要求,各工業(yè)企業(yè)也急于尋找對(duì)自身監(jiān)控類(lèi)軟件的改造升級(jí)路徑。

        組態(tài)設(shè)計(jì)器軟件向來(lái)是工業(yè)SCADA系統(tǒng)的核心部件,是工業(yè)監(jiān)控系統(tǒng)現(xiàn)場(chǎng)實(shí)施的重要工具。實(shí)現(xiàn)純BS架構(gòu)的組態(tài)設(shè)計(jì)器軟件,將對(duì)工業(yè)監(jiān)控領(lǐng)域的軟件部署方式、實(shí)施方案等產(chǎn)生重大影響。首先,BS架構(gòu)的組態(tài)設(shè)計(jì)器將大大減輕客戶(hù)端部署的復(fù)雜度,用戶(hù)只需要有瀏覽器便可以進(jìn)行項(xiàng)目實(shí)施,也無(wú)需考慮客戶(hù)端版本升級(jí)維護(hù)的問(wèn)題;其次,基于H5標(biāo)準(zhǔn)和互聯(lián)網(wǎng)最新技術(shù)構(gòu)建的組態(tài)工具,可以滿(mǎn)足工業(yè)互聯(lián)網(wǎng)時(shí)代下的大規(guī)模、高強(qiáng)度的訪(fǎng)問(wèn)請(qǐng)求,方便支持橫向擴(kuò)展、系統(tǒng)高可用等特性;還有面對(duì)大融合的工業(yè)互聯(lián)要求,BS架構(gòu)的設(shè)計(jì)器能夠與其他第三方系統(tǒng)、移動(dòng)應(yīng)用等進(jìn)行快速集成。

        本文介紹了一種基于mxGraph開(kāi)源圖形庫(kù)的組態(tài)設(shè)計(jì)器工具的設(shè)計(jì)方案,通過(guò)該設(shè)計(jì)器工具用戶(hù)可以所見(jiàn)即所得構(gòu)建組態(tài)監(jiān)控畫(huà)面、創(chuàng)建可復(fù)用圖元、與底層數(shù)采系統(tǒng)數(shù)據(jù)點(diǎn)綁定、編寫(xiě)業(yè)務(wù)邏輯腳本以及最終運(yùn)行畫(huà)面,滿(mǎn)足了工業(yè)現(xiàn)場(chǎng)對(duì)BS架構(gòu)的組態(tài)設(shè)計(jì)器軟件的需求。

        1 關(guān)鍵技術(shù)

        1.1 mxGraph

        mxGraph是一個(gè)基于SVG和HTML技術(shù)進(jìn)行渲染的JavaScript圖形庫(kù),通過(guò)它設(shè)計(jì)良好的API,可以進(jìn)行圖形繪制、與圖形交互以及與圖形相關(guān)常用操作。mxGraph提供了一套屏蔽不同瀏覽器差異的JavaScript庫(kù),通過(guò)進(jìn)行完善的抽象和封裝提供給用戶(hù)一致的、簡(jiǎn)潔的API。mxGraph還提供一個(gè)設(shè)計(jì)器原型mxEditor,讓使用者快速構(gòu)建圖形應(yīng)用。本文介紹的設(shè)計(jì)方案便是基于mxEditor進(jìn)行構(gòu)建。mxGraph主要功能全部包含在一個(gè)JavaScript文件中,通過(guò)在HTML頁(yè)面中引用該文件,便可以進(jìn)行相關(guān)圖形操作,結(jié)合與后端服務(wù)的通信實(shí)現(xiàn)數(shù)據(jù)聯(lián)通、文件管理等功能,可以完成一個(gè)最簡(jiǎn)的圖形繪制應(yīng)用。圖1是mxGraph全局架構(gòu)圖。

        圖1 mxGraph架構(gòu)圖

        1.2 SVG

        SVG是指Scalable Vector Graphics,即可縮放的矢量圖形,用SVG描述的圖形無(wú)論如何縮放都不會(huì)損失畫(huà)質(zhì)。它基于XML語(yǔ)言構(gòu)建,通過(guò)描述性的語(yǔ)句來(lái)表述圖形內(nèi)容,與通常的位圖有著本質(zhì)的區(qū)別。SVG圖形可以支持用戶(hù)交互,基于瀏覽器用戶(hù)事件可以完成眾多交互相關(guān)功能;SVG直接支持HTML的DOM操作,可以通過(guò)JavaScript語(yǔ)言動(dòng)態(tài)改變SVG內(nèi)容;SVG自身提供動(dòng)畫(huà)操作元素,可以很方便完成動(dòng)畫(huà)過(guò)程。SVG對(duì)于JavaScript和DOM的支持,極大地?cái)U(kuò)展了其使用范圍和靈活性,同時(shí)還可以搭配CSS樣式表對(duì)SVG圖形進(jìn)行樣式設(shè)置,更重要的是SVG標(biāo)簽支持自定義擴(kuò)展屬性,對(duì)于組態(tài)畫(huà)面這樣的復(fù)雜圖形,通過(guò)擴(kuò)展屬性可以攜帶各種配置信息和數(shù)據(jù)信息,再結(jié)合JavaScript語(yǔ)言處理,便可基于此來(lái)實(shí)現(xiàn)前端組態(tài)畫(huà)面數(shù)據(jù)刷新以及動(dòng)畫(huà)展示等功能。

        2 組態(tài)設(shè)計(jì)器架構(gòu)

        2.1 整體流程

        本文所實(shí)現(xiàn)的組態(tài)設(shè)計(jì)器為BS架構(gòu)應(yīng)用程序,基于mxGraph圖形庫(kù)的GraphEditor示例來(lái)搭建,該示例中包含了一個(gè)設(shè)計(jì)器的各項(xiàng)基本功能,并支持?jǐn)U展。主要包括設(shè)計(jì)器頁(yè)面框架、菜單欄、工具欄、元素邊欄、元素上下文菜單、畫(huà)面內(nèi)部結(jié)構(gòu)以及后臺(tái)通信接口等。

        設(shè)計(jì)器整體流程(見(jiàn)圖2)描述如下:通過(guò)GraphEditor完成圖形繪制生成內(nèi)部的基于XML語(yǔ)法的畫(huà)面表述文本,重寫(xiě)畫(huà)面保存接口,將畫(huà)面文本發(fā)送到后臺(tái)服務(wù)進(jìn)行畫(huà)面內(nèi)容保存和轉(zhuǎn)換,畫(huà)面轉(zhuǎn)換主要是將內(nèi)部表述形式的文本轉(zhuǎn)換為基于SVG的形式,同時(shí)增加用戶(hù)腳本等重要功能,最終方便前端瀏覽器運(yùn)行態(tài)展示以及數(shù)據(jù)刷新。畫(huà)面轉(zhuǎn)換格式后,將畫(huà)面內(nèi)容進(jìn)行后臺(tái)存儲(chǔ),當(dāng)后臺(tái)服務(wù)接收到畫(huà)面運(yùn)行態(tài)加載請(qǐng)求后,將轉(zhuǎn)換好格式的畫(huà)面內(nèi)容發(fā)送到前端,前端運(yùn)行態(tài)對(duì)畫(huà)面內(nèi)容進(jìn)行解析,主要對(duì)數(shù)據(jù)綁定、用戶(hù)腳本進(jìn)行提取,并根據(jù)配置內(nèi)容進(jìn)行畫(huà)面數(shù)據(jù)刷新和接受用戶(hù)事件。

        圖2 畫(huà)面設(shè)計(jì)與運(yùn)行流程

        2.2 設(shè)計(jì)器搭建過(guò)程

        mxGraph的GraphEditor示例是一個(gè)相對(duì)完整的前端設(shè)計(jì)器框架,通過(guò)將該示例文件夾拷貝到相應(yīng)的Web工程中,并對(duì)后臺(tái)對(duì)接服務(wù)進(jìn)行相應(yīng)調(diào)整,便可以初步運(yùn)行起來(lái)。如果需要對(duì)后臺(tái)對(duì)應(yīng)的服務(wù),比如畫(huà)面保存服務(wù)、畫(huà)面打開(kāi)服務(wù)進(jìn)行相應(yīng)修改,則需要對(duì)與后臺(tái)交互部分的邏輯進(jìn)行調(diào)整;如果需要前端設(shè)計(jì)器功能、樣式調(diào)整等,則需要對(duì)前端JavaScript、CSS等文件內(nèi)容進(jìn)行修改。

        2.2.1 初始運(yùn)行設(shè)計(jì)器

        GraphEditor示例在mxGraph程序包中的/javascript/examples/grapheditor目錄下,其中/java目錄中是兩個(gè)Java程序,分別負(fù)責(zé)啟動(dòng)一個(gè)HTTP服務(wù)以及一個(gè)畫(huà)面打開(kāi)服務(wù),在本文方案中HTTP服務(wù)由Tomcat容器運(yùn)行,畫(huà)面打開(kāi)、保存等后臺(tái)服務(wù)參考GraphEditor的Java示例實(shí)現(xiàn)。

        拷貝/javascript/examples/grapheditor/目錄下的/www文件夾到Web工程下,并調(diào)整目錄結(jié)構(gòu)為需要的路徑。本文方案中的設(shè)計(jì)器目錄結(jié)構(gòu)如圖3所示。

        圖3 設(shè)計(jì)器目錄結(jié)構(gòu)

        在/designer文件夾下的index.html文件為組態(tài)設(shè)計(jì)器入口,此時(shí)運(yùn)行Tomcat容器加載Web工程后,通過(guò)瀏覽器訪(fǎng)問(wèn)/console/designer路徑可以看到設(shè)計(jì)器初始運(yùn)行成功,如果需要調(diào)整設(shè)計(jì)器界面的展示語(yǔ)言,可以通過(guò)修改mxLanguage=’zh’來(lái)指定使用中文,同時(shí)在/resources文件夾下增加grapheditor_zh.txt文件,內(nèi)容可以參考/resources/grapheditor.txt文件。設(shè)計(jì)器初始界面如圖4所示。

        圖4 設(shè)計(jì)器初始界面

        2.2.2 調(diào)整后臺(tái)交互

        GraphEditor示例的后端交互請(qǐng)求主要有以下幾種類(lèi)型,包括畫(huà)面新建、畫(huà)面保存與畫(huà)面打開(kāi),本文通過(guò)對(duì)前端設(shè)計(jì)器發(fā)出的請(qǐng)求進(jìn)行復(fù)寫(xiě),同時(shí)更改后臺(tái)Java接口的實(shí)現(xiàn)方式,對(duì)原新建、保存等操作進(jìn)行了重新編碼,并新增畫(huà)面導(dǎo)出、畫(huà)面轉(zhuǎn)換等后端接口。

        以畫(huà)面保存為例,其調(diào)用發(fā)起是在/js/EditorUI.js文件的EditorUi.prototype.save函數(shù)中,通過(guò)修改save函數(shù)的Ajax請(qǐng)求地址以及參數(shù),可以將畫(huà)面保存內(nèi)容發(fā)送到后臺(tái)服務(wù)中,從而實(shí)現(xiàn)自定義的畫(huà)面保存功能。

        為了更加豐富設(shè)計(jì)器功能,本文還對(duì)設(shè)計(jì)器畫(huà)面提供畫(huà)面導(dǎo)出、畫(huà)面查錯(cuò)等功能,需要同時(shí)對(duì)前端設(shè)計(jì)器界面和后臺(tái)服務(wù)進(jìn)行調(diào)整。首先通過(guò)/js/Toolbar.js中添加工具欄中的按鈕入口或者在/js/Menus.js中添加菜單入口,然后通過(guò)在/js/Actions.js中定義對(duì)應(yīng)的action操作,從而實(shí)現(xiàn)設(shè)計(jì)器的自定義功能實(shí)現(xiàn)。圖5是本文設(shè)計(jì)器的自定義工具欄。

        圖5 設(shè)計(jì)器工具欄

        2.2.3 設(shè)計(jì)器樣式調(diào)整

        首先需要明確對(duì)于整體設(shè)計(jì)器的布局是通過(guò)/js/EditorUI.js文件來(lái)進(jìn)行定義,該文件通過(guò)createDivs和createUI兩個(gè)方法創(chuàng)建了整個(gè)設(shè)計(jì)器的樣式內(nèi)容,調(diào)整該方法中的div容器創(chuàng)建和相應(yīng)UI組件,可以自定義設(shè)計(jì)器樣式。本文中對(duì)于設(shè)計(jì)器右側(cè)的Diagram容器、菜單容器以及左邊欄容器都進(jìn)行了相應(yīng)的調(diào)整,圖6為最終設(shè)計(jì)器界面。

        圖6 設(shè)計(jì)器界面樣式

        如果對(duì)于原有的div容器需要進(jìn)行刪除修改等操作,可以直接在createDivs方法中進(jìn)行調(diào)整,在該方法中創(chuàng)建的div容器是各個(gè)UI控件的父容器。圖7是createDivs方法截圖。

        圖7 創(chuàng)建div容器

        同時(shí),本文設(shè)計(jì)器還對(duì)整體樣式進(jìn)行了調(diào)整,比如調(diào)整設(shè)計(jì)器整體色系、字體等。GraphEditor示例對(duì)于所有樣式的定義都在/styles/grapheditor.css文件中,通過(guò)該文件可以查看設(shè)計(jì)器中已有UI控件的所有配置class、id信息,從而可以方便地進(jìn)行樣式調(diào)整,對(duì)于新增的UI控件,也可以自定義相關(guān)的class、標(biāo)簽樣式等。

        2.3 畫(huà)面靜態(tài)結(jié)構(gòu)

        由于組態(tài)畫(huà)面在編輯狀態(tài)和運(yùn)行狀態(tài)其功能有一定差異,比如編輯態(tài)需要能保留用戶(hù)操作步驟以此進(jìn)行撤銷(xiāo)操作,而運(yùn)行態(tài)則需要支持觸發(fā)用戶(hù)事件等,所以其各自狀態(tài)下的表述形式也有所不同。編輯態(tài)內(nèi)容以mxGraph圖形庫(kù)的文檔結(jié)構(gòu)為基礎(chǔ),其根元素為mxGraphModel,所有圖形元素都是一個(gè)mxCell標(biāo)簽,在mxCell標(biāo)簽中通過(guò)parent屬性表明父子關(guān)系,通過(guò)mxGeometry標(biāo)簽表明該元素的位置大小信息,其結(jié)構(gòu)如圖8所示。

        圖8 mxGraph文檔基本結(jié)構(gòu)

        在組態(tài)畫(huà)面搭建過(guò)程中的所有配置屬性全部體現(xiàn)在該文檔結(jié)構(gòu)中,比如線(xiàn)條顏色、填充比例等,對(duì)于mxCell可以識(shí)別的屬性?xún)?nèi)容,可以直接進(jìn)行配置,如果不屬于mxCell可識(shí)別的范圍,比如圖元閃爍頻率、文本替換規(guī)則等,那么需要將這些自定義屬性全部添加到style屬性中,并通過(guò)配置界面來(lái)修改和展示這些內(nèi)容。后續(xù)再次打開(kāi)該畫(huà)面內(nèi)容時(shí),需要對(duì)所有已配置屬性進(jìn)行解析,并回填到相應(yīng)的屬性配置界面中?;镜木庉嫅B(tài)文檔格式如圖9所示。

        圖9 編輯態(tài)文檔結(jié)構(gòu)

        事件處理是組態(tài)畫(huà)面的重要功能,通過(guò)在編輯態(tài)定義畫(huà)面元素與用戶(hù)事件的關(guān)聯(lián)關(guān)系以及處理函數(shù),以此提供組態(tài)畫(huà)面交互特性,而不僅僅只是簡(jiǎn)單的圖形展示。用戶(hù)事件處理內(nèi)容并不與畫(huà)面元素共同存儲(chǔ)在同一文檔中,這是因?yàn)閙xGraph的文檔格式并不支持JavaScript語(yǔ)言存儲(chǔ)。所以當(dāng)用戶(hù)進(jìn)行腳本編輯時(shí),需要在設(shè)計(jì)器中緩存腳本內(nèi)容,當(dāng)畫(huà)面進(jìn)行保存時(shí),將腳本內(nèi)容與畫(huà)面元素內(nèi)容一并傳遞到后臺(tái)進(jìn)行處理。

        畫(huà)面腳本在編輯態(tài)以”元素唯一名稱(chēng)_事件=function(){}”的形式存儲(chǔ),經(jīng)過(guò)后臺(tái)解析后將具體元素的事件響應(yīng)關(guān)聯(lián)到該函數(shù)上,同時(shí)將所有用戶(hù)腳本加入到頁(yè)面

        亚洲成a∨人片在线观看无码| 亚洲av成人片无码网站| 蜜臀色欲av在线播放国产日韩| 91精品国产综合久久熟女| 日本最新免费二区| 最近中文av字幕在线中文| 欧美人与动牲交片免费播放| 国产精品久久婷婷免费观看| 男女性爽大片视频| 人与禽性视频77777| 欧美野外疯狂做受xxxx高潮| 国产一级免费黄片无码AV| 午夜国产小视频在线观看黄| 午夜国产视频一区二区三区| 中国女人做爰视频| 色婷婷综合激情| 91精品国产色综合久久不| 亚洲精品一区二区三区麻豆| 国产在线无码精品无码| 国产一女三男3p免费视频| 国产高清在线精品一区αpp| 久久av一区二区三区黑人| 蜜桃91精品一区二区三区| 国产农村妇女精品一二区| 99在线精品国产不卡在线观看| 日本二区三区视频免费观看| 97cp在线视频免费观看| 2020年国产精品| 日本a在线播放| 国产女人av一级一区二区三区 | 欧洲亚洲色一区二区色99| 中文字幕一区二三区麻豆 | 亚洲av永久无码国产精品久久| 久久免费国产精品一区二区| 午夜视频免费观看一区二区| 亚州终合人妖一区二区三区| 国产精品一区二区久久乐下载| 伊香蕉大综综综合久久| 精品不卡视频在线网址| 亚洲sm另类一区二区三区| 国产毛片网|