搬家第二天-40.Wincc V7.3 模拟饮料灌装生产线动画效果(2)-20个瓶子初试

昨天的博客记录了一个瓶子运动动画模拟,现实中一个流水线上瓶子很多,要做出动画效果,就需要很多瓶子一起移动,同时灌装和加瓶盖的时候,瓶子们还得歇会。

效果完全依赖Wincc软件,关键就是控制对象的left、Visible、FillingIndex几个属性,同时注意一下空间之间的关系就行了。接下来描述一下如何制作这种动画。

一 准备工作

  1. Wincc变量管理新建一个32位浮点数变量Start1,新建一个1280*1024页面,名字bottles,用多边形画一个瓶子,就是这个样子:

搬家第二天-40.Wincc V7.3 模拟饮料灌装生产线动画效果(2)-20个瓶子初试

要确保这是一个封闭图形,宽30,如果是其他宽度,那么后面的脚本中,数值需要相应修改,全局颜色方案为否,支持动态填充,填充颜色选为灰色。插入一个静态文本,用于给瓶子编号,便于观察效果,静态文本的背景为透明,边框线宽度为0,插入一个绿色小方块表示瓶盖,然后把三个控件编组,像这样子:

搬家第二天-40.Wincc V7.3 模拟饮料灌装生产线动画效果(2)-20个瓶子初试

一共制作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为真,绿色,为假,红色。编辑状态画面如下:

搬家第二天-40.Wincc V7.3 模拟饮料灌装生产线动画效果(2)-20个瓶子初试

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

上一篇:郭冬临到底喝了多少水?


下一篇:vue开发反思总结