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