故事作者:万泉河

最近创作

看看TA的故事

【万泉河】在WINCC中如何单击按钮发出一个脉冲信号?

已锁定

万泉河

  • 帖子

    10885
  • 精华

    132
  • 被关注

    893

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

【万泉河】在WINCC中如何单击按钮发出一个脉冲信号?

15537

24

2016-02-02 21:34:44


【万泉河】在WINCC中如何单击按钮发出一个脉冲信号?


这个故事要分成三个部分来讲。


第一部分


大概2个月前, 有网友在论坛中提问, 如何做出点动一个按钮发出一个脉冲?这其实是个老掉牙的问题了,通常的解答, 或者说我们自己的处理方式有两种。


1,在按钮的按下和抬起事件中,分别编程, 按下时给目标变量置1,抬起时清0。这样操作人员的一次鼠标操作,就会产生一个脉冲送到了PLC中。

但是,由于人的操作按钮的时间非常短, 通常会在100ms左右。 熟练人员、游戏玩家,质量好的鼠标,甚至会低于50ms 。 如此短的脉冲, 在电脑的运行时间,网络通讯速度等各种条件影响下,就会经常发生命令丢失的情况。如果下位不是西门子PLC, 而是MODBUS等慢速通讯协议的设备,丢失的可能性就更大。这种指令丢失的结果,就会给操作人员造成的操作性差的印象。

由此, 我们通常在设计时尽量避免要WINCC发脉冲,而是第2种方法:


2,在需要指令操作的场合,尽量避免脉冲方式。 而是上位发出指令,下位收到指令后,由下位来复位这个指令。这样的好处是, 哪怕通讯的运行时间再长都不怕,都可以确保下位收到指令。


第二部分


说实话, 上述的两种方法, 各自都有些缺点, 都不如实实在在的给按照要求, 实现固定宽度的一个脉冲来得靠谱,比如我们能发出大约宽度5S的脉冲,时间精度可能不需要多准确,但只要宽度足够长,又可以自宗复位, 那下位PLC确实可以节省不少工作量。


所以, 那位网友的问题, 我在简单回答后的一段时间里,也进行了思考, 能不能用简单的方法在WINCC中实现呢?何为简单呢,就是不要复杂的编程, 尤其要充分集成,不能画面上做一些, 脚本中再做一些, 那样维护的成本太高,项目中如果几十处要用到,就要反复修改几十个地方,将来复用起来还很麻烦, 就没有什么意思。


最后的解决思路,是利用按钮的填充量的属性,这是一个0-100的数值,我假设代表0-10s好了:

1,在按钮时间中,给属性赋值50,代表5s

2,在填充量属性中, VBS编程如下:

Function FillingIndex_Trigger(ByVal Item)


If Item.FillingIndex>0 Then

    HMIRuntime.Tags("P").Write 1,1

    Item.FillingIndex=Item.FillingIndex-10

    If Item.FillingIndex<=0 Then

        HMIRuntime.Tags("P").Write 0

    End If

End If


End Function

同时设定属性的触发器为1s。


这样就实现了发出脉冲的功能。 过程是:在按下以后赋值5S, 然后每过1S,属性脚本会触发一次,自动将填充量减10,直到为0,程序中判断如果大于0则置位变量, 如小于0则复位变量。


如果把按钮的动态填充打开, 则可以看到这个动态倒计时的过程。但是实际应用中会让人感到莫名其妙,所以还是不要打开动态填充吧。


项目中如果此类按钮多次用到, 那么只需复制按钮, 然后用替换变量链接的方法, 替换到新的要控制的变量,即可实现一个新的拷贝。 应用起来还是蛮简单吧?


第三部分


上述的实现方法, 其实还是存在一些弊端,或者不足之处:


1,删除的N字。


2,我设置的是5S,但实际运行中, PLC的脉冲有效时间总是4S,有人分析出原因在哪儿了吗?


3,这种把变量嵌入在脚本中的方式还是不太利于使用。如果能像WINCC库中的toggle button一样, 变量绑定到toggle属性,程序脚本中读取获取toggle绑定的变量来进行逻辑操作, 那么脚本就可以更集成化, 不再需要修改。

这样滴:

所以, 我决定跟看懂了的朋友们一起来玩个游戏:举办一次有奖的竞答活动,看谁能按照我的思路, 或者提供更好的思路,最好能修复我所提出的弊端, 做出一个自定义的库对象来,方便以后使用。


规则和流程如下:

1,使用WINCC 6.2 来做,控制的变量和我做的一样,叫做"P",方便我测试比较。

2,每位参赛选手加我微信178616417或加QQ群49122812,向我发10元报名费, 同时把你的投稿结果的PDL文件发给我。 


3,我会在一个月后收集整理所有参赛者设计结果,选择其中的1位获胜者, 并把所有参赛者的奖金发给获胜者本人。我自己分文不取。

4,未获胜者的安慰奖便是获胜者的获奖作品。 所以参赛者参赛的同时,即意味着你放弃作品的版权。


春节期间学习充电一下,会是个相当愉快的经历!


祝大家春节快乐!


万泉河


(加我微信或QQ群的时候注明“我是西门子网站的XXX”,不参赛也可以添加,但不要当作答疑热线)


我把我前面做的按钮的画面作为附件传上来, 请大家参考。

单击脉冲指令5s.rar


 


【万泉河】在WINCC中如何单击按钮发出一个脉冲信号? 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

网友专栏

共有3227条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。