【入門編】【実務中級】アセンブリ内の全ボルト締結部品の長さを自動計測し、適切な座金・ナットの組み合わせを判定するバリデーション – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks VBA極限攻略:自動ボルト締結バリデーターで設計ミスをゼロにする

こんにちは。設計現場の「自動化」という名の聖域を守るチーフアーキテクトです。

「マクロの記録」ボタンを押して生成された、冗長で不安定なコードに頼るのは今日で終わりにしましょう。実務で求められるのは、「設計意図をコードで解釈し、論理的な裏付けを持って品質を担保する」というエンジニアリングです。

今回は、アセンブリ内のボルト締結を自動検証する「バリデーション・マクロ」の核心部分を伝授します。これさえ理解すれば、あなたはもう「SolidWorksを操作する人」から「SolidWorksを制御するエンジニア」へと進化できます。

—

1. なぜ「自動バリデーション」が必要なのか?

手動でボルトの突き出し量を計算していませんか?

  • 「板厚が変わったのにボルト長を更新し忘れた」
  • 「座金を入れ忘れて、ネジの掛かりが浅い」

これらは単純なミスですが、製造現場では致命的な手戻りを招きます。プログラムは疲れません。 境界条件(板厚・穴深さ)さえ定義すれば、全部品を一瞬でスキャンし、不適合な締結箇所をログに出力する。これが設計自動化の真髄です。

—

2. 構造を理解する:アセンブリ探索の「作法」

SolidWorks APIでは、アセンブリ内の部品を「構成部品(Component)」として扱います。ここで重要なのは、「ルートコンポーネントから再帰的に潜り込む」というアルゴリズムの基本です。

陥りやすい罠:再帰処理と型定義

初心者がやりがちなのは、アクティブなドキュメントを直接触り続けることです。APIでは `IComponent2` を通じて各部品の幾何情報(Geometry)へアクセスします。特に、部品の「長さ」を測るには、単純なバウンディングボックスではなく、穴の深さや板厚といった「フィーチャー情報」にアクセスする視点が不可欠です。

—

3. 実践コード:ボルト締結バリデーターの核心

以下のコードは、アセンブリ内の全コンポーネントを巡回し、特定のプロパティを持つ部品の厚みを判定するプロトタイプです。

‘ SolidWorks API を使用した締結バリデーションの核心
Sub ValidateBoltFastening()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAssy As SldWorks.AssemblyDoc

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

If swModel.GetType <> swDocASSEMBLY Then
MsgBox “アセンブリを開いてください。”
Exit Sub
End If

‘ ルートコンポーネントから再帰的に探索を開始
Dim swRootComp As SldWorks.Component2
Set swRootComp = swModel.ConfigurationManager.ActiveConfiguration.GetRootComponent3(True)

TraverseComponents swRootComp
End Sub

‘ 再帰関数:コンポーネントを深掘りする
Sub TraverseComponents(swComp As SldWorks.Component2)
Dim vChildren As Variant
vChildren = swComp.GetChildren

If IsEmpty(vChildren) Then Exit Sub

Dim i As Long
For i = 0 To UBound(vChildren)
Dim swChild As SldWorks.Component2
Set swChild = vChildren(i)

‘ ここで部品のカスタムプロパティや寸法をチェック
‘ 例:部品名に「Bolt」が含まれるか判定
If InStr(swChild.Name2, “Bolt”) > 0 Then
Debug.Print “検知されたボルト: ” & swChild.Name2
‘ 実際の締結判定ロジックをここに実装
‘ ValidateThickness swChild
End If

‘ 階層が深い場合も想定して再帰呼び出し
TraverseComponents swChild
Next i
End Sub

コードの解説

  • 再帰呼び出し (`TraverseComponents`): アセンブリはツリー構造です。サブアセンブリの中にさらにサブアセンブリがある場合、この関数は自分自身を呼び出すことで、深さを問わず全ての部品を網羅します。
  • 型定義 (`SldWorks.Component2`): `Object`型で済ませず、明示的に型を指定してください。IDEのインテリセンスが効くようになり、タイプミスが激減します。

—

4. 現場で生き残るための「プラスアルファ」

このマクロを実務レベルに引き上げるには、以下の3点を意識してください。

1. エラーハンドリング: `On Error Resume Next` で誤魔化すのは初心者の証です。エラーが発生した時に「どの部品で、何が起きているのか」をイミディエイトウィンドウに吐き出すようにしましょう。
2. カスタムプロパティの活用: 部品側に「板厚(Thickness)」というカスタムプロパティを持たせておくと、APIからの読み取りが劇的に高速化します(ジオメトリ解析は計算コストが非常に重いため)。
3. 座金の判定: 座金の有無は、コンポーネントの「構成部品の状態(抑制/非抑制)」をチェックすることで判定可能です。

—

最後に:自動化の先にあるもの

「マクロを組んで楽をする」のではなく、「マクロによって設計の品質基準を底上げする」という視点を持ってください。今回紹介したコードは、言わば「設計の守護神」の第一歩です。

ここから、計測値をCSVに書き出すのか、不適合な部品を赤色にハイライトするのか、発展させるのはあなた次第です。不明な点があれば、いつでもこの極限の技術ブログに戻ってきてください。

あなたの挑戦を、心から応援しています。設計自動化の世界へ、ようこそ。

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