技术论坛

 【周三技术工坊】PLC+WinCC报警消息中过程值延迟问题

返回主题列表
作者 主题

总坛主
西门子官方工程师西门子官方工程师

经验值:15305
发帖数:1534
精华帖:115
楼主    2019-08-19 16:28:44
主题:【周三技术工坊】PLC+WinCC报警消息中过程值延迟问题 精华帖 

        最近在热线上遇到一个Case。

         客户用300PLC+WInCC(7.4.1.0)来检测现场的液位变化,当检测到液位超过一定值过后,在程序中将PLC中一个Bool量置位,再用这个Bool量来触发一条WinCC报警消息,用于提示液位超限。在这条报警消息中,客户使用了一个过程值块用于显示报警当时的实时液位数值,但是,客户发现,在每次报警消息到来的时候,当前消息里的过程值变量,永远都是显示的上一个周期的液位值。

         对于客户的这个需求,一般会直接建议客户在WinCC中做模拟量报警,能够比较直观的显示限位值和当前值。如图1所示,例如用MW100来表示液位,液位的上限值为50,这样就组态好一条简单的模拟量报警,在模拟量报警消息中的消息文本中,已自动生成要显示的限位和当前值内容,如图2所示。值得说明的是,对于模拟量报警,编号1-3的过程值块是系统占用的,而其余的过程值块并不能使用(详见帮助-建立消息系统-限制值监控的消息)。

图1 组态模拟量报警

图2 模拟量报警消息文本

        虽然问题很容易解决,但是出现上述问题的原因却是值得深思的。试想客户若不是做这样的功能,而是对于该变量有很高的实时性要求,那这样的现象是肯定不允许发生的,鉴于这一点,我复现了客户的问题,尝试去了解一下深层次的原因。

         在Step7(V5.6)和Portal(V15)中分别为300和1500编写了一样的程序,用于对比两款PLC表现是否一致。其中MW90代表液位,MW100代表比较值,M80.0用于触发报警消息,300的程序如图3所示(经测试1500的表现和300一致,这里不再赘述)。

图3 300PLC液位比较程序

        采用Step7的仿真器仿真程序,测试后发现情况如客户所言,程序里涉及到的三个变量,在报警控件里显示的都是上一个周期的值,如图4所示。

图4 通过程序触发过程值显示的值

        尝试避开程序,在WinCC中通过IO域直接给MW90和MW100赋值,并手动将M80.0置位,以此触发报警,同时记录MW90和MW100的值,发现记录正常,没有延迟(图5),但是, M80.0依然是上一个周期的值。

图5 避开程序触发过程值显示的值

        在报警消息历史记录中可见,当消息离开时,显示的都是实时值,如图6。

图6 报警离开时过程值显示的值

        综上,考虑是变量扫描周期的问题,查询手册得知:WinCC写入变量到PLC中,不需要参与循环周期,除开通讯时间和PLC执行周期(ms级),几乎是实时的;但是,报警消息里面的变量(包括触发变量、确认变量、状态变量以及过程值),它们默认有1s的扫描周期。

         在第一次测试中,消息已经触发,但过程值变量都没有及时刷新;

         在第二次测试中,由于MW90和MW100在消息触发时已经有值,所以消息到来时及时刷新了;而消息触发时,过程值变量M80.0(也是触发变量)没有刷新,这也就说明了,即使WinCC已经知道M80.0置位了(因为消息已经触发),但它并不知道,同时作为过程值的M80.0的当前值。

         按理说,触发变量和过程值的默认扫描周期都是1s,应该在消息触发时,同时更新过程值才对,但是事实并非如此。那么,可以推测,报警触发时,过程值还没有到,也就是说触发变量和过程值虽然都是1s的扫描周期,但其实每次触发变量都会比过程值变量先到一点点,即触发变量的轮询周期要快于或等于过程值的轮询周期。

        去注册表内修改这两个变量的轮询周期,注册表的路径如下:

        HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\SIEMENS\WINCC\Alarm Logging\Constants

 

        在这里添加触发变量和过程值变量的轮询周期值:

        "CycleAlarms"= "00000000" // 触发变量

        "CyclePValues"= "00000000" // 过程值变量

 

        并将触发变量的值改为大于过程值变量的值,例如(图7):

        "CycleAlarms"= "00000003" // 触发变量,1s

        "CyclePValues"= "00000002" // 过程值变量,500ms

图7 在注册表中修改轮询时间

        修改后再次测试,显示正常,如图8。

         通道诊断里的扫描周期显示如图9,可以看到,因为有三个过程值(M80.0, MW90, MW100),所以500ms的扫描周期注册了三个变量,而触发变量只有一个,所以1s的扫描周期注册了一个。

图8 修改注册表后过程值显示正常

图9 WinCC注册的扫描周期

        测试到这里先告一段落,但是依然还是有个问题没有解决,那就是默认都是1s扫描周期的触发变量和过程值,为什么到报警消息中的时间会有一个差值,从而导致过程值的刷新永远慢一个周期,还是说有其他什么因素影响?这是需要进一步探讨的问题。


                                                                                               -------来自 西门子技术支持工程师

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