夏玉潔
【摘要】 隨著現(xiàn)代信息技術(shù)的發(fā)展以及計(jì)算機(jī)網(wǎng)絡(luò)的廣泛應(yīng)用,計(jì)算機(jī)通信技術(shù)以及日趨成熟,串口通信是一種靈活方便可靠的通信方式。本文通過VC++軟件的MSComm控件編程來控制PC與PC串口之間的數(shù)據(jù)傳輸加以說明,采用虛擬串口的方式在一臺PC機(jī)上的不同串口之間傳輸數(shù)據(jù)。
【關(guān)鍵詞】 串行通信 MSComm控件 多線程 虛擬串口 VC++
一、引言
串行端口的本質(zhì)功能是作為CPU和串行設(shè)備間的編碼轉(zhuǎn)換器。當(dāng)數(shù)據(jù)從CPU經(jīng)過串行端口發(fā)送出去時,字節(jié)數(shù)據(jù)轉(zhuǎn)換成串行的位。接收數(shù)據(jù)時,串行的位轉(zhuǎn)換為字節(jié)數(shù)據(jù)。串行技術(shù)應(yīng)用廣泛,如遠(yuǎn)程監(jiān)控,工業(yè)自動化和軟件通信等多個領(lǐng)域。
二、串口通信的原理分析
2.1 基于WINDOWS的VC++串行通信編程
利用VC++編制串行通信程序有三種方法:
一是采用Win32應(yīng)用程序編程接口(API)所提供的串口通信函數(shù),用SDK思路編寫;
二是用ActiveX通信工件MSComm開發(fā)串行通信程序;
三是采用C++的MFC思路,將Win32串口通信的API函數(shù)封裝在一個類中實(shí)現(xiàn)通信。
2.2串行接口標(biāo)準(zhǔn)
串行通信線路連接數(shù),要解決兩個問題:
一是計(jì)算機(jī)與外設(shè)之間的物理接口標(biāo)準(zhǔn),屬于OSI中的物理層,包括RS-232、RS-422及RS-485標(biāo)準(zhǔn)等。
二是按接口標(biāo)準(zhǔn)設(shè)置計(jì)算機(jī)與外設(shè)之間串行通信的接口電路。
三、串口通信整體設(shè)計(jì)方案
3.1 面向?qū)ο蟮乃枷?/p>
面向?qū)ο蟮乃枷胧前研畔⑾到y(tǒng)本身看作是一系列離散的對象的集合,這些對象包括數(shù)據(jù)結(jié)構(gòu),及數(shù)據(jù)結(jié)構(gòu)的操作或行為。若對象之間由事件觸發(fā),引起互通消息實(shí)現(xiàn)互操作,設(shè)計(jì)出的軟件是模塊化的,可擴(kuò)充和可移植的。
面向?qū)ο蟮某绦蛟O(shè)計(jì)以“對象”和“數(shù)據(jù)結(jié)構(gòu)為中心,用“對象”表現(xiàn)事物,用“類”表示對象的抽象,用“消息傳遞”表現(xiàn)事物的相互聯(lián)系,少用“方法”表現(xiàn)處理事物的過程。
3.2 VC下的32位串口應(yīng)用程序
Windows32位下的串口應(yīng)用程序用3種方法實(shí)現(xiàn): MSComm控件;用API通信函數(shù)或者CSerialPort類。
3.2.1使用MSComm控件方法
VC++6.0提供的MSComm控件通過串口端口發(fā)送和接收數(shù)據(jù),為程序提供串口通信功能。在當(dāng)前對話框中插入MSComm控件,然后在ClassWizard中為創(chuàng)建的通信控件定義一個成員對象(CMSComm m_Com),通過該成員對象即可設(shè)置MSComm控件屬性。
MSComm控件需要設(shè)置常用屬性,即初始化串口,打開串口,讀寫串口。
3.2.2使用32位的API通信函數(shù)
在VC++6.0下,MFC應(yīng)用程序線程用CWinThread對象表示。VC++把線程分成兩種:用戶界面線程和工作者線程。用戶界面線程提供界面和用戶交互,用于處理用戶輸入及其相應(yīng)的各種事件和消息,工作線程處理程序的后臺任務(wù)。在MainFrm.cpp中定義全局變量,然后在程序中創(chuàng)建一個串口,進(jìn)行相應(yīng)的串口參數(shù)設(shè)置,啟動一個工作者線程,用來監(jiān)視串口狀態(tài),看有無數(shù)據(jù)到達(dá)、通信有無錯誤;用戶界面線程可專心進(jìn)行數(shù)據(jù)處理、提供友好的用戶界面,最后為工作者線程編寫一個全局函數(shù),主要完成數(shù)據(jù)接收工作。
3.3 圖像傳輸設(shè)計(jì)方案
利用MATLAB軟件將一幅圖像轉(zhuǎn)換成矩陣,然后用串口輸出,從COM1輸入圖像矩陣并發(fā)送,在COM2端可以接受到該圖像矩陣,通過MATLAB還原可以得到原圖像。用虛擬串口軟件VSPD模擬串口,同時添加一對虛擬串口是設(shè)定通過非MODE(三線制)串口連接線連接在一起的,像兩個真實(shí)的物理串口可以進(jìn)行通信,可節(jié)約成本,提高連接的可靠性。
四、結(jié)束語
實(shí)驗(yàn)表明,通過MSComm控件通過串口端口可以實(shí)現(xiàn)發(fā)送和接收圖像數(shù)據(jù),在傳輸過程中可實(shí)時進(jìn)行更新顯示,圖像傳輸后將其保存為BMP格式文件,可以進(jìn)行后續(xù)處理使用。
參 考 文 獻(xiàn)
[1]李長林 高潔,Visual C++串口通信技術(shù)與典型實(shí)例,清華大學(xué)出版社,ISBN 7-302-12903-7,2006-05-01.
[2]陳淑珍,石波.基于Windows多線程環(huán)境下的串口通信[J].計(jì)算機(jī)工程與設(shè)計(jì),2000-3.
[3]田敏 鄭瑤 李江全.Visual C++數(shù)據(jù)采集與串口通信測控應(yīng)用實(shí)踐,人民郵電出版社.ISBN978-7-115-22611-2,2010-6.
[4]李現(xiàn)勇,Visual C++串口通信技術(shù)與工程實(shí)踐(第二版).人民郵電出版社.ISBN7-115-12344-6/TP.4021,2004-7