精智屏基于脚本实现延时动作

  前几天发了一篇文章介绍西门子的精智屏如何实现秒级的计划任务后看到群里有人提出如何实现延时动作,比如按钮被长按几秒后再动作,这样可以避免生产环境中的一些误操作。

图1

  下面我们介绍一种基于脚本的延时动作方法。该例子演示按钮被按下三秒后设置一个矩形框背景色为绿色。先在根画面上添加一个矩形框和一个按钮。其中矩形框命名为“REC”,参见下图所示。

图2

  再添加一个脚本,命名为“vbsDelay”。输入VBS代码如下:

Dim REC
Set REC=HmiRuntime.Screens("根画面").ScreenItems("REC")
REC.BackColor=RGB(0,255,0)

  我们把该脚本放到按钮的鼠标按下事件中,那么当按钮被压下时,矩形框立即会变成绿色。如果希望按钮被压下后延时3秒再将矩形框设置为绿色还需要对脚本进行一些改造。首先我们把变量“Clock_Byte”的采集周期改为500ms。

图3

  再添加一个名为“DelayCount”的整型变量和一个名为“DelayFlag”的布尔型变量。

图4

  按钮压下时置位变量“DelayFlag”,释放时复位变量“DelayFlag”。

图5

  将脚本vbsDelay改造成如下所示。

If SmartTags("DelayFlag") = True Then
        SmartTags("DelayCount")=SmartTags("DelayCount") + 1
    Else
        SmartTags("DelayCount") = 0
End If
   
If SmartTags("DelayCount") >= 6 Then
    Dim REC
    Set REC=HmiRuntime.Screens("根画面").ScreenItems("REC")
    REC.BackColor=RGB(0,255,0)
End If

  布尔型变量“DelayFlag”为True(按钮被压下)时开始计数,计数结果由变量“DelayCount”保存。当计数的值大于等于6时(因为该脚本的执行周期为500ms,那么3秒就是执行6次。注意:这种计数方法的延时不是非常精确,但是够用了),触发矩形框的背景色为绿色。

  除了上述介绍的延时方法外,还可以使用do、while等循环语句实现延时。不过这种方法个人不推荐。因为它们在执行时会导致其它脚本堵塞。

posted @ 2022-09-07 11:31  HwLib(慧兰博)  阅读(529)  评论(0编辑  收藏  举报