Skip to content

cSerialPort 属性详解

📋 属性列表

cSerialPort 属性

属性名类型读写说明
IsOpenBoolean只读串口是否已打开
PortNameString读写端口名,打开后不可修改
HandleLong只读串口句柄
ConfigcSerialConfig读写配置对象
LastErrorLong只读最后的错误码
LastErrorMsgString只读最后的错误描述
ReceivedCountLong只读累计接收字节数
SentCountLong只读累计发送字节数
InBufferCountLong只读输入缓冲区当前字节数
OutBufferCountLong只读输出缓冲区当前字节数
CtsHoldingBoolean只读CTS 信号状态
DsrHoldingBoolean只读DSR 信号状态
RingHoldingBoolean只读RING 信号状态
CdHoldingBoolean只读CD/RLSD 信号状态
IsWaitingOnCtsBoolean只读是否等待 CTS
IsWaitingOnDsrBoolean只读是否等待 DSR
IsWaitingOnRlsdBoolean只读是否等待 RLSD
IsXoffHoldBoolean只读是否被 XOFF 暂停
IsXoffSentBoolean只读是否已发送 XOFF
MonitoringBoolean只读是否正在监控
PollIntervalLong读写轮询间隔(ms),10~60000

cSerialConfig 属性

属性名类型默认值说明
BaudRateLong9600波特率
DataBitsLong8数据位,4~8
StopBitsLong0停止位
ParityLong0校验位
FlowControlLong0流控制
DtrControlLong1DTR 控制模式
RtsControlLong1RTS 控制模式
ReadIntervalTimeoutLong50读取间隔超时(ms)
ReadTotalTimeoutMultiplierLong0读取每字节超时系数
ReadTotalTimeoutConstantLong100读取固定超时(ms)
WriteTotalTimeoutMultiplierLong0写入每字节超时系数
WriteTotalTimeoutConstantLong100写入固定超时(ms)
InBufferSizeLong4096输入缓冲区大小(字节)
OutBufferSizeLong4096输出缓冲区大小(字节)
XonCharByte&H11XON 字符
XoffCharByte&H13XOFF 字符
ErrorCharByte0校验错误替换字符
EofCharByte0EOF 字符
EvtCharByte0事件触发字符
NullDiscardBooleanFalse是否丢弃 NULL 字节
AbortOnErrorBooleanFalse错误时是否终止读写
TXContinueOnXoffBooleanFalseXOFF 后是否继续发送
ParityReplaceBooleanTrue校验错误时是否替换字符

🔧 cSerialPort 属性详解

IsOpen

串口是否已打开。

vb
If sp.IsOpen Then
    Debug.Print "串口已打开"
End If

PortName

端口名。打开后不可修改,需先关闭再修改。

vb
sp.PortName = "COM3"
sp.OpenPort
' sp.PortName = "COM4"  ' 错误!打开后不能改
sp.ClosePort
sp.PortName = "COM4"     ' 关闭后可以改

Config

配置对象,类型为 cSerialConfig。打开状态下修改会需要调用 ApplyConfig 生效。

vb
' 读取配置
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

vb
If Not sp.OpenPort("COM99") Then
    Debug.Print "错误码: " & sp.LastError
    Debug.Print "错误描述: " & sp.LastErrorMsg
End If

ReceivedCount / SentCount

累计收发字节数。可通过 ResetCounters 重置。

vb
Debug.Print "已接收: " & sp.ReceivedCount & " 字节"
Debug.Print "已发送: " & sp.SentCount & " 字节"
sp.ResetCounters

InBufferCount / OutBufferCount

输入/输出缓冲区当前字节数。

vb
If sp.InBufferCount > 0 Then
    Debug.Print "缓冲区有 " & sp.InBufferCount & " 字节可读"
End If

信号线状态属性

属性信号说明
CtsHoldingCTS清除发送(Clear To Send)
DsrHoldingDSR数据设备就绪(Data Set Ready)
RingHoldingRING振铃指示
CdHoldingCD/RLSD载波检测(Carrier Detect)
vb
Debug.Print "CTS=" & sp.CtsHolding & " DSR=" & sp.DsrHolding
Debug.Print "RING=" & sp.RingHolding & " CD=" & sp.CdHolding

