如何实现在WinCC上让多个模拟量循环显示

分享到:
465
下一篇 >

如果想在WINCC界面里实现10个模拟量轮流显示,同时在该模拟量显示时与之相关的该模拟量编码一起显示,也就是1号模拟量=**,2号模拟量=**,3号模拟量**,等等轮流在一个位置显示,可以一秒或更短时间变换一次,也可以一个循环周期后休息几十秒,如何用VBS或C实现呢?

上面的结果可能存在更新周期有误差,造成显示有点区别,我用文本有改了一个:

文本的字体用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

效果图




按照我说的,画面加一个静态文本,然后在文本属性中增加脚本就可以了:


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域仅仅用于显示和修改变量的值。

因为画面的运行周期是2S,所以如果设置2S跳数的话,就会有漏数的情况,所以程序中还是设置为3S。


另:程序中前段被注释掉的部分是为了便于移植儿预留的,如果需要移植到多个显示,那么变量名字需要修改时,只需要复制以后,通过变量替换功能即可快速实现,而不需要打开脚本进行修改。

也有人建议还是用结构变量,这样的效率是*高的!假设显示的变量分别为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);


你可能感兴趣: 图片 自动化软件 工控菜鸟园
无觅相关文章插件,快速提升流量