318 lines
11 KiB
VB.net
318 lines
11 KiB
VB.net
|
|
Imports System.Threading
|
|||
|
|
Imports Newtonsoft.Json
|
|||
|
|
|
|||
|
|
Public Class Form1
|
|||
|
|
Public G_Dictionary As Dictionary(Of String, (Boolean, String, Integer, String, Color))
|
|||
|
|
Public G_SerialPortli As Dictionary(Of String, CommuniNode)
|
|||
|
|
Public G_msgqueue As Queue(Of (String, Color, String))
|
|||
|
|
Public G_thread As Thread
|
|||
|
|
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
|||
|
|
'设置页面标题为项目名称+版本号
|
|||
|
|
Me.Text = Application.ProductName & " " & Application.ProductVersion
|
|||
|
|
|
|||
|
|
G_SerialPortli = New Dictionary(Of String, CommuniNode)()
|
|||
|
|
G_msgqueue = New Queue(Of (String, Color, String))
|
|||
|
|
loadSeting()
|
|||
|
|
Initgrid()
|
|||
|
|
G_thread = New Thread(AddressOf ThreadFun)
|
|||
|
|
G_thread.Start()
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed
|
|||
|
|
saveSeting()
|
|||
|
|
If Not IsNothing(G_thread) AndAlso G_thread.IsAlive Then
|
|||
|
|
G_thread.Abort()
|
|||
|
|
End If
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
'加载Seting
|
|||
|
|
Public Sub loadSeting()
|
|||
|
|
'刷新内存
|
|||
|
|
My.Settings.Reload()
|
|||
|
|
If String.IsNullOrEmpty(My.Settings.SerialPortSettings) Then
|
|||
|
|
G_Dictionary = New Dictionary(Of String, (Boolean, String, Integer, String, Color))
|
|||
|
|
Else
|
|||
|
|
G_Dictionary = JsonConvert.DeserializeObject(Of Dictionary(Of String, (Boolean, String, Integer, String, Color)))(My.Settings.SerialPortSettings)
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
End Sub
|
|||
|
|
Public Sub saveSeting()
|
|||
|
|
My.Settings.SerialPortSettings = JsonConvert.SerializeObject(G_Dictionary)
|
|||
|
|
End Sub
|
|||
|
|
Delegate Sub Deleg_ThreadFun(msg As (String, Color, String))
|
|||
|
|
|
|||
|
|
Private Sub ThreadFun()
|
|||
|
|
Dim msg As (String, Color, String)
|
|||
|
|
While True
|
|||
|
|
If G_msgqueue.Count > 0 Then
|
|||
|
|
msg = G_msgqueue.Dequeue()
|
|||
|
|
AddMsgToGrid(msg)
|
|||
|
|
End If
|
|||
|
|
Thread.Sleep(10)
|
|||
|
|
End While
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Public Sub AddMsgToGrid(msg As (String, Color, String))
|
|||
|
|
Dim ts1, ts2, ts3 As String
|
|||
|
|
Dim t1, t2, t3 As DateTime
|
|||
|
|
Dim tc1, tc2 As Integer
|
|||
|
|
Dim buf() As String
|
|||
|
|
If Grid1.InvokeRequired Then
|
|||
|
|
Dim d As New Deleg_ThreadFun(AddressOf AddMsgToGrid)
|
|||
|
|
Grid1.Invoke(d, msg)
|
|||
|
|
Else
|
|||
|
|
'从表格末尾开始遍历但是不遍历第0行
|
|||
|
|
For i As Integer = Grid1.Rows - 1 To 1 Step -1
|
|||
|
|
If i = Grid1.Rows - 1 Then
|
|||
|
|
ts2 = Grid1.Cell(i, 2).Text
|
|||
|
|
't2 = DateTime.Parse(ts2)
|
|||
|
|
DateTime.TryParseExact(ts2, "yyyy-MM-dd HH:mm:ss:fff",
|
|||
|
|
System.Globalization.CultureInfo.InvariantCulture,
|
|||
|
|
Globalization.DateTimeStyles.None, t2)
|
|||
|
|
End If
|
|||
|
|
If msg.Item1.Equals(Grid1.Cell(i, 5).Text) Then
|
|||
|
|
ts1 = Grid1.Cell(i, 2).Text
|
|||
|
|
't1 = DateTime.Parse(ts1)
|
|||
|
|
DateTime.TryParseExact(ts1, "yyyy-MM-dd HH:mm:ss:fff",
|
|||
|
|
System.Globalization.CultureInfo.InvariantCulture,
|
|||
|
|
Globalization.DateTimeStyles.None, t1)
|
|||
|
|
Exit For
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
Next
|
|||
|
|
|
|||
|
|
buf = msg.Item3.Split("_")
|
|||
|
|
ts3 = buf(0)
|
|||
|
|
DateTime.TryParseExact(ts3, "yyyy-MM-dd HH:mm:ss:fff",
|
|||
|
|
System.Globalization.CultureInfo.InvariantCulture,
|
|||
|
|
Globalization.DateTimeStyles.None, t3)
|
|||
|
|
If IsNothing(t1) Then
|
|||
|
|
tc1 = 0
|
|||
|
|
Else
|
|||
|
|
Try
|
|||
|
|
tc1 = (t3 - t1).TotalMilliseconds
|
|||
|
|
Catch ex As Exception
|
|||
|
|
tc1 = 65535
|
|||
|
|
End Try
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
If IsNothing(t2) Then
|
|||
|
|
tc2 = 0
|
|||
|
|
Else
|
|||
|
|
Try
|
|||
|
|
tc2 = (t3 - t2).TotalMilliseconds
|
|||
|
|
Catch ex As Exception
|
|||
|
|
tc2 = 65535
|
|||
|
|
End Try
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
Grid1.AddItem("")
|
|||
|
|
Grid1.Cell(Grid1.Rows - 1, 0).Text = Grid1.Rows - 1
|
|||
|
|
'Grid1.Cell(Grid1.Rows - 1, 1).Text = ts3
|
|||
|
|
|
|||
|
|
Grid1.Cell(Grid1.Rows - 1, 2).Text = ts3
|
|||
|
|
Grid1.Cell(Grid1.Rows - 1, 3).Text = tc1
|
|||
|
|
Grid1.Cell(Grid1.Rows - 1, 4).Text = tc2
|
|||
|
|
Grid1.Cell(Grid1.Rows - 1, 5).Text = msg.Item1
|
|||
|
|
Grid1.Cell(Grid1.Rows - 1, 6).Text = msg.Item3.Replace(ts3 & "_", "").Length
|
|||
|
|
Grid1.Cell(Grid1.Rows - 1, 7).Text = msg.Item3.Replace(ts3 & "_", "")
|
|||
|
|
Grid1.Cell(Grid1.Rows - 1, 8).Text = publicMode.StringToHexString(msg.Item3.Replace(ts3 & "_", ""))
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
Grid1.Range(Grid1.Rows - 1, 0, Grid1.Rows - 1, 8).WrapText = True
|
|||
|
|
Grid1.Range(Grid1.Rows - 1, 0, Grid1.Rows - 1, 8).ForeColor = msg.Item2
|
|||
|
|
Grid1.Cell(Grid1.Rows - 1, 0).SetFocus()
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
|
|||
|
|
Public Sub Initgrid()
|
|||
|
|
With Grid1
|
|||
|
|
.NewFile()
|
|||
|
|
.Cols = 9
|
|||
|
|
.Rows = 1
|
|||
|
|
.ExtendLastCol = True
|
|||
|
|
.DisplayRowNumber = True
|
|||
|
|
.Cell(0, 0).Text = "序号"
|
|||
|
|
.Cell(0, 1).Text = "选择"
|
|||
|
|
.Cell(0, 2).Text = "时间"
|
|||
|
|
.Cell(0, 3).Text = "同串口时间差"
|
|||
|
|
.Cell(0, 4).Text = "时间差"
|
|||
|
|
.Cell(0, 5).Text = "串口名称"
|
|||
|
|
.Cell(0, 6).Text = "包长"
|
|||
|
|
.Cell(0, 7).Text = "TEXT"
|
|||
|
|
.Cell(0, 8).Text = "HEX"
|
|||
|
|
.Column(0).Width = 50
|
|||
|
|
.Column(1).Width = 20
|
|||
|
|
.Column(1).CellType = FlexCell.CellTypeEnum.CheckBox
|
|||
|
|
.Column(2).Width = 150
|
|||
|
|
.Column(3).Width = 50
|
|||
|
|
.Column(4).Width = 50
|
|||
|
|
.Column(5).Width = 100
|
|||
|
|
.Column(6).Width = 50
|
|||
|
|
.Column(7).Width = 300
|
|||
|
|
.Column(8).Width = 300
|
|||
|
|
|
|||
|
|
.Column(6).Alignment = FlexCell.AlignmentEnum.CenterCenter
|
|||
|
|
.Column(2).Alignment = FlexCell.AlignmentEnum.CenterCenter
|
|||
|
|
.Column(3).Alignment = FlexCell.AlignmentEnum.CenterCenter
|
|||
|
|
.Column(4).Alignment = FlexCell.AlignmentEnum.CenterCenter
|
|||
|
|
.Column(5).Alignment = FlexCell.AlignmentEnum.CenterCenter
|
|||
|
|
.Column(6).Alignment = FlexCell.AlignmentEnum.CenterCenter
|
|||
|
|
.Column(7).Alignment = FlexCell.AlignmentEnum.CenterCenter
|
|||
|
|
.Column(8).Alignment = FlexCell.AlignmentEnum.CenterCenter
|
|||
|
|
|
|||
|
|
|
|||
|
|
.HighLightMode = FlexCell.HighLightModeEnum.Both
|
|||
|
|
|
|||
|
|
End With
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
Private Sub ToolStripButton2_Click(sender As Object, e As EventArgs) Handles ToolStripButton2.Click
|
|||
|
|
'创建设串口页面
|
|||
|
|
Dim form2 As New SetingSerialPort
|
|||
|
|
form2.G_Dictionary = G_Dictionary
|
|||
|
|
form2.ShowDialog()
|
|||
|
|
'判断是否确定关闭
|
|||
|
|
If form2.DialogResult = DialogResult.OK Then
|
|||
|
|
G_Dictionary = form2.G_Dictionary
|
|||
|
|
End If
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub ToolStripButton1_Click(sender As Object, e As EventArgs) Handles ToolStripButton1.Click
|
|||
|
|
If ToolStripButton1.Text.Equals("打开") Then
|
|||
|
|
ToolStripButton1.Text = "关闭"
|
|||
|
|
ToolStripButton2.Enabled = False
|
|||
|
|
Dim nCommuniNode As CommuniNode
|
|||
|
|
'遍历G_Dictionary
|
|||
|
|
For Each item In G_Dictionary
|
|||
|
|
If item.Value.Item1 Then
|
|||
|
|
|
|||
|
|
nCommuniNode = New CommuniNode(item.Value.Item2, item.Value.Item3, item.Value.Item4, item.Value.Item5, G_msgqueue)
|
|||
|
|
G_SerialPortli.Add(item.Value.Item4, nCommuniNode)
|
|||
|
|
nCommuniNode.SetSerialPortOpen(True)
|
|||
|
|
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
Next
|
|||
|
|
Button2.Text = "停止接收"
|
|||
|
|
Button2.BackColor = Color.Red
|
|||
|
|
SetReadFlag(True)
|
|||
|
|
|
|||
|
|
Else
|
|||
|
|
ToolStripButton1.Text = "打开"
|
|||
|
|
ToolStripButton2.Enabled = True
|
|||
|
|
For Each item In G_SerialPortli
|
|||
|
|
item.Value.SetSerialPortOpen(False)
|
|||
|
|
Next
|
|||
|
|
|
|||
|
|
Button2.Text = "开始接收"
|
|||
|
|
Button2.BackColor = Color.Green
|
|||
|
|
SetReadFlag(False)
|
|||
|
|
|
|||
|
|
G_SerialPortli.Clear()
|
|||
|
|
ComboBox1.Items.Clear()
|
|||
|
|
ComboBox1.Text = ""
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
|
|||
|
|
If IsNothing(G_SerialPortli) OrElse G_SerialPortli.Count = 0 Then Return
|
|||
|
|
For Each item In G_SerialPortli
|
|||
|
|
item.Value.SetShowHex(CheckBox1.Checked)
|
|||
|
|
Next
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub CheckBox2_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox2.CheckedChanged
|
|||
|
|
If IsNothing(G_SerialPortli) OrElse G_SerialPortli.Count = 0 Then Return
|
|||
|
|
For Each item In G_SerialPortli
|
|||
|
|
item.Value.SetSendHex(CheckBox2.Checked)
|
|||
|
|
Next
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub ComboBox1_DropDown(sender As Object, e As EventArgs) Handles ComboBox1.DropDown
|
|||
|
|
ComboBox1.Items.Clear()
|
|||
|
|
If IsNothing(G_SerialPortli) OrElse G_SerialPortli.Count = 0 Then Return
|
|||
|
|
For Each item In G_SerialPortli
|
|||
|
|
|
|||
|
|
ComboBox1.Items.Add(item.Value.G_aliasname)
|
|||
|
|
Next
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
|
|||
|
|
If IsNothing(G_SerialPortli) OrElse G_SerialPortli.Count = 0 Then Return
|
|||
|
|
For Each item In G_SerialPortli
|
|||
|
|
If ComboBox1.Text.Equals(item.Value.G_aliasname) Then
|
|||
|
|
item.Value.SendData(TextBox1.Text.Trim)
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
Next
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
|
|||
|
|
Private Sub ToolStripButton3_Click(sender As Object, e As EventArgs) Handles ToolStripButton3.Click
|
|||
|
|
Grid1.Rows = 1
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
|
|||
|
|
If Button2.Text.Equals("停止接收") Then
|
|||
|
|
Button2.Text = "开始接收"
|
|||
|
|
Button2.BackColor = Color.Green
|
|||
|
|
SetReadFlag(False)
|
|||
|
|
Else
|
|||
|
|
Button2.Text = "停止接收"
|
|||
|
|
Button2.BackColor = Color.Red
|
|||
|
|
SetReadFlag(True)
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Public Sub SetReadFlag(ByVal flag As Boolean)
|
|||
|
|
If IsNothing(G_SerialPortli) OrElse G_SerialPortli.Count = 0 Then Return
|
|||
|
|
For Each item In G_SerialPortli
|
|||
|
|
item.Value.SetReadFlag(flag)
|
|||
|
|
Next
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub CheckBox3_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox3.CheckedChanged, CheckBox9.CheckedChanged, CheckBox8.CheckedChanged, CheckBox7.CheckedChanged, CheckBox6.CheckedChanged, CheckBox5.CheckedChanged, CheckBox4.CheckedChanged
|
|||
|
|
Dim chBox As CheckBox = sender
|
|||
|
|
'判断是否选中
|
|||
|
|
'取到tag
|
|||
|
|
Dim tag As Integer = CInt(chBox.Tag)
|
|||
|
|
If chBox.Checked Then
|
|||
|
|
Grid1.Column(tag).Visible = False
|
|||
|
|
Else
|
|||
|
|
|
|||
|
|
Grid1.Column(tag).Visible = True
|
|||
|
|
End If
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub Grid1_Click(Sender As Object, e As EventArgs) Handles Grid1.Click
|
|||
|
|
'获取选中单元格
|
|||
|
|
Dim C_x, C_y As Integer
|
|||
|
|
C_x = Grid1.ActiveCell.Row
|
|||
|
|
C_y = Grid1.ActiveCell.Col
|
|||
|
|
'判断行》0
|
|||
|
|
If C_x > 0 Then
|
|||
|
|
'获取行号设置到Xlabel
|
|||
|
|
Xlabel.Text = "RowID:" & Grid1.Cell(C_x, 0).Text
|
|||
|
|
Ylabel.Text = "ColumnName:" & Grid1.Cell(0, C_y).Text
|
|||
|
|
TextBox2.Text = Grid1.Cell(C_x, C_y).Text
|
|||
|
|
End If
|
|||
|
|
End Sub
|
|||
|
|
End Class
|