1.引 言
WSH_A型精密溫度控制儀(以下簡稱:溫控儀)是我們自主研發(fā)的一種以微型計(jì)算機(jī)為核心的智能三點(diǎn)溫度控制儀器。溫控儀可以與各種型號(hào)的熱電偶配接,實(shí)現(xiàn)高精度的溫度檢測與控制。其檢測精度為0.05%,控制精度可達(dá)0.1%,現(xiàn)已成功應(yīng)用于半導(dǎo)體生產(chǎn)行業(yè)的溫度控制中。在實(shí)際應(yīng)用過程中,用戶往往需要同時(shí)觀察多臺(tái)溫控儀的運(yùn)行狀態(tài)并且記錄運(yùn)行數(shù)據(jù)供分析使用。
本文介紹的精密溫度控制儀數(shù)據(jù)采集系統(tǒng)在Delphi7.0環(huán)境下實(shí)現(xiàn)了多臺(tái)溫控儀的監(jiān)測、數(shù)據(jù)存儲(chǔ)、溫度曲線繪制、歷史曲線、數(shù)據(jù)查詢、報(bào)表等功能,大大方便了用戶的管理要求,系統(tǒng)采用RS485通信,最多可同時(shí)監(jiān)測16臺(tái)溫控儀。
2.硬件結(jié)構(gòu)及系統(tǒng)組成
2.1溫控儀的硬件結(jié)構(gòu)
溫控儀的硬件結(jié)構(gòu)及通信模塊原理圖如圖1所示:

圖1 溫控儀功能原理圖
在MAX485后加保護(hù)繼電器輸出,繼電器采用系統(tǒng)電源5V供電,系統(tǒng)未上電或異常斷電時(shí)斷開通信模塊與網(wǎng)絡(luò)的連接,從而使整個(gè)網(wǎng)絡(luò)更加穩(wěn)定可靠[1]。
2.2系統(tǒng)組成
溫控儀具有光電隔離的RS485通信接口模塊,RS485具有傳輸距離遠(yuǎn)、抗干擾性好等特點(diǎn),是工業(yè)現(xiàn)場中應(yīng)用較多的一種通信方式[4]。輸入給溫控儀的三點(diǎn)溫度模擬量經(jīng)過溫控儀內(nèi)部功能模塊轉(zhuǎn)換后送給上位機(jī)的串口。系統(tǒng)的連接圖如圖2所示:

