網(wǎng)站的注冊和登錄怎么做友情鏈接聯(lián)盟
在實際應用中有時會牽扯到挑選可用串口,比如上位機和從站設備使用Modbus RTU協(xié)議進行通訊時需要選擇COM串口,每次啟動連接前都在設備管理器查看較為麻煩,可以設置一個串口自動識別功能,如果選擇了錯誤的串口還可以提示串口選擇錯誤。
在Visual Studio中點擊新建項目,選擇Visual Basic語言,先新建一個Windows窗體應用
?隨后會出現(xiàn)一個空白的窗體應用,按 F4 鍵可以在右側(cè)的屬性界面對窗體的標題及格式進行更改
雙擊窗體即可進入到代碼編輯界面(編輯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串口):