国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

探討Delphi串口通信程序設(shè)計(jì)與實(shí)現(xiàn)

2013-04-29 20:40:07來(lái)曉俊
電腦知識(shí)與技術(shù) 2013年9期
關(guān)鍵詞:串口通信控件

來(lái)曉俊

摘要:該文主要針對(duì)Delphi串口通信程序的設(shè)計(jì)與實(shí)現(xiàn)進(jìn)行了研究和探討,在面向?qū)ο蟪绦蛟O(shè)計(jì)方法的基礎(chǔ)上,通過(guò)采用Delphi 編程技術(shù),利用軟件制作數(shù)據(jù)發(fā)生器來(lái)對(duì)硬件進(jìn)行模擬,從而產(chǎn)生相應(yīng)的數(shù)據(jù),然后利用已經(jīng)完成屬性和緩沖區(qū)等設(shè)置工作的Spcomm 控件,通過(guò)VCL 控件設(shè)計(jì)系統(tǒng)界面將所得數(shù)據(jù)及時(shí)發(fā)送出去,最終讓計(jì)算機(jī)對(duì)串口進(jìn)行有效的控制來(lái)完成數(shù)據(jù)的發(fā)送。

關(guān)鍵詞:Delphi;串口通信;控件

中圖分類(lèi)號(hào): TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2013)09-2112-05

1 串口及Delphi介紹

隨著我國(guó)科學(xué)技術(shù)水平的不斷提高,計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的應(yīng)用越來(lái)越廣泛,串口通信技術(shù)由于具有良好的靈活性以及可靠性進(jìn)一步促進(jìn)了我國(guó)國(guó)防科技的建設(shè),并影響著人們的生產(chǎn)和生活。過(guò)去在進(jìn)行通信控制的過(guò)程中,一般都是將PC機(jī)和開(kāi)發(fā)板分別作為上位機(jī)和下位機(jī),這主要是由于PC機(jī)具有較高的性?xún)r(jià)比,信息處理時(shí)速度較快,靈活性較大,所以在用戶(hù)界面上一般都會(huì)要求PC機(jī)擁有產(chǎn)生并傳輸相應(yīng)控制信號(hào)的功能,在這當(dāng)中信號(hào)的傳輸工作一般都是通過(guò)串口通信來(lái)完成的。不過(guò)串口通信也存在一些不足之處,比如在串口通信當(dāng)中,RS-232的實(shí)際傳輸距離一般都在30m以?xún)?nèi),而RS-485在進(jìn)行數(shù)據(jù)傳輸時(shí)通常都是透明的,如果把RS-232和RS-485聯(lián)合起來(lái)使用,串口才可以實(shí)現(xiàn)遠(yuǎn)距離的數(shù)據(jù)傳輸,所以在實(shí)際傳輸工作中還需要把RS-232轉(zhuǎn)換成為RS-485。而相對(duì)于并行傳輸來(lái)說(shuō),串口通信的傳輸速度雖然比較慢,不過(guò)使用過(guò)程中較為靈活、簡(jiǎn)單,可靠性較好,能夠有效的減少數(shù)據(jù)線(xiàn)的使用,特別是在進(jìn)行遠(yuǎn)距離通信的過(guò)程中,可以極大的節(jié)約通信成本。

Borland公司曾推出一種面向?qū)ο蟮母呒?jí)編程語(yǔ)言,具有較強(qiáng)的可視化,也就是實(shí)際應(yīng)用中較為常見(jiàn)的Delphi語(yǔ)言,該語(yǔ)言能夠把可視化設(shè)計(jì)Windows編程所具有的復(fù)雜性封裝和ObjectPascal語(yǔ)言進(jìn)行聯(lián)合,在用戶(hù)程序的編寫(xiě)中實(shí)用性更強(qiáng)。與此同時(shí)由于Delphi具有的多種優(yōu)點(diǎn)例如界面友好、功能較多等受到了廣大軟件開(kāi)發(fā)人員的青睞,特別是在數(shù)據(jù)庫(kù)開(kāi)發(fā)方面發(fā)揮了重要的作用。不過(guò)Delphi也存在一定的不足,其本身并不帶有串口通信控件,在實(shí)際開(kāi)發(fā)過(guò)程中不太方便,但是通過(guò)引入SPCOMM控件能夠有效的解決該問(wèn)題,促進(jìn)了眾多通信程序的開(kāi)發(fā)人員的軟件開(kāi)發(fā)工作。

