C++ Builder 串口編程不再直接操作硬件,而是通過 Windows API 或 ActiveX 控件實現。本文對比兩種方案並給出完整代碼示例。
核心函數:
CreateFile - 打開串口設備(\\.\COM1)GetCommState / SetCommState - 獲取/設置通信參數(波特率、校驗位等)ReadFile / WriteFile - 數據收發SetCommTimeouts - 設置超時屬性CloseHandle - 關閉串口Builder 3/4 中導入後,Input/Output 屬性為 OleVariant 類型,需特殊處理:
OleVariant TxBuff;
TxBuff = VarArrayCreate(OPENARRAY(int, (0, n)), varByte);
for (int i = 0; i < n; i++)
TxBuff.PutElement(buf[i], i);
MSComm1->Output = TxBuff;
OleVariant RxBuff;
if (MSComm1->InBuffCount > 0) {
RxBuff = MSComm1->Input;
int ByteNum = RxBuff.ArrayHighBound(1);
for (int i = 0; i <= ByteNum; i++)
buff[BuffPtr++] = RxBuff.GetElement(i);
}
OnComm 事件:設置 RThreshold 門檻值觸發OnComm 不可靠,易丟失事件Timer 定時輪詢 InBuffCount| 屬性 | 說明 |
|---|---|
| CommPort | 串口號(1=COM1) |
| Settings | 如 "9600,n,8,1" |
| RThreshold | 接收觸發字節數,0=不觸發事件 |
| InputMode | 0=文本,1=二進制 |