故障现象
生产抽检的时候,发现仪表的PT,CT变比会出现错误值,例如PT1会出现65537(正确的应该是400),CT1会出现63(正确的是100)。进一步检查发现,设置参数的有些参数被改动了,如下图红色部分标注的。

故障分析
- 开始时只发现一台仪表出现这个情况,试验了同批次另外10台仪表,均没有出现错误。出问题的仪表在重复操作10次以后,故障复现了。后来将铁电补焊一下以后,重复上下电100次,均没有再出现错误。所以当时判定是虚焊导致的读参数不稳定导致的。
- 后来在生产过程中,又发现一台,情况与上次的类似。但是这次无法复现故障,对故障仪表重复上下电几百次,进入设置菜单查看参数,参数均正常。这样的话,前一次分析的原因就可能是错的。需要进一步分析其他原因。
- 对错误数据进行进一步分析,并结合代码里出错数据的存储位置,判断可能是堆栈溢出导致参数被覆盖。进行试验验证。对仪表进行快速通讯,100ms发送一帧长数据读写命令01 03 10 00 00 44 41 39,同时用按键进入设置菜单查看参数,这样经过几轮操作以后,参数就会被改动。
- 代码里被误改动的数据的存储地址就放在栈空间的上面,这样的话,如果栈空间溢出就会导致与栈相连的空间里的数据被误改动。如下图所示,PT,CT等参数就放在空间M1_PADRam里,紧挨着栈空间,当栈空间溢出后就导致数据错误。

本文分析了一起因堆栈溢出导致仪表PT,CT变比出现错误值的问题。通过故障复现及代码分析,确定是堆栈溢出使参数被覆盖。解决方案是将参数移至远离栈空间的存储区域,避免类似错误。总结中强调了防止堆栈溢出、数组越界和函数重入的重要性。"
135352952,9402175,pandas升级后无法输出Excelxls解决办法,"['python', 'pandas', '开发语言', '数据处理']
最低0.47元/天 解锁文章
2717

被折叠的 条评论
为什么被折叠?