圖2 通信系統(tǒng)結(jié)構(gòu)圖
上位機(jī)和溫控儀的通信方式采用廣播方式[4]。在運(yùn)行過程中,上位機(jī)處于主動(dòng)地位,溫控儀被動(dòng)接收到上位機(jī)發(fā)送的命令后,判斷地址是否和本機(jī)地址相同,進(jìn)而決定是否與上位機(jī)進(jìn)行數(shù)據(jù)傳輸。上位機(jī)按照地址號(hào)順序讀完所有連接在總線上的溫控儀稱為一個(gè)讀周期[1]。
3.通信協(xié)議的制定及通信實(shí)現(xiàn)
為了提高上位機(jī)的實(shí)時(shí)性,應(yīng)盡量減小每個(gè)讀周期的通信信息量,制定通信協(xié)議的重點(diǎn)是合理安排讀命令字,使修改頻率高的信息在每個(gè)讀周期都進(jìn)行傳輸,而修改頻率低的信息只有在修改后才進(jìn)行傳輸。
3.1設(shè)置命令字
溫控儀數(shù)據(jù)采集系統(tǒng)需要檢測的信息按更新頻率分為:
〔1〕檢測參數(shù):一套設(shè)備中三個(gè)測點(diǎn)的當(dāng)前溫度值,溫控儀當(dāng)前運(yùn)行段號(hào)、段運(yùn)行時(shí)間、運(yùn)行總時(shí)間,環(huán)境溫度和設(shè)定溫度、溫控儀當(dāng)前輸出控制量以及部分開關(guān)量狀態(tài)。這些參數(shù)修改頻率高,應(yīng)在每個(gè)讀周期內(nèi)進(jìn)行傳輸。
〔2〕控制參數(shù):PID控制參數(shù)、溫度修正參數(shù),采樣時(shí)間,溫度報(bào)警值,熱電偶類型,以及根據(jù)工藝要求所設(shè)定的20段溫度工藝曲線參數(shù)。這些參數(shù)修改頻率低,在修改后才需要進(jìn)行傳輸。
上位機(jī)和溫控儀發(fā)送數(shù)據(jù)采用廣播方式,上位機(jī)下傳命令均為6個(gè)字節(jié),其格式為:
[#]+[XX](地址)+[XX]+$0D。
其中:第1字節(jié)為頭字節(jié),第2、3字節(jié)為溫控儀地址,第4、5字節(jié)表示具體讀取內(nèi)容,如[RE]為讀取當(dāng)前溫度值及控制量參數(shù);[CT]為讀取控制參數(shù);[PI]為讀取PID及修正參數(shù);[LT]為讀取20段溫度工藝曲線參數(shù)。
3.2設(shè)置命令字優(yōu)先級
設(shè)置[RE]為關(guān)鍵命令字,具有高優(yōu)先級,在每個(gè)讀周期中讀取各溫控儀的檢測參數(shù)。在溫控儀上傳數(shù)據(jù)中設(shè)置一個(gè)狀態(tài)標(biāo)志位[X],監(jiān)視對應(yīng)的溫控儀有無控制參數(shù)修改,同時(shí)用來表示其它命令字的優(yōu)先級。如果用戶修改了溫控儀的控制參數(shù),則置狀態(tài)標(biāo)志位為1,相應(yīng)讀控制參數(shù)命令字的優(yōu)先級變高,上位機(jī)發(fā)送讀控制參數(shù)命令字,溫控儀接收到上位機(jī)發(fā)送的讀控制參數(shù)命令字并確定上傳數(shù)據(jù)后復(fù)位狀態(tài)標(biāo)志位。
3.3通信過程
本系統(tǒng)在通信協(xié)議中設(shè)置關(guān)鍵命令字,把通信過程中常用的查詢工作方式變?yōu)橹袛喙ぷ鞣绞?,大大提高了系統(tǒng)工作效率,通信過程的流程圖如圖3所示:

