技术论坛

 wincc趋势控件优化

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

经验值: 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
城外之人
至圣

经验值: 17285
发帖数: 8465
精华帖: 18
1楼    2020-08-28 20:04:59
主题:回复:wincc趋势控件优化

谢谢分享。

其实在线趋势控件是最难的。牵涉到控件的多个属性、方法。

有的可以组态时就设置好;有的需要运行时再确定趋势所对应的归档变量。

趋势控件玩熟悉了,WinCC基本上就掌握了。

无论成与败,无论甜与苦,我还是我。
黑猫警长W
至圣

经验值: 18391
发帖数: 2409
精华帖: 1
2楼    2020-08-29 13:38:10
主题:回复:wincc趋势控件优化

这个实施,收藏了

RENHQ
至圣

经验值: 68954
发帖数: 12234
精华帖: 59
3楼    2020-08-29 22:19:53
主题:回复:wincc趋势控件优化

这个脚本是根据实际的组态,把所有的趋势直接列出来了,不是从组态里面读取的吧?

没有详细的看趋势,大体看了一下,不知道是不是这个意思

Q群:https://jq.qq.com/?k=9BDuEgf6
荣海
侠士

经验值: 1176
发帖数: 384
精华帖: 0
4楼    2020-08-30 02:40:00
主题:回复:wincc趋势控件优化

这个很实用,值得学习。我们同事们还在用多个趋势画面+简单的按钮切换来实现这样的功能。

物竞天择,适者生存!
天芯
至圣

经验值: 18851
发帖数: 2106
精华帖: 0
5楼    2020-08-30 10:28:18
主题:回复:wincc趋势控件优化

源代码直接贴出来了

yuanzhao
游侠

经验值: 341
发帖数: 2
精华帖: 0
6楼    2020-09-02 15:53:34
主题:回复:wincc趋势控件优化



大开眼界啊!!!

真正的自由,不是你想做什么就做什么,而是你不想做什么就可以不做什么......
我新新新来的
游侠

经验值: 369
发帖数: 22
精华帖: 0
7楼    2020-09-03 20:11:40
主题:回复:wincc趋势控件优化

学习了!感谢楼主分享

努力向前奔跑!
RENHQ
至圣

经验值: 68954
发帖数: 12234
精华帖: 59
8楼    2020-09-03 22:49:18
主题:回复:wincc趋势控件优化

没看到你里面有从组态里面读取的脚本的啊,感觉是直接从脚本里面把组态的内容赋值好了

Q群:https://jq.qq.com/?k=9BDuEgf6
睡醒了
游士

经验值: 225
发帖数: 2
精华帖: 0
11楼    2020-09-14 17:24:20
主题:回复:wincc趋势控件优化

pdl文件可以分享吗

渔明鱼工
至圣

经验值: 23901
发帖数: 2059
精华帖: 78
19楼    2020-09-21 11:42:49
主题:回复:wincc趋势控件优化

有两把刷子,以后在wincc上向你请教。

网鱼能够改善伙食,还能释放工作中的压力。
泽诗冯冯
侠客

经验值: 918
发帖数: 25
精华帖: 3
23楼    2020-09-27 16:53:30
主题:回复:wincc趋势控件优化

页面文件和趋势选择vbs脚本

趋势选择脚本 VBS.txt

Trend PDL 文件.rar


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