摘 要:以金剛石合成機(jī)控制系統(tǒng)改造為例,提出了一種基于IPC與PLC相結(jié)合的DCS控制系統(tǒng)。在系統(tǒng)設(shè)計(jì)中,采用了上位機(jī)與下位機(jī)獨(dú)立運(yùn)行、以串行通信方式進(jìn)行信息傳遞的方法,并且引入了容錯(cuò)技術(shù),大大提高了系統(tǒng)的可靠性與穩(wěn)定性。采用了面向?qū)ο蠹夹g(shù)和多線程技術(shù),使得系統(tǒng)的維護(hù)和升級(jí)變得十分方便。半年多的運(yùn)行表明:本控制系統(tǒng)大大提高了金剛石產(chǎn)品的控制精度和質(zhì)量,減輕了操作人員的勞動(dòng)強(qiáng)度,提高了管理的科學(xué)化水平。
關(guān)鍵詞:金剛石合成機(jī);控制系統(tǒng);IPC與PLC結(jié)合;串口通信
1 引言
傳統(tǒng)的金剛石合成機(jī)控制系統(tǒng)是由一個(gè)PLC和一個(gè)可顯示終端構(gòu)成。其缺點(diǎn)如下:(1)系統(tǒng)所有的工作(如信息檢測(cè)、處理和系統(tǒng)控制)都是由PLC完成,其控制精度較差,致使合成的金剛石質(zhì)量較差;(2)顯示終端的平面尺寸過(guò)小,一方面操作人員觀察系統(tǒng)的狀態(tài)很不方便,另一方面常常會(huì)引起誤操作;(3)金剛石合成工藝復(fù)雜,需控制的參數(shù)很多,但原控制系統(tǒng)不能對(duì)參數(shù)進(jìn)行保存,而根據(jù)不同產(chǎn)品和工藝的要求對(duì)部分參數(shù)進(jìn)行調(diào)整時(shí),每次都必須重新設(shè)置所有的參數(shù),操作非常麻煩;(4)界面不友好;(5)不能由系統(tǒng)自動(dòng)考核操作人員的工作質(zhì)量。因此,為了提高控制精度、方便操作,開(kāi)發(fā)新的控制系統(tǒng)迫在眉睫。筆者針對(duì)以上問(wèn)題,將IPC與PLC有機(jī)結(jié)合,開(kāi)發(fā)了一套控制系統(tǒng)。
2 控制系統(tǒng)的開(kāi)發(fā)
2.1 系統(tǒng)結(jié)構(gòu)及配置
由于單純采用PLC控制有上述的那些缺點(diǎn),但是PLC又具有很高的穩(wěn)定性與可靠性且抗干擾能力較強(qiáng),很適合現(xiàn)場(chǎng)控制;而采用微機(jī)控制具有很高的靈活性和方便性,但是抗干擾能力較差。這里結(jié)合PLC控制和微機(jī)控制的優(yōu)點(diǎn),提出了IPC+PLC的新型控制方法,將IPC和PLC控制有機(jī)的結(jié)合在一起,而且還可以利用現(xiàn)有的PLC系統(tǒng)。
這里采用當(dāng)前最先進(jìn)且比較成熟的DCS方式[1][2],控制站采用西門(mén)子公司的S7-200系統(tǒng),操作站為采用人機(jī)界面非常友好的Windows98系統(tǒng)的工控機(jī)。操作站與控制站之間通過(guò)RS-232串口通信協(xié)議進(jìn)行數(shù)據(jù)傳輸;此外操作站通過(guò)RS-485串口對(duì)變頻器進(jìn)行控制以實(shí)現(xiàn)金剛石合成中的微調(diào)控制功能。由于在該項(xiàng)目中軟件所占的比重較大,并且為了更好地滿(mǎn)足系統(tǒng)功能需求,所以就自行開(kāi)發(fā)控制軟件和操作軟件,不僅滿(mǎn)足了系統(tǒng)要求、提高了系統(tǒng)性能、方便了維護(hù)和升級(jí)工作,而且降低了成本。
2.1.1 系統(tǒng)結(jié)構(gòu)
新設(shè)計(jì)的控制系統(tǒng)采用先進(jìn)的IPC+ PLC模式,操作站由一臺(tái)工控機(jī)構(gòu)成,控制站由一套西門(mén)子公司的S7-200構(gòu)成。上位機(jī)系統(tǒng)主要功能:參數(shù)設(shè)置、實(shí)時(shí)監(jiān)控、調(diào)整操作和信息查詢(xún)等。下位機(jī)系統(tǒng)主要功能:實(shí)時(shí)控制、數(shù)據(jù)采集等。
2.1.2 硬件配置
本系統(tǒng)中共有20路開(kāi)關(guān)量輸入,19路開(kāi)關(guān)量輸出,1路模擬量輸入和2路模擬量輸出。硬件配置如表1所示。
[align=center]
表1 主要硬件配置表[/align]
2.1.3 系統(tǒng)軟件配置
整個(gè)系統(tǒng)軟件的開(kāi)發(fā)是運(yùn)行于Windows98平臺(tái)的,因?yàn)閃indows98具有良好的操作界面,功能強(qiáng)大,比較普及,大家都能熟練操作。
下位機(jī)PLC程序開(kāi)發(fā)采用SIMEMENS公司的STEP7,它具有以下功能:(1)良好的操作界面;(2)硬件的組態(tài)和參數(shù)設(shè)置;(3)通信的定義,主要有通過(guò)MPI的時(shí)間驅(qū)動(dòng)循環(huán)數(shù)據(jù)傳送和事件驅(qū)動(dòng)數(shù)據(jù)傳輸;(4)編程,提供的語(yǔ)言有梯形圖、功能模塊圖和語(yǔ)句表;(5)程序下載、測(cè)試、啟動(dòng)和維護(hù)。
上位機(jī)監(jiān)控軟件開(kāi)發(fā)采用VC++6.0,它具有以下優(yōu)點(diǎn):(1)VC++和Windows98之間的兼容性好且可靠性高;(2)采用面向?qū)ο蠹夹g(shù),軟件的維護(hù)和升級(jí)代價(jià)小;(3)MFC封裝了很多組件,軟件開(kāi)發(fā)周期短、成本低;(4)功能強(qiáng)大,能開(kāi)發(fā)出高質(zhì)量的軟件,滿(mǎn)足不同需求;(5)方便地通過(guò)串口與PLC進(jìn)行通信;(6)操作界面友好。
2.2 應(yīng)用軟件的編制
2.2.1 下位機(jī)PLC程序
下位機(jī)程序采用STEP7中的梯形圖方法進(jìn)行編制[3],其功能結(jié)構(gòu)圖如圖1所示。
[align=center]
圖1 PLC程序功能結(jié)構(gòu)圖[/align]
其中:下位機(jī)程序編制的難點(diǎn)在于通信程序、PID控制程序子模塊的編制。
對(duì)于通信程序模塊來(lái)說(shuō),由于PLC程序需要從上位機(jī)獲得設(shè)定參數(shù)和一些控制指令,并且把現(xiàn)場(chǎng)狀態(tài)反饋給操作人員。這里,需要定義通信協(xié)議以及通信指令的格式。微機(jī)通過(guò)COM口發(fā)送指令到PLC的PORT0(或PORT1)口,PLC通過(guò)RCV接收指令,然后對(duì)指令進(jìn)行譯碼,譯碼后調(diào)用相應(yīng)的讀/寫(xiě)子程序?qū)崿F(xiàn)指令要求的操作,并返回指令執(zhí)行的狀態(tài)信息。
對(duì)于PID控制程序模塊來(lái)說(shuō),由于典型PID控制算法有微分突變現(xiàn)象與啟動(dòng)回繞現(xiàn)象兩個(gè)弊端,根據(jù)特定的現(xiàn)場(chǎng)環(huán)境和用戶(hù)需求,對(duì)標(biāo)準(zhǔn)的PID算法進(jìn)行了改進(jìn)。本文采用了參數(shù)自整定PID控制算法,達(dá)到了很好的控制效果。并且PID控制模塊具有良好的擴(kuò)展性,以便于軟件的維護(hù)和升級(jí)。
2.2.2 上位機(jī)監(jiān)控系統(tǒng)程序
監(jiān)控系統(tǒng)程序采用VC++6.0開(kāi)發(fā)了一個(gè)對(duì)話框類(lèi)型的應(yīng)用程序[4][5],其功能結(jié)構(gòu)圖如圖2所示。
[align=center]
圖2 監(jiān)控系統(tǒng)功能結(jié)構(gòu)圖[/align]
其中:監(jiān)控系統(tǒng)中的一些功能模塊所完成的具體工作如下所示。
?。?)通信模塊 該模塊實(shí)現(xiàn)與下位機(jī)PLC之間的數(shù)據(jù)傳輸問(wèn)題,在上、下位機(jī)之間起到橋梁作用。
?。?)參數(shù)設(shè)置 控制系統(tǒng)所需要的參數(shù)都是通過(guò)該模塊完成的,并且可以保存和讀取參數(shù)設(shè)置。
?。?)故障報(bào)警 當(dāng)現(xiàn)場(chǎng)產(chǎn)生故障時(shí)候,該模塊會(huì)給出報(bào)警信息提示并且及時(shí)反映出來(lái),以供操作人員處理參考。
?。?)實(shí)時(shí)信息顯示 把當(dāng)前系統(tǒng)中的實(shí)際值顯示出來(lái),并與預(yù)先設(shè)定的值進(jìn)行比較,以此來(lái)判斷控制算法的好壞和系統(tǒng)是否正常工作。
(5)調(diào)整操作 給用戶(hù)提供一些手動(dòng)操作的面板,這樣可以使工作人員很方便地進(jìn)行調(diào)整和控制操作。
(6)報(bào)表 記錄歷史數(shù)據(jù),供以后分析使用,并且可以隨時(shí)打印數(shù)據(jù),供工作人員觀察系統(tǒng)的運(yùn)行狀態(tài)。
?。?)變頻器控制 該模塊用來(lái)控制變頻器,以維持金剛石合成過(guò)程中的壓強(qiáng)基本不變,生產(chǎn)出高質(zhì)量金剛石。
(8)信息管理系統(tǒng) 信息管理系統(tǒng)是采用數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)開(kāi)發(fā),用來(lái)登記操作人員工作、出勤、工作量等情況,提供查詢(xún)、匯總等管理功能。
由于通信模塊與變頻器控制模塊都要進(jìn)行串口通信,所以在軟件編制過(guò)程中設(shè)計(jì)了串口通信通用類(lèi)CSerialPort,該類(lèi)封裝了串口通信的基本數(shù)據(jù)和方法,以解決RS-232和RS-485等不同類(lèi)型串口的通信問(wèn)題。CSerialPort類(lèi)頭文件中的主要成員變量和成員函數(shù)如下:
Class CSerialPort
?。?
Private:
HANDEL m_hPort;
DCB m_Dcb;
COMMTIMEOUTS m_TimeOuts;
DWORD m_Error;
Public:
CSerialPort( ); //構(gòu)造函數(shù)
virtual ~ CSerialPort( ); //析構(gòu)函數(shù)
//InitPort( )函數(shù)實(shí)現(xiàn)初始化串口
BOOL InitPort( );
DCB GetDCB( ); //獲得DCB參數(shù)
//SetDCB( )函數(shù)實(shí)現(xiàn)設(shè)置DCB參數(shù)
BOOL SetDCB ();
// GetTimeOuts( )函數(shù)獲得超時(shí)參數(shù)
COMMTIMEOUTS GetTimeOuts ();
// SetTimeOuts( )函數(shù)設(shè)置超時(shí)參數(shù)
BOOL SetTimeOuts ();
// WritePort( )函數(shù)實(shí)現(xiàn)寫(xiě)串口操作
Void WritePort (CString port, CString);
CString ReadPort(CString port ); //讀串口操作
BOOL ClosePort(CString port ); //關(guān)閉串口
};
對(duì)該類(lèi)的重要函數(shù)說(shuō)明如下:
InitPort( )函數(shù)完成串口的初始化工作,包括打開(kāi)串口、設(shè)置DCB參數(shù)、設(shè)置通信的超時(shí)時(shí)間等。打開(kāi)串口使用CreateFile( )函數(shù)。
SetDCB( )函數(shù)用于設(shè)置DCB參數(shù),包括傳輸?shù)牟ㄌ芈?、是否進(jìn)行奇偶校驗(yàn)、每字節(jié)長(zhǎng)度以及停止位等。
WritePort( )函數(shù)用來(lái)完成向串口寫(xiě)數(shù)據(jù),由于該系統(tǒng)中需要對(duì)多個(gè)串口進(jìn)行通信,所以把串口號(hào)作為參數(shù)傳遞給該函數(shù);該函數(shù)把要發(fā)送的數(shù)據(jù)先進(jìn)行編碼(加入校驗(yàn),以減少誤碼率),然后再調(diào)用Windows API函數(shù)WriteFile( )把數(shù)據(jù)發(fā)送到串口中。
ReadPort( )函數(shù)用來(lái)完成從串口讀數(shù)據(jù),它先調(diào)用API函數(shù)ReadFile( )把下位機(jī)發(fā)送的數(shù)據(jù)讀出來(lái)放到緩存里面,然后對(duì)數(shù)據(jù)進(jìn)行處理并變換成字符串(CString)類(lèi)型返回。
2.3 控制系統(tǒng)軟件設(shè)計(jì)中幾個(gè)關(guān)鍵技術(shù)性問(wèn)題的解決
2.3.1 上位機(jī)VC++程序設(shè)計(jì)中技術(shù)問(wèn)題
?。?)由于上位機(jī)和下位機(jī)需要進(jìn)行實(shí)時(shí)通信并且上位機(jī)還要對(duì)系統(tǒng)進(jìn)行實(shí)時(shí)監(jiān)控顯示,所以上位機(jī)程序設(shè)計(jì)中采用了多線程技術(shù)。當(dāng)監(jiān)控系統(tǒng)開(kāi)始工作時(shí),用AfxBeginThread()函數(shù)[4]創(chuàng)建輔助線程來(lái)管理串口通信。這樣設(shè)計(jì)后,當(dāng)進(jìn)行串口通信時(shí)候,主線程能夠繼續(xù)完成監(jiān)控功能和處理其它事務(wù)。輔助線程函數(shù)的主要代碼如下:
UINT SerialPro(void* param)
?。?
Ccrystal* mdlg=( Ccrystal*)param;
CString str;
int flag=1;
… … //如果初始化串口失敗返回
//循環(huán)讀寫(xiě)串口,直到結(jié)束
while(flag)
?。?
… … //這里把要發(fā)送的數(shù)據(jù)賦給變量str
//向串口寫(xiě)數(shù)據(jù)
mdlg->serial.WritePort(hport,str );
_sleep(100); //讓輔助線程休眠100毫秒
//從串口讀數(shù)據(jù)并賦給變量str
str=mdlg->serial.ReadPort( );
… … //這里把從串口得到的數(shù)據(jù)進(jìn)行處理
}
?。?
(2)由于在系統(tǒng)開(kāi)發(fā)中加入了數(shù)據(jù)庫(kù)開(kāi)發(fā),因此數(shù)據(jù)庫(kù)規(guī)劃也是一個(gè)工作重點(diǎn)。數(shù)據(jù)庫(kù)的開(kāi)發(fā)采用SQL Server,上位機(jī)通過(guò)在Visual C++中用ADO進(jìn)行數(shù)據(jù)庫(kù)編程。
2.3.2下位機(jī)PLC程序設(shè)計(jì)中技術(shù)問(wèn)題
下位機(jī)PLC主要是進(jìn)行實(shí)時(shí)控制,所以PLC程序運(yùn)行的好壞直接影響著整個(gè)系統(tǒng)工作的好壞,其中控制算法是需要認(rèn)真進(jìn)行設(shè)計(jì)的。本文將PID控制算法獨(dú)立出來(lái)成為一個(gè)子模塊,這樣做的好處是以后維護(hù)和升級(jí)比較方便,如果有更好的控制方法,只需要更改該P(yáng)ID控制模塊即可,這樣系統(tǒng)的維護(hù)代價(jià)比較低。
2.3.3IPC與PLC之間通信程序的設(shè)計(jì)
IPC與PLC之間采用主從應(yīng)答方式,IPC具有傳送優(yōu)先權(quán),根據(jù)需要向PLC發(fā)出讀寫(xiě)命令;下位機(jī)處于被動(dòng)狀態(tài)響應(yīng)上位機(jī)的命令。上位機(jī)讀數(shù)據(jù)時(shí)向PLC發(fā)出讀數(shù)據(jù)命令,PLC響應(yīng)命令并將數(shù)據(jù)傳回上位機(jī);寫(xiě)數(shù)據(jù)時(shí),上位機(jī)向PLC發(fā)出寫(xiě)命令及數(shù)據(jù),PLC即可接收。當(dāng)PLC沒(méi)能正確響應(yīng)時(shí),PLC返回沒(méi)能正確響應(yīng)標(biāo)志。
為了使IPC和PLC建立起正確的通信,必須進(jìn)行如下工作:首先,要定義好通信協(xié)議如指令格式等,且在PLC的特殊寄存器作相應(yīng)的設(shè)置;其次,要確定微機(jī)串行口且對(duì)進(jìn)行傳輸數(shù)據(jù)的端口參數(shù)進(jìn)行設(shè)置,如波特率、數(shù)據(jù)長(zhǎng)度、校驗(yàn)方式等;最后,由于數(shù)據(jù)傳輸過(guò)程中有誤碼率,所以需要進(jìn)行數(shù)據(jù)校驗(yàn),這里采用自己設(shè)計(jì)的數(shù)據(jù)校驗(yàn)算法。
3 應(yīng)用
本控制系統(tǒng)應(yīng)用于山東某金剛石加工廠,經(jīng)過(guò)半年多的運(yùn)行,本文所述的控制系統(tǒng)運(yùn)行情況良好,與原來(lái)的單純PLC控制系統(tǒng)相比,大大提高了控制精度和金剛石產(chǎn)品的質(zhì)量,大大減輕了操作人員的勞動(dòng)強(qiáng)度,基本上杜絕了誤操作?,F(xiàn)在,本控制系統(tǒng)能自動(dòng)記錄操作人員的工作情況及其所生產(chǎn)的產(chǎn)品質(zhì)量,還能考察職工的出勤情況,這樣使公司的管理上了一個(gè)新臺(tái)階。在取得良好的經(jīng)濟(jì)效益的同時(shí),也取得了良好的社會(huì)效益。
4 結(jié)論與建議
1、將IPC與PLC有機(jī)結(jié)合,發(fā)揮各自的優(yōu)勢(shì),并利用現(xiàn)有的設(shè)備,有效地解決了目前金剛石合成機(jī)控制系統(tǒng)不能適應(yīng)生產(chǎn)需要的問(wèn)題,提高了金剛石產(chǎn)品的控制精度和質(zhì)量,取得了良好的社會(huì)和經(jīng)濟(jì)效益,這無(wú)疑為傳統(tǒng)設(shè)備、傳統(tǒng)控制系統(tǒng)的改造走出了一條既經(jīng)濟(jì)又有效的方法。
2、計(jì)算機(jī)監(jiān)控操作人員的工作情況和產(chǎn)品質(zhì)量,提高了企業(yè)管理的科學(xué)化水平。
3、該控制系統(tǒng)軟件設(shè)計(jì)中應(yīng)用了面向?qū)ο蠹夹g(shù),使得軟件以后的維護(hù)和升級(jí)成本降低,很適合進(jìn)一步的推廣使用。
4、下位機(jī)PLC控制系統(tǒng)中采用的是參數(shù)自整定PID控制算法,可以根據(jù)實(shí)際情況采取其它的控制算法,比如模糊控制、自適應(yīng)控制和神經(jīng)網(wǎng)絡(luò)控制等。
5、根據(jù)需要,只需要將控制系統(tǒng)稍微改動(dòng),就可以由IPC控制多個(gè)PLC操作站。
參考文獻(xiàn):
[1] 何衍慶.集散控制系統(tǒng)原理及應(yīng)用[M]. 北京:化學(xué)工業(yè)出版社, 1999.
[2] 賴(lài)壽宏.微型計(jì)算機(jī)控制技術(shù)[M]. 北京:機(jī)械工業(yè)出版社,1998.
[3] 尹宏業(yè).PLC可編程控制器教程[M]. 北京:航空工業(yè)出版社, 1997.
[4] David J. Kruglinshi. Visual C++技術(shù)內(nèi)幕[M].潘愛(ài)民等譯. 北京:清華大學(xué)出版社,1999.
[5] 林俊杰. Visual C++6程序設(shè)計(jì)經(jīng)典[M]. 北京:科學(xué)出版社,1999.