看门狗

我现在有个PLC程序,大约每次运行都要2~5秒(涉及到大型计算这个时间不能再减少了),可是我自己设置的scan cycle 为6000(见附图)。程序运行2秒多就死机了,查了一些资料说是看门狗的关系。提问,看门狗是不是与这个设定的时间没有关系?我想确定的知道怎么设置看门狗时间?显然看门狗时间没有6秒多,因为我使用OB1中的OB1_PREV_CYCLE最大的时间只有2秒多。各位大侠帮忙谢谢,我倒是解决死机的问题,在OB80里面调用SFC43。

问题补充:
Cycle/Clock Memmory属性中对Scan cycle monitoring time[ms]参数,查看CPU模块信息正如问题中所说,没有扫描周期会达到6000ms的。我现在想知道为什么监测OB1中扫描时间为2S多一点就死机,而我在“周期设置”图片中设置的为6000ms。如果监测到OB1时间没有问题显然与6000ms矛盾。补充一下,我使用的是嵌入式控制器 WinLC RTX EC.楼下很好的建议。不过在这个里面没法实现,它是调用一个封装好的dll(耗时间的东西就是它),不能被切割多步运行。同时,这个嵌入式控制器主要就是用来完成大型的计算,只要能够在秒级别的时间内运算完就好,所以只要在完成大型计算的前提下不怎么需要考虑实时性。

图片说明:

看门狗    看门狗   

最佳答案

看情形应该还是超出了你设定的循环扫描监视时间,在线查看CPU模块信息可以看到最短、当前/上一次、最长扫描时间。
    楼主似乎走入了一个误区,延长循环扫描时间严重影响PLC的实时性,过长的循环周期可能丢失很多信号,对于过程控制很不利,一般来说对于计算量比较大的程序都是异步完成的,也就是完成不止一个周期,所以楼主应从这个方面考虑,用多个扫描周期来完成你这个大型计算。

—————————————————————————————————————————————
关于补充的回答:
你所说的死机是不是就是触发了OB80,你在OB80里调用SFC43是不是已经可以解决这个问题,问题在于究竟为什么触发OB80,这个要看OB80里的临时变量故障代码和故障信息了,你可以到下载中心下载文档A0059“如何使用组织块”。
深入浅出WinCC里关于ODK部分里提到,比较耗时的操作可以放在异步处理器里执行,如果你有C ++的功底并有DLL的源程序,你可以把计算改为异步执行,或者也可以考虑新建一个DLL异步执行调用这个封装好的DLL 。

提问者对于答案的评价:
回答的很中肯。最后通过调试发现问题症结在于,死机的时候它的时间显示2S965ms之类的是个假象,真正死机的时候,在ob1里面测量到的时间不是准确的。应该超过了我自己设定的6s,只是没有通过#OB1_MAX_CYCLE体现出来。所以在不能对程序动手脚的情况下不得以在OB80里面调用sfc43。因为懒惰也就没有去查找OB80的诊断信息呢!

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc249877.html

(1)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月2日 下午5:09
下一篇 2018年12月2日 下午5:10

相关推荐