SolidWorksの「動き」をコードで操る:モーションスタディをVBAで完全自動化する極意
こんにちは。SolidWorksの深淵を覗き込み、手作業の限界を突破しようとしているあなたへ。
これまでマクロの記録ボタンを押し、生成された冗長なコードに絶望したことはありませんか?「合致」は単なる固定具ではなく、エンジニアリングにおける「数式の具現化」です。今日は、アセンブリのモーションスタディをVBAから直接制御し、計算された動きをSolidWorks上で再現させる「プロフェッショナルな自動化」の神髄を伝授します。
—
なぜ「モーションスタディ」をコードで操るのか?
手動でタイムラインにキーフレームを打つのは、単純作業であり、かつ「精度」を欠く原因になります。例えば、カムの形状に基づく複雑な回転角や、外部のExcelデータから読み込んだトルク特性を反映させる場合、人間がマウスで操作するのは不可能です。
私たちが目指すのは、「数学モデルをSolidWorksの空間に投影する」ことです。これを実現するために、`MotionStudyManager`という強力なAPIの核心へ踏み込みましょう。
—
1. 準備:APIのライフサイクルを理解する
SolidWorksのアセンブリにおいて、モーションスタディは「ドキュメント」の中にぶら下がっている「オブジェクト」です。以下の階層構造を脳内に叩き込んでください。
1. ModelDoc2: アセンブリ本体
2. MotionManager: モーションの統括コントローラー
3. MotionStudy: 個別のモーションスタディ設定
4. MotionFeature: モーターや力などの要素
これらを適切に呼び出さないと、VBAは「オブジェクト変数またはWithブロック変数が設定されていません」という悲鳴を上げます。
—
2. 実践:モーターの回転角を自動制御するコード
以下のコードは、モーションスタディ内のモーター(サーボモーター)に対して、指定した時間と角度を動的に書き込むための基本形です。
Sub ControlMotionMotor()
Dim swApp As Object
Dim swModel As SldWorks.ModelDoc2
Dim swMotionMgr As SldWorks.MotionManager
Dim swMotionStudy As SldWorks.MotionStudy
‘ SolidWorksに接続
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
‘ モーションマネージャーを取得
Set swMotionMgr = swModel.Extension.GetMotionManager
If swMotionMgr Is Nothing Then Exit Sub
‘ アクティブなモーションスタディをセット(インデックスで指定)
Set swMotionStudy = swMotionMgr.GetMotionStudy(0)
swMotionStudy.Activate
‘ 【重要】ここでキーフレームを挿入する
‘ 時間(秒)と回転角(ラジアン)を指定してプロパティを更新
‘ ※モーター名「ServoMotor1」は、SolidWorksのツリー名と完全に一致させること
Call swMotionStudy.SetMotorProperty(“ServoMotor1”, 2.5, 3.14159) ‘ 2.5秒地点で180度
‘ シミュレーションを再計算させる
swMotionStudy.Calculate
End Sub
このコードの深淵なポイント
- `Calculate`のタイミング: 多くのユーザーがここで躓きます。パラメータを変更しても、最後に`Calculate`メソッドを明示的に叩かなければ、SolidWorks内の物理エンジンは再計算されません。
- 名前の依存性: `SetMotorProperty`に渡す文字列は、ツリー上の名前と完全一致が必要です。ここが動的に変わる場合は、ツリーを探索する再帰関数を別途実装するのが「プロ」の流儀です。
—
3. 陥りやすい罠と解決策
① キーフレームが反映されない
多くの場合、モーションスタディが「アクティブ(Active)」になっていないことが原因です。`swMotionStudy.Activate`を忘れないでください。また、読み取り専用になっているファイルでは計算が保存されません。
② 座標系の罠
APIで指定する角度は、基本的に「ラジアン」です。`Degree (3.14159 / 180)` の変換を忘れると、予期せぬ回転速度でモデルが破壊される(グラフィックス上で)ことがあります。物理シミュレーションを扱う際は、常に単位の整合性を確認してください。
—
4. プロへのステップアップ:ここから先へ
このコードをマスターしたあなたは、もう「マクロの記録」に頼る必要はありません。次に目指すべきは「外部ループとの同期」です。
- Excelの数式と連動: Excelシート上の数値を読み取り、1秒単位のキーフレームを配列として生成し、一気にSolidWorksへ流し込む。
- 最適化アルゴリズム: 特定の動作で干渉しないルートを計算し、その結果をモーションスタディに書き出す。
SolidWorks VBAは単なる作業自動化ツールではなく、あなたの設計構想を検証するための「計算エンジン」です。
「ここをクリアすれば、基本はバッチリ」です。まずはこのコードをコピーして、手元のアセンブリを動かしてみてください。思った通りにモデルが動き出した瞬間、自動化の醍醐味がわかるはずです。
もしコードが動かない?その時は、あなたの頭の中に「どのオブジェクトが足りていないか」という階層図をもう一度描いてみてください。答えは必ずAPIの階層の中にあります。
健闘を祈ります。また次の深い話でお会いしましょう。
