昨天的博客记录了一个瓶子运动动画模拟,现实中一个流水线上瓶子很多,要做出动画效果,就需要很多瓶子一起移动,同时灌装和加瓶盖的时候,瓶子们还得歇会。
效果完全依赖Wincc软件,关键就是控制对象的left、Visible、FillingIndex几个属性,同时注意一下空间之间的关系就行了。接下来描述一下如何制作这种动画。
一 准备工作
1. Wincc变量管理新建一个32位浮点数变量Start1,新建一个1280*1024页面,名字bottles,用多边形画一个瓶子,就是这个样子:
要确保这是一个封闭图形,宽30,如果是其他宽度,那么后面的脚本中,数值需要相应修改,全局颜色方案为否,支持动态填充,填充颜色选为灰色。插入一个静态文本,用于给瓶子编号,便于观察效果,静态文本的背景为透明,边框线宽度为0,插入一个绿色小方块表示瓶盖,然后把三个控件编组,像这样子:
一共制作20个这样的瓶子,他们的名字分别是bottle1至bottle20,相应的“瓶盖”名字分别是cover1至cover20,20个瓶子从右到左均匀排列,最左边的瓶子left=60,最右边瓶子left=820。初始状态bottle1至bottle9盖子可见,其他瓶子盖子不可见,bottle1至bottle19填充90,bottle20不填充。画一个机械手;画一条传送带,一个原料罐,一根罐装管;画一个长方形模拟流出的液体,名字修改为fillin,宽70,高120,默认不可见,left=112,top=590;画一个启动按钮,一个停止按钮;画一个圆用于显示工作状态,圆全局颜色方案为否,填充量100,背景颜色根据内部变量Start1数值改变,当Start=1为真,绿色,为假,红色。编辑状态画面如下:
2. 项目计算机属性启动项目勾选全局脚本功能
二 新建一个VBS全局动作,触发器为循环类型,周期1秒,脚本如下:
Option Explicit
Function action
'以下脚本模拟多个瓶子灌装
Dim bottle(21),cover(21)
Dim fillin,i,j
Dim Start1
Dim fill_no
Dim full(21)
For i=1 To 20
Set bottle(i)=HMIRuntime.Screens("bottles").ScreenItems("bottle" & CStr(i))
Next
For i=1 To 20
Set cover(i)=HMIRuntime.Screens("bottles").ScreenItems("cover" & CStr(i))
Next
Set Start1=HMIRuntime.Tags("Start1")
Set fillin=HMIRuntime.Screens("bottles").ScreenItems("fillin")
If Start1.Read =1 Then
For j=1 To 20
If bottle(j).left=100 Then '如果到了灌装位,则记录瓶号
fill_no=j
fillin.Visible =True
bottle(fill_no).FillingIndex=bottle(fill_no).FillingIndex+10
If bottle(fill_no).FillingIndex=80 Then
fillin.Visible=False
fill_no=0
End If
End If
If bottle(j).left=820 And (fillin.Visible=False) Then '如果到了终止位,则从头再来
bottle(j).left=20
bottle(j).FillingIndex=0
cover(j).Visible=False
End If
Next
For i=1 To 20
If fillin.Visible=False Then
bottle(i).left=bottle(i).left+5
End If
Next
For i=1 To 20
If bottle(i).Left=460 Then
cover(i).Visible=True
End If
If bottle(i).left=20 Then '
cover(i).Visible=False
End If
Next
If Start1.Read =0 Then
fillin.Visible =False
End If
End If
End Function