現場應用中經常會涉及到數據的比對,例如:對紫金橋實時庫和關系庫的數據進行比對,可能有多個解決方案,但是通過內置sql和通用數據表的使用可以方便快速的實現。 下面介紹的事例就是通過二者結合實現紫金橋的歷史數據和關系庫的數據進行對比的功能。
本事例是針對現場實際的需求寫的,具體需求是:實現讀取紫金橋歷史庫里的數據進行運算即當天數據減去前一天的數據的差值(并保存到關系庫中),和取自關系庫中第三方提供的數據進行對比,進而實現數據校對的功能。這里為了系統的調試把前一天的數據使用畫面上的時間控件(#_starttime)值來替代,當天的時間用時間控制加一分鐘后的值來代替。
下面是系統架構圖:

圖一
一、數據庫組態:T001,T002,T003,TP001,TP002,TP003仿真現場數據。

圖二
二、畫面組態

圖三
起始時間控件:_starttime系統調試時,設定值作為當天時間。
自由報表:nTagName,保存需要查詢pv值歷史的點的點名。

圖四
自由報表:nTagVal,內置 sql返回的點名、前一天8點的值、當天8點的值、時間戳(當天的時間yyyy/mm/dd 8:00:00)

圖五
內置sql對象:MyInsql,查詢歷史數據。(詳細使用見紫金橋的相關文檔)
通用數據表:MyTable,用來作為數據緩存。(詳細使用見紫金橋的相關文檔)
三、關系庫里建兩個關系數據表
表1存儲從歷史庫查出的當天和前一天的差值。

圖六
表2是一組從其他系統讀入的校準值即準確值。

圖七
四、運行時的控制邏輯實現
1.在窗口進入窗口腳本里使用間接變量指向TP001,TP002,TP003,這樣對TNum[0], TNum[1], TNum[2]的操作就等于對TP001.PV, TP002.PV, TP003.PV的操作。

圖八
2.定義通用數據表對象和實型數據變量,字符變量。

圖九
3.通過內置sql對象查詢“前一天”和“當天”的歷史。

圖十
4.計算二者的差值寫入到紫金橋實時庫中(TNum[i] = val1 – val2,見第1步)并插入關系庫的表一中。

圖十一
5.把時間基、“當天”、“前一天”、差值以及校正值插入自由報表nTagName內顯示。

圖十二
五、運行時的效果。
軟件系統,在時間控件里設置一個時間。大約一分鐘后查看畫面如下效果:

圖十三
關系庫里的表一和表二如下:

圖十四

圖十五
注意:表2因為沒有實際的現場環境,為了測試需要手動寫入了一些數據。
到此,本事例介紹完畢。
有任何關于組態軟件的技術問題或需要更多的技術資料,可以在微信(微信號:Realinfo)留下聯系方式或者到http://www.realinfo.cc/交流論壇里提出,我們將及時為您解答。
|