签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
之前发了分享贴“分享这些年做的上位机画面”,有朋友询问趋势页面的实现方式
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.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;
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 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页面文件,其实也可以上传;
但我觉得把基本的思路写出来,方便理解;按照此文档,还可以变换出更加美观,合乎自己需求的页面
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1639658&b_id=5&s_id=17&num=9
谢谢分享。
其实在线趋势控件是最难的。牵涉到控件的多个属性、方法。
有的可以组态时就设置好;有的需要运行时再确定趋势所对应的归档变量。
趋势控件玩熟悉了,WinCC基本上就掌握了。
这个实施,收藏了
这个脚本是根据实际的组态,把所有的趋势直接列出来了,不是从组态里面读取的吧?
没有详细的看趋势,大体看了一下,不知道是不是这个意思
这个很实用,值得学习。我们同事们还在用多个趋势画面+简单的按钮切换来实现这样的功能。
源代码直接贴出来了
大开眼界啊!!!
学习了!感谢楼主分享
没看到你里面有从组态里面读取的脚本的啊,感觉是直接从脚本里面把组态的内容赋值好了
厉害!学习了!!
这个不是金沙小鱼的吗,还行吧顶了
pdl文件可以分享吗
你好,请问一下,我试了一下,数值轴的赋值功能没有实现,是哪里的问题?
大开眼界啊!!!谢谢楼主无私分享
求楼主 分享下PDL,按着你的搞出来 不太对 谢谢 534954442@qq.com
感谢楼主分享!
感谢楼主分享。
非常好的资料,已经困扰我很久了,终于在这里发现,感谢大神。
有两把刷子,以后在wincc上向你请教。
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录