Very Good answer by MarvinW!
Option 3 is for example implemented in the Set Event add-on (NexeedSetEventAddon):
The add-on sets ModeHandler.Unit.Cancel / StopRequest / RunEmptyRequest.
You should keep in mind that it can be very difficult in an application to find the reason of a cancel. At least you should make this very clear to the programmer (and operator by showing an error message).
Currently the safety add-ons (ControlOn, MainValve, SafetyValve, SafetyDoor) and the Set Event add-on can cause a global cancel on the ModeForwarder/ModeHandler (depending on which one the add-ons are located).
... View more