【SolidWorks API極致】外部PDM/PLM連携によるアセンブリ自動制御の設計思想
SolidWorks VBAの世界において、「アセンブリの自動生成」までは初級者の登竜門だ。しかし、そこに「外部PDM/PLM連携による排他制御」が加わった瞬間、それは単なるスクリプトから、工場の生産性を左右するエンタープライズ・システムへと変貌する。
多くの開発者が、この領域で「APIのレスポンス待ちでSWがフリーズする」「排他制御の競合でファイルが破損する」という悪夢に悩まされる。今日は、現場で血を流しながら得た、「落ちない、壊さない、迷わせない」ための設計指針を伝授する。
—
1. なぜ「同期通信」は死を招くのか
VBAからREST APIを叩く際、最もやってはいけないのが「UIスレッドでの同期通信」だ。APIの応答が数秒遅れるだけでSolidWorksのウィンドウは「応答なし」となり、Windowsは「プロセスがハングしている」と判断する。
鉄則:
- 非同期的な状態管理: PDMとの通信は「チェックアウト確認」「データ更新」「チェックイン」の3フェーズに厳格に分離せよ。
- 例外処理の階層化: APIが返したHTTP 500エラーを無視してSWの保存を強行すれば、整合性は即座に崩壊する。
—
2. 堅牢な設計のための「三層アーキテクチャ」
1. SW Controller層: `SldWorks.Application` との対話のみを担当。
2. API Gateway層: HTTP通信とJSONパースを担当。
3. Transaction Manager層: 上記2つを統合し、チェックアウト失敗時に「ロールバック(作業中断)」を命じる司令塔。
この分離がないコードは、数ヶ月後に改修不可能になる。
—
3. 実践コード:PDM連携の基幹パーツ
ここでは、`WinHttp.WinHttpRequest` を用いた、堅牢なAPI通信のプロトタイプを示す。
‘ 必要な参照設定: Microsoft WinHTTP Services, version 5.1
‘ 堅牢なPDM連携用APIモジュール
Public Function RequestToPDM(ByVal endpoint As String, ByVal jsonPayload As String) As String
Dim http As New WinHttpRequest
Dim url As String: url = “https://your-plm-server.api/v1/” & endpoint
On Error GoTo ErrorHandler
With http
.Open “POST”, url, False ‘ 非同期通信は複雑化するため、まずは同期でタイムアウト制御を優先
.SetRequestHeader “Content-Type”, “application/json”
.SetRequestHeader “Authorization”, “Bearer ” & GetAuthToken()
.Option(WinHttpRequestOption_Timeout) = 5000 ‘ 5秒で切る。これ以上は待たない
.Send jsonPayload
If .Status = 200 Then
RequestToPDM = .ResponseText
Else
Err.Raise vbObjectError + 1000, “PDM_API”, “API Error: ” & .Status & ” – ” & .ResponseText
End If
End With
Exit Function
ErrorHandler:
MsgBox “PDMサーバー接続エラー: ” & Err.Description, vbCritical
RequestToPDM = “”
End Function
—
4. アセンブリ操作における「禁じ手」と「正解」
APIから「チェックアウト許可」が出た後のSolidWorks操作には、以下の作法がある。
- 禁じ手: `Set swModel = swApp.OpenDoc6(…)` を安易にループ内で回す。
- 正解: `OpenDocSpec` を使用し、読み取り専用で開くか、書き込み許可を得てから開くかのステータスを、PDMから得た「バージョンID」と照合せよ。
【重要】排他制御のフロー設計
1. Pre-Check: 対象アセンブリと全構成部品の最新バージョンをPDMから取得。
2. Locking: 構成部品を「編集権限付き」でチェックアウト。
3. Execute: アセンブリの合致(Mate)定義や構成変更を実行。
4. Post-Check: 保存後、即座にチェックインまたはステータス更新を送信。
—
5. 最後に:エンジニアとしての矜持
VBAは、C#やC++に比べて「型」が甘い。だからこそ、開発者が「型を厳格に管理する」という強い意志を持たなければならない。
PDM連携ツールを作るということは、単にファイルを動かすことではない。「設計者の思考をシステムの中に閉じ込め、整合性を担保する」という崇高な行為だ。コードをコピペして終わるのではなく、なぜこの設計が必要なのか、その裏にある「APIとファイルシステム間の不整合というリスク」を常に想像してほしい。
君が書く数行のコードが、設計者の無駄な残業を数時間減らす。それがこの自動化エンジニアという職種の、最大の報酬であるはずだ。
次は、`ISwComObject` を用いたイベントドリブンなチェックアウト監視の実装について深掘りしよう。準備はいいか?
