時間:2008-08-27 09:56:00來源:ronggang
 圖2[/align]
  如圖2所示,首先CreatFile()函數打開通信資源,之后配置通信資源屬性由以下API函數完成:SetupComm()設置串行通信端口的輸入和輸出緩沖區(qū)的大小;通過設備控制塊DCB修改和設置串口工作狀態(tài)的參數,如波特率、數據位、奇偶校驗位等通信參數,SetCommState()將DCB結構中的內容寫入串口設置;SetCommTimeouts()設置串口讀寫操作的溢出時間。設置工作完成后串行通信可用ReadFile( )對通信資源進行讀操作,WriteFile()進行寫操作。
  串行通信結束時調用函數CloseHandle()來關閉CreateFile()函數返回的串口句柄。
  3.2 PC機的程序實現流程
  多線程的串口I/O通信編程中,將對串口的讀、寫操作視為同一進程的兩個不同任務,創(chuàng)建讀線程和寫線程分別完成對串口的讀、寫操作;由于異步串行通信事件的隨機性和實時性,要求通信線程優(yōu)先于主線程被處理,所以設置各線程的優(yōu)先級別如下:
  讀線程的優(yōu)先級>寫線程的優(yōu)先級>主線程的優(yōu)先級。
  在PC機端,創(chuàng)建輔助線程實時監(jiān)視串口通信狀態(tài),并由串口通信監(jiān)視線程根據通信狀態(tài)向主線程發(fā)送相應的消息,由主線程分析處理。多線程串行通信法的最大優(yōu)點是程序對接收數據具有自主覺察能力,一旦輔助的通信監(jiān)視線程查詢到數據已經發(fā)送到串行口上,輔助線程自動接收數據后,向主線程發(fā)送數據接收到的消息,應用程序可根據該消息來處理通信串口傳送過來的數據,并且采用通信監(jiān)視線程不占用CPU時間。
  程序實現建立輔線程:串口讀線程,完成串口通信操作,用來監(jiān)視和管理串口通信的輸入。讀線程一直等待,從通信串口讀取數據并傳輸給主線程處理。主線程除完成串口通信資源的打開、參數配置以及關閉的工作外,還要完成讀線程的創(chuàng)建及關閉、多線程的協調、數據的中間處理與前端的人機交互等工作。
[align=center]
圖2[/align]
  如圖2所示,首先CreatFile()函數打開通信資源,之后配置通信資源屬性由以下API函數完成:SetupComm()設置串行通信端口的輸入和輸出緩沖區(qū)的大小;通過設備控制塊DCB修改和設置串口工作狀態(tài)的參數,如波特率、數據位、奇偶校驗位等通信參數,SetCommState()將DCB結構中的內容寫入串口設置;SetCommTimeouts()設置串口讀寫操作的溢出時間。設置工作完成后串行通信可用ReadFile( )對通信資源進行讀操作,WriteFile()進行寫操作。
  串行通信結束時調用函數CloseHandle()來關閉CreateFile()函數返回的串口句柄。
  3.2 PC機的程序實現流程
  多線程的串口I/O通信編程中,將對串口的讀、寫操作視為同一進程的兩個不同任務,創(chuàng)建讀線程和寫線程分別完成對串口的讀、寫操作;由于異步串行通信事件的隨機性和實時性,要求通信線程優(yōu)先于主線程被處理,所以設置各線程的優(yōu)先級別如下:
  讀線程的優(yōu)先級>寫線程的優(yōu)先級>主線程的優(yōu)先級。
  在PC機端,創(chuàng)建輔助線程實時監(jiān)視串口通信狀態(tài),并由串口通信監(jiān)視線程根據通信狀態(tài)向主線程發(fā)送相應的消息,由主線程分析處理。多線程串行通信法的最大優(yōu)點是程序對接收數據具有自主覺察能力,一旦輔助的通信監(jiān)視線程查詢到數據已經發(fā)送到串行口上,輔助線程自動接收數據后,向主線程發(fā)送數據接收到的消息,應用程序可根據該消息來處理通信串口傳送過來的數據,并且采用通信監(jiān)視線程不占用CPU時間。
  程序實現建立輔線程:串口讀線程,完成串口通信操作,用來監(jiān)視和管理串口通信的輸入。讀線程一直等待,從通信串口讀取數據并傳輸給主線程處理。主線程除完成串口通信資源的打開、參數配置以及關閉的工作外,還要完成讀線程的創(chuàng)建及關閉、多線程的協調、數據的中間處理與前端的人機交互等工作。
