【実務・中級編】【上級プロ】アセンブリの運動機構(アニメーション・動作スタディ)のキーフレームをVBAから直接プログラム制御する技術 – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorksモーションスタディを完全掌握せよ:VBAによる「数式駆動型」アニメーション自動生成の極意

SolidWorksのUI上でちまちまとキーフレームをドラッグ&ドロップしているようでは、プロのエンジニアとは呼べない。

複雑なカム機構や、外部の数式モデル(MATLABやExcel等)で最適化された運動データ。これらをアセンブリに流し込み、一瞬で「検証可能なアニメーション」として出力する。これが、我々が目指すべき「アルゴリズム駆動の設計自動化」だ。

今回は、SolidWorks APIの中でも特にドキュメントが少なく、ブラックボックス化されがちな「MotionStudy(動作スタディ)」をVBAから直接叩く技術を伝授する。

—

1. なぜ「手動操作」がエンジニアリングのボトルネックなのか

多くの現場で、モーションの調整は「勘」に頼っている。しかし、設計の品質を担保するのは数値だ。

  • 非効率な点: 手動でキーフレームを打つと、微細なタイミングのズレが解析結果のノイズになる。
  • あるべき姿: 外部データ(CSVや行列)から読み込んだ回転角や変位を、API経由で「指定時間」の「指定値」として注入する。これにより、再現性と検証可能性を完璧に担保する。

—

2. 実装の要諦:MotionStudyManagerを支配する

SolidWorks APIにおいて、モーションスタディは `IMotionStudyManager` を介して制御する。注意すべきは、「スタディはアクティブな状態でないと操作を受け付けない」という制約だ。

堅牢なコード設計のための鉄則

1. エラーハンドリング: `swApp.CommandInProgress` を必ず確認すること。計算中に次のコマンドを投げればSolidWorksは即座にクラッシュする。
2. イベントの同期: キーフレーム追加後は、必ず `MotionStudy.Calculate` を呼び出し、内部状態をフラッシュさせる。

—

3. プロダクションコード:モーター回転角の動的制御

以下のコードは、指定したモーターに対して、外部配列から計算した値をキーフレームとして流し込む実用的なプロトタイプだ。

‘ 伝説的なチーフアーキテクトによるMotionStudy自動化ロジック
Public Sub SetMotorKeyframes()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swMotionMgr As SldWorks.MotionStudyManager
Dim swMotion As SldWorks.MotionStudy

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

‘ 1. スタディマネージャの取得
Set swMotionMgr = swModel.MotionStudyManager
If swMotionMgr Is Nothing Then Exit Sub

‘ 2. 特定のスタディをアクティブに(名前は環境に合わせて変更)
Set swMotion = swMotionMgr.GetMotionStudy(“MotionStudy1”)
swMotion.Activate

‘ 3. モーターのパラメータを制御
‘ 注意: ‘Motor1’という名前はFeatureManager上の名称と一致させること
Dim motorName As String: motorName = “Motor1”
Dim timePoints As Variant
Dim angleValues As Variant

‘ ここでは例として単純な正弦波データを生成
timePoints = Array(0, 1, 2, 3, 4, 5)
angleValues = Array(0, 45, 90, 45, 0, 0) ‘ 度数法

Dim i As Integer
For i = LBound(timePoints) To UBound(timePoints)
‘ キーフレームの注入 (AddKeyFrameは対象フィーチャに対し時間を指定)
‘ 引数: (Time, Value)
swMotion.AddKeyFrame motorName, timePoints(i), angleValues(i)
Next i

‘ 4. 再計算の実行(ここが抜けると反映されない)
swMotion.Calculate

Debug.Print “アニメーション生成完了: ” & Now
End Sub

—

4. 現場で生き残るための「設計の注意点」

データベース連携の罠

外部の数式モデル(ExcelやCSV)からデータを読み込む際、「単位系の不一致」は最大の敵となる。SolidWorks APIは基本的にSI単位系(メートル・ラジアン)で動作する。VBA側で度数法からラジアンへの変換を忘れないこと。

パフォーマンスの最適化

大規模アセンブリでこれを実行する場合、`ModelDocExtension.Rebuild` を多用してはならない。キーフレームを追加するたびにモデルを再構築すると、数分の処理が数時間かかる。`swMotion.Calculate` はあくまで全データの注入が終わった「最後の一回」のみに留めるのが、プロの判断だ。

保守性の担保

モーターの名前(例: `Motor1`)をコードに直書きするのは悪手だ。必ず `Configuration` ごとの設定ファイル(JSONやカスタムプロパティ)から読み出す構造にせよ。コードは「アルゴリズム」を記述する場所であり、「データ」を置く場所ではない。

—

結論:自動化は「設計への愛」である

モーションスタディの自動化は、単なる手抜きではない。それは、設計者が試行錯誤のプロセスをアルゴリズムに昇華させ、より高次元な検証を行うための武器だ。

このコードを叩き台に、君たちの現場で「何度でもやり直せる検証環境」を構築してほしい。不明点があれば、またいつでも聞くといい。エンジニアリングの真髄は、常に「効率の先」にあるのだから。

タイトルとURLをコピーしました