Skip to content

Instantly share code, notes, and snippets.

@dj1711572002
Created September 12, 2021 14:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dj1711572002/c1bc13afb7a66b0701fc4b98773b962d to your computer and use it in GitHub Desktop.
Save dj1711572002/c1bc13afb7a66b0701fc4b98773b962d to your computer and use it in GitHub Desktop.
VB.NET Serial_Receiving_DataGridView Log
'Serial Port Recieve Sample Program
'Form1 Object must create ,button1,2 & textbox 1,2 
Imports System.IO.Ports
Public Class Form1
Dim dArr(500000) As String
Dim rn, rn_start, rn_pause As Integer
Dim sflag As Integer
'dgv初期設定
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
'dgv1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells 'セル幅を自動調整
dgv1.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithoutHeaderText
dgv1.RowHeadersWidth = 60
dgv1.ColumnCount = 16
dgv1.RowCount = 1
dgv1.Rows.Add("CH数", "", "COM No", " ", "BaudRate", "115200")
Button1.Enabled = True
Button2.Enabled = False
CheckBox1.Checked = True
End Sub
Delegate Sub DataDelegate(ByVal sdata As String)
Private Sub PrintData(ByVal sdata As String)
rn = rn + 1
dArr(rn) = sdata
'Dim cnmastr() As String = sdata.Split(vbCrLf)
'If cnmastr.Length > 1 Then
' ' Dim arr1() As String = cnmastr(0).Split(",")
TextBox1.Text = rn.ToString
' 'dgv1.Rows.Add(arr1)
' 'dgv1.Rows(rn).HeaderCell.Value = rn.ToString() '行ヘッダーにデータ番号rn
' 'dgv1.FirstDisplayedScrollingRowIndex = dgv1.Rows.Count - 1 '最新データの最下行を表示
'End If
End Sub
'スタートボタン押し
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'シリアル設定値読み込む
If SerialPort1.IsOpen = False Then
If dgv1.Rows(0).Cells(3).Value <> " " And dgv1.Rows(0).Cells(5).Value <> " " Then
Dim portName As String = "COM" + dgv1.Rows(0).Cells(3).Value 'dgv1からポート番号読み込み
SerialPort1.PortName = portName ' portName オープンするポート名を格納
Dim baudrate As String = dgv1.Rows(0).Cells(5).Value 'dgv1からバーレート読み込み
SerialPort1.BaudRate = baudrate 'baudrate ボーレートを格納
SerialPort1.Open() 'ポートオープン
Button1.Enabled = False
Button2.Enabled = True
rn_start = 1
Else
TextBox1.Text = "*******Please Input COM No*******"
End If
End If
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
If SerialPort1.IsOpen = True Then 'ポートオープン済み
'CheckBox1.Checked = False
System.Threading.Thread.Sleep(2000) '受信タスク停止するまでdelay1秒いれてからクローズする
SerialPort1.Close()
dgv1.CurrentCell = dgv1(0, dgv1.Rows.Count - 1) '最下行にカーソルを維持
dgv1.Rows.Clear()
rn = 0
dgv1.RowHeadersWidth = 60
dgv1.ColumnCount = 16
dgv1.RowCount = 1
dgv1.Rows.Add("CH数", "", "COM No", " ", "BaudRate", "115200")
End If
Button1.Enabled = True
Button2.Enabled = False
End Sub
Private Sub SerialPort1_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim ReceivedData As String = " " '受信データ用変数を宣言します
If CheckBox1.Checked = True Then
Try
ReceivedData = SerialPort1.ReadLine 'データを受信します
Catch ex As Exception
ReceivedData = ex.Message '例外処理を行います
End Try
'SerialPort1.DiscardInBuffer()
'Invokeメソッドにより実行されるメソッドへのデリゲートの宣言を行い、受信データを表示します
Dim adre As New DataDelegate(AddressOf PrintData)
Me.Invoke(adre, ReceivedData)
End If
End Sub
Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
If CheckBox1.Checked = True And SerialPort1.IsOpen = True Then
TextBox1.Text = "****Sampling****"
rn_start = rn
ElseIf CheckBox1.Checked = False And SerialPort1.IsOpen = True Then
TextBox1.Text = "****Paused****"
Dim i As Integer
For i = rn_start To rn
'Dim cnmastr() As String = dArr.Split(vbCrLf)
'If cnmastr.Length > 1 Then
Dim arr1() As String = dArr(i).Split(",")
TextBox1.Text = i.ToString
dgv1.Rows.Add(arr1)
dgv1.Rows(i).HeaderCell.Value = i.ToString() '行ヘッダーにデータ番号rn
dgv1.FirstDisplayedScrollingRowIndex = dgv1.Rows.Count - 1 '最新データの最下行を表示
'End If
Next
End If
End Sub
Private Sub dgv1_MouseClick(sender As Object, e As MouseEventArgs) Handles dgv1.MouseClick
If dgv1.CurrentCell.RowIndex = 0 And dgv1.CurrentCell.ColumnIndex = 3 Then
TextBox1.Text = ""
End If
End Sub
End Class
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment