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