【入門編】【実務中級】距離合致と角度合致のパラメータを連動させ、機構の限界位置(ストローク端)まで自動でステップ移動させるシミュレーション補助 – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks VBAの極意:機構シミュレーションを「手動」でやるのは今日で卒業!

こんにちは。設計現場の自動化を極める皆さんに、今日は少し踏み込んだ「機構検証」の自動化についてお話しします。

「あのアーム、ストローク端で干渉しないかな?」「今の設計、全可動域で寸法異常が出ないか不安だな……」
そんな時、マウスでぐりぐり動かしてスクリーンショットを撮る……そんな時代はもう終わりです。SolidWorks APIを使えば、「機構の限界位置まで自動でステップ移動し、各ポイントで完璧な検証を行う」という究極の効率化が可能です。

今日は、マクロの記録を卒業し、SolidWorksの「API」を直接叩くプロの世界へ皆さんを招待しましょう。

—

1. なぜ「合致」の操作が重要なのか?

SolidWorksの合致(Mate)は、単なる固定ではありません。「寸法値を持つオブジェクト」です。
APIの世界では、合致は `Mate2` オブジェクトとして扱われます。このプロパティをVBAから直接書き換えることで、SolidWorksの計算エンジンを強制的に再実行(Rebuild)させ、機構を動かすことができるのです。

陥りやすい罠:なぜ「マクロの記録」では動かないのか?

多くの初心者が「マクロの記録」ボタンを押して合致を編集しますが、生成されるコードは「どの合致を触ったか」が非常に曖昧です。
現場で使うコードは、「名前で合致を特定し、その値を直接書き換える」という、堅牢な手法(ロバスト設計)である必要があります。

—

2. 実装のステップ:機構シミュレーション・オートメーション

今回のコードでは、以下の流れで検証を行います。

1. 対象の合致を名前で取得する。
2. ループ処理で値を少しずつ変更する。
3. `ForceRebuild3` メソッドでアセンブリの形状を更新する。
4. 画面のスクリーンショットを自動保存する。

機構自動検証用マクロ(コピペして使えます)

‘ SolidWorks API を使用した機構検証用自動化スクリプト
Sub AutoMoveMechanism()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAssy As SldWorks.AssemblyDoc
Dim swMate As SldWorks.Feature
Dim swDim As SldWorks.Dimension

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

‘ 1. 合致の取得(名前で特定するのがコツ)
‘ ※あらかじめSolidWorks上で合致名を「StrokeMate」等に変更しておくと便利です
Set swMate = swAssy.FeatureByName(“StrokeMate”)
Set swDim = swMate.GetSpecificFeature2.GetDimension

‘ 2. シミュレーションのパラメータ設定
Dim startVal As Double: startVal = 10 ‘ 開始位置 (mm/deg)
Dim endVal As Double: endVal = 100 ‘ 終了位置
Dim stepVal As Double: stepVal = 10 ‘ ステップ量
Dim i As Double

‘ 3. ループ処理による自動移動
For i = startVal To endVal Step stepVal
‘ 値を書き換える(メートの寸法値を更新)
swDim.SetValue3 i, swSetValue_InBothConfigs, Empty

‘ 4. アセンブリの強制再構築
swModel.ForceRebuild3 False

‘ 5. スクリーンショット保存(適宜パスを変更してください)
swModel.Extension.SaveAs “C:\Temp\Mechanism_Pos_” & i & “.jpg”, _
swSaveAsVersion_CurrentVersion, swSaveAsOptions_Silent, Nothing, 0, 0

DoEvents ‘ 処理落ちを防ぐための小休止
Next i

MsgBox “検証完了!”
End Sub

—

3. このコードが「プロ仕様」である理由

① `FeatureByName` の重要性

「マクロの記録」で生成されるコードは、クリックした順番に依存します。しかし、`FeatureByName` を使えば、たとえ設計変更でフィーチャーの順序が変わっても、名前さえ同じなら確実に合致を操作できます。

② `ForceRebuild3` の魔法

SolidWorksは「再構築」ボタンを押すまで、内部的な整合性を保たないことがあります。`ForceRebuild3` は、API経由で「今すぐ計算し直せ!」と強制的に命令を送るメソッドです。これを忘れると、画面上は動いていないのにコードだけが進むという悲劇が起こります。

③ `DoEvents` という気遣い

ループ処理中にSolidWorksがフリーズしたように見えるのは、Windowsのメッセージ処理が追いついていないからです。`DoEvents` を入れることで、OSとの対話を行い、動作を安定させます。

—

4. 次へのステップ:君ならどう応用する?

このマクロを使えば、単にスクリーンショットを撮るだけでなく、以下のような検証も可能です。

  • 干渉チェックの自動化: `swModel.Extension.CreateInterferenceDetectionManager` を使って、各ステップで干渉があればログに出力する。
  • 質量特性の取得: 各位置での重心位置の変化をExcelに書き出す。

プログラミングは、単にコードを書くことではありません。「SolidWorksのエンジンの特性を理解し、そのポテンシャルを最大限に引き出すこと」です。

まずはこのコードを走らせて、アームが動く様子を眺めてみてください。それが、皆さんの自動化エンジニアとしての第一歩です。何か分からないことがあれば、またいつでも聞いてください。応援していますよ!

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