SolidWorks自動化の真髄:SQL Server連携による「無人パーツ生成エンジン」の構築術
SolidWorks APIを使いこなしているつもりでも、多くのエンジニアが陥る罠がある。それは「マクロをボタン操作の代行ツール」としか捉えていないことだ。
真の自動化とは、CADを操作することではない。「外部のデータソースを、3D空間上の幾何学情報へと翻訳するパイプラインを構築すること」に他ならない。本稿では、生産管理システムやデータベース(SQL Server)の受注データをトリガーに、人間を介さずパーツを生成する「堅牢なエンジン」の設計思想を伝授する。
—
1. なぜ「その設計」では失敗するのか?
多くの現場で、以下のような実装が見受けられる。
- ActiveDocumentへの過度な依存: `swApp.ActiveDoc`を多用し、画面のチラつきやフォーカス喪失で処理が止まる。
- ハードコーディング: 寸法値をコード内に直書きし、製品仕様の変更のたびにソースコードを修正している。
- エラー処理の欠如: データベースのコネクションエラーや、フィーチャの再構築失敗(Rebuild Error)を放置している。
これらは「ツール」であって「システム」ではない。プロダクション環境で求められるのは、「例外を握りつぶさない、自己修復的なアーキテクチャ」である。
—
2. 堅牢なデータ連携:ADODBの正しい作法
SQL Serverとの通信には、VBA標準の`ADODB`を用いる。ここで重要なのは、接続文字列の管理と、トランザクションの考え方だ。
‘ 必要な参照設定: Microsoft ActiveX Data Objects x.x Library
Public Function GetProductSpec(ByVal orderId As String) As Object
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim connStr As String
‘ セキュリティのため、接続情報は定数または外部設定ファイルから読み込むこと
connStr = “Provider=SQLOLEDB;Data Source=SERVER_NAME;Initial Catalog=DB_NAME;Integrated Security=SSPI;”
Set conn = New ADODB.Connection
conn.Open connStr
‘ SQLインジェクションを防ぐため、パラメータクエリを推奨
Set rs = conn.Execute(“SELECT Width, Height, Depth FROM ProductSpecs WHERE OrderID = ‘” & orderId & “‘”)
Set GetProductSpec = rs
‘ ここでconnを閉じるとRecordsetが使えなくなるので注意(切断型Recordsetにする)
rs.CursorLocation = adUseClient
Set rs.ActiveConnection = Nothing
conn.Close
End Function
—
3. 完全自動パーツ生成エンジンの実装
フィーチャ操作の鉄則は、「スケッチの完全拘束」と「名前によるフィーチャ取得」である。フィーチャIDに依存してはならない。
Public Sub GeneratePartFromSpec(spec As Object)
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeat As SldWorks.Feature
Set swApp = Application.SldWorks
‘ テンプレートから新規作成
Set swModel = swApp.NewDocument(“C:\ProgramData\SolidWorks\templates\Part.prtdot”, 0, 0, 0)
‘ 1. スケッチ作成(簡略化のため押し出しのみ)
swModel.SketchManager.InsertSketch True
‘ … スケッチ処理 …
‘ 2. 寸法駆動(名前で取得する癖をつける)
Dim swDim As SldWorks.Dimension
Set swDim = swModel.Parameter(“D1@Sketch1”) ‘ スケッチ寸法名
swDim.SystemValue = spec.Fields(“Width”).Value / 1000 ‘ メートル単位への変換を忘れないこと
‘ 3. 再構築(Rebuildは必須)
swModel.EditRebuild3
‘ 4. 保存(パスは設計ルールに基づき動的生成)
swModel.SaveAs2 “C:\Exports\Order_” & spec.Fields(“ID”).Value & “.SLDPRT”, 0, False, False
End Sub
—
4. プロフェッショナルが守るべき3つの鉄則
① 単位系の徹底した管理
SolidWorks APIは基本的に「メートル法(SI単位系)」で動作する。データベース上の数値が「mm」であれば、必ず`1000`で割る処理を噛ませよ。これを関数化せずコードに散らばらせると、将来的に必ずバグの温床となる。
② フィーチャの再構築確認
`EditRebuild3`を実行した際、エラーが出ていないかを`swModel.GetErrors`で監視せよ。モデルが「壊れた状態(エラーマークが付いた状態)」で保存されることを防ぐのが、システムエンジニアの責任だ。
③ ユーザーインターフェースを殺せ
無人実行の場合、`swApp.Visible = False`(またはバックグラウンド処理)を検討せよ。画面描画を停止するだけで、生成速度は数倍に跳ね上がる。
—
結論:自動化は「設計」で決まる
あなたが書くべきは、単なるマクロではない。「データに基づき、自律的に形状を最適化するエンジン」だ。
データベースという「論理」を、SolidWorksという「物理」に落とし込む。この橋渡しこそが、業務自動化エンジニアの腕の見せ所である。まずは上記のパターンを基盤とし、エラーハンドリングを完璧に組み込んだ「止まらないシステム」を構築してほしい。
コードは嘘をつかない。設計の甘さがそのまま、現場の混乱に直結する。その重みを背負ってキーボードを叩く者だけが、真の自動化を成し遂げられるのだ。
