wincc历史数据库_wincc查询历史报警记录,归档数据

我用报警控件做了个操作记录的组态,有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 &gt= 1056964671 AND MSGNR &lt= 0”显然益出了,不知道什么原因;

我用另外的方法实现了 如下:

char SQLcmd[130];

sprintf(SQLcmd,"MSGNR &gt= %d AND MSGNR &lt= %d",GetTagDWord("start"),GetTagDWord("end"));

SetPropChar("操作记录.pdl","控件1","MsgFilterSQL",SQLcmd);

这个非常好用 还是要谢谢你 也感谢前边那个提问的兄弟把代码贡献出来了。又学到一招,呵呵!

是从消息归档中读出的数据记录的最大数据限制为128了吧,你把WINCC报警控件属性--统计列表---设置----数量限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值