StateMachine

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

StateMachineの構成図

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

StateMachineの構成要素

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

StateMachineType

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

CurrentState

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

LastTransition

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

StateVariableType

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

Id

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

Name

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

Number

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

EffectiveDisplayName

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

StateMachine

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

TrasitionVariableType

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

Id

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

Name

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

Number

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

EffectiveDisplayName

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

FiniteStateMachineType

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

CurrentState

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

AvailableStates

AvailableStatesは、StateMachineに存在するStateのNodeIdリストを提供します。 Serverの運用中にリストが変更される場合があります。

AvailableTransitions

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

FiniteStateVariableType

Id

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

FiniteTransitionVariableType

Id

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

StateType

FiniteStateMachineのStateは、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のセマンティクスは、トランジションが開始するStateへのトランジションを指すことです。このReferenceTypeのSourceNodeは、ObjectTypeTransitionTypeのObjectまたはそのサブタイプの1つである必要があります。 このReferenceTypeのTargetNodeは、StateTypeのObjectまたはそのサブタイプの1つである必要があります。FromState ReferenceのDefinitionは以下の通りです。

ToState ReferenceType

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

自動遷移

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

基本となる4つのState

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

State名 説明
Preoperational このStateは電源投入後のシステムの初期Stateとリセット後のStateを意味します。ここからシステムを操作可能なStateにする必要があります。MethodのCallのにより動作モードの選択、あるいは停止することもできます。
Halted このStateはシステムの動作の最終Stateとして意図されています。すべてのリソースは安全な電源切断が可能なStateでなければなりません。ただし、PreoperationalStateを経てReset Methodを呼び出すことにより、システムを稼働Stateに戻すことができます。
Error このStateはシステムの正常な動作を妨げるエラーの表示と解決を目的としています。
Operational このStateはシステムの通常動作のStateです。

4つのStateの関係

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

推移

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

Transition Objectの情報

BrowseName:“PreoperationalToHalted”
TransitionNumbe:"121“

推移Stateの情報

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

HasCause

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



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