怎麼用VB.NET進行串列埠通訊-四川成都軟體開發定製APP程式設計
文-沙鷗-2018.11.9 1,前言 前一段時間一位認識的朋友找到我,知道我這裡是做工控自動化、電路板、控制器、儀器儀表、軟體APP開發定製的(業務QQ2531263726),於是跟我說要把一個指紋模組和他們公司的觸控式螢幕結合起來做成一個系統,發來了資料看了一下,這個指紋模組可以用串列埠和USB與上位機通訊,為了做起來簡單一些優先選擇串列埠通訊。朋友請求先在電腦上和指紋模組把資料調通,那麼我就計劃先寫個電腦桌面小軟體測試一下,找到幾年前做的一個專案,是用VB.NET做的上位機軟體,裡面有串列埠通訊模組例程可以參考。 那麼,本文就介紹一下怎麼在VB.NET中使用串列埠控制元件與下位機電路板通訊。 2,使用VB.NET串列埠的總體技術梗概和實現流程 VB.NET有一個控制元件叫做SerialPort,在左邊的toolbox裡面把它拖拽到窗體,並對SerialPort控制元件進行配置和呼叫就能使用電腦進行串列埠通訊。
3,一點一點詳細介紹串列埠操作和例程 開弓第一步,先用手將弓拉開,把左側工具欄的SerialPort控制元件拖拽放置到窗體裡面,一般SerialPort控制元件會自動定位到窗體的下方。 3.1 引入名稱空間 Imports System Imports System.IO.Ports 這兩行程式碼將VB.NET串列埠開發必要的函式引入本工程檔案裡面。 3.2 讀取和選擇串列埠號 ‘功能:讀取計算機串列埠,並將可用的串列埠號顯示在一個下拉列表框裡面 Sub GetSerialPortNames() For Each sp As String In My.Computer.Ports.SerialPortNames ComboBox1.Items.Add(sp) 'CompList是一個下列表框控制元件,顯示計算機可用的串列埠號 Next If ComboBox1.Items.Count >= 1 Then ComboBox1.SelectedIndex() = 0 ' ComboBox1.Text = ComboBox1.SelectedItem.ToString Else MsgBox("請插入USB轉串列埠線!", MsgBoxStyle.Information, "提示!") ’假如是筆記本等沒有串列埠的計算機,那麼就需要買一根USB轉串列埠線 End End If End Sub 以上程式就實現了將計算機上可以使用的串列埠號顯示在軟體介面的一個下拉列表框裡面,假如計算機沒有串列埠,可以使用USB轉串列埠線,如沒有插入,會提示你"請插入USB轉串列埠線!"。 3.3 串列埠設定 串列埠在使用前需要進行一下配置,包括串列埠號、波特率、資料位、停止位、緩衝區大小等引數設定。 '功能:串列埠設定 Sub PortStart() If SerialPort1.IsOpen Then SerialPort1.Close() SerialPort1.PortName = ComboBox1.SelectedItem.ToString '計算機串列埠設定,可以使用下列表框選擇 SerialPort1.BaudRate = 9600 '波特率設定 SerialPort1.DataBits = 8 '資料位設定 SerialPort1.StopBits = StopBits.One '停止位設定 SerialPort1.ReadBufferSize = 256 '設定輸入緩衝區大小為?位元組 SerialPort1.DtrEnable = True SerialPort1.ReadTimeout = 500 '超時時間 SerialPort1.NewLine = vbCrLf '行結束符號 End Sub 3.4 開啟串列埠 '功能:開啟串列埠 Sub PortOpen() If Not SerialPort1.IsOpen Then ''假如串列埠關著的,那麼就開啟串列埠 Try Call PortStart() SerialPort1.Open() Catch ex As UnauthorizedAccessException MsgBox("串列埠被佔用或串列埠錯誤!", MsgBoxStyle.Information, "提示!") End Try End If End Sub 把串列埠配置好後,就可以開啟串列埠,進行後續的資料收發。 3.5 串列埠收發資料 串列埠傳送資料 Sub send(ByVal send_dat As Byte) Dim senddata(0) As Byte senddata(0) = send_dat Try SerialPort1.Write(senddata, 0, senddata.Length) Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub 以上程式段實現了串列埠資料傳送,將待發送的資料存在陣列senddata中,執行指令即可傳送資料。 串列埠接收資料 串列埠接收資料有兩種方式,一種是中斷接收方式,另一種是定時查詢接收的方式。 >>中斷接收方式 '觸發接收事件 Public Sub Sp_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived Me.Invoke(New EventHandler(AddressOf Sp_Receiving)) '呼叫接收資料函式 End Sub
'接收資料 Private Sub Sp_Receiving(ByVal sender As Object, ByVal e As EventArgs) Dim strIncoming As String Try receivebytes.Text = Str(Val(receivebytes.Text) + SerialPort1.BytesToRead) If SerialPort1.BytesToRead > 0 Then Threading.Thread.Sleep(100) '新增的延時 strIncoming = SerialPort1.ReadExisting.ToString '讀取緩衝區中的資料 SerialPort1.DiscardInBuffer() receivebox.Text = strIncoming End If Catch ex As Exception MessageBox.Show(ex.Message) End Try End Su >>定時查詢接收方式 ‘定時掃描串列埠接收資料 Dim ReceivedLen As Integer Dim i As Integer If SerialPort1.IsOpen Then ‘假如串列埠是開啟的 If SerialPort1.BytesToRead > 0 Then ‘假如串列埠接收到資料位元組不為0 ReceivedLen = SerialPort1.BytesToRead ‘一次接收到的資料位元組數 Dim inx(ReceivedLen) As Byte SerialPort1.Read(inx, 0, inx.Length) ‘讀取資料到陣列inx中,讀取索引從0到inx.Length之間的資料 End If End If 3.6 關閉串列埠 '關閉À串列埠 Sub PortClose() Try SerialPort1.Close() DrawCircle(New Point(400 * circle_X, 15 * circle_Y), 10 * circle_X, Brushes.Red) Catch ex As Exception MsgBox("串列埠未開啟或串列埠異常!", MsgBoxStyle.Information, "提示!") End Try End Sub 使用完之後,關閉串列埠。 4,小結 以上本文就介紹了用VB.NET進行串列埠通訊的一般流程和部分相關程式段,在實際過程中需要補充一些其他的控制元件和程式碼,就能實現一個完整的工程應用。 更多精彩,歡迎關注微信公眾號“永珂線上”。 【參考】 vb.net利用SerialPort進行讀取串列埠操作 https://blog.csdn.net/u011788252/article/details/53637993