. 使用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