999国内精品永久免费视频,色偷偷9999www,亚洲国产成人爱av在线播放,6080亚洲人久久精品,欧美超高清xxxhd

首頁 新聞 工控搜 論壇 廠商論壇 產(chǎn)品 方案 廠商 人才 文摘 下載 展覽
中華工控網(wǎng)首頁
  P L C | 變頻器與傳動(dòng) | 傳感器 | 現(xiàn)場檢測(cè)儀表 | 工控軟件 | 人機(jī)界面 | 運(yùn)動(dòng)控制
  D C S | 工業(yè)以太網(wǎng) | 現(xiàn)場總線 | 顯示調(diào)節(jié)儀表 | 數(shù)據(jù)采集 | 數(shù)傳測(cè)控 | 工業(yè)安全
  電 源 | 嵌入式系統(tǒng) | PC based | 機(jī)柜箱體殼體 | 低壓電器 | 機(jī)器視覺
VC++下串行通信的編程方法
中華工控網(wǎng)
收藏本文     查看收藏
VC++下串行通信的編程方法</P><P> 張 力 呂振肅 趙慶林</P><P> 1 引言</P><P>   串行通信程序是微機(jī)監(jiān)控軟件中基礎(chǔ)、關(guān)鍵的一個(gè)環(huán)節(jié),如何有效地開發(fā)通信程序,是軟件開發(fā)人員所關(guān)心的話題。Microsoft公司從1993年推出VC++1.0開始,不斷升級(jí),從 VC++1.52到目前最新的 VC++5.0,擁有大量的用戶,用VC++開發(fā)串行通信程序也隨版本的不同各有特點(diǎn)。本文詳細(xì)地介紹了用VC編寫通信程序的兩種方法:<BR>   . 用API(Application Programm Interface用戶程序接口)函數(shù);<BR>   . 用OLE(Object Linking and Embedding對(duì)象鏈接與嵌入)控件。</P><P> 2 用API函數(shù)實(shí)現(xiàn)串行通信</P><P>   API函數(shù)是Windows程序開發(fā)使用的主要函數(shù)集,其中提供了十幾個(gè)專門的通信函數(shù)。對(duì)應(yīng)Windows3.x和Win95及 NT開發(fā)環(huán)境,有16位和32位通信API函數(shù),VC++ 2.0和以前的版本都保持16位和32位兩個(gè)版本,從 VC++4.0 以后,軟件只支持32位應(yīng)用程序的開發(fā)。目前較多的應(yīng)用是在Win95及NT的32位開發(fā)環(huán)境下,但也存在著Windows3.x下開發(fā)的16位通信程序向32位程序的移植問題;谶@種考慮,16位通信函數(shù)也列舉出來。</P><P> 2.1 主要通信函數(shù)的對(duì)比</P><P>   32位通信函數(shù)與16位函數(shù)的主要區(qū)別在于,32位API函數(shù)把對(duì)通信口的操作當(dāng)作一個(gè)普通文件。這是因?yàn)樵赪indows95和NT下,WM—COMMNOTIFY消息已被取消,操作系統(tǒng)已將通信設(shè)備封裝起來了,系統(tǒng)為每個(gè)通信設(shè)備定義了用戶可定義大小的讀/寫緩沖區(qū),應(yīng)用程序只對(duì)讀/寫緩沖區(qū)操作,而不用和通信驅(qū)動(dòng)程序打交道。<BR> 功能描述16位函數(shù)改進(jìn)的32位函數(shù)打開通信資源OpenCommCreatFile關(guān)閉通信資源CloseCommCloseHandle讀通信緩沖區(qū)ReadCommReadFile寫通信緩沖區(qū)WriteCommWriteFile設(shè)置通信事件SetCommEventSetCommMask通信錯(cuò)誤檢查GetCommErrorClearCommError</P><P> 2.2 用API函數(shù)編程的過程</P><P>   首先由應(yīng)用向?qū)ВˋppWizard)生成程序的主框架。在集成開發(fā)環(huán)境下選File/New菜單(以VC5.0為例),彈出New對(duì)話框,單擊project標(biāo)簽后選MFC AppWizard (exe)項(xiàng),在創(chuàng)建的第一步選中單文檔,其他五步接受缺省選項(xiàng),只需編輯生成的視類.cpp文件即可。可以用兩種方法編程:一種是利用Windows的 WM—COMMNOTIFY消息,映射出該消息的處理函數(shù),通信編碼就放在該函數(shù)中,這主要適用于VC2.0及以前的版本 ;另一種方法是直接在.CPP文件中編寫通信部分,把通信當(dāng)作視類的成員函數(shù)。不論用哪種方法,編程思路是相同的:設(shè)置初始化并打開串口—配置串口—在雙方間傳輸數(shù)據(jù),并進(jìn)行校驗(yàn)等處理—不需要時(shí)釋放串口,供其他程序使用。</P><P> 2.3 注意事項(xiàng)</P><P>   在Windows 3.x 中,有專門的消息WM—COMMNOTIFY用于通信。在Windows95和NT下,該消息已被取消,但用戶也可以用自定義的WM—COMMNOTIFY消息,這時(shí)要注意消息映射的聲明必須如下:<BR>   ON—MESSAGE (WM—COMMNOTIFY,memberFxn); 其中memberFxn是該消息的處理函數(shù)名。<BR>   Win95中新增了基于線程的多任務(wù),當(dāng)應(yīng)用程序希望僅在通信設(shè)備有數(shù)據(jù)出現(xiàn)時(shí)才對(duì)其操作,應(yīng)創(chuàng)建線程來監(jiān)視通信設(shè)備?紤]到通信較費(fèi)時(shí),建議使用多線程來管理通信,讓通信在后臺(tái)完成。在VC++的 MFC(Microsoft Foundation Classes 微軟基礎(chǔ)類庫)中提供了專門管理線程的類 CwinThread,同時(shí)VC++還提供了一些與線程有關(guān)的全局函數(shù),如AfxBeginThread等。多線程中資源共享時(shí),必須借助一些Win32同步函數(shù)來協(xié)調(diào)線程的活動(dòng),避免沖突。VC的MFC也提供了幾個(gè)與同步有關(guān)的類,如CSyncObject、CMutex、CSemaphore、Cevent等。在視類的.cpp文件下可創(chuàng)建通信線程,并根據(jù)實(shí)際需要確定線程的優(yōu)先級(jí),合理調(diào)用 API函數(shù)以實(shí)現(xiàn)通信。</P><P> 3 用OLE通信控件實(shí)現(xiàn)串行通信</P><P>   用VC++的OLE控件實(shí)現(xiàn)串行通信,是一種簡潔的編程方法。VC4.0版和VC5.0版所提供的通信控件略有不同,下面針對(duì)這兩個(gè)版本,對(duì)OLE通信控件做具體介紹。</P><P> 3.1 通信控件的插入</P><P>   在VC++4.0 下,首先生成一個(gè)項(xiàng)目,或者打開一個(gè)存在的項(xiàng)目。選擇菜單Insert/Component…,出現(xiàn)Component Gallery窗口,選中OLE Controls下的Microsoft CommControl,雙擊就將控件嵌入到項(xiàng)目文件中了。在VC++5.0下,選菜單Project/Add To Project,將會(huì)有一子菜單, 選中 Component and Controls項(xiàng)(注意如果沒有打開項(xiàng)目,Component項(xiàng)不會(huì)出現(xiàn)在子菜單項(xiàng)中),接著雙擊Registered ActiveX Controls,在其中會(huì)找到通信控件5.0,雙擊之便可插入。此時(shí)打開對(duì)話框編輯器,在工具條中會(huì)看到新增的通信控件。</P><P> 3.2 在程序中使用通信控件</P><P>   象所有其他OLE控件一樣,通信控件也是用一系列的屬性和用戶接口,用戶用Get…函數(shù)得到屬性的當(dāng)前值,用 Set…函數(shù)設(shè)置屬性值。控件提供了27個(gè)屬性,大部分屬性僅和Modem連接有關(guān),現(xiàn)將常用的屬性列舉如下:<BR>   CommPort: 設(shè)置并返回通信口號(hào),缺省值為COM1,可設(shè)置1—16個(gè)。<BR>   Settings: 設(shè)置并返回波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位的字符串。其中波特率的范圍為300b/s-19200b/s。<BR>   PortOpen: 設(shè)置并返回通信口的狀態(tài),同時(shí)用來打開和關(guān)閉通信口。<BR>   InputLen: 決定每次Input讀入的字符個(gè)數(shù),缺省為0,表示讀取接收緩沖區(qū)的全部內(nèi)容。<BR>   Input: 讀入并清除接收緩沖區(qū)的字符。<BR>   InBufferCount: 返回接收緩沖區(qū)已接收的字符數(shù),通過置0可清除接收緩沖區(qū)。<BR>   Output: 將發(fā)送的字符串或數(shù)組寫到發(fā)送緩沖區(qū)。<BR>   InputMode: 定義Inpput屬性獲得數(shù)據(jù)的方式(VC5.0新增屬性)。<BR>   Rthreshold: 設(shè)置、返回在通信控件置 ComEvRecieve并激發(fā) OnComm事件前要接收的字符數(shù)。<BR>   SThreshold: 設(shè)置、返回通信控件置ComEvSend并激發(fā)OnComm事件前發(fā)送緩沖區(qū)中的最少字符數(shù)。<BR>   將通信控件放到對(duì)話框中,當(dāng)作一個(gè)普通的控件來用?丶峁┝藘煞N處理方法:一是查詢,一是事件驅(qū)動(dòng)。對(duì)于較簡單的通信任務(wù),可通過查詢串口的CommEvent屬性來了解最近發(fā)生的事件或錯(cuò)誤并進(jìn)行相應(yīng)的處理,較復(fù)雜的通信任務(wù)就應(yīng)使用事件驅(qū)動(dòng)接口。用事件驅(qū)動(dòng)方法時(shí),要定義CMSComm變量,以后針對(duì)此對(duì)象操作即可。添加消息處理函數(shù)時(shí)要用類向?qū)lassWizard,選中定義的 CMSComm變量并單擊,在消息欄雙擊 OnComm項(xiàng)就生成了消息處理函數(shù)。 在編寫發(fā)送和接收函數(shù)時(shí),要重點(diǎn)注意幾個(gè)屬性的用法。比如InBufferCount屬性返回接收緩沖區(qū)中已收到的字節(jié)數(shù),查詢方法可利用該屬性,看是否收到了規(guī)定數(shù)目的字節(jié)。還有 Rthreshold 和 SThreshold屬性,對(duì)由發(fā)送和接收激發(fā)的OnComm事件起著決定性的作用。Rthreshold 的值代表每當(dāng)接收緩沖區(qū)中有該數(shù)目的字符時(shí)就產(chǎn)生 OnComm事件, 這對(duì)固定長度的幀接收非常有用,可將 Rthreshold 設(shè)為幀長度,每收到一幀就會(huì)激發(fā) OnComm事件,在消息處理函數(shù)中添加代碼就能完成接收后的處理。發(fā)送比接收簡單,只不過用SThreshold屬性。<BR>   概括起來,用控件實(shí)現(xiàn)串行通信應(yīng)該遵循和用API函數(shù)編寫程序相同的過程,只不過這里用控件的屬性代替了API函數(shù)。</P><P> 3.3 其它注意事項(xiàng)</P><P>   VC4.0下和VC5.0下Input屬性的返回值不同。在 VC4.0下Input 返回的是CString類,而在VC5.0下,返回 COleVariant類。COleVariant類封裝了VARIANT數(shù)據(jù)類型,該結(jié)構(gòu)也是Output屬性所要求的類型。要用好控件就必須了解 VARIANT結(jié)構(gòu), 該結(jié)構(gòu)囊括了所有常用的簡單數(shù)據(jù)類型。但是結(jié)構(gòu)中每次可用的數(shù)據(jù)類型只有一種,由結(jié)構(gòu)的成員vt識(shí)別。例如對(duì)字符串bstrVal,vt=8,對(duì)short類型,vt=2等等。同時(shí)注意到VC5.0控件增加了 InputMode屬性,提供兩種輸入模式:文本和二進(jìn)制。兩種方式?jīng)Q定了Input接收的兩種數(shù)據(jù)類型。在文本方式下,Input返回值在成員bstrVal中,類型為vt=8,這和VC4.0下返回CString類是相同的。在二進(jìn)制模式下,Input接受值在安全數(shù)組parray中,類型為 vt=0x2000 ,這是編程時(shí)容易忽略的地方。一般上下位機(jī)通信時(shí),下位機(jī)的數(shù)據(jù)是以16進(jìn)制形式存放,編寫通信程序建議選擇二進(jìn)制輸入模式。用文本模式就必須在編碼時(shí)仔細(xì)考慮,否則容易丟失數(shù)據(jù)。另外,用事件驅(qū)動(dòng)方法編程時(shí)還應(yīng)注意,OnComm事件在通信事件或錯(cuò)誤發(fā)生時(shí)都會(huì)激發(fā), 在處理函數(shù)中應(yīng)將各種可能的情況列舉出來分別處理,很重要的一點(diǎn)是及時(shí)處理通信錯(cuò)誤。</P><P> 4 結(jié)束語</P><P>   總而言之,比起繁多的API函數(shù),通信控件不失為一種簡潔有效的實(shí)現(xiàn)串行通信的途徑。只要掌握好控件的屬性,就能輕松地編寫通信程序。筆者在編寫一套電力系統(tǒng)的實(shí)時(shí)監(jiān)控軟件時(shí),用VC++5.0下的通信控件成功地實(shí)現(xiàn)了微機(jī)與下位機(jī)——3720ACM 儀表之間的通信,該儀表是加拿大PML公司生產(chǎn)的高級(jí)電力綜合監(jiān)控儀表。</P><P> 張 力 碩士研究生。研究方向:計(jì)算機(jī)控制與信息工程!握衩C 碩士,教授。從事計(jì)算機(jī)控制與信息工程、CAD等方面的教學(xué)與研究工作!≮w慶林 碩士研究生。研究方向:計(jì)算機(jī)控制與信息工程。</P><P> 作者單位: 蘭州大學(xué)電子與信息科學(xué)系 甘肅.蘭州(730000)</P><P> 參考文獻(xiàn)</P><P>  [1]。勖溃軲icrosoft Corporation.Microsoft Win32程序員參考大全(二). 北京:清華大學(xué)出版社,1995<BR>  [2]。勖溃軸cott Stanfield Ralph Arvesen.Visual C++ 4開發(fā)人員指南.北京:機(jī)械工業(yè)出版社,1997 </P><P>
 

