我正在尝试新实现的try/catch语句,这些语句可以从TwinCAT 4024.0中获得。但是,编译时会出现以下错误:
当前设备的代码生成器不支持结构化异常处理。
示例代码(来源):
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发布于 2020-03-04 08:02:40
结果表明,64位系统还不支持try catch语句。在这文章中也提到了这一点。
本文的注释部分介绍了为什么它还不能在64位上工作的原因:
在异常情况下,很多是在内部发生的。例如,必须清理堆栈。特别是对于深度嵌套的方法调用,这可能意味着要做大量工作。我怀疑内存管理在32位和64位下的结构是不同的。但是,我假设这将在以后的构建中为64位系统实现。
https://stackoverflow.com/questions/60521446
复制相似问题