2 利用 Delphi 實(shí)現(xiàn)串口通信的三種常用方法

Delphi 中實(shí)現(xiàn)串口通信最常見(jiàn)的三種方法分別是:首先是可以利用 API函數(shù),其次可以利用Spcomm 或者M(jìn)SComm控件;最后是直接將其他的串口通信程序調(diào)用過(guò)來(lái)。第一種方法對(duì)于一些編寫(xiě)相對(duì)復(fù)雜但是層次相對(duì)較低的通信程序來(lái)說(shuō)更具有優(yōu)越性,但是由于編寫(xiě)通訊程序具有的復(fù)雜性,對(duì)該方法提出的要求就是必須掌握大量的通信知識(shí)。因此第二種方法要比第一種簡(jiǎn)單一些,由Small-Pig Team研究開(kāi)發(fā)的一個(gè)第三方 Delphi 串口控件就是我們常說(shuō)的Spcomm 控件,通過(guò)到相關(guān)網(wǎng)站進(jìn)行下載,然后將其安裝到指定目錄當(dāng)中,能夠?qū)Υ谶M(jìn)行多種操作,該方法在編寫(xiě)通訊程序時(shí)較為簡(jiǎn)單,具有良好的可移植性能,而且非常通用,能夠支持多線(xiàn)程,目前已經(jīng)得到了廣泛的應(yīng)用。

2.1利用API函數(shù)實(shí)現(xiàn)串口通信

串口編程在不同的環(huán)境下(例如Windows環(huán)境和DOS 環(huán)境)存在很大的不同。其中在Windows環(huán)境下進(jìn)行串口通信編程的過(guò)程中,其主要特點(diǎn)就是設(shè)備具有無(wú)關(guān)性,在設(shè)備驅(qū)動(dòng)程序的幫助下,可以有效的把外界的各種設(shè)備和Windows應(yīng)用程序相互隔離開(kāi)來(lái)。Windows 通過(guò)封裝其通信機(jī)制進(jìn)而成為通信API,程序工作人員能夠利用通信API來(lái)完成各種編程工作,省去了對(duì)硬件進(jìn)行的各項(xiàng)操作。而在局域網(wǎng)通信當(dāng)中,由于通信API只能算做一個(gè)串行端口A(yíng)PI,所以適應(yīng)性較差。但是它能夠?qū)⒋诓僮骱臀募僮饔袡C(jī)的結(jié)合在一起,然后通過(guò)類(lèi)似操作來(lái)進(jìn)一步實(shí)現(xiàn)串口通信。一般在利用API函數(shù)時(shí)能夠?qū)崿F(xiàn)串口通信的事件主要包括下述幾種:

1)利用CreatFile 函數(shù)實(shí)現(xiàn)串口的打開(kāi)操作,利用CloseHandle函數(shù)對(duì)串口進(jìn)行關(guān)閉。

2)在獲取串口的當(dāng)前配置時(shí),可以通過(guò)GetCommState()函數(shù)來(lái)實(shí)現(xiàn);在對(duì)串口資源的所有參數(shù)進(jìn)行重新分配的過(guò)程中可以使用GetCommState()函數(shù)來(lái)實(shí)現(xiàn)。只有對(duì)串口設(shè)備的屬性有一定的了解才可以對(duì)其進(jìn)行相應(yīng)的配置。在獲取串口屬性的過(guò)程中可以利用GetCommProperties()函數(shù)。

3)利用ReadFile()函數(shù)進(jìn)行串口的讀取,利用WriteFile 函數(shù)寫(xiě)串口。

2.2 利用 MSComm 控件實(shí)現(xiàn)串口通信

MSComm 控件在實(shí)現(xiàn)數(shù)據(jù)傳輸和數(shù)據(jù)接收目的的過(guò)程中主要利用了串行端口,從而為應(yīng)用程序提供了相應(yīng)的串行通訊服務(wù)。程序員在利用MSComm 控件進(jìn)行串口編程的過(guò)程中不需要再掌握具有較高復(fù)雜程度的API函數(shù),而且其具有較強(qiáng)的適用性。

