intouch制作歷史報警查詢(時間查詢,篩選關鍵字)


在項目中,intouch制作歷史報警查詢已屬於標配功能,如何做出按時間以及關鍵字來進行綜合查詢,提高歷史報警查詢效率仍然是一個值得研究的問題,接下來參考網上文章自己總結下如何制作。

1.DTPicker格式制作

首先,時間選擇器的安裝不再一一演示,(安裝32位office系統,從向導中安裝date and time picker即可)。然后,選擇自定義格式,這里格式十分重要,直接關系到時間查詢的准確性(12小時制,24小時制的區別)。

格式如下:yyyy-M-d H:mm:ss

控件時間,設置為上午/下午以區分24小時,時間選擇為本地時間。

2020/5/4:備注

%H參數可以直接修改為24小時制

總體效果如下:

2.過濾器編寫

過濾器的原理其實很簡單,就是利用AlmDbViewCtrl控件本身自帶的過濾器屬性進行XML文檔配置,然后再后台拼湊去過濾器的格式,填充好相應的查詢關鍵字內容即可。

1.首先,編輯好過濾器路徑和文件

C:\Program Files (x86)\Wonderware\InTouch\test.xml

2.查看文件格式和內容,試着手動新建一個看看格式。

3.可以利用自定義函數去拼湊相應格式,填寫相應內容。

編寫quickfunction函數:ALMFILTERSEARCH

FileDelete("C:\Program Files (x86)\Wonderware\InTouch\test.xml");
FileWriteMessage( "C:\Program Files (x86)\Wonderware\InTouch\test.xml",0, HIST_XMLCODE +"<FILTER_FAVORITES><RECORD><FILTERNAME>MYFILTER</FILTERNAME><ELEMENT>", 0 );
IF HIST_SEARCHINDEX == 1 THEN
    FileWriteMessage( "C:\Program Files (x86)\Wonderware\InTouch\test.xml",-1, "<NAME>名稱</NAME><ORIGNAME>Name</ORIGNAME><OPERATOR>LIKE</OPERATOR><VALUE>%"+CONDITION+"%</VALUE><PARENT>0</PARENT>", 0);
ELSE 
    FileWriteMessage( "C:\Program Files (x86)\Wonderware\InTouch\test.xml",-1, "<NAME>報警注釋</NAME><ORIGNAME>Alarm Comment</ORIGNAME><OPERATOR>LIKE</OPERATOR><VALUE>%"+CONDITION+"%</VALUE><PARENT>0</PARENT>", 0);  
ENDIF;
FileWriteMessage( "C:\Program Files (x86)\Wonderware\InTouch\test.xml", -1, "</ELEMENT></RECORD></FILTER_FAVORITES>", 0 );
#AlmDbViewCtrl1.FilterFavoritesFile = "C:\Program Files (x86)\Wonderware\InTouch\test.xml";

其中:HIST_XMLCODE為內存消息,存放xml頭部消息(<?xml version="1.0" encoding="GB2312"?>)

HIST_SEARCHINDEX為內存整型,單選按鈕選擇狀態(選擇標記名為1)

CONDITION為內存消息,此處為查詢的關鍵字內容。

3.腳本編寫

腳本的話,主要分為窗口腳本,以及查詢按鈕腳本。窗口腳本主要用於填寫顯示時,初始化腳本。查詢則為點擊查詢時,所約束的時間和過濾器內容。

窗口腳本:規定默認時間選擇當天一天時間,歷史報警也顯示為該天中所有報警信息。

#DTPicker1.value = $DateString+" "+ "00:00:00";
#DTPicker2.value = $DateString+"  "+"23:59:59";
#AlmDbViewCtrl1.SpecificTime = 1;
#AlmDbViewCtrl1.StartTime = StringMid(#DTPicker1.value,6,2) + "/" + StringMid(#DTPicker1.value,9,2) + "/" + StringMid(#DTPicker1.value,1,4) + " "+ StringMid(#DTPicker1.value,13,2) + StringMid(#DTPicker1.value,16,2) +StringMid(#DTPicker1.value,19,2) ;
#AlmDbViewCtrl1.EndTime = StringMid(#DTPicker2.value,6,2) + "/" + StringMid(#DTPicker2.value,9,2) + "/" + StringMid(#DTPicker2.value,1,4) + " " + StringMid(#DTPicker2.value,13,2) + StringMid(#DTPicker2.value,16,2) +StringMid(#DTPicker2.value,19,2) ;
#AlmDbViewCtrl1.Refresh();

2020/5/4:備注

上述腳本在實際過程中存在小bug,會跳出月/日或年不對的問題,懷疑是03此類月份,和3月有寫法上的不同,特此修改。

#DTPicker1.value = $DateString+" "+ "00:00:00";
#DTPicker2.value = $DateString+"  "+"23:59:59";
#AlmDbViewCtrl1.SpecificTime = 1;
#AlmDbViewCtrl1.StartTime=#DTPicker1.Month+ "/"+ #DTPicker1.Day+"/"+#DTPicker1.Year +" " + #DTPicker1.Hour+ ":"+ #DTPicker1.Minute+":"+#DTPicker1.Second;
#AlmDbViewCtrl1.EndTime=#DTPicker2.Month + "/"+ #DTPicker2.Day+"/"+#DTPicker2.Year +" " + #DTPicker2.Hour+ ":"+ #DTPicker2.Minute+":"+ #DTPicker2.Second;
#AlmDbViewCtrl1.Refresh();

查詢腳本:條件判斷,和調用quickfunctions函數建立過濾器判斷。

#AlmDbViewCtrl1.StartTime=#DTPicker1.Month+ "/"+ #DTPicker1.Day+"/"+#DTPicker1.Year +" " + #DTPicker1.Hour+ ":"+ #DTPicker1.Minute+":"+#DTPicker1.Second;
#AlmDbViewCtrl1.EndTime=#DTPicker2.Month + "/"+ #DTPicker2.Day+"/"+#DTPicker2.Year +" " + #DTPicker2.Hour+ ":"+ #DTPicker2.Minute+":"+ #DTPicker2.Second;
#AlmDbViewCtrl1.GroupName = "$SYSTEM";

IF CONDITION <> "" THEN
CALL ALMFILTERSEARCH(CONDITION);
#AlmDbViewCtrl1.ShowFilter();

ELSE

#AlmDbViewCtrl1.Refresh();

ENDIF;

 

4.演示效果

5.總結

基本功能已經實現,在實際使用過程中若是還存在問題,再后續補充。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM