首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 實作遠端序列埠資料擷取:MSComm ActiveX 控制項應用實戰

     編輯:Delphi

序列埠通訊原理與 Windows 開發模式

序列埠通訊分同步(共享時脈、效率高)與非同步(字元為單位、靈活)兩種。Win32 API 支援同步/非同步 I/O,但同步模式在 Win9x/NT 差異導致執行緒阻塞問題,工業級應用普遍採用非同步模式。三種開發方式:

  1. 組合語言直接存取埠: 效率高但 NT/2000 保護模式下需核心驅動程式,實作複雜。
  2. Win32 API 函式: CreateFile 開啟埠 → Get/SetCommState 設定 DCB → SetCommMask 設定事件 → CreateThread + WaitCommEvent 監視執行緒 → ReadFile/WriteFile 傳輸。功能強但程式碼龐大、需深厚系統知識。
  3. MSComm ActiveX 控制項: Microsoft 提供的封裝元件,屬性/事件豐富,支援事件驅動與輪詢兩種模式,開發效率最高,本文採用此方案。

MSComm 核心屬性與事件

屬性說明
CommPort序列埠號(預設 1)
Settings通訊參數「Baud,Parity,Data,Stop」
PortOpen開啟/關閉埠
InBufferSize/Count接收緩衝區大小/待讀位元組數
RThreshold接收觸發閾值,達到觸發 OnComm
SThreshold發送緩衝區低水位觸發閾值
InputLen/Input讀取長度/讀取資料
InputMode資料類型:文字/二進位陣列
Output/OutBufferSize/Count發送資料/發送緩衝區大小/待送數量

OnComm 事件由 CommEvent 代碼區分:1=發送閾值、2=接收閾值、1004=幀錯誤、1008=接收溢位、1010=發送溢位、1009=奇偶校驗錯、7=EOF字元。

遠端資料擷取系統架構與通訊協定

通訊流程:PC透過Modem連線下位機,發送命令、接收資料

控制命令格式(定長資料包):

命令資料包結構

非索取資料命令時起迄時間為 0。下位機上傳資料包格式:

上傳資料包結構

標誌 0xFFFF、序號校驗、結束標誌 0xFFFF。序號錯誤觸發重傳命令(起始時間填入需重傳序號)。

Delphi 實作關鍵代碼

二進位資料接收與轉換:

vDataBuffer: OleVariant;
DataBuffer: Variant;
vDataBuffer := MSComm1.Input;                    // 讀取二進位資料
DataBuffer := VarArrayCreate([0, 2048], varByte); // 建立位元組陣列
DataBuffer := vDataBuffer;                       // 轉換為可索引陣列

監視執行緒邏輯: 主執行緒發送命令後啟動監視執行緒,每收 1032 位元組檢查結束標誌與序號。錯誤通知主執行緒重傳;收到結束標誌通知主執行緒處理資料、銷毀監視執行緒。

實測驗證與替代方案

系統已應用於遠端心電醫療診斷軟體,運行穩定、差錯控制優異。進階開發可考慮 DSPack(DirectShow/DirectX 元件套件,支援 DirectX 9、Win9x/ME/2000/XP),提供更豐富的多媒體串流處理能力。視訊聊天實現核心在於壓縮編碼、網路傳輸、解碼顯示,工程挑戰不容小覷。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved