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