圖3 通信流程圖
3.4使用MSComm控件實(shí)現(xiàn)串口通信
MSComm控件是Visual Basic中提供的一個(gè)串口控件,使用簡單、性能良好,編程時(shí)不需要考慮復(fù)雜的API函數(shù),是串口通信中經(jīng)常使用的控件。
MSComm提供了事件驅(qū)動(dòng)方式和查詢方式兩種處理通信的方法。通信軟件編寫中,讀命令字的發(fā)送比較簡單,下位機(jī)返回?cái)?shù)據(jù)的接收部分要謹(jǐn)慎處理,要根據(jù)實(shí)際情況選擇是用事件驅(qū)動(dòng)方式還是查詢方式,事件驅(qū)動(dòng)方式必需保證每次下位機(jī)返回的存放在接收緩沖區(qū)的數(shù)據(jù)長度等于RThreshold屬性的設(shè)定值,以便激發(fā)OnComm( ) 事件,如果下位機(jī)對上位機(jī)發(fā)送的不同命令返回的數(shù)據(jù)長度不同就必須選擇查詢方式接收數(shù)據(jù)[4]。
注意,用查詢方式接收數(shù)據(jù)時(shí),在向輸出緩沖區(qū)發(fā)送完讀命令后,設(shè)置適當(dāng)時(shí)間的延時(shí)非常重要,一般可以用延時(shí)函數(shù)Sleep( )延時(shí),并根據(jù)返回?cái)?shù)據(jù)的長度設(shè)置合理的延時(shí)時(shí)間。
發(fā)送讀命令并延時(shí)合適時(shí)間后,輸入緩沖區(qū)就會(huì)返回對應(yīng)此命令的數(shù)據(jù),判斷數(shù)據(jù)是否正確的條件有三個(gè):數(shù)據(jù)頭為[#];數(shù)據(jù)尾為$0D;數(shù)據(jù)長度等于通信協(xié)議規(guī)定的長度。
4.系統(tǒng)功能及軟件結(jié)構(gòu)設(shè)計(jì)
4.1系統(tǒng)功能
本系統(tǒng)根據(jù)生產(chǎn)中用戶的需求設(shè)計(jì)所要實(shí)現(xiàn)的功能。
〔1〕 實(shí)現(xiàn)對連接在總線上溫控儀的工作狀態(tài)的監(jiān)測,溫控儀的工作狀態(tài)有檢測狀態(tài)、控制狀態(tài)和故障狀態(tài)。
〔2〕 參數(shù)讀?。鹤x取每個(gè)溫控儀的檢測參數(shù)和控制參數(shù)并實(shí)現(xiàn)數(shù)據(jù)庫存儲(chǔ)及實(shí)時(shí)三點(diǎn)溫度曲線繪制。
〔3〕 實(shí)現(xiàn)歷史數(shù)據(jù)查詢并顯示歷史溫度曲線功能。
〔4〕 實(shí)現(xiàn)報(bào)表及數(shù)據(jù)導(dǎo)出功能。
4.2軟件結(jié)構(gòu)設(shè)計(jì)
本系統(tǒng)的軟件實(shí)現(xiàn)分為三部分:第一部分實(shí)現(xiàn)溫控儀數(shù)據(jù)的讀入、處理、傳輸;第二部分實(shí)現(xiàn)數(shù)據(jù)分類顯示、存儲(chǔ)、曲線繪制;第三部分實(shí)現(xiàn)歷史數(shù)據(jù)及溫度曲線查詢、報(bào)表打印等功能。各部分的重點(diǎn)工作如下:
〔1〕 數(shù)據(jù)讀入:根據(jù)對溫控儀不同數(shù)據(jù)的讀取頻率的不同寫成兩個(gè)子過程ReadTemperature()和ReadPIDQX(),ReadTemperature()過程發(fā)送關(guān)鍵命令字,讀檢測參數(shù),ReadPIDQX()過程用來讀取控制參數(shù),子過程的形式參數(shù)是溫控儀的地址。ReadTemperature()子過程核心代碼:
procedure ReadTemperature (adress1,adress2:byte);
var
send_ReadTOrder:variant;//關(guān)鍵命令字用variant變量存儲(chǔ)
wendu_inputstring:string;//上傳的原始數(shù)據(jù)放在wendu_inputstring字符串里
InputLen,string_dingwei:integer;//數(shù)據(jù)長度和wendu_inputstring定位
Begin
send_ReadTOrder:= VarArrayCreate([0,5], varByte);
send_ ReadTOrder [0]:=$23; send_ ReadTOrder [3]:=$52;
send_ ReadTOrder [1]:=adress1; send_ ReadTOrder [4]:=$45;
send_ ReadTOrder [2]:=adress2; send_ ReadTOrder [5]:=$0D;
if MainForm.MSComm.PortOpen then //如果串口已經(jīng)打開,則發(fā)送讀溫度命令
begin
MainForm.mscomm.InBufferCount:=0; //清空輸入緩沖區(qū)
MainForm.mscomm.OutBufferCount:=0;//清空輸出緩沖區(qū)
MainForm.MSComm.Output:= send_ReadTOrder; //向輸出緩沖區(qū)發(fā)送讀溫度命令
sleep(600);//適當(dāng)延時(shí)
InputLen:=MainForm.MSComm.InBufferCount;//讀入輸入緩沖區(qū)里的返回?cái)?shù)據(jù)長度
wendu_inputstring:=MainForm.MSComm.Input;//直接以ASCII碼形式接收數(shù)據(jù)
string_dingwei:=pos(’*’,wendu_inputstring);//定位讀入的字符串
state:=copy(string_dingwei,wendu_inputstring)
if(InputLen>=50)&&(copy(string_dingwei,wendu_inputstring)=’*’)
&&( copy(string_dingwei+50,wendu_inputstring)=’ ’) then//注意入口條件,尤其是(InputLen>50)條件,50是通信協(xié)議中規(guī)定的返回?cái)?shù)據(jù)的長度
Begin
If (state==’1’)then
Begin
//發(fā)送ReadPIDQX()并做相應(yīng)數(shù)據(jù)處理
End else
……//處理數(shù)據(jù)并傳輸
End;
end;
〔2〕 數(shù)據(jù)顯示及溫度曲線繪制:數(shù)據(jù)顯示部分使用專業(yè)工業(yè)控件Iocomp,曲線繪制采用Teechartpro6版本,數(shù)據(jù)庫為Access2003。繪制溫度曲線時(shí),首先將溫控儀儲(chǔ)存的20段溫度工藝曲線以紅色畫出來,三點(diǎn)檢測溫度曲線則以藍(lán)、黃、綠三色畫出。注意圖像的縮放、托動(dòng)等輔助功能不使用Teechart的自帶功能,加兩個(gè)Scrollbar控件,用Srollbar的postion屬性控制時(shí)間軸(溫度軸)的min屬性實(shí)現(xiàn)時(shí)間軸(溫度軸)的拖動(dòng),溫度和時(shí)間軸的步長可以自由設(shè)置,實(shí)現(xiàn)曲線在時(shí)間軸(溫度軸)上的縮放。系統(tǒng)的主界面如圖4所示:

圖4 系統(tǒng)主界面
〔3〕數(shù)據(jù)存取及歷史數(shù)據(jù)查詢:每個(gè)溫控儀的歷史數(shù)據(jù)記錄按其運(yùn)行時(shí)間查詢,同時(shí)畫出運(yùn)行時(shí)的20段溫度工藝曲線和三點(diǎn)的歷史溫度曲線。每次系統(tǒng)運(yùn)行時(shí),用getlocaltime()函數(shù)取系統(tǒng)當(dāng)前時(shí)間,格式為xxYxxMxxDxxHxxM作為數(shù)據(jù)庫的表名,此次運(yùn)行記錄的數(shù)據(jù)都存在這個(gè)表里,這樣非常方便用戶的查詢,選擇儀表地址,就會(huì)在Listbox里顯示此儀表的所有歷史數(shù)據(jù)記錄,選擇要查詢的表名顯示記錄的數(shù)據(jù),同時(shí)將歷史曲線畫出,報(bào)表用Rave5制作[3],歷史數(shù)據(jù)也可以導(dǎo)出到Excel中編輯打印[2]。
5.結(jié)束語
本文所研制的實(shí)時(shí)數(shù)據(jù)采集系統(tǒng)配合WSH_A型精密溫度控制儀已經(jīng)應(yīng)用在半導(dǎo)體芯片生產(chǎn)的溫度控制中。在通信協(xié)議中設(shè)置關(guān)鍵命令字,把通信過程中通常使用的查詢工作方式變?yōu)橹袛喙ぷ鞣绞剑Y(jié)構(gòu)的優(yōu)化使系統(tǒng)運(yùn)行穩(wěn)定,實(shí)時(shí)性強(qiáng)。Teechart,Iocomp等第三方控件的靈活運(yùn)用使界面顯示曲線繪制更加專業(yè),滿足了用戶需求,并取得了良好的經(jīng)濟(jì)效益。
6.參考文獻(xiàn)
[1] 王媛婷,楊耿杰,郭謀發(fā). Delphi+MSComm控件開發(fā)串行通信程序 [J].工業(yè)控制,2004,7(2):8-11.
[2] 賽奎春,陳紫鴻,宋坤.Delphi數(shù)據(jù)庫開發(fā)關(guān)鍵技術(shù)與實(shí)例應(yīng)用[M].北京:人民郵電出版社,2004.5 197-227.
[3] 肖慶航,陸定淑.Delphi7數(shù)據(jù)庫開發(fā)教程[M].北京:清華大學(xué)出版社,2004.3 216-231.
[4] 趙蘭濤,蘇彥華.Delphi串口通信技術(shù)與工程實(shí)踐[M].北京:人民郵電出版社,2004.6 56-77.