VB6 使用 MSComm 控件
添加控件
- 打开VB6工程,右键工具箱 → 选择”部件” → 勾选 Microsoft Comm Control 6.0 → 点击”确定”。
- 将
MSComm控件拖到窗体上(默认名称为MSComm1)。
初始化串口
Private Sub Form_Load()
With MSComm1
.CommPort = 1 ' 设置COM端口(如COM1)
.Settings = "9600,N,8,1" ' 波特率9600、无校验、8数据位、1停止位
.InputMode = comInputModeBinary ' 二进制模式(文本模式用comInputModeText)
.PortOpen = True ' 打开串口
End With
End Sub
发送命令
Private Sub SendCommand()
Dim cmd As String
cmd = "AT+COMMAND" & vbCrLf ' 示例命令(以回车换行结束)
' 发送字符串
MSComm1.Output = cmd
' 发送十六进制数据(如发送字节数组)
Dim hexData() As Byte
hexData = Array(&H48, &H65, &H6C, &H6C, &H6F) ' "Hello"的十六进制
MSComm1.Output = hexData
End Sub
接收数据
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive ' 收到数据
Dim data As Variant
data = MSComm1.Input ' 读取数据
' 处理二进制数据或文本
Debug.Print "收到数据: " & StrConv(data, vbUnicode)
End Select
End Sub
关闭串口
Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False
End Sub
VB.NET 使用 SerialPort 控件
添加控件
- 打开VB.NET工程,从工具箱拖拽 SerialPort 控件到窗体(默认名称
SerialPort1)。
初始化串口
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
With SerialPort1
.PortName = "COM1" ' 端口名称
.BaudRate = 9600 ' 波特率
.Parity = Parity.None ' 无校验
.DataBits = 8 ' 数据位
.StopBits = StopBits.One ' 停止位
.Open() ' 打开串口
End With
End Sub
发送命令
Private Sub btnSend_Click(sender As Object, e As EventArgs) Handles btnSend.Click
' 发送文本命令
SerialPort1.WriteLine("AT+COMMAND")
' 发送十六进制数据
Dim hexData() As Byte = {&H48, &H65, &H6C, &H6C, &H6F} ' "Hello"
SerialPort1.Write(hexData, 0, hexData.Length)
End Sub
接收数据
' 添加DataReceived事件处理
Private Sub SerialPort1_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim data As String = SerialPort1.ReadExisting() ' 读取文本
' 或读取字节:
' Dim bytes(SerialPort1.BytesToRead - 1) As Byte
' SerialPort1.Read(bytes, 0, bytes.Length)
' 跨线程更新UI(安全方式)
Me.Invoke(Sub()
txtReceived.Text &= data
End Sub)
End Sub
关闭串口
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
If SerialPort1.IsOpen Then SerialPort1.Close()
End Sub
常见问题解决
-
串口无法打开
- 检查端口是否被其他程序占用。
- 确认端口名称正确(如
COM3而非COM03)。
-
数据接收不完整
- 增加接收缓冲区大小:VB6中设置
MSComm1.InBufferSize = 1024;VB.NET中设置SerialPort1.ReadBufferSize = 1024。
- 增加接收缓冲区大小:VB6中设置
-
中文乱码
- 在VB.NET中指定编码格式:
SerialPort1.Encoding = System.Text.Encoding.GetEncoding("GB2312")
- 在VB.NET中指定编码格式:
-
实时性要求高
- 在VB6中启用
RThreshold属性(如设为1,每收到1字节触发事件)。 - 在VB.NET中使用
SerialPort.BaseStream异步读写。
- 在VB6中启用
安全注意事项
- 异常处理:所有操作需包裹在
Try...Catch(VB.NET)或On Error(VB6)中。 - 资源释放:确保程序退出时关闭串口。
- 权限问题:以管理员身份运行程序(尤其访问
COM1等系统端口)。
引用说明
- VB6 MSComm 控件文档:Microsoft MSComm Control 6.0
- VB.NET SerialPort 类:System.IO.Ports.SerialPort
- 串口协议标准:RS-232 Standard (TIA/EIA-232)
通过以上步骤,您可快速实现VB与串口设备的通信,实际应用需根据设备协议调整命令格式(如结尾符
CR/LF)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/10027.html