背景:最近接手了一套设备的程序,1515TCPU,有四五个项目一直在运行,有个三四年也大体比较稳定,没什么大问题,程序使用梯形图,M区域寄存器使用较多,大几千的字节是有的,这个程序对于我来说简直是没法看的,所以不出问题我不会去看的,直到昨天现场因为某个无关紧要的小问题断电重启了系统,完了说首次上电回零不了,说以前也不会这样,都很正常,因为现场都是在运行,所以比较着急,我就马上远程现场看看。(由于比较着急,未截图保存“证据”)
远程打开现场(这远程是真卡,动都没法动,分分钟给说不买无线网卡你们就自己玩儿去,别找我),等了半小时后开始没那么卡,开始定位到回零地方,看了半天,依旧很懵逼,因为确实没见过这样写的,程序大概是写了,6步,第一步就走不下去了,然后我试图让跳到第二步,发现写不进去,第一步是用线圈写的,第二步有个条件初始根本就不成立,也就造成死循环,然后准备把第一步屏蔽(梯形图写的线圈真尼玛难言,那程序我又不想动,几乎每一步都是线圈,然后用扫描周期计时,程序也不是在一块写的,跳来跳去,也不知哪个大神写的),后来也没办法,没有屏蔽,就在那边乱翻,突然发现有个上升沿处于一直导通的状态,有点奇怪,开始交叉引用这个上升沿,存储位是个M点,信号跟存储位也只有一个地方使用,这下就更加懵逼,我以为是STOP了,赶紧看看,也并没有,然后程序全部重建,重新下载启动监控,依旧如此,真是见鬼,没办法,存储位的M点换掉用DB,重新下载监控,哇,不通了,一阵暖流袭来,马上让现场再试,结果还是不行,再看看,尼玛有三个地方的上升沿都如此,马上全部换成DB,下载监控,上升沿均正常,又让现场试,现在开始能动了,但是卡死在第三步,就是离开原点150的地方停下来了,按照经验,此时应该反向回零,看了一下速度位置都也给了,Execute触发线圈(也是个M点)也是通的,咋就不动,翻来翻去也找不到啥猫腻,最后无意间打开了定位块,发现神奇的一幕,Execute管脚不通,变量就是那个Execute触发线圈,我以为是双线圈了,交叉引用此线圈,发现也只又这一个地方在写,运行这么久没啥大问题,想想也是这么低级错误应该不会出现,但是就是一个周期内状态不一致了,马上把线圈的M点后面加了个DB点,替换Execute管脚,下载监控,哇,线圈状态一致了,但是现在是在原点两边来回跑,再监控,发现步序里面的M点没有替换过来,再改,终于,这次回零算完成了。重启让现场再多试两次,现在正常了。到此,问题算是解决了
但是但是,问题虽然解决了,但是我也只是替换了几个M点,其他的我也没动,这个M区虽然不好用(本人除了系统时钟等系统变量从来不会使用M区),但是按理也不应该出现这种问题,是不是CPU还是存在某些BUG,各路大神有何看法?