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

圖一
一、數(shù)據(jù)庫組態(tài):T001,T002,T003,TP001,TP002,TP003仿真現(xiàn)場數(shù)據(jù)。

圖二
二、畫面組態(tài)

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

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

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

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

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

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

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

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

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

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

圖十三
關(guān)系庫里的表一和表二如下:

圖十四

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