Skip to content

Instantly share code, notes, and snippets.

@dj1711572002
Created September 15, 2021 20:42
Show Gist options
  • Save dj1711572002/82779ce58006b41e9fd5416fb5f11aca to your computer and use it in GitHub Desktop.
Save dj1711572002/82779ce58006b41e9fd5416fb5f11aca to your computer and use it in GitHub Desktop.
VB.NET  GNSS_MovingBase_3PortReceiving_Monitor_Program(DataGridView Log to CSV file)_rev00
'Serial Port Recieve Sample Program
'Form1 Object must create ,button1,2 & textbox 1,2 
Imports System.IO.Ports
Public Class Form1
Dim relP As Double(,)
'Dim relPN As Double()
'Dim relPE As Double()
'Dim relPD As Double()
'Dim relLen As Double()
Dim rn, rn_start, rn_pause As Integer
Dim sflag As Integer
Dim ReceivedDataTotal As String = ""
Dim ReceivedData1 As String = " " '受信データ用変数を宣言します
Dim ReceivedData2 As String = " " '受信データ用変数を宣言します
Dim ReceivedData3 As String = " " '受信データ用変数を宣言します
Dim strPVT As String
Dim sbPVT As String()
Dim bPVT As Byte()
Dim strRELP As String
Dim sbRELP As String()
Dim bRELP As Byte()
Dim parPVT As Integer()
Dim parRELP As Integer()
Dim NVC As Integer = 0 'NAV data Counter
Dim radioNo As Integer
'=============File declarations ================
Public file As System.IO.StreamWriter
Public fileH As System.IO.StreamWriter
Public fopen As Integer
Public f1open As Integer
Public fnameH As String
Public fStr1, fstr2 As String
Public copyCol()
Public copyRow()
'dgv初期設定
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
dgv1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells 'セル幅を自動調整
dgv2.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells 'セル幅を自動調整
dgv2.Font = New Font(“MS ゴシック”, 14, FontStyle.Bold)
dgv1.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithoutHeaderText
dgv1.ColumnCount = 172
dgv1.RowCount = 1
dgv1.RowHeadersWidth = 60
For Each sp As String In My.Computer.Ports.SerialPortNames
ComboBox1.Items.Add(sp)
Next
Dim k As Integer
For k = 0 To 171
dgv1.Columns(k).HeaderText = k + 1
Next
dgv1.Rows.Add("COM1", "5 ", "COM2", "6", "COM3", "8 ", "BaudRate", "115200")
Button1.Enabled = True
Button2.Enabled = False
CheckBox1.Checked = True
'===========dgv2 初期設定==================================
dgv2.ColumnCount = 10
dgv2.RowCount = 1
dgv2.RowHeadersWidth = 100
'dgv2.Rows.Add("BaseLon", "BaseLat", "Antenna_No", "date", "relPosN", "relPosE", "relPosD ", "relPosLen")
'==============dgv2 header text==========================
dgv2.Columns(0).HeaderText = "BaseNo"
dgv2.Columns(1).HeaderText = "radioNo"
dgv2.Columns(2).HeaderText = "relPosN"
dgv2.Columns(3).HeaderText = "relPosE"
dgv2.Columns(4).HeaderText = "relPosD"
dgv2.Columns(5).HeaderText = "relPosLen"
dgv2.Columns(6).HeaderText = "Base_lon"
dgv2.Columns(7).HeaderText = "Base_lat"
'------------
ReDim relP(4, 1000) '0=relPosN,1=relPosE,2=relPosD,3=relPosLength
'ReDim relPN(1000)
'ReDim relPE(1000)
'ReDim relPD(1000)
'ReDim relLen(1000)
ReDim sbPVT(100)
ReDim sbRELP(72)
ReDim bPVT(200)
ReDim bRELP(172)
'ReDim dgArry(60000, 48)
'dgv1.ColumnCount = 172
'dgv1.RowCount = 2000
ReDim parPVT(100)
ReDim parRELP(80)
'ReDim headPVTArry(47)
'ReDim headRELPArry(15)
End Sub
Delegate Sub DataDelegate(ByVal sdata As String)
Private Sub PrintData(ByVal sdata As String)
Dim slen As Integer = sdata.Length
Dim sd1, sd2, sd3 As String
Dim setN As Integer
setN = 515 '172*2文字+171デリミタ=515文字
sd1 = ""
sd2 = ""
sd3 = ""
' 'Debug.print("Org_sdata.length-" & CStr(sdata.Length) & "-Result_sdata-" & sdata)
' 'Debug.print("Org_sd2.length-" & CStr(sd2.Length) & "-Result_sd2-" & sd2)
'----半端データsd2がある場合は足してsdata 515Byte完成させる
If sd2 = "" Then
Else
sdata = sd2 + "-" + sdata
End If
''Debug.print("Add_sdata.length-" & CStr(sdata.Length) & "-Result_sdata-" & sdata)
'----バイナリーデータが515BYTEない場合は次のsdataを足して515byteにしてからSPLITしてPVT100ByteRELP72byteを得る
If sdata.Length < setN Then
sd2 = sdata
''Debug.print("short_sd1=" & sd1)
Exit Sub
ElseIf sdata.Length > setN Then
sd1 = sdata.Substring(0, setN) '[0]-[setN-1] setN個
'sd2 = sdata.Substring(setN, sdata.Length - 1 - setN) '[setN]-[sdata.Length-1]
If sdata.Length = setN Then
sd2 = ""
Else
sd2 = sdata.Replace(sd1, "")
End If
''Debug.print("Replaced_sd2.length-" & CStr(sd2.Length) & "-Replaced_sd2-" & sd2)
If sd2.Substring(0, 1) = "-" Then
sd2 = sd2.Substring(1, sd2.Length - 1)
End If
''Debug.print("Pre_sd1.length-" & CStr(sd1.Length) & "-Pre_sd1-" & sd1)
''Debug.print("Pre_sd2.length-" & CStr(sd2.Length) & "-Pre_sd2-" & sd2)
'
Dim topN As Integer = sd1.IndexOf("B5-62-01-07")
Dim topStr As String = sd1.Substring(topN, sd1.Length - topN)
Dim lastStr As String
If topN = 0 Then
sd3 = topStr
Else
lastStr = sd1.Substring(0, topN - 1)
sd3 = topStr + "-" + lastStr
End If
ElseIf sdata.Length = setN Then
sd3 = sdata
''Debug.print("Just515Result_sd3.length-" & CStr(sd3.Length) & "-Result_sd3-" & sd3)
End If
''Debug.print("Rcv_K=" & CStr(k) & "sdata_Sort_time=" & sw.ElapsedMilliseconds)
' If CheckBox4.Checked = True Then
'RichTextBox1.AppendText("Rcv_K=" & CStr(k) & "=sdata_Sort_time=" & sw.ElapsedMilliseconds & vbCrLf)
'End If
''Debug.print("Result_sd1.length-" & CStr(sd1.Length) & "-Result_sd1-" & sd1)
''Debug.print("Result_sd2.length-" & CStr(sd2.Length) & "-REsult_sd2-" & sd2)
''Debug.print("Result_sd3.length-" & CStr(sd3.Length) & "-Result_sd3-" & sd3)
'PVT to binStr
strPVT = sd3.Substring(0, 299)
sbPVT = strPVT.Split("-")
strRELP = sd3.Substring(300, 215)
sbRELP = strRELP.Split("-")
'dgv1.Rows.Add(sbRELP)
rn = rn + 1
'dgv1.Rows(rn).HeaderCell.Value = rn.ToString() '行ヘッダーにデータ番号rn
'dgv1.FirstDisplayedScrollingRowIndex = dgv1.Rows.Count - 1 '最新データの最下行を表示
NVC += 1 'NAV data set Counter
'Debug.print("NVC=" & CStr(NVC))
'--------PVTとRELPOSNED16進数string配列を2次元Byte配列に変換--------------------------------------------
For i = 0 To 99
bPVT(i) = Convert.ToByte(sbPVT(i), 16)
'Debug.print("bPVT(" & CStr(NVC) & "," & CStr(i) & ")=" & CStr(bPVT(i)) & ":" & sbPVT(i))
Next
For i = 0 To 71
bRELP(i) = Convert.ToByte(sbRELP(i), 16)
'Debug.print("bRELP(" & CStr(NVC) & "," & CStr(i) & ")=" & CStr(bRELP(i)) & ":" & sbRELP(i))
Next
'DGVデータ表示=================
Dim rowN As Integer
rowN = (NVC - 1) 'Data Printing 繰り返し行指定
'----------------変換 SUB-----------------------------------------------
PVT_Trans(NVC) ' PVT Binary を実数データに変換 parPVT(1-33) as integer
RELP_Trans(NVC) ' RELPOSNED Binary を実数データに変換 parRELP(1-15) as integer
'--------------ファイルWrite parPVTとparRELP dgv表示ではなく全データ保存----------------------------------------------------
If fopen = 1 Then
Dim fStr As String
fStr = CStr(NVC)
For i = 1 To 33 'parPVT(1-33) to fStr
fStr = fStr + "," + CStr(parPVT(i))
Next
For i = 1 To 15 'parRELP(1-15) to fStr
fStr = fStr + "," + CStr(parRELP(i))
Next
fStr = fStr + vbCrLf
file.Write(fStr)
End If
'-------------DGV1 サイズ決め-------------------------------
dgv1.ColumnCount = 60
'----Rows(0)=time sec
dgv1.Columns(0).HeaderText = "Sec"
dgv1.Columns(0).Width = 40
Dim tSec As Single = NVC * 0.125 ' Sampling time sec
'--PVTヘッダー
'For i = 0 To 32
' dgv1.Columns(i + 1).HeaderText = headPVTArry(i)
'Next
'1:iTow-------------------------------
dgv1.Columns(1).HeaderText = "iTow"
Dim iTow As Integer = parPVT(1)
dgv1.Columns(1).Width = 60
'2:Year---------------------------
dgv1.Columns(2).HeaderText = "Year"
Dim Year As Integer = parPVT(2)
'3:month---------------------------
dgv1.Columns(3).HeaderText = "month"
Dim month As Integer = parPVT(3)
'4:day---------------------------
dgv1.Columns(4).HeaderText = "day"
Dim day As Integer = parPVT(4)
'5:hour---------------------------
dgv1.Columns(5).HeaderText = "hour"
Dim hour As Integer = parPVT(5)
'6:min---------------------------
dgv1.Columns(6).HeaderText = "min"
Dim min As Integer = parPVT(6)
'7:sec---------------------------
dgv1.Columns(7).HeaderText = "sec"
Dim sec As Integer = parPVT(7)
'8:valid---------------------------
dgv1.Columns(8).HeaderText = "valid"
Dim valid As Integer = parPVT(8)
'9:tAcc---------------------------
dgv1.Columns(9).HeaderText = "tAcc"
Dim tAcc As Integer = parPVT(9)
'10:nano---------------------------
dgv1.Columns(10).HeaderText = "nano"
Dim nano As Integer = parPVT(10)
'11:fixType-------------------------------
dgv1.Columns(11).HeaderText = "fixType"
Dim fixType As Integer = parPVT(11)
'12:flags-------------------------------
dgv1.Columns(12).HeaderText = "flags"
Dim flags As Integer = parPVT(12)
'13:flags2-------------------------------
dgv1.Columns(13).HeaderText = "flags2"
Dim flags2 As Integer = parPVT(13)
'14:numSV---------------------------------
dgv1.Columns(14).HeaderText = "numSV"
Dim numSV As Integer = parPVT(14)
'15:lon-----------------------------------
dgv1.Columns(15).HeaderText = "lon"
Dim lon As Integer = parPVT(15)
'16:lat-----------------------------------
dgv1.Columns(16).HeaderText = "lat"
Dim lat As Integer = parPVT(16)
'17:height-----------------------------------
dgv1.Columns(17).HeaderText = "height"
Dim height As Integer = parPVT(17)
'18:hMSL-----------------------------------
dgv1.Columns(18).HeaderText = "hMSL"
Dim hMSL As Integer = parPVT(18)
'19:hAcc-----------------------------------
dgv1.Columns(19).HeaderText = "hAcc"
Dim hAcc As Integer = parPVT(19)
'20:vAcc---------------------------------
dgv1.Columns(20).HeaderText = "vAcc"
Dim vAcc As Integer = parPVT(20)
'21:velN---------------------------------
dgv1.Columns(21).HeaderText = "velN"
Dim velN As Integer = parPVT(21)
'22:velE---------------------------------
dgv1.Columns(22).HeaderText = "velE"
Dim velE As Integer = parPVT(22)
'23:velD------------------------------------
dgv1.Columns(23).HeaderText = "velD"
Dim velD As Integer = parPVT(23)
'24:gSpeed------------------------------------
dgv1.Columns(24).HeaderText = "gSpeed"
Dim gSpeed As Integer = parPVT(24)
'25:headMot------------------------------------
dgv1.Columns(25).HeaderText = "headMot"
Dim headMot As Integer = parPVT(25)
'26:sAcc------------------------------------
dgv1.Columns(26).HeaderText = "sAcc"
Dim sAcc As Integer = parPVT(26)
'27:headAcc------------------------------------
dgv1.Columns(27).HeaderText = "headAcc"
Dim headAcc As Integer = parPVT(27)
'28:pDDOP------------------------------------
dgv1.Columns(28).HeaderText = "pDOP"
Dim pDOP As Integer = parPVT(28)
'29:flags3------------------------------------
dgv1.Columns(29).HeaderText = "flags3"
Dim flags3 As Integer = parPVT(29)
'30:reserved1------------------------------------
dgv1.Columns(30).HeaderText = "reserved1"
Dim reserved1 As Integer = parPVT(30)
'31:headVeh------------------------------------
dgv1.Columns(31).HeaderText = "headVeh"
Dim headVeh As Integer = parPVT(31)
'32:magDec------------------------------------
dgv1.Columns(32).HeaderText = "magDec"
Dim magDec As Integer = parPVT(32)
'33:magAcc------------------------------------
dgv1.Columns(33).HeaderText = "magAcc"
Dim magAcc As Integer = parPVT(33)
'--RELPOSNED ヘッダー
'1:iTow
dgv1.Columns(34).HeaderText = "RELP_iTow"
Dim RELP_iTOW As Integer = parRELP(1)
dgv1.Columns(35).HeaderText = "relPosN"
Dim relPosN As Single = parRELP(2) + parRELP(8) * 0.01 '
relP(0, rn Mod 1000) = relPosN
'Debug.Print("relPosN=" & CStr(relPosN))
dgv1.Columns(36).HeaderText = "relPosE"
Dim relPosE As Single = parRELP(3) + parRELP(9) * 0.01
relP(1, rn Mod 1000) = relPosE
' Debug.Print("relPosE=" & CStr(relPosE))
dgv1.Columns(37).HeaderText = "relPosD"
Dim relPosD As Single = parRELP(4) + parRELP(10) * 0.01
relP(2, rn Mod 1000) = relPosD
'Debug.Print("relPosD=" & CStr(relPosD))
dgv1.Columns(38).HeaderText = "relPosLength"
Dim relPosLength As Single = parRELP(5) + parRELP(11) * 0.01
relP(3, rn Mod 1000) = relPosLength
dgv1.Columns(39).HeaderText = "relPosHeading"
Dim relPosHeading As Single = parRELP(6) * 0.00001
dgv1.Columns(40).HeaderText = "reserved2"
Dim reserved2 As Single = parRELP(7) '* 0.00001
dgv1.Columns(41).HeaderText = "relPosHPN"
Dim relPosHPN As Single = parRELP(8) '* 0.00001
dgv1.Columns(42).HeaderText = "relPosHPE"
Dim relPosHPE As Single = parRELP(9) '* 0.00001
dgv1.Columns(43).HeaderText = "relPosHPD"
Dim relPosHPD As Single = parRELP(10) '* 0.00001
dgv1.Columns(44).HeaderText = "relPosHPLength"
Dim relPosHPLength As Single = parRELP(11) '* 0.00001
dgv1.Columns(45).HeaderText = "accN"
Dim accN As Single = parRELP(12) * 0.01
dgv1.Columns(46).HeaderText = "accE"
Dim accE As Single = parRELP(13) * 0.01
dgv1.Columns(47).HeaderText = "accD"
Dim accD As Single = parRELP(14) * 0.01
dgv1.Columns(48).HeaderText = "accLength"
Dim accLength As Single = parRELP(15) * 0.01
dgv1.Columns(49).HeaderText = "accHeading"
Dim accHeading As Single = parRELP(16) * 0.00001
'Debug.print("parRELP(16)=" + CStr(parRELP(16)) + "accHeading=", CStr(accHeading))
dgv1.Columns(50).HeaderText = "reserved3"
Dim reserved3 As Single = parRELP(17)
'Debug.print("parRELP(17)=" + CStr(parRELP(17)) + "reserved3=", CStr(reserved3))
dgv1.Columns(51).HeaderText = "flags"
Dim rflags As Single = parRELP(18)
'Debug.print("parRELP(18)=" + CStr(parRELP(18)) + "flags=", CStr(flags))
'===================行追加と一括書き込み===============================
'PVT = 1 : iTow, 11: fixType, 14: numSV, 15: lon, 16: lat, 17: height, 19: hAcc , 20: vAcc, 21: velN, 22: velE, 23: velD
' RELPOSNED = 1 : iTow, 2: relPosN, 3: relPosE, 4: relPosD, 5: relPosLength, 6: relPosHeading,
'11:accN,12:accE,13:accD,14:accLength,15:accHeading
If CheckBox2.Checked = False Then
dgv1.Rows.Add(tSec, iTow, Year, month, day, hour, min, sec, valid, tAcc, nano, fixType, flags, flags2, numSV, lon, lat, height, hMSL, hAcc, vAcc, velN, velE, velD, gSpeed, headMot, sAcc, headAcc, pDOP, flags3, reserved1, headVeh, magDec, magAcc,
RELP_iTOW, relPosN, relPosE, relPosD, relPosLength, relPosHeading, reserved2, relPosHPN, relPosHPE, relPosHPD, relPosHPLength,
accN, accE, accD, accLength, accHeading, reserved3, rflags)
'------------dgv1 行ヘッダー番号 --------------------------------
dgv1.Rows(rowN).HeaderCell.Value = NVC.ToString() '行ヘッダーにデータ番号NVC
dgv1.RowHeadersWidth = 60
'-----Focus Row------------------------------------
If rowN > 5 Then
dgv1.FirstDisplayedScrollingRowIndex = rowN
End If
Else
TextBox1.Text = CStr(rn)
End If
End Sub
'OPENボタン押し
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'シリアル設定値読み込む
If SerialPort1.IsOpen = False Then
If dgv1.Rows(0).Cells(1).Value <> " " Then
Dim portName As String = "COM" + dgv1.Rows(0).Cells(1).Value 'dgv1からポート番号読み込み
SerialPort1.PortName = portName ' portName オープンするポート名を格納
Dim baudrate As String = dgv1.Rows(0).Cells(7).Value 'dgv1からバーレート読み込み
SerialPort1.BaudRate = baudrate 'baudrate ボーレートを格納
SerialPort1.Open()
Button1.Enabled = False
Button2.Enabled = True
End If
End If
If SerialPort2.IsOpen = False Then
If dgv1.Rows(0).Cells(3).Value <> " " Then
Dim portName As String = "COM" + dgv1.Rows(0).Cells(3).Value 'dgv1からポート番号読み込み
SerialPort2.PortName = portName ' portName オープンするポート名を格納
Dim baudrate As String = dgv1.Rows(0).Cells(7).Value 'dgv1からバーレート読み込み
SerialPort2.BaudRate = baudrate 'baudrate ボーレートを格納
SerialPort2.Open()
Button1.Enabled = False
Button2.Enabled = True
End If
End If
If SerialPort3.IsOpen = False Then
If dgv1.Rows(0).Cells(5).Value <> " " Then
Dim portName As String = "COM" + dgv1.Rows(0).Cells(5).Value 'dgv1からポート番号読み込み
SerialPort3.PortName = portName ' portName オープンするポート名を格納
Dim baudrate As String = dgv1.Rows(0).Cells(7).Value 'dgv1からバーレート読み込み
SerialPort3.BaudRate = baudrate 'baudrate ボーレートを格納
SerialPort3.Open()
Button1.Enabled = False
Button2.Enabled = True
End If
End If
'SerialPort2.PortName = "COM6"
'SerialPort2.Open()
'SerialPort3.PortName = "COM8"
'SerialPort3.Open()
'ポートオープン
' rn_start = 1
'Else
' TextBox1.Text = "*******Please Input COM No*******"
'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 = 172
dgv1.RowCount = 1
dgv1.Rows.Add("COM1", "5 ", "COM2", "6", "COM3", "8 ", "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 And RadioButton1.Checked = True Then
Try
'Port1
Dim arrByte1 As Byte() = New Byte(SerialPort1.BytesToRead - 1) {}
SerialPort1.Read(arrByte1, 0, arrByte1.GetLength(0)) 'Binary Receive
ReceivedData1 = BitConverter.ToString(arrByte1) '
''Port2
'Dim arrByte2 As Byte() = New Byte(SerialPort1.BytesToRead - 1) {}
'SerialPort1.Read(arrByte2, 0, arrByte2.GetLength(0)) 'Binary Receive
'ReceivedData2 = BitConverter.ToString(arrByte2) '
''Port3
'Dim arrByte3 As Byte() = New Byte(SerialPort1.BytesToRead - 1) {}
'SerialPort1.Read(arrByte3, 0, arrByte3.GetLength(0)) 'Binary Receive
'ReceivedData3 = BitConverter.ToString(arrByte3) '
'ReceivedData1 = SerialPort1.ReadLine 'データを受信します
'ReceivedData2 = SerialPort2.ReadLine
'ReceivedData3 = SerialPort3.ReadLine
'ReceivedDataTotal = ReceivedData1 '& "," & ReceivedData2 & "," & ReceivedData3
Catch ex As Exception
ReceivedData1 = ex.Message '例外処理を行います
End Try
'SerialPort1.DiscardInBuffer()
'Invokeメソッドにより実行されるメソッドへのデリゲートの宣言を行い、受信データを表示します
Dim adre As New DataDelegate(AddressOf PrintData)
Me.Invoke(adre, ReceivedData1)
SerialPort1.DiscardInBuffer()
End If
End Sub
Private Sub SerialPort2_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
If CheckBox1.Checked = True And RadioButton2.Checked = True Then
Try
'Port1
Dim arrByte2 As Byte() = New Byte(SerialPort2.BytesToRead - 1) {}
SerialPort2.Read(arrByte2, 0, arrByte2.GetLength(0)) 'Binary Receive
ReceivedData2 = BitConverter.ToString(arrByte2) '
Catch ex As Exception
ReceivedData2 = ex.Message '例外処理を行います
End Try
'SerialPort1.DiscardInBuffer()
'Invokeメソッドにより実行されるメソッドへのデリゲートの宣言を行い、受信データを表示します
Dim adre As New DataDelegate(AddressOf PrintData)
Me.Invoke(adre, ReceivedData2)
SerialPort2.DiscardInBuffer()
End If
End Sub 'SerialPort2
Private Sub SerialPort3_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
If CheckBox1.Checked = True And RadioButton3.Checked = True Then
Try
'Port1
Dim arrByte3 As Byte() = New Byte(SerialPort3.BytesToRead - 1) {}
SerialPort3.Read(arrByte3, 0, arrByte3.GetLength(0)) 'Binary Receive
ReceivedData3 = BitConverter.ToString(arrByte3) '
Catch ex As Exception
ReceivedData3 = ex.Message '例外処理を行います
End Try
'SerialPort1.DiscardInBuffer()
'Invokeメソッドにより実行されるメソッドへのデリゲートの宣言を行い、受信データを表示します
Dim adre As New DataDelegate(AddressOf PrintData)
Me.Invoke(adre, ReceivedData3)
SerialPort3.DiscardInBuffer()
End If
End Sub 'SerialPort2
'======================================================================================================
'=====================CHECKBOX1 On/OFF================================================================
'======================================================================================================
Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
Dim sum As Double = 0
Dim suma As Double = 0
Dim av(4) As Double
Dim ava As Double = 0
If CheckBox1.Checked = True And SerialPort1.IsOpen = True And rn > 2 Then
TextBox1.Text = "****Sampling****"
rn_start = rn
ElseIf CheckBox1.Checked = False And SerialPort1.IsOpen = True Then
TextBox1.Text = "****Paused****rn=" & CStr(rn)
'------------------Averaging--------------------------------
Dim i, j As Integer
dgv1.FirstDisplayedScrollingColumnIndex = 35
For j = 35 To 38 '桁
sum = 0
av(j - 35) = 0
For i = 1 To rn - 1 '行
sum = sum + CDbl(dgv1.Rows(i).Cells(j).Value)
'suma = suma + relP(j - 35, i)
Next i
av(j - 35) = sum / (rn - 1)
'ava = suma / (rn - 1)
dgv1.Rows(rn - 1).Cells(j).Value = av(j - 35)
'dgv2.Rows.Add(av, ava)
Next j
For j = 35 To 38 '桁
Dim sumd As Double = 0
Dim sd As Double = 0
Dim sigma3 As Double = 0
Dim avd As Double = CDbl(dgv1.Rows(rn).Cells(j).Value)
For i = 1 To rn - 1 '行
sumd = sumd + (CDbl(dgv1.Rows(i).Cells(j).Value) - avd) ^ 2
Next i
sd = (sumd / (rn - 1)) ^ 0.5
sigma3 = sd * 3
dgv1.Rows(rn).Cells(j).Value = sd * 2 '2sigma 95%
Next j
dgv2.Rows.Add(TextBox4.Text, radioNo, Format(av(0), "###.#"), Format(av(1), "###.#"), Format(av(2), "###.#"), Format(av(3), "###.#"))
'Dim crn As Integer = dgv2.CurrentRow.Index
'------------dgv2 copy------------------------------
'Dim lowestRow As Integer = dgv2.Rows.Count - 1
'dgv2.Rows(lowestRow).Cells(0).Value = radioNo
'For j = 0 To 3 '桁
' dgv2.Rows(lowestRow).Cells(j + 4).Value = Format(dgv1.Rows(rn - 1).Cells(j + 35).Value, "###.#")
'Next j
End If
End Sub
'========================--測定ポート選択 選択するとリセット=========================================================
Private Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton1.CheckedChanged
dgv1.CurrentCell = dgv1(0, dgv1.Rows.Count - 1) '最下行にカーソルを維持
dgv1.Rows.Clear()
rn = 0
dgv1.RowHeadersWidth = 60
dgv1.ColumnCount = 172
dgv1.RowCount = 1
dgv1.Rows.Add("COM1", "5 ", "COM2", "6", "COM3", "8 ", "BaudRate", "115200")
rn = 0
NVC = 0
If RadioButton1.Checked = True Then
radioNo = 1
End If
End Sub
Private Sub RadioButton2_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton2.CheckedChanged
dgv1.CurrentCell = dgv1(0, dgv1.Rows.Count - 1) '最下行にカーソルを維持
dgv1.Rows.Clear()
rn = 0
dgv1.RowHeadersWidth = 60
dgv1.ColumnCount = 172
dgv1.RowCount = 1
dgv1.Rows.Add("COM1", "5 ", "COM2", "6", "COM3", "8 ", "BaudRate", "115200")
rn = 0
NVC = 0
If RadioButton2.Checked = True Then
radioNo = 2
End If
End Sub
Private Sub RadioButton3_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton3.CheckedChanged
dgv1.CurrentCell = dgv1(0, dgv1.Rows.Count - 1) '最下行にカーソルを維持
dgv1.Rows.Clear()
rn = 0
dgv1.RowHeadersWidth = 60
dgv1.ColumnCount = 172
dgv1.RowCount = 1
dgv1.Rows.Add("COM1", "5 ", "COM2", "6", "COM3", "8 ", "BaudRate", "115200")
rn = 0
NVC = 0
If RadioButton3.Checked = True Then
radioNo = 3
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
'================================================================================================================
'==================================PVT RELPOSNED ===============================================================
'================================================================================================================
Private Sub PVT_Trans(ByVal NVC As Integer)
'----------------PVT Trans---------------------------------------
' headPVT = "iTOW,Year,month,day,hour,min,sec,valid,tAcc,nano,fixType,flags,flags2,numSV,lon,lat,height,hMSL,hAcc,vAcc,velN,velE,velD,gSpeed,headMot,sAcc,headAcc,pDOP,flags3,reserved1,headVeh,magDec,magAcc"
'Byte OFFSET=5 (header: B5,62,01,07,5C 5 Byte)
Dim off As Integer = 6
'1:iTOW 0-3
parPVT(1) = pvtI4(NVC, 0 + off)
'Debug.print("parPVT(1)=" & CStr(parPVT(1)))
'2:Year 4-5
parPVT(2) = pvtI2(NVC, 4 + off)
'Debug.print("parPVT(2)=" & CStr(parPVT(2)))
'3:month 6
parPVT(3) = CInt(bPVT(6 + off))
'Debug.print("parPVT(3)=" & CStr(parPVT(3)))
'4:day 7
parPVT(4) = CInt(bPVT(7 + off))
'Debug.print("parPVT(4)=" & CStr(parPVT(4)))
'5:hour 8
parPVT(5) = CInt(bPVT(8 + off))
'Debug.print("parPVT(5)=" & CStr(parPVT(5)))
'6:min 9
parPVT(6) = CInt(bPVT(9 + off))
'Debug.print("parPVT(6)=" & CStr(parPVT(6)))
'7:sec 10
parPVT(7) = CInt(bPVT(10 + off))
'Debug.print("parPVT(7)=" & CStr(parPVT(7)))
'8:valid 11
parPVT(8) = CInt(bPVT(11 + off))
'Debug.print("parPVT(8)=" & CStr(parPVT(8)))
'9:tAcc 12,13,14,15
parPVT(9) = pvtI4(NVC, 12 + off)
'Debug.print("parPVT(9)=" & CStr(parPVT(9)))
'10:nano 16
parPVT(10) = CInt(bPVT(16 + off))
'Debug.print("parPVT(10)=" & CStr(parPVT(10)))
'11:fixType 20
parPVT(11) = CInt(bPVT(20 + off))
'Debug.print("parPVT(11)=" & CStr(parPVT(11)))
'12:flags 21
parPVT(12) = CInt(bPVT(21 + off))
'Debug.print("parPVT(12)=" & CStr(parPVT(12)))
'13:flags2 22
parPVT(13) = CInt(bPVT(22 + off))
'Debug.print("parPVT(13)=" & CStr(parPVT(13)))
'14:numSV 23
parPVT(14) = CInt(bPVT(23 + off))
'Debug.print("parPVT(14)=" & CStr(parPVT(14)))
'15:lon'24,25,26,27
parPVT(15) = pvtI4(NVC, 24 + off)
'Debug.print("parPVT(15)=" & CStr(parPVT(15)))
'16:lat 28,29,30,31
parPVT(16) = pvtI4(NVC, 28 + off)
'Debug.print("parPVT(16)=" & CStr(parPVT(16)))
'17:height 32,33,34,35
parPVT(17) = pvtI4(NVC, 32 + off)
'Debug.print("parPVT(17)=" & CStr(parPVT(17)))
'18:hMSL 36,37,38,39
parPVT(18) = pvtI4(NVC, 36 + off)
'Debug.print("parPVT(18)=" & CStr(parPVT(18)))
'19:hAcc 40,41,42,43
parPVT(19) = pvtI4(NVC, 40 + off)
'Debug.print("parPVT(19)=" & CStr(parPVT(19)))
'20:vAcc 44,45,46,47
parPVT(20) = pvtI4(NVC, 44 + off)
'Debug.print("parPVT(20)=" & CStr(parPVT(20)))
'21:velN 48,49,50,51
parPVT(21) = pvtI4(NVC, 48 + off)
'Debug.print("parPVT(21)=" & CStr(parPVT(21)))
'22:velE 52,53,54,55
parPVT(22) = pvtI4(NVC, 52 + off)
'Debug.print("parPVT(22)=" & CStr(parPVT(22)))
'23:velD 56,57,58,59
parPVT(23) = pvtI4(NVC, 56 + off)
'Debug.print("parPVT(23)=" & CStr(parPVT(23)))
'24:gSpeed 60,61,62,63
parPVT(24) = pvtI4(NVC, 60 + off)
'Debug.print("parPVT(24)=" & CStr(parPVT(24)))
'25:headMot 64,65,66,67
parPVT(25) = pvtI4(NVC, 64 + off)
' 'Debug.print("parPVT(25)=" & CStr(parPVT(25)))
'26:sAcc 68,69,70,71
parPVT(26) = pvtI4(NVC, 68 + off)
'Debug.print("parPVT(26)=" & CStr(parPVT(26)))
'27:headAcc 72,73,74,75
'Debug.print("parPVT(27)=" & CStr(parPVT(27)))
'28:pDOP 76,77
parPVT(28) = pvtI2(NVC, 76 + off)
'Debug.print("parPVT(28)=" & CStr(parPVT(28)))
'29:flags3 78
parPVT(29) = CInt(bPVT(78 + off))
'Debug.print("parPVT(29)=" & CStr(parPVT(29)))
'30:reserved1 79,80,81,82
parPVT(30) = pvtI4(NVC, 79 + off)
'Debug.print("parPVT(30)=" & CStr(parPVT(30)))
'31:headVeh 83,84,85,86
parPVT(31) = pvtI4(NVC, 83 + off)
'Debug.print("parPVT(31)=" & CStr(parPVT(31)))
'32:magDec 88,89
parPVT(32) = pvtI2(NVC, 88 + off)
'Debug.print("parPVT(32)=" & CStr(parPVT(32)))
'33:magAcc 90,91
parPVT(33) = pvtI2(NVC, 90 + off)
'Debug.print("parPVT(33)=" & CStr(parPVT(33)))
End Sub
Private Sub RELP_Trans(ByVal NVC As Integer)
'----------------PVT Trans---------------------------------------
' headRELP = "R_iTOW,relPosN,relPosE,relPosD,relPosLength,relPosHeading,relPosHPN,relPosHPE,relPosHPD,relPosHPLength,accN,accE,accD,accLength,accHeading"
'Byte OFFSET=5 (header: B5,62,01,07,5C 5 Byte)
Dim off As Integer = 6
'---------1:iTOW 4-7
parRELP(1) = relpI4(NVC, 4 + off)
'Debug.print("parRELP(1)=" & CStr(parRELP(1)))
'---------2:relPosN 8-11
parRELP(2) = relpI4(NVC, 8 + off)
'Debug.print("parRELP(2)=" & CStr(parRELP(2)))
'---------3:relPosE 12-15
parRELP(3) = relpI4(NVC, 12 + off)
Debug.Print("parRELP(3)=" & CStr(parRELP(3)))
'---------4:relPosD 16-19
parRELP(4) = relpI4(NVC, 16 + off)
'Debug.print("parRELP(4)=" & CStr(parRELP(4)))
'---------5:relPosLength 20-23
parRELP(5) = relpI4(NVC, 20 + off)
'Debug.print("parRELP(5)=" & CStr(parRELP(5)))
'---------6:relPosHeading 24-27
parRELP(6) = relpI4(NVC, 24 + off)
'Debug.print("parRELP(6)=" & CStr(parRELP(6)))
'---------7:reserved 28-31
parRELP(7) = relpI4(NVC, 28 + off)
'Debug.print("parRELP(7)=" & CStr(parRELP(7)))
'---------8:relPosHPN 32
' parRELP(8) = CInt(bRELP(32 + off))
parRELP(8) = relpI1(NVC, 32 + off)
Debug.Print("parRELP(8)=" & CStr(parRELP(8)))
'---------9:relPosHPE 33
'parRELP(9) = CInt(bPVT(33 + off))
parRELP(9) = relpI1(NVC, 33 + off)
Debug.Print("parRELP(9)=" & CStr(parRELP(9)))
'---------10:relPosHPD 34
'parRELP(10) = CInt(bPVT(34 + off))
parRELP(10) = relpI1(NVC, 34 + off)
Debug.Print("parRELP(10)=" & CStr(parRELP(10)))
'--------11:relPosHPLength 35
parRELP(11) = CInt(bPVT(35 + off))
'Debug.print("parRELP(11)=" & CStr(parRELP(11)))
'--------12:accN 36-39
parRELP(12) = relpI4(NVC, 36 + off)
'Debug.print("parRELP(12)=" & CStr(parRELP(12)))
'--------13:accE 40-43
parRELP(13) = relpI4(NVC, 40 + off)
'Debug.print("parRELP(12)=" & CStr(parRELP(13)))
'--------14:accD 44-47
parRELP(14) = relpI4(NVC, 44 + off)
'Debug.print("parRELP(14)=" & CStr(parRELP(14)))
'--------15:accLength 48-51
parRELP(15) = relpI4(NVC, 48 + off)
'Debug.print("parRELP(15)=" & CStr(parRELP(15)))
'--------16:accHeading 52-55
parRELP(16) = relpI4(NVC, 52 + off)
'Debug.print("parRELP(16)=" & CStr(parRELP(16)))
'--------17:reserved3 56-59
parRELP(17) = relpI4(NVC, 56 + off)
'Debug.print("parRELP(17)=" & CStr(parRELP(17)))
'--------18:flags 60-63
parRELP(18) = relpI4(NVC, 60 + off)
'Debug.print("parRELP(18)=" & CStr(parRELP(18)))
End Sub
'-------------------------------PVT----------------------------------------------------
Private Function pvtI4(ByVal dnum As Integer, ByVal sN As Integer) As Integer
Dim i4 As Integer
' 'Debug.print("In_pvtI4:bPVT()=" & CStr(sN) & "::" & CStr(bPVT(sN)) & "," & CStr(bPVT(sN + 1)) & "," & CStr(bPVT(sN + 2)) & "," & CStr(bPVT(sN + 3)))
If (bPVT(sN + 3) And &H80) And &H80 Then '{//4番目のBYTEの最上位ビットたっていればマイナス
''Debug.print("-bPVT*65536=" & CStr(CLng((bPVT( sN + 2) * 65536))))
''Debug.print("-bPVT*256*256*256=" & CStr(CLng(255 - bPVT( sN + 3)) * 16777216))
i4 = -CLng(256 - (bPVT(sN)) + CLng(255 - bPVT(sN + 1)) * 256 + CLng(255 - bPVT(sN + 2)) * 65536 + CLng(255 - bPVT(sN + 3)) * 16777216)
Else
''Debug.print("+bPVT*65536=" & CStr(sN) & "::" & CStr(bPVT( sN + 2) * 65536))
''Debug.print("+bPVT*256*256*256=" & CStr(sN) & "::" & CStr(bPVT( sN + 3) * 256 * 256 * 256))
i4 = CLng(bPVT(sN) * 1 + CLng(bPVT(sN + 1)) * 256 + CLng(bPVT(sN + 2)) * 65536 + CLng(bPVT(sN + 3)) * 256 * 256 * 256)
End If
Return i4
End Function
Private Function pvtI2(ByVal dnum As Integer, ByVal sN As Integer) As Integer
Dim i2 As Integer
i2 = bPVT(sN + 1) * 1 + bPVT(sN) * 256
Return i2
End Function
'=====dgv1 CSV保存==================================================================
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Dim fnameH As String
'---------dgv1 保存ファイル準備------------------------------
fnameH = Format(Now, "yyyyMMdd_HHmmss")
fStr1 = "dgv1_" 'ComboBox9.SelectedItem.ToString()
fnameH = "C:\sokuryou\" & "dgv1_Rover" & CStr(radioNo) & "_" & fnameH & ".csv"
fstr2 = "FileOpen:" + fnameH
' RichTextBox1.AppendText(fStr2)
' RichTextBox1.ScrollToCaret()
Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding(“Shift_JIS”)
fileH = My.Computer.FileSystem.OpenTextFileWriter(fnameH, False, enc)
f1open = 1
TextBox2.Text = fnameH
'--------dgvから読んでファイル保存-----------------------
Dim SCPheadstr As String = ""
'---Header Str Save------------------
For i = 0 To dgv1.ColumnCount - 1
SCPheadstr += dgv1.Columns(i).HeaderText + ","
Next i
SCPheadstr += vbCrLf
fileH.Write(SCPheadstr)
'----------LoadNo,X,Y,Z save------------
Dim SCPstr As String = ""
For i = 0 To dgv1.RowCount - 1
'If CStr(dgv(dgN).Rows(i).Cells(0).Value) <> "" Then
'---Header Str Save------------------
For j = 0 To dgv1.ColumnCount - 1
SCPstr += CStr(dgv1.Rows(i).Cells(j).Value) + ","
'End If
Next j
SCPstr += vbCrLf
fileH.Write(SCPstr)
SCPstr = ""
Next i
fileH.Close()
End Sub
'=====dgv2 CSV保存==================================================================
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
Dim fnameH As String
Dim comNo As Integer
'---------dgv1 保存ファイル準備------------------------------
fnameH = Format(Now, "yyyyMMdd_HHmmss")
fStr1 = "dgv2_" 'ComboBox9.SelectedItem.ToString()
fnameH = "C:\sokuryou\" & "dgv2_Rover" & CStr(radioNo) & "_" & fnameH & ".csv"
fstr2 = "FileOpen:" + fnameH
' RichTextBox1.AppendText(fStr2)
' RichTextBox1.ScrollToCaret()
Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding(“Shift_JIS”)
fileH = My.Computer.FileSystem.OpenTextFileWriter(fnameH, False, enc)
f1open = 1
TextBox3.Text = fnameH
'--------dgvから読んでファイル保存-----------------------
Dim SCPheadstr As String = ""
'---Header Str Save------------------
For i = 0 To dgv2.ColumnCount - 1
SCPheadstr += dgv2.Columns(i).HeaderText + ","
Next i
SCPheadstr += vbCrLf
fileH.Write(SCPheadstr)
'----------LoadNo,X,Y,Z save------------
Dim SCPstr As String = ""
For i = 0 To dgv2.RowCount - 1
'If CStr(dgv(dgN).Rows(i).Cells(0).Value) <> "" Then
'---Header Str Save------------------
For j = 0 To dgv2.ColumnCount - 1
SCPstr += CStr(dgv2.Rows(i).Cells(j).Value) + ","
'End If
Next j
SCPstr += vbCrLf
fileH.Write(SCPstr)
SCPstr = ""
Next i
fileH.Close()
End Sub
'------------------RELPOSNED --------------------------------------------------
Private Function relpI4(ByVal dnum As Integer, ByVal sN As Integer) As Integer
Dim i4 As Integer
Debug.Print("In_relpI4:bRELP()=" & CStr(sN) & "::" & CStr(bRELP(sN)) & "," & CStr(bRELP(sN + 1)) & "," & CStr(bRELP(sN + 2)) & "," & CStr(bRELP(sN + 3)))
If (bRELP(sN + 3) And &H80) And &H80 Then '{//4番目のBYTEの最上位ビットたっていればマイナス
i4 = -CLng(256 - (bRELP(sN)) + CLng(255 - bRELP(sN + 1)) * 256 + CLng(255 - bRELP(sN + 2)) * 65536 + CLng(255 - bRELP(sN + 3)) * 16777216)
Else
i4 = CLng(bRELP(sN) * 1 + CLng(bRELP(sN + 1)) * 256 + CLng(bRELP(sN + 2)) * 65536 + CLng(bRELP(sN + 3)) * 256 * 256 * 256)
End If
Return i4
End Function
Private Function relpI2(ByVal dnum As Integer, ByVal sN As Integer) As Integer
Dim i2 As Integer
i2 = bRELP(sN + 1) * 1 + bRELP(sN) * 256
Return i2
End Function
Private Sub dgv2_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgv2.CellContentClick
End Sub
Private Function relpI1(ByVal dnum As Integer, ByVal sN As Integer) As Integer
Dim i1 As Integer
If bRELP(sN) And &H80 Then
i1 = 256 - Int(bRELP(sN))
Else
i1 = Int(bRELP(sN))
End If
Return i1
End Function
'=====================列or行削除Remove Columns of Current Cursor====
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
'-------------列消去-----------------------------
'------------行消去-------------------------------
Dim rX As Integer = dgv2.ColumnCount
Dim rY As Integer = dgv2.CurrentCell.RowIndex
If rY > 0 And rY < dgv2.Rows.Count - 1 Then
dgv2.Rows.RemoveAt(rY)
Label1.Text = "Deleted RowNo" & rY
'maxRowCol()
End If
End Sub
Private Sub maxRowCol()
Label1.Text = "DataRow_" & dgv2.RowCount & "行" & dgv2.ColumnCount & "列"
End Sub
Private Sub dgv2_MouseClick(sender As Object, e As MouseEventArgs) Handles dgv2.MouseClick
Label1.Text = "(" & dgv2.CurrentCell.ColumnIndex & "," & dgv2.CurrentCell.RowIndex & ")"
End Sub
End Class
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment