摘 要:介紹基于PC機和單片機溫度測控系統(tǒng)的設(shè)計方案。上位PC機利用VB 6.0中的MSComm通信控件發(fā)送控制命令和接收數(shù)據(jù)與處理,用戶界面友好。下位AT89S51單片機進行實時數(shù)據(jù)的采樣并發(fā)送給上位機,用匯編語言編寫程序。現(xiàn)場通信試驗表明,該系統(tǒng)通信可靠,對提高工控領(lǐng)域的自動化水平有積極作用。
關(guān)鍵詞:PC機; 單片機; MSComm控件; 串行通信
中圖分類號:TP274文獻標(biāo)識碼:B
文章編號:1004-373X(2010)08-0208-03
Design of Temperature Monitoring SystemBased on VB and Single Chip Microcomputer
WU Ai-ping
(School of Automation, Nanjing Institute of Technology, Nanjing 211100, China)
Abstract:The design of the temperature monitoring system based on PC and single chip microcomputer is presented. The transmission of control commands and the data reception and processing are performed in the upper computer by using the MSComm communication control component in VB6. 0. The user′s interface is good. The real-time data is collected and transmitted to the upper computer by the lower computer AT89S51 which is controlled by assembler language. Communication experimentation in spot shows this monitoring system is reliable. This system has active significance to improve automatization level of industry field.
Keywords:PC; single chip microcomputer; MSComm control component; serial communication
0 引 言
在現(xiàn)代測控系統(tǒng)中,由于PC機具有強大的數(shù)據(jù)處理能力和良好的用戶交互界面,單片機具有較強的現(xiàn)場抗干擾能力及良好的性價比[1],因此以PC機為上位機實施用戶控制和以單片機為下位機進行實時數(shù)據(jù)采集的分布式智能化控制系統(tǒng)無疑具有很好的應(yīng)用前景[2]。本文中單片機實現(xiàn)了溫度檢測,具有較好的實時性;PC機完成了數(shù)據(jù)顯示、存儲及統(tǒng)計分析,繪制了實時溫度曲線,并對系統(tǒng)目前所處狀況做出了評判。兩者之間以串行口進行通信聯(lián)絡(luò)。
1 數(shù)據(jù)采集系統(tǒng)的硬件基礎(chǔ)
該系統(tǒng)的下位機選擇Atmel公司的AT89S51單片機作為控制核心,負責(zé)采集現(xiàn)場溫度值。溫度傳感器將溫度轉(zhuǎn)換為電壓信號,經(jīng)模/數(shù)轉(zhuǎn)換器ADC0809轉(zhuǎn)換成8位數(shù)字量,并經(jīng)AT89S51的P1口進入單片機保存。上位PC機通過串行口與下位機聯(lián)絡(luò),向下位機發(fā)送控制命令和接收下位機上傳的數(shù)據(jù)以及進行人機交互。上位機采用VB 6.0進行人機交互界面設(shè)計,并利用其MSComm控件實現(xiàn)與下位機簡單而高效的串行通信。充分發(fā)揮了單片機在實時數(shù)據(jù)采集和PC機對圖形處理、顯示以及數(shù)據(jù)庫管理上的優(yōu)點[3],使得單片機的應(yīng)用已不僅僅局限于傳統(tǒng)意義上的自動監(jiān)測或控制,而是形成了以網(wǎng)絡(luò)為核心的分布式多點系統(tǒng)的發(fā)展趨勢[4]。
由于上下位機串行口工作電平不一致,它們之間通過MAX232芯片將單片機TTL電平轉(zhuǎn)換為RS 232電平,構(gòu)成如圖1所示的系統(tǒng)結(jié)構(gòu)框圖。
圖1 溫度檢測系統(tǒng)結(jié)構(gòu)框圖
2 VB環(huán)境下串行通信的實現(xiàn)方法
VB可視化界面的設(shè)計風(fēng)格具有簡單、易學(xué)、高效的特點,已成為眾多開發(fā)人員采用的工具,且被廣泛應(yīng)用到各個領(lǐng)域[5]。VB的MSComm通信控件,只需用戶編寫少量的程序代碼即可完成通信軟件的開發(fā)過程[6]。
2.1 MSComm控件簡介[7]
MSComm控件是Microsoft公司提供的串行通信ActiveX控件,MSComm控件通過串行口發(fā)送和接收數(shù)據(jù),為應(yīng)用程序提供串行通信功能。MSComm通信控件的主要屬性如下:
(1) CommPort屬性用于設(shè)置或返回通信連接端口。在設(shè)計時,CommPort屬性值可以設(shè)置成從1~16的任何數(shù)(缺省值為1)。
(2) Settings屬性用于設(shè)置初始化參數(shù)。以字符串的形式設(shè)置或返回聯(lián)機速率、奇偶校驗、數(shù)據(jù)位、停止位等4個參數(shù)。其格式為:“BBBB,P,D,S”。其中,BBBB表示聯(lián)機速率;P表示奇偶校驗位檢查方式;D表示數(shù)據(jù)位數(shù);S表示停止位數(shù)。該系統(tǒng)設(shè)其為“9600,N,8,1”。
(3) Portopen屬性用于設(shè)置或返回通信串口的狀態(tài)(開或關(guān))。Portopen屬性為Boolean類型,當(dāng)值為True時,表示打開串口;當(dāng)值為False時,表示關(guān)閉串口,并清空接收和發(fā)送緩沖區(qū)。
(4) Input屬性用于從接收緩沖區(qū)讀取數(shù)據(jù)。
(5) Output屬性用于向發(fā)送緩沖區(qū)寫入數(shù)據(jù)。
(6) InputMode屬性用于讀取或設(shè)置從接收緩沖區(qū)讀取數(shù)據(jù)的格式,當(dāng)InputMode=0時,數(shù)據(jù)以文字形式讀取;當(dāng)InputMode=1時,數(shù)據(jù)以二進制形式讀取。
2.2 上位機程序設(shè)計
上位機主要負責(zé)發(fā)送控制命令,以及數(shù)據(jù)的接收、處理、計算、數(shù)據(jù)的顯示等功能。上位機程序分為四個部分:界面設(shè)計、程序初始化、數(shù)據(jù)通信、數(shù)據(jù)處理。程序流程如圖2所示。
圖2 上位機程序流程圖
主操作界面主要分為四個組成部分,如圖3所示。為使界面清晰明了,用frame控件將其隔開。
其中,溫度界限部分主要用來顯示用戶自己設(shè)定的溫度上下限;數(shù)據(jù)接收部分采用外部控件MSFlexGrid來顯示已經(jīng)接收過來的數(shù)據(jù);統(tǒng)計計算部分用來顯示對數(shù)據(jù)分析后的結(jié)果,如最大值、最小值、平均值等,最后對當(dāng)前系統(tǒng)狀況作出綜合評判;溫度曲線部分顯示當(dāng)前所有溫度的變化情況,每個溫度值對應(yīng)曲線突出的一點,其中兩條虛線內(nèi)的點代表溫度值在界限范圍內(nèi),兩條虛線外的兩個點則表示該溫度值超出了界限范圍。
圖3 用戶操作界面及運行實例圖
進入主界面后,用戶首先單擊“開始聯(lián)絡(luò)”,此時上位機會向下位機發(fā)出聯(lián)絡(luò)信號,下位機受到預(yù)先設(shè)定的聯(lián)絡(luò)信號后,會將數(shù)據(jù)發(fā)送過來;然后單擊“接收數(shù)據(jù)”命令,此時會在MSFlexGrid控件中按先后順序依次顯示接收到的數(shù)據(jù);在進行數(shù)據(jù)處理之前,用戶可根據(jù)自身需求進行溫度界限的設(shè)定,僅單擊“界限設(shè)置”命令即可實現(xiàn);最后進行數(shù)據(jù)處理,單擊相應(yīng)命令按鈕后,會在界面繪出當(dāng)前溫度曲線,并計算出各種統(tǒng)計參數(shù)。
2.3 串口通信初始化程序
該程序主要用于對數(shù)據(jù)緩沖區(qū)以及串口部分的初始化,如串口的選擇、串口的數(shù)據(jù)格式等。這部分程序的代碼如下:
MSComm1.CommPort = 1′使用COM1串口
MSComm1.Settings = \"9600,n,8,1\" ′定義串口數(shù)據(jù)格式:波特率9 600 b/s,
無奇偶校驗,8位數(shù)據(jù),1位停止位
MSComm1.OutBufferCount = 0′清空發(fā)送緩沖區(qū)
MSComm1.InBufferCount = 0′清空接收緩沖區(qū)
MSComm1.PortOpen = True′打開串口
MSComm1.InputMode = 1′通過Input屬性以二進制形式取回數(shù)據(jù)
MSComm1.InputLen = 0′Input屬性一次讀取緩沖區(qū)內(nèi)全部數(shù)據(jù)
2.4 上位機通信程序
該程序由數(shù)據(jù)發(fā)送(聯(lián)絡(luò)信號)和數(shù)據(jù)接收組成。兩部分程序分別寫在對應(yīng)的命令按鈕“開始聯(lián)絡(luò)”、“接收數(shù)據(jù)”的Click事件下。具體程序代碼如下:
上位機發(fā)送命令程序:
Private Sub cmdstart_Click()
Dim outdata(1) As Byte′定義一個字節(jié)型數(shù)組outdata
outdata(1) = HAA′給其賦值16進制數(shù)AA
buf = \" \"′定義字符串變量buf,初始化為空串
buf = MSComm1.Input′清空輸入緩沖區(qū)
MSComm1.Output = outdata′將聯(lián)絡(luò)信號AA送至輸出緩沖區(qū)
End Sub
上位機數(shù)據(jù)接收程序:
Private Sub cmdreceive_Click()
Dim inbuf() As Byte′定義字節(jié)型動態(tài)數(shù)組接收數(shù)據(jù)
inbuf = MSComm1.Input′接收輸入緩沖區(qū)的數(shù)據(jù)
num = UBound(inbuf)′求數(shù)組上界
ReDim indata(0 To num) As Integer′定義相同長度的整型數(shù)組,顯示后為十進制數(shù)
For i = 0 To num′給數(shù)組賦值
indata(i) = inbuf(i)
Next i
For j = 0 To num′將數(shù)據(jù)送MSFlexGrid顯示
MSFlexGrid1.Col = 0
MSFlexGrid1.Row = j + 1
MSFlexGrid1.Text = FormatMYM(indata(j),\"0.0\")
Next j
End Sub
3 下位機通信軟件設(shè)計
下位機程序包括初始化部分、數(shù)據(jù)采集和接收聯(lián)絡(luò)信號部分、數(shù)據(jù)發(fā)送部分。
AT89S51單片機串行通信由定時器Tl作為波特率發(fā)生器,其波特率與PC機一致。數(shù)據(jù)的傳送格式為8位數(shù)據(jù)位和1位停止位。采用查詢方式發(fā)送和接收數(shù)據(jù),定時器T1設(shè)置為工作模式2,串行口設(shè)置為工作方式1[8]。
該設(shè)計將通信速率設(shè)置為9 600 b/s,SMOD=0,單片機晶振頻率為11.059 2 MHz,此時定時器T1的初值應(yīng)被設(shè)為:
X=256-11.059 2×106×(SMOM+1)384×9 600=253=FDH
3.1 接收上位機命令程序
接收上位機命令程序:
REV_WAIT:
JBC RI,REV;等待上位機聯(lián)絡(luò)信號
SJMP REV_WAIT;無聯(lián)絡(luò)則繼續(xù)等待
REV:
MOV A,SBUF;獲取聯(lián)絡(luò)信號
XRL A,#0AAH;與AA相比較
JNZ REV_WAIT;不是AA則繼續(xù)等待
3.2 數(shù)據(jù)發(fā)送程序
數(shù)據(jù)發(fā)送程序:
SEND:
MOV R1,#30H; R1指向緩存區(qū)首址
MOV R6,#14H;R6為計數(shù)器
SEND_BEG:
MOV A,@R1;發(fā)送一個數(shù)據(jù)字節(jié)
MOV SBUF,A
INC R1;修改緩存區(qū)地址
SEND_WAIT:
JBC TI,SEND_LOOP;判斷該字節(jié)的數(shù)據(jù)是否發(fā)完
SJMP SEND_WAIT;未發(fā)完則繼續(xù)等待
SEND_LOOP:
DJNZ R6,SEND_BEG;計數(shù)器減1不為0則繼續(xù)發(fā)送數(shù)據(jù)
JMP START;重新開始下一輪的通訊
4 結(jié) 語
單片機與上位機的通信在工業(yè)控制現(xiàn)場的應(yīng)用比較廣泛[9],利用VB提供的通訊控件MSComm對上位機進行編程比使用API函數(shù)編程更簡單靈活[10]。本文通過具體實例分析了計算機與單片機之間的通信方法。調(diào)試結(jié)果證明,該方案切實可行,能夠確保通信的穩(wěn)定,具有重要的現(xiàn)實意義。
參考文獻
[1]季華, 肖興明. 基于VB與單片機串行通訊的數(shù)據(jù)采集系統(tǒng)設(shè)計[J]. 煤炭工程, 2007(12): 134-136.
[2]張慧賢, 趙嚴峰. FP93溫控儀與計算機的串行通信[J]. 微計算機信息,2008, 24(27): 130-131.
[3]劉艷美. VB實現(xiàn)PC機與單片機(8051)的串行通訊[J]. 自動化技術(shù)與應(yīng)用, 2007, 26(2): 94-96.
[4]肖漢敏, 馮毅. 串行通信在實時數(shù)據(jù)采集系統(tǒng)中的應(yīng)用[J]. 微計算機信息, 2007, 23(13): 104-105.
[5]陳欣琳, 王海峰. PC機和MCS-51單片機之間的串行通信[J]. 中國科技信息, 2009(13): 86-87.
[6]董紅政, 王忠勇. 基于MSComm控件實現(xiàn)串行通信的方法[J]. 微計算機信息, 2007, 23(27):145-147.
[7]岳學(xué)軍, 陳珊. 基于單片機與串行通信的電子密碼鎖設(shè)計[J]. 云南農(nóng)業(yè)大學(xué)學(xué)報, 2009(1):154-157.
[8]王勇, 葉敦苑. 基于AT89S51的便攜式實時溫度監(jiān)測儀[J]. 儀表技術(shù)與傳感器, 2006(4):15-26.
[9]魏慶濤. 單片機在爐溫控制中的應(yīng)用[J]. 現(xiàn)代電子技術(shù), 2006, 29(7): 119-120.
[10]徐志如, 崔繼仁. 基于單片機的溫度智能測控系統(tǒng)的設(shè)計[J]. 傳感器與微系統(tǒng), 2006(5): 52-54.
作者簡介: 吳愛萍 女,1968年出生,碩士研究生,副教授。研究方向為智能控制及應(yīng)用。