StateMachine

StateMachineはOPC UAの情報モデルで定義された全ての値、状態の遷移条件などを事前に設定したFiniteStateMachine(有限オートマトン/有限状態機械)を作成し、Clientから推移をトリガーするMethodをCallすることで状態を遷移させ自動的にJobを実行させるOPC UAの機能です。

StateMachineの構成図

FinitStateMachineの中でアクティブになっている状態のモノをStateMachineといいます。StateMachineは現在の状態を示すCurrentState、どこから遷移したかを示すLastTransition Propertyが含まれます。構成は図の通りです。

StateMachineの構成要素

StateMachineは下記の要素により構成されます。

StateMachineType

StateMachineTypeはすべてのStateMachineを定義するObjectTypeです。必須のVariableノードとして現在の状態を表すCurrentStateがあります。LastTransitionはStateMachineTypeのインスタンスで発生した最後の遷移を格納します。StateMachineTypeは重要な状態遷移が起こるときはいつでもEventを発行します。StateMachineTypeのDefinitionは以下の通りです。

CurrentState

CurrentStateはStateMachineTypeのインスタンスの現在の状態を格納します。CurrentStateはアプリケーション制御ロジックでの使用に適さない可能性がある現在の状態の人間が読める名前を提供します。 状態の一意の識別子が必要な場合、アプリケーションはCurrentStateのIdPropertyを使用する必要があります。

LastTransition

LastTransitionはStateMachineTypeのインスタンスで発生した最後の遷移を格納します。遷移に一意の識別子が必要な場合、アプリケーションはLastTransitionのIdを使用する必要があります。

StateVariableType

CurrentStateはStateMachineの現在の状態を表すVariableTypeです。CurrentStateのValue AttributeのDataTypeはLocalizedTextで‘Id’という必須のPropertyを持ちます。StateVariableTypeのDefinitionは以下の通りです。

Id

IdはStateMachineType内の現在の状態を一意に識別する名前です。

Name

NameはStateMachineType内の遷移を一意に識別するQualifiedNameです。

Number

NumberはStateMachineType内の現在の状態を一意に識別する整数です。

EffectiveDisplayName

EffectiveDisplayNameはSubStateMachinesの状態を考慮した後の、ステートマシンの現在の状態の人間が読める名前が含まれています。 どの状態またはどのサブ状態を使用するかについて指定されたルールはありません。 これらはServer次第でStateMachineTypeのセマンティクスに依存します。

StateMachines

StateMachinesはStateMachineの現在の状態を含む可能性のあるEventを生成します。その場合、Serverは、AddressSpaceのインスタンスで提供されていない場合でも、EventでStateVariableTypeのすべてのオプションのPropertyを提供する必要があります。

TrasitionVariableType

TransitionVariableTypeはStateMachine内で発生した遷移を人間が読める名前として格納する基本VariableTypeです。SourceTimestampは遷移がいつ発生したかを指定します。 この値はTransitionTime Propertyで公開される場合もあります。

Id

IdはStateMachineType内の遷移を一意に識別する名前です。 サブタイプはDataTypeを制限する場合があります。

Name

NameはStateMachineType内の遷移を一意に識別するQualifiedNameです。

Number

NumberはStateMachineType内の現在の状態を一意に識別する整数です。

EffectiveDisplayName

EffectiveDisplayNameはSubStateMachinesの状態を考慮した後の、StateMachineの現在の状態の人間が読める名前が含まれています。 どの状態またはどのサブ状態を使用するかについて指定されたルールはありません。 これはServer次第でStateMachineTypeのセマンティクスに依存します。

FiniteStateMachineType

FiniteStateMachineTypeはStateMachieTypeのサブタイプのObjectTypeです。StateMachineで定義される全ての値、遷移条件などを定義します。FiniteStateMachineTypeのDefinitionは以下の通りです。

CurrentState

CurrentStateは状態の一意の識別子が必要な場合、アプリケーションはCurrentStateのIdを使用する必要があります。

AvailableStates

AAvailableStates VariableはStateMachineインスタンスに存在する状態のNodeIdリストを提供します。 Serverの運用中にリストが変更される場合があります。

AvailableTransitions

AvailableTransitions VariableはStateMachineインスタンスに存在する遷移のNodeIdリストを提供します。 Serverの運用中にリストが変更される場合があります

FiniteStateVariableType

Id

IdはStateVariableTypeから継承され、必要なDataTypeを反映するようにオーバーライドされます。この値はFiniteStateMachineTypeの状態Objectの1つのNodeIdになります。

