【问题标题】:Is there a way to increase the stack size in Twincat 3有没有办法增加 Twincat 3 中的堆栈大小
【发布时间】:2020-05-29 20:37:23
【问题描述】:

我遇到了堆栈溢出问题,我可以清楚地看到它是在引入一些新数组时发生的。我找不到在我的机器上运行的软 PLC (Twincat) 上增加堆栈大小的选项。

感谢任何帮助

【问题讨论】:

  • 你能发布异常的全文吗?注意你不能创建超过1024个通知句柄!
  • 对此有任何想法......我在 Twincat 2 中遇到了同样的问题,“错误 3252:堆栈大小超过 6144 字节 (_CALLTASKNEWTASK)”

标签: twincat


【解决方案1】:

我目前使用的是 4024.7,您可以在 SYSTEM > Real-time 下更改堆栈大小。然后在 Settings 选项卡下,您会找到 Maximal Stack Size [kB]

【讨论】:

    【解决方案2】:

    这是我从 Beckhoff 得到的官方答复:

    您无法更改 TC3 堆栈大小,它使用 60KB 的固定大小。仅有的 函数使用堆栈内存,FB 和程序不使用。

    堆栈大小非常有限。您不能在函数内部进行大内存操作。您还可以在一次操作中堆叠有限数量的函数。

    不过,Beckhoff 可能会在 TwinCAT 3 的未来版本中增加堆栈大小。

    【讨论】:

    • 也适用于我刚刚发现的功能块方法内部声明的 VAR ;)。不适用于 VAR_INST 方法。
    • 是的,栈只用于临时变量。 VAR_INST 是与功能块 (FB) 中的 VAR 相同的类成员。 FB 中的方法可以有 VAR_INST(或程序中的 VAR_STAT)。函数不能有 VAR_INST,如果不使用指针 (VAR_IN_OUT),就无法在函数中进行大内存操作。
    【解决方案3】:

    我意识到这有点晚了,但您可以采取措施减少所需的堆栈大小,而不是尝试增加堆栈大小。调用方法或函数时,请尝试传入对现有数组的引用并将其用于计算。即使是针对一些不直接作为响应返回的中间处理,这也将显着改善您的堆栈管理。在 TwinCAT 中有两种管理方式。

    最简单的方法是创建一个 VAR_IN_OUT 变量来传递。这很好用,但如果您的块从其他方法调用变量,则不应使用它。另一种方法是传入一个对你的数组的引用并使用它。

    此方法适用于返回和中间处理类型问题。

    【讨论】:

      【解决方案4】:

      注册: 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Beckhoff\TwinCAT3\System 添加服装 DWORD 使用密钥:DefaultStackSize 值:十六进制(80)或十进制(128)

      Regedit DWORD

      这会将您的堆栈大小设置为 128 而不是 64 :) 将其更改为您想要的任何内容,不确定当它太高时会发生什么。 但这可行,我们在所有 PLC 上都使用它,因为我们总是遇到用 Json 转换器解析的字符串数量等问题。

      这适用于 4022.xx 版本的 twincat。已经跟踪和测试了几年。

      【讨论】:

        猜你喜欢
        • 2019-07-02
        • 2015-03-23
        • 2014-09-11
        • 2018-02-04
        • 2015-11-22
        • 2011-11-29
        • 2010-11-24
        • 2022-01-22
        • 2022-08-21
        相关资源
        最近更新 更多