EcoStruxure Machine Expert 1.1版本不支持M258、LMC058和LMC078控制器。

__TRY, __CATCH, __FINALLY, __ENDTRY

定义

IEC 61131-3 标准未说明这些操作符。

__TRY, __CATCH, __FINALLY, __ENDTRY 操作符用于对 IEC 代码中的异常执行特定处理。利用这些操作符,您可以在检测到错误时执行特定语句。此外,检测到异常时,程序不停止。

语法

__TRY
<statements_try>
__CATCH(exec)
<statements_catch>
__FINALLY
<statements_finally>
__ENDTRY
<statements_next>

功能

如果在执行 <statements_try> 时(甚至在从此调用的函数中)检测到异常,则执行 <statements_catch>。这样,这些就不会停止,因为这跟检测到其他异常时一样。然而,在运行时系统中会有一条日志消息,其中包含与范围偏移和检测到的异常类型有关的信息。

在执行了 <statements_catch> 之后,自动执行 <statements_finally>(如有编程),并且然后执行 <statements_next>

变量 <exception> 必须为 __SystemExceptionCode 类型。

示例

如果 __TRY 中的语句产生异常,则不停止程序执行,并且随后会执行 __CATCH 中的语句。这就意味着,函数 exc 被执行。然后,__ENDTRY 中的语句被执行。

FUNCTION Tester : UDINT
VAR_INPUT
    count : UDINT;
END_VAR
VAR_OUTPUT
    strExceptionText : STRING;
END_VAR
VAR
    exc : __SYSTEM.ExceptionCode;
END_VAR
__TRY
Tester := tryFun(count := count, testcase := g_testcase);
//This statement is tested. If it produces an exception, then the statement in __CATCH is executed first, and then the statement in __FINALLY.
__CATCH(exc)
HandleException(exc, strExceptionText => strExceptionText);
__FINALLY
GVL.g_count := GVL.g_count + 2;
__ENDTRY

使用停止执行已处理的异常命令来停止错误位置处的执行,不考虑已编程的异常处理。

类型 __System.Exception

TYPE ExceptionCode: 
( RTSEXCPT_UNKNOWN                              := 16#FFFFFFFF,
RTSEXCPT_NOEXCEPTION                            := 16#00000000,
RTSEXCPT_WATCHDOG                               := 16#00000010,
RTSEXCPT_HARDWAREWATCHDOG                       := 16#00000011,
RTSEXCPT_IO_CONFIG_ERROR                        := 16#00000012,
RTSEXCPT_PROGRAMCHECKSUM                        := 16#00000013,
RTSEXCPT_FIELDBUS_ERROR                         := 16#00000014,
RTSEXCPT_IOUPDATE_ERROR                         := 16#00000015,
RTSEXCPT_CYCLE_TIME_EXCEED                      := 16#00000016,
RTSEXCPT_ONLCHANGE_PROGRAM_EXCEEDED             := 16#00000017,
RTSEXCPT_UNRESOLVED_EXTREFS                     := 16#00000018,
RTSEXCPT_DOWNLOAD_REJECTED                      := 16#00000019,
RTSEXCPT_BOOTPROJECT_REJECTED_DUE_RETAIN_ERROR  := 16#0000001A,
RTSEXCPT_LOADBOOTPROJECT_FAILED                 := 16#0000001B,
RTSEXCPT_OUT_OF_MEMORY                          := 16#0000001C,
RTSEXCPT_RETAIN_MEMORY_ERROR                    := 16#0000001D,
RTSEXCPT_BOOTPROJECT_CRASH                      := 16#0000001E,
RTSEXCPT_BOOTPROJECTTARGETMISMATCH              := 16#00000021,
RTSEXCPT_SCHEDULEERROR                          := 16#00000022,
RTSEXCPT_FILE_CHECKSUM_ERR                      := 16#00000023,
RTSEXCPT_RETAIN_IDENTITY_MISMATCH               := 16#00000024,
RTSEXCPT_IEC_TASK_CONFIG_ERROR                  := 16#00000025,
RTSEXCPT_APP_TARGET_MISMATCH                    := 16#00000026,
RTSEXCPT_ILLEGAL_INSTRUCTION                    := 16#00000050,
RTSEXCPT_ACCESS_VIOLATION                       := 16#00000051,
RTSEXCPT_PRIV_INSTRUCTION                       := 16#00000052,
RTSEXCPT_IN_PAGE_ERROR                          := 16#00000053,
RTSEXCPT_STACK_OVERFLOW                         := 16#00000054,
RTSEXCPT_INVALID_DISPOSITION                    := 16#00000055,
RTSEXCPT_INVALID_HANDLE                         := 16#00000056,
RTSEXCPT_GUARD_PAGE                             := 16#00000057,
RTSEXCPT_DOUBLE_FAULT                           := 16#00000058,
RTSEXCPT_INVALID_OPCODE                         := 16#00000059,
RTSEXCPT_MISALIGNMENT                           := 16#00000100,
RTSEXCPT_ARRAYBOUNDS                            := 16#00000101,
RTSEXCPT_DIVIDEBYZERO                           := 16#00000102,
RTSEXCPT_OVERFLOW                               := 16#00000103,
RTSEXCPT_NONCONTINUABLE                         := 16#00000104,
RTSEXCPT_PROCESSORLOAD_WATCHDOG                 := 16#00000105,
RTSEXCPT_FPU_ERROR                              := 16#00000150,
RTSEXCPT_FPU_DENORMAL_OPERAND                   := 16#00000151,
RTSEXCPT_FPU_DIVIDEBYZERO                       := 16#00000152,
RTSEXCPT_FPU_INEXACT_RESULT                     := 16#00000153,
RTSEXCPT_FPU_INVALID_OPERATION                  := 16#00000154,
RTSEXCPT_FPU_OVERFLOW                           := 16#00000155,
RTSEXCPT_FPU_STACK_CHECK                        := 16#00000156,
RTSEXCPT_FPU_UNDERFLOW                          := 16#00000157,
RTSEXCPT_VENDOR_EXCEPTION_BASE                  := 16#00002000
RTSEXCPT_USER_EXCEPTION_BASE                    :=16#00010000 )
UDINT ; END_TYPE