[align=center] 圖3[/align]
  圖3為PC機的串口通信流程圖。左邊為主線程,右邊為子線程。實線框內為用戶界面的視類函數,虛線框內為通信類函數。用戶通過VC設計的界面上的控件打開串口,并且發(fā)送數據。當對串口的參數設置完畢,串口成功打開的同時,子線程即接收線程開始運行。用戶發(fā)送數據的同時,接收線程的控制函數也同時運行,當控制函數接收到讀串口事件時,調用讀串口函數,讀取串口接收到的數據。子線程一直運行,也不斷的讀取接收到的數據,并顯示在用戶的界面上。當用戶關閉串口,主線程要終止,此時子線程也收到主線程發(fā)送的關閉串口事件,終止線程,關閉串口。
  在實際通信過程中,由于干擾等原因,數據傳輸可能發(fā)生錯誤,因此還要加上實時錯誤處理以保證數據正常傳輸。這里不再贅述。
  3.3 嵌入式從機的程序實現流程
  在嵌入式從機部分,通信實現采用的是單線程,初始化設備之后等待通信數據,如果數據到達,則調用接收函數接收PC機數據,并將數據解析,返回結果向PC機發(fā)送數據。如果沒有數據則繼續(xù)等待。程序流程圖如圖4所示
[align=center]
圖3[/align]
  圖3為PC機的串口通信流程圖。左邊為主線程,右邊為子線程。實線框內為用戶界面的視類函數,虛線框內為通信類函數。用戶通過VC設計的界面上的控件打開串口,并且發(fā)送數據。當對串口的參數設置完畢,串口成功打開的同時,子線程即接收線程開始運行。用戶發(fā)送數據的同時,接收線程的控制函數也同時運行,當控制函數接收到讀串口事件時,調用讀串口函數,讀取串口接收到的數據。子線程一直運行,也不斷的讀取接收到的數據,并顯示在用戶的界面上。當用戶關閉串口,主線程要終止,此時子線程也收到主線程發(fā)送的關閉串口事件,終止線程,關閉串口。
  在實際通信過程中,由于干擾等原因,數據傳輸可能發(fā)生錯誤,因此還要加上實時錯誤處理以保證數據正常傳輸。這里不再贅述。
  3.3 嵌入式從機的程序實現流程
  在嵌入式從機部分,通信實現采用的是單線程,初始化設備之后等待通信數據,如果數據到達,則調用接收函數接收PC機數據,并將數據解析,返回結果向PC機發(fā)送數據。如果沒有數據則繼續(xù)等待。程序流程圖如圖4所示
[align=center] 圖4[/align]
4、 結束語
  本文分析了多線程技術在實現PC機與單片機串口通信程序中的作用。通過兩個通信線程并發(fā)執(zhí)行,加以同步管理,應用程序能夠在發(fā)送數據的同時接收數據,實時響應性強,高效可靠,有效地避免了數據丟失、程序鎖死等問題。在實際應用中結果令人滿意。
參考文獻:
  [1] Mark Nelson. 串行通信開發(fā)指南.瀟湘工作室譯.M. 北京:中國水利水電出版社,2000.
  [2]求是科技 譚思亮等.Visual C++串口通信工程開發(fā)實例導航.M.北京:人民郵電出版社,2001
  [3]李朝青. PC機與單片機數據通信技術.C. 北京:北京航空航天大學出版社,2001.
圖4[/align]
4、 結束語
  本文分析了多線程技術在實現PC機與單片機串口通信程序中的作用。通過兩個通信線程并發(fā)執(zhí)行,加以同步管理,應用程序能夠在發(fā)送數據的同時接收數據,實時響應性強,高效可靠,有效地避免了數據丟失、程序鎖死等問題。在實際應用中結果令人滿意。
參考文獻:
  [1] Mark Nelson. 串行通信開發(fā)指南.瀟湘工作室譯.M. 北京:中國水利水電出版社,2000.
  [2]求是科技 譚思亮等.Visual C++串口通信工程開發(fā)實例導航.M.北京:人民郵電出版社,2001
  [3]李朝青. PC機與單片機數據通信技術.C. 北京:北京航空航天大學出版社,2001.
標簽:
                                 
                            
上一篇:國產高壓變頻器在濟鋼第三煉...
傳動網版權與免責聲明:凡本網注明[來源:傳動網]的所有文字、圖片、音視和視頻文件,版權均為傳動網(www.surachana.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“傳動網”,違反者本網將追究其法律責任。
本網轉載并注明其他來源的稿件,均來自互聯網或業(yè)內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。
產品新聞
更多>2025-10-31
2025-10-22
2025-10-17
2025-10-11
2025-10-09
2025-09-23