| 作者 | 主题 |
|---|---|
|
Ken(小释) 侠士 经验值:1878 发帖数:285 精华帖:19 |
楼主
主题:写一个2S延时的脉冲输出脚本,给那些在找如何做延时的朋友。(VBS示例!)【更新版】
VBS鼠标动作触发事件CODE如下:
修改后代码 Dim mytime,bs Set bs=HMIRuntime.Tags("BoolShow") 'BoolShow是一个为测试建立的内部bool型变量 bs.Write(1) '置1(高电平,波形上升) mytime = Timer+2 '预设置1时间为2秒(高电平保持时间) If mytime<86400 Then Do Until Timer>mytime '直到2s后再执行复位0 '空循环时间2s Loop bs.Write(0) '执行复位0(低电平,波形下降) Else Do Until (Timer>(mytime - 86400) And Timer<5) Loop bs.Write(0) 原始代码 Dim mytime,bs Set bs=HMIRuntime.Tags("BoolShow") 'BoolShow是一个为测试建立的内部bool型变量 bs.Write(1) '置1(高电平,波形上升) mytime = Timer+2 '预设置1时间为2秒(高电平保持时间) Do Until Timer=mytime '直到2s后再执行复位0 '空循环时间2s Loop bs.Write(0) '执行复位0(低电平,波形下降) 写一个2S延时的脉冲输出脚本,给那些在找如何做延时的朋友。(VBS示例!) 希望大家多做交流! [color=red] 我所写的原始代码有一个bug:在23:59:58-0:0:0这两秒之间会失效,新的代码我已经修改了,通过测试。为了让大家清楚发现这个bug,在本贴中保留了原始代码。感谢youhm发现这个bug。 因为当时在写这个代码的时候是为了帮助一个论坛朋友完成这个脚本实现延时脉冲功能,所以实现了这个功能后,并没有对其多加考虑。其实还有一个需要特别说明的是:这个脚本,如果触发一次后,会脉冲置位2s,但是如果你连续点击2次(极短的时间内)会出现,出现0变成1后保持2秒变成0,马上(极其短,短到wincc的采样几乎采集不到的时间片刻)又变成1保持2秒再变成0。所以你会看上去点两次就表现出1状态保持了4秒[/color] 为什么呢?因为事件触发以后会在一个队列里,你触发了两次那么就会执行两次。
Ken(小释)…西门子自动化技术群16182848
|