機械設計 #52:State machine — 機械全体のBehaviorを一つのStepNoに入れない
PLCにはStepNoというVariableがあります。最初は単純なSequenceでも、Mode、Output、Timer、Fault、Retry、HMI、Restartまで一つの数値へ集まりがちです。
StepNoが悪いのではなく、Contractがないことが問題です。
Modeは使われ方、Stateは現在の事実、StepはState内の作業、TransitionはBehaviorが変わる理由を定義する。
1. StepNoではなくContractが重要
Scope、Entry、Exit、Output、Timeout、Fault、Restartが明確なら番号も使えます。Automatic、Manual、Recovery、MaintenanceでStepNo=40の意味が変わるとFragileになります。
2. Mode、State、Stepを分ける
ModeはAutomatic、Manual、Setup、Maintenance、Simulation、Recovery、Safe stopなどOperating contextです。StateはIdle、Ready、Loading、Processing、Unloading、Hold、Fault、Complete、Waitingです。StepはCylinder extend、Feedback待ち、Carrier transfer、Result確認、Data saveなどBounded activityです。
3. Stateが答える六つの問い
意味は何か、Entryで何が真か、どのOutputを所有するか、Insideで何をするか、どのEventでExitするか、Timeout、Invalid event、Stop、Fault、Restartで何をするかを定義します。答えられないStateはLabelであってDesign contractではありません。
4. State nameよりInvariant
ClampはPartを支えずに開かない、Person access中にRobot zoneへ入らない、ToolingとRecipeが合わなければRunしない、Complete resultは一つのTransactionへ属する、というInvariantをStateをまたいで守ります。名前だけでは保護できません。
5. TransitionはContract
Source、Target、Trigger、Guard、Action、Priority、Invalid-event behaviorを決めます。Carrier IDがAccepted、Tooling compatible、Guard closed、Receiving sensor validならReceivingからProcessingへ移ります。Stale signalやTimeout時の動作も書きます。
6. 隠れたPriorityをなくす
CompleteとFault、StopとReset、AbortとRetryが同時に真になることがあります。どのTransitionが勝つかを明記し、選択結果をLogします。PLC Scan順やIFの並びを未記録のPolicyにしません。
7. Entry、Do、Exit action
EntryでTimer、Output owner、Transaction、Traceを初期化します。DoではFeedback、Timeout、Quality、Faultを監視し、One-time commandを毎Scanで繰り返しません。ExitでOwnerを解放し、Resultを保存し、一時CommandをClearし、次Stateが前提とする条件を残します。
8. HierarchyでState explosionを減らす
Safe、Ready、Executing、RecoveringをSuperstateにまとめ、継承とOverrideを定義します。重複を減らしてもSafetyやRecovery条件を隠さないことが重要です。
9. ConcurrencyにはCoordinationが必要
Material transferとInspection、Robot motionとFixture preparationが並行するなら、共有Resource、Owner、Sync、Interlock、Cancel、Completeを定義します。Global StepNo一つでは安全に表せません。
10. Mode changeは条件付きTransition
AutomaticからManual、ProductionからMaintenanceへ移る時、安全Boundary、Output処理、Permission、Reconciliationを持たせます。Work in progressをHold、Cancel、Complete、Rejectのどれにするかを書き、一つのBitだけでModeを変えません。
11. Stop、Hold、Abort、Fault、Complete
Stopは制御された停止、HoldはContextを保った一時停止、AbortはTransactionを取消す中断、FaultはDiagnosisとRecoveryが必要な異常、CompleteはResultとEvidenceが利用可能な状態です。HMIとInterfaceで同じ意味を使います。
12. Startup/RestartでPhysical stateとReconcile
Power loss後、SoftwareはProcessingでもCarrierがなくActuatorが途中かもしれません。Sensor、Drive、Tooling、Recipe、Safety、Transaction IDを確認し、矛盾があればReconciliation/Safe recoveryへ入ります。
13. State observabilityはRequirement
Current Mode、State、Step、Transition reason、Owner、Timer、Transaction、Fault、Recovery instruction、Last valid eventを表示します。保全担当がDebuggerなしでWaiting理由を知れることが必要です。
14. IEC 61131-3は実装を助けるがArchitectureではない
Structured Text、SFCなどは実装手段です。正しいState、Invariant、Owner、RecoveryはRequirementとRiskから設計します。
15. IEC 61512/ISA-88とPackML
ModeとStateの共通語として使えますが、実際のMachine、Product、Interface、Safety、MaintenanceへMappingし、Templateをそのままコピーしません。
16. Pick–transfer–placeの例
Ready → Pick → Transfer → Place → Verify → Completeを基本とし、Hold、Abort、Fault、Recoverを条件付きで使います。Pick confirmation前はRobotがCarrierを所有せず、Place verification前にFixtureを解放せず、Recipe IDをTransactionへ保持します。Position feedbackがなければFaultで保持し、Restart時にRobot、Gripper、Carrier、Recipe、TransactionをReconcileします。
17. Verification matrix
各StateとTransitionについて、Entry、Normal、Timeout、Invalid event、Stop、Hold、Abort、Fault、Recovery、Mode change、Power loss、Reconnect、Product variant、Operator roleをTestし、InvariantとEvidenceへリンクします。
18. State machine review checklist
- [ ] Mode、State、Stepの意味を分けた。
- [ ] Entry、Do、Exit、Timeout、Fault、Restartを持つ。
- [ ] Invariantを明記して試験した。
- [ ] TransitionにTrigger、Guard、Action、Priority、Invalid eventがある。
- [ ] Output ownerが明確である。
- [ ] HierarchyとConcurrencyがSafety/Recoveryを隠さない。
- [ ] Stop、Hold、Abort、Fault、Completeを分けた。
- [ ] Mode changeにSafe boundaryとReconciliationがある。
- [ ] Restart時にSoftwareとPhysical stateを照合する。
- [ ] Waiting/Faultの理由をObservabilityへ出す。
- [ ] Normal、Abnormal、Restart、CompositionをVerificationした。
まとめ
Mode、State、Step、Transition、Invariant、Owner、Recoveryを明示すれば、Behaviorをレビューできます。StepNoは実装Detailとして残せますが、機械唯一のContractにしません。
State設計のRevision、Owner、Test evidence、保全指示も同じBaselineへ保存します。
公開参考資料
19. State transitionのTrace
Transitionを選んだ理由、Guardの値、Priority、Owner、Timer、Transaction、Fault、Operator actionを同じTraceへ保存します。最後のStateだけでは、なぜ遷移し、なぜ待ち、なぜRecoveryへ入ったかを説明できません。正常と異常の両方で、State、Signal、Physical condition、Data versionを比較できる記録にします。
20. Restart rehearsal
Power loss、Controller restart、Network reconnect、HMI再起動、Sensor欠落、途中で人が介入した場合を管理された環境で試します。Software stateがPhysical stateと違う時に、Safe state、Reconcile、Operator確認、Cancel、Resumeのどれを選ぶかを、State machineと作業指示へ揃えます。
21. Mode間のOutput ownership
AutomaticがCylinderを保持している時にManualが同じOutputを書き換えないよう、ModeごとのOwner、許可、Release、Handoverを定義します。Maintenanceで強制したOutputは、Productionへ戻る前にClear、状態確認、Safety確認、試運転を必要とすることがあります。
22. State machineとInterface
外部StationへCommand、State、Resultを送る時、自機のStateと相手のTransactionが同じ意味を持つかを確認します。Completeを送った後に内部がまだVerification中なら、Interface contractとState architectureが矛盾しています。CompositionでStateとHandshakeを一緒にTestします。
23. State設計を保全へ引き渡す
保全担当にはStateの意味、Entry condition、Output、Timeout、Fault、Recovery、Manual action、Evidenceを伝えます。画面に番号だけを表示せず、状態、遷移理由、次の安全な確認、Reset権限、保存すべきLogを示します。
- IEC 61131-3:2025 — Programmable controllers: https://webstore.iec.ch/en/publication/68532
- IEC 61512 — Batch control: https://webstore.iec.ch/en/publication/6030
MINATAの技術記事をすべて見る