Level Controlled Function Blocks¶
Level Controlled function blocks in the context of this document are defined as following:
The input variable
xEnable
is the defining feature for this type of function block.The status
TRUE
detected on the input variablexEnable
(start condition) starts the operation defined by this particular level controlled function block. The defined operation is running to its ready condition or error condition while the input variablexEnable
isTRUE
. The statusFALSE
detected on the input variablexEnable
is interpreted as an abort (abort condition). This means the internal state of the function block and all output variables will be reinitialized and it is then ready for a new start (standard handshake).The input variables will not be stored locally and can so influence the current work flow of the defined operation.
Only one of the output variables
xDone
,xBusy
orxError
can have the statusTRUE
at the same time.The status of all output variables are valid as long as the status of the output variables
xBusy
orxDone
isTRUE
[2].With the falling edge of
xBusy
the input variablexEnable
is sampled and its inverted value is stored as a reset request.The state of the output variables will be valid for a minimum of one invocation even though the state of the
xEnable
input variable is already set toFALSE
. In this case (reset request isTRUE
) the internal state of the function block is reinitialized automatically. This can especially happen after an error condition while aborting the defined operation.The status of the output variables other than
xDone
,xBusy
,xError
oreErrorID
are valid only whilexDone
has the statusTRUE
[1][2].With an active reset request and after the status
TRUE
of one of the output variablesxDone
orxError
was seen, the input variablexEnable
can be set toTRUE
again and the function block will restart its defined operation (quick handshake).Sometimes it is necessary to have a behavior model which never reaches its ready condition. Such a function block has no
xDone
output variable and noDone
state. This behaviour is defined as a Continuous Behaviour. In the context of this document we refer to this kind of behavior models asLConC
andLConTlC
.See the detailed descriptions of the reference implementation for the different level controlled function blocks: LCon (FB) | LConTl (FB) | LConTo (FB) | LConTlTo (FB) | LConC (FB) | LConTlC (FB)
Common properties of these types of function blocks:
If a specific invocation of a function block detects a start condition, the output variable
xBusy
is set to the statusTRUE
immediately.As long as the defined operation of a function block is running the output variable
xBusy
has the statusTRUE
.If a error condition was detected, the output variable
xError
is set toTRUE
and the output variablexBusy
is set toFALSE
. In addition, one of the defined error codes (one value out of the local enumeration typeERROR
) will be assigned to the output variableeErrorID
.If the ready condition is reached, the output variable
xDone
is set toTRUE
and the output variablexBusy
is set toFALSE
.If the defined operation can be fully processed in one invocation, the ready condition or the error condition is reached immediately and the
TRUE
status of the output variablexBusy
is never seen.With the rising edge of
xDone
, the status of all output variables will be frozen.As long as one of the output variables
xDone
,xBusy
orxError
has the statusTRUE
the defined operation of this function block is not yet completed, so further invocations are necessary to complete the Resetting state.
Timing constraints of these function blocks:
udiTimeLimit
([µs], 0 ⇒ no operating time limit):A function block could, for example, complete a complex task in a loop. The larger the task is, the more time is consumed in the current invocation of this function block. TheudiTimeLimit
parameter can define how much time per invocation is permitted for consumption in the respective function block. Function blocks with audiTimeLimit
input variable are implemented in such a way that the current invocation is exited when the task is complete (Ready Condition), or when the consumed time for this invocation has exceeded the settings fromudiTimeLimit
.udiTimeOut
([µs], 0 ⇒ no operating time limit):When processing its defined operation, a function block could be forced for example to wait for an external event. It can do this in an internal loop (Busy Wait) or it can check in each invocation whether its task can be fully completed. TheudiTimeOut
parameter can then define how much time is permitted for consumption for the defined operation. Function blocks with theudiTimeOut
input variable are implemented in such a way that the current invocation is exited towards a error condition (xError
⇒TRUE
andeErrorID``⇒ ``ERROR.TIME_OUT
) when the time interval as defined byudiTimeOut
has been exceeded.
Error Domains and Error Codes (ERROR
(Enum) and eErrorID
(output)) and their organisation in different domains:
Every Function Block in this document has a Boolean output xError
to indicate that there is an error condition reached.
In that case the related information will be signaled with the value of the output eErrorID
.
The eErrorID
represents an Integer, indicating the reason of the error.
In many cases this integer value is used as input for an additional FB which converts the number to a related localized string in an applicable language.