Wonderware-InTouch 历史报警过滤器无弹窗关键字筛查

我们做历史报警/事件的查询功能时会用到“AlmDbViewCtrl”这个历史控件,经常需要对历史记录的某些关键字进行筛查,以更加精确的得到查询结果。就目前的查询功能而言完全可以实现,但我们点击筛查按钮时,总会先弹出一个条件过滤器,再次选择查询条件方可得出结果。这个重复的操作真的不友好,对于完美主义者而言。

 

为了解决这个痛点,讲一下如何实现关键字筛查无过滤器弹窗,现以这两种方式做个对比。

一. 有过滤器弹窗筛查

1. 在“AlmDbViewCtrl”控件的属性界面找到“查询过滤器”,可新建编辑一个过滤器收藏文件夹名为:MYFILTER.xml,放在本工程的文件目录下。

 

2. 在控件向导“魔法帽”找到“单选按钮组”控件

3. 设置“单选按钮组”控件,新建index内存整型标记名,做4个单选项,分别为:TgaName,AlarmGroup,Operator,Description,作为筛查关键字。选择后的index的值分别为:1,2,3,4

4. 窗口显示时脚本,即切换到历史报警界面时初始化时间以及默认查询当天报警历史记录:

#AlmDbViewCtrl1.StartTime = Text(#DTPicker2.month,"00") + "/" + Text(#DTPicker2.day,"00") + "/" + Text(#DTPicker2.year,"0000") + " " + Text(#DTPicker2.hour,"00") + ":" + Text(#DTPicker2.minute,"00") + ":" + Text(#DTPicker2.second,"00") ;
#AlmDbViewCtrl1.EndTime = Text(#DTPicker3.month,"00") + "/" + Text(#DTPicker3.day,"00") + "/" + Text(#DTPicker3.year,"0000") + " " + Text(#DTPicker3.hour,"00") + ":" + Text(#DTPicker3.minute,"00") + ":" + Text(#DTPicker3.second,"00") ;
#AlmDbViewCtrl1.SpecificTime = 1;
#AlmDbViewCtrl1.Refresh();

5.查询按钮脚本:

strPath = InfoInTouchAppDir() + "\MYFILTER1.xml";
CALL ALMSEARCHFILTER(strTagName,strAlarmGroup,strOperator,strDescription);
#AlmDbViewCtrl1.StartTime = Text(#DTPicker2.month,"00") + "/" + Text(#DTPicker2.day,"00") + "/" + Text(#DTPicker2.year,"0000") + " " + Text(#DTPicker2.hour,"00") + ":" + Text(#DTPicker2.minute,"00") + ":" + Text(#DTPicker2.second,"00") ;
#AlmDbViewCtrl1.EndTime = Text(#DTPicker3.month,"00") + "/" + Text(#DTPicker3.day,"00") + "/" + Text(#DTPicker3.year,"0000") + " " + Text(#DTPicker3.hour,"00") + ":" + Text(#DTPicker3.minute,"00") + ":" + Text(#DTPicker3.second,"00") ;
#AlmDbViewCtrl1.SpecificTime = 1;
#AlmDbViewCtrl1.ShowFilter();

6. CALL ALMSEARCHFILTER(str1,str2,str3,str4)函数脚本为:4个参数均为消息

