串口数据visual c++ MSComm 串口控件程序开发
時間緊張,先記一筆,后續(xù)優(yōu)化與完善。
????? ? ? ? 在計算機中,數(shù)據(jù)通信主要有兩種:一種是串口通信,每一個字符的二進制位按位排列停止傳輸,速度慢,但傳輸距離較遠。鼠標(biāo)口和usb口都屬于串口。另一種是并行通信,每一個字符的二進制位使用多條數(shù)據(jù)線同時停止傳輸,傳輸速度快,但傳輸距離相對比較近。計算機外部傳輸一般使用這種方式,打印口也屬于并行端口。
????? ? ? ? 一、串口通信道理
????? ? ? ?串行端口是cpu和串行設(shè)備間的編碼轉(zhuǎn)換器,當(dāng)數(shù)據(jù)從串口發(fā)送出時,字節(jié)數(shù)據(jù)轉(zhuǎn)化為串行的位。在接收時,串行的位轉(zhuǎn)化為字節(jié)數(shù)據(jù)。在Windows下串口是系統(tǒng)的一種資源,應(yīng)用程序要使用串口停止通信,必須向計算機申請該串口資源,使用完畢,應(yīng)釋放資源。
????? ? ? ?二、串口通信特點
????? ? ? ? ? ? 1,通信成本低,僅一條通信鏈路
????? ? ? ? ? ? 2,傳輸速度慢。
????? ? ? 三、串口通信傳輸方式
????? ? ? ? ? ? 1,單工通信,固定的由發(fā)送端發(fā)送數(shù)據(jù)到接收端 電臺與電視機
????? ? ? ? ? ? 2,半雙工通信,允許雙向互相發(fā)送數(shù)據(jù),但是不能同時 對講機
????? ? ? ? ? ? 3,雙工通信,允許兩邊互相同時發(fā)送和接收數(shù)據(jù) 手機
????? ? ? ?四、MSComm控件串口通信開發(fā)
????? ? ? ? MSComm空間是微軟公司供給的ActiveX空間,用于簡化串口程序開發(fā)。在Visual C++和VS2005環(huán)境中都可以方便地添加該控件。當(dāng)導(dǎo)入CMSComm類后,就能夠在程序中使用MSComm控件了。
????? ? ? ? 1,MSComm常用方法
????1)GetCommPort() 獲得串口號
????2)SetCommPort() 設(shè)置端口號
????3)GetRThreshold()與SetRThreshold()用于獲得與設(shè)置接收緩沖區(qū)接收到多少個字符,MSComm控件觸發(fā)Oncomm事件。
????4)GetInputMode()與SetInputMode()用于獲得和設(shè)置傳輸數(shù)據(jù)的類型,參數(shù)為1,二進制傳輸,參數(shù)為0,文本傳輸。
????5)SetSettings()用于設(shè)置波特率、奇偶校驗,數(shù)據(jù)位和停止位參數(shù)
????6)GetInput()用于從接收緩沖區(qū)獲得數(shù)據(jù)
????7)SetOutput()用于向發(fā)送緩沖區(qū)寫入數(shù)據(jù)
????8)GetPortOpen()/SetPortOpen()獲得串口狀態(tài),打開或關(guān)閉串口
????9)GetCommEvent()獲得串口發(fā)生的事件。1----發(fā)送數(shù)據(jù);2---接收數(shù)據(jù);3----CTS信號發(fā)生變化,預(yù)備發(fā)送數(shù)據(jù);4---DSR信號發(fā)生變化,預(yù)備接受數(shù)據(jù)。
?????????? 2,串口配置代碼
??????? ???if(m_com.GetPortOpen())
?????????? ? m_com.SetPortOpen(FALSE);
??????? ?? ?m_com.SetCommPort(com);??//設(shè)置端口
??????? ???if(!m_com.GetPortOpen())
?????????? ? m_com.SetPortOpen(TRUE);??//打開串口
每日一道理信念是巍巍大廈的棟梁,沒有它,就只是一堆散亂的磚瓦;信念是滔滔大江的河床,沒有它,就只有一片泛濫的波浪;信念是熊熊烈火的引星,沒有它,就只有一把冰冷的柴把;信念是遠洋巨輪的主機,沒有它,就只剩下癱瘓的巨架。
??????? ?? ?else
?????????? ? AfxMessageBox("cannot open serial port");
??????? ?? ?m_com.SetSettings("9600,n,8,1");//設(shè)置波特率,校驗,數(shù)據(jù)位,停止位
?????
??????? ???m_com.SetInputMode(0);?//以文本方式撿取數(shù)據(jù)
??????? ?? m_com.SetRThreshold(1);?//參數(shù)表現(xiàn)每當(dāng)串口接收緩沖區(qū)中有多于或者即是個字符時將激發(fā)一個接收數(shù)據(jù)的OnComm事件
????? ? ?m_com.SetInputLen(0);?//設(shè)置以后接收區(qū)數(shù)據(jù)長度為
????2,串口接收OnComm事件代碼如下
????? ???intresEvent;
???????? resEvent =m_mscom.GetCommEvent();
???????? switch(resEvent)
???????? {
???????? case 2: //接收數(shù)據(jù)
??????????????? {
?????????????????????? if(IsSended) //開始接收數(shù)據(jù)
?????????????????????? {
????????????????????????????? VARIANTdata;
????????????????????????????? data= m_mscom.GetInput();
?????
????????????????????????????? CStringstr;
????????????????????????????? str= data.bstrVal;
????????????????????????????? IsSended= FALSE;
????????????????????????????? MessageBox(str);
?????????????????????? }
??????????????? }
??????????????? break;???
???????? }???????????
????3,串口發(fā)送數(shù)據(jù)代碼如下
????CString str ;
???????? m_data.GetWindowText(str);
???????? IsSended =FALSE; //發(fā)送完成
???????? m_mscom.SetOutput((COleVariant)str);??
???????? IsSended =TRUE; //發(fā)送完成
???????? Sleep(1000);//延時1妙
文章結(jié)束給大家分享下程序員的一些笑話語錄: 剎車失靈
有一個物理學(xué)家,工程師和一個程序員駕駛著一輛汽車行駛在阿爾卑斯山脈 上,在下山的時候,忽然,汽車的剎車失靈了,汽車無法控制地向下沖去, 眼看前面就是一個懸崖峭壁,但是很幸運的是在這個懸崖的前面有一些小樹 讓他們的汽車停了下來, 而沒有掉下山去。 三個驚魂未定地從車?yán)锱懒顺鰜怼?br /> 物理學(xué)家說, “我覺得我們應(yīng)該建立一個模型來模擬在下山過程中剎車片在高 溫情況下失靈的情形”。
工程師說, “我在車的后備廂來有個扳手, 要不我們把車拆開看看到底是什么 原因”。
程序員說,“為什么我們不找個相同的車再來一次以重現(xiàn)這個問題呢?”
轉(zhuǎn)載于:https://www.cnblogs.com/xinyuyuanm/archive/2013/05/18/3085886.html
總結(jié)
以上是生活随笔為你收集整理的串口数据visual c++ MSComm 串口控件程序开发的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实战之从阿里云dataworks的max
- 下一篇: 推荐系统——矩阵分解