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