狀 態(tài): 離線

公司簡介
產(chǎn)品目錄

公司名稱: 中華工控網(wǎng)
聯(lián) 系 人: 客服中心
電  話: 0755-26546361
傳  真: 0755-26585268
地  址: 深圳市南山區(qū)創(chuàng)業(yè)路現(xiàn)代城華庭1棟6A
郵  編: 518054
主  頁:
 
該廠商相關(guān)技術(shù)文摘:
智能儀器儀表的發(fā)展特點(diǎn)與前景分析
電動(dòng)機(jī)性能虛擬儀器測(cè)試系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
視頻監(jiān)控護(hù)航高鐵安全運(yùn)營
基于PLC,觸摸屏及變頻器對(duì)吹膜機(jī)的改造
永宏P(guān)LC應(yīng)用于自助圖書借還終端機(jī)
基于永宏P(guān)LC的GSM通訊原理及其應(yīng)用
改善汽車生態(tài)學(xué)、安全性和舒適性,四大測(cè)試分析是關(guān)鍵
改善汽車生態(tài)學(xué)、安全性和舒適性,四大測(cè)試分析是關(guān)鍵
數(shù)控技術(shù)的發(fā)展趨勢(shì)及產(chǎn)業(yè)化
數(shù)控技術(shù)發(fā)展戰(zhàn)略與發(fā)展途徑的思考
用Energid 的軟件進(jìn)行機(jī)器人的抓取和操作
如何借助RFID技術(shù)升級(jí)企業(yè)信息管理水平
更多文摘...
立即發(fā)送詢問信息在線聯(lián)系該技術(shù)文摘廠商:
用戶名: 密碼: 免費(fèi)注冊(cè)為中華工控網(wǎng)會(huì)員
請(qǐng)留下您的有效聯(lián)系方式,以方便我們及時(shí)與您聯(lián)絡(luò)

關(guān)于我們 | 聯(lián)系我們 | 廣告服務(wù) | 本站動(dòng)態(tài) | 友情鏈接 | 法律聲明 | 不良信息舉報(bào)
工控網(wǎng)客服熱線:0755-86369299
版權(quán)所有 中華工控網(wǎng) Copyright©2022 Gkong.com, All Rights Reserved