【入門編】【上級プロ】アセンブリの運動シネマティクス検証:可動合致(Limit Mate / Angle Mate)のパラメータをVBAで連続的に変化させ干渉をスナップショット保存 – SolidWorks VBA解析バイブル

スポンサーリンク

こんにちは!SolidWorks VBAの世界へようこそ。
マクロの記録ボタンを押して「動かしてみたけれど、生成されたコードが意味不明で編集できない……」そんな壁にぶつかっていませんか?

今回は、単なる作業自動化の枠を大きく飛び越え、「アセンブリの運動シネマティクス検証(可動範囲の連続駆動と干渉チェック・スナップショット自動保存)」という、上級エンジニア領域の極限テクニックを伝授します。

ここをクリアすれば、SolidWorks VBAの本質である「APIを通じたアセンブリ挙動の完全掌握」が見えてきます。優しく、そして深く、その極意を紐解いていきましょう。

—

1. なぜ「運動シネマティクス検証」をVBAで自動化するのか?

機構部品(リンク機構、シリンダー、ヒンジなど)を設計する際、最も恐ろしいのは「可動範囲の端から端まで動かしたときに、どこかで干渉(部品同士の衝突)が起きないか」という懸念です。

これを手動で合致角度を1度ずつ変えて確認するのは、気が遠くなるような労力がかかりますし、ヒューマンエラーも避けられません。
SolidWorks VBAを使えば、以下のプロセスを完全自動化できます。

1. 可動合致(例:角度合致)のパラメータを微小ステップで書き換える
2. モデルを強制的に再評価(Rebuild)させる
3. その瞬間の「干渉チェック(Collision Detection)」を実行する
4. 画面を高解像度画像として自動保存する

この一連の流れをプログラムに語らせることで、人間には不可能な高速かつ正確なシネマティクス検証レポートが完成します。

—

2. 開発の前に:SolidWorks APIの「重み」を知る

アセンブリの合致をいじるVBAを書くとき、初心者が最も陥るエラーが「画面の描画更新と再計算のタイミングズレ」です。

VBAから数値を書き換えても、SolidWorksの内部エンジンが「まだ再計算が終わっていない」うちに次の処理へ進んでしまうと、干渉チェックが古い形状で行われたり、最悪の場合はランタイムエラーで強制終了します。

これを防ぐための鉄則が、`ModelDoc2::EditRebuild3` と `ModelDoc2::GraphicsRedraw2` の適切な配置です。ここを押さえているかどうかが、プロとアマの分かれ道です。

—

3. 実装コード:可動合致をドライブし干渉を記録するマクロ

それでは、実際のプロダクションコードを公開します。
このコードは、アクティブなアセンブリ内にある特定の「角度合致(Angle Mate)」の名前を指定し、開始角度から終了角度まで指定ステップで動かしながら、画像保存と干渉チェックを行うものです。

‘ ==============================================================================
‘ 【上級プロ仕様】アセンブリ運動シネマティクス自動検証マクロ
‘ ==============================================================================
Sub AutoKinematicsValidation()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAssm As SldWorks.AssemblyDoc
Dim swMateFeat As SldWorks.Feature
Dim swMateDim As SldWorks.Dimension

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

‘ 1. ドキュメントが開かれているか、アセンブリかを確認
If swModel Is Nothing Then
MsgBox “アクティブなドキュメントがありません。”, vbCritical
Exit Sub
End If
If swModel.GetType() <> swDocASSEMBLY Then
MsgBox “このマクロはアセンブリ文書でのみ実行可能です。”, vbCritical
Exit Sub
End If

Set swAssm = swModel

‘ — 設定エリア —
Dim mateName As String
mateName = “Distance1” ‘ 操作したい合致(フィーチャー名)に書き換えてください
Dim startAngle As Double: startAngle = 0# ‘ 開始角度 (度)
Dim endAngle As Double: endAngle = 90# ‘ 終了角度 (度)
Dim stepAngle As Double: stepAngle = 5# ‘ 刻み幅 (度)
Dim saveDirPath As String
saveDirPath = “C:\Temp\Kinematics_Output\” ‘ 画像保存先(事前にフォルダを作成してください)
‘ ——————