PollInterval

监控轮询间隔,单位毫秒,范围 10~60000。可在 StartMonitoring 时指定,也可通过属性修改。

vb
sp.PollInterval = 100   ' 100ms 轮询

⚙️ cSerialConfig 属性详解

BaudRate

波特率,使用 eBaudRate 枚举常量。最高支持 256000,远超 MSComm 控件的 115200 限制。

常量说明
br110110
br300300
br600600
br12001200
br24002400
br48004800
br96009600默认值
br1440014400
br1920019200
br3840038400
br5600056000
br5760057600
br115200115200常用高速
br128000128000
br256000256000最高支持
vb
cfg.BaudRate = br9600      ' 或 br115200, br57600, br256000 等

DataBits

数据位,范围 4~8,超出范围会抛出错误。

vb
cfg.DataBits = 8

StopBits

停止位,使用 eStopBits 枚举:sb1(0)、sb1_5(1)、sb2(2)。

Parity

校验位,使用 eParity 枚举:ptNone(0)、ptOdd(1)、ptEven(2)、ptMark(3)、ptSpace(4)。

FlowControl

流控制,使用 eFlowControl 枚举。设置后会自动同步 DTR/RTS 控制模式。

vb
cfg.FlowControl = fcRtsCts   ' 硬件流控制 RTS/CTS

DtrControl / 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 常量说明
ptNone0NOPARITY无校验
ptOdd1ODDPARITY奇校验
ptEven2EVENPARITY偶校验
ptMark3MARKPARITY标记校验
ptSpace4SPACEPARITY空格校验

eStopBits(cSerialConfig)

常量Win32 常量说明
sb10ONESTOPBIT1 个停止位
sb1_51ONE5STOPBITS1.5 个停止位
sb22TWOSTOPBITS2 个停止位

eDtrControl(cSerialConfig)

常量Win32 常量说明
dcDisable0DTR_CONTROL_DISABLEDTR 禁用
dcEnable1DTR_CONTROL_ENABLEDTR 启用
dcHandshake2DTR_CONTROL_HANDSHAKEDTR 流控制握手

eRtsControl(cSerialConfig)

常量Win32 常量说明
rcDisable0RTS_CONTROL_DISABLERTS 禁用
rcEnable1RTS_CONTROL_ENABLERTS 启用
rcHandshake2RTS_CONTROL_HANDSHAKERTS 流控制握手
rcToggle3RTS_CONTROL_TOGGLERTS 切换模式

eFlowControl(cSerialConfig)

常量说明
fcNone0无流控制
fcXonXoff1软件流控制(XON/XOFF)
fcRtsCts2硬件流控制(RTS/CTS)
fcDtrDsr3硬件流控制(DTR/DSR)
fcRtsCtsAndXonXoff4混合流控制(RTS/CTS + XON/XOFF)

eCommEvent(cSerialPort)

通信事件,用于 SetCommMask / WaitForEvent / PinChanged

常量说明
EV_RXCHAR&H1字符已接收
EV_RXFLAG&H2事件字符已接收
EV_TXEMPTY&H4发送缓冲区已空
EV_CTS&H8CTS 信号变化
EV_DSR&H10DSR 信号变化
EV_RLSD&H20RLSD(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&H400I/O 错误
CE_DNS&H800设备未选择
CE_OOP&H1000缺纸
CE_MODE&H8000模式错误

eModemStatus(cSerialPort)

Modem 状态,来自 GetCommModemStatus / ReadModemStatus

常量说明
MS_CTS_ON&H10CTS(清除发送)
MS_DSR_ON&H20DSR(数据设备就绪)
MS_RING_ON&H40RING(振铃指示)
MS_RLSD_ON&H80RLSD/CD(载波检测)

最后更新: 2026-07-05

VB6及其LOGO版权为微软公司所有