程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> RS-232-C端口實時監控軟件的設計實現[VC++6]

RS-232-C端口實時監控軟件的設計實現[VC++6]

編輯:vc教程

   摘要:

   本文介紹了在Microsoft Visual C++ 6.0環境下對RS-232-C串行端口進行編程,以及對後台監控程序所普遍涉及到的無阻塞後台運行、數據的實時接收和處理等問題的解決方法。

   一、 引言

   在實驗室和工業應用中,受信道成本限制,串口常常作為計算機與外部串行設備之間的首選數據傳輸通道,而且由於串行通信方便易行,許多設備和計算機都可以通過串口對外設進行控制、檢測,串口通訊日益成為計算機和外設進行通訊、獲取由外設采集到的監測數據的一個非常重要的手段。本文所描述的程序實例運行於Windows 9x操作系統下,可後台運行、實時接收、處理從端口傳來的數據,並能通過向串口發送命令來控制外設的動作。為了避免在實時監控數據時引發程序阻塞,在本程序中引入了線程和端口中斷響應等技術。

   二、 程序設計思路

   由於本程序要對串行端口進行實時監控,這就要求它是一個後台程序,在監控的同時可以在前台進行其他一些於之無關的操作。因而在實現時即要避免無時無刻都在反復讀端口的效率低下的輪詢方式,又不能因為來不及處理而將突然到達的監測數據丟失。只有采取端口中斷的異步方式才能實現高效、安全的監控過程,只要一有數據到達端口,馬上拋出中斷請求,中斷處理函數便會及時啟動以處理到來的數據,從而避免了輪詢間隙丟時數據的可能。而在大部分無數據到達的時間內不會有中斷拋出,中斷處理函數也不會執行,即僅僅在有數據到達的一瞬間進行工作,此效率不可謂不高。

   綜上所述,要實現上述要求,就要用到下列技術來解決所遇到的關鍵性問題:一是采用多線程來避免在進行文件操作等耗時操作時會引發阻塞現象的發生。同時為了防止多個線程同時對同一個變量進行操作引起時序上的差錯,為了保持線程的同步,還采取了臨界區加解鎖的技術;二是對端口的數據讀取方式采取中斷響應模式,具體原因前面以講的很清楚,在此不再贅述;三是使用了定時器,以滿足實時監控類程序的實時顯示功能,以便及時的將所接收到的動態數據及時的反映到屏
幕上。

三、 RS-232-C串行端口監控軟件的程序實現

   (一) 界面風格

   由於是實時監控軟件,那就既要監測從外設傳來的實時數據,又要通過串口向外設發送一些具體的指令以控制外設完成預先設定的動作。為了方便向串口發送命令可以在工具條上再加一個類似於"Internet Explorer 浏覽器"風格的對話條,可以在初建工程時指定"Internet Explorer ReBars"風格,也可以通過添加Microsoft Visual C++ 6.0自帶的"Dialog Bar"組件來實現。而要及時將從外部讀取的數據顯示給管理人員,並且留有相當記錄以備查閱,可以選擇列表視圖來實現。

   (二) 串口的參數設置及打開

   對RS-232-C串行端口進行參數配置是使用串口進行通訊的必要條件。而且由於場合不同、用途、功能的不同對串口也采取不同的配置方式,為了使本程序更靈活,適應面更廣,采取將所有的可能參數都預先設置在幾個組合框中,可以在程序運行後隨時更改設置。自定義一個設置串口參數的數據結構:

typedef struct tagCOM_CONFIG
{
int nPort; file://端口號,從COM1到COM4
int nBaud; file://波特率,從1200bps到57600bps(對應的宏為CBR_1200到CBR_57600)
int nData; file://數據位個數,7位或是8位
int nStop; file://停止位個數,可以是1位、1.5位、2位。
int nParity;//采取的校驗方式,有無校驗(NOPARITY)、
file://奇校驗(ODDPARITY)和偶校驗(EVENPARITY)等。
}COM_CONFIG;

  • 首頁
  • 上一頁
  • 1
  • 2
  • 3
  • 下一頁
  • 尾頁
  • 共3頁
  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved