当前位置: 首页 > news >正文

VB.NET实现上位机自动识别可用串口

在实际应用中有时会牵扯到挑选可用串口,比如上位机和从站设备使用Modbus RTU协议进行通讯时需要选择COM串口,每次启动连接前都在设备管理器查看较为麻烦,可以设置一个串口自动识别功能,如果选择了错误的串口还可以提示串口选择错误。

在Visual Studio中点击新建项目,选择Visual Basic语言,先新建一个Windows窗体应用

 随后会出现一个空白的窗体应用,按 F4 键可以在右侧的属性界面对窗体的标题及格式进行更改

双击窗体即可进入到代码编辑界面(编辑Form1.vb文件)

通常不要随意删除Form1.vb中的类,因为这些类是由设计器自动生成,删除后可能会报错。

随后导入识别串口所需要的库:

Imports System.IO.Ports

 如果需要Modbus通讯功能,需要点击 项目 栏,随后点击管理NuGet程序包 下载NModbus库和NModbus.Serial库

 在工具箱中搜索:ComboBox ,这是一个可供选择的下拉列表,拖入到窗体中

 双击ComboBox,在From1类下新建一个私有类:

Private currentPortName As String = ""

在From1_Load类(窗口加载时类)中补全功能:

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.LoadDim portNames() As String = SerialPort.GetPortNames()' 将端口名添加到ComboBox中  For Each portName As String In portNamesComboBox1.Items.Add(portName)NextEnd Sub

在ComboBox1_SelectedIndexChanged(串口改变时类)补全:

Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChangedIf ComboBox1.SelectedItem IsNot Nothing ThencurrentPortName = ComboBox1.SelectedItem.ToString() ' 更新currentPortName的值  TryUsing testPort As New SerialPort(currentPortName)testPort.Open()End UsingCatch ex As UnauthorizedAccessExceptionMessageBox.Show("所选串口已被占用,请重新选择一个串口。", "串口占用提示", MessageBoxButtons.OK, MessageBoxIcon.Warning)' 清除当前选择,用户可以重新选择    ComboBox1.SelectedIndex = -1currentPortName = "" ' 清除currentPortName的值  Catch ex As Exception' 捕获其他可能的异常,并进行处理    MessageBox.Show("无法打开串口:" & ex.Message, "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Error)ComboBox1.SelectedIndex = -1currentPortName = ""End TryElseMessageBox.Show("请先选择一个串口。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)' 可以选择设置一个默认的串口或者不做任何操作    currentPortName = ""End IfEnd Sub

完整版代码如下:

Imports System.IO.PortsPublic Class Form1Private currentPortName As String = ""Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.LoadDim portNames() As String = SerialPort.GetPortNames()' 将端口名添加到ComboBox中  For Each portName As String In portNamesComboBox1.Items.Add(portName)NextEnd SubPrivate Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChangedIf ComboBox1.SelectedItem IsNot Nothing ThencurrentPortName = ComboBox1.SelectedItem.ToString() ' 更新currentPortName的值  TryUsing testPort As New SerialPort(currentPortName)testPort.Open()End UsingCatch ex As UnauthorizedAccessExceptionMessageBox.Show("所选串口已被占用,请重新选择一个串口。", "串口占用提示", MessageBoxButtons.OK, MessageBoxIcon.Warning)' 清除当前选择,用户可以重新选择    ComboBox1.SelectedIndex = -1currentPortName = "" ' 清除currentPortName的值  Catch ex As Exception' 捕获其他可能的异常,并进行处理    MessageBox.Show("无法打开串口:" & ex.Message, "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Error)ComboBox1.SelectedIndex = -1currentPortName = ""End TryElseMessageBox.Show("请先选择一个串口。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)' 可以选择设置一个默认的串口或者不做任何操作    currentPortName = ""End IfEnd Sub
End Class

代码运行后(COM1串口已被占用,选择后会提示错误,随后提示从新选择COM串口):

http://www.lryc.cn/news/370185.html

相关文章:

  • Node.js版本管理工具-NVM
  • 【react】useEffect 快速上手
  • docker容器部署jenkins
  • 第十四章 享元模式
  • ThinkBook 16 2024 Ubuntu 触控板问题解决
  • qt qDebug兼容LOGE
  • 【Ardiuno】实验使用ESP32单片机连接Wifi(图文)
  • 常用的五大数据可视化工具测评分享
  • 什么是校园抄表系统?
  • 计算机专业:未来何去何从?
  • python-windows10普通笔记本跑bert mrpc数据样例0.1.048
  • 4句话明白虚拟机和容器的区别
  • Django render()函数页面渲染
  • 基于webrtc的媒体流传输工具tl-rtc-file
  • 【最新鸿蒙应用开发】——类Web开发范式2——前端语法
  • 前端的强缓存和协商缓存
  • JSON如何处理包含特殊字符的字段
  • JavaScript 中的 AbortController
  • 【前端】vue在线编辑器
  • leetcode67:二进制求和
  • 程序员必备的职业素养:专业精神、沟通能力与持续学习
  • Spring源码:核心类的介绍
  • 文化融合,市场共赢:品牌海外推广中的符号与象征策略
  • fabric.util.enlivenObjects是什么意思
  • 几个阶段性的面试难点整理
  • CTFHUB-技能树-web-信息泄露
  • 面试计算机网络八股文十问十答第八期
  • 0605-JavaSE-单例模式-饿懒汉模式
  • TCP和UDP区别
  • [Shell编程学习路线]——编制第一个shell脚本入门篇