程序员开发实例大全宝库

网站首页 > 编程文章 正文

倍福TwinCAT-如何查找PLC错误发生的具体位置

zazugpt 2024-08-25 17:13:29 编程文章 19 ℃ 0 评论

利用Core Dump功能进行错误分析

问题背景:

众所周知,当PLC发生除零、溢出、指针错误时会立即停止,并报告Exception错误,著名的Page Fault就是Exception的一种:

这些提示看似精确,但是因为无法将RBP、RIP和RSP的内存指针与PLC代码对应起来,用户虽然知道发生了除零、发生了溢出,但仍然需要自己想办法查程序到底是哪一行代码出了问题。对于大型项目,这是一个非常耗时耗力的过程。

大部分Exception错误可以用Check函数加断点来规避或排查,此前本公众号和倍福虚拟学院上已有多篇文档介绍。但是加断点的方式要求PLC程序必须在Login状态,工程师必须开着笔记本连上PLC等着故障出现,如果错误是不定期出现,或者发生时工程师不在现场,就很难定位故障到底发生在哪一行。还有部分Exception并没有对应的Check函数,比如负数开平方。

解决办法:

针对这个长期烦扰工程师的问题,TwinCAT 3.1在 Build 4024.11及以上的版本提供了核心转储功能Core Dump,可以在PLC运行过程中发生Exception故障时在控制器的“C:\TwinCAT\3.1\Boot\Plc”目录下自动生成后缀名为.core的PLC内存转储文件:

注意:下载程序前在PLC项目的Setting页面要勾选“Core Dump”。

事后工程师打开原项目,装载指定的.core文件,就可以重现故障发生的瞬间代码执行到哪一行:

上图中,从指针 0x04D2取值赋给nWord,这个指针是未分配物理内存的无效地址,会报Page Fault错误。

操作步骤:

详细的使用方法,见倍福虚拟学院上的文档:

《TwinCAT 3使用Core Dump工具分析Exception错误》

https://tr.beckhoff.com.cn/mod/folder/view.php?id=936

以下是简单说明:

从主菜单PLC|Core Dump 选择核心转储相关操作:

注意 :

创建核心转储 Create Core Dump:这里是指手动创建,在Login状态遇到断点时使用。如果是发生了Exception,这个功能会自动触发,在 \boot\plc下会自动生成.core文件。

加载核心转储Load Core Dump:这是分析故障时的关键,要求与故障发生时PLC运行代码完全匹配的编译文件。通常这个编译文件只存在于调试电脑上,只有拥有源代码的工程师才能利用Core Dump来分析故障。加载Core Dump以后,类似PLC遇到断点,可以查看故障发生时的程序变量、调用堆栈(菜单:PLC|Windows|Call Stack)

关闭核心转储Close Core Dump:需要关闭Core Dump才能退出故障分析状态,继续其它TwinCAT调试步骤。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表