【问题标题】:Why dont the try catch statements work in TwinCAT 4024.7为什么 try catch 语句在 TwinCAT 4024.7 中不起作用
【发布时间】:2020-03-04 16:02:40
【问题描述】:

我正在尝试自 TwinCAT 4024.0 以来可用的新实现的 try/catch 语句。但是,编译时出现以下错误:

当前设备的代码生成器不支持结构化异常处理。

示例代码(source):

FUNCTION F_Calc : LREAL
VAR_INPUT
  pData     : POINTER TO ARRAY [0..9] OF LREAL;
  nElementA : INT;
  nElementB : INT;
END_VAR
VAR
  exc       : __SYSTEM.ExceptionCode;
END_VAR

__TRY
  F_Calc := pData^[nElementA] / pData^[nElementB];
__CATCH (exc)
  IF (exc = __SYSTEM.ExceptionCode.RTSEXCPT_ARRAYBOUNDS) THEN
    F_Calc := -1;
  ELSIF ((exc = __SYSTEM.ExceptionCode.RTSEXCPT_FPU_DIVIDEBYZERO) OR
         (exc = __SYSTEM.ExceptionCode.RTSEXCPT_DIVIDEBYZERO)) THEN
    F_Calc := -2;
  ELSIF (exc = __SYSTEM.ExceptionCode.RTSEXCPT_ACCESS_VIOLATION) THEN
    F_Calc := -3;
  ELSE
    F_Calc := -4;
  END_IF
__ENDTRY

【问题讨论】:

  • 添加此问答,因为 Google 在搜索错误代码时未显示任何结果。

标签: try-catch twincat


【解决方案1】:

原来 64 位系统尚不支持 try catch 语句。 this 文章中也提到了这一点。

来自这篇文章的评论部分,为什么它还不能在 64 位上运行:

在异常的情况下,内部发生了很多事情。为了 例如,必须清理堆栈。尤其是嵌套很深 方法调用,这可能意味着很多工作。我怀疑记忆 管理在 32 位下的结构不同于 64 位下的结构。 但是,我假设这将在 64 位系统中实现 稍后构建。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 2019-05-18
    • 1970-01-01
    相关资源
    最近更新 更多