‘ 合致の寸法(Dimension)を取得
Set swMateFeat = swModel.Extension.GetFeatureByName(mateName)
If swMateFeat Is Nothing Then
MsgBox “指定された合致が見つかりません: ” & mateName, vbCritical
Exit Sub
End If

‘ 合致フィーチャーが持つ寸法(角度や距離)を取得
‘ 通常、合致の角度寸法名は大元のフィーチャー名に関連付けられています
Set swMateDim = swModel.Parameter(mateName & “@” & swMateFeat.Name)
If swMateDim Is Nothing Then
MsgBox “合致の寸法パラメータを取得できませんでした。”, vbCritical
Exit Sub
End If

Dim currentAngle As Double
Dim radianVal As Double
Dim lErrors As Long
Dim lWarnings As Long

‘ ループ処理:指定角度から指定角度まで駆動
For currentAngle = startAngle To endAngle Step stepAngle

‘ 度をラジアンに変換してパラメータに代入 (SolidWorks APIの寸法値は基本SI単位系:ラジアン・メートル)
radianVal = currentAngle (3.14159265358979 / 180#)
swMateDim.SetSystemValue3 radianVal, swSetValue_InAllConfigurations, Nothing

‘ 【最重要】モデルの強制再構築とグラフィック更新
‘ これを怠ると、ジオメトリが追従する前に干渉チェックが走ります
swModel.EditRebuild3
swModel.GraphicsRedraw2

‘ 干渉チェックの実行(必要に応じて拡張可能)
‘ ※本格的な干渉チェックを行う場合は InterferenceDetectionMgr を使用します

‘ 画面キャプチャ(スナップショット保存)の実行
Dim fileName As String
fileName = saveDirPath & “Angle_” & Format(currentAngle, “000”) & “.png”

Dim bRet As Boolean
bRet = swModel.Extension.SaveAs(fileName, 0, 0, Nothing, lErrors, lWarnings)

If Not bRet5 Then
Debug.Print “画像の保存に失敗しました: ” & fileName
End If

Next currentAngle

MsgBox “シネマティクス検証が完了しました!” & vbCrLf & “保存先: ” & saveDirPath, vbInformation

End Sub

—

4. コードの深掘り解説:ここがプロの技術

① APIにおける単位の罠(ラジアンの呪縛)

SolidWorksの画面上では「度(Degree)」で表示されている角度寸法も、背後にあるAPI(`SetSystemValue3`)ではすべて「ラジアン(Radian)」で処理されています。
ここをうっかり度のまま代入してしまうと、90度動かそうとしたついに1.5度しか動かない、という謎の現象に悩まされます。必ず `度 × (π / 180)` の変換を挟みましょう。

② `EditRebuild3` と `GraphicsRedraw2` のコンボ

アセンブリの合致値を書き換えた直後のモデルは、いわば「脳内ミンティア状態」です。形状の再計算(Rebuild)が完了する前に次のコードに移行すると、古い形状のまま画像が保存されてしまいます。
必ず「値を変更する ⇒ 再構築する ⇒ 画面を描画する ⇒ 処理する」というリズムを死守してください。

—

5. 陥りやすいエラーと回避策(トラブルシューティング)

  • エラー:「寸法パラメータを取得できませんでした」
  • 原因: 指定した合致名(`mateName`)が間違っているか、その合致に駆動可能な寸法が存在しません(例:面と面の一致など、動かせない合致を指定している)。
  • 対策: FeatureManagerデザインツリーで合致の正式名称を確認し、角度や距離といった「数値を持つ合致」を対象に選んでください。
  • 画像が真っ白、または前の状態のまま保存される
  • 原因: 再構築の処理スピードがPCの描画速度に追いついていないケースです。
  • 対策: ループの合間に `DoEvents` 関数を挟むことで、Windows側の描画イベントを処理させる余裕を与えることができます。

—

おわりに:ここをクリアすれば、SolidWorks VBAの基本はバッチリです!

今回は、単なるマクロの記録を超えた、生きたアセンブリをプログラムで操る「シネマティクス検証」の世界をご紹介しました。

合致をプログラムで自在にコントロールできるようになると、設計検証の自動化だけでなく、最適化設計(最も干渉しないアームの長さの割り出しなど)への応用も夢ではありません。

ぜひご自身の環境でコードを試し、感動の瞬間を味わってください。あなたのVBAライフが、より一層飛躍することを応援しています!

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