制御連成 — CAE用語解説
制御連成
先生、制御連成(Control Coupling)ってどういう意味ですか? 制御システムとCAEを組み合わせるんですか?
理論と物理
基本概念と支配方程式
制御連成って、具体的に何と何を連成させるんですか?
制御連成(Control Co-Simulation)は、構造や流体などの物理シミュレーション(CAE)と、それを制御するコントローラのシミュレーション(制御モデル)を、時間軸上で連携して解く手法です。例えば、自動車のサスペンションの振動解析(構造力学)と、その振動を抑制するアクティブサスペンションの制御アルゴリズム(制御工学)を同時に解きます。
それぞれの分野で使う方程式が全然違うと思うんですが、どうやって「連成」させるんですか?
良い質問だ。核となるのは「データ交換」と「時間同期」だ。CAE側は通常、2階の微分方程式で表される運動方程式を解く。例えば、
FMIって何ですか?なぜそれが必要なんですか?
FMIは「機能モックアップインターフェース」の略で、モデル交換(FMU)と連成シミュレーション(Co-Simulation)の標準規格だ。Dassault Systèmes、Siemens、Ansysなど主要ベンダーがサポートしている。これがない時代は、各ソフトウェア間で専用のカスタムインターフェースを開発する必要があり、非常にコストがかかっていた。FMI/FMUを使えば、Simulinkで作った制御モデルを、AbaqusやANSYS Mechanicalと比較的容易に連成させられる。
数値解法と実装
離散化とソルバー設定
連成シミュレーションでは、CAE側と制御側で使う時間刻み(Δt)は同じにしないといけないんですか?
必ずしも同じである必要はないが、適切に設定する必要がある。一般的に、制御側(例えば、Simulink/Stateflow)の方が応答が速いため、より細かい時間刻みを必要とする。CAE側の構造解析が10ms刻みでも、制御ループは1ms刻みで動作することが多い。この場合、マスタープロトコル(例:FMI for Co-Simulation)で、制御側を「マスター」とし、10回の制御計算ごとに1回、CAEソルバーに変位を送信し、力を取得する、といった通信間隔(通信ステップサイズ)を設定する。
通信ステップサイズを粗くすると、計算は速くなりますが、精度は落ちますか?
その通りだ。特に、制御力が急激に変化する場合や、構造系の高周波数成分に制御が関与する場合、通信ステップが粗すぎると不安定(発散)に陥るリスクが高まる。経験則として、制御系の帯域幅が
連成計算で「発散」した場合、CAEソルバーと制御ソルバー、どちらの設定を疑えばいいですか?
まずは「全体のエネルギー収支」を考える。CAE側の減衰(ダンピング)設定が不十分で、制御から入力されるエネルギーが全て構造系に蓄積され、発散することが多い。具体的には、ANSYS Mechanicalで構造に比例ダンピング(Rayleigh Damping)を設定する場合、質量マトリクス係数αと剛性マトリクス係数βを見直す。一方、制御側では、過大な比例ゲイン(Pゲイン)が発散の原因となる。まずは制御ゲインを極端に小さく(またはゼロに)してCAE単体の減衰振動を確認し、そこからゲインを上げていく「チューニング」作業が基本だ。
実践ガイド
ワークフローとチェックリスト
制御連成解析を初めてやる場合、どの順番で進めれば失敗が少ないですか?
確立されたワークフローがある。1) **単体検証**: CAEモデル(制御力なし)と制御モデル(ダミー入力)をそれぞれ独立で動作確認。2) **オープンループ連成**: 制御ゲインをゼロに設定し、単にセンサ信号(変位等)をCAEから制御側に流し、制御出力をモニタするだけ。通信が成立するか確認。3) **閉ループ連成(ゲイン極小)**: 非常に小さなPゲインから開始。4) **チューニング**: ゲインを上げながら応答を確認。5) **過酷条件テスト**: 外乱やノイズを加えてロバスト性を確認。このステップを飛ばすと、いきなり発散して原因究明に時間がかかる。
単体検証でCAEモデル側で特に確認すべきポイントは?
主に3点だ。第一に、制御力が作用する「入力点」と、センサ信号を読み取る「出力点」の自由度が正しく定義されているか。例えば、アクチュエータがZ方向の力のみを発生するなら、その節点のZ方向自由度だけを入力点として登録する。第二に、モデルの固有振動数。制御帯域の10倍以上の高周波モードは、ソルバー設定でフィルタリング(モード打ち切り)するか、減衰を大きくする。第三に、質量マトリクスと剛性マトリクスのスケーリング。単位系(N, mm, ton)を統一しないと、制御ゲインのスケールがおかしくなる。
制御側(Simulinkなど)のモデルで、連成用に気をつける設定は?
まず、ソルバー種類を「固定ステップ」に設定すること。可変ステップソルバーは連成に基本的に使えない。次に、離散化ブロックのサンプル時間を、先述の通信ステップサイズと一致または整数分の一に設定する。また、CAEからの信号には数値的なノイズが乗ることを想定し、必要に応じて一次遅れフィルタ(時定数1-5ms)を入れる。最後に、出力される制御力に「飽和(リミッタ)」を必ず設けること。計算上の暴走で非現実的な巨大な力がCAEモデルに送られ、モデルを破壊するのを防ぐ。
ソフトウェア比較
主要ソフトウェアの実装方法
AnsysとSimulinkを連成させる具体的な方法を教えてください。
Ansys 2020R1以降では、「Ansys Twin Builder」が標準的な連成プラットフォームだ。手順は、1) ANSYS Mechanicalで解析システムを作成し、入力力と出力変位を定義。2) Workbench内で「Twin Builder」システムを追加し、Mechanicalシステムと接続。3) Twin Builder内で、FMI/FMU形式でエクスポートされたSimulink制御モデルをインポートし、信号線で接続。4) 連成設定(通信ステップ=0.001秒等)を行い実行。あるいは、より直接的に「MATLAB ACT Extension」を使い、Mechanical APDLスクリプト内からMATLABエンジンを呼び出す方法もあるが、設定は複雑だ。
Abaqusではどうやって実現するんですか?Simulinkとの連成は簡単ですか?
Abaqusには「共同シミュレーション(Co-simulation)」機能が標準である。Abaqus/StandardまたはExplicitがCAEソルバーとして、Simulinkが制御ソルバーとして動作する。設定はAbaqus CAEの「相互作用」モジュールで「共同シミュレーション」を作成し、制御モデル(.dllまたはFMU)を指定する。Dassault Systèmesは「SIMULIA Co-simulation Engine」というツールも提供しており、より複雑な連成(3つ以上のソルバー)を管理できる。ただし、SimulinkモデルをFMUにエクスポートするには、Simulink Coderのライセンスが必要なので注意だ。
COMSOL Multiphysicsは「マルチフィジックス」が売りですが、制御連成も得意なんですか?
COMSOLのアプローチは少し異なる。外部ソフトウェアとの連成(FMI)も可能だが、COMSOL自体に「ODE/DAEインターフェース」や「イベント」機能があり、単一環境内で制御方程式を直接記述・連成できる点が強みだ。例えば、PIDコントローラの微分方程式を「係数型偏微分方程式」インターフェースで定義し、構造力学インターフェースと直接カップリングできる。これにより、データ交換のオーバーヘッドがなく、より密な連成が可能だ。ただし、複雑な状態機械(Stateflow)や既存の制御ライブラリを使いたい場合は、外部連成(FMI)を選ぶことになる。
トラブルシューティング
よくあるエラーと対策
連成計算が、ある特定の時間ステップで突然停止し、「ソルバーが収束しない」というエラーが出ます。どう対処すればいいですか?
これは典型的な連成不安定の問題だ。まず、エラーが発生する直前の時間ステップのデータを出力させよう。Ansysなら「Restart」ファイル、Abaqusなら「.sta」や「.msg」ファイルを確認する。制御力や変位が物理的にあり得ない値(NaNや1e10など)に飛んでいないかチェックする。対策としては、1) 通信ステップサイズを半分にする。2) CAEソルバーの収束判定(許容誤差)を一時的に緩和する。3) 制御出力に低域通過フィルタを追加し、高周波成分をカットする。根本的には、制御ゲインが高すぎる可能性が最も高い。
計算は最後まで回るのですが、結果の振動が「カクカク」した不自然な階段状になります。これはなぜですか?
それは「エイリアシング」または「通信ステップが粗すぎる」現象だ。制御側の出力が、通信ステップ間で保持(Zero-Order Hold)されるため、力の値が階段状に更新される。CAE側がその不連続な力を入力として受け取るため、応答も滑らかにならない。対策は二つ。第一に、通信ステップを細かくする。第二に、制御側で「出力補間」オプションを有効にする。FMI for Co-Simulation 2.0では、FMUが通信ステップ間の出力値を補間する機能をサポートしている。使用するFMUがこの機能に対応しているか確認し、有効にすれば大幅に改善される。
SimulinkモデルをFMUにエクスポートしてAbaqusと連成させたところ、「バージョンが互換性がない」というエラーが出ました。
FMI/FMUのバージョン管理は重要なポイントだ。まず、エクスポートするFMIのバージョン(1.0, 2.0, 3.0)と、Abaqusがサポートするバージョンを確認する。Abaqus 2022まではFMI 2.0が標準だ。Simulinkの「FMUエクスポート」設定で、ターゲットバージョンを2.0に明示的に指定する。また、「プラットフォーム」設定(win64, linux64)も一致させる。さらに、32bit/64bitの不一致もよくある原因だ。Abaqusが64bit版なら、Simulinkからも64bit用のFMUをエクスポートする必要がある。ベンダー間連成では、最も共通性の高いFMI 2.0 for Co-Simulationを選ぶのが無難だ。
関連トピック
なった
詳しく
報告