FiniteTransitionVariableType

Id

IdはStateVariableTypeから継承され、必要なDataTypeを反映するようにオーバーライドされます。この値はFiniteStateMachineTypeのState Objectの1つのNodeIdになります。

StateType

FiniteStateMachineの状態はStateTypeのObjectとして表されます。StateTypeのDefinitionは以下の通りです。

TransitionType

TransitionTypeはStateMachieの中で起こり得る遷移(Transition)を定義します。各遷移を表すObject NodeをFiniteStateMachineTypeのサブタイプのTransitionTypeとして定義します。Tansitoin NodeはTransitionTypeというObjectTypeからインスタンス化されます。TransitionTypeのDefinitionは以下の通りです。

FromState ReferenceType

FromState ReferenceTypeは具体的なReferenceTypeで直接使用できます。これはNonHierarchicalReferencesのサブタイプです。このReferenceTypeのセマンティクスはトランジションが接続する開始状態へのトランジションを指すことです。このReferenceTypeのSourceNodeはObjectTypeTransitionTypeのObjectまたはそのサブタイプの1つである必要があります。 このReferenceTypeのTargetNodeはStateTypeのObjectまたはそのサブタイプの1つである必要があります。FromState ReferenceのDefinitionは以下の通りです。

ToState ReferenceType

ToState ReferenceTypeは具体的なReferenceTypeであり、直接使用できます。これはNonHierarchicalReferencesのサブタイプです。このReferenceTypeのセマンティクスは、トランジションが接続する終了状態へのトランジションを指すことです。このReferenceTypeのSourceNodeはObjectTypeTransitionTypeのObjectまたはそのサブタイプの1つである必要があります。 このReferenceTypeのTargetNodeは、ObjectStateTypeのObjectまたはそのサブタイプの1つである必要があります。このReferenceTypは単方向にのみ公開できます。

HasCause ReferenceType

HasCause ReferenceTypeは具体的なReferenceTypeであり、直接使用できます。これはNonHierarchicalReferencesのサブタイプです。このReferenceTypeのセマンティクスはTransitionからTransitionを引き起こすものを指すことです。このReferenceTypeのSourceNodeは、ObjectTypeTransitionTypeのObjectまたはそのサブタイプの1つである必要があります。 TargetNodeは任意のNodeClassにすることができます。HasCauseのDefinitionは以下の通りです。

HasEffect ReferenceType

HasEffect ReferenceTypeは具体的なReferenceTypeであり、直接使用できます。これはNonHierarchicalReferencesのサブタイプです。このReferenceTypeのセマンティクスはTransitionがトリガーされたときに影響を受けるものへのTransitionを指すことです。 このReferenceTypeのSourceNodeは、ObjectTypeTransitionTypeのObjectまたはそのサブタイプの1つである必要があります。 TargetNodeは、任意のNodeClassにすることができます。HasEffectのDefinitionは以下の通りです。

自動遷移

StateMachineの自動遷移の実装は下記の図の通りです。1から3を繰り返すことでMachineStateの自動遷移を可能とします。

基本となる4つのState

基本となる4つのStateと説明は以下の通りです。

State名 説明
Preoperational この状態は電源投入後のシステムの初期状態とリセット後の状態を意味します。ここからシステムを操作可能な状態にする必要があります。MethodのCallのにより動作モードの選択、あるいは停止することもできます。
Halted この状態はシステムの動作の最終状態として意図されています。すべてのリソースは安全な電源切断が可能な状態でなければなりません。ただし、Preoperational状態を経てReset Methodを呼び出すことにより、システムを稼働状態に戻すことができます。
Error この状態はシステムの正常な動作を妨げるエラーの表示と解決を目的としています。
Operational この状態はシステムの通常動作の状態です。常に現在の動作モードをモデリングするSub-State Machineとの複合状態を意味します。この仕様では0で説明される「自動」モードという単一の動作モードのみを説明しています。ベンダーはVisionStateMachineTypeをサブタイプ化し、これらの動作モード用に他のSub-State Machineを追加することで、他の動作モードを追加できます。

4つのStateの関係

4つのStateの関係とMethodは以下の通りです。

推移

"PreoperationalToHalted"推移を例とし、どのように推移がされるのかを説明します。

Transition Objectの情報

BrowseName:“PreoperationalToHalted”
TransitionNumbe:"121“

推移Stateの情報

FromState:"Preoperational“
ToState:"Halted"です。

HasCause

“Halt ()”が定義されています。



これを図にすると下記になります。