cSerialPort 属性详解
📋 属性列表
cSerialPort 属性
| 属性名 | 类型 | 读写 | 说明 |
|---|---|---|---|
IsOpen | Boolean | 只读 | 串口是否已打开 |
PortName | String | 读写 | 端口名,打开后不可修改 |
Handle | Long | 只读 | 串口句柄 |
Config | cSerialConfig | 读写 | 配置对象 |
LastError | Long | 只读 | 最后的错误码 |
LastErrorMsg | String | 只读 | 最后的错误描述 |
ReceivedCount | Long | 只读 | 累计接收字节数 |
SentCount | Long | 只读 | 累计发送字节数 |
InBufferCount | Long | 只读 | 输入缓冲区当前字节数 |
OutBufferCount | Long | 只读 | 输出缓冲区当前字节数 |
CtsHolding | Boolean | 只读 | CTS 信号状态 |
DsrHolding | Boolean | 只读 | DSR 信号状态 |
RingHolding | Boolean | 只读 | RING 信号状态 |
CdHolding | Boolean | 只读 | CD/RLSD 信号状态 |
IsWaitingOnCts | Boolean | 只读 | 是否等待 CTS |
IsWaitingOnDsr | Boolean | 只读 | 是否等待 DSR |
IsWaitingOnRlsd | Boolean | 只读 | 是否等待 RLSD |
IsXoffHold | Boolean | 只读 | 是否被 XOFF 暂停 |
IsXoffSent | Boolean | 只读 | 是否已发送 XOFF |
Monitoring | Boolean | 只读 | 是否正在监控 |
PollInterval | Long | 读写 | 轮询间隔(ms),10~60000 |
cSerialConfig 属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
BaudRate | Long | 9600 | 波特率 |
DataBits | Long | 8 | 数据位,4~8 |
StopBits | Long | 0 | 停止位 |
Parity | Long | 0 | 校验位 |
FlowControl | Long | 0 | 流控制 |
DtrControl | Long | 1 | DTR 控制模式 |
RtsControl | Long | 1 | RTS 控制模式 |
ReadIntervalTimeout | Long | 50 | 读取间隔超时(ms) |
ReadTotalTimeoutMultiplier | Long | 0 | 读取每字节超时系数 |
ReadTotalTimeoutConstant | Long | 100 | 读取固定超时(ms) |
WriteTotalTimeoutMultiplier | Long | 0 | 写入每字节超时系数 |
WriteTotalTimeoutConstant | Long | 100 | 写入固定超时(ms) |
InBufferSize | Long | 4096 | 输入缓冲区大小(字节) |
OutBufferSize | Long | 4096 | 输出缓冲区大小(字节) |
XonChar | Byte | &H11 | XON 字符 |
XoffChar | Byte | &H13 | XOFF 字符 |
ErrorChar | Byte | 0 | 校验错误替换字符 |
EofChar | Byte | 0 | EOF 字符 |
EvtChar | Byte | 0 | 事件触发字符 |
NullDiscard | Boolean | False | 是否丢弃 NULL 字节 |
AbortOnError | Boolean | False | 错误时是否终止读写 |
TXContinueOnXoff | Boolean | False | XOFF 后是否继续发送 |
ParityReplace | Boolean | True | 校验错误时是否替换字符 |
🔧 cSerialPort 属性详解
IsOpen
串口是否已打开。
If sp.IsOpen Then
Debug.Print "串口已打开"
End IfPortName
端口名。打开后不可修改,需先关闭再修改。
sp.PortName = "COM3"
sp.OpenPort
' sp.PortName = "COM4" ' 错误!打开后不能改
sp.ClosePort
sp.PortName = "COM4" ' 关闭后可以改Config
配置对象,类型为 cSerialConfig。打开状态下修改会需要调用 ApplyConfig 生效。
' 读取配置
Debug.Print sp.Config.BaudRate
' 修改配置
sp.Config.BaudRate = br115200
If sp.IsOpen Then sp.ApplyConfig ' 已打开需手动应用
' 替换整个配置对象
Dim cfg As New cSerialConfig
cfg.BaudRate = br9600
Set sp.Config = cfg ' 会自动应用LastError / LastErrorMsg
最后的 Win32 错误码和描述。OpenPort 失败时返回 False 并设置 LastError。
If Not sp.OpenPort("COM99") Then
Debug.Print "错误码: " & sp.LastError
Debug.Print "错误描述: " & sp.LastErrorMsg
End IfReceivedCount / SentCount
累计收发字节数。可通过 ResetCounters 重置。
Debug.Print "已接收: " & sp.ReceivedCount & " 字节"
Debug.Print "已发送: " & sp.SentCount & " 字节"
sp.ResetCountersInBufferCount / OutBufferCount
输入/输出缓冲区当前字节数。
If sp.InBufferCount > 0 Then
Debug.Print "缓冲区有 " & sp.InBufferCount & " 字节可读"
End If信号线状态属性
| 属性 | 信号 | 说明 |
|---|---|---|
CtsHolding | CTS | 清除发送(Clear To Send) |
DsrHolding | DSR | 数据设备就绪(Data Set Ready) |
RingHolding | RING | 振铃指示 |
CdHolding | CD/RLSD | 载波检测(Carrier Detect) |
Debug.Print "CTS=" & sp.CtsHolding & " DSR=" & sp.DsrHolding
Debug.Print "RING=" & sp.RingHolding & " CD=" & sp.CdHoldingPollInterval
监控轮询间隔,单位毫秒,范围 10~60000。可在 StartMonitoring 时指定,也可通过属性修改。
sp.PollInterval = 100 ' 100ms 轮询⚙️ cSerialConfig 属性详解
BaudRate
波特率,使用 eBaudRate 枚举常量。最高支持 256000,远超 MSComm 控件的 115200 限制。
| 常量 | 值 | 说明 |
|---|---|---|
br110 | 110 | |
br300 | 300 | |
br600 | 600 | |
br1200 | 1200 | |
br2400 | 2400 | |
br4800 | 4800 | |
br9600 | 9600 | 默认值 |
br14400 | 14400 | |
br19200 | 19200 | |
br38400 | 38400 | |
br56000 | 56000 | |
br57600 | 57600 | |
br115200 | 115200 | 常用高速 |
br128000 | 128000 | |
br256000 | 256000 | 最高支持 |
cfg.BaudRate = br9600 ' 或 br115200, br57600, br256000 等DataBits
数据位,范围 4~8,超出范围会抛出错误。
cfg.DataBits = 8StopBits
停止位,使用 eStopBits 枚举:sb1(0)、sb1_5(1)、sb2(2)。
Parity
校验位,使用 eParity 枚举:ptNone(0)、ptOdd(1)、ptEven(2)、ptMark(3)、ptSpace(4)。
FlowControl
流控制,使用 eFlowControl 枚举。设置后会自动同步 DTR/RTS 控制模式。
cfg.FlowControl = fcRtsCts ' 硬件流控制 RTS/CTSDtrControl / RtsControl
DTR/RTS 控制模式。使用 eDtrControl/eRtsControl 枚举:dcDisable(0)、dcEnable(1)、dcHandshake(2)、rcToggle(3,仅RTS)。
超时参数
| 参数 | 说明 |
|---|---|
ReadIntervalTimeout | 两次读取间的最大间隔,超时返回 |
ReadTotalTimeoutMultiplier | 每字节超时系数 |
ReadTotalTimeoutConstant | 读取固定超时 |
WriteTotalTimeoutMultiplier | 写入每字节超时系数 |
WriteTotalTimeoutConstant | 写入固定超时 |
总超时 = Multiplier × 字节数 + Constant。详见 高级进阶 - 超时策略
InBufferSize / OutBufferSize
缓冲区大小,必须大于 0。
XonChar / XoffChar
XON/XOFF 流控制字符,默认 &H11(DC1) 和 &H13(DC3)。
📚 枚举参考
所有枚举定义在类模块中(而非标准模块),因此编译为 DLL 后会随类型库导出,外部工程可直接使用。详见 概述 - 架构设计。
eBaudRate(cSerialConfig)
波特率常量。最高值:256000。完整列表见 BaudRate。
eParity(cSerialConfig)
| 常量 | 值 | Win32 常量 | 说明 |
|---|---|---|---|
ptNone | 0 | NOPARITY | 无校验 |
ptOdd | 1 | ODDPARITY | 奇校验 |
ptEven | 2 | EVENPARITY | 偶校验 |
ptMark | 3 | MARKPARITY | 标记校验 |
ptSpace | 4 | SPACEPARITY | 空格校验 |
eStopBits(cSerialConfig)
| 常量 | 值 | Win32 常量 | 说明 |
|---|---|---|---|
sb1 | 0 | ONESTOPBIT | 1 个停止位 |
sb1_5 | 1 | ONE5STOPBITS | 1.5 个停止位 |
sb2 | 2 | TWOSTOPBITS | 2 个停止位 |
eDtrControl(cSerialConfig)
| 常量 | 值 | Win32 常量 | 说明 |
|---|---|---|---|
dcDisable | 0 | DTR_CONTROL_DISABLE | DTR 禁用 |
dcEnable | 1 | DTR_CONTROL_ENABLE | DTR 启用 |
dcHandshake | 2 | DTR_CONTROL_HANDSHAKE | DTR 流控制握手 |
eRtsControl(cSerialConfig)
| 常量 | 值 | Win32 常量 | 说明 |
|---|---|---|---|
rcDisable | 0 | RTS_CONTROL_DISABLE | RTS 禁用 |
rcEnable | 1 | RTS_CONTROL_ENABLE | RTS 启用 |
rcHandshake | 2 | RTS_CONTROL_HANDSHAKE | RTS 流控制握手 |
rcToggle | 3 | RTS_CONTROL_TOGGLE | RTS 切换模式 |
eFlowControl(cSerialConfig)
| 常量 | 值 | 说明 |
|---|---|---|
fcNone | 0 | 无流控制 |
fcXonXoff | 1 | 软件流控制(XON/XOFF) |
fcRtsCts | 2 | 硬件流控制(RTS/CTS) |
fcDtrDsr | 3 | 硬件流控制(DTR/DSR) |
fcRtsCtsAndXonXoff | 4 | 混合流控制(RTS/CTS + XON/XOFF) |
eCommEvent(cSerialPort)
通信事件,用于 SetCommMask / WaitForEvent / PinChanged。
| 常量 | 值 | 说明 |
|---|---|---|
EV_RXCHAR | &H1 | 字符已接收 |
EV_RXFLAG | &H2 | 事件字符已接收 |
EV_TXEMPTY | &H4 | 发送缓冲区已空 |
EV_CTS | &H8 | CTS 信号变化 |
EV_DSR | &H10 | DSR 信号变化 |
EV_RLSD | &H20 | RLSD(CD) 信号变化 |
EV_BREAK | &H40 | 检测到中断 |
EV_ERR | &H80 | 线路状态错误 |
EV_RING | &H100 | 振铃检测 |
EV_PERR | &H200 | 打印机错误 |
EV_RX80FULL | &H400 | 接收缓冲区 80% 满 |
EV_EVENT1 | &H800 | 设备事件 1 |
EV_EVENT2 | &H1000 | 设备事件 2 |
eCommError(cSerialPort)
通信错误,来自 ClearCommError / ErrorOccurred / ReadCommErrors。
| 常量 | 值 | 说明 |
|---|---|---|
CE_RXOVER | &H1 | 接收缓冲区溢出 |
CE_OVERRUN | &H2 | 字符覆盖(缓冲区满) |
CE_RXPARITY | &H4 | 校验错误 |
CE_FRAME | &H8 | 帧错误 |
CE_BREAK | &H10 | 中断检测 |
CE_TXFULL | &H100 | 发送缓冲区满 |
CE_PTO | &H200 | 并口超时 |
CE_IOE | &H400 | I/O 错误 |
CE_DNS | &H800 | 设备未选择 |
CE_OOP | &H1000 | 缺纸 |
CE_MODE | &H8000 | 模式错误 |
eModemStatus(cSerialPort)
Modem 状态,来自 GetCommModemStatus / ReadModemStatus。
| 常量 | 值 | 说明 |
|---|---|---|
MS_CTS_ON | &H10 | CTS(清除发送) |
MS_DSR_ON | &H20 | DSR(数据设备就绪) |
MS_RING_ON | &H40 | RING(振铃指示) |
MS_RLSD_ON | &H80 | RLSD/CD(载波检测) |
最后更新: 2026-07-05