如何抛出标准系统异常(如果可能,创建自定义异常并抛出它们)。
我想到的最简单的事情,就是把变量除以零,但这充其量不过是一次黑客攻击。
我确实在AppGenerateException库中找到了一个函数CmpApp,但是我找不到它的任何文档,也找不到任何例子。有人能给我指一下这方面的文件吗?
发布于 2020-06-04 05:48:36
出于好奇,我检查了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);但没有记录所以我会小心的。
https://stackoverflow.com/questions/62154289
复制相似问题