VB如何发送串口命令?

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

常见问题解决

  1. 串口无法打开

    • 检查端口是否被其他程序占用。
    • 确认端口名称正确(如COM3而非COM03)。
  2. 数据接收不完整

    • 增加接收缓冲区大小:VB6中设置MSComm1.InBufferSize = 1024;VB.NET中设置SerialPort1.ReadBufferSize = 1024
  3. 中文乱码

    • 在VB.NET中指定编码格式:
      SerialPort1.Encoding = System.Text.Encoding.GetEncoding("GB2312")
  4. 实时性要求高

    • 在VB6中启用RThreshold属性(如设为1,每收到1字节触发事件)。
    • 在VB.NET中使用SerialPort.BaseStream异步读写。

安全注意事项

  • 异常处理:所有操作需包裹在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

(0)
酷番叔酷番叔
上一篇 2025年8月8日 17:58
下一篇 2025年8月8日 18:23

相关推荐

  • 国内业务中台方案特价,为何如此优惠?

    国内业务中台方案特价并非单纯的价格促销,而是技术架构成熟与市场竞争深化后的必然产物,它代表了从高昂的定制化开发向标准化、模块化SaaS服务转型的红利期,对于正处于数字化转型关键期的企业而言,选择高性价比的中台方案,核心在于识别其底层的可扩展性与业务适配度,而非仅仅关注初期的投入成本,这种特价方案通常通过剥离非核……

    2026年2月24日
    7500
  • 国内业务中台服务检测,哪些环节可能存在问题?

    数据一致性、接口稳定性、性能延迟及下游依赖链路监控可能存在问题。

    2026年2月23日
    6800
  • a图无限看网站是免费无限制的吗?

    在数字时代,影视娱乐已成为人们日常生活中不可或缺的一部分,而各类在线观看平台如雨后春笋般涌现,“a图无限看网站”凭借其丰富的资源库和便捷的访问方式,吸引了大量用户关注,本文将从平台特点、内容分类、使用体验及注意事项等方面,为您全面解析这一网站,帮助用户更好地了解和使用在线影视资源,平台特点与资源优势“a图无限看……

    2025年12月3日
    10500
  • 安全大数据属性画像如何精准定义与应用?

    在数字化时代,大数据已成为驱动社会发展的核心资源,而安全大数据作为其中的重要分支,聚焦于网络安全、数据安全、业务安全等领域的海量信息采集与分析,安全大数据的价值不仅在于规模,更在于其通过多维度分析提炼出的“安全属性画像”,这一技术通过对数据的结构化处理与特征提取,为精准风险评估、智能威胁检测和主动安全防护提供了……

    2025年11月23日
    11900
  • AutoJS如何精准识别屏幕文字?

    在移动自动化领域,AutoJS凭借其强大的JavaScript脚本引擎和丰富的API接口,成为实现屏幕文字识别功能的重要工具,通过AutoJS的OCR(光学字符识别)能力,开发者可以构建自动化流程,例如提取应用界面中的验证码、识别商品信息、实现无障碍文本交互等场景,本文将系统介绍AutoJS识别屏幕文字的技术原……

    2025年12月9日
    13400

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信