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.总结
基本功能已经实现,在实际使用过程中若是还存在问题,再后续补充。
intouch制作历史报警查询(时间查询,筛选关键字)的更多相关文章
- intouch制作历史趋势公用弹窗
在先前项目中,历史趋势都是作为一个总体的画面,然后添加下拉菜单选择来配合使用.在新项目中,业主要求在相应的仪表上直接添加历史趋势,这就需要利用公用弹窗来制作历史趋势了. 1.窗体建立 窗体建立是比较简 ...
- Mysql 拼接字段查询语句和join查询拼接和时间查询
个人平时记录的,有点乱 1.修改时间字段,如果时间字段的类型是date或者是datetime类型的 update 表名 set 时间字段 = DATE_FORMAT(NOW(),'%Y-%m-%d % ...
- sql时间查询的问题
今天在做一个时间查询的时候遇到一个问题,就是获取的时间是 数据库的存储是这样的2016-10-29 12:11:40 2016-10-31 15:00:05 ... $log=M('table' ...
- mysql根据时间查询前一天数据
MySql数据库如何根据时间查询前一天的数据?本文整理了几个解决方法,有需要的朋友参考下. 本节内容:用MySql怎么根据时间查询前一天的数据. 例1: 代码示例: select * from t ...
- mysql数据库中查询时间
项目中要对数据按时间处理,在数据库中,时间处理的格式如 2014-12-09 06:30:17 时间查询出来如下所示: 现在要查询具体有哪天的数据,应用substring函数,SQL如下: ) as ...
- Oracle 查询时间在当天的数据
要实现这个功能需要用到trunc这个函数对时间的操作 select trunc(sysdate) from dual --2014-12-27 今天的日期为2014-12-27 select trun ...
- ThinkPHP 数据库操作(四) : 聚合查询、时间查询、高级查询
聚合查询 在应用中我们经常会用到一些统计数据,例如当前所有(或者满足某些条件)的用户数.所有用户的最大积分.用户的平均成绩等等,ThinkPHP为这些统计操作提供了一系列的内置方法,包括: 用法示例: ...
- 【Elasticsearch】ES中时间查询报错:Caused by: ElasticsearchParseException[failed to parse date field [Sun Dec 31 16:00:00 UTC 2017] with format [yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis]];
ES中时间查询报错:Caused by: ElasticsearchParseException[failed to parse date field [Sun Dec 31 16:00:00 UTC ...
- 在数据库中(Oracle),根据时间查询数据: to_date()和to_char()函数
1. to_date() 函数 1.1 格式 to_date("要转换的字符串","转换的格式") //两个参数的格式必须匹配,否则会报错.即按照第二个参数 ...
随机推荐
- 终于明白为什么要加 final 关键字了
在开发过程中,由于习惯的原因,我们可能对某种编程语言的一些特性习以为常,特别是只用一种语言作为日常开发的情况.但是当你使用超过一种语言进行开发的时候就会发现,虽然都是高级语言,但是它们之间很多特性都是 ...
- 我试了试用 SQL查 Linux日志,好用到飞起
大家好,我是小富~ 最近发现点好玩的工具,迫不及待的想跟大家分享一下. 大家平时都怎么查Linux日志呢? 像我平时会用tail.head.cat.sed.more.less这些经典系统命令,或者aw ...
- python-geopandas读取、创建shapefile文件
作者:fungis 描述:一个热带生活.乐于分享.努力搬砖的giser 交流邮箱:fungis@163.com shapefile是GIS中非常重要的一种数据类型,在ArcGIS中被称为要素类(Fea ...
- 使用docker搭建最新版本的gitea,并配置HTTPS访问
使用docker搭建最新版本的gitea,并配置HTTPS访问 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 简介 之前有搭建 ...
- QPainter::begin: Paint device returned engine == 0, type: 1
开始 使用QPainter画图,需要继承QWidget,重写paintEvent()虚函数,在里面进行绘图. 或者可以考虑绘制到QImage或者QPixmap上面,然后在paintEvent()里面调 ...
- 39、wget、curl
39.1.wget介绍: wget命令用来从指定的URL下载文件.wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败, wget会不断的尝试,直到整个文件 ...
- [Django REST framework - RBAC-基于角色的访问控制、base64编码 、xadmin的使用]
[Django REST framework - RBAC-基于角色的访问控制.base64编码 .xadmin的使用] RBAC-基于角色的访问控制 RBAC 是基于角色的访问控制(Role-Bas ...
- 痞子衡嵌入式:对比i.MXRT与LPC在RTC外设GPREG寄存器使用上的异同
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是对比i.MXRT与LPC在RTC外设GPREG寄存器使用上的异同. 本篇是 <在SBL项目实战中妙用i.MXRT1xxx里Syst ...
- 多元统计之因子分析模型及Python分析示例
1. 简介 因子分析是一种研究观测变量变动的共同原因和特殊原因, 从而达到简化变量结构目的的多元统计方法. 因子分析模型是主成分分析的推广, 也是利用降维的思想, 将复杂的原始变量归结为少数几个综合因 ...
- Java:Java的<<<移位运算符详解
1) 左移运算(<<) 左移就是把所有位向左移动几位 如: 12 << 2 意思就是12向左移动两位 12的二进制是: 0000 1100 通过这个图我们 ...