1) 常用的兩種能夠有效處理通訊的方法

MSComm控件的兩種處理通訊的方式主要包括查詢(xún)方法以及事件驅(qū)動(dòng)方法。

2)常用屬性

CommPort和PortOpen分別表示設(shè)置并返回通訊端的口號(hào)和狀態(tài);Input表示從接收緩沖區(qū)返回并同時(shí)進(jìn)行字符的刪除操作;Output表示向傳輸緩沖區(qū)當(dāng)中寫(xiě)一個(gè)字符串;EOFEnable表示確定輸入時(shí)控件是否在尋找EOF字符的狀態(tài);Settings表示通過(guò)字符串進(jìn)行設(shè)置并返回停止位、波特率、數(shù)據(jù)位以及奇偶校驗(yàn)等。

MSComm控件當(dāng)中只存在一個(gè)OnComm事件。

3)通過(guò)利用MSComm控件實(shí)現(xiàn)串口通信的具體步驟主要為:

① 進(jìn)行MSComm控件的添加操作;

② 初始化串口并將其打開(kāi);

③ 對(duì)串口事件進(jìn)行捕捉;

④ 按照要求對(duì)串口進(jìn)行讀寫(xiě);

⑤ 完成后關(guān)閉串口。

2.3利用 Spcomm控件實(shí)現(xiàn)串口通信

Delphi 7.0 并沒(méi)有自帶Spcomm控件,因此需要在相關(guān)網(wǎng)站下載該控件并將其安裝在指定位置。通過(guò)使用Spcomm控件就能夠有效的實(shí)現(xiàn)串口的通信,這主要是由于Spcomm控件掌握了大量和串口通信有關(guān)的屬性以及事件,并能夠提供多種操作,對(duì)于一般串口通信的需求來(lái)說(shuō)都能夠滿(mǎn)足。

Spcomm 控件的安裝方法:

1) 下拉菜單- Component- Install Component,出現(xiàn)Unit file name之后在該位置上填寫(xiě)該控件所在的具體路徑信息,其余項(xiàng)均設(shè)置為默認(rèn)值,然后點(diǎn)擊OK按鈕進(jìn)行安裝。

2)在完成安裝操作之后, System 控件面板里面會(huì)顯示紅色控件Com。

Spcomm 控件的具體屬性、方法以及相應(yīng)的事件:

1) Spcomm 控件的屬性

CommName:Com1、Com2 等串口所對(duì)應(yīng)的名字主要利用CommName來(lái)表示;

BaudRate:波特率,該值主要是根據(jù)實(shí)際情況進(jìn)行設(shè)定和更改的;

ParityCheck:是否需要進(jìn)行奇偶校驗(yàn)可以用ParityCheck表示;

ByteSize:字節(jié)長(zhǎng)度,按照實(shí)際需要進(jìn)行該值的設(shè)定;

Parity和StopBits:分別表示奇偶校驗(yàn)位和停止位;

SendDataEmpty:布爾型屬性,該屬性在true時(shí)主要表示發(fā)送隊(duì)列或者發(fā)送緩存為空;在false時(shí)則表示發(fā)送隊(duì)列或緩存當(dāng)中有信息。

2) Spcomm 控件的方法

在打開(kāi)串口的時(shí)候需要用到StartComm方法,在串口打開(kāi)失敗之后該方法會(huì)自動(dòng)報(bào)錯(cuò)。一般錯(cuò)誤種類(lèi)主要包括下述幾種,分別是:串口已經(jīng)打開(kāi)或者打開(kāi)過(guò)程中出現(xiàn)錯(cuò)誤;無(wú)法安裝通信緩存;無(wú)法產(chǎn)生讀進(jìn)程、寫(xiě)進(jìn)程以及事件等;文件句柄不屬于通信句柄。

在關(guān)閉串口時(shí)需要用到StopComm方法,該方法沒(méi)有返回值。

WriteCommData(pDataToWrite:PChar;該方法能夠把一個(gè)字符串發(fā)送到寫(xiě)進(jìn)程中,如果發(fā)送成功即可返回到true,一旦發(fā)送失敗則會(huì)返回到false。

在采用該方法的時(shí)候能夠立即獲得返回值,之后就可以執(zhí)行發(fā)送操作。在該方法中由于具有布爾型函數(shù),所以包括兩個(gè)參數(shù),其中dwSizeofDataToWrite主要表示發(fā)送字符串的具體長(zhǎng)度;而pDataToWrite則表示所要發(fā)送的字符串。

3) Spcomm 控件的事件

