技术论坛

 wincc趋势控件优化

返回主题列表
作者 主题
泽诗冯冯
侠客

经验值:725
发帖数:23
精华帖:2
楼主    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页面文件,其实也可以上传;

但我觉得把基本的思路写出来,方便理解;按照此文档,还可以变换出更加美观,合乎自己需求的页面


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