作者 | 主题 |
---|---|
泽诗冯冯 侠客 经验值:918 发帖数:25 精华帖:3 |
楼主 2020-08-28 13:53:06
主题:wincc趋势控件优化 之前发了分享贴“分享这些年做的上位机画面”,有朋友询问趋势页面的实现方式 http://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1634556&b_id=5&s_id=17&num=41#anch 下面是详细的实现方式,主要是针对趋势组的快速选择,常规操作 趋势控件的设置: 趋势控件名称:TrendControl 添加趋势:Trend1-Trend10(可达32条) 时间轴:TimeAxis1 数值轴:ValueAxis1(可以设置多个) 右上角趋势组的选择用的是列表框:Listbox 选定框-更改vbs脚本: 仅列举选择1和2的脚本 其中变量"ni"为中间变量,定义当前组趋势的个数
Dim objtc,Listbox Dim tr1,tr2,tr3,tr4,tr5,tr6,tr7,tr8,tr9,tr10,tr11,tr12 Dim ValueAxis,ValueAxis2 Dim Value1 Set objtc = ScreenItems("TrendControl") Set Listbox = ScreenItems("Listbox") Value1=ListBox.SelIndex 'Msgbox Value1 Set tr1 = objtc.GetTrend("Trend1") Set tr2 = objtc.GetTrend("Trend2") Set tr3 = objtc.GetTrend("Trend3") Set tr4 = objtc.GetTrend("Trend4") Set tr5 = objtc.GetTrend("Trend5") Set tr6 = objtc.GetTrend("Trend6") Set tr7 = objtc.GetTrend("Trend7") Set tr8 = objtc.GetTrend("Trend8") Set tr9 = objtc.GetTrend("Trend9") Set tr10 = objtc.GetTrend("Trend10") Set ValueAxis = objtc.GetValueAxis("ValueAxis1") Set ValueAxis2 = objtc.GetValueAxis("ValueAxis2") '数值轴默认都ValueAxis,ValueAxis2默认隐藏 ValueAxis2.Visible = 0 tr1.YAxis = ValueAxis If Value1=1 Then HMIRuntime.Tags("ni").Write 10 ValueAxis.BeginValue ="0" ValueAxis.EndValue ="0.6" tr1.TagName ="ProcessValueArchiveDDR12" tr2.TagName ="ProcessValueArchiveDDR17" tr3.TagName ="ProcessValueArchiveDDR14" tr4.TagName ="ProcessValueArchiveDDR16" tr5.TagName ="ProcessValueArchiveDDR15" tr6.TagName ="ProcessValueArchiveP_TEL8_data3" tr7.TagName ="ProcessValueArchiveP_TEL9_data3" tr8.TagName ="ProcessValueArchiveP_TEL10_data3" tr9.TagName ="ProcessValueArchiveP4_AnalogNO11" tr10.TagName ="ProcessValueArchiveP4_AnalogNO12" '添加每个趋势的标签注释,页面的Ruler控件,也添加“标签列”,方便查看注释 tr1.Label ="万丽" tr2.Label ="消防局" tr3.Label ="青田" tr4.Label ="蜈支洲" tr5.Label ="污水厂" tr6.Label ="*****压力" tr7.Label ="滨海路压力" tr8.Label ="土福湾压力" tr9.Label ="出水压力1" tr10.Label ="出水压力2" Elseif Value1=2 Then HMIRuntime.Tags("ni").Write 4 ValueAxis.BeginValue ="0" ValueAxis.EndValue ="5000" '该组有2个数值轴,默认都ValueAxis,tr1的数值轴设置为ValueAxis2 ValueAxis2.Visible = 1 ValueAxis2.BeginValue ="0" ValueAxis2.EndValue ="100" tr1.YAxis = ValueAxis2 tr1.TagName ="ProcessValueArchiveP1_AnalogNO25" tr2.TagName ="ProcessValueArchiveP1_AnalogNO1" tr3.TagName ="ProcessValueArchiveP4_AnalogNO13" tr4.TagName ="ProcessValueArchiveP4_AnalogNO14" tr5.TagName =" " tr6.TagName =" " tr7.TagName =" " tr8.TagName =" " tr9.TagName =" " tr10.TagName =" " tr1.Label ="原水流量1" tr2.Label ="原水流量2" tr3.Label ="出水流量1" tr4.Label ="出水流量2" tr5.Label =" " tr6.Label =" " tr7.Label =" " tr8.Label =" " tr9.Label =" " tr10.Label =" " End IF 列表框鼠标释放添加c脚本,用于定义当前组趋势的个数 其中变量"ni"为中间变量,,无符号的 32 位,定义当前组趋势的个数 “ctrlcheckbox”为页面的趋势选择复选框的名称 double pows; int i; i = GetTagWord("ni"); pows=pow(2,i)-1; SetPropDouble(lpszPictureName,"ctrlcheckbox","Process",pows); 趋势选择复选框-选择框更改c脚本: 其中变量"pows"为中间变量,无符号的 32 位 其中变量"result"为中间变量,无符号的 32 位 复选框的作用:根据复选框的勾选状态,对应趋势控件的趋势是显示还是隐藏 对应关系是二进制的匹配 double process,pows; DWORD process1,pows1,result; int i; for (i=0;i<=9;i++) { pows=pow(2,i); process=GetPropDouble(lpszPictureName,"ctrlcheckbox","Process"); process1=(DWORD)process; pows1=(DWORD)pows; SetTagDWord("pows",pows1); result=process1&GetTagDWord("pows"); SetTagDWord("result",result); SetPropDouble(lpszPictureName,"TrendControl","TrendIndex",i); if (GetTagDWord("result")!=0) SetPropBOOL(lpszPictureName,"TrendControl","TrendVisible",TRUE); else SetPropBOOL(lpszPictureName,"TrendControl","TrendVisible",FALSE); } 趋势选择旁边的“全选”和“清空”其实就是一个快速选择,c脚本分别为: SetPropDouble(lpszPictureName,"ctrlcheckbox","Process",32767); SetPropDouble(lpszPictureName,"ctrlcheckbox","Process",0); 下面说说时间快速的选择:vbs Dim objtc Dim TimeAxis Set objtc = ScreenItems("TrendControl") Set TimeAxis = objtc.GetTimeAxis("TimeAxis1") '过去1天就是Now - 1 '过去12小时就是Now - 0.5 '过去8小时就是Now - 0.333 TimeAxis.BeginTime =Now - 1 TimeAxis.EndTime =Now '改变时间以后,要激活控件自动刷新 Dim pause Set pause=objtc.GetToolbarButton("StartStopUpdate") If pause.locked Then objtc.StartStopUpdate End If 总结: 主要3个部分,都是wincc自带的功能 趋势控件:TrendControl 列表框:Listbox 复选框:ctrlCheckbox 3个中间变量:无符号的 32 位 ni pows result 其余就是按照截图配置基本信息,添加脚本,如果需要pdl页面文件,其实也可以上传; 但我觉得把基本的思路写出来,方便理解;按照此文档,还可以变换出更加美观,合乎自己需求的页面
zsff
|