高杰
(天津市市政工程設(shè)計(jì)研究院 天津市 300392)
目前工程師在市政公用工程項(xiàng)目設(shè)計(jì)時(shí)主要采用AutoCAD 軟件進(jìn)行施工圖設(shè)計(jì)。相比20年前進(jìn)行手繪圖紙,工作效率已經(jīng)大幅提升??呻S著我國(guó)人民生活水平不斷提高,城市基礎(chǔ)設(shè)施建設(shè)投資逐年增加,工程項(xiàng)目數(shù)量大增,且規(guī)模及復(fù)雜度不斷增大。在這樣的形勢(shì)下,工程師面對(duì)著越來(lái)越緊張的工期和越來(lái)越激烈的市場(chǎng)競(jìng)爭(zhēng),雙重壓力下難免出現(xiàn)圖紙質(zhì)量下降或設(shè)計(jì)錯(cuò)誤,給后續(xù)施工帶來(lái)麻煩甚至造成工程事故,為國(guó)家?guī)?lái)經(jīng)濟(jì)損失。
本文以污水處理廠自控系統(tǒng)設(shè)計(jì)為例,介紹一種采用高級(jí)語(yǔ)言編程實(shí)現(xiàn)程序自動(dòng)繪圖的方法,可大幅度提升設(shè)計(jì)效率,并避免設(shè)計(jì)錯(cuò)誤。
把工程師從繁瑣的重復(fù)的繪圖工作中解放出來(lái),將精力放在設(shè)計(jì)、創(chuàng)新等更高級(jí)的任務(wù)中。
城市污染源排出的污水,因含污染物總量或濃度較高,達(dá)不到排放標(biāo)準(zhǔn)或不符合環(huán)保要求,必需經(jīng)過(guò)污水處理廠進(jìn)行人工強(qiáng)化處理,以便達(dá)到國(guó)家規(guī)定的排放標(biāo)準(zhǔn)或回用標(biāo)準(zhǔn)。
從處理方法上,污水處理工藝分為物理法、化學(xué)法和生物法;從處理深度上,處理工藝分為一級(jí)、二級(jí)、三級(jí)和深度處理。污水處理工藝設(shè)計(jì)要求技術(shù)先進(jìn),經(jīng)濟(jì)合理,費(fèi)用最省。
污水處理廠設(shè)計(jì)包括各種不同處理階段所需的構(gòu)筑物、建筑物、設(shè)備、管道、廠區(qū)道路、綠化、管線綜合、給排水、供配電、自控儀表等。
污水處理廠自控系統(tǒng)構(gòu)成整個(gè)污水處理工程的重要組成部分,其設(shè)計(jì)優(yōu)劣及功能穩(wěn)定直接關(guān)系到全廠設(shè)備的正常運(yùn)行。
自動(dòng)控制系統(tǒng)采用基于可編程邏輯控制器(PLC)的集散型控制系統(tǒng),通過(guò)現(xiàn)場(chǎng)PLC 完成各自轄域內(nèi)工藝設(shè)備和檢測(cè)儀表的數(shù)據(jù)采集和自動(dòng)控制。
控制系統(tǒng)由三級(jí)組成:
第一級(jí)——就地控制(現(xiàn)場(chǎng)控制柜控制);
第二級(jí)——過(guò)程控制(各PLC 控制站控制);
第三級(jí)——監(jiān)控管理(中央控制室監(jiān)控)。
自控專業(yè)施工圖設(shè)計(jì)一般包括控制系統(tǒng)結(jié)構(gòu)圖、PLC 配置圖、PLC 模塊接線圖(圖1)、電纜清冊(cè)(圖2)、自控安裝圖等。其中用于直接指導(dǎo)自控設(shè)備生產(chǎn)和現(xiàn)場(chǎng)工人安裝的是PLC 模塊接線圖、電纜清冊(cè),這兩部分也是設(shè)計(jì)中最為繁瑣和容易出錯(cuò)的地方。對(duì)于一個(gè)中等規(guī)模的處理廠,其需要接入自控系統(tǒng)的工藝設(shè)備和儀表可超過(guò)600 個(gè),設(shè)置大小PLC 控制站在20 臺(tái)左右,輸入輸出信號(hào)超過(guò)5000 點(diǎn),安裝電纜3000 余根。
這種圖紙繪制和錯(cuò)誤排查由人工來(lái)做是一項(xiàng)耗費(fèi)精力、枯燥且極易犯錯(cuò)的工作。但不難看出,它是一項(xiàng)重復(fù)性強(qiáng)且有規(guī)律的工作,應(yīng)該采用編程的方法由計(jì)算機(jī)自動(dòng)完成。
圖1:PLC 模塊接線圖
圖2:電纜清冊(cè)
AutoCAD 自帶高級(jí)編程語(yǔ)言LISP,但使用它做復(fù)雜的設(shè)計(jì)需要很高的編程技巧,若要設(shè)計(jì)用戶界面,難度就更高了。而C++語(yǔ)言在實(shí)現(xiàn)復(fù)雜邏輯運(yùn)算上擁有絕對(duì)優(yōu)勢(shì),若使用VC,更可輕松實(shí)現(xiàn)用戶界面設(shè)計(jì)。
本文提出利用AutoCAD 腳本文件作為接口,實(shí)現(xiàn)C++語(yǔ)言直接生成繪圖指令,控制AutoCAD 自動(dòng)繪圖方法。
AutoCAD 腳本實(shí)際上就是批處理命令,是AutoCAD 命令提示行中所用的命令的一個(gè)有序集合。腳本文件中的每一行對(duì)應(yīng)著AutoCAD 命令提示行中的一個(gè)命令,將它們按一定順序組合在一起就可實(shí)現(xiàn)復(fù)雜的制圖工作。
腳本文件是純文本文件,可直接打開(kāi)、編輯、修改,閱讀起來(lái)也很直觀。
圖3:程序可視化界面
對(duì)于上述的純文本文件,用C++語(yǔ)言進(jìn)行創(chuàng)建、讀寫非常簡(jiǎn)單,使用CFile 類即可實(shí)現(xiàn)。
在CAD 中的所有繪圖工作可分解為若干種基本操作,如畫(huà)一條線段、畫(huà)一條弧線、寫一段文本等。這些基本操作都有對(duì)應(yīng)的腳本命令,如“_LINE 100,100 500,500”表示以坐標(biāo)(100,100)為起點(diǎn),(500,500)為終點(diǎn)畫(huà)一條線段,“_MTEXT 350,110 監(jiān)測(cè)儀表組電源”表示以坐標(biāo)(350,110)為基點(diǎn)插入一行文字。
圖2 的電纜清冊(cè)可以拆分成繪制線段和插入文字2 種基本操作,只要指定了表格間距,就可使用C++簡(jiǎn)單的循環(huán)邏輯輕松繪制出來(lái),而C++輸出的是一組腳本指令,并將他們存儲(chǔ)在文本文件中,CAD 調(diào)用該文件后即可自動(dòng)生成表格。更復(fù)雜的圖紙繪制原理也一樣。
用C++語(yǔ)言實(shí)現(xiàn)繪圖首先要先編寫一些基本的繪圖函數(shù),每個(gè)函數(shù)對(duì)應(yīng)著一個(gè)CAD 的基本操作的腳本命令。函數(shù)的參數(shù)盡量設(shè)計(jì)成和腳本命令的參數(shù)基本一致,這樣在后續(xù)C++編程中可以采用與編寫腳本類似的語(yǔ)法和習(xí)慣。函數(shù)的輸出則是在生成的腳本文件中插入一行對(duì)應(yīng)基本繪圖操作的腳本命令。
例如上一節(jié)所述的畫(huà)一條線段的C++函數(shù)可以定義成:
void DrawLine(CFile* infile,long x1,long y1,long x2,long y2)
其含義是以(x1,y1)、(x2,y2)為端點(diǎn)畫(huà)一條線段,函數(shù)執(zhí)行結(jié)果就是在已打開(kāi)的infile文本文件中加入一行畫(huà)線的腳本命令??梢钥闯稣{(diào)用該函數(shù)時(shí)的語(yǔ)法與編寫腳本文件的語(yǔ)法極其類似。
同樣的我們定義了過(guò)對(duì)角線上兩頂點(diǎn)坐標(biāo)畫(huà)矩形的函數(shù):
void DrawRect(CFile* infile,long x1,long y1,long x2,long y2)
以及在指定點(diǎn)插入文字的函數(shù):
void DrawText(CFile* infile,long x1,long y1,long x2,long y2,char*data)
C++語(yǔ)言的優(yōu)勢(shì)在于面向?qū)ο蟮乃枷?,自控專業(yè)制圖中,我們考慮將系統(tǒng)中的每一臺(tái)設(shè)備作為一個(gè)對(duì)象。前文已經(jīng)介紹了,對(duì)于污水處理廠中的設(shè)備,首先在地理上它們位不同的建(構(gòu))筑物中,其次在自控網(wǎng)絡(luò)中它們接入了不同的PLC 分控站中,從傳輸數(shù)據(jù)角度看,每臺(tái)設(shè)備擁有各自的輸入和輸出端口,并向系統(tǒng)發(fā)送和接收著不同定義的數(shù)據(jù)。
我們將設(shè)備封裝為一個(gè)類,它的定義如下:
class instrument
{
char name[30];//設(shè)備名稱
char shortname[10];//名稱縮寫
char construct[30];//所在建筑物
char construct_ID[10];//建筑物位號(hào)
char PLC[10];//所屬分控站
char position[50];//信號(hào)線接線點(diǎn)
char m_DI[20][20];//數(shù)字量輸入信號(hào)
char m_DO[10][20];// 數(shù)字量輸出信號(hào)
char m_AI[10][20];// 模擬量輸入信號(hào)
char m_AO[10][20];// 模擬量輸出信號(hào)
bool pow;//是否提供電源
}
成員變量包含了所有繪圖時(shí)需要用到的設(shè)備屬性。同時(shí)定義了繪制自控圖紙的成員函數(shù):
void draw_IOlist(CFile* infile,long x,long y)//繪制輸入輸出信號(hào)統(tǒng)計(jì)表
void draw_IOcable(CFile* infile,long x,long y)//繪制電纜清冊(cè)
void draw_IOmodule(CFile* infile,long x,long y)//繪制IO 模塊接線圖
這些函數(shù)都是反復(fù)調(diào)用前文介紹的基本繪圖函數(shù)。函數(shù)執(zhí)行結(jié)果是在打開(kāi)的infile 文本文件中加入若干行腳本命令。
程序的工作就是遍歷所有生成的設(shè)備類(instrument)實(shí)體的所有成員函數(shù),當(dāng)所有函數(shù)均按順序執(zhí)行一遍后,infile 文件就包含了完成圖紙的所有腳本指令,在CAD 中調(diào)用這個(gè)腳本文件即可自動(dòng)生成圖紙。
在程序自動(dòng)繪圖之前,工程師需要把全廠幾百個(gè)設(shè)備的信息錄入程序,以便生成設(shè)備類(instrument)實(shí)體,每個(gè)設(shè)備又包含了至少10 個(gè)屬性,這仍然是一項(xiàng)繁瑣而容易出錯(cuò)的工作。因此必須設(shè)計(jì)一個(gè)直觀且易操作的用戶界面幫助工程師完成錄入工作。
這里采用Visual C++開(kāi)發(fā)一個(gè)可視化界面,可以幫助用戶完成對(duì)設(shè)備的添加、刪除、屬性編輯、復(fù)制等操作。程序可以將所有添加的設(shè)備按所在構(gòu)筑物分類列出,當(dāng)點(diǎn)選設(shè)備后,其所有屬性將呈現(xiàn)出來(lái),方便用戶查詢、修改。程序可將一個(gè)工程項(xiàng)目的所有信息保存為一個(gè)文件,供用戶隨時(shí)調(diào)取。
當(dāng)所有工程信息錄入完成并核對(duì)無(wú)誤后,用戶可通過(guò)程序提供的制圖按鈕生成繪制該工程自控專業(yè)圖紙的腳本文件。程序可視化界面如圖3 所示。
目前計(jì)算機(jī)技術(shù)已經(jīng)廣泛應(yīng)用于工程設(shè)計(jì)行業(yè),在該領(lǐng)域中,專業(yè)劃分較多,現(xiàn)有的成熟軟件遠(yuǎn)沒(méi)有覆蓋到所有專業(yè),現(xiàn)在市面上有針對(duì)建筑、橋梁、管網(wǎng)、電網(wǎng)等行業(yè)的專業(yè)輔助設(shè)計(jì)軟件,但本文所說(shuō)的自控系統(tǒng)設(shè)計(jì),因其涉及的領(lǐng)域較窄較偏,還沒(méi)有現(xiàn)成的商業(yè)軟件可用。
本文提供的思路是,采用高級(jí)語(yǔ)言編寫程序自動(dòng)生成腳本文件,并用腳本自動(dòng)生成CAD 圖紙,它沒(méi)有程序之間相互調(diào)用,開(kāi)發(fā)者不需掌握復(fù)雜的接口、庫(kù)函數(shù),以及兼容性問(wèn)題。對(duì)于一線的工程技術(shù)人員,只要有簡(jiǎn)單的高級(jí)語(yǔ)言知識(shí),即可寫出自己專業(yè)需要的自動(dòng)繪圖軟件。冷門專業(yè)的工程師可以通過(guò)此方法提高自身的工作效率。