我如何抛出标准系统异常(如果可能,创建自定义异常并抛出它们)。
想到的最简单的事情就是将变量除以零,但这充其量只是一种技巧。
AppGenerateException
我确实在库中找到了一个函数的提及CmpApp
,但我找不到它的任何文档,也找不到任何示例。任何人都可以为我指出一些文档吗?
出于好奇,我检查AppGenerateException
了它并让它工作。从这个 Codesys 帮助页面获得了一些帮助。
我仍然认为这不是实现您需要的最佳方式,但它可以工作。
不幸的是,我有 64 位系统,据我所知,TRY..CATCH 尚未在其他 32 位系统中工作,所以我无法测试捕获。
添加以下库:
然后下面的代码似乎工作。设置ThrowErr
为 true 以获取系统异常。
PROGRAM PRG_TestThrow
VAR CONSTANT
MY_PRIVATE_EXCEPTION : DWORD := 32001;
END_VAR
VAR
ThrowErr : BOOL; //Set this to TRUE to throw an error
//The next two are for getting App instance
_pApp : POINTER TO CmpApp.APPLICATION;
_Result : SysExcept.SysTypes.RTS_IEC_RESULT;
END_VAR
//Get App instance
_pApp := AppGetCurrent(pResult := ADR(_Result));
IF ThrowErr THEN
ThrowErr := FALSE;
IF _pApp <> 0 THEN
//Throw divide by zero exception
AppGenerateException(pApp:=_pApp, ulException:=RtsExceptions.RTSEXCPT_DIVIDEBYZERO);
//You could use probably any available number as your own custom exception.
//For example the following works BUT not sure if it's ok to this.
//AppGenerateException(pApp:=_pApp, ulException:=MY_PRIVATE_EXCEPTION);
//See RtsExceptions type for available exception codes.
//For my Codesys version, it has largest exception number of 0x2000 so all larger number are free (for now...)
END_IF
END_IF
似乎可以使用任何自定义异常代码,例如:
AppGenerateException(pApp:=_pApp, ulException:=MY_PRIVATE_EXCEPTION);
但它没有记录,所以我会小心。