之前发了分享贴“分享这些年做的上位机画面”,有朋友询问趋势页面的实现方式
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页面文件,其实也可以上传;
但我觉得把基本的思路写出来,方便理解;按照此文档,还可以变换出更加美观,合乎自己需求的页面