紫金橋組態軟件系統自帶的報警功能的處理邏輯是一次達到報警條件后,如果現場測量值一直滿足當前的報警條件,那么只會提示最開始的第一條報警記錄。但是如果需要在發生報警后,當前現場測量值繼續滿足報警條件還要給出報警提示時,這樣就需要進行二次開發,下面的示例就給出了一個針對這種需求的解決方法。
用戶具體需求是:當現場測量值滿足條件(這里假定是大于3.9或者小于3.5)觸發報警之后,立刻報警。下一條數據也滿足條件時也要觸發報警(不能不報)。具體是,如果收到的數據一直不在3.5~3.9的范圍內且值不變化則60秒報一次警,如果收到的數據一直不在3.5~3.9的范圍內,且值是變化的同步產生報警。下面以偏差報警為例進行說明。
下圖是功能實現的流程圖:
系統流程圖
具體實現:
一、畫面圖元組態
1、在工程目錄下新建了一個Access數據庫并新建了一個數據表ALM1如下圖:
2、在點組態里新建模擬點TEST、TEST1、TEST2和報表關系數據源點RP如下圖:
3、新建了中間變量RECY。(下文會交代它的作用)
4、組態報表關系源點連接字符串,具體就是點擊圖中連接字符串文本框后面的按鈕進行配置如下圖:
最終生成的字符串為:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+GetAppPath()+"\Sql\AlmDB.mdb;User Id=admin;Password=;"
5、在紫金橋開發環境里新建一個窗口Draw1、一個自由報表ALM、一個文本對象、一個按鈕如下圖:
6、關聯文本對象的動畫連接——TEST.PV的模擬輸入輸出,用于手動改變TEST.PV的值,模擬現場情況。
7、關聯按鈕的動畫連接鼠標腳本:#ALM.SaveExcel("",1,1);后邊要通過查看保存的Excel文件來驗證系統是否可以實現預期功能。
二、系統控制邏輯組態
1、窗口腳本周期腳本組態,這部分腳本主要是要實現系統流程圖中的從關系數據表讀入數據并顯示在報表控件上。如下圖:
2、在自由報表ALM/自由報表設置/關系庫連接設置里,組態了報表關系庫源點,如下圖:
3、在應答后觸發的腳本/SQL正確返回腳本中,實現判斷當前TEST.PV是否滿足偏差報警條件,如果滿足就把變量RECY置1否則置0,這里RECY是一個中間變量起到觸發向關系庫插入報警記錄的開關作用。腳本如下圖:
4、畫面/腳本/條件腳本組態,這里我們新建了一個條件腳本InsertRecord如下圖,并進行腳本控制邏輯組態如下圖:
通過這個條件腳本實現了向關系庫插入報警記錄的邏輯。
三、運行工程,測試系統實際效果
1、手動改變TEST.PV=9.7滿足偏差報警條件大于3.9或者小于3.5保持一段時間如下圖:
2、手動改變TEST.PV=3.6不滿足偏差報警條件(大于3.9或者小于3.5)
3、手動改變TEST.PV=1滿足偏差報警條件(大于3.9或者小于3.5)保持一段時間
4、點擊“導出”按鈕保存自由報表的內容為excel格式文件。
5、打開Excel表格如下圖:
6、分析表格記錄
通過對表格的分析我們可以得出清晰的結論:
(1)如果當前現場測量值滿足報警條件且和前一個報警值不一致則也會產生報警,即插入關系數據表并在自由報表上顯示。如表格中的第一條記錄TEST.PV=0和第二條記錄TEST.PV=9.7。
(2)如果當前現場測量值滿足報警條件并且不變則系統會向關系數據表中60秒插一條記錄并顯示在自由報表控件上例如當TEST.PV=9.7時。即符合用戶關于“如果收到的數據一直不在3.5~3.9的范圍內則60秒報一次警”的需求。
(3)如果當前報警值不符合報警條件就不會產生報警例如:令TEST.PV=3.6在導出的表格里沒有記錄。即系統只會記錄報警記錄。
(4)當現場測量值由正常值變成符合報警條件的值時,立刻就會產生一條報警例如:TEST.PV=3.6變成TEST.PV=1就會產生報警。Excel表格中第14條記錄就當
TEST.PV=3.6變成TEST.PV=1時產生的報警。
綜上,經測試系統達到了用戶的需求并能正確穩定運行。
有任何關于組態軟件的技術問題或需要更多的技術資料,可以在微信(微信號:Realinfo)留下聯系方式或者到http://www.realinfo.cc/交流論壇里提出,我們將及時為您解答。