王勇,魏建中,陳波
(工業(yè)和信息化部電子第五研究所,廣東 廣州 510610)
Keithley 2000儀表是一種高性能的數(shù)字型儀表,主要用于電流、電壓、電阻和頻率等參數(shù)的測量,在工業(yè)上和實驗室中具有廣泛的用途。該表測量精度高、噪聲低和功能全,但對于非專業(yè)測試人員,使用該表進行專業(yè)參數(shù)測量還是比較困難的,測量速度慢,測量效率低。
隨著智能儀表和虛擬儀表技術(shù)的快速發(fā)展,上下位機通訊的地位日益凸現(xiàn),如何通過上位機實現(xiàn)儀表數(shù)據(jù)的自動化采集已成為測試現(xiàn)場急需解決的問題。有了性能強大的硬件檢測平臺,如果沒有合適的軟件與之匹配,那么檢測儀表的性能將得不到充分的發(fā)揮。
本文將結(jié)合實驗室中電阻溫度循環(huán)前后阻值變化的測試過程,提出Keithley儀表數(shù)據(jù)采集系統(tǒng),該系統(tǒng)可以實現(xiàn)PC機對儀表的自動化采集、分析和合格判定。
Keithley 2000儀表通過RS 232[1-2]接口與上位機PC進行通信,采集的數(shù)據(jù)通過上位機中的軟件進行比較分析,系統(tǒng)結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)
本系統(tǒng)采用Delphi 7進行上位機編程,在進行通信程序的設(shè)計過程中,為了避免底層串口參數(shù)編程的初始化設(shè)置過程,提高開發(fā)效率,選用了功能強大的第三方SPComm控件,SPComm控件通過串行端口傳輸和接收數(shù)據(jù),為應(yīng)用程序提供串行通信功能。程序流程如圖2所示。
圖2 程序流程圖
SPComm控件具有豐富的、與串口通信密切相關(guān)的屬性,提供了對串口所進行的多種操作,進而使串行通信變得十分簡便。
SPComm共實現(xiàn)了3個類:串口類Tcomm、讀線程類TreadThread以及寫線程類TwriteThread[1]。Tcomm的某個實例在方法StartComm中打開串口,并實例化了一個讀線程ReadThread和一個寫線程WriteThread,它們和主線程之間進行消息的傳遞,實現(xiàn)串口通信。
Spcomm串口通信控件的基本屬性、方法和事件的說明如下:
1.1.1 基本屬性
a)CommName屬性
計算機串口端口號的名字,COM1、COM2……等;在打開串口前,必須填寫好此值。
b)Parity屬性
校驗位None、Odd、Even、Mark和Space等。
c)BaudRate
設(shè)定支持串口通信用的波特率9600,4800等,根據(jù)實際需要來定;在串口打開后也可更改波特率,實際的波特率隨之更改。
d)ByteSize屬性
表示一個字節(jié)中,使用多少個數(shù)據(jù)位來收發(fā)數(shù)據(jù),根據(jù)具體的情況設(shè)定5、6、7、8等。
e)StopBits屬性
表示一個字節(jié)中,使用停止位的位數(shù),根據(jù)具體的情況設(shè)定1、1.5、2等。
f)SendDataEmpty 屬性
布爾屬性,為True時表示發(fā)送緩存為空,或者發(fā)送隊列里沒有信息;為False時表示發(fā)送緩存不為空,或者發(fā)送隊列里有信息。
1.1.2 方法
a)StartComm方法
用來打開通信串口,開始通信。如果失敗,則會導致串行口錯誤。錯誤類型大致分為串行口己處于打開狀態(tài),所以不能打開串行口,不能創(chuàng)建讀寫進程,不能建立串行口緩沖區(qū)等。
b)StopComm方法用來停止通信串行口的所有進程,關(guān)閉串口。c)WriteCommData(1)pDataToWrite: PChar;2)dwSizeofDataToWrite: Word)方法
這是帶有布爾型返回值的函數(shù),其中參量pDataToWrite是要寫入串行口的字符串,dwSizeof-DataToWrite是要寫入的字符串的長度。該函數(shù)通過一個寫線程向串行口輸出緩沖區(qū)發(fā)送數(shù)據(jù)。發(fā)送操作將在后臺默認執(zhí)行。如果寫線程PostMessage成功,則返回值是True;若寫線程失敗,則返回值是False。
1.1.3 事件
Spcomm串行通信控件具有多線程的特性,接收和發(fā)送數(shù)據(jù)分別在兩個線程內(nèi)完成,接收線程負責收到數(shù)據(jù)時觸發(fā)OnReceiveData事件;用WriteCommData()函數(shù)將待發(fā)送的數(shù)據(jù)寫入輸出緩沖器,發(fā)送線程在后臺完成數(shù)據(jù)發(fā)送工作。在接收和發(fā)送數(shù)據(jù)前需要初始化串口,用StartComm方法打開串口,退出程序時用StopComm方法關(guān)閉串口。
Spcomm應(yīng)用的核心在于主線程、讀線程和寫線程之間的消息傳遞機制,而通信數(shù)據(jù)相關(guān)信息的傳遞也是以消息傳遞的方式進行的。在使用Spcomm進行串口通信編程時,需要特別注意以下兩個問題:
a)Spcomm是通過ReadIntervalTimeout屬性的設(shè)置來確定所接收到的數(shù)據(jù)是否屬子同一幀數(shù)據(jù),其默認值是100 ms;也就是說,只要任何兩個字節(jié)到達的時間間隔小于100 ms,都被認為是屬于同一幀數(shù)據(jù),在與儀表機協(xié)同工作時,要特別注意這個問題[2]。
b)Spcomm的默認屬性設(shè)置是支持軟件流控制的,用于流控制的字符是13 H(XoffChar)和11 H(XonChar),當儀表以二進制方式發(fā)送數(shù)據(jù)時,必須要禁用Spcomm對于軟件流控制的支持;否則,在數(shù)據(jù)幀中出現(xiàn)的13 H和11 H會被Spcomm作為控制字符而加以忽略。
由于Delphi 7中沒有直接集成串口控件,所以,首先需要把SPComm控件添加到Delphi 7中。
在Delphi 7.0中安裝SPComm串口通信控件的方法為:選擇 Delphi 7.0的 “Component” 菜單,點擊 “Install Component..” 菜單項,然后在彈出的Into existing package屬性頁中的Unit file name輸人框中選擇SPCOMM.pas文件,單擊兩次 “OK”按鈕后,就可以將SPComm控件安裝到Delphi 7.0的System組件頁上。
對SPComm控件進行初始化,初始化的指令如下:
正常的串口通信建立后,就可以由PC上位機通過SPComm控件提供函數(shù)WriteCommData(pDataToWrite:PChar; dwSizeofDataToWrite:Word):Boolean;向Keithley 2000發(fā)出操控指令。
以下是采集數(shù)據(jù)的指令舉例,可以完成電阻阻值的基本參數(shù)測量。
指令以回車符結(jié)束,如 “DATA?”指令的程序代碼如下:
由于SPComm采用事件驅(qū)動機制,只要儀表向PC機發(fā)送數(shù)據(jù),SPComm就觸發(fā)一次接收事件,相應(yīng)的數(shù)據(jù)存放在接收緩沖區(qū),SPComm以接收數(shù)據(jù)的時間間隔區(qū)分不同的事件,事件間隔在Read-InteralTimeout中設(shè)置。接收事件驅(qū)動機制的最大優(yōu)點是無需程序?qū)邮站彺嬉恢碧幱跈z查狀態(tài),只要有數(shù)據(jù)到達就會觸發(fā)接收事件而執(zhí)行相應(yīng)的程序代碼。
SPComm控件提供 OnReceiveData事件,當控件接收數(shù)據(jù)時執(zhí)行該事件,可在該事件中對接收到的數(shù)據(jù)進行分析處理。以下是對采集的數(shù)據(jù)進行分析的代碼,可以實現(xiàn)阻值的自動判定,超出指標,則顯示為紅色。
電阻初次測量阻值、溫度循環(huán)試驗后再次測量阻值,并計算兩次測量的阻值變化,每次測量值及變化量有相應(yīng)的指標范圍,針對筆者所在的實驗室測量樣品多,測試指標相對簡單的特點,為提高工作效率,采用Delphi 7編寫上位機軟件,通過RS 232接口連接Keithley儀表實現(xiàn)數(shù)據(jù)自動采集,系統(tǒng)界面如圖3所示。
圖3 系統(tǒng)界面
系統(tǒng)有如下特點:
系統(tǒng)對讀取的數(shù)值設(shè)置了量級和精度,可自定義量級和精度;實現(xiàn)了數(shù)據(jù)的自動計算、儲存整套數(shù)據(jù)及查詢,大大簡化了操作步驟,實現(xiàn)了全程無紙化測量,有效地避免人為誤差,極大地方便了后續(xù)數(shù)據(jù)處理;成功讀取數(shù)據(jù)后對樣品編號自動加一,便于讀取下一樣品數(shù)據(jù);對數(shù)據(jù)自動分析后,不合格的數(shù)據(jù)將用紅色標識;測試數(shù)據(jù)可以保存到Excel表中,方便保存及后期處理;系統(tǒng)出錯采用多媒體聲音報警,操作人員不必時刻監(jiān)視計算機和儀表了;配合USB串口轉(zhuǎn)換器即可實現(xiàn)Keithley全系列數(shù)字萬用表即插即用,沒有RS 232串口的計算機同樣可以方便地通過此軟件控制Keithley數(shù)字萬用表。
在實際的測量過程中,操作人員將樣品放置好后,直接按回車鍵即可完成所有的工作。如果這一測試工作同樣由人工手動完成,則不僅效率低下,而且測量精度也得不到保證。人工測試和自動采集性能的比較如表1所示。
表1 人工測試和自動采集性能比較
本系統(tǒng)采用計算機軟件技術(shù)實現(xiàn)數(shù)據(jù)自動采集,對傳統(tǒng)的人工測量電阻的測試方法進行了重大的改進,實現(xiàn)了電阻阻值的自動測量及溫度循環(huán)前后的阻值變化比較,大大提高了電阻阻值參數(shù)測試的自動化水平,減少了人員的工作量,提高了數(shù)據(jù)的可信度;另外,本系統(tǒng)也可對電壓、電流等參數(shù)進行測量。
[1]范逸之,陳立元.Delphi與RS-232串行通信控制[M].北京:清華大學出版社,2002.
[2]黃軍,熊勇.Delphi串口通信編程[M].北京:人民郵電出版社,2002.