VS2008基於對話框的MFC上位機串口通訊(C++實現)簡單例程

首先,在  vs2008  環境下建立  MFC  運用程序
VS2008基於對話框的MFC上位機串口通訊(C++實現)簡單例程
設置項目名稱爲  ComTest (這個地方隨意命名,根據我的習慣),點擊肯定後, 點擊下一步
出現以下界面
VS2008基於對話框的MFC上位機串口通訊(C++實現)簡單例程
選擇「基於對話框」模式而後直接點擊完成便可(其餘選項按默認方式),點擊完成後出現以下界面
VS2008基於對話框的MFC上位機串口通訊(C++實現)簡單例程
解決資源管理器中自動給你生成好代碼目錄(可點擊菜單欄「視圖」選項打開解決方案資源管理器),以下圖所示
VS2008基於對話框的MFC上位機串口通訊(C++實現)簡單例程
咱們再次回到對話框編輯窗口,刪除自動生產的控件(靜態文本控件、肯定和取消按鈕控件),並在工具箱裏添加兩個button按鈕和編輯框,以後的界面以下圖所示:
VS2008基於對話框的MFC上位機串口通訊(C++實現)簡單例程
而後把最重要的串口通訊控件加入到工具箱中,由於默認的工具箱是不帶 MS 串口通訊控件的。添加方法以下:在工具箱界面點擊鼠標右鍵出現以下界面:
VS2008基於對話框的MFC上位機串口通訊(C++實現)簡單例程
而後點擊選擇項出現以下界面,而後選擇「COM 組件」
VS2008基於對話框的MFC上位機串口通訊(C++實現)簡單例程
找到並選中該項
VS2008基於對話框的MFC上位機串口通訊(C++實現)簡單例程
最後點擊肯定鍵,就成功添加 MS 串口通信控件了,工具箱中就會出現串口控件圖標了
VS2008基於對話框的MFC上位機串口通訊(C++實現)簡單例程
咱們吧串口控件添加到對話框裏,位置隨意,運行的時候是看不見的,因此最終界面是這樣子的
VS2008基於對話框的MFC上位機串口通訊(C++實現)簡單例程

下面開始添加變量,首先 IDC_MSCOMM1 添加控制變量: m_ctrlComm ,在串口通訊圖標上右鍵點擊選擇添加變量,如圖:
VS2008基於對話框的MFC上位機串口通訊(C++實現)簡單例程
完成就能夠了,控件ID和類別是能夠選的,下面爲按鈕和編輯框添加變量時選不一樣的就好了。
兩個編輯框,一個用於接收顯示數據ID設置IDC_EDIT_RXDATA(在控件屬性框裏設置),另外一個用於輸入發送數據,ID設置IDC_EDIT_TXDATA,兩岸按鈕,一個用於發送數據,將其ID設爲IDC_BUTTON_MANUALSEND,另外一個用於清空接收的編輯框,ID默認就行,再也不贅述。

 接着添加變量,爲IDC_EDIT_RXDATA添加CString變量m_strRXData, 爲IDC_EDIT_TXDATA添加CString變量m_strTXData。說 明: m_strRXData和m_strTXData分別用來放入接收和發送的字符數據。方法同上面添加串口控制變量同樣,選擇控件ID和類型便可,如圖:
VS2008基於對話框的MFC上位機串口通訊(C++實現)簡單例程
添加串口事件消息處理函數OnComm()
回到對話框編輯界面,鼠標左鍵點擊串口控件按鈕,而後在對應的屬性欄,點擊閃電按鈕(控件事件)
VS2008基於對話框的MFC上位機串口通訊(C++實現)簡單例程

VS2008基於對話框的MFC上位機串口通訊(C++實現)簡單例程
添加串口事件消息處理函數,並將函數名改成OnComm,在上圖中所示位置改就行。
咱們在OnComm()函數加入相 應的處理代碼就能實現自已想要的功能了。請你在函數中加入以下代碼:

void CSCommDlg::OnComm()
{
// TODO: 在此處添加消息處理程序代碼
VARIANT variant_inp;       
COleSafeArray safearray_inp;       
LONG len,k;     
BYTE rxdata[2048]; //設置BYTE數組 An 8-bit integerthat is not signed.       
CString strtemp;       
if(m_ctrlComm.get_CommEvent()==2) //事件值爲2表示接收緩衝區內有字符       
{                 
  ////////如下你能夠根據本身的通訊協議加入處理代碼 
            variant_inp=m_ctrlComm.get_Input(); //讀緩衝區  
            safearray_inp=variant_inp; //VARIANT型變量轉換爲ColeSafeArray型變量
            len=safearray_inp.GetOneDimSize(); //獲得有效數據長度           
   for(k=0;k<len;k++)                   
safearray_inp.GetElement(&k,rxdata+k);//轉換爲BYTE型數組             
for(k=0;k<len;k++)                              //將數組轉換爲Cstring型變量     
         {                
               BYTE bt=*(char*)(rxdata+k);//字符型        
               strtemp.Format("%c",bt); //將字符送入臨時變量strtemp存放    
////此處編譯有錯誤,可在項目屬性->配置屬性->常規裏將「字符集」改成使用多字節字符集便可
               m_strRXData+=strtemp; //加入接收編輯框對應字符串        
           }
     }       
     UpdateData(FALSE); //更新編輯框內容 
}


打開串口和設置串口參數  
你能夠在你須要的時候打開串口,例如在程序中作一個開始按鈕,在該按鈕的處理函數中打開串口。如今咱們在主對話框的 CSCommTestDlg::OnInitDialog() 打開串口,找到 // TODO: Add extra initialization here,並在下面 加入以下代碼:   

// TODO: 在此添加額外的初始化代碼
m_ctrlComm.put_CommPort(5);
//選擇串口號5(筆記本沒有串口,用的虛擬串口,可使用軟件vspd建立)
m_ctrlComm.put_PortOpen(TRUE);
//打開串口
m_ctrlComm.put_RThreshold(2);
//收到兩個字節引起OnComm事件
m_ctrlComm.put_InputMode(1);
//輸入模式選爲二進制
m_ctrlComm.put_Settings(_T("9600,n,8,1"));
//設置串口參數,波特率,無奇偶校驗,位中止位,位數據位
m_ctrlComm.put_InputMode(1);   // 以二進制方式檢取數據 
m_ctrlComm.put_RThreshold(1); //參數1表示每當串口接收緩衝區中有多於或等於1個字符時將引起一個接收數據的OnComm事件 
m_ctrlComm.put_InputLen(0); //設置當前接收區數據長度爲0 
m_ctrlComm.get_Input();//先預讀緩衝區以清除殘留數據  

發送數據
先爲發送按鈕添加一個單擊消息即BN_CLICKED處理函數,方法和串口事件控制函數的添加方法同樣(只不過是在實踐中的 OnBnClickedButtonManualsend裏添加 ),再也不贅述, 在函數中添加以下代碼:

// TODO: 在此添加控件通知處理程序代碼
UpdateData(TRUE);   //讀取編輯框內容
m_ctrlComm.put_Output(COleVariant(m_strTXData)); //發送數據

運行程序,在發送編輯框中隨意輸入點什麼,單擊發送按鈕,這時候在另外一端的串口調試助手(或別的調試工具)接收框裏就會有數據出現啦。

最後那個「清除接收框」的按鈕尚未用到,爲它添加點擊觸發時間,在函數裏添加以下代碼便可:
void CSCommDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知處理程序代碼
m_strRXData="";
UpdateData(FALSE);
}
這樣簡單的串口通訊就基本完成了。
相關文章
相關標籤/搜索