电工学习网

 找回密码
 立即注册
查看: 4453|回复: 0
打印 上一主题 下一主题

PLC+WinCC报警消息中过程值延迟问题

[复制链接]
跳转到指定楼层
楼主
发表于 2019-8-21 12:20:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
      最近在热线上遇到一个Case。
         客户用300plc+WInCC(7.4.1.0)来检测现场的液位变化,当检测到液位超过一定值过后,在程序中将PLC中一个Bool量置位,再用这个Bool量来触发一条WinCC报警消息,用于提示液位超限。在这条报警消息中,客户使用了一个过程值块用于显示报警当时的实时液位数值,但是,客户发现,在每次报警消息到来的时候,当前消息里的过程值变量,永远都是显示的上一个周期的液位值。
         对于客户的这个需求,一般会直接建议客户在WinCC中做模拟量报警,能够比较直观的显示限位值和当前值。如图1所示,例如用MW100来表示液位,液位的上限值为50,这样就组态好一条简单的模拟量报警,在模拟量报警消息中的消息文本中,已自动生成要显示的限位和当前值内容,如图2所示。值得说明的是,对于模拟量报警,编号1-3的过程值块是系统占用的,而其余的过程值块并不能使用(详见帮助-建立消息系统-限制值监控的消息)。
PLC+WinCC报警消息中过程值延迟问题
图1 组态模拟量报警
PLC+WinCC报警消息中过程值延迟问题
图2 模拟量报警消息文本
        虽然问题很容易解决,但是出现上述问题的原因却是值得深思的。试想客户若不是做这样的功能,而是对于该变量有很高的实时性要求,那这样的现象是肯定不允许发生的,鉴于这一点,我复现了客户的问题,尝试去了解一下深层次的原因。
         在Step7(V5.6)和Portal(V15)中分别为300和1500编写了一样的程序,用于对比两款PLC表现是否一致。其中MW90代表液位,MW100代表比较值,M80.0用于触发报警消息,300的程序如图3所示(经测试1500的表现和300一致,这里不再赘述)。
PLC+WinCC报警消息中过程值延迟问题
图3 300PLC液位比较程序
        采用Step7的仿真器仿真程序,测试后发现情况如客户所言,程序里涉及到的三个变量,在报警控件里显示的都是上一个周期的值,如图4所示。
PLC+WinCC报警消息中过程值延迟问题
图4 通过程序触发过程值显示的值
        尝试避开程序,在WinCC中通过IO域直接给MW90和MW100赋值,并手动将M80.0置位,以此触发报警,同时记录MW90和MW100的值,发现记录正常,没有延迟(图5),但是, M80.0依然是上一个周期的值。
PLC+WinCC报警消息中过程值延迟问题
图5 避开程序触发过程值显示的值
        在报警消息历史记录中可见,当消息离开时,显示的都是实时值,如图6。
PLC+WinCC报警消息中过程值延迟问题
图6 报警离开时过程值显示的值
        综上,考虑是变量扫描周期的问题,查询手册得知:WinCC写入变量到PLC中,不需要参与循环周期,除开通讯时间和PLC执行周期(ms级),几乎是实时的;但是,报警消息里面的变量(包括触发变量、确认变量、状态变量以及过程值),它们默认有1s的扫描周期。
         在第一次测试中,消息已经触发,但过程值变量都没有及时刷新;
         在第二次测试中,由于MW90和MW100在消息触发时已经有值,所以消息到来时及时刷新了;而消息触发时,过程值变量M80.0(也是触发变量)没有刷新,这也就说明了,即使WinCC已经知道M80.0置位了(因为消息已经触发),但它并不知道,同时作为过程值的M80.0的当前值。
         按理说,触发变量和过程值的默认扫描周期都是1s,应该在消息触发时,同时更新过程值才对,但是事实并非如此。那么,可以推测,报警触发时,过程值还没有到,也就是说触发变量和过程值虽然都是1s的扫描周期,但其实每次触发变量都会比过程值变量先到一点点,即触发变量的轮询周期要快于或等于过程值的轮询周期。
        去注册表内修改这两个变量的轮询周期,注册表的路径如下:
        HKEY_LOCAL_MACHINESOFTWAREWow6432NodeSIEMENSWINCCAlarm LoggingConstants

        在这里添加触发变量和过程值变量的轮询周期值:
        "CycleAlarms"= "00000000" // 触发变量
        "CyclePValues"= "00000000" // 过程值变量

        并将触发变量的值改为大于过程值变量的值,例如(图7):
        "CycleAlarms"= "00000003" // 触发变量,1s
        "CyclePValues"= "00000002" // 过程值变量,500ms
PLC+WinCC报警消息中过程值延迟问题
图7 在注册表中修改轮询时间
        修改后再次测试,显示正常,如图8。
         通道诊断里的扫描周期显示如图9,可以看到,因为有三个过程值(M80.0, MW90, MW100),所以500ms的扫描周期注册了三个变量,而触发变量只有一个,所以1s的扫描周期注册了一个。
PLC+WinCC报警消息中过程值延迟问题
图8 修改注册表后过程值显示正常
PLC+WinCC报警消息中过程值延迟问题
图9 WinCC注册的扫描周期
        测试到这里先告一段落,但是依然还是有个问题没有解决,那就是默认都是1s扫描周期的触发变量和过程值,为什么到报警消息中的时间会有一个差值,从而导致过程值的刷新永远慢一个周期,还是说有其他什么因素影响?这是需要进一步探讨的问题。
来源:西门子工业技术论坛

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

电工学习网 ( )

GMT+8, 2024-4-24 13:26

Powered by © 2011-2022 www.diangon.com 版权所有 免责声明 不良信息举报

技术驱动未来! 电工学习网—专业电工基础知识电工技术学习网站。

栏目导航: 工控家园 | 三菱plc | 西门子plc | 欧姆龙plc | plc视频教程

快速回复 返回顶部 返回列表