摘要:本文主要介紹了DELPHI串行通信,以及怎樣使用Delphi語言編程實現(xiàn)溫度的實時采集以及處理顯示。
引言
溫度是一個十分重要的物理量,對它的測量與控制有著十分重要的意義,在現(xiàn)代工業(yè)生產(chǎn)中溫度也是常見的工藝參數(shù)之一,任何物理變化和化學(xué)反應(yīng)過程都與溫度密切相關(guān),隨著時代的不斷發(fā)展,現(xiàn)代工農(nóng)業(yè)技術(shù)的不斷進(jìn)步,人們對生活環(huán)境要求的提高,使得對于溫度的測量和控制的要求越來越高,迫切需要檢測與
控制溫度。
1、系統(tǒng)總體介紹
本系統(tǒng)主要包括三個模塊:下位機(jī)硬件設(shè)計部分、下位機(jī)軟件設(shè)計部分和上位機(jī)軟件設(shè)計部分。本文涉及的主要是上位機(jī)軟件程序設(shè)計部分,使用語言Delphi編制上位機(jī)監(jiān)控程序,并通過RS-232串行通信口與下位機(jī)系統(tǒng)實現(xiàn)實時通信。同時為了操作方便,系統(tǒng)還附加了遙控器部分。其中系統(tǒng)的原理框圖如圖1所示:
圖1系統(tǒng)的原理框圖
2、主要控件介紹:
2.1TComm控件:
用Delphi實現(xiàn)串口通訊,常用的幾種方法為:使用控件如TComm,使用API函數(shù)或者在Delphi中調(diào)用其它串口通訊程序。下面詳細(xì)介紹TComm的使用。
a)TComm的主要屬性
Name:對象的名稱,對象放置完成后,是*個必須要設(shè)置的屬性。
CommPort:通信端口的選擇。
PortOpen:打開或關(guān)閉通信端口。
BaudRate:傳輸速度的選擇。
b)TComm的主要事件
ONReceiveData:當(dāng)接收到數(shù)據(jù)時觸發(fā)。
OnReceiveError:當(dāng)接收數(shù)據(jù)錯誤時觸發(fā)。
OnModemSTateChange:當(dāng)引腳的電壓發(fā)生變化時觸發(fā)。
d)TComm的主要方法
OutputString:輸出文字?jǐn)?shù)據(jù)到串行端口。
OutputByte:輸出字節(jié)數(shù)據(jù)到串行端口。
ReadInputByte:以字節(jié)方式讀取緩沖區(qū)內(nèi)的數(shù)據(jù)。
2.2TChart組件:
TChart是Delphi里面一個標(biāo)準(zhǔn)的圖形顯示控件。它可以靜態(tài)設(shè)計(atdesigntime)也可以動態(tài)生成。TChart的實時繪制對機(jī)器性能要求比較高,因此在編程的時候要注意:
?。?)使用2d圖形;⑵Chart盡可能包含少的點。
a)TChart組件的主要事件
OnPageChange:當(dāng)改變頁的時候,此事件發(fā)生。
OnMouseDown:當(dāng)鼠標(biāo)按下時產(chǎn)生。
OnAfterDraw事件:該事件是在繪制所有的Series時發(fā)生的。
OnClick事件:該事件是在用戶單擊Series點時發(fā)生的。
OnZoom事件:該事件是在圖表放大時觸發(fā)。
b)TChart組件的主要方法
ActiveSeriesLegend函數(shù):該函數(shù)用于返回當(dāng)前活動的Series,如果所有的Series都是活動的,需要為該函數(shù)確定要返回Series的序號。
AddSeries過程:該過程用于添加一個Series對象。
3、系統(tǒng)各具體模塊設(shè)計
3.1系統(tǒng)主界面設(shè)計
用戶登錄到主界面之后,在主界面中,可以實現(xiàn)通過面板或者菜單來設(shè)置溫度的上下限,系統(tǒng)實時顯示測試時間,同時在面板上通過狀態(tài)燈顯示當(dāng)前系統(tǒng)的工作狀態(tài)。
圖2系統(tǒng)主界面
同時在主界面的菜單中,可以進(jìn)行通信端口的選擇、通信波特率的選擇、修改密碼、幫助以及退出系統(tǒng)。
3.2修改密碼模塊設(shè)計
為了系統(tǒng)的安全,系統(tǒng)增加了修改密碼模塊。如果要修改密碼,首先要輸入原來的密碼,而后輸入新密碼,zui后重新輸入新密碼并確定,如果輸入的兩次新密碼相同,則修改密碼成功,如果輸入的兩次新密碼不同,則修改密碼失敗,則重新輸入新密碼。
3.3通信模塊的設(shè)計
本次設(shè)計使用RS232轉(zhuǎn)RS485轉(zhuǎn)換器實現(xiàn)遠(yuǎn)程監(jiān)控的,采用的是半雙工的數(shù)據(jù)傳輸方式和異步通信方式,串行口工作于模式1。
傳輸數(shù)據(jù)的格式如下:首先上位機(jī)發(fā)送FF給下位機(jī),下位機(jī)檢測到時,將溫度傳送給上位機(jī)。向單片機(jī)發(fā)送上限溫度命令,格式:FE,XX;向單片機(jī)發(fā)送下限溫度命令,格式:FD,XX;設(shè)置監(jiān)控,格式:FC;取消監(jiān)控,格式:FB;向單片機(jī)發(fā)送點擊上限按鈕,格式:FA;向單片機(jī)發(fā)送點擊下限按鈕,格式:F9。
)接收數(shù)據(jù)
上位機(jī)采用事件驅(qū)動方式接收數(shù)據(jù)。當(dāng)下位機(jī)傳送一幀數(shù)據(jù)上來輸入緩存時,將觸發(fā)TCOMM組件的OnReceiveData事件,對數(shù)據(jù)進(jìn)行接收。然后對接收的數(shù)據(jù)進(jìn)行判斷,分別轉(zhuǎn)相應(yīng)的處理程序。下面是數(shù)據(jù)接收的程序段:
begin
try
count:=form1.Comm1.ReadInputByte(pt);
if((count+1)mod4<>0)then
begin
form1.Comm1.DataCount:=0;
exit;
end;
fori:=0to3do
begin
re[i]:=pt^;
inc(pt);
end;
…//數(shù)據(jù)處理部分
b)發(fā)送數(shù)據(jù)
發(fā)送數(shù)據(jù)采用異步I/O方式,即將要發(fā)送的數(shù)據(jù)用WriteCommData方法發(fā)送到寫線程,然后立即返回。該方法所有的操作均在后臺進(jìn)行,如果發(fā)送成功,返回True,發(fā)送失敗,返回False。下面是發(fā)送數(shù)據(jù)的主要程序段:
form1.Comm1.PortOpen:=true;
form1.Comm1.OutputByte(send);
timedelay(300);
3.4系統(tǒng)初始化模塊設(shè)計
本系統(tǒng)初始化部分設(shè)計程序如下:
begin
Position:=poscreencenter;
form1.Comm1.DataCount:=0;
form1.Comm1.RThreshold:=1;
form1.Comm1.PortOpen:=true;//串行口初始化
form1.sys_ini();//系統(tǒng)參數(shù)初始化
…
3.5參數(shù)設(shè)置模塊設(shè)計
為了系統(tǒng)的操作方便,在菜單中加入了參數(shù)的設(shè)置,可以選擇串行口,選擇通信的波特率等等。
4、結(jié)束語
系統(tǒng)經(jīng)過一個多月的觀察測試,該軟件系統(tǒng)運行穩(wěn)定,使用操作方便,測量精度高。