OnReceiveData:procedure (Sender:TObject;Buffer:Pointer;

BufferLength:Word) of object

該事件一般會(huì)在數(shù)據(jù)輸入到緩存當(dāng)中時(shí)觸發(fā),一般能夠有效處理從串口接收到的各種數(shù)據(jù)。Buffer主要表示接收到的數(shù)據(jù),BufferLength則表示該數(shù)據(jù)的具體長(zhǎng)度。

OnReceiveError:procedure (Sender:TObject;EventMask:DWORD)一旦在接收數(shù)據(jù)的過(guò)程中發(fā)生錯(cuò)誤,該事件就會(huì)被觸發(fā)。在Spcomm 控件的使用過(guò)程中,需要先添加一個(gè)Com 控件,通過(guò)設(shè)定該控件的屬性來(lái)對(duì)其發(fā)送和接收的觸發(fā)事件進(jìn)行設(shè)置,最后即可通過(guò)對(duì)源代碼進(jìn)行編寫(xiě)來(lái)完成調(diào)試工作。

4) Spcomm串口通信的具體實(shí)現(xiàn)過(guò)程

Spcomm串行通信控件的主要特點(diǎn)之一就是多線(xiàn)程,接收數(shù)據(jù)和發(fā)送數(shù)據(jù)不是在同一個(gè)線(xiàn)程中完成,其中在接收數(shù)據(jù)的過(guò)程中會(huì)觸發(fā)OnReceiveData事件;然后通過(guò)WriteCommData()函數(shù)把需要發(fā)送的數(shù)據(jù)快速寫(xiě)入到輸出緩沖器當(dāng)中,數(shù)據(jù)的發(fā)送工作即可在另一個(gè)線(xiàn)程中完成。

2.4 對(duì)其它串口通信程序進(jìn)行合理調(diào)試

在實(shí)現(xiàn)串口通信的過(guò)程中不僅可以使用Windows API 函數(shù)、Spcomm控件以及MSCOMM 控件,常見(jiàn)的SerialPort 控件以及CommPortDrv 控件同樣可以完成串口通信。

3系統(tǒng)的具體設(shè)計(jì)過(guò)程與實(shí)現(xiàn)方法

3.1發(fā)送窗口功能的實(shí)現(xiàn)過(guò)程

在該案例中主要是對(duì)慣導(dǎo)計(jì)算機(jī)以及其具有的環(huán)境應(yīng)力進(jìn)行測(cè)試。PC機(jī)可以按照用戶(hù)的實(shí)際需求將有效指令發(fā)送給單板,然后單板在執(zhí)行之后再將結(jié)果返回PC機(jī)上并且明確的顯示出來(lái)。該操作的主要流程如圖1所示。

在串口通信實(shí)現(xiàn)的過(guò)程中使用SPCOMM控件,需要按照設(shè)計(jì)規(guī)定將程序設(shè)計(jì)的大體框架構(gòu)建出來(lái),完成軟件界面的設(shè)計(jì)工作,然后對(duì)通信對(duì)象、端口號(hào)等進(jìn)行設(shè)置,根據(jù)實(shí)際需求編寫(xiě)程序,有效的完成數(shù)據(jù)的接收以及發(fā)送工作,最后將通信端口全部關(guān)閉即可。具體步驟主要為:

1)按照用戶(hù)的實(shí)際需求完成軟件界面的構(gòu)建工作。

2)初始化串口,同時(shí)設(shè)置SPCOMM控件的具體屬性值,將波特率設(shè)置為19200,規(guī)定字節(jié)長(zhǎng)度為8位、停止位為一位,將控件名確定為COM1,最后確定無(wú)奇偶校驗(yàn)位。

3)設(shè)置實(shí)現(xiàn)程序所需要的具體代碼。由于篇幅的限制,筆者只針對(duì)程序初始化代碼以及數(shù)據(jù)接收和發(fā)送所對(duì)應(yīng)的代碼進(jìn)行了闡述。

3.2 實(shí)時(shí)數(shù)據(jù)發(fā)送功能的實(shí)現(xiàn)過(guò)程

