Assert block
Short summary
Name |
Assert |
→POU type |
|
Category |
IEC-block, UtilEnh functions, block with internal error diagnostic |
Graphical interface |
|
Available since |
|
Functionality
Use the Assert block in order to make a statement about the state of an element in the application (e.g. a variable). Hence, you are able to recognize logical errors in your application and/or to check the compliance with specifications.
If the block input C is evaluated with the value FALSE (or an equivalent), this block traces a message. Moreover, the output ENO of the calling →POU and of the Assert block itself is set to value FALSE (or an equivalent).
The message of the Assert block is displayed in the following locations:
within the console of the →runtime system
The console of the runtime system is a command prompt that is opened when the runtime system is started and it displays the messages of the runtime system.
within the PLC Logging view of logi.CAD 3 – The advantage of this view is that its content is listed in tabular form.
Format of the message: Assertion failed in [calling POU,line]: condition
The information for [calling POU] and condition are output in the format of the generated C-code. If the length of the message exceeds 1024 characters, only Assertion failed will be traced.
Inputs
|
Identifier |
Description |
|
Inputs: |
C |
BOOL |
condition; expected to be TRUE |
Input EN and output ENO are available when →calling the block. See "Execution control: EN, ENO" for information on input EN and output ENO.
See:
"Blocks for safe logic" whether this block is supported for developing safety-relevant applications.
"Highlighting safe logic in the FBD-editor" for the effects when using the block as a block for safe logic .
Internal error diagnostic for block
Depending on the block input C, the output ENO of the block is set to value FALSE (or an equivalent).
Example for usage within ST-editor
FUNCTION_BLOCK TestAssertOutput
VAR
testInt : INT := 5;
testStr : STRING[5] := 'hello';
testReal : REAL := 3.14;
testTime : TIME := T#1s;
testArray : ARRAY[1..5] OF INT;
testStruct : TestStruct;
END_VAR
Assert(FALSE);
Assert(testInt > 10);
Assert(testStr = 'world');
Assert(testReal = 1.41);
Assert(testTime = T#2s);
Assert(testInt + 1 = 7);
Assert(ADD(testInt, 1) = 7);
Assert(testArray[testInt] = 3);
Assert(testStruct.element1 = 2);
END_FUNCTION_BLOCK
The following messages are traced for this example:
TID00005054: Assertion failed in [lcfu___TESTASSERTOUTPUT,21]: LC_EL_false
TID00005054: Assertion failed in [lcfu___TESTASSERTOUTPUT,27]: (LC_TD_BOOL)(LC_this->LC_VD_TESTINT > (LC_TD_INT)10)
TID00005054: Assertion failed in [lcfu___TESTASSERTOUTPUT,33]: (LC_STRING_EQ(LC_this->LC_VD_TESTSTR,"world",LC_STR_CMP_MODE_STRING))
TID00005054: Assertion failed in [lcfu___TESTASSERTOUTPUT,39]: (LC_TD_BOOL)(LC_this->LC_VD_TESTREAL == (LC_TD_REAL)1.41)
TID00005054: Assertion failed in [lcfu___TESTASSERTOUTPUT,45]: (LC_TD_BOOL)(LC_this->LC_VD_TESTTIME == LC_TIME_VALUE(RT_CC_CONST_LL(2),RT_CC_CONST_LL(0)))
TID00005054: Assertion failed in [lcfu___TESTASSERTOUTPUT,51]: (LC_TD_BOOL)((LC_TD_INT)(LC_this->LC_VD_TESTINT + (LC_TD_INT)1) == (LC_TD_INT)7)
TID00005054: Assertion failed in [lcfu___TESTASSERTOUTPUT,61]: (LC_TD_BOOL)(lFunction_ASSERT__C__leftOp_ADD.LC_VD_ADD == (LC_TD_INT)7)
TID00005054: Assertion failed in [lcfu___TESTASSERTOUTPUT,67]: (LC_TD_BOOL)(LC_SUBSCRIPT_ARRAY(LC_this->LC_VD_TESTARRAY,LC_this->LC_VD_TESTINT,(LC_TD_DINT)1,(LC_TD_DINT)5) == (LC_TD_INT)3)
TID00005054: Assertion failed in [lcfu___TESTASSERTOUTPUT,73]: (LC_TD_BOOL)(LC_this->LC_VD_TESTSTRUCT.LC_VD_ELEMENT1 == (LC_TD_INT)2)
When creating your application within the ST-editor, enter a call of a block by typing the text as requested by the syntax or use Content Assist.