第二次'New Downlaod'或'Online Change'后出现一般保护错误



我正在尝试在Twincat 3.1中构建一个复合模式。

激活配置和第一次新的下载或在线更改似乎一切都很好。无论我添加或删除多少对象,第二个新下载都会导致一般保护错误或BSOD。

为简单起见,Object是实现I_SYS_COMP_Object接口的FB。

项目使用FB_init和FB_exit从全局对象列表中添加或删除对象。以前的迭代使用call_after_init属性,结果相同。

由于代码变得冗长,我添加了一个到存储库的链接。GitHub代表

我应该如何处理这种问题?

编辑26/11:

核心转储和异常模式不工作。

到目前为止,我已经发现:

IF object <> 0 THEN 
RETURN; 
END_IF 
_this_object = THIS^; 
IF object.parent <> THIS^ THEN 
RETURN;
END_IF 

是问题的一部分。现在我在

下面几行看到了BSOD
_last_child := object; 

这很奇怪,因为这应该是一个简单的赋值。目前,_last_child仅在有问题的方法中使用。我输入一个RETURN;在完成任务后,我仍然收到BSOD。

我不能就你的问题提供具体的指导,但我的经验是调试从FB_Init调用的代码是非常令人沮丧的,因为你不能进入代码。

因此,我开发了一种方法,我使用FB_Init非常简单的事情(主要是赋值,经常REF=赋值)和延迟实际初始化代码,直到FB_Init方法调用之后。我实现了我自己的,独立的,初始化和执行框架,这使得这很容易。多亏了这种方法,我掉头发的速度变慢了。

我大量使用断言(特别是方法中的前提条件,包括FB_Init),并且在观察到超出规范的情况时使运行时崩溃。我在FB_Init调用中检查它们,但框架实际上延迟崩溃,直到正常执行开始。这样,我就不会像在FB_Init执行期间发生崩溃那样丢失有关崩溃原因的信息。捕获传递给FB_Init的无效引用是一种常见的情况,这可以节省很多麻烦。

相关内容

  • 没有找到相关文章

最新更新