FileDelete(strPath);
FileWriteMessage( InfoInTouchAppDir() + "\MYFILTER1.xml",0,HIST_XMLCODE + "<Filter_Favorites><Record><FilterName>TAGNAME</FilterName><Element>", 0 );
FileWriteMessage( InfoInTouchAppDir() + "\MYFILTER1.xml",-1, "<Name>名称</Name><OrigName>Name</OrigName><Operator>LIKE</Operator><Value>%"+str1+"%</Value><Parent>0</Parent>", 0);
FileWriteMessage( InfoInTouchAppDir() + "\MYFILTER1.xml", -1, "</Element></Record>", 0 );
FileWriteMessage( InfoInTouchAppDir() + "\MYFILTER1.xml",-1, "<Record><FilterName>ALARMGROUP</FilterName><Element>", 0 );
FileWriteMessage( InfoInTouchAppDir() + "\MYFILTER1.xml",-1, "<Name>组</Name><OrigName>Group</OrigName><Operator>LIKE</Operator><Value>%"+str2+"%</Value><Parent>0</Parent>", 0);
FileWriteMessage( InfoInTouchAppDir() + "\MYFILTER1.xml", -1, "</Element></Record>", 0 );
FileWriteMessage( InfoInTouchAppDir() + "\MYFILTER1.xml",-1,"<Record><FilterName>OPERATOR</FilterName><Element>", 0 );
FileWriteMessage( InfoInTouchAppDir() + "\MYFILTER1.xml",-1, "<Name>操作</Name><OrigName>Operator</OrigName><Operator>LIKE</Operator><Value>%"+str3+"%</Value><Parent>0</Parent>", 0);
FileWriteMessage( InfoInTouchAppDir() + "\MYFILTER1.xml", -1, "</Element></Record>", 0 );
FileWriteMessage( InfoInTouchAppDir() + "\MYFILTER1.xml",-1,"<Record><FilterName>DESCRIPTION</FilterName><Element>", 0 );
FileWriteMessage( InfoInTouchAppDir() + "\MYFILTER1.xml",-1, "<Name>报警注释</Name><OrigName>Alarm Comment</OrigName><Operator>LIKE</Operator><Value>%"+str4+"%</Value><Parent>0</Parent>", 0);
FileWriteMessage( InfoInTouchAppDir() + "\MYFILTER1.xml", -1, "</Element></Record></Filter_Favorites>", 0 );
#AlmDbViewCtrl1.FilterFavoritesFile = strPath;

7. 生成的过滤文件内容为:内容可以根据需要筛查的关键字进行增减

8. 点击查询按钮后需再次选择条件确定得出结果:

到此,有过滤器弹窗关键字筛查结束。

二. 无过滤器弹窗筛查

从上面第5步开始写查询按钮的脚本就有所不同了,在这里敲黑板,擡头挺胸划重点,用到了“AlmDbViewCtrl”控件“SelectQuery”方法实现查询,脚本格式如下:

#AlmDbViewCTRL1.SelectQuery("filtername"); 

查询按钮脚本为:

#AlmDbViewCtrl1.StartTime = Text(#DTPicker2.month,"00") + "/" + Text(#DTPicker2.day,"00") + "/" + Text(#DTPicker2.year,"0000") + " " + Text(#DTPicker2.hour,"00") + ":" + Text(#DTPicker2.minute,"00") + ":" + Text(#DTPicker2.second,"00") ;
#AlmDbViewCtrl1.EndTime = Text(#DTPicker3.month,"00") + "/" + Text(#DTPicker3.day,"00") + "/" + Text(#DTPicker3.year,"0000") + " " + Text(#DTPicker3.hour,"00") + ":" + Text(#DTPicker3.minute,"00") + ":" + Text(#DTPicker3.second,"00") ;
#AlmDbViewCtrl1.SpecificTime = 1;

IF index == 1 THEN
#AlmDbViewCTRL1.SelectQuery("TAGNAME"); 
ELSE IF index == 2 THEN
#AlmDbViewCTRL1.SelectQuery("ALARMGROUP"); 
ELSE IF index == 3 THEN
#AlmDbViewCTRL1.SelectQuery("OPERATOR"); 
ELSE IF index == 4 THEN
#AlmDbViewCTRL1.SelectQuery("DESCRIPTION"); 
ENDIF;ENDIF;ENDIF;ENDIF;

到此,无过滤器弹窗关键字筛查结束。

InTouch历史报警无过滤器弹窗关键字筛查视频演示

Wonderware-InTouch历史报警无过滤器弹窗筛查学习

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章