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

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

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

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

圖四
自由報(bào)表:nTagVal,內(nèi)置 sql返回的點(diǎn)名、前一天8點(diǎn)的值、當(dāng)天8點(diǎn)的值、時(shí)間戳(當(dāng)天的時(shí)間yyyy/mm/dd 8:00:00)

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

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

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

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

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

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

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

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

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

圖十四

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