做国际贸易做什么网站,那间公司做网站好,如何免费做网站并发布,happytug wordpress在实际应用中有时会牵扯到挑选可用串口#xff0c;比如上位机和从站设备使用Modbus RTU协议进行通讯时需要选择COM串口#xff0c;每次启动连接前都在设备管理器查看较为麻烦#xff0c;可以设置一个串口自动识别功能#xff0c;如果选择了错误的串口还可以提示串口选择错误…在实际应用中有时会牵扯到挑选可用串口比如上位机和从站设备使用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串口