(中國五環(huán)工程有限公司,湖北 武漢 430223)
目前,三維設(shè)計已成為化工設(shè)計的主流設(shè)計方式,PDMS是通用的三維設(shè)計平臺之一。盡管如此,二維圖紙作為重要的圖紙信息載體,仍不可或缺,如設(shè)備裝配圖、化工廠平面總圖等仍采用二維設(shè)計。在工程設(shè)計中,經(jīng)常需要將二維圖紙中的信息錄入到三維平臺中,對于這項工作,現(xiàn)在還是采用人力居多,本篇討論如何將CAD格式二維圖紙信息載入三維平臺并實現(xiàn)CAD和PDMS的聯(lián)動操作。
大多工程設(shè)計軟件都是采用Windows操作系統(tǒng),其進程非常復(fù)雜,在此只討論進程間的數(shù)據(jù)共享問題。打開PDMS軟件和CAD軟件,二者分屬兩個進程,擁有各自獨立的內(nèi)存空間,彼此的內(nèi)存空間是受保護的。如果需要實現(xiàn)進程間的通訊,一般有3種方式。
(1)調(diào)用同一個DLL(動態(tài)連接庫),DLL中的全局數(shù)據(jù)可以被調(diào)用DLL的所有進程共享,雖然可以通過DLL進行進程間數(shù)據(jù)共享,但從數(shù)據(jù)安全的角度考慮,并不提倡這種方法,而且在實際應(yīng)用中,采用這種方式實現(xiàn)軟件之間聯(lián)動的難度較大,穩(wěn)定性較差。
(2)采用套接字(Sockets)實現(xiàn)通訊。套接字是TCP/IP網(wǎng)絡(luò)通信的基本操作單元,成對出現(xiàn),分別是客戶端套接字和服務(wù)端套接字,可實現(xiàn)不同主機之間的進程進行雙向通信,是使用非常廣泛的通訊方式,幾乎所有的網(wǎng)絡(luò)通訊都使用套接字作為通訊底層。如果采用這種方式進行CAD和PDMS聯(lián)動操作,相當于客戶端套接字和服務(wù)端套接字都在本機。
(3)采用管道(Pipe)實現(xiàn)通訊。管道(Pipe)是一種具有兩個端點的通信通道:有一端句柄的進程可以和有另一端句柄的進程通信,對于兩個進程之間的通訊我們采用命名管道(Named Pipe),其具有簡單高效的特點,非常適合作為CAD和PDMS聯(lián)動操作的通訊方式。
PDMS有兩種常用的二次開發(fā)方式,即PML和.NET。PML(Programmable Macro Language)是一種面向?qū)ο蟮哪_本語言,只能在PDMS軟件內(nèi)執(zhí)行。PDMS軟件自帶的很多程序就是使用PML開發(fā)的。使用PML二次開發(fā)的優(yōu)勢是運行前不需要編譯,可提高開發(fā)效率;不足之處是相對于.NET,其功能較少,不能進行內(nèi)存、指針和通訊操作。.NET存在兩種實現(xiàn)方法,即.NET Addin和PML.NET,主要是在VisualStudio環(huán)境下使用C#進行二次開發(fā)。通過PDMS提供的接口,利用C#可讀取/修改PDMS數(shù)據(jù)庫內(nèi)容。使用C#進行二次開發(fā)的優(yōu)勢是可借用微軟.NET內(nèi)豐富的類庫,進而大大擴增程序功能。不足之處是程序調(diào)試不方便,C#編譯好的dll文件被PDMS加載后,不能卸載,因此不能對程序源碼實時修改。
常見的CAD二次開發(fā)方式有AutoLISP、ObjectARX/ObjectDBX、AutoCAD.NET等。自AutoCAD 2006開始,Autodesk為CAD二次開發(fā)提供了.NET API支持。AutoCAD.NET API是ObjectARX庫在.NET平臺的封裝,可被任何支持.NET的語言(VB,C#,C++等)訪問。
AutoCAD.NET API內(nèi)有許多不同類型的對象。每個CAD組件(直線,文字,標注,線型,圖層,塊等)均在AutoCAD.NET API中對應(yīng)一個對象。
本文采用AutoCAD.NET方式進行二次開發(fā)。開發(fā)語言為C#。在CAD命令行中輸入NETLOAD,選擇需要載入(編譯通過)的dll,就可以完成二次開發(fā)的應(yīng)用。
打開CAD程序,命令行輸入NETLOAD,選擇PDMSCADAddin.dll文件并打開,然后在命令行輸入自定義命令“PDMS”,開始監(jiān)聽來自PDMS的指令(見圖1)。
圖1 加載自定義命令集
使用自主開發(fā)(PML)的設(shè)備建模工具與CAD圖紙內(nèi)設(shè)備管嘴數(shù)據(jù)進行聯(lián)動,在PDMS內(nèi)批量創(chuàng)建管嘴,操作流程如下。
(1)打開設(shè)備圖紙,加載PDMSCADAddin.dll,開始監(jiān)聽PDMS指令。
(2)在PDMS內(nèi)設(shè)備建模工具面板上單擊“CAD pick”按鈕,向CAD發(fā)送指令(見圖2)。
圖2 設(shè)備建模工具面板
(3)CAD接收指令后執(zhí)行聯(lián)動操作,本例為框選管口表,然后回車確認(見圖3)。
圖3 CAD設(shè)備詳圖中的管口表
(4)返回PDMS,各管口創(chuàng)建完畢,效果見圖4和圖5。
圖4 PDMS中設(shè)備管口目錄樹
圖5 PDMS中創(chuàng)建的管口
(5)利用設(shè)備建模工具的調(diào)整管口方位及標高功能,實現(xiàn)精確定位即可。
(1)打開總圖圖紙,加載PDMSCADAddin.dll,開始監(jiān)聽PDMS指令。
(2)在PDMS內(nèi)總圖輔助工具面板上單擊“CAD Draw”按鈕,向CAD發(fā)送指令(見圖6)。
圖6 PDMS總圖輔助工具面板
(3)CAD接收指令后執(zhí)行聯(lián)動操作,本例為選擇多條直線,然后回車確認(見圖7)。
圖7 某項目總圖
(4)返回PDMS,總圖道路創(chuàng)建完畢,效果見圖8。
圖8 PDMS中創(chuàng)建的總圖道路及圖框
經(jīng)過對Windows操作系統(tǒng)和CAD、PDMS的研究以及實際編程操作,證明采用管道這種方式實現(xiàn)Windows系統(tǒng)中兩個獨立進程通訊的可行性,驗證了CAD和PDMS聯(lián)動操作的可行性。進一步推廣使用,可以在實際工作中節(jié)省大量時間,并提高效率和準確性。