IBehaviourModel (ITF)¶
INTERFACE IBehaviourModel EXTENDS __SYSTEM.IQueryInterface
Implementiert durch den Funktionsbaustein BehaviourModel.
Die Schnittstelle unterstützt alle Methoden und Properties, die notwendig sind, um eine``BehaviourModel`` Instanz über Schnittstellenreferenz-Variablen zu steuern.
Wenn mit einer Schnittstellenreferenz-Variablen gearbeitet wird, sollte es möglich sein, genau zu entscheiden, wann die Zustandsmaschine aufgerufen wird. Hierfür haben die Methoden StartModel
, AbortModel
, ResetModel
und GetModelState
eine Parameter xCommit
. Wenn eine dieser Methoden mit dem Wert xCommit:=FALSE
aufgerufen wird, wird dies nur eine Zustandsänderung vorbereiten. Die Zustandsmaschine wird dadurch nicht aufgerufen, die zugehörigen Aktionen werden nicht ausgeführt, um den Zustand zu ändern. Wenn eine dieser Methoden mit dem Wert xCommit:=TRUE
aufgerufen wird, wird eine Zustandsänderung vorbereitet. Außerdem wird dadurch die Zustandsmaschine, und die notwendigen Aktionen ausgeführt, um den nächsten stabilen Zustand zu erreichen. Manchmal benötigt die Zustandsmaschine mehr als einen Aufruf, um von einem Zustand zum nächsten stabilen Zustand überzugehen. Deshalb kann das folgende Codebeispiel nützlich sein, um ein Common Behaviour Model über eine Schnittstellenreferenz-Variable zu handhaben.
Codebeispiel für das Handhabung eines Common Behaviour Model über eine Schnittstellenreferenz-Variable
1VAR
2 itfBehaviourModel : CBML.IBehaviourModel;
3 eState : CBML.STATE;
4 /// Some variable to trigger the abort of the behaviour model
5 xSignal : BOOL;
6END_VAR
7
8CASE eState OF
9 CBML.STATE.DORMANT:
10 (* Prepare execting *)
11 itfBehaviourModel.StartModel(xCommit:=FALSE);
12
13 CBML.STATE.DONE:
14 (* Handle the ``Done`` state *)
15 itfBehaviourModel.ResetModel(xCommit:=FALSE);
16
17 CBML.STATE.ABORTED:
18 (* Handle the ``Aborted`` state *)
19 itfBehaviourModel.ResetModel(xCommit:=FALSE);
20
21 CBML.STATE.ERROR:
22 (* Handle the ``Error`` state *)
23 itfBehaviourModel.ResetModel(xCommit:=FALSE);
24END_CASE
25
26IF xSignal AND
27 eState = CBML.STATE.STARTING OR
28 eState = CBML.STATE.EXECUTING
29THEN
30 itfBehaviourModel.AbortModel(xCommit:=FALSE);
31END_IF
32
33itfBehaviourModel.GetModelState(xCommit:=TRUE, eState=>eState);
Es gibt einen sehr wichtigen Aspekt dieses Codebeispiels: Die Zustandsmaschine sollte auf jeden Fall nur einmal im SPS-Zyklus aufgerufen/getriggert werden.
Properties:
Methods:
Structure: