Visual
C++在異步串行通信控制中的應(yīng)用
邱紅兵 韓峰
摘要:系統(tǒng)介紹了Visual
C++實(shí)現(xiàn)異步串行通信的基本原理,分別講述了用Windows函數(shù)庫(kù)API函數(shù)實(shí)現(xiàn)和C運(yùn)行時(shí)庫(kù)的實(shí)現(xiàn)方法,以及在控制系統(tǒng)中的編程應(yīng)用實(shí)例。 關(guān)鍵詞:控制系統(tǒng);串行通信;Visual
C++應(yīng)用 中圖分類號(hào):TP311.11
文獻(xiàn)標(biāo)識(shí)碼:A
The Visual C++
Application in Asynchronous Serial Communication
Control
QIU Hong-bing HAN
feng
Abstract: The paper is focus
on the principle of asynchronous serial communication by Visual C++, and
tells of their implement methods using API function in Windows function
warehouse and C function singly. The paper also adduces program
application sample in control system. Key Words:
control system;serial communication;Visual C++ application
1 引言 Visual C++是建立在Window 95和Window NT
32位程序上的可視化編程環(huán)境,對(duì)于控制系統(tǒng)的可視化開(kāi)發(fā)提供了極大的便利,但是對(duì)于計(jì)算機(jī)控制系統(tǒng)中數(shù)據(jù)采集、控制,用Visual
C++實(shí)現(xiàn)的介紹卻很少。基于此,介紹Visual
C++在測(cè)控系統(tǒng)應(yīng)用中的基本原理及應(yīng)用,其中異步串行通信是關(guān)鍵。其基本構(gòu)成是:下位機(jī)(單片機(jī)系統(tǒng))完成信號(hào)檢測(cè)、A/D轉(zhuǎn)換和簡(jiǎn)單的控制功能,通過(guò)系統(tǒng)總線(如RS-232C)與上位機(jī)(PC機(jī))相連,進(jìn)行監(jiān)測(cè)、控制,形成主從式結(jié)構(gòu)。
2 工作原理 通過(guò)傳感器檢測(cè)得到被控信號(hào)及相關(guān)信號(hào),經(jīng)過(guò)放大、濾波處理形成有效信號(hào),通過(guò)A/D轉(zhuǎn)換形成數(shù)字信號(hào),輸入到單片機(jī)系統(tǒng)進(jìn)行處理。其中單片機(jī)系統(tǒng)完成相應(yīng)算法或控制功能;PC機(jī)主要完成監(jiān)視、控制其下面的單片機(jī)系統(tǒng),進(jìn)行集中管理。它們之間的通信可通過(guò)RS-232C標(biāo)準(zhǔn)總線進(jìn)行異步傳輸。系統(tǒng)結(jié)構(gòu)如圖1所示。

圖1 控制系統(tǒng)網(wǎng)絡(luò)結(jié)構(gòu)圖
3 Visual C++實(shí)現(xiàn)串行通信 Visual
C++實(shí)現(xiàn)串行通信有幾種方式可供選擇,如利用計(jì)算機(jī)上的標(biāo)準(zhǔn)串行口進(jìn)行,或自制專用卡插入工控機(jī)的PCI總線的ISA擴(kuò)展槽等。下面主要論述利用計(jì)算機(jī)上的標(biāo)準(zhǔn)串行口進(jìn)行串行通信,可分為利用Windows函數(shù)庫(kù)API函數(shù)和利用C運(yùn)行時(shí)庫(kù)實(shí)現(xiàn)。其中API函數(shù)主要以創(chuàng)建資源的形式進(jìn)行串行通信,C運(yùn)行時(shí)庫(kù)采用類似C的方式進(jìn)行。 3.1 API函數(shù)實(shí)現(xiàn) Windows應(yīng)用程序要與標(biāo)準(zhǔn)串口通信,Windows函數(shù)庫(kù)中提供了24個(gè)低級(jí)函數(shù),這些函數(shù)可與外部設(shè)備的通信提供了基本的工具,文件輸入和文件輸出函數(shù)為通信資源句柄的打開(kāi)、關(guān)閉以及執(zhí)行讀寫操作提供了基本的接口,Win32
API也包含一系列訪問(wèn)通信資源的通信函數(shù),具體工作過(guò)程如下:首先打開(kāi)一個(gè)通信資源句柄CreateFile(),接著進(jìn)行串行通信資源的配置(包括波特率、奇偶校驗(yàn)、停止位和數(shù)據(jù)位等信息),通過(guò)SetCommState()、GetCommState()進(jìn)行修改和查詢完成初始化設(shè)置;串行通信資源的讀寫通過(guò)ReadFile()、WriteFile()來(lái)完成收發(fā)數(shù)據(jù),監(jiān)視串行通信資源某些可能發(fā)生的事件可通過(guò)WaitCommEvent()來(lái)完成,向與某通信資源相關(guān)的設(shè)備驅(qū)動(dòng)程序發(fā)送控制命令,使驅(qū)動(dòng)程序執(zhí)行特定任務(wù)。對(duì)于具體參數(shù)設(shè)置可參閱有關(guān)書籍。[1] 3.2 C運(yùn)行時(shí)庫(kù)實(shí)現(xiàn) 對(duì)于利用C運(yùn)行時(shí)庫(kù)實(shí)現(xiàn)串行通信在此將詳細(xì)進(jìn)行討論。它與硬件密切相關(guān),其核心器件是通用異步接收發(fā)送器(簡(jiǎn)稱UART),并在機(jī)箱后部外引一個(gè)25腳(或15腳、9腳)的D型連接器作為數(shù)據(jù)終端設(shè)備(DTE)一側(cè),它通過(guò)異步通信電纜(RS-232)與另一側(cè)數(shù)據(jù)通信設(shè)備(DCE)(MODEM或其它通信設(shè)備)相連。 3.2.1 RS-232異步串行口連接 異步串行通信對(duì)應(yīng)用接口極其敏感,常用的RS-232C接口有MODEM接口標(biāo)準(zhǔn)連接和零MODEM的非標(biāo)準(zhǔn)連接,但在實(shí)際應(yīng)用中,并非需要全部控制信號(hào)線,而且在某種場(chǎng)合下,還允許采取若干種非標(biāo)準(zhǔn)的連接方式,如圖2所示。其中圖2a主要適用于長(zhǎng)距離串行通信,而圖2b適用于短距離異步通信,無(wú)需MODEM這類DCE設(shè)備介入。 |