Delphi環境下利用TComm組件實現串列通訊

來源:互聯網
上載者:User

摘要:利用Delphi開發工業控制系統軟體成為越來越多的開發人員的選擇,而串口通訊是這個過程中必須解決的問題之一。本文在對幾種常用串口通訊方法分析比較的基礎上,著重討論了Delphi開發環境下利用Spcomm控制項實現PC機與單片機之間串口通訊的方法,研究了Spcomm串口通訊的關鍵技術問題,並通過一個執行個體給出了Spcomm控制項在Delphi7.0串口通訊中的應用。

1 引言
目前, 隨著現代資訊技術的發展,電腦串口通訊技術已日趨成熟。由於微機效能價格比高、分析處理能力強、處理速度快以及單片機抗幹擾能力強、使用靈活等特點,利用PC機作為上位機,單片機作為下位機的主從工作方式在工業控制領域中被廣泛採用。無憂S3C2410 ARM9開發板 S3C44B0 ARM7 開發板350元單片機開發系統498元無憂單片機實驗開發板238元
PC機與下位機的通訊可以採用進階語言編程實現,如Delphi、VC等。Delphi 是新一代物件導向的可視化開發工具,它具有功能強大、簡便易用和代碼執行速度快等特點,越來越在構架公司資訊系統方面發揮著重要作用。由於Delphi 這些顯著特點,利用Delphi開發工業控制系統軟體成為越來越多的開發人員的選擇,而實現系統監測控制和資訊處理的關鍵是解決PC機與單片機之間的串口通訊問題。
2.Spcomm串口通訊組件簡介
用Delphi 實現串口通訊,常用的方法有:使用控制項,如Mscomm和Spcomm控制項等;使用API函數;在Delphi 中調用其它串口通訊程式[1]。使用API方法的優點是比較適合於編寫較為複雜的低層次通訊程式,但缺點是編寫串口通訊程式較為複雜,需要掌握大量通訊知識。Spcomm是Small-Pig Team開發的一個第三方Delphi串口控制項[2],該控制項具有豐富的與串口通訊密切相關的屬性及事件,提供了對串口的各種操作,且編程簡單、通用性強、可移植性好。在Delphi軟體開發中已經成為一個被廣泛應用的串口通訊開發控制項。
Spcomm共實現了三個類:串口類Tcomm、讀線程類TreadThread以及寫線程類TwziteThread[1]。Tcomm的某個執行個體在方法StartComm中開啟串口,並執行個體化了一個讀線程ReadThread和一個寫線程WriteThread,它們和主線程之間進行訊息的傳遞,實現串口通訊。
在Delphi7.0中安裝Spcomm串口通訊控制項的方法為:選擇Delphi7.0的"Component"菜單,點擊"Install Component..."功能表項目,然後在彈出的Into existing package屬性頁面中Unit file name輸人框中選擇SPCOMM.pas檔案,單擊兩次 "OK"按鈕後,就可以將Spcomm控制項安裝到Delphi7.0的System組件頁上。
3 Spcomm控制項串口通訊的實現
3.1 Spcomm控制項的基本屬性、方法和事件
Spcomm串口通訊控制項的基本屬性、方法和事件說明如下:
CommName屬性:電腦串口連接埠號碼的名字,COM1、COM2……等,在開啟串口前,必須填寫好此值。
Parity屬性:校正位 None、Odd、Even、Mark、Space等。
BaudRate:設定支援串口通訊用的傳輸速率9600,4800等,根據實際需要來定,在串口開啟後也可更改傳輸速率,實際傳輸速率隨之更改。
ByteSize屬性:表示一個位元組中,使用多少個資料位元收發資料,根據具體情況設定5、6、7、8等。
StopBits屬性:表示一個位元組中,使用停止位的位元,根據具體情況設定1、1.5、2等。
SendDataEmpty屬性:布爾屬性,為True時表示發送緩衝為空白,或者發送隊列裡沒有資訊;為False時表示表示發送緩衝不為空白,或者發送隊列裡有資訊。
StartComm方法:用來開啟通訊串口,開始通訊。如果失敗,則會導致串列口錯誤。錯誤類型大致分為串列口己處於開啟狀態,所以不能開啟串列口,不能建立讀寫進程,不能建立串列口緩衝區等。
StopComm方法:用來停止通訊串列口的所有進程,關閉串口。
WriteCommData(pDataToWriteChar;dwSizeofDataToWrite:Word)方法是帶有布爾型傳回值的函數,其中參量pszStr-ingToWrite是要寫入串列口的字串,DwSizeaf- DataToWrite是要寫入的字串的長度。該函數通過一個寫線程向串列口輸出緩衝區發送資料。發送操作將在後台預設執行。如果寫線程PostMessage成功,則傳回值是True,若寫線程失敗,傳回值是False。
OnReceiveData(Bufferointer;BufferLength:Word),其中Buffer是指向輸入緩衝區的指標。BufferLength是從緩衝區收到的資料長度。當輸入緩衝區收到資料時,該事件被觸發。當輸入緩衝有資料時將觸發該事件,對從串口收到的資料進行處理。
3.2 Spcomm串口通訊的實現
Spcomm串列通訊控制項具有多線程的特性,接收和發送資料分別在兩個線程內完成,接收線程負責收到資料時觸發OnReceiveData事件;用WriteCommData()函數將待發送的資料寫入輸出緩衝器,發送線程在後台完成資料發送工作。在接收和發送資料前需要初始化串口,用StartComm方法開啟串口,退出程式時用StopComm方法關閉串口。
實現PC機與單片機之間的資料發送及接收需要以下步驟:

