中国机器人网 App
手机扫码下载 · 或点击查看
现场一台1500PLC,跑着跑着SF灯亮了,CPU切STOP了。报警缓冲里报"访问错误 区域长度错误",指向一个DB块。我把那个DB块重新下载了一遍没解决,MRES也试过了,照样报警。
程序是别人写的,我接手没多久。有没有人碰到过这种情况?会不会是DB块实际长度和程序里访问的不一致?除了删DB重灌还有啥招?
先别急着复位,看一下那个报警里指向的访问是哪个地址、哪个DB、多少字节偏移。1500这种报警十有八九是访问越界,多半是DB块在线实际长度比程序里写的访问长度短。我一般这么查:在监控表里把那个DB块的Used Length看一遍,再对比程序里访问的偏移加长度,超了就清楚了。
还有个坑是优化块访问,勾了优化访问之后DB里的地址是符号寻址,有时候交叉引用看不出来但实际访问超了。把报警时间点的调用栈拉出来瞅一眼,顺着栈能直接定位是哪段逻辑在踩线。
别瞎删DB重灌,搞不好现场数据丢了更麻烦。你先把那个DB块的属性打开,确认一下是不是优化访问,再去看实际使用的字节数跟程序里访问的匹不匹配。八成就是访问超出了实际定义的长度。
MRES没用就说明不是CPU状态问题,是真报警没消除。把报警缓冲清一下试试,在CPU属性里有个"清除报警缓冲"的选项,清完重新触发一次程序看看还报不报。