技术论坛

 回复:如何实现在WINCC上让多个模拟量循环显示

返回主题列表
作者 主题
城外月光
游民

经验值:65
发帖数:13
精华帖:0
楼主    2013-08-28 21:09:09
主题:如何实现在WINCC上让多个模拟量循环显示
诚心请教论坛高手,我想在WINCC界面里实现10个模拟量轮流显示,同时在该模拟量显示时与之相关的该模拟量编码一起显示,也就是1号模拟量=**,2号模拟量=**,3号模拟量**,等等轮流在一个位置显示,可以一秒或更短时间变换一次,也可以一个循环周期后休息几十秒,如何用VBS或C实现
zhangli0
版主

经验值:48087
发帖数:17127
精华帖:63
5楼    2013-08-29 11:18:51
精华帖  主题:回复:如何实现在WINCC上让多个模拟量循环显示
上面的结果可能存在更新周期有误差造成显示有点区别我用文本有改了一个:
文本的字体用vbs脚本做:
Function Text_Trigger(ByVal Item)
Dim tag(10)
Dim group1

Set group1=HMIRuntime.Tags.CreateTagSet
group1.add"data"'整数判断应该显示哪个数值
group1.add"data_1"
group1.add"data_2"
group1.add"data_3"
group1.add"data_4"
group1.add"data_5"
group1.add"data_6"
group1.add"data_7"
group1.add"data_8"
group1.add"data_9"
group1.add"data_10"
group1.read
tag(0)=group1("data").value
tag(1)=group1("data_1").value
tag(2)=group1("data_2").value
tag(3)=group1("data_3").value
tag(4)=group1("data_4").value
tag(5)=group1("data_5").value
tag(6)=group1("data_6").value
tag(7)=group1("data_7").value
tag(8)=group1("data_8").value
tag(9)=group1("data_9").value
tag(10)=group1("data_10").value
Select Case tag(0)
Case 1 Text_Trigger="1号模拟量="&tag(1)
Case 2 Text_Trigger="2号模拟量="&tag(2)
Case 3 Text_Trigger="3号模拟量="&tag(3)
Case 4 Text_Trigger="4号模拟量="&tag(4)
Case 5 Text_Trigger="5号模拟量="&tag(5)
Case 6 Text_Trigger="6号模拟量="&tag(6)
Case 7 Text_Trigger="7号模拟量="&tag(7)
Case 8 Text_Trigger="8号模拟量="&tag(8)
Case 9 Text_Trigger="9号模拟量="&tag(9)
Case 10 Text_Trigger="10号模拟量="&tag(10)
End select
End Function
效果图


活到老,学到老!为了生活学习吧!
万泉河
至圣

经验值:29190
发帖数:10900
精华帖:131
7楼    2013-08-29 15:10:33
精华帖  主题:回复:如何实现在WINCC上让多个模拟量循环显示
跟zhangli0纠结半天,俩人的意图互相不理解。
所以我自己做了一个。
按照我说的,画面加一个静态文本,然后在文本属性中增加脚本就可以了:

Function Text_Trigger(Byval Item)

'
'Dim TagName(10)
'TagName(1)=HMIRuntime.Tags("A_1").Name
'TagName(2)=HMIRuntime.Tags("A_2").Name
'TagName(3)=HMIRuntime.Tags("A_3").Name
'TagName(4)=HMIRuntime.Tags("A_4").Name
'TagName(5)=HMIRuntime.Tags("A_5").Name
'TagName(6)=HMIRuntime.Tags("A_6").Name
'TagName(7)=HMIRuntime.Tags("A_7").Name
'TagName(8)=HMIRuntime.Tags("A_8").Name
'TagName(9)=HMIRuntime.Tags("A_9").Name
'TagName(10)=HMIRuntime.Tags("A_10").Name


'变量列表
Dim list
list="0,A_1,A_2,A_3,A_4,A_5,A_6,A_7,A_8,A_9,A_10"

Dim TagName

TagName=Split(list,",")


Dim S
'由当前的秒值得到循环数1-10
S=(Second(Now)/3 Mod UBound(TagName)) +1



Dim text
text=TagName(S) & " : " & HMIRuntime.Tags(TagName(S)).Read
text=text& "--" & Second(Now)

Text_Trigger=text


End Function

然后运行的结果如图:





下部的10个IO域仅仅用于显示和修改变量的值。

有人能看懂前面注释那段脚本的用意么?

我把这段话题也整理为文章,发表在 QQ空间日志,地址:
http://user.qzone.qq.com/178616417/blog/1377761442

里面我的问题有答案。
微信公众号:PLC标准化编程,ZHO6371995
迷失中原
侠圣

经验值:2814
发帖数:466
精华帖:5
13楼    2013-08-30 15:47:05
精华帖  主题:回复:如何实现在WINCC上让多个模拟量循环显示
建议还是用结构变量吧,这样的效率是最高的!假设显示的变量分别为tag1、tag2、tag3……tag100。下面程序可1S执行一次,没有测试,但是应该不成问题的!下面的程序是显示100个变量的数值。

Char st_text[64];
static Int id;
if(id>100)
id=0;
esle
id=id+1;
sprintf(st_text,"tag%d",id);
return GetTagFloat(st_text);
生命不息,奋斗不止!
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。