摘 要:文章以MFC的CDialog類為中心,加上CSerial類的支持,采用RS-232接口標(biāo)準(zhǔn),使用MFC進(jìn)行串口調(diào)試助手程序開(kāi)發(fā),并在程序中提供通信口、波特率、數(shù)據(jù)位、校驗(yàn)位和停止位等通信參數(shù)的設(shè)置。希望能夠?qū)ο嚓P(guān)工作提供參考。
關(guān)鍵詞:串口通信;C++;MFC;RS-232
1 串行通訊協(xié)議
如今計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)和多微機(jī)系統(tǒng)的應(yīng)用廣泛,計(jì)算機(jī)通信的重要性越發(fā)顯現(xiàn)[1]。計(jì)算機(jī)通信可以分為并行通信和串行通信。并行通信將數(shù)據(jù)字節(jié)的各位用多條數(shù)據(jù)線同時(shí)傳送,控制簡(jiǎn)單,傳輸速度快,但是成本較高。串行通信則將數(shù)據(jù)字節(jié)分成一位一位的形式在一條傳輸線上逐個(gè)傳送,成本低,但是控制復(fù)雜。串行通信更方便易行,所以應(yīng)用十分廣泛,文章中的串口通訊采用串行通訊。
在實(shí)現(xiàn)計(jì)算機(jī)通信中,首先需要確定使用什么協(xié)議。所謂協(xié)議,實(shí)際上就是通信雙方彼此都知道、并且遵守的東西。協(xié)議包含的信息必須在通信之前送達(dá),協(xié)議對(duì)于所控制的通信而言是先驗(yàn)的[3]。作為一種點(diǎn)對(duì)點(diǎn)的通信方式,串行通信在數(shù)據(jù)流向中可分為單工、半雙工和雙工。單工指物理上一方只能向另一方傳送數(shù)據(jù);半雙工指物理上雙方可以互傳數(shù)據(jù),但是任一時(shí)刻只能有一個(gè)方向的流。全雙工指在同一時(shí)刻,任何一方都可以向另一方發(fā)送數(shù)據(jù)。
較為流行的串行通信協(xié)議可分為同步串行協(xié)議和異步串行協(xié)議[1]。
同步協(xié)議中,雙方約定好采樣率后即開(kāi)始數(shù)據(jù)的傳輸,數(shù)據(jù)的協(xié)調(diào)過(guò)程不需要專門的起始信息,但是要建立發(fā)送方時(shí)鐘對(duì)接收方時(shí)鐘的直接控制,雙方達(dá)到完全同步,線上的每個(gè)數(shù)據(jù)都是有效的。異步協(xié)議中,不再要求收發(fā)雙方時(shí)鐘的完全一致,發(fā)送方在任何時(shí)刻都可以發(fā)送若干比特組成的幀,接收方對(duì)數(shù)據(jù)的到達(dá)是無(wú)法預(yù)測(cè)的。幀與幀之間的間隔由發(fā)送方控制,可以取任意值[1]。發(fā)送端和接收端都以“接收時(shí)鐘”和“波特率因子”決定一位的時(shí)間長(zhǎng)度。以起止式異步傳輸協(xié)議為例,每次異步傳輸?shù)男畔⒍家砸粋€(gè)起始位開(kāi)頭,以一個(gè)停止位結(jié)束。在異步傳輸協(xié)議中,只有數(shù)據(jù)幀而沒(méi)有命令幀,且數(shù)據(jù)幀不分段。由于異步通信實(shí)現(xiàn)容易,且設(shè)備開(kāi)銷小,在文章中采用異步通信協(xié)議。
2 串行通信接口標(biāo)準(zhǔn)
串行通信接口標(biāo)準(zhǔn)中,應(yīng)用最為廣泛的是EIA-232、EIA-422和EIA-485,也就是以前所稱的RS-232、RS-422和RS-485,目前在通信工業(yè)中應(yīng)用最廣泛的是EIA-232。
EIA RS-232標(biāo)準(zhǔn)主要定義了串行通信中DTE和DCE的定義、接口的模擬數(shù)字特性、接口的機(jī)械特性、子電路的結(jié)構(gòu)和接口、用于調(diào)制傳輸?shù)碾娐方涌赱4]。作為標(biāo)準(zhǔn),其每一個(gè)細(xì)節(jié)必須嚴(yán)格實(shí)現(xiàn),否則整個(gè)標(biāo)準(zhǔn)所實(shí)現(xiàn)的目標(biāo)就不能夠達(dá)到。在追求穩(wěn)定的工業(yè)界,RS-232標(biāo)準(zhǔn)仍然有大量應(yīng)用。
在電氣特性上,負(fù)電平代表邏輯1,正電平代表邏輯0??刂菩盘?hào)和邏輯信號(hào)的正負(fù)電平允許范圍相同,信號(hào)線端口的電氣特性應(yīng)與等效電路的電氣特性相同。在信號(hào)線定義上,簡(jiǎn)化的9信號(hào)連接中只有保護(hù)地線、主異步串行傳輸控制線以及部分調(diào)制解調(diào)器狀態(tài)控制信號(hào)。深度簡(jiǎn)化的信號(hào)連接也就是三線連接法,只保留了主異步串行傳輸控制線組的TxD和RxD以及信號(hào)底線。
3 程序?qū)崿F(xiàn)
基于Windows API和C++的串口類CSerial類是一種較優(yōu)秀的類封裝,而MFC是一種應(yīng)用框架,提供一組通用的可重用的類庫(kù)供開(kāi)發(fā)人員使用。其對(duì)原始API的封裝給程序設(shè)計(jì)帶來(lái)了方便,但也造成了冗余和復(fù)雜。
文章以MFC的CDialog類為中心,加上CSerial類的支持,使用MFC進(jìn)行串口調(diào)試助手程序的編寫。程序主流程圖如圖1所示。
程序調(diào)試中,將兩計(jì)算機(jī)用RS-232將COM口互聯(lián),均使用COM1,在波特率為9600、數(shù)據(jù)總共八位、不帶校驗(yàn)位和一位停止位的情況下的串口通信結(jié)果如圖2所示。
4 結(jié)束語(yǔ)
RS-232是PC機(jī)與通信工業(yè)中應(yīng)用最廣泛的一種串行接口,特別是本地設(shè)備中的通信,文章主要依托CSerial類的支持,利用MFC進(jìn)行了串口調(diào)試助手程序開(kāi)發(fā),在程序中提供了波特率、通信口、數(shù)據(jù)位、校驗(yàn)位和停止位等通信參數(shù)的設(shè)置,并經(jīng)實(shí)際調(diào)試,運(yùn)行良好。
參考文獻(xiàn)
[1]趙曉輝,陳艷萍,張科英,等.基于VC++環(huán)境下串口通信程序的研究與實(shí)現(xiàn)[J].科技信息,2010,1:39-40+78.
[2]王正強(qiáng).VC中應(yīng)用MSComm控件實(shí)現(xiàn)串口通信[J].電子測(cè)試,2010,5:73-76.
[3]王坤,高 .基于VC++實(shí)現(xiàn)串口通信的方法[J].信息化研究,2010,10:52-54.
[4]汪瀅,孫華軍.基于VC++串口通信的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2011,14:19-20+24.
作者簡(jiǎn)介:方雨純(1990-),女,江蘇南京人,碩士學(xué)位,從事通信方向的研究。