高效便捷WinCC历史曲线实现方法

已锁定

iZhouSai

  • 帖子

    42
  • 精华

    8
  • 被关注

    78

论坛等级:侠士

注册时间:2015-01-21

普通 普通 如何晋级?

高效便捷WinCC历史曲线实现方法

16894

71

2023-02-11 14:43:33

引言

在很久很久以前,我对于 WinCC 历史曲线的做法是:一个画面一个(WinCC OnlineTrendControl)控件,一个控件两条趋势,一条红色表示实际值,一条黑色趋势表示设定值,如图所示。其中①为趋势图的画面,②为切换画面的按钮,③为更改当前画面中控件几条趋势所连接的归档变量 。

当然这也是取巧之后的做法,不然①中的画面就不止这么一点点了,但是大部分的工作都被转移到了③区域中的按钮中了,因为切换趋势图的归档变量是要写脚本的,脚本内容如下:

可以看到这个脚本有这么多行代码,但是这么行的代码也只要改一部分内容就可以了,但是区域③的每个按钮都要更改,也是比较费工夫的。

为了减少自己的工作量,冥思苦想,终于在写完 【分享】WinCC自定义用户登录(高级篇) 这篇文章之后得到一丝灵感,既然用户名可以在SQL数据的某张表中找到,那归档变量的数据是否也能在数据库中找到呢?抱着这种疑问我打开了 Microsoft SQL Server Management Studio 开始翻找,终于在一张名为 dbo.Archive 的表中找到了惊喜,那就让这个惊喜就伴随着正文的开始吧!

--------------------------------------------------------------------------

WinCC自定义用户登录(高级篇)

文章地址 :https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1752681&b_id=5&s_id=0&num=0#anch<

--------------------------------------------------------------------------


实现方案


实现思路


观察数据库表中的内容,可以看到ValueName列中的数据内容与 WinCC OnlineTrendControl 控件中趋势的变量名称一致,那么可以使用VBS脚本通过SQL查询语句将ValueName列的内容全部读取出来,并且填充到WinCC画面中的一个组合框,使用这个组合框的对象改变事件触发一段脚本,脚本的作用就是将组合框选中后的内容填充到对应趋势的变量名称内,通过这样的方式就可以动态的更改控件中显示趋势的内容。

上述已经实现基本功能,既然可以动态化更改趋势,那趋势所对应的值轴范围和时间范围当然也可以通过脚本&控件的方式实现,毕竟我们查看的每一种数据的值范围都不一样,当然也需要修改时间范围以便于我们对某个时间段的趋势数据进行查看。


实现过程


创建画面

以上图为标号我们在画面中如下表格所示插入对应内容:


其中 I/O域 需要关联变量,关联的变量可以使用WinCC内部变量,变量类型 Real。

其中 在线趋势控件 需要建立两个时间轴,两个数值轴,两个趋势窗口,两条趋势:

严格按照上表设计画面,否侧可能导致无法正常使用相应脚本!


脚本


在画面打开加载时我们需要对四个组合框进行数据填充,其中DataLoggingA和DataLoggingB中填充的内容手动编写,但是需要对应数据记录的名称。也就是数据库中ValueName列和趋势的变量名称 \ 前面的内容。因为这个项目比较简单,所以只做两个集合,一个实际值,一个设定值。

TrendListA和TrendListB填充数据库中整个ValueName列的内容。

数据记录趋势A值轴最大值和数据记录趋势B值轴最大值写入初始值 100.0 数据记录趋势A值轴最小值和数据记录趋势B值轴最小值写入初始值0.0

DateTimeBeginA和DateTimeBeginB写入当前时间的前一天日期时间。 DateTimeEndA和DateTimeEndB写入当前日期时间。

画面加载脚本

脚本全包含在附件中的TXT文件中,

使用 markdown 软件打开更清晰;

脚本.TXT

记录集选择B脚本

选择相应记录集合后,通过按钮的按下鼠标左键事件脚本将筛选出来的结果填充至TrendListB组合框;

TrendListA脚本

当TrendListA对象数据改变时通过对象改变事件脚本更改趋势图趋势A的变量名称。

TrendListB脚本

当TrendListB对象数据改变时通过对象改变事件脚本更改趋势图趋势B的变量名称。

值轴最大值A脚本

当值轴最大值A对象数据改变时通过对象改变事件脚本将趋势图的值轴A最大值更改为数据记录趋势A值轴最大值变量数据。

值轴最大值B脚本

当值轴最大值B对象数据改变时通过对象改变事件脚本将趋势图的值轴B最大值更改为数据记录趋势B值轴最大值变量数据。

值轴最小值A脚本

当值轴最小值A对象数据改变时通过对象改变事件脚本将趋势图的值轴B最小值更改为数据记录趋势A值轴最小值变量数据。

值轴最小值B脚本

当值轴最小值B对象数据改变时通过对象改变事件脚本将趋势图的值轴B最小值更改为数据记录趋势B值轴最小值变量数据。

时间设置A脚本

当时间设置A的按下鼠标左键事件触发时,读取日期时间控件DateTimeBeginA和DateTimeEndA的时间日期,分别修改趋势图时间轴A的开始时间和结束时间,并更改显示的时间范围模式。

时间设置B脚本

当时间设置B的按下鼠标左键事件触发时,读取日期时间控件DateTimeBeginB和DateTimeEndB的时间日期,分别修改趋势图时间轴B的开始时间和结束时间,并更改显示的时间范围模式。

实现效果




高效便捷WinCC历史曲线实现方法 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC WinCC / Panel

共有30655条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。