intouch制作歷史報警查詢(時間查詢,篩選關(guān)鍵字)
在項目中,intouch制作歷史報警查詢已屬于標配功能,如何做出按時間以及關(guān)鍵字來進行綜合查詢,提高歷史報警查詢效率仍然是一個值得研究的問題,接下來參考網(wǎng)上文章自己總結(jié)下如何制作。
1.DTPicker格式制作
首先,時間選擇器的安裝不再一一演示,(安裝32位office系統(tǒng),從向?qū)е邪惭bdate and time picker即可)。然后,選擇自定義格式,這里格式十分重要,直接關(guān)系到時間查詢的準確性(12小時制,24小時制的區(qū)別)。
格式如下:yyyy-M-d H:mm:ss

控件時間,設(shè)置為上午/下午以區(qū)分24小時,時間選擇為本地時間。

2020/5/4:備注
%H參數(shù)可以直接修改為24小時制

總體效果如下:

2.過濾器編寫
過濾器的原理其實很簡單,就是利用AlmDbViewCtrl控件本身自帶的過濾器屬性進行XML文檔配置,然后再后臺拼湊去過濾器的格式,填充好相應(yīng)的查詢關(guān)鍵字內(nèi)容即可。
1.首先,編輯好過濾器路徑和文件
C:\Program Files (x86)\Wonderware\InTouch\test.xml

2.查看文件格式和內(nèi)容,試著手動新建一個看看格式。

3.可以利用自定義函數(shù)去拼湊相應(yīng)格式,填寫相應(yīng)內(nèi)容。

編寫quickfunction函數(shù):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為內(nèi)存消息,存放xml頭部消息(<?xml version="1.0" encoding="GB2312"?>)
HIST_SEARCHINDEX為內(nèi)存整型,單選按鈕選擇狀態(tài)(選擇標記名為1)
CONDITION為內(nèi)存消息,此處為查詢的關(guān)鍵字內(nèi)容。
3.腳本編寫
腳本的話,主要分為窗口腳本,以及查詢按鈕腳本。窗口腳本主要用于填寫顯示時,初始化腳本。查詢則為點擊查詢時,所約束的時間和過濾器內(nèi)容。
窗口腳本:規(guī)定默認時間選擇當天一天時間,歷史報警也顯示為該天中所有報警信息。
#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();
查詢腳本:條件判斷,和調(diào)用quickfunctions函數(shù)建立過濾器判斷。
#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.總結(jié)
基本功能已經(jīng)實現(xiàn),在實際使用過程中若是還存在問題,再后續(xù)補充。
本文來自博客園,作者:cache.yuan,轉(zhuǎn)載請注明原文鏈接:http://www.rzrgm.cn/cache-yuan/p/12870788.html

浙公網(wǎng)安備 33010602011771號