(1)初始化並開啟串口

需要選擇本次通訊使用的串口,確定通訊協定,即設定傳輸速率、校正方式、資料位元、停止位等屬性,開啟該串口。範例程式碼如下:

//初始化並開啟串口
Comm1.BaudRate:=9600;//傳輸速率9600bps
Comm1.Parity:=None;//奇偶檢驗無
Comm1.ByteSize:=8;//資料位元8
Comm1.StopBits:=1;//停止位1
Comm1.StartComm; //開啟串口

(2)建立握手訊號

實現PC機與單片機之間的通訊,首先要調通它們之間的握手訊號,握手訊號可以隨意選擇某特定字串, 當PC發出這樣一幀資料後,通過接收事件能收到單片機返回的這一幀資料或特定的某字串,則表示握手成功,系統通訊正常。兩者之間就可以按照協議相互傳輸資料。否則需重建立立握手訊號。

(3)發送資料

在編寫基於串口的電腦工業測控時,通常需要由PC機向下位機發送命令以控制下位機的行為,同時向下位機發送有關資料。利用Spcomm串口控制項向下位機發送資料範例程式碼如下:
//發送資料和控制字程式
procedure senddata;
var
i:integer; commflg : Boolean;
begin
commflg:=true ;
for i:=1 to 8 do
begin
if not fcomm comml writecommdata(sendbutter,i) then
begin
Commflg=false;
break;
end;
end;
end;

(4) 接收資料

在編寫基於串口的電腦工業測控時,通常需要由下位機向PC機發送資料以使PC機瞭解系統的測試資料或下位機的運行狀態,並進而控制下位機的行為。利用Spcomm串口控制項接收下位機發送的資料資訊的範例程式碼如下:
//事件驅動方式接收資料程式
procedure TForm1.CommlReceiveData(Sender:Tobject;
Bufferointer; bufferLength:Word);
var
receivedata:array of byte;
begin
sleep(100);//等待100ms,保證接收到所有資料
move(buffef ,receivedata,bufferlength);
//將接收緩衝區中的資料轉移到數組中
……
end;

(5) 關閉串口

在系統開發中,應注意在不使用串口時應及時關閉串口,釋放系統資源,否則可能會影響系統的其它應用。關閉串口的代碼如下:
procedure TForm1.FormClose ( Sender;TObj ect:var Action:TCIoseAction );
begin
comml.StopComm ;
end;
4 Spcomm串口通訊的關鍵技術問題
Spcomm應用的核心在於主線程、讀線程和寫線程之間的訊息傳遞機制,而通訊資料相關資訊的傳遞也是以訊息傳遞的方式進行的。在使用Spcomm進行串口通訊編程,除按照說明使用外,還需要特別注意以下兩個問題。
首先,Spcomm是通過ReadIntervalTimeout屬性的設定,來確定所接收到的資料是否屬子同一幀資料,其預設值是100ms,也就是說,只要任何兩個位元組到達的時間間隔小於1OOms,都被認為是屬於同一幀資料,在與單片機協同工作時,要特別注意這個問題[2]。
另外,Spcomm的預設屬性設定是支援軟體流量控制的,用於流量控制的字元是13H(XoffChar)和11H(XonChar),當單片機以二進位方式發送資料時,必須要禁用Spcomm對於軟體流量控制的支援,否則,在資料幀中出現的13H,11H會被Spcomm作為控制字元而加以忽略。
5 結論
實踐證明,利用Spcomm串列通訊控制項在Delphi7.0中開發串口通訊程式,具有靈活、方便、高效的特點。本文作者創新點是在認真分析多個基於電腦串口工控測控系統的基礎上,分析了利用Spcomm控制項實現PC機與單片機之間串口通訊的方法,研究了Spcomm串口通訊的關鍵技術問題。在實際應用中取得了較好的應用效果,具有一定的實踐指導意義。


Technorati : 串口通訊;Delphi7.0;Spcomm控制項

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.