熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

Delphi實現遠程串口的數據采集[2]

2013-11-23 17:42:17  來源: Delphi編程 


  . 使用MSComm控件進行串口編程

  Microsoft Communication Control(MSComm)是Microsoft公司提供的Windows下串行通信編程的AcitiveX控件該控件具有豐富的與串口通信密切相關的屬性及事件提供了一系列標准通信命令接口可以用它創建全雙工事件驅動高效實用的通信程序MSComm控件通過串口傳輸和接收數據為應用程序提供串行通信功能

  MSComm的主要屬性及事件

  () CommPort設置或返回串行端口號缺省值

  () Setting設置或返回串口通信參數格式為波特率奇偶校驗位數據位停止位

  () PortOpen打開或關閉串行端口

  () InBufferSize設置或返回接收緩沖區的大小缺省值為字節

  () InBufferCount返回接收緩沖區內等待讀取的字節數可通過設置該屬性為來清空接收緩沖區

  () RThreshold該屬性為一閥值它確定當接收緩沖區內的字節個數達到或超過該值後就產生代碼為ComEvReceive的OnComm事件

  () SThreshold該屬性為一閥值它確定當發送緩沖區內的字節個數少於該值後就產生代碼為ComEvSend的OnComm事件

  () InputLen設置或返回接收緩沖區內用Input讀入的字節數設置該屬性為表示Input讀取整個緩沖區的內容

  () Input從接收緩沖區讀取一串字符

  () InputMode返回從Input中取回的數據類型可以是ANSI碼和二進制數據數組

  () OutBufferSize設置或返回發送緩沖區的大小缺省值為字節

  () OutBufferCount返回發送緩沖區內等待發送的字節數可通過設置該屬性為來清空緩沖區

  () OutPut向發送緩沖區傳送一串字符

  如果在通信過程中發生錯誤或事件就會觸發OnComm事件並由CommEvent屬性代碼反映錯誤類型在通信程序的設計中可根據該屬性值來執行不同的操作CommEvent屬性值及其含義如下

  () ComEvSend值為發送緩沖區的內容少於SThreshold指定的值

  () ComEvReceive值為接收緩沖區內字符數達到RThreshold指定的值

  () ComEvFrame值為硬件檢測到幀錯誤

  () ComEvRxOver值為接收緩沖區溢出

  () ComEvTxFull值為發送緩沖區溢出

  () ComEvRxParity值為奇偶校驗錯誤

  () ComEvEOF值為接收數據中出現文件尾(ASCII碼為)字符

  所以MSComm控件主要提供下列兩種處理通信的方式

  () 事件驅動通信方式當串口發送或接收到數據時可以利用MSComm控件OnComm事件捕獲並處理這些通信事件OnComm事件還可以檢查和處理通信錯誤

  () 查詢方式在關鍵程序之後可以通過檢查CommEvent屬性來查詢事件和錯誤

   系統功能設計

  本遠程數據采集子系統就是利用MSComm控件通過Moderm同遠端的下位機進行通信發送命令獲得下位機采集的實時數據通信流程如下



  當PC機檢測到下位機摘機的信號將控制命令寫入MSComm的發送緩沖區控制命令為定長的數據報格式如下



  其中當命令代碼不是向下位機要數據的命令的時候起始時間和終止時間均為下位機上傳的數據報也為定長數據報格式如下



  數據報標志表明正在傳輸是數據xFFFF數據報序號說明當前傳輸的是第幾個數據報當序號校驗碼出錯時PC機停止接收數據並向下位機發重傳命令此時控制命令的起始時間字段填入需要重傳的數據報的序號最後一個數據報將結束標志置為xFFFF檢測線程檢測到該標志時認為數據接收完畢向主線程發消息通知主線程做進一步的處理

  數據傳輸模式采用二進制數據流形式即MSComm的InputMode屬性設置為ComInputModeBinary收到數據之後使用如下程序進行轉換


vDataBuffer: oleVariant;
DataBuffer: variant;
vDataBuffer := MSCommInput;
DataBuffer := VarArrayCreate([] varByte);
DataBuffer := vDataBuffer;

  主線程向下位機發要數據命令的同時生成檢測線程每收到個字節檢測線程對收到的數據報的結束標志和數據報序號進行檢驗發現數據報序號錯誤立即向主線程發錯誤消息主線程停止從緩沖中取數據向下位機發重傳數據報的命令檢測線程發現數據報接收完畢向主線程發消息主線程結束檢測線程回收資源

   結論

  整個系統在遠程心電醫療診斷軟件上已經得到了應用實際運行表明該通信方式簡單可靠穩定具有比較高的效率和很好的差錯控制功能可供其他遠程通信系統借鑒參考

[]  []  


From:http://tw.wingwit.com/Article/program/Delphi/201311/24927.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.