更多WINCC趋势图,可参考以前文章:
某个设备有很多生产工艺数据需要记录,数据可能有100~200个不等。一般会用单独一个屏幕显示趋势图。操作上的主要诉求有以下几点:
1、 所有曲线趋势图在一个单独的页面显示
2、 能对数据进行分组,能方便的选择需要的曲线,隐藏暂时不需要的曲线
3、 能配置常用的数据曲线显示,在查看完其他曲线后快速恢复到该配置
第一点是硬性要求,在归档数据很多的时候如果直接离线组态工作量非常大,耗时耗力,编辑到后面人也会很暴躁??;如果有新项目,再重复相同的工作,想想都可怕。因此,选择用脚本进行批量创建是必须得。
第二点,Wincc的趋势控件中貌似是不支持分组的。在趋势曲线很多时,通过趋势控件的组态对话框勾选或者取消曲线的操作用起来真的非常难受。因此,考虑在趋势控件外做文章,使用“Treeview”控件可以同时满足分组和快捷选择的需求,使用父级节点作为分组目录,子级节点作为趋势曲线的选择栏。
第三点,实际上来讲也算是对趋势曲线的在线组态需求了。在两百多个趋势数据中,工艺需要经常查看的关键数据可能只有20~30个左右。在进行数据追溯时,往往只需要同时查看4、5个数据,之后需要恢复显示预先设置好的关键数据曲线。这里就需要一个配置文件来保存设置,选择Excel来保存这些配置,因为方便编辑。
总结起来,大致思路是:使用Excel表格保存趋势曲线的分组及具体曲线配置参数,使用treeview控件读取Excel表格中的树形结构,通过treeview子节点前的选择框来选择添加或删除相应的曲线显示。
-------------实施过程-----------
1、 创建一个pdl,里面添加一个treeview控件,再添加一个趋势控件。
2、 对treeview进行默认设置,激活显示checkbox即可,其他可以根据自己喜好设置
3、 对trendcontrol控件进行基本配置,新建一个趋势窗口,新建一个时间轴。由于归档数据太多,数值轴根据数据范围创建了4个数值轴,不用组态任何趋势。
4、 新建一个Excel文件,表格文件中创建了几个字段,每个字段意义如下:
1) Class 用于区分父节点和子节点。Father为父节点,Child为子节点。父节点表示分组,子节点表示该分组下的趋势曲线
2) Text 用于显示分组名称及趋势名称
3) Checked 用于配置对应的曲线是否显示
4) 归档变量 用于配置对应趋势的归档变量名称
5) 坐标系 用于配置趋势对应的数值轴,表格中名称需要与前述设置的名称相同
6) 颜色 用于配置趋势图的显示颜色
7) 类型 用于配置趋势显示的趋势线类型,是线性连接点、步进连接点还是显示值。
5、 配置好Excel文件后,下一步需要wincc运行系统读取到Excel的配置文件。
1) 在pdl的打开画面的事件中,读取Excel的配置,加载treeview节点,同时根据checked状态向趋势控件中动态添加趋势。Excel通过Ado方式访问。
2) 这样运行画面后,应该能得到一个根据excel配置好的趋势图,只显示了勾选过的趋势,其他趋势都没有加载。
6、 现在需要配置通过treeview子节点的checkbox的选择或取消来添加或删除趋势,在treeview控件的NodeCheck事件中编写脚本来实现该功能。部分代码如下。
到这里,主要的功能应该都实现了。通过勾选树形控件子节点来显示和隐藏需要的趋势,效果应该是这样的。
7、 现在已经实现了前面要求的1、2点的主要功能。但是,对于单独查看自己关心的数据时,需要将自己不关心的趋势全部隐藏的话,在趋势过多时同样也不太方便;关于第3点的要求也没有实现。因此,添加了3个按钮
1)“重新加载” 该按钮用于实现快速恢复显示在excel中配置的趋势。实现方法也比较简单,只需要刷新显示该pdl文件就可以了
2)“保存设置” 该按钮用于将修改后的配置保存到excel文件中;这些配置包含趋势的显示与否,趋势名称的修改,趋势颜色和数值轴的更改等。其实比较偷懒的做法是直接修改Excel文件就可以了,但是对于工艺工程师,他是不可能去修改文件的,不太友好,所以还是用按钮动作实现比较好。
3)“清空曲线” 该按钮只是单纯的为了查看某些趋势时将所有趋势删除,将treeview控件的所有节点的checkbox取消,方便后续选择需要的趋势。
最终效果如下
重新加载,:
保存设置
最后,画面组态完毕后pdl文件可以不用动了。使用的时候对趋势曲线的组态实际上转换为了对Excel文件的编辑,在大量趋势组态的需求时编辑表格当然是要比在wincc中编辑趋势控件方便多了。在下一个新项目中只需要修改Excel就能快速完成曲线的配置了。
P.S.无法上传附件,直接copy到EXCEL表格即可
编号 | Class | Text | Checked | 归档变量 | 坐标系 | 颜色 | 类型 |
---|---|---|---|---|---|---|---|
NO.1 | Father | 流量 | NO | ||||
NO.2 | Child | 流量计1 | YES | MFC\Flow1 | Value(-20~100) | 255 | 1 |
NO.3 | Child | 流量计2 | YES | MFC\Flow2 | Value(-20~100) | 16776960 | 1 |
NO.4 | Child | 流量计3 | YES | MFC\Flow3 | Value(-20~100) | 16711680 | 1 |
NO.5 | Child | 流量计4 | NO | MFC\Flow4 | Value(-20~100) | &H0000FF | 1 |
NO.6 | Child | 流量计5 | NO | MFC\Flow5 | Value(-20~100) | 65280 | 1 |
NO.7 | Child | 流量计6 | YES | MFC\Flow6 | Value(-20~100) | 0 | 1 |
NO.8 | Child | 流量计7 | NO | MFC\Flow7 | Value(-20~100) | 49407 | 1 |
NO.9 | Child | 流量计8 | YES | MFC\Flow8 | Value(-20~100) | 5296274 | 1 |
NO.10 | Child | 流量计9 | NO | MFC\Flow9 | Value(-500~500) | 15773696 | 1 |
NO.11 | Child | 流量计10 | NO | MFC\Flow10 | Value(-500~500) | 10498160 | 1 |
NO.12 | Father | 温度 | NO | ||||
NO.13 | Child | 温度1 | NO | Temperature\TC1 | Value(-500~500) | 255 | 1 |
NO.14 | Child | 温度2 | NO | Temperature\TC2 | Value(-500~500) | 65280 | 1 |
NO.15 | Child | 温度3 | NO | Temperature\TC3 | Value(-500~500) | 0 | 1 |
NO.16 | Child | 温度4 | NO | Temperature\TC4 | Value(-500~500) | 49407 | 1 |
NO.17 | Child | 温度5 | NO | Temperature\TC5 | Value(-500~500) | 5296274 | 1 |
NO.18 | Child | 温度6 | NO | Temperature\TC6 | Value(-500~500) | 15773696 | 1 |
NO.19 | Child | 温度7 | NO | Temperature\TC7 | Value(-500~500) | 10498160 | 1 |
NO.20 | Child | 温度8 | NO | Temperature\TC8 | Value(-500~500) | 682978 | 1 |
NO.21 | Child | 温度9 | NO | Temperature\TC9 | Value(-500~500) | &HFFFF00 | 1 |
NO.22 | Child | 温度10 | NO | Temperature\TC10 | Value(-500~500) | &HFF0000 | 1 |
NO.23 | Child | 温度11 | NO | Temperature\TC11 | Value(-500~500) | &H0000FF | 1 |
NO.24 | Child | 温度12 | NO | Temperature\TC12 | Value(-500~500) | &H00FF00 | 1 |
NO.25 | Child | 温度13 | NO | Temperature\TC13 | Value(-500~500) | &H000000 | 1 |
NO.26 | Child | 温度14 | NO | Temperature\TC14 | Value(-500~500) | &H00C0FF | 1 |
NO.27 | Child | 温度15 | NO | Temperature\TC15 | Value(-500~500) | &H50D092 | 1 |
NO.28 | Child | 温度16 | NO | Temperature\TC16 | Value(-500~500) | &HF0B000 | 1 |
NO.29 | Child | 温度17 | NO | Temperature\TC17 | Value(-500~500) | &HA03070 | 1 |
NO.30 | Child | 温度18 | NO | Temperature\TC18 | Value(-500~500) | &H0A6BE2 | 1 |
NO.31 | Child | 温度19 | NO | Temperature\TC19 | Value(-500~500) | &HFFFF00 | 1 |
NO.32 | Child | 温度20 | NO | Temperature\TC20 | Value(-500~500) | &HFF0000 | 1 |
NO.33 | Child | 温度21 | NO | Temperature\TC21 | Value(-500~500) | &H0000FF | 1 |
NO.34 | Child | 温度22 | NO | Temperature\TC22 | Value(-500~500) | &H00FF00 | 1 |
NO.35 | Child | 温度23 | NO | Temperature\TC23 | Value(-500~500) | &H000000 | 1 |
NO.36 | Child | 温度24 | NO | Temperature\TC24 | Value(-500~500) | &H00C0FF | 1 |
NO.37 | Child | 温度25 | NO | Temperature\TC25 | Value(-500~500) | &H50D092 | 1 |
NO.38 | Child | 温度26 | NO | Temperature\TC26 | Value(-500~500) | &HF0B000 | 1 |
NO.39 | Child | 温度27 | NO | Temperature\TC27 | Value(-500~500) | &HA03070 | 1 |
NO.40 | Child | 温度28 | NO | Temperature\TC28 | Value(-500~500) | &H0A6BE2 | 1 |
NO.41 | Child | 温度29 | NO | Temperature\TC29 | Value(-500~500) | &HFFFF00 | 1 |
NO.42 | Child | 温度30 | NO | Temperature\TC30 | Value(-500~500) | &HFF0000 | 1 |
NO.43 | Father | 压力 | NO | ||||
NO.44 | Child | PIA_1 | NO | Pressure\PIA_1 | Value(0~10) | 682978 | 1 |
NO.45 | Child | PIA_2 | NO | Pressure\PIA_2 | Value(0~10) | 16776960 | 1 |
NO.46 | Child | PIA_3 | NO | Pressure\PIA_3 | Value(0~10) | &HFF0000 | 1 |
NO.47 | Child | PIA_4 | NO | Pressure\PIA_4 | Value(0~10) | &H0000FF | 1 |
NO.48 | Child | PIA_5 | NO | Pressure\PIA_5 | Value(0~10) | &H00FF00 | 1 |
NO.49 | Child | PIA_6 | NO | Pressure\PIA_6 | Value(0~10) | &H000000 | 1 |
NO.50 | Child | PIA_7 | NO | Pressure\PIA_7 | Value(-500~500) | &H00C0FF | 1 |
NO.51 | Child | PIA_8 | NO | Pressure\PIA_8 | Value(-500~500) | 5296274 | 1 |
NO.52 | Child | PIA_9 | NO | Pressure\PIA_9 | Value(-500~500) | &HF0B000 | 1 |
NO.53 | Child | PIA_10 | NO | Pressure\PIA_10 | Value(-500~500) | 10498160 | 1 |
NO.54 | Child | PIA_11 | NO | Pressure\PIA_11 | Value(-500~500) | 682978 | 1 |
NO.55 | Father | 液位 | NO | ||||
NO.56 | Child | 液位1 | NO | Level\Level1 | Value(-500~500) | &H00FF00 | 1 |
NO.57 | Child | 液位2 | NO | Level\Level2 | Value(-500~500) | &H00C0FF | 1 |
NO.58 | Child | 液位3 | NO | Level\Level3 | Value(-500~500) | 5296274 | 1 |
NO.59 | Child | 液位4 | NO | Level\Level4 | Value(-500~500) | &HF0B000 | 1 |
NO.60 | Child | 液位5 | NO | Level\Level5 | Value(-20~100) | &HA03070 | 1 |
NO.61 | Child | 液位6 | NO | Level\Level6 | Value(-500~500) | &H0A6BE2 | 1 |
NO.62 | Child | 液位7 | NO | Level\Level7 | Value(-500~500) | &HFFFF00 | 1 |
NO.63 | Child | 液位8 | NO | Level\Level8 | Value(-500~500) | &HFF0000 | 1 |
NO.64 | Child | 液位9 | NO | Level\Level9 | Value(-500~500) | &H0000FF | 1 |
NO.65 | Child | 液位10 | NO | Level\Level10 | Value(-20~100) | &H00FF00 | 1 |
NO.66 | Father | 功率 | NO | ||||
NO.67 | Child | 功率1 | NO | Power\power1 | Value(-20~100) | &H0A6BE2 | 1 |
NO.68 | Child | 功率2 | NO | Power\power2 | Value(-20~100) | &HFFFF00 | 1 |
NO.69 | Child | 功率3 | NO | Power\power3 | Value(-20~100) | &HFF0000 | 1 |
NO.70 | Child | 功率4 | NO | Power\power4 | Value(-20~100) | &H0000FF | 1 |
NO.71 | Child | 功率5 | NO | Power\power5 | Value(-20~100) | &H00FF00 | 1 |
NO.72 | Child | 功率6 | NO | Power\power6 | Value(-20~100) | &H000000 | 1 |
NO.73 | Child | 功率7 | NO | Power\power7 | Value(-20~100) | &H00C0FF | 1 |
NO.74 | Child | 功率8 | NO | Power\power8 | Value(-20~100) | &H50D092 | 1 |
NO.75 | Child | 功率9 | NO | Power\power9 | Value(-20~100) | &HF0B000 | 1 |
NO.76 | Child | 功率10 | NO | Power\power10 | Value(-20~100) | &HA03070 | 1 |