【実務・中級編】【質量特性の高度な活用】IMassProperty2による慣性モーメント・主軸方向の自動算出と設計検証 – SolidWorks VBA解析バイブル

スポンサーリンク

質量特性の深淵:IMassProperty2で「設計の重心」を支配する

SolidWorks APIを触り始めたエンジニアの多くが、`GetMassProperties`という文字列に一度は辿り着く。しかし、多くのコードは「重量を取得して終わり」という表層的な実装に留まっている。

いいか、我々が扱うのは単なる「重さ」ではない。製品の回転バランス、振動特性、そして構造解析の精度を左右する「慣性テンソル」だ。これをExcelと直結させ、設計検証のサイクルを自動化することこそ、エンジニアとしての真の生存戦略である。

今日は、中途半端な実装を卒業し、プロダクション環境で耐えうる「堅牢な質量特性抽出エンジン」の書き方を伝授する。

1. なぜ「雑な実装」が破綻するのか

多くのプログラマが犯す過ちは、`ModelDoc2.GetMassProperties`を安易に叩くことだ。
APIの裏側では、複雑なB-Repの計算が走る。「モデルの再構築(Rebuild)が完了しているか」「コンフィギュレーションは正しいか」「抑制された部品はないか」。これらを意識せず、単にAPIを呼び出すだけでは、設計変更のたびに「前回の計算値」という名の亡霊がExcelに書き込まれることになる。

堅牢な設計のための3原則

1. 強制再構築(ForceRebuild): 計算前に必ずドキュメントの整合性を保証する。
2. キャッシュの無効化: `IMassProperty2`オブジェクトを生成する際は、常に最新の幾何学情報を強制的に計算させる。
3. エラーハンドリング: 計算不能な異常形状(ゼロ体積等)を事前に弾く。

2. 実装コード:慣性テンソルと主軸計算の決定版

以下のコードは、アクティブなドキュメントから質量特性を抽出し、慣性テンソルおよび主軸方向を算出する高精度なモジュールだ。これを標準モジュールに配置せよ。

Option Explicit

‘ 質量特性抽出のメインプロシージャ
Public Sub ExportMassPropertiesToExcel()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swMassProp As SldWorks.IMassProperty2
Dim vInertia As Variant
Dim swEqMgr As SldWorks.EquationMgr

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

If swModel Is Nothing Then Exit Sub

‘ 1. 計算前に強制再構築 (重要: 計算精度を担保する)
swModel.ForceRebuild3 False

‘ 2. 質量特性オブジェクトの生成
Set swMassProp = swModel.Extension.CreateMassProperty
swMassProp.UseSystemUnits = False ‘ メートル法で統一するのがエンジニアの鉄則

‘ 3. 慣性テンソルの取得 (重心を基準としたもの)
‘ 戻り値は 9要素の配列 (Ixx, Ixy, Ixz, Iyx, Iyy, Iyz, Izx, Izy, Izz)
vInertia = swMassProp.GetMomentOfInertia(swMassPropertyMomentOfInertia_PrincipalAxes)

‘ 4. 主軸方向の取得 (回転バランスの検証に必須)
Dim vPrincipalAxes As Variant
vPrincipalAxes = swMassProp.PrincipalAxes

‘ Excel連携への出力ロジックをここに記述
Call WriteToExcel(swMassProp.Mass, vInertia, vPrincipalAxes)

Debug.Print “計算完了: 重量 = ” & swMassProp.Mass & ” kg”
End Sub

Private Sub WriteToExcel(mass As Double, inertia As Variant, axes As Variant)
‘ ここにExcelへの書き込み処理を記述
‘ データベース連携を行う場合は、ここでJSON化してAPIを叩くのがスマートだ
End Sub

3. なぜ「主軸(Principal Axes)」を見るべきなのか

慣性テンソルの対角成分を求めるだけでは不十分だ。製品の回転バランスが悪いとき、それは「主軸」が製品の幾何学中心とズレていることを意味する。

  • 設計検証のポイント: 主軸の傾き(`PrincipalAxes`)が設計意図した回転軸とどれだけ乖離しているか。これをExcel上で自動的にグラフ化し、閾値を超えた場合に警告を出す仕組みを作れ。
  • APIの罠: `GetMomentOfInertia`には複数の引数が存在する。必ず`swMassPropertyMomentOfInertia_PrincipalAxes`を指定し、座標系に依存しない「本質的な慣性特性」を抽出すること。

4. プロダクション環境への統合アドバイス

このツールを個人のPCで動かして満足するな。チームの資産にするためには、以下の運用を推奨する。

1. データベース連携: 抽出した慣性特性は、PdmWorksや外部DBに`Material_ID`と紐付けて保存せよ。これにより、過去の類似設計を検索し、「回転振動が少なかった過去モデル」との比較が可能になる。
2. 保守性の担保: `IMassProperty2`の設定(密度や単位系)は、必ず定数として外出しせよ。ハードコーディングされた数値は、将来の法改正や規格変更(SI単位系への厳密な対応等)で必ず足元をすくわれる。
3. エラーハンドリング: `swMassProp.IsValid` を必ずチェックせよ。解析不能なモデルを計算しようとすると、APIは時として不定値を返す。このチェックを怠ることは、設計ミスを容認することと同義だ。

結び

APIを使うということは、SolidWorksの「思考回路」をコードに写し取ることだ。
「なんとなく動いた」コードは技術的負債にしかならない。質量特性という、製品の骨格となる数値を扱うのであれば、その背後にある物理法則と計算アルゴリズムを常に意識せよ。

さあ、退屈な手計算は機械に任せ、君は設計の「本質」を見極めるための時間を手に入れろ。健闘を祈る。

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