基於Qt的組態監控軟體實現以及分析(轉)
轉自:http://yleesun.blog.163.com/blog/static/2941340220094695359894/
組態軟體部分作為自動化網路平臺客戶端的實現部分,僅僅是其中的一小部分,即HMI介面部分,也只有這部分是基於Qt實現的,所以這個帖子主要介紹的就是這一部分,當然先就整體部分做個介紹
1、本系統目的是建立一個通用SCADA系統平臺。
2、本系統(自動化網路平臺系統),主要由實時資料庫、引數資料庫、組態軟體等幾個部分。
a) 面向服務設計,實時資料庫、引數資料庫等作為一個個服務存在於系統中,新增一個服務所需要作的僅僅是定義介面(類似於idl),實現你的介面即可。可以線上新增服務、線上刪除服務,不需要重啟整個系統。
b) 單個服務支援主備冗餘,對於使用服務的程式來說則完全是透明的,其僅僅需要知道服務名(標識)即可,一個服務不可用時自動切換到另一個服務。
c) 實時資料庫提供了python介面,支援python表示式,效率相當高。支援數十萬資料點,同時支援外掛,即當對於實時資料有不同的處理要求時,可以載入自己寫的外掛,比如處理最大最小值,越限告警等等,使用外掛而不是介面的原因當然是效率,因為在同一個程序,資料處理速度更快。
d) 實現了一個系統級的引數資料庫,非常靈活。所有的資料型別都是可以配置的,更改一個表結構所需要做的僅僅是更改配置,而配置檔案本身就是作為引數的一部分。支援具有任何資料結構的引數表,你也可以把
e) 本系統的設計目的:實現一個自動化網路監控平臺,可以用於電力、鍋爐、自來水等等所有的自動監控系統。曾經接觸過一家國內非常有名的模擬系統平臺,本系統不做任何修改即可勝任,呵呵,並且配置非常方便,比較麻煩的則是很多模擬模組的具體實現,一個模擬模組其實就是對實時資料庫若干點的輸入、處理後若干點的輸出,其實現可以通過python表示式,也可以通過外掛實現。
f) 最後如果您的企業在開發類似的東西,並且對這套系統感興趣,歡迎和我聯絡,當然如果您個人在做類似的工作,期望您的交流。
組態軟體本質上就是實現一個向量圖形編輯器,實現若干個基本圖元,例如矩形、圓、線、多邊形、點陣圖、連線線,然後基於這些基本圖元可以組合為任意的新的圖元,即組合圖元(
1、天然的跨平臺,目前很多監控軟體都要求運行於Unix系統,尤其是在電力行業。
2、 Qt提供的Graphics View模組好像為組態軟體的實現量身定做,呵呵,應用該模組,效率非常高,支援數十萬級別的item。
3、 QSA指令碼,與Qt的天然整合,太完美了。
4、 Qt提供的undo模組,經典的命令模式的實現,用在組態軟體的undo、redo不費吹灰之力。
5、這些還不夠嗎,以上任何一點都夠一個開發小組工作一段時間,更重要的是重複發明輪子的意義到底有多大?輪子也未必正常行駛,呵呵設計時幾個主要的環節:
1、組合模式,即若干圖元的組合還是一個圖元,這個有QGraphicsItemGroup這個類,基本上工作量小的多了
2、命令模式,即undo/redo的實現,當然有了QUndoStack這些類,就容易的多
3、圖元大小的改變,即可以由滑鼠的拖動改變一個圖元的大小,這個相對難一點,因為矩形、橢圓、線處理方式不一樣,要分開處理
4、 QGraphicsItem的擴充套件,由於所有的item都是基於這個類的,但是我們在實現的時候往往需要更多的虛擬函式,這個實現可以說是必須的,在實現的時候也想到的幾種方法,比如擴充套件某一個虛擬函式,比如多繼承,或者修改Qt這部分的原始碼,最後採用的是一種非繼承的組合方法即MyItem基類,包含一個QGraphicsItem *成員,這個是目前個人感覺最好的辦法。
5、模版實現,即若干圖元組合後的新圖元可以儲存到模版,用的時候拖放過來即可。
6、儲存格式,一般由二進位制、xml檔案,這兩種各有優缺點,我則直接儲存為qsa指令碼,load進來後頁面也建立了,兼兩種格式的優點。
呵呵,其實、引數庫、實時資料、包括各個服務等等都可以做成可組態的,系統可以面向服務,而針對於各個組成部分的實現可以基於元件,比如一個客戶端程式,選單、工具欄、各個widget都是可配置的,這對於一個可複用、通用程式來說是必要的。
相關推薦
基於Qt的組態監控軟體實現以及分析(轉)
轉自:http://yleesun.blog.163.com/blog/static/2941340220094695359894/ 組態軟體部分作為自動化網路平臺客戶端的實現部分,僅僅是其中的一小部分,即HMI介面部分,也只有這部分是基於Qt實現的,所以這個帖子主要介紹的
基於Qt的OpenGL可編程管線學習(3)- 使用Instanced方式繪制
qt opengl shader instanced 繪制多個重復的模型時,使用Instanced方式繪制可以大大加快顯然速度。繪制效果如下圖所示:1、Vertex Shader中定義如下:attribute vec3 pos; attribute vec2 coord; attribute
基於Qt的OpenGL可編程管線學習(9)- X射線
qt opengl shader x射線 X射線也就是輪廓線,效果如下圖所示原理:物體表面的法線與人眼睛縮成的角度為90度時,剛好能看到物體的輪廓Fragment shader代碼如下:uniform sampler2D U_MainTexture; varying vec2 M_coord
基於Qt的OpenGL可編程管線學習(5)- FBO的使用
qt opengl shader fbo FBO: Frame Buffer Object,默認繪制在1號FBO中,自定義的FBO是可以做讀寫操作的。繪制到自定義的FBO,然後顯示出來,如下圖所示:Qt中有關於FBO的類,QOpenGLFrameBufferObjectFBO的創建m_Fram
基於Qt的OpenGL可編程管線學習(10)- 膨脹與腐蝕
qt opengl shader 腐蝕 膨脹 膨脹:取一個像素周圍的點,取最亮的點為當前的點顏色,為膨脹效果腐蝕:取一個像素周圍的點,取最暗的點為當前的點顏色,為腐蝕效果膨脹Fragment Shadervarying vec2 M_coord; varying vec3 M_normal
基於Qt的OpenGL可編程管線學習(4)- 使用Subroutine繪制不同光照的模型
qt opengl shader subroutine 使用Subroutine在shader中封裝不同的函數,在CPU端選擇調用那個函數效果如下圖所示左側:環境光中間:環境光 + 漫反射右側:環境光 + 漫反射 + 高光1、Subroutine 在shader中的內容subroutine v
基於Visual C++之Windows核心程式設計程式碼分析(1)實現裝置管理器列舉裝置
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Linux中dpkg工具update-alternatives實現符號連結軟體版本的切換(轉)
一、功能作用 update-alternatives是dpkg的實用工具,用來維護系統命令的符號連結,以決定系統預設使用什麼命令。 在Debian系統中,我們可能會同時安裝有很多功能類似的程式和可選配置,如Web瀏覽器程式(firefox,konqueror)、視窗管理器(wmaker、metacity)
Qt多國語言的實現與切換(國際化)
1、建立語言檔案 開啟.pro檔案,加入以下: TRANSLATIONS+=cn.ts 工具->外部->Qt語言家->更新翻譯,將生成翻譯檔案cn.ts 2、編輯翻譯檔案 啟動Linguist(Qt語言家),開啟cn.ts,然後進行
頁面重繪和回流以及優化(轉)
圖片大小 處理流 create 意圖 borde 基本上 nal arch 似的 源文章地址:http://www.css88.com/archives/4996 在討論頁面重繪、回流之前。需要對頁面的呈現流程有些了解,頁面是怎麽把html結合css等顯示到瀏覽器上的,下面
Elasticsearch+logstash+kibana實現日誌分析(實驗)
elasticsearch logstash kibana Elasticsearch+logstash+kibana實現日誌分析(實驗)一、前言 Elastic Stack(舊稱ELK Stack),是一種能夠從任意數據源抽取數據,並實時對數據進行搜索、分析和可視化展現的數據分析框架。(h
用Java實現AES加密(轉)
密鑰 工具 mex 嚴格 keys 生產 ner for 創建 一)什麽是AES? 高級加密標準(英語:Advanced Encryption Standard,縮寫:AES),是一種區塊加密標準。這個標準用來替代原先的DES,已經被多方分析且廣為全世界所使用。 那麽為什麽
Nginx 和 IIS 實現動靜分離(轉)
host rar web應用 localhost nginx服務器 .net 復雜 jpeg post 轉載地址:https://www.cnblogs.com/paul8339/p/5825201.html 動靜分離,說白了,就是將網站靜態資源(HTML,JavaScr
java中使用相對路徑讀取文件的寫法總結 ,以及getResourceAsStream() (轉)
protected 9.png pre ring details 使用 ide 技術分享 相對 https://blog.csdn.net/my__sun_/article/details/74450241 讀取文件的寫法,相對路徑 在當前的目錄結構中讀取test.txt的
基於FormsAuthentication的用戶、角色身份認證(轉)
就會 攻擊 context public contex onf decrypt 數據 分用 一般情況下,在我們做訪問權限管理的時候,會把用戶的正確登錄後的基本信息保存在Session中,以後用戶每次請求頁面或接口數據的時候,拿到 Session中存儲的用戶基本信息,查看
Ubuntu下實現軟路由(轉)
firewall 為我 control ble iptable display audio 並且 target 參考:http://www.openwrt.pro/post-292.html 個人看法: 1、實現路由在Linux下必須要用到iptables進行轉發,這才
基於Websocket+SpringMVC4推送部標Jt808終端報警(轉)
握手 就會 adding 交換 連接 top 只需要 cell 2.4 原文地址:http://www.jt808.com/?p=1263 在開發部標監控平臺的時候,我們要及時的將部標終端報警推送到web界面上,以彈窗的形式提供給用戶顯示,要將報警顯示在界面上,部標808協
C++函式引數傳遞的3種方式以及優缺點(轉)
寫函式時遇到給予函式的引數變數無法被修改的問題,轉自:https://blog.csdn.net/zhaoxun91/article/details/75417492 1 函式引數傳遞的3種方式比較 1.1 按值傳遞 #include <iostream> using names
Guava TreeMultiSet實現原理分析(2)
5 count,size AvlNode為資料統計提供了多個便利引數,不需要遍歷所有的子節點就可以獲得相關的個數資訊。 AvlNode的統計屬性: elemCount:統計key相同的元素個數。 distinctElements:統計子樹中所有節點的個數,即ke
SQL實現 模糊查詢(轉)
在進行資料庫查詢時,有完整查詢和模糊查詢之分。 一般模糊查詢語句如下: SELECT 欄位 FROM 表 WHERE 某欄位 Like 條件 其中關於條件,SQL提供了四種匹配模式: 1,% :表示任意0個或多個字元。可匹配任意型別和長度的字元,有些情況下若是中文