控件下载地址:下载
http://pan.baidu.com/s/1dDrdvm5很早以前就想开发一个wincc报警框控件(WinccAlarmView),因为自带的wincc放到主画面上面以表格形式,不是很直观,这个Wincc报警框控件(WinccAlarmView)是基于Wincc里面的报警记录,样式是一个警告对话框,只要配置好wincc的报警记录,就能显示相应的报警。使用方法请参考《wincc报警框控件使用说明》
http://wenku.baidu.com/view/e5b2a588a58da0116c1749ea.html 开发后的效果如下

以前做报警比较重要的报警希望能显示在主界面上都是如下图所示:

图1
这样要做很多报警框,而且还很占空间,比较浪费时间。所以想开发一个基于wincc报警记录控件,WinCCAlarmView控件(后面提到的此控件均指WinCCAlarmView)是基于. netframework3.5开发的.net控件,所以它适用的WinCC版本,为WinCC7.0及以上。
此控件基于Wincc的报警记录,所以只要配置好WinCC的报警记录,此控件自动会显示相应的报警,报警消失或者报警确认此控件就会隐藏,不会显示报警框。
期间也碰到了一些技术问题:
1、Wincc7.0 使用西门子提供的查询报警语句(具体查询语句参考《WINCC数据开放性》),查询出来的中文报警消息文本均为:“?????”,(wincc6.2不存在这个情况,7.2没有测试过,希望有7.2的同学帮忙测试一下)

解决办法:参考WINCC 7.0 报警记录查询出现问号“????”解决方案
http://www.hackhome.net/post/Wincc%E6%8A%A5%E8%AD%A6%E8%AE%B0%E5%BD%95%E4%B9%B1%E7%A0%81%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88.html2、Wincc无论变量、变量记录还是报警记录在数据库中都是以ISO-8859-1编码储存的,所以里面中文都是以乱码形式的存在比如:1y3ì?μ 像这样的。
解决方法:参考Wincc查询中乱码的解决方案
http://www.hackhome.net/post/12.html3、取得WinCC的激活时间
假设Wincc报警记录有一个编号为1的报警记录,做过Wincc报警查询的工程师,都可能知道当这一个报警到来,Wincc会在数据库中插入字段MsgNr=1(相当于编号1)、字段State=1记录,如果你查询到这么一条记录就说明发生了某个报警,如果这条报警记录后面还有MsgNr=1、State=2的记录说明这个报警变量已经停止报警(如果一个布尔变量值为1为报警,这时候说明变量值为0,不在报警),或者这条报警记录后面还有MsgNr=1、State=3这说明这条报警记录已经经过操作人员的确认了,同样不必要报警。
但是现在却存在这么一种情况:比如在Wincc运行期间来了一个报警,在报警没有消失,也没有确认期间,Wincc不知道什么原因取消了激活,在这个取消激活期间,这个报警消失了(比如变量值变0了),然后你激活Wincc,查询报警记录,发现报警记录里面只要State=1的报警记录,后面并没有State=2或者State=3的变量消失记录,变量确认记录,这是程序会认为这个报警还存在,就会继续报警,但是实际上这个变量值已经为0,不需要报警,后来发现,Wincc报警记录查询的时间必须是Wincc最后一次激活时间开始,才会避免这个不必要的错误,那怎么去的Wincc的激活时间呢?因为西门子也没提供激活时间的接口(或许是我不知道),我在WinCC数据库中查找了很久也没发现记录激活时间的字段,没办法只能选个折中的方法,反正都是我这个控件也是查询报警记录的,Wincc在激活时会加载%_%_ALG_%_ 格式的数据库文件(%为任意字符),我就把这个数据库加载时间作为wincc的激活时间,当然如果启动报警记录运行系统是不会加载这些数据库的(因为这个是报警控件,前提就是要启动报警记录运行系统),所以这个问题也不是问题了。
遇到的典型问题就以上几个了,希望能这些杂乱的文字能对你有帮助。
控件下载地址:下载
http://pan.baidu.com/s/1nt2s2pF