SolidWorks自動生成の深淵:SQL Server駆動型・完全自動パーツビルド・アーキテクチャ
設計現場において「パラメータを変えてパーツを作り直す」という作業は、単なる繰り返しではなく、設計意図の汚染とヒューマンエラーの温床である。
もし君が、仕様書を読み込み、SolidWorksの画面をポチポチ操作してパーツを保存しているのなら、今すぐその手を止めろ。それはエンジニアがやるべき仕事ではない。今日は、SQL Server上の製品仕様マトリクスをトリガーに、SolidWorksを単なる「描画エンジン」へと変貌させる、堅牢な自動生成アーキテクチャの神髄を伝授する。
—
1. なぜ「小手先の自動化」では破綻するのか
多くの者が陥る罠は、VBAの中に直接数値をハードコーディングすることだ。これでは、設計変更のたびにコードを改修する羽目になる。
真の自動化エンジンには、以下の「疎結合」な設計が必要不可欠だ。
- データソース(DB): SQL Serverで仕様を管理する。
- ロジック層(VBA): データを取得し、SolidWorksのAPIを叩く「司令塔」。
- テンプレート(SldPrt): ジオメトリの骨格。コードで全てを生成するのではなく、パラメータ駆動のマスターモデルを操作する。
—
2. SQL Server連携:ADODBが最強である理由
外部データベースとの通信に悩む必要はない。Windows環境において、`ADODB`は枯れており、かつ最も信頼できる選択肢だ。
堅牢なデータ取得コード例
‘ 参照設定: Microsoft ActiveX Data Objects 6.1 Library
Public Function GetProductSpecs(ByVal OrderID As String) As ADODB.Recordset
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim strConn As String
Set conn = New ADODB.Connection
strConn = “Provider=SQLOLEDB;Data Source=YourServer;Initial Catalog=YourDB;Integrated Security=SSPI;”
conn.Open strConn
Set rs = New ADODB.Recordset
‘ SQLインジェクションを防ぐため、本来はパラメータクエリを使用すること
rs.Open “SELECT Length, Width, Material FROM ProductSpecs WHERE OrderID = ‘” & OrderID & “‘”, conn
Set GetProductSpecs = rs
End Function
—
3. SolidWorksAPI:オブジェクトのライフサイクル管理
SolidWorks APIを操る際、最も重要なのは「オブジェクトの解放」だ。`Set swApp = Nothing`を書けばいいという次元ではない。メモリリークは、数千個のパーツ生成を伴うバッチ処理において、必ずアプリケーションをクラッシュさせる。
- Sessionの再利用: `SldWorks`アプリケーションを毎回起動してはならない。常に既存のプロセスを掴む。
- エラーハンドリング: `On Error GoTo`は必須。特にファイル保存時のパスエラーは、FSO(FileSystemObject)で事前にチェックせよ。
—
4. 実戦的アーキテクチャ:自動生成エンジンの中核
以下は、取得した仕様をパーツに適用し、保存する実装のテンプレートだ。
‘ 参照設定: SolidWorks 20xx Type Library
Sub GeneratePartFromDB(ByVal OrderID As String)
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim rs As ADODB.Recordset
Dim fso As Object
Set swApp = Application.SldWorks
Set fso = CreateObject(“Scripting.FileSystemObject”)
‘ 1. データ取得
Set rs = GetProductSpecs(OrderID)
If rs.EOF Then Exit Sub
‘ 2. テンプレート読み込み
Set swModel = swApp.OpenDoc6(“C:\Templates\Master.sldprt”, swDocPART, swOpenDocOptions_ReadOnly, “”, 0, 0)
‘ 3. パラメータの反映
swModel.Parameter(“Length@Sketch1”).SystemValue = rs!Length / 1000 ‘ メートル単位への変換に注意
swModel.Parameter(“Width@Sketch1”).SystemValue = rs!Width / 1000
swModel.EditRebuild3
‘ 4. 保存とクリーンアップ
Dim savePath As String
savePath = “C:\Output\” & OrderID & “.sldprt”
swModel.SaveAs2 savePath, 0, False, False
swApp.CloseDoc swModel.GetTitle
‘ メモリ解放の徹底
Set swModel = Nothing
rs.Close: Set rs = Nothing
End Sub
—
5. エンジニアとして生き残るための「鉄則」
1. 単位系を信じるな: APIの数値はメートル法(m)が基本だ。ミリメートル(mm)でDB管理しているなら、必ず変換ロジックを噛ませろ。
2. FSOは生存確認の要: ファイルの保存先ディレクトリが既に存在するか、書き込み権限があるか。`fso.FolderExists`でチェックしないコードは「手抜き」である。
3. ログを吐け: 成功したか失敗したか、どのパラメータでエラーが出たか。テキストファイルにログを記録する機能を実装すれば、夜間バッチで大量生成した際の結果確認が劇的に楽になる。
結びに代えて
自動化とは、単にコードを書くことではない。「エンジニアが介在しなくても、システムが自律的に正しい解を導き出せる環境を構築すること」だ。
このアーキテクチャをベースに、君の現場の「仕様」を注入せよ。エラーが出たら、それはシステムが君に「設計上の不整合」を教えてくれているサインだ。そのサインを読み解き、ロジックを磨き上げろ。それが、伝説のアーキテクトへの第一歩だ。
