張 恒,宗 毅
(陜西省火箭軍工程大學(xué),西安 710025)
所謂的串行通信主要是將數(shù)據(jù)逐一傳輸,而并行通信使將按照字節(jié)等方式進(jìn)行數(shù)據(jù)傳輸。在串行通信中,雖然其速度較為緩慢,但是具有較強(qiáng)的抗干擾能力,能夠?qū)崿F(xiàn)較遠(yuǎn)距離的傳輸,因此在通信領(lǐng)域的應(yīng)用較為廣泛。而并行接口雖然在傳輸速度上占有一定的優(yōu)勢,但由于抗干擾能力較差,只適合于較短距離的傳輸,在實際應(yīng)用中受到很大的阻礙,特別是在USB接口誕生以后,在速度和抗干擾能力上都呈現(xiàn)出較大的優(yōu)勢,使得并口傳輸逐漸淡出人們視野,串口通信的應(yīng)用變得日漸廣泛。十幾個字符以后才會形成,產(chǎn)生上述問題的主要原因可能是受到Windows多任務(wù)操作使系統(tǒng)不響應(yīng)的因素影響而成。
另外,在控件使用的過程中會發(fā)生接收數(shù)據(jù)不具體現(xiàn)象。例如,將控件中的屬性值設(shè)置為“1”后,將一組數(shù)據(jù)從發(fā)送端中傳出,數(shù)據(jù)為“AA EF CB DD C6 57 87 BB”,在緩沖區(qū)將該組數(shù)據(jù)定義為1024B,但是當(dāng)其首次接收這組數(shù)據(jù)時,則顯示數(shù)據(jù)為“AA EF CB DD C6”,再次接收此組數(shù)據(jù)為“57 87 BB”,由此可見,這組數(shù)據(jù)并沒有被一次性接收,而是分成了兩批,產(chǎn)生此種現(xiàn)象的原因可能是受到系統(tǒng)操作的影響。對此,為了保障接收端中數(shù)據(jù)的完整性,應(yīng)對所接收到的數(shù)據(jù)進(jìn)行細(xì)致的檢測。
在Delphi中最為顯著的優(yōu)勢便是功能強(qiáng)大,能夠支持多線程編程技術(shù),便于實現(xiàn)串口通信?,F(xiàn)階段,在Delphi基礎(chǔ)上進(jìn)行串口通信的方式有很多種,例如MSComm控件、API函數(shù)、其他串口通信程序等。其中,API函數(shù)編寫的方式較為復(fù)雜,需要應(yīng)用到大量的通信知識才能完成,但是當(dāng)對數(shù)據(jù)實時性有嚴(yán)格要求時,API方式將處于首選地位。與其相比較來說,MSComm控件的設(shè)計方式較為簡單,并且還具有較強(qiáng)的豐富性,能夠與串口通信屬性相匹配,在本次研究中將采用此種方式進(jìn)行串口通信設(shè)計。
在Delphi基礎(chǔ)上進(jìn)行串口通信設(shè)計的方式分為四種,分別為使用Spcomm控件、MSComm控件、行間匯編ASM、其他串口通信程序。本文主要對前兩種串口通信方式進(jìn)行設(shè)計。
MSComm控件安裝于VB5.0當(dāng)中,在使用之前,需要將其安裝到系統(tǒng)當(dāng)中,由于其具有較強(qiáng)的豐富性,能夠與串口通信屬性相匹配,是串口操作功能變得更加多樣化,屬于十分具有較強(qiáng)可行性的控件之一,將其應(yīng)用到串行通信當(dāng)中,也使得操作變得更加便利。
當(dāng)串口通信事件發(fā)生時,將會產(chǎn)生OnComm事件,如若事件類型為接收事件,則Comevent的數(shù)值為“2”,設(shè)計人員可以按照對數(shù)值的判斷來接收數(shù)據(jù)。通常情況下,在數(shù)據(jù)接收的過程中還應(yīng)對控件的屬性進(jìn)行設(shè)置,它能夠?qū)彌_區(qū)的字符數(shù)量進(jìn)行接收之后,形成OnComm事件。但是在對空間屬性進(jìn)行利用的過程中,通常會產(chǎn)生以下這種問題。例如,控件中的屬性值為“1”時,在緩沖區(qū)的任意字符中都將會利用控件形成OnComm事件。但事實上,OnComm事件并不是隨便接收到任意字符便能夠形成的,有時其在緩沖區(qū)中接收
在Delphi基礎(chǔ)上進(jìn)行串口通信程序設(shè)計時,由于控件中的屬性均為變量,并且Delphi能夠?qū)崿F(xiàn)屬性與字符類型之間的所以調(diào)換,因此可以直接在屬性值賦予給字符,這樣便能夠保障兩個屬性之間的簡單數(shù)據(jù)傳輸。在利用Spcomm控件進(jìn)行串口通信的過程中,首先要在符合設(shè)計要求的基礎(chǔ)上建立程序設(shè)計框架和軟件界面,然后對通信對象、PC機(jī)、通信端口號等進(jìn)行設(shè)置,最后根據(jù)相關(guān)需要對實現(xiàn)程序進(jìn)行編寫、發(fā)送、接收,最終將通信端口關(guān)閉,其中主要的實現(xiàn)步驟有以下幾個方面。
一是按照具體需求建立軟件界面。二是對串口進(jìn)行初始化設(shè)置,確定Spcomm控件屬性值。在本文的設(shè)計中,將其屬性值設(shè)置為波特率為19200,字節(jié)長度為8位,無奇偶校驗位,停止位一位。
(1)打開串口:procedure Tfcomm.for,showClick(Sender:TObject);begin comml.StartComm ;
(2)發(fā)送數(shù)據(jù):procedure Tfcomm.BtnsdramClick(Sender:TOBject);var strsend:string.
(3) 接 收 數(shù) 據(jù):procedure Tfcomm.CommlReceiveData(Sender:Tobject;Word)var strrcv;string.
(4)關(guān)閉窗口。
綜上所述,在Delphi基礎(chǔ)上進(jìn)行串口通信設(shè)計的方式多種多樣,其中最為主要的兩種為Spcomm控件和MSComm控件,經(jīng)過本文的闡述和驗證,使MSComm控件在串口通信中的問題得到有效解決,也充分體現(xiàn)出Spcomm控件在通信過程中具有較強(qiáng)的穩(wěn)定性和界面友好性。同時,在串口編程的過程中,該控件也能夠使設(shè)計周期有效的縮短,使系統(tǒng)的可靠性顯著提升,使得Delphi開發(fā)工具在串口編程中的應(yīng)用變得更加廣泛。