在設(shè)計(jì)過(guò)程中主要依賴(lài)于Timer 控件以及Spcomm 控件的使用。

1) 初始化

通過(guò)選擇在本次通信過(guò)程中所使用的串口,對(duì)該串口進(jìn)行波特率、數(shù)據(jù)位、停止位以及校驗(yàn)方式等各個(gè)屬性的設(shè)置,然后將該串口打開(kāi);

2)測(cè)試數(shù)據(jù)的發(fā)送方法

為了有效實(shí)現(xiàn)模擬實(shí)時(shí)數(shù)據(jù)的采集任務(wù),需要先完成串口的調(diào)試工作,在選擇測(cè)試信號(hào)的時(shí)候可以任意選擇一個(gè)特定的字符串,然后將測(cè)試信號(hào)發(fā)送出來(lái),如果接收事件能夠?qū)⑦@些特定的字符串成功收集,則表明測(cè)試數(shù)據(jù)發(fā)送成功,串口能夠正常發(fā)送數(shù)據(jù)。

示例代碼如下:

5)定時(shí)器的設(shè)計(jì)方法

為了實(shí)現(xiàn)自動(dòng)發(fā)送數(shù)據(jù)這一目的,可以對(duì)定時(shí)器的相關(guān)代碼以及屬性等進(jìn)行設(shè)置和編寫(xiě)。

4 結(jié)束語(yǔ)

總而言之,通過(guò)對(duì)比上述三種方法發(fā)現(xiàn),利用Spcomm 串行通信控件進(jìn)行串口通信程序的開(kāi)發(fā),其靈活性更好,而且操作更為簡(jiǎn)單,值得推廣應(yīng)用。

參考文獻(xiàn):

[1] 李軍.Delphi 7項(xiàng)目開(kāi)發(fā)實(shí)踐[M].北京:中國(guó)鐵道出版社,2003.

[2] 趙蘭濤,蘇彥華.Delphi 串口通信技術(shù)與工程實(shí)踐[M].北京:人民郵電出版社,2004.

[3] 張宏林.Delphi 7程序設(shè)計(jì)與開(kāi)發(fā)技術(shù)大全[M].北京:人民郵電出版社,2004.

[4] 劉宗鍵.Delphi 7程序設(shè)計(jì)入門(mén)[M].天津:天津電子出版社,2003.

[5] 劉斌,李文革.Delphi 7高級(jí)教程[M].北京:清華大學(xué)出版社,2004.

猜你喜歡
串口通信控件
關(guān)于.net控件數(shù)組的探討
軟件(2018年7期)2018-08-13 09:44:42
基于Qt和Flash的嵌入式Linux軟件架構(gòu)設(shè)計(jì)
串口通信在智能家居監(jiān)控系統(tǒng)中的應(yīng)用
基于OpenCV的室內(nèi)照明智能控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
科技視界(2016年13期)2016-06-13 22:01:19
基于MSP430單片機(jī)的窄帶無(wú)線(xiàn)數(shù)據(jù)傳輸模塊的設(shè)計(jì)
便攜式數(shù)傳電臺(tái)測(cè)試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
ASP.NET服務(wù)器端驗(yàn)證控件的使用
電子世界(2014年12期)2014-10-21 11:09:39
就這樣玩會(huì)VBA中常見(jiàn)的自定義控件
電腦迷(2012年24期)2012-04-29 00:44:03
Spreadsheet控件在Delphi數(shù)據(jù)庫(kù)系統(tǒng)中的編程與應(yīng)用
在PowerBuUder中利用WinSock控件制作簡(jiǎn)單的Web服務(wù)器
满城县| 宁河县| 舞钢市| 华容县| 临泉县| 虹口区| 太保市| 报价| 宜宾县| 栾川县| 抚宁县| 新野县| 舟曲县| 交口县| 兰考县| 平山县| 北安市| 竹山县| 荣成市| 钦州市| 浠水县| 黎川县| 新巴尔虎左旗| 社旗县| 高密市| 青浦区| 宝坻区| 遵化市| 永仁县| 剑阁县| 浑源县| 连州市| 高阳县| 邻水| 承德市| 仲巴县| 西和县| 礼泉县| 精河县| 陕西省| 彰化县|