我用报警控件做了个操作记录的组态,有214个操作事件 分别占用一个编号(公214个编号),可以通过编号查询不同位号的操作情况。显示全部操作记录也没有问题。问题出在根据编号查询的时候我只能查询编号在128以下的不同位号的记录,编号128以上的查了没有反映 全部显示空白。这是为什么呢?
问题补充:编号 就是系统块里边那个编号(就是第一列) 我用标准函数AXC_SetFilter("操作记录.pdl","控件1",&Filter,&Error)来设置过滤器。明明把过滤器的编号开始和结束位置设置好了(我看了的确实设置好了的)
Filter.dwMsgNr[0]=GetTagDWord("start");//起始
Filter.dwMsgNr[1]=GetTagDWord("end");//结束
这里dwMsgNr[0]和dwMsgNr[1]设置成了大于128的都没有用。就是不查询,但是我在全部历史记录中能看得到大于128编号的记录.
最佳答案
首先你先使用报警控件的过滤器,看看能不能实现过滤功能。如果可以就说明你的报警控件没有问题。如果不行,新建一个控件作如下测试:
新建一个按钮,把如下代码加入到你的鼠标动作中(C脚本)
BOOL ret;
MSG_FILTER_STRUCT Filter;
CMN_ERROR Error;
//Reset the filter struct
memset( &Filter, 0, sizeof( MSG_FILTER_STRUCT ) );
//Set the filter name
strcpy( Filter.szFilterName, "控件1");
// Choose selection elements
Filter.dwFilter = MSG_FILTER_NR_FROM | MSG_FILTER_NR_TO;
// Message number from
Filter.dwMsgNr[0] = 130;
// Message number to
Filter.dwMsgNr[1] = 200;
ret = AXC_SetFilter("NewPdl1.PDL","控件1",&Filter,&Error);
控件1为你的报警控件名称。
我做过测试,没有问题!
如果上面的代码没有问题,把报警记录的起始点改为变量测试:
// Message number from
Filter.dwMsgNr[0] = GetTagWord("start");
// Message number to
Filter.dwMsgNr[1] = GetTagWord("end");
我测试的也没有问题。
注意检查你的Tag变量的数据类型。
具体说明参见Wincc系统帮助.
AXC_SetFilter example
回答者: HTLearn - 毕业实践员 第4级 2008-3-4 10:06
提问者对于答案的评价:
我已经用其他方法解决了 你的方法和我的差不多 但我的就是不行 我看了哈 我查询128以上的时候 控件工具条的“选择对话框”中“编号”的 查询条件 居然是 “MSGNR >= 1056964671 AND MSGNR <= 0”显然益出了,不知道什么原因;
我用另外的方法实现了 如下:
char SQLcmd[130];
sprintf(SQLcmd,"MSGNR >= %d AND MSGNR <= %d",GetTagDWord("start"),GetTagDWord("end"));
SetPropChar("操作记录.pdl","控件1","MsgFilterSQL",SQLcmd);
这个非常好用 还是要谢谢你 也感谢前边那个提问的兄弟把代码贡献出来了。又学到一招,呵呵!
是从消息归档中读出的数据记录的最大数据限制为128了吧,你把WINCC报警控件属性--统计列表---设置----数量限