SolidWorks自動化の真髄:PLM連携による「排他制御」の極意
こんにちは。現場で泥臭い自動化と格闘し、時にSolidWorksのAPIと対話しながら「なぜここで落ちるのか」と夜を明かしたこともある、あなたの技術的な先輩です。
今日は、マクロの記録ボタンを押して満足している段階から、「プロフェッショナルな設計エンジニア」へと脱皮するための話をします。テーマは、外部PLM(製品ライフサイクル管理)システムとSolidWorksをAPIで繋ぎ、アセンブリの「排他制御」を自動化する設計思想です。
—
1. なぜ「排他制御」が必要なのか?
大規模なアセンブリをチームで扱う時、最も恐ろしいのは「設計のコンフリクト(競合)」です。Aさんが編集している最中に、Bさんが同じファイルを上書き保存してしまう。この悲劇を防ぐのがチェックアウト(排他制御)です。
VBAからREST APIを叩き、「このファイルは私が今から編集するぞ!」というフラグをPLMサーバーに立てる。これができれば、あなたはSolidWorksをただのCADソフトではなく、「全社的な設計データ管理システムのインターフェース」へと昇華させることができます。
—
2. システムの全体像:VBAでREST APIを叩く
SolidWorks VBAは実は強力なツールです。Windowsの標準ライブラリである`MSXML2.XMLHTTP`を使えば、簡単にWebサーバーと通信できます。
基本の設計図
1. チェックアウト要求: VBAからPLMに「このファイルを開きたい」と通信。
2. 応答確認: サーバーが「OK」なら、SolidWorksでファイルを開く。
3. エラーハンドリング: 「他人が編集中」なら即座に読み取り専用(ReadOnly)で開く。
—
3. 実践コード:安全なチェックアウト制御
以下のコードは、プロの現場でも使われる「API通信+排他制御」の最小構成テンプレートです。
‘ 必要な参照設定: Microsoft XML, v6.0
Option Explicit
Public Sub CheckoutAndOpenAssembly()
Dim swApp As Object
Dim modelPath As String
Dim response As String
‘ 1. 対象のファイルパス(PLMから取得したIDなど)
modelPath = “C:\Projects\Machine_A\Assembly_001.SLDASM”
‘ 2. PLMサーバーへチェックアウト要求を送信
If RequestCheckoutToPLM(modelPath, response) Then
‘ サーバーがOKを返したら編集モードで開く
Set swApp = Application.SldWorks
swApp.OpenDoc6 modelPath, 2, 0, “”, 0, 0
MsgBox “チェックアウト成功:編集を開始します。”
Else
‘ 失敗した場合は読み取り専用で開くか、警告を出す
MsgBox “排他エラー: ” & response & vbCrLf & “読み取り専用で開きます。”
‘ swApp.OpenDoc6 … (ReadOnlyオプションをTrueにして開く処理)
End If
End Sub
‘ API通信を行う関数
Private Function RequestCheckoutToPLM(filePath As String, ByRef msg As String) As Boolean
Dim http As Object
Set http = CreateObject(“MSXML2.XMLHTTP”)
‘ 例: REST APIエンドポイント
http.Open “POST”, “https://plm-server.internal/api/checkout”, False
http.setRequestHeader “Content-Type”, “application/json”
‘ サーバーへの送信データ
Dim jsonBody As String
jsonBody = “{“”file””: “”” & Replace(filePath, “\”, “\\”) & “””, “”user””: “”Engineer_01″”}”
http.send jsonBody
‘ 通信結果の判定
If http.Status = 200 Then
RequestCheckoutToPLM = True
Else
msg = http.responseText
RequestCheckoutToPLM = False
End If
End Function
—
4. プロの現場で「ハマる」ポイントと回避策
① ファイルのライフサイクル管理
`OpenDoc6`でファイルを開く際、必ず`swOpenDocOptions_ReadOnly`オプションを考慮してください。PLMサーバー側で「他人が使用中」と判断された場合、意図せず書き込み権限を持って開いてしまうと、後で保存する際に致命的なデータ破損を招きます。
② 通信タイムアウトの罠
ネットワークが不安定な場合、`http.send`でプログラムがフリーズすることがあります。実務では`http.timeout`プロパティを適切に設定し、無限ループを避ける設計が必須です。
③ ユーザー体験(UX)の意識
「マクロを実行したはずなのに何も起きない」というのは最悪のUXです。必ず`MsgBox`やステータスバー表示を活用し、今システムが「サーバーと通信中なのか」「エラーなのか」を明確に伝えましょう。
—
5. 次のステップへ
「マクロの記録」で生成されるコードは、あくまで「手順」をなぞっただけのものです。今回のようにAPIという「外部の知能」と連携させることで、あなたの作るツールは単なる自動化スクリプトから、「堅牢な業務基盤」へと進化します。
まずはこのコードを、あなたの開発環境(テスト用のローカルサーバー等)で動かしてみてください。APIとCADが握手した瞬間、あなたの設計自動化エンジニアとしてのキャリアが大きく加速するはずです。
何か分からないことがあれば、いつでもまた聞きに来てください。CADの深淵は、まだまだ続きます。応援していますよ。
