2194 lines
89 KiB
VB.net
2194 lines
89 KiB
VB.net
|
|
Imports System.IO
|
|||
|
|
Imports System.IO.Ports
|
|||
|
|
Imports _485_BurningTool.BLV_Bootloader
|
|||
|
|
Imports _485_BurningTool.CommunicationFlow
|
|||
|
|
Imports _485_BurningTool.DataProcessing
|
|||
|
|
Imports _485_BurningTool.RuningLog
|
|||
|
|
Imports Newtonsoft.Json
|
|||
|
|
|
|||
|
|
|
|||
|
|
Public Class Form1
|
|||
|
|
|
|||
|
|
Private m_CommunicationFlow As CommunicationProtocolEntity
|
|||
|
|
Dim m_Applicationconfig As Dictionary(Of String, String)
|
|||
|
|
|
|||
|
|
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
|||
|
|
|
|||
|
|
Text = $"{Application.ProductName}_V{Application.ProductVersion}"
|
|||
|
|
DataGridView1.ColumnHeadersDefaultCellStyle.Font = New Font("宋体", 12, FontStyle.Bold)
|
|||
|
|
|
|||
|
|
|
|||
|
|
Cmb_CommunicationMode_GetProtocolList()
|
|||
|
|
Cmb_CommunicationProtocol_GetProtocolList()
|
|||
|
|
CreateCommunicationFlow()
|
|||
|
|
|
|||
|
|
|
|||
|
|
LoadNetworkSettings()
|
|||
|
|
LoadSettings()
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
'加载网络设置
|
|||
|
|
Public Sub LoadNetworkSettings()
|
|||
|
|
CboLocalIp.Items.Clear()
|
|||
|
|
CboLocalIp.Items.AddRange(GetLocalIp().ToArray)
|
|||
|
|
CboLocalIp.SelectedIndex = 0
|
|||
|
|
NudLocalPort.Value = 5580
|
|||
|
|
NudRemotePort.Value = 3341
|
|||
|
|
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
|
|||
|
|
'判断键值对存不存该键值
|
|||
|
|
''' <summary>
|
|||
|
|
'''
|
|||
|
|
''' </summary>
|
|||
|
|
''' <param name="key"></param>
|
|||
|
|
''' <param name="mode">1获取 2设置</param>
|
|||
|
|
''' <returns></returns>
|
|||
|
|
Private Function m_ApplicationconfigContainsKey(key As String, Optional val As String = Nothing, Optional mode As Integer = 1) As String
|
|||
|
|
If m_Applicationconfig.ContainsKey(key) Then
|
|||
|
|
If mode = 1 Then
|
|||
|
|
Return m_Applicationconfig(key)
|
|||
|
|
ElseIf mode = 2 Then
|
|||
|
|
m_Applicationconfig(key) = val
|
|||
|
|
End If
|
|||
|
|
Else
|
|||
|
|
If mode = 1 Then
|
|||
|
|
Return Nothing
|
|||
|
|
Else
|
|||
|
|
m_Applicationconfig.Add(key, val)
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
End Function
|
|||
|
|
|
|||
|
|
Private Sub SaveSettings()
|
|||
|
|
|
|||
|
|
|
|||
|
|
m_ApplicationconfigContainsKey("Cbo_Port", Cbo_Port.SelectedIndex, 2)
|
|||
|
|
m_ApplicationconfigContainsKey("cbo_Baud", Cbo_Baud.SelectedIndex, 2)
|
|||
|
|
My.Settings.m_Applicationconfig = JsonConvert.SerializeObject(m_Applicationconfig) '
|
|||
|
|
My.Settings.BootBaud = CInt(Text_BootBaud.Text)
|
|||
|
|
My.Settings.UpBaud = CInt(c_UpBaud.Text)
|
|||
|
|
My.Settings.ProtocolName = Cmb_CommunicationProtocol.Text
|
|||
|
|
My.Settings.HexFilePath = Tb_HexFilePath.Text
|
|||
|
|
My.Settings.Save()
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
'创建通信对象
|
|||
|
|
Private Sub CreateCommunicationFlow()
|
|||
|
|
If m_CommunicationFlow Is Nothing Then
|
|||
|
|
m_CommunicationFlow = New CommunicationProtocolEntity()
|
|||
|
|
End If
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
'获取协议列表
|
|||
|
|
Private Sub Cmb_CommunicationMode_GetProtocolList()
|
|||
|
|
Cmb_CommunicationMode.Items.Clear()
|
|||
|
|
Dim protocolList As List(Of String) = GetProtocolList(GetType(CommunicationType))
|
|||
|
|
Cmb_CommunicationMode.Items.AddRange(protocolList.ToArray())
|
|||
|
|
'If Cmb_CommunicationMode.Items.Count > 0 Then
|
|||
|
|
' Cmb_CommunicationMode.SelectedIndex = 0
|
|||
|
|
'End If
|
|||
|
|
End Sub
|
|||
|
|
'获取协议列表
|
|||
|
|
Private Sub Cmb_CommunicationProtocol_GetProtocolList()
|
|||
|
|
Cmb_CommunicationProtocol.Items.Clear()
|
|||
|
|
Dim protocolList As List(Of String) = GetProtocolList(GetType(ProtocolEnum))
|
|||
|
|
Cmb_CommunicationProtocol.Items.AddRange(protocolList.ToArray())
|
|||
|
|
'If Cmb_CommunicationProtocol.Items.Count > 0 Then
|
|||
|
|
' Cmb_CommunicationProtocol.SelectedIndex = 0
|
|||
|
|
'End If
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
'获取枚举描述
|
|||
|
|
Private Function GetProtocolList(enumValue As Type) As List(Of String)
|
|||
|
|
Dim protocolList As New List(Of String)
|
|||
|
|
|
|||
|
|
Dim enumValues() As Integer = CType([Enum].GetValues(enumValue), Integer())
|
|||
|
|
Dim minValue As Integer = enumValues.Min()
|
|||
|
|
Dim maxValue As Integer = enumValues.Max()
|
|||
|
|
Dim index As Integer
|
|||
|
|
|
|||
|
|
For i = minValue To maxValue - 1
|
|||
|
|
index = i
|
|||
|
|
protocolList.Add($"{i.ToString}|{GetEnumDescription([Enum].Parse(enumValue, index))}")
|
|||
|
|
Next
|
|||
|
|
Return protocolList
|
|||
|
|
End Function
|
|||
|
|
|
|||
|
|
Private Function LoadSettings() As Boolean
|
|||
|
|
Try
|
|||
|
|
My.Settings.Reload()
|
|||
|
|
m_Applicationconfig = JsonConvert.DeserializeObject(Of Dictionary(Of String, String))(My.Settings.m_Applicationconfig)
|
|||
|
|
Catch ex As Exception
|
|||
|
|
Return False
|
|||
|
|
End Try
|
|||
|
|
Dim Portindex As Integer = 0
|
|||
|
|
Dim Baudindex As Integer = 0
|
|||
|
|
Dim BootBaud As Integer = My.Settings.BootBaud
|
|||
|
|
Dim UpBaud As Integer = My.Settings.UpBaud
|
|||
|
|
If Not IsNothing(m_Applicationconfig) Then
|
|||
|
|
Try
|
|||
|
|
Integer.TryParse(m_Applicationconfig("Cbo_Port"), Portindex)
|
|||
|
|
Integer.TryParse(m_Applicationconfig("cbo_Baud"), Baudindex)
|
|||
|
|
|
|||
|
|
Catch ex As Exception
|
|||
|
|
|
|||
|
|
End Try
|
|||
|
|
Else
|
|||
|
|
m_Applicationconfig = New Dictionary(Of String, String)
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
Cbo_Port_DropDown(Nothing, Nothing)
|
|||
|
|
'CCbo_Baud_DropDown(Nothing, Nothing)
|
|||
|
|
If Portindex < 0 Then Portindex = 0
|
|||
|
|
If Portindex < Cbo_Port.Items.Count Then
|
|||
|
|
'Cbo_Port.SelectedIndex = Portindex
|
|||
|
|
Cbo_Port.Text = Cbo_Port.Items(Portindex)
|
|||
|
|
End If
|
|||
|
|
Text_BootBaud.Text = BootBaud
|
|||
|
|
c_UpBaud.Text = UpBaud
|
|||
|
|
Cbo_Baud.Text = Cbo_Baud.Items(Baudindex)
|
|||
|
|
If Not String.IsNullOrEmpty(My.Settings.HexFilePath) Then
|
|||
|
|
Tb_HexFilePath.Text = My.Settings.HexFilePath
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
Cmb_CommunicationProtocol.Text = My.Settings.ProtocolName
|
|||
|
|
Cmb_CommunicationProtocol_SelectedIndexChanged(Nothing, Nothing)
|
|||
|
|
Return True
|
|||
|
|
End Function
|
|||
|
|
|
|||
|
|
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
|
|||
|
|
' LoadSettings()
|
|||
|
|
SaveSettings()
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub ToolStripButton1_Click(sender As Object, e As EventArgs)
|
|||
|
|
RText_OutputText.Clear()
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub RText_OutputText_TextChanged(sender As Object, e As EventArgs) Handles RText_OutputText.TextChanged
|
|||
|
|
If RText_OutputText.Lines.Length > 10000 Then
|
|||
|
|
Dim lines() As String = RText_OutputText.Lines
|
|||
|
|
Dim newLines(lines.Length - 1000) As String
|
|||
|
|
Array.Copy(lines, 1000, newLines, 0, newLines.Length)
|
|||
|
|
End If
|
|||
|
|
RText_OutputText.ScrollToCaret()
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub Btn_Search_Click(sender As Object, e As EventArgs)
|
|||
|
|
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub Cbo_Port_DropDown(sender As Object, e As EventArgs) Handles Cbo_Port.DropDown
|
|||
|
|
Cbo_Port.Items.Clear()
|
|||
|
|
Cbo_Port.Items.AddRange(SerialPort.GetPortNames())
|
|||
|
|
|
|||
|
|
End Sub
|
|||
|
|
Public IsUpgradeAllSel As Boolean = False
|
|||
|
|
Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
|
|||
|
|
Try
|
|||
|
|
|
|||
|
|
|
|||
|
|
If e.ColumnIndex = 1 Then
|
|||
|
|
'Console.WriteLine(DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).EditedFormattedValue)
|
|||
|
|
'Console.WriteLine(DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value)
|
|||
|
|
If DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = 1 Then
|
|||
|
|
DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = 0
|
|||
|
|
IsUpgradeAllSel = True
|
|||
|
|
Chk_UpgradeAllSel.Checked = False
|
|||
|
|
IsUpgradeAllSel = False
|
|||
|
|
Else
|
|||
|
|
DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = 1
|
|||
|
|
For i = 0 To DataGridView1.Rows.Count - 1
|
|||
|
|
If DataGridView1.Rows(i).Cells(1).Value = 0 Then
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
Next
|
|||
|
|
IsUpgradeAllSel = True
|
|||
|
|
Chk_UpgradeAllSel.Checked = True
|
|||
|
|
IsUpgradeAllSel = False
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
Catch ex As Exception
|
|||
|
|
|
|||
|
|
End Try
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
|
|||
|
|
Private Sub Btn_OpenPort_Click(sender As Object, e As EventArgs) Handles Btn_OpenPort.Click
|
|||
|
|
If Btn_OpenPort.Text = "关闭连接" Then
|
|||
|
|
Btn_OpenPort.Text = "打开连接"
|
|||
|
|
Btn_OpenPort.BackColor = Color.Transparent
|
|||
|
|
Cbo_Port.Enabled = True
|
|||
|
|
Cbo_Baud.Enabled = True
|
|||
|
|
m_CommunicationFlow.m_Transmitter.CloseTransmitter()
|
|||
|
|
Else
|
|||
|
|
|
|||
|
|
Cbo_Port.Enabled = False
|
|||
|
|
Cbo_Baud.Enabled = False
|
|||
|
|
If IsNothing(m_CommunicationFlow.m_Transmitter) Then
|
|||
|
|
Tab_SerialSettings_SelectedIndexChanged(Nothing, Nothing)
|
|||
|
|
End If
|
|||
|
|
m_CommunicationFlow.RefreshTransmitter()
|
|||
|
|
Btn_OpenPort.Text = "关闭连接"
|
|||
|
|
Btn_OpenPort.BackColor = Color.Red
|
|||
|
|
Select Case Tab_SerialSettings.SelectedIndex
|
|||
|
|
Case 0
|
|||
|
|
m_CommunicationFlow.m_Transmitter.SetTransmitterParameter(Cbo_Port.Text, CInt(Cbo_Baud.Text))
|
|||
|
|
Case 1
|
|||
|
|
m_CommunicationFlow.m_Transmitter.SetTransmitterParameter(CboLocalIp.Text, NudLocalPort.Value, CboLongIP.Text, NudRemotePort.Value)
|
|||
|
|
End Select
|
|||
|
|
m_CommunicationFlow.m_Transmitter.OpenTransmitter()
|
|||
|
|
If m_CommunicationFlow.m_Transmitter.IsTransmitter AndAlso m_CommunicationFlow.m_Transmitter.GetTransmitterStatus Then
|
|||
|
|
Else
|
|||
|
|
MsgBox("创建连接失败!")
|
|||
|
|
Btn_OpenPort_Click(Nothing, Nothing)
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub Cbo_Port_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Cbo_Port.SelectedIndexChanged
|
|||
|
|
'判断通信对象是否实例化
|
|||
|
|
'If IsNothing(m_CommunicationFlow.m_Transmitter) Then
|
|||
|
|
' Tab_SerialSettings_SelectedIndexChanged(Nothing, Nothing)
|
|||
|
|
'End If
|
|||
|
|
'If String.IsNullOrEmpty(Cbo_Port.Text) Then
|
|||
|
|
' MsgBox("选择未知串口")
|
|||
|
|
' Return
|
|||
|
|
'End If
|
|||
|
|
'm_CommunicationFlow.m_Transmitter.SetTransmitterParameter(Cbo_Port.Text)
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub Cmb_CommunicationProtocol_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Cmb_CommunicationProtocol.SelectedIndexChanged
|
|||
|
|
'If m_CommunicationFlow.m_CommunicationTypeIndex = CommunicationType.None Then
|
|||
|
|
' MsgBox("请先选择通信器通信方式!")
|
|||
|
|
' Return
|
|||
|
|
'End If
|
|||
|
|
If String.IsNullOrEmpty(Cmb_CommunicationProtocol.Text) Then Return
|
|||
|
|
Dim strbuuf() As String = Cmb_CommunicationProtocol.Text.Split("|")
|
|||
|
|
m_CommunicationFlow.ChangeProtocol(strbuuf(1))
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub Btn_Search_Click_1(sender As Object, e As EventArgs) Handles Btn_Search.Click
|
|||
|
|
If Btn_Search.Text = "停止搜索" Then
|
|||
|
|
If Not IsNothing(m_CommunicationFlow.m_Receiver) Then
|
|||
|
|
Dim mReceiver As BLV_Bootloader = m_CommunicationFlow.m_Receiver
|
|||
|
|
m_CommunicationFlow.m_Receiver.SetSearchEquipmentProcessSwitch(False)
|
|||
|
|
m_CommunicationFlow.SetThreadFlag(False)
|
|||
|
|
m_CommunicationFlow.m_Transmitter.ClearReadData()
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
If IsNothing(sender) Then Return
|
|||
|
|
Btn_Search.Text = "搜索"
|
|||
|
|
OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("停止搜索设备!", Color.Black), 1)
|
|||
|
|
|
|||
|
|
Else
|
|||
|
|
Btn_Search.Text = "停止搜索"
|
|||
|
|
|
|||
|
|
If IsNothing(m_CommunicationFlow.m_Transmitter) OrElse m_CommunicationFlow.m_Transmitter.IsTransmitter = False Then
|
|||
|
|
MsgBox("发送器未打开,请先打开发送器!")
|
|||
|
|
Btn_Search.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If IsNothing(m_CommunicationFlow.m_Receiver) Then
|
|||
|
|
MsgBox("请先选择通信协议")
|
|||
|
|
Btn_Search.PerformClick()
|
|||
|
|
Return
|
|||
|
|
Else
|
|||
|
|
Dim BootTimeout, Myaddr, startaddr, stopaddr, EffTimeTime, vsendTimeout, UpBaud As Integer
|
|||
|
|
If Not GetinputTextToint(txt_BootTimeout.Text, BootTimeout) Then
|
|||
|
|
MsgBox("未输入正确的超时时间!")
|
|||
|
|
Btn_Search.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If Not GetinputTextToint(EffTime.Text, EffTimeTime) Then
|
|||
|
|
MsgBox("未输入正确的有效时间!")
|
|||
|
|
Btn_Search.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
'If Not Integer.TryParse(Txt_Myaddr.Text, Myaddr) Then
|
|||
|
|
' MsgBox("未输入正确的本机地址!")
|
|||
|
|
' Btn_Search.PerformClick()
|
|||
|
|
' Return
|
|||
|
|
'End If
|
|||
|
|
'If Not Integer.TryParse(Txt_startaddr.Text, startaddr) OrElse Not Integer.TryParse(Txt_stopaddr.Text, startaddr) Then
|
|||
|
|
' MsgBox("未输入正确的起始地址或结束地址!")
|
|||
|
|
' Btn_Search.PerformClick()
|
|||
|
|
' Return
|
|||
|
|
'End If
|
|||
|
|
If Not Integer.TryParse(Sendtimeout.Text, vsendTimeout) Then
|
|||
|
|
MsgBox("未输入正确的超时时间!")
|
|||
|
|
Btn_Search.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
DataGridView1.Rows.Clear()
|
|||
|
|
|
|||
|
|
'判断协议类对象是否是实例化
|
|||
|
|
If m_CommunicationFlow.IsCreateProtocol Then
|
|||
|
|
|
|||
|
|
OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("开始搜索设备!", Color.Black), 1)
|
|||
|
|
Dim li As List(Of (number As Integer, Cmdconfig)) = New List(Of (number As Integer, Cmdconfig))
|
|||
|
|
|
|||
|
|
Dim d_Cmdconfig As Cmdconfig = New Cmdconfig({CmdType.SearchCommand, 1, 0, 10, vsendTimeout})
|
|||
|
|
|
|||
|
|
|
|||
|
|
'Integer.TryParse(txt_BootTimeout.Text, BootTimeout)
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(BootTimeout)
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(EffTimeTime)
|
|||
|
|
d_Cmdconfig.SetProtocol(m_CommunicationFlow.m_Receiver)
|
|||
|
|
d_Cmdconfig.setCmdSendcontinueTime(60)
|
|||
|
|
li.Add((CmdType.SearchCommand, d_Cmdconfig))
|
|||
|
|
m_CommunicationFlow.m_Transmitter.ClearSendData()
|
|||
|
|
'm_CommunicationFlow.m_Receiver.MainProcess(WorkflowType.SearchEquipment, li, 60, DataGridView1, RText_OutputText, CInt(Txt_Myaddr.Text), CInt(Txt_startaddr.Text), CInt(Txt_stopaddr.Text), CInt(Cbo_Baud.Text), Btn_Search)
|
|||
|
|
|
|||
|
|
If mtest(CmdType.SearchCommand, WorkflowType.SearchEquipment, li, Btn_Search) Then
|
|||
|
|
|
|||
|
|
Else
|
|||
|
|
OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("参数异常,搜索结束!", Color.Red), 1)
|
|||
|
|
'Btn_Search_Click_1(Nothing, Nothing)
|
|||
|
|
End If
|
|||
|
|
Else
|
|||
|
|
MsgBox("请先选择通信协议")
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
End If
|
|||
|
|
' OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("结束搜索设备!", Color.Black), 1)
|
|||
|
|
'Btn_Search_Click_1(Nothing, Nothing)
|
|||
|
|
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Public Function mtest(gCmdType As Integer, gWorkflowType As Integer, li As List(Of (number As Integer, Cmdconfig)), btn As Button, Optional addtypeli As List(Of (Integer, Integer)) = Nothing) As Boolean
|
|||
|
|
Dim Parameterlist As Parameterlist = CreateParameterlist(gCmdType, li, gWorkflowType, btn, 0)
|
|||
|
|
If IsNothing(Parameterlist) Then Return False
|
|||
|
|
'Parameterlist.CmdSendcontinueTime = 60
|
|||
|
|
RText_OutputText.Clear()
|
|||
|
|
Parameterlist.addtypeli = addtypeli
|
|||
|
|
Try
|
|||
|
|
|
|||
|
|
m_CommunicationFlow.SetThreadParameter(Parameterlist)
|
|||
|
|
Catch ex As Exception
|
|||
|
|
Console.WriteLine(ex.Message)
|
|||
|
|
Return False
|
|||
|
|
End Try
|
|||
|
|
|
|||
|
|
Return True
|
|||
|
|
End Function
|
|||
|
|
'创建Parameterlist对象
|
|||
|
|
''' <summary>
|
|||
|
|
'''
|
|||
|
|
''' </summary>
|
|||
|
|
''' <param name="CurrentStep">第一个流程节点</param>
|
|||
|
|
''' <param name="li">流程列表</param>
|
|||
|
|
''' <param name="Action">功能类型</param>
|
|||
|
|
''' <param name="btn">触发按钮</param>
|
|||
|
|
''' <param name="NextAction">运行状态</param>
|
|||
|
|
''' <returns></returns>
|
|||
|
|
Public Function CreateParameterlist(CurrentStep As Integer, li As List(Of (number As Integer, Cmdconfig)), Action As Integer, btn As Button, NextAction As Integer) As Parameterlist
|
|||
|
|
Dim Parameterlist As New Parameterlist
|
|||
|
|
Dim BootTimeout, NTimeOut, Myaddr, startaddr, stopaddr, EffTimeTime, bootbaud, Appbaud, UpBaud, cDevNumber, DeviceType, TransnDuion, Throughport As Integer
|
|||
|
|
cDevNumber = 1
|
|||
|
|
If Not GetinputTextToint(txt_BootTimeout.Text, BootTimeout) Then
|
|||
|
|
MsgBox("未输入正确的超时时间!")
|
|||
|
|
btn.PerformClick()
|
|||
|
|
Return Nothing
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
If Not GetinputTextToint(EffTime.Text, EffTimeTime) Then
|
|||
|
|
MsgBox("未输入正确的有效时间!")
|
|||
|
|
btn.PerformClick()
|
|||
|
|
Return Nothing
|
|||
|
|
End If
|
|||
|
|
If Not GetinputTextToint(Txt_Myaddr.Text, Myaddr) Then
|
|||
|
|
MsgBox("未输入正确的本机地址!")
|
|||
|
|
btn.PerformClick()
|
|||
|
|
Return Nothing
|
|||
|
|
End If
|
|||
|
|
If Not GetinputTextToint(Txt_startaddr.Text, startaddr) Then
|
|||
|
|
MsgBox("未输入正确的起始地址或结束地址!")
|
|||
|
|
btn.PerformClick()
|
|||
|
|
Return Nothing
|
|||
|
|
End If
|
|||
|
|
If Not GetinputTextToint(Txt_stopaddr.Text, stopaddr) Then
|
|||
|
|
MsgBox("未输入正确的发送范围!")
|
|||
|
|
btn.PerformClick()
|
|||
|
|
Return Nothing
|
|||
|
|
End If
|
|||
|
|
If Not GetinputTextToint(l_DeviceType.Text, DeviceType) Then
|
|||
|
|
MsgBox("设备类型输入错误!")
|
|||
|
|
btn.PerformClick()
|
|||
|
|
Return Nothing
|
|||
|
|
End If
|
|||
|
|
If Not Integer.TryParse(Cbo_Baud.Text, UpBaud) Then
|
|||
|
|
MsgBox("未输入正确的APP波特率!")
|
|||
|
|
btn.PerformClick()
|
|||
|
|
Return Nothing
|
|||
|
|
End If
|
|||
|
|
If Not Integer.TryParse(Text_BootBaud.Text, bootbaud) Then
|
|||
|
|
MsgBox("未输入正确的Boot波特率!")
|
|||
|
|
btn.PerformClick()
|
|||
|
|
Return Nothing
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
If Action = WorkflowType.FlashGroupUpgrade OrElse Action = WorkflowType.FlashWrite Then
|
|||
|
|
If Not Integer.TryParse(c_UpBaud.Text, Appbaud) Then
|
|||
|
|
MsgBox("未输入正确的升级波特率!")
|
|||
|
|
btn.PerformClick()
|
|||
|
|
Return Nothing
|
|||
|
|
End If
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
If Tab_SerialSettings.SelectedIndex = 1 Then
|
|||
|
|
If String.IsNullOrEmpty(Me.Throughport.Text) OrElse Not Integer.TryParse(Me.Throughport.Text, Throughport) Then
|
|||
|
|
MsgBox("未选择透传串口!")
|
|||
|
|
btn.PerformClick()
|
|||
|
|
Return Nothing
|
|||
|
|
End If
|
|||
|
|
If String.IsNullOrEmpty(TransmissionDuration.Text) OrElse Not Integer.TryParse(TransmissionDuration.Text, TransnDuion) Then
|
|||
|
|
MsgBox("未输入透传超时时间!")
|
|||
|
|
btn.PerformClick()
|
|||
|
|
Return Nothing
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
If Tab_SerialSettings.SelectedIndex = 1 Then
|
|||
|
|
If Not Integer.TryParse(NudTimeOut1.Text, NTimeOut) Then
|
|||
|
|
MsgBox("未输入正确的透传超时时间!")
|
|||
|
|
btn.PerformClick()
|
|||
|
|
Return Nothing
|
|||
|
|
End If
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
If startaddr = 255 Then
|
|||
|
|
If Not Integer.TryParse(DevNumber.Text, cDevNumber) Then
|
|||
|
|
MsgBox("未输入正确的设备数量!")
|
|||
|
|
btn.PerformClick()
|
|||
|
|
Return Nothing
|
|||
|
|
End If
|
|||
|
|
End If
|
|||
|
|
Parameterlist.NTimeOut = NTimeOut
|
|||
|
|
Parameterlist.Throughport = Throughport
|
|||
|
|
Parameterlist.TransnDuion = TransnDuion
|
|||
|
|
Parameterlist.DevNumber = cDevNumber
|
|||
|
|
Parameterlist.EnableFlag = True
|
|||
|
|
Parameterlist.Action = Action
|
|||
|
|
Parameterlist.StartAddress = Myaddr
|
|||
|
|
Parameterlist.ReceiveAddress = startaddr
|
|||
|
|
Parameterlist.ReceiveAddressRangeLength = stopaddr
|
|||
|
|
Parameterlist.DeviceType = DeviceType
|
|||
|
|
Parameterlist.AppBaudRate = UpBaud
|
|||
|
|
Parameterlist.btn = btn
|
|||
|
|
Parameterlist.DataGrid = DataGridView1
|
|||
|
|
Parameterlist.RText_OutputText = RText_OutputText
|
|||
|
|
Parameterlist.BootBaudRate = bootbaud
|
|||
|
|
Parameterlist.ProcessList = li
|
|||
|
|
Parameterlist.CurrentStep = CurrentStep
|
|||
|
|
Parameterlist.NextAction = NextAction
|
|||
|
|
Parameterlist.UpgradeBaudRate = Appbaud
|
|||
|
|
Return Parameterlist
|
|||
|
|
End Function
|
|||
|
|
|
|||
|
|
Public Function GetinputTextToint(str As String, ByRef result As Integer) As Boolean
|
|||
|
|
'判断字符串是不是Hex字符串
|
|||
|
|
If IsHexStr(str) Then
|
|||
|
|
'将HEx字符串转换为byte
|
|||
|
|
result = Convert.ToInt32(str, 16)
|
|||
|
|
Return True
|
|||
|
|
End If
|
|||
|
|
Return False
|
|||
|
|
End Function
|
|||
|
|
Public Function IsHexStr(str As String) As Boolean
|
|||
|
|
Dim reg As New System.Text.RegularExpressions.Regex("^[0-9A-Fa-f]+$")
|
|||
|
|
Return reg.IsMatch(str)
|
|||
|
|
End Function
|
|||
|
|
|
|||
|
|
|
|||
|
|
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
|
|||
|
|
Dim dlg As New OpenFileDialog
|
|||
|
|
dlg.InitialDirectory = Application.StartupPath
|
|||
|
|
dlg.Filter = "Logic File|*.dat;*.ihex;*.hex;*.bin;"
|
|||
|
|
Dim oldPath As String = Tb_HexFilePath.Text
|
|||
|
|
If System.IO.File.Exists(oldPath) Then
|
|||
|
|
dlg.InitialDirectory = System.IO.Path.GetDirectoryName(oldPath)
|
|||
|
|
dlg.FileName = oldPath
|
|||
|
|
Else
|
|||
|
|
dlg.InitialDirectory = Application.StartupPath
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
If dlg.ShowDialog() = Windows.Forms.DialogResult.OK Then
|
|||
|
|
Tb_HexFilePath.Text = dlg.FileName
|
|||
|
|
' btn_Reload.PerformClick()
|
|||
|
|
ParsSelectedUpgradeFile(Tb_HexFilePath.Text)
|
|||
|
|
End If
|
|||
|
|
End Sub
|
|||
|
|
'解析选取的升级文件
|
|||
|
|
Public Function ParsSelectedUpgradeFile(filepath As String) As SendFileconig
|
|||
|
|
'Dim resultli As List(Of (number As Integer, Byte()))
|
|||
|
|
'判断文件存不存在
|
|||
|
|
If Not System.IO.File.Exists(filepath) Then
|
|||
|
|
MsgBox("文件不存在!")
|
|||
|
|
Return Nothing
|
|||
|
|
End If
|
|||
|
|
'判断文件格式
|
|||
|
|
If System.IO.Path.GetExtension(filepath).ToLower() = ".ihex" OrElse System.IO.Path.GetExtension(filepath).ToLower() = ".hex" Then
|
|||
|
|
Dim resultli = ParsHexFile(filepath)
|
|||
|
|
Dim tmpStrCks As String = ""
|
|||
|
|
If resultli.IsFileAnalysis Then
|
|||
|
|
Dim tmpHexValidLenght As UInt32 = resultli.EndAddr - resultli.SendAddr
|
|||
|
|
MsgBox("Hex 装载成功!" & vbCrLf &
|
|||
|
|
"起始偏移地址 :0x" & Hex(resultli.SendAddr) & vbCrLf &
|
|||
|
|
" 结束地址 :0x" & Hex(resultli.EndAddr) & vbCrLf &
|
|||
|
|
" 文件长度 :" & tmpHexValidLenght.ToString & vbCrLf &
|
|||
|
|
" 文件版本 :" & resultli.NVersions & vbCrLf
|
|||
|
|
)
|
|||
|
|
Dim checkSum(3) As Byte
|
|||
|
|
CalcCheckSum(resultli.Sendlist, resultli.SendLen, checkSum)
|
|||
|
|
tmpStrCks = HexByte2Str(checkSum(3))
|
|||
|
|
tmpStrCks = tmpStrCks & " " & HexByte2Str(checkSum(2))
|
|||
|
|
tmpStrCks = tmpStrCks & " " & HexByte2Str(checkSum(1))
|
|||
|
|
tmpStrCks = tmpStrCks & " " & HexByte2Str(checkSum(0))
|
|||
|
|
|
|||
|
|
If String.IsNullOrEmpty(resultli.NVersions) Then
|
|||
|
|
Label27.Text = "未识别"
|
|||
|
|
Else
|
|||
|
|
Label27.Text = resultli.NVersions.Replace("_", " ")
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
|
|||
|
|
lab_HexLastModifyDate.Text = IO.File.GetLastWriteTime(Tb_HexFilePath.Text)
|
|||
|
|
lab_HexDataLenght.Text = Format(tmpHexValidLenght, "###,###") & " Bytes"
|
|||
|
|
lab_HexDataCks.Text = tmpStrCks
|
|||
|
|
Label22.Text = "0x" & Hex(resultli.SendAddr)
|
|||
|
|
Label23.Text = "0x" & Hex(resultli.EndAddr)
|
|||
|
|
Else
|
|||
|
|
MsgBox(resultli.Analysis)
|
|||
|
|
End If
|
|||
|
|
Return resultli
|
|||
|
|
ElseIf System.IO.Path.GetExtension(filepath).ToLower() = ".dat" OrElse System.IO.Path.GetExtension(filepath).ToLower() = ".bin" Then
|
|||
|
|
Dim resultli As SendFileconig
|
|||
|
|
Dim datalen As Integer
|
|||
|
|
|
|||
|
|
If GetinputTextToint(ToolStripTextBox1.Text, datalen) Then
|
|||
|
|
Else
|
|||
|
|
MsgBox("bin文件起始地址输入有误!")
|
|||
|
|
Return Nothing
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
resultli = ParsbinFile(datalen, filepath)
|
|||
|
|
Dim tmpStrCks As String = ""
|
|||
|
|
If resultli.IsFileAnalysis Then
|
|||
|
|
Dim tmpHexValidLenght As UInt32 = resultli.EndAddr - resultli.SendAddr
|
|||
|
|
MsgBox("Hex 装载成功!" & vbCrLf &
|
|||
|
|
"起始偏移地址 :0x" & Hex(resultli.SendAddr) & vbCrLf &
|
|||
|
|
" 结束地址 :0x" & Hex(resultli.EndAddr) & vbCrLf &
|
|||
|
|
" 文件长度 :" & tmpHexValidLenght.ToString & vbCrLf &
|
|||
|
|
" 文件版本 :" & resultli.NVersions & vbCrLf
|
|||
|
|
)
|
|||
|
|
Dim checkSum(3) As Byte
|
|||
|
|
CalcCheckSum(resultli.Sendlist, resultli.SendLen, checkSum)
|
|||
|
|
tmpStrCks = HexByte2Str(checkSum(3))
|
|||
|
|
tmpStrCks = tmpStrCks & " " & HexByte2Str(checkSum(2))
|
|||
|
|
tmpStrCks = tmpStrCks & " " & HexByte2Str(checkSum(1))
|
|||
|
|
tmpStrCks = tmpStrCks & " " & HexByte2Str(checkSum(0))
|
|||
|
|
|
|||
|
|
If String.IsNullOrEmpty(resultli.NVersions) Then
|
|||
|
|
Label27.Text = "未识别"
|
|||
|
|
Else
|
|||
|
|
Label27.Text = resultli.NVersions.Replace("_", " ")
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
|
|||
|
|
lab_HexLastModifyDate.Text = IO.File.GetLastWriteTime(Tb_HexFilePath.Text)
|
|||
|
|
lab_HexDataLenght.Text = Format(tmpHexValidLenght, "###,###") & " Bytes"
|
|||
|
|
lab_HexDataCks.Text = tmpStrCks
|
|||
|
|
Label22.Text = "0x" & Hex(resultli.SendAddr)
|
|||
|
|
Label23.Text = "0x" & Hex(resultli.EndAddr)
|
|||
|
|
Else
|
|||
|
|
MsgBox(resultli.Analysis)
|
|||
|
|
End If
|
|||
|
|
Return resultli
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
Return Nothing
|
|||
|
|
|
|||
|
|
End Function
|
|||
|
|
Private Function HexByte2Str(hexByte As Byte) As String
|
|||
|
|
If hexByte < 16 Then
|
|||
|
|
Return "0" & Hex(hexByte)
|
|||
|
|
Else
|
|||
|
|
Return Hex(hexByte)
|
|||
|
|
End If
|
|||
|
|
End Function
|
|||
|
|
Public Function ParsbinFile(start As Long, filepath As String) As SendFileconig
|
|||
|
|
Dim resultli As SendFileconig = New SendFileconig
|
|||
|
|
resultli.IsFileAnalysis = False
|
|||
|
|
resultli.Sendlist.Clear()
|
|||
|
|
Dim datalen As Integer = 0 '256
|
|||
|
|
Dim kuai As Integer = 512
|
|||
|
|
If Integer.TryParse(txt_BlockLength.Text, kuai) Then
|
|||
|
|
resultli.BlockLength = kuai
|
|||
|
|
Else
|
|||
|
|
MsgBox("块大小异常!")
|
|||
|
|
resultli.Analysis = "块大小异常!!"
|
|||
|
|
Return resultli
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
|
|||
|
|
If Integer.TryParse(txt_cdataleng.Text, datalen) Then
|
|||
|
|
|
|||
|
|
Else
|
|||
|
|
MsgBox("数据长度输入有误!")
|
|||
|
|
resultli.Analysis = "数据长度输入有误!!"
|
|||
|
|
Return resultli
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
|
|||
|
|
''以二进制读取文件内容
|
|||
|
|
Dim dataFile() As Byte = File.ReadAllBytes(filepath)
|
|||
|
|
|
|||
|
|
'以datalen 为单位,将文件内容拆分成多个数组 添加到 resultli.Sendlist 中
|
|||
|
|
Dim temp As Byte()
|
|||
|
|
Dim li As List(Of Byte)
|
|||
|
|
Dim kuaiaddr As Integer
|
|||
|
|
Dim chazhi As Integer = 0
|
|||
|
|
Dim datalen2 As Integer
|
|||
|
|
chazhi = dataFile.Length Mod 4
|
|||
|
|
If chazhi > 0 Then
|
|||
|
|
chazhi = 4 - chazhi
|
|||
|
|
'将dataFile 补0 成4的倍数
|
|||
|
|
ReDim Preserve dataFile(dataFile.Length + chazhi - 1)
|
|||
|
|
For i As Integer = dataFile.Length - chazhi To dataFile.Length - 1
|
|||
|
|
dataFile(i) = 0
|
|||
|
|
Next
|
|||
|
|
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
For i As Integer = 0 To dataFile.Length Step datalen
|
|||
|
|
|
|||
|
|
kuaiaddr = start + i
|
|||
|
|
li = New List(Of Byte)
|
|||
|
|
'判断是否有足够长度进行拷贝
|
|||
|
|
datalen2 = datalen
|
|||
|
|
If dataFile.Length - i <datalen Then
|
|||
|
|
|
|||
|
|
datalen2= dataFile.Length - i
|
|||
|
|
chazhi= datalen - datalen2
|
|||
|
|
temp= New Byte(datalen2 - 1) {}
|
|||
|
|
Else
|
|||
|
|
temp = New Byte(datalen2 - 1) {}
|
|||
|
|
End If
|
|||
|
|
Array.Copy(dataFile, i, temp, 0, datalen2)
|
|||
|
|
|
|||
|
|
|
|||
|
|
li.AddRange(temp)
|
|||
|
|
|
|||
|
|
resultli.Sendlist.Add((kuaiaddr, li))
|
|||
|
|
Next
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
resultli.SendAddr = start
|
|||
|
|
resultli.SendLen = dataFile.Length
|
|||
|
|
resultli.EndAddr = start + dataFile.Length '+ chazhi
|
|||
|
|
resultli.IsFileAnalysis = True
|
|||
|
|
resultli.NVersions = "bin文件无版本信息!"
|
|||
|
|
Return resultli
|
|||
|
|
End Function
|
|||
|
|
|
|||
|
|
|
|||
|
|
'起始地址
|
|||
|
|
Public filestartaddr As Integer
|
|||
|
|
'解析hex文件
|
|||
|
|
Private Function ParsHexFile(filepath As String) As SendFileconig
|
|||
|
|
Dim resultli As SendFileconig = New SendFileconig
|
|||
|
|
resultli.IsFileAnalysis = False
|
|||
|
|
Dim file As New System.IO.FileStream(filepath, FileMode.Open, FileAccess.Read)
|
|||
|
|
file.Close()
|
|||
|
|
'Dim reader As New System.IO.BinaryReader(file)
|
|||
|
|
'Dim hex As String = reader.ReadString()
|
|||
|
|
Dim hex As String = System.IO.File.ReadAllText(filepath)
|
|||
|
|
|
|||
|
|
Dim lines As String() = hex.Trim.Split(vbCrLf)
|
|||
|
|
Dim length As Integer
|
|||
|
|
Dim addr, tempCheckSum, CheckSum As Integer
|
|||
|
|
Dim datatype As Byte
|
|||
|
|
Dim hstr As String
|
|||
|
|
Dim DataType_00_Idx As Integer = 0
|
|||
|
|
Dim DataType_00_sount As Integer = 0
|
|||
|
|
Dim libyte As List(Of Byte)
|
|||
|
|
Dim mindex As Integer = 0
|
|||
|
|
Dim datalen As Integer = 0 '256
|
|||
|
|
Dim kuai As Integer = 512
|
|||
|
|
|
|||
|
|
Dim A2node As String = ""
|
|||
|
|
Dim A2cont As Integer = 0
|
|||
|
|
|
|||
|
|
|
|||
|
|
If Integer.TryParse(txt_BlockLength.Text, kuai) Then
|
|||
|
|
resultli.BlockLength = kuai
|
|||
|
|
Else
|
|||
|
|
MsgBox("块大小异常!")
|
|||
|
|
resultli.Analysis = "块大小异常!!"
|
|||
|
|
Return resultli
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
|
|||
|
|
If Integer.TryParse(txt_cdataleng.Text, datalen) Then
|
|||
|
|
|
|||
|
|
Else
|
|||
|
|
MsgBox("数据长度输入有误!")
|
|||
|
|
resultli.Analysis = "数据长度输入有误!!"
|
|||
|
|
Return resultli
|
|||
|
|
End If
|
|||
|
|
' datalen = datalen + 1
|
|||
|
|
|
|||
|
|
'偏移地址 0x04 数据类型指示偏移地址
|
|||
|
|
Dim LineAddOffestBase As Integer = 0
|
|||
|
|
For Each line As String In lines
|
|||
|
|
'按照hex文件格式解析
|
|||
|
|
line = line.Trim
|
|||
|
|
hstr = line.Substring(1)
|
|||
|
|
Dim linebyte As Byte() = GetStringToDataByte(hstr)
|
|||
|
|
|
|||
|
|
|
|||
|
|
If line.Substring(0, 1) = ":" Then
|
|||
|
|
'数据行
|
|||
|
|
length = linebyte(0)
|
|||
|
|
' addr = 24736
|
|||
|
|
addr = linebyte(1) * 256 + linebyte(2) + DataType_00_sount + LineAddOffestBase
|
|||
|
|
'数据类型
|
|||
|
|
datatype = linebyte(3)
|
|||
|
|
Dim datalist As List(Of Byte) = New List(Of Byte)
|
|||
|
|
'数据内容
|
|||
|
|
Dim dataarry(length - 1) As Byte
|
|||
|
|
Array.Copy(linebyte, 4, dataarry, 0, dataarry.Length)
|
|||
|
|
CheckSum = linebyte(length + 4)
|
|||
|
|
datalist.AddRange(dataarry)
|
|||
|
|
tempCheckSum = CalcCheckSum(linebyte, linebyte.Length)
|
|||
|
|
If tempCheckSum <> &HFF Then
|
|||
|
|
'MsgBox("校验错误,文件损坏!!")
|
|||
|
|
'filestartaddr = -1
|
|||
|
|
resultli.Analysis = "校验错误,文件损坏!!"
|
|||
|
|
Return resultli
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
If A2cont = 0 Then
|
|||
|
|
'Console.WriteLine(hstr)
|
|||
|
|
If hstr.Contains("2A2A2A") Then
|
|||
|
|
A2cont += 1
|
|||
|
|
'获取A2A2A2的地址
|
|||
|
|
Dim eindex As Integer = hstr.IndexOf("2A2A2A")
|
|||
|
|
A2node = hstr.Substring(eindex, hstr.Length - 2 - eindex)
|
|||
|
|
End If
|
|||
|
|
ElseIf A2cont = 1 Then
|
|||
|
|
'Console.WriteLine(hstr)
|
|||
|
|
If hstr.Contains("2A2A2A") Then
|
|||
|
|
A2cont = 0
|
|||
|
|
A2node = A2node + hstr.Substring(8, hstr.IndexOf("2A2A2A") - 2)
|
|||
|
|
Dim A2nodearry As Byte() = GetStringToDataByte(A2node.Replace(" ", ""))
|
|||
|
|
A2node = System.Text.Encoding.ASCII.GetString(A2nodearry)
|
|||
|
|
resultli.SetVersionsInfo(A2node)
|
|||
|
|
Else
|
|||
|
|
A2node = A2node + ByteArrayToHexString(dataarry)
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
Select Case datatype
|
|||
|
|
Case 0
|
|||
|
|
If DataType_00_Idx = &H0 Then
|
|||
|
|
filestartaddr = addr
|
|||
|
|
resultli.SendAddr = addr
|
|||
|
|
resultli.EndAddr = addr
|
|||
|
|
End If
|
|||
|
|
DataType_00_Idx += 1
|
|||
|
|
|
|||
|
|
If resultli.Sendlist.Count = 194 Then
|
|||
|
|
Console.WriteLine("")
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
If addr - resultli.EndAddr > 0 Then '判断 是否需要补零
|
|||
|
|
mindex = addr - resultli.EndAddr '获取补零 个数
|
|||
|
|
'判断当前最后一包的数据是否足够容纳 差值
|
|||
|
|
|
|||
|
|
'If resultli.Sendlist(resultli.Sendlist.Count - 1).Item2.Count + mindex > datalen Then '
|
|||
|
|
' libyte = New List(Of Byte) ' 255 +3
|
|||
|
|
' For ni = 0 To mindex - 1 '0.1.2
|
|||
|
|
' If resultli.Sendlist(resultli.Sendlist.Count - 1).Item2.Count < datalen Then '255+0'1+2
|
|||
|
|
' resultli.Sendlist(resultli.Sendlist.Count - 1).Item2.Add(&H0)
|
|||
|
|
' Else
|
|||
|
|
' libyte.Add(&H0)
|
|||
|
|
|
|||
|
|
' resultli.Sendlist.Add((resultli.EndAddr + ni, libyte)) '1
|
|||
|
|
' End If
|
|||
|
|
|
|||
|
|
|
|||
|
|
' Next
|
|||
|
|
'Else
|
|||
|
|
' For i As Integer = 1 To addr - resultli.EndAddr
|
|||
|
|
' 'datalist.Add(&HFF)
|
|||
|
|
' resultli.Sendlist(resultli.Sendlist.Count - 1).Item2.Add(&H0)
|
|||
|
|
|
|||
|
|
' If resultli.Sendlist(resultli.Sendlist.Count - 1).Item2.Count < datalen Then '255+0'1+2
|
|||
|
|
' resultli.Sendlist(resultli.Sendlist.Count - 1).Item2.Add(&H0)
|
|||
|
|
' Else
|
|||
|
|
' libyte.Add(&H0)
|
|||
|
|
|
|||
|
|
' resultli.Sendlist.Add((resultli.EndAddr + ni, libyte)) '1
|
|||
|
|
' End If
|
|||
|
|
|
|||
|
|
' Next
|
|||
|
|
'End If
|
|||
|
|
For ni = 0 To mindex - 1
|
|||
|
|
If resultli.Sendlist(resultli.Sendlist.Count - 1).Item2.Count < datalen Then
|
|||
|
|
resultli.Sendlist(resultli.Sendlist.Count - 1).Item2.Add(&H0)
|
|||
|
|
Else
|
|||
|
|
libyte = New List(Of Byte)
|
|||
|
|
libyte.Add(&H0)
|
|||
|
|
resultli.Sendlist.Add((resultli.EndAddr + ni, libyte))
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
Next
|
|||
|
|
'If resultli.Sendlist(resultli.Sendlist.Count - 1).Item2.Count + mindex > datalen Then '
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
If resultli.Sendlist.Count < 1 Then
|
|||
|
|
libyte = New List(Of Byte)
|
|||
|
|
libyte.AddRange(datalist.ToArray)
|
|||
|
|
resultli.Sendlist.Add((addr, libyte))
|
|||
|
|
Else
|
|||
|
|
If resultli.Sendlist(resultli.Sendlist.Count - 1).Item2.Count + datalist.Count > datalen Then
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
mindex = datalen - resultli.Sendlist(resultli.Sendlist.Count - 1).Item2.Count
|
|||
|
|
libyte = New List(Of Byte)
|
|||
|
|
|
|||
|
|
|
|||
|
|
For ndixt = 0 To length - 1
|
|||
|
|
If ndixt < mindex Then
|
|||
|
|
resultli.Sendlist(resultli.Sendlist.Count - 1).Item2.Add(datalist(ndixt))
|
|||
|
|
Else
|
|||
|
|
libyte.Add(datalist(ndixt))
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
Next
|
|||
|
|
|
|||
|
|
resultli.Sendlist.Add((addr + mindex, libyte))
|
|||
|
|
|
|||
|
|
Else
|
|||
|
|
resultli.Sendlist(resultli.Sendlist.Count - 1).Item2.AddRange(datalist.ToArray)
|
|||
|
|
End If
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
|
|||
|
|
resultli.SendLen += datalist.Count
|
|||
|
|
resultli.EndAddr = addr + datalist.Count
|
|||
|
|
|
|||
|
|
' Console.WriteLine("包长:" & DataType_00_Idx.ToString & "addr = " & addr & " datalist.Length = " & datalist.Count & " resultli.SendLen = " & resultli.SendLen & " resultli.EndAddr = " & resultli.EndAddr)
|
|||
|
|
|
|||
|
|
Case 1
|
|||
|
|
If resultli.EndAddr = 0 Then
|
|||
|
|
resultli.Analysis = "文件发送数据内容为空!!"
|
|||
|
|
Return resultli
|
|||
|
|
Else
|
|||
|
|
'MsgBox(“数据装载成功,行数=” & LineCnt & “ , EndAdd = ” & endAddr)
|
|||
|
|
resultli.IsFileAnalysis = True
|
|||
|
|
Return resultli
|
|||
|
|
End If
|
|||
|
|
Case 2
|
|||
|
|
If length = 2 Then
|
|||
|
|
'Console.WriteLine("地址:" & addr & " 长度:" & datalist.Count)
|
|||
|
|
DataType_00_sount = linebyte(4) * 256 + linebyte(5)
|
|||
|
|
|
|||
|
|
DataType_00_sount = DataType_00_sount << 4
|
|||
|
|
'filestartaddr = DataType_00_sount
|
|||
|
|
'resultli.SendAddr = DataType_00_sount
|
|||
|
|
resultli.EndAddr = DataType_00_sount
|
|||
|
|
|
|||
|
|
Else
|
|||
|
|
resultli.Analysis = "文件偏移地址异常!!"
|
|||
|
|
Return resultli '确认DataLen必须是2,否则报错’
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
Case 4 '扩展线性地址’
|
|||
|
|
If length = 2 Then
|
|||
|
|
LineAddOffestBase = linebyte(4) * 256 + linebyte(5)
|
|||
|
|
LineAddOffestBase = LineAddOffestBase << 16
|
|||
|
|
Else
|
|||
|
|
resultli.Analysis = "文件偏移地址异常!!"
|
|||
|
|
Return resultli '确认DataLen必须是2,否则报错’
|
|||
|
|
End If
|
|||
|
|
Case Else
|
|||
|
|
Continue For
|
|||
|
|
End Select
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
Next
|
|||
|
|
resultli.Analysis = "未找到文件结束符!!"
|
|||
|
|
Return resultli
|
|||
|
|
End Function
|
|||
|
|
|
|||
|
|
|
|||
|
|
Private Function CalcCheckSum(ByVal buf() As Byte, ByVal len As UInt16) As Byte
|
|||
|
|
Dim sum As Int16 = 0
|
|||
|
|
Dim i As UInt16 = 0
|
|||
|
|
Dim retByte As Byte
|
|||
|
|
|
|||
|
|
For i = 0 To len - 1
|
|||
|
|
sum += buf(i)
|
|||
|
|
sum = sum And &HFF
|
|||
|
|
Next
|
|||
|
|
|
|||
|
|
retByte = (Not sum) And &HFF
|
|||
|
|
|
|||
|
|
Return retByte
|
|||
|
|
End Function
|
|||
|
|
Private Sub CalcCheckSum(ByVal buflisrList As List(Of (number As Integer, List(Of Byte))), ByVal len As UInt32, ByRef resultBuf() As Byte)
|
|||
|
|
Dim sum As Int64 = 0
|
|||
|
|
Dim i As UInt32 = 0
|
|||
|
|
Dim j As UInt32 = 0
|
|||
|
|
Dim retByte As Int64
|
|||
|
|
For i = 0 To buflisrList.Count - 1
|
|||
|
|
For j = 0 To buflisrList(i).Item2.Count - 1
|
|||
|
|
'Console.WriteLine($"sum={sum} +buf={buflisrList(i).Item2(j)}")
|
|||
|
|
sum += buflisrList(i).Item2(j)
|
|||
|
|
sum = sum And &HFFFFFFFF
|
|||
|
|
Next
|
|||
|
|
Next
|
|||
|
|
|
|||
|
|
|
|||
|
|
'Do
|
|||
|
|
' For j = 0 To 127
|
|||
|
|
' sum += buf(i + j)
|
|||
|
|
' sum = sum And &HFFFFFFFF
|
|||
|
|
' Next
|
|||
|
|
' i += 128
|
|||
|
|
'Loop Until i >= len
|
|||
|
|
|
|||
|
|
'retByte = (Not sum) And &HFFFFFFFF
|
|||
|
|
retByte = sum
|
|||
|
|
|
|||
|
|
'TextBox1.Text = Hex(retByte)
|
|||
|
|
|
|||
|
|
resultBuf(0) = (retByte \ &H1000000) And &HFF
|
|||
|
|
resultBuf(1) = (retByte \ &H10000) And &HFF
|
|||
|
|
resultBuf(2) = (retByte \ &H100) And &HFF
|
|||
|
|
resultBuf(3) = retByte And &HFF
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
|
|||
|
|
Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Txt_startaddr.KeyPress, txt_BootTimeout.KeyPress, Txt_stopaddr.KeyPress, Txt_Myaddr.KeyPress, l_DeviceType.KeyPress, EffTime.KeyPress, ToolStripTextBox1.KeyPress
|
|||
|
|
' e.Handled = Not $"0123456789{vbBack}".Contains(e.KeyChar) '如果要只允许输入数字,就把上一行字符串中的字母删除
|
|||
|
|
'设置只允许输入HEX 字符
|
|||
|
|
e.Handled = Not $"0123456789ABCDEFabcdef{vbBack}".Contains(e.KeyChar) '如果要只允许输入数字,
|
|||
|
|
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub Tab_SerialSettings_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Tab_SerialSettings.SelectedIndexChanged
|
|||
|
|
If Btn_OpenPort.Text = "Disconnect" Then
|
|||
|
|
Btn_OpenPort.PerformClick()
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
|
|||
|
|
Dim str As String = GetEnumDescription(CType(Tab_SerialSettings.SelectedIndex + 1, CommunicationType))
|
|||
|
|
Select Case Tab_SerialSettings.SelectedIndex
|
|||
|
|
Case 0
|
|||
|
|
m_CommunicationFlow.ChangeCommunicationType(str, RText_OutputText)
|
|||
|
|
Tab_SerialSettings.Height = 60
|
|||
|
|
Case 1
|
|||
|
|
m_CommunicationFlow.ChangeCommunicationType(str, RText_OutputText)
|
|||
|
|
Tab_SerialSettings.Height = 160
|
|||
|
|
End Select
|
|||
|
|
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub Cbo_Baud_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Cbo_Baud.SelectedIndexChanged
|
|||
|
|
|
|||
|
|
''判断通信对象是否实例化
|
|||
|
|
'If IsNothing(m_CommunicationFlow.m_Transmitter) Then
|
|||
|
|
' Tab_SerialSettings_SelectedIndexChanged(Nothing, Nothing)
|
|||
|
|
'End If
|
|||
|
|
''判断串口和波特率是否为空
|
|||
|
|
'If String.IsNullOrEmpty(Cbo_Port.Text) OrElse String.IsNullOrEmpty(Cbo_Baud.Text) Then
|
|||
|
|
' MsgBox("未知串口或波特率为空")
|
|||
|
|
' Return
|
|||
|
|
'End If
|
|||
|
|
|
|||
|
|
'm_CommunicationFlow.m_Transmitter.SetTransmitterParameter(Cbo_Port.Text, CInt(Cbo_Baud.Text))
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub ToolStripButton1_Click_1(sender As Object, e As EventArgs) Handles ToolStripButton1.Click
|
|||
|
|
RText_OutputText.Clear()
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub Btn_Upgrade_Click(sender As Object, e As EventArgs) Handles Btn_Upgrade.Click
|
|||
|
|
|
|||
|
|
If Btn_Upgrade.Text.Equals("升级设备") Then
|
|||
|
|
Btn_Upgrade.Text = "停止升级"
|
|||
|
|
'获取文件信息()
|
|||
|
|
'Dim resultli As SendFileconig = ParsSelectedUpgradeFile(Tb_HexFilePath.Text)
|
|||
|
|
'If IsNothing(resultli) Then
|
|||
|
|
' MsgBox("文件解析失败")
|
|||
|
|
' Btn_Upgrade.PerformClick()
|
|||
|
|
' Return
|
|||
|
|
'End If
|
|||
|
|
'If Not resultli.IsFileAnalysis Then
|
|||
|
|
' MsgBox(resultli.Analysis)
|
|||
|
|
' Btn_Upgrade.PerformClick()
|
|||
|
|
' Return
|
|||
|
|
'End If
|
|||
|
|
'EnterTheUpgradeProcess(resultli)
|
|||
|
|
'OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("结束升级!", Color.Black), 1)
|
|||
|
|
'Btn_Upgrade.Text = "Upgrade"
|
|||
|
|
|
|||
|
|
|
|||
|
|
'获取文件信息()
|
|||
|
|
Dim resultli As SendFileconig = ParsSelectedUpgradeFile(Tb_HexFilePath.Text)
|
|||
|
|
If IsNothing(resultli) Then
|
|||
|
|
MsgBox("文件解析失败")
|
|||
|
|
Btn_Upgrade.PerformClick()
|
|||
|
|
Return
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
If Not resultli.IsFileAnalysis Then
|
|||
|
|
MsgBox(resultli.Analysis)
|
|||
|
|
Btn_Upgrade.PerformClick()
|
|||
|
|
Return
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
'EnterTheUpgradeProcess(resultli)
|
|||
|
|
'OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("结束升级!", Color.Black), 1)
|
|||
|
|
Dim BootTimeout, Myaddr, startaddr, stopaddr, Appbaud, UpBaud, EffTimeTime, DeviceType, vsendTimeout As Integer
|
|||
|
|
If Not Integer.TryParse(Sendtimeout.Text, vsendTimeout) Then
|
|||
|
|
MsgBox("未输入正确的超时时间!")
|
|||
|
|
Btn_Upgrade.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
If Not GetinputTextToint(EffTime.Text, EffTimeTime) Then
|
|||
|
|
MsgBox("未输入正确的有效时间!")
|
|||
|
|
Btn_Upgrade.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If IsNothing(m_CommunicationFlow.m_Transmitter) OrElse m_CommunicationFlow.m_Transmitter.IsTransmitter = False Then
|
|||
|
|
MsgBox("发送器未打开,请先打开发送器!")
|
|||
|
|
Btn_Upgrade.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If Not GetinputTextToint(txt_BootTimeout.Text, BootTimeout) Then
|
|||
|
|
MsgBox("未输入正确的超时时间!")
|
|||
|
|
Btn_Upgrade.PerformClick()
|
|||
|
|
Return
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
If Not Integer.TryParse(c_UpBaud.Text, UpBaud) Then
|
|||
|
|
MsgBox("未输入正确的波特率!")
|
|||
|
|
Btn_Upgrade.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If Not Integer.TryParse(ResendNumber.Text, startaddr) Then
|
|||
|
|
MsgBox("未输入正确的重发次数!")
|
|||
|
|
Btn_Upgrade.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If Not Integer.TryParse(ResendIntervalr.Text, stopaddr) Then
|
|||
|
|
MsgBox("未输入正确的发送间隔!")
|
|||
|
|
Btn_Upgrade.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If IsNothing(m_CommunicationFlow.m_Receiver) Then
|
|||
|
|
MsgBox("请先选择通信协议")
|
|||
|
|
Btn_Upgrade.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
If m_CommunicationFlow.IsCreateProtocol Then
|
|||
|
|
' DataGridView1.Rows.Clear()
|
|||
|
|
|
|||
|
|
''判断协议类对象是否是实例化
|
|||
|
|
' If m_CommunicationFlow.m_Receiver.IsCreateProtocol Then
|
|||
|
|
Dim d_Cmdconfig As Cmdconfig
|
|||
|
|
OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("开始升级设备!", Color.Black), 1)
|
|||
|
|
Dim li As List(Of (number As Integer, Cmdconfig)) = New List(Of (number As Integer, Cmdconfig))
|
|||
|
|
For i = CmdType.SearchCommand To CmdType.CheckCommand
|
|||
|
|
d_Cmdconfig = New Cmdconfig({i, 1, startaddr, stopaddr, vsendTimeout}) '命令 SN 重发次数 重发间隔 超时时间
|
|||
|
|
Select Case i
|
|||
|
|
Case CmdType.SearchCommand '搜索
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(BootTimeout)
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(EffTimeTime)
|
|||
|
|
Case CmdType.skipCommand '跳转Boot
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(1)
|
|||
|
|
Case CmdType.SetUpParameters 's设置波特率
|
|||
|
|
d_Cmdconfig.CmdArgs.AddRange({UpBaud, BootTimeout})
|
|||
|
|
Case CmdType.WriteFlashData '写入Flash
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(resultli)
|
|||
|
|
d_Cmdconfig.CmdReceiveTimeout = 3
|
|||
|
|
Case CmdType.EraseFlashData '擦除
|
|||
|
|
d_Cmdconfig.CmdArgs.AddRange({2, resultli.SendAddr, resultli.SendLen})
|
|||
|
|
Case CmdType.CheckCommand '校验
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(resultli)
|
|||
|
|
Case Else
|
|||
|
|
Continue For
|
|||
|
|
|
|||
|
|
End Select
|
|||
|
|
|
|||
|
|
|
|||
|
|
d_Cmdconfig.SetProtocol(m_CommunicationFlow.m_Receiver)
|
|||
|
|
li.Add((i, d_Cmdconfig))
|
|||
|
|
|
|||
|
|
Next
|
|||
|
|
|
|||
|
|
Dim addtypeli As List(Of (Integer, Integer)) = New List(Of (Integer, Integer))
|
|||
|
|
Dim radd, rtype As Integer
|
|||
|
|
For i = 0 To DataGridView1.Rows.Count - 1
|
|||
|
|
If DataGridView1.Rows(i).Cells(1).Value = 1 Then
|
|||
|
|
If Not Integer.TryParse(DataGridView1.Rows(i).Cells(2).Value, radd) Then
|
|||
|
|
MsgBox("未输入正确的发送地址!")
|
|||
|
|
Btn_Upgrade.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If Not Integer.TryParse(DataGridView1.Rows(i).Cells(3).Value, rtype) Then
|
|||
|
|
MsgBox("未输入正确的发送地址!")
|
|||
|
|
Btn_Upgrade.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
Dim bootVersions As Integer = 0
|
|||
|
|
Integer.TryParse(DataGridView1.Rows(i).Cells(8).Value, bootVersions)
|
|||
|
|
If resultli.VersionsNumber >= bootVersions Then
|
|||
|
|
addtypeli.Add((radd, rtype))
|
|||
|
|
Else
|
|||
|
|
'弹框询问是否继续升级
|
|||
|
|
If MsgBox("设备版本低于当前固件版本,是否继续升级?", MsgBoxStyle.YesNo, "提示") = MsgBoxResult.Yes Then
|
|||
|
|
addtypeli.Add((radd, rtype))
|
|||
|
|
Else
|
|||
|
|
MsgBox("已取消升级!")
|
|||
|
|
Btn_Upgrade.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
'Console.WriteLine(DataGridView1.Rows(i).Cells(2).Value)
|
|||
|
|
'Console.WriteLine(DataGridView1.Rows(i).Cells(1).Value)
|
|||
|
|
Next
|
|||
|
|
If addtypeli.Count = 0 Then
|
|||
|
|
MsgBox("未选择升级设备!")
|
|||
|
|
Btn_Upgrade.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
If mtest(CmdType.SearchCommand, WorkflowType.FlashWrite, li, Btn_Upgrade, addtypeli) Then
|
|||
|
|
|
|||
|
|
Else
|
|||
|
|
OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("参数异常,搜索结束!", Color.Red), 1)
|
|||
|
|
'Button1_Click(Nothing, Nothing)
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
|
|||
|
|
Else
|
|||
|
|
MsgBox("请先选择通信协议")
|
|||
|
|
Btn_Upgrade.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
Else
|
|||
|
|
Btn_Upgrade.Text = "升级设备"
|
|||
|
|
If Not IsNothing(m_CommunicationFlow.m_Receiver) Then
|
|||
|
|
'Dim mReceiver As BLV_Bootloader = m_CommunicationFlow.m_Receiver
|
|||
|
|
'm_CommunicationFlow.m_Receiver.SetSearchEquipmentProcessSwitch(False)
|
|||
|
|
m_CommunicationFlow.SetThreadFlag(False)
|
|||
|
|
End If
|
|||
|
|
If IsNothing(sender) Then Return
|
|||
|
|
'Btn_Search.Text = "Search"
|
|||
|
|
OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("停止升级设备!", Color.Black), 1)
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Public Function EnterTheUpgradeProcess(resultli As SendFileconig) As Boolean
|
|||
|
|
Dim result As Boolean = False
|
|||
|
|
Dim BootTimeout, Myaddr, startaddr, stopaddr, Appbaud, UpBaud, EffTimeTime, DeviceType As Integer
|
|||
|
|
If Not GetinputTextToint(EffTime.Text, EffTimeTime) Then
|
|||
|
|
MsgBox("未输入正确的有效时间!")
|
|||
|
|
Btn_Upgrade.PerformClick()
|
|||
|
|
Return result
|
|||
|
|
End If
|
|||
|
|
If IsNothing(m_CommunicationFlow.m_Transmitter) OrElse m_CommunicationFlow.m_Transmitter.IsTransmitter = False Then
|
|||
|
|
MsgBox("发送器未打开,请先打开发送器!")
|
|||
|
|
Btn_Upgrade.PerformClick()
|
|||
|
|
Return result
|
|||
|
|
End If
|
|||
|
|
If Not GetinputTextToint(txt_BootTimeout.Text, BootTimeout) Then
|
|||
|
|
MsgBox("未输入正确的超时时间!")
|
|||
|
|
Btn_Upgrade.PerformClick()
|
|||
|
|
Return result
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
If IsNothing(m_CommunicationFlow.m_Receiver) Then
|
|||
|
|
MsgBox("请先选择通信协议")
|
|||
|
|
Btn_Upgrade.PerformClick()
|
|||
|
|
Return result
|
|||
|
|
Else
|
|||
|
|
'Cbo_Baud
|
|||
|
|
'c_UpBaud
|
|||
|
|
If Not Integer.TryParse(Cbo_Baud.Text, Appbaud) Then
|
|||
|
|
MsgBox("未输入正确的波特率!")
|
|||
|
|
Btn_Upgrade.PerformClick()
|
|||
|
|
Return result
|
|||
|
|
End If
|
|||
|
|
If Not Integer.TryParse(c_UpBaud.Text, UpBaud) Then
|
|||
|
|
MsgBox("未输入正确的波特率!")
|
|||
|
|
Btn_Upgrade.PerformClick()
|
|||
|
|
Return result
|
|||
|
|
End If
|
|||
|
|
If Not GetinputTextToint(Txt_Myaddr.Text, Myaddr) Then
|
|||
|
|
MsgBox("未输入正确的发送地址!")
|
|||
|
|
Btn_Upgrade.PerformClick()
|
|||
|
|
Return result
|
|||
|
|
End If
|
|||
|
|
If Not GetinputTextToint(l_DeviceType.Text, DeviceType) Then
|
|||
|
|
MsgBox("设备类型输入错误!")
|
|||
|
|
Btn_Upgrade.PerformClick()
|
|||
|
|
Return Nothing
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
If m_CommunicationFlow.IsCreateProtocol Then
|
|||
|
|
' DataGridView1.Rows.Clear()
|
|||
|
|
|
|||
|
|
''判断协议类对象是否是实例化
|
|||
|
|
' If m_CommunicationFlow.m_Receiver.IsCreateProtocol Then
|
|||
|
|
Dim d_Cmdconfig As Cmdconfig
|
|||
|
|
OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("开始升级设备!", Color.Black), 1)
|
|||
|
|
Dim li As List(Of (number As Integer, Cmdconfig)) = New List(Of (number As Integer, Cmdconfig))
|
|||
|
|
For i = CmdType.SearchCommand To CmdType.CheckCommand
|
|||
|
|
d_Cmdconfig = New Cmdconfig({i, 1, 0, 10, 2}) '命令 SN 重发次数 重发间隔 超时时间
|
|||
|
|
Select Case i
|
|||
|
|
Case CmdType.SearchCommand '搜索
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(BootTimeout)
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(EffTimeTime)
|
|||
|
|
|
|||
|
|
Case CmdType.skipCommand '跳转Boot
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(1)
|
|||
|
|
Case CmdType.SetUpParameters 's设置波特率
|
|||
|
|
d_Cmdconfig.CmdArgs.AddRange({UpBaud, 10})
|
|||
|
|
Case CmdType.WriteFlashData '写入Flash
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(resultli)
|
|||
|
|
d_Cmdconfig.CmdReceiveTimeout = 3
|
|||
|
|
Case CmdType.EraseFlashData '擦除
|
|||
|
|
d_Cmdconfig.CmdArgs.AddRange({2, resultli.SendAddr, resultli.SendLen})
|
|||
|
|
Case CmdType.CheckCommand '校验
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(resultli)
|
|||
|
|
Case Else
|
|||
|
|
Continue For
|
|||
|
|
|
|||
|
|
End Select
|
|||
|
|
|
|||
|
|
|
|||
|
|
d_Cmdconfig.SetProtocol(m_CommunicationFlow.m_Receiver)
|
|||
|
|
li.Add((i, d_Cmdconfig))
|
|||
|
|
|
|||
|
|
Next
|
|||
|
|
|
|||
|
|
|
|||
|
|
'Integer.TryParse(txt_BootTimeout.Text, BootTikdmeout)
|
|||
|
|
' d_Cmdconfig.CmdArgs.Add(BootTimeout)
|
|||
|
|
' d_Cmdconfig.SetProtocol(m_CommunicationFlow.m_Receiver)
|
|||
|
|
' li.Add((CmdType.SearchCommand, d_Cmdconfig))
|
|||
|
|
' m_CommunicationFlow.m_Transmitter.ClearSendData()
|
|||
|
|
Dim cont As Integer = 0
|
|||
|
|
For i = 0 To DataGridView1.Rows.Count - 1
|
|||
|
|
If DataGridView1.Rows(i).Cells(1).Value = 1 Then
|
|||
|
|
If Not Integer.TryParse(DataGridView1.Rows(i).Cells(2).Value, startaddr) Then
|
|||
|
|
MsgBox("未输入正确的发送地址!")
|
|||
|
|
Btn_Upgrade.PerformClick()
|
|||
|
|
Return result
|
|||
|
|
End If
|
|||
|
|
If Not Integer.TryParse(DataGridView1.Rows(i).Cells(2).Value, startaddr) Then
|
|||
|
|
MsgBox("未输入正确的发送地址!")
|
|||
|
|
Btn_Upgrade.PerformClick()
|
|||
|
|
Return result
|
|||
|
|
End If
|
|||
|
|
m_CommunicationFlow.m_Receiver.MainProcess(WorkflowType.FlashWrite, li, RText_OutputText, Myaddr, startaddr, Appbaud, UpBaud, Btn_Upgrade, DeviceType)
|
|||
|
|
cont += 1
|
|||
|
|
End If
|
|||
|
|
'Console.WriteLine(DataGridView1.Rows(i).Cells(2).Value)
|
|||
|
|
'Console.WriteLine(DataGridView1.Rows(i).Cells(1).Value)
|
|||
|
|
Next
|
|||
|
|
If cont = 0 Then
|
|||
|
|
MsgBox("未选择升级设备!!")
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
Else
|
|||
|
|
MsgBox("请先选择通信协议")
|
|||
|
|
Btn_Upgrade.PerformClick()
|
|||
|
|
Return result
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
End Function
|
|||
|
|
|
|||
|
|
Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed
|
|||
|
|
m_CommunicationFlow.StopThread()
|
|||
|
|
SaveSettings()
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
|
|||
|
|
If Button1.Text.Equals("群组升级") Then
|
|||
|
|
Button1.Text = "停止升级"
|
|||
|
|
'获取文件信息()
|
|||
|
|
Dim resultli As SendFileconig = ParsSelectedUpgradeFile(Tb_HexFilePath.Text)
|
|||
|
|
If IsNothing(resultli) Then
|
|||
|
|
MsgBox("文件解析失败")
|
|||
|
|
Button1.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If Not resultli.IsFileAnalysis Then
|
|||
|
|
MsgBox(resultli.Analysis)
|
|||
|
|
Button1.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
'EnterTheUpgradeProcess(resultli)
|
|||
|
|
'OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("结束升级!", Color.Black), 1)
|
|||
|
|
Dim BootTimeout, Myaddr, startaddr, stopaddr, Appbaud, UpBaud, EffTimeTime, DeviceType, vsendTimeout As Integer
|
|||
|
|
If Not Integer.TryParse(Sendtimeout.Text, vsendTimeout) Then
|
|||
|
|
MsgBox("未输入正确的超时时间!")
|
|||
|
|
Button1.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
If Not GetinputTextToint(EffTime.Text, EffTimeTime) Then
|
|||
|
|
MsgBox("未输入正确的有效时间!")
|
|||
|
|
Button1.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If IsNothing(m_CommunicationFlow.m_Transmitter) OrElse m_CommunicationFlow.m_Transmitter.IsTransmitter = False Then
|
|||
|
|
MsgBox("发送器未打开,请先打开发送器!")
|
|||
|
|
Button1.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If Not GetinputTextToint(txt_BootTimeout.Text, BootTimeout) Then
|
|||
|
|
MsgBox("未输入正确的超时时间!")
|
|||
|
|
Button1.PerformClick()
|
|||
|
|
Return
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
If Not Integer.TryParse(c_UpBaud.Text, UpBaud) Then
|
|||
|
|
MsgBox("未输入正确的波特率!")
|
|||
|
|
Button1.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If Not Integer.TryParse(ResendNumber.Text, startaddr) Then
|
|||
|
|
MsgBox("未输入正确的重发次数!")
|
|||
|
|
Button1.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If Not Integer.TryParse(ResendIntervalr.Text, stopaddr) Then
|
|||
|
|
MsgBox("未输入正确的发送间隔!")
|
|||
|
|
Button1.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If IsNothing(m_CommunicationFlow.m_Receiver) Then
|
|||
|
|
MsgBox("请先选择通信协议")
|
|||
|
|
Button1.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
If m_CommunicationFlow.IsCreateProtocol Then
|
|||
|
|
' DataGridView1.Rows.Clear()
|
|||
|
|
|
|||
|
|
''判断协议类对象是否是实例化
|
|||
|
|
' If m_CommunicationFlow.m_Receiver.IsCreateProtocol Then
|
|||
|
|
Dim d_Cmdconfig As Cmdconfig
|
|||
|
|
OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("开始群发升级设备!", Color.Black), 1)
|
|||
|
|
Dim li As List(Of (number As Integer, Cmdconfig)) = New List(Of (number As Integer, Cmdconfig))
|
|||
|
|
For i = CmdType.SearchCommand To CmdType.CheckCommand
|
|||
|
|
d_Cmdconfig = New Cmdconfig({i, 1, startaddr, stopaddr, vsendTimeout}) '命令 SN 重发次数 重发间隔 超时时间
|
|||
|
|
Select Case i
|
|||
|
|
Case CmdType.SearchCommand '搜索
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(BootTimeout)
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(EffTimeTime)
|
|||
|
|
|
|||
|
|
Case CmdType.skipCommand '跳转Boot
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(1)
|
|||
|
|
Case CmdType.SetUpParameters 's设置波特率
|
|||
|
|
d_Cmdconfig.CmdArgs.AddRange({UpBaud, BootTimeout})
|
|||
|
|
Case CmdType.WriteFlashData '写入Flash
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(resultli)
|
|||
|
|
d_Cmdconfig.CmdReceiveTimeout = 3
|
|||
|
|
Case CmdType.EraseFlashData '擦除
|
|||
|
|
d_Cmdconfig.CmdArgs.AddRange({2, resultli.SendAddr, resultli.SendLen})
|
|||
|
|
Case CmdType.CheckCommand '校验
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(resultli)
|
|||
|
|
Case Else
|
|||
|
|
Continue For
|
|||
|
|
|
|||
|
|
End Select
|
|||
|
|
|
|||
|
|
|
|||
|
|
d_Cmdconfig.SetProtocol(m_CommunicationFlow.m_Receiver)
|
|||
|
|
li.Add((i, d_Cmdconfig))
|
|||
|
|
|
|||
|
|
Next
|
|||
|
|
|
|||
|
|
If mtest(CmdType.SearchCommand, WorkflowType.FlashGroupUpgrade, li, Button1) Then
|
|||
|
|
|
|||
|
|
Else
|
|||
|
|
OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("参数异常,搜索结束!", Color.Red), 1)
|
|||
|
|
'Button1_Click(Nothing, Nothing)
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
|
|||
|
|
Else
|
|||
|
|
MsgBox("请先选择通信协议")
|
|||
|
|
Button1.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
Else
|
|||
|
|
Button1.Text = "群组升级"
|
|||
|
|
If Not IsNothing(m_CommunicationFlow.m_Receiver) Then
|
|||
|
|
'Dim mReceiver As BLV_Bootloader = m_CommunicationFlow.m_Receiver
|
|||
|
|
'm_CommunicationFlow.m_Receiver.SetSearchEquipmentProcessSwitch(False)
|
|||
|
|
m_CommunicationFlow.SetThreadFlag(False)
|
|||
|
|
End If
|
|||
|
|
If IsNothing(sender) Then Return
|
|||
|
|
'Btn_Search.Text = "Search"
|
|||
|
|
OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("停止升级群组设备!", Color.Black), 1)
|
|||
|
|
End If
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub btn_Reload_Click(sender As Object, e As EventArgs) Handles btn_Reload.Click
|
|||
|
|
If btn_Reload.Text = "停止Boot搜索" Then
|
|||
|
|
If Not IsNothing(m_CommunicationFlow.m_Receiver) Then
|
|||
|
|
Dim mReceiver As BLV_Bootloader = m_CommunicationFlow.m_Receiver
|
|||
|
|
m_CommunicationFlow.m_Receiver.SetSearchEquipmentProcessSwitch(False)
|
|||
|
|
m_CommunicationFlow.SetThreadFlag(False)
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
If IsNothing(sender) Then Return
|
|||
|
|
btn_Reload.Text = "Boot搜索"
|
|||
|
|
OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("停止搜索设备!", Color.Black), 1)
|
|||
|
|
Else
|
|||
|
|
btn_Reload.Text = "停止Boot搜索"
|
|||
|
|
If IsNothing(m_CommunicationFlow.m_Transmitter) OrElse m_CommunicationFlow.m_Transmitter.IsTransmitter = False Then
|
|||
|
|
MsgBox("发送器未打开,请先打开发送器!")
|
|||
|
|
btn_Reload.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If IsNothing(m_CommunicationFlow.m_Receiver) Then
|
|||
|
|
MsgBox("请先选择通信协议")
|
|||
|
|
btn_Reload.PerformClick()
|
|||
|
|
Return
|
|||
|
|
Else
|
|||
|
|
Dim BootTimeout, Myaddr, startaddr, stopaddr, EffTimeTime, vsendTimeout, UpBaud As Integer
|
|||
|
|
If Not GetinputTextToint(txt_BootTimeout.Text, BootTimeout) Then
|
|||
|
|
MsgBox("未输入正确的超时时间!")
|
|||
|
|
btn_Reload.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If Not GetinputTextToint(EffTime.Text, EffTimeTime) Then
|
|||
|
|
MsgBox("未输入正确的有效时间!")
|
|||
|
|
btn_Reload.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
'If Not Integer.TryParse(Txt_Myaddr.Text, Myaddr) Then
|
|||
|
|
' MsgBox("未输入正确的本机地址!")
|
|||
|
|
' btn_Reload.PerformClick()
|
|||
|
|
' Return
|
|||
|
|
'End If
|
|||
|
|
'If Not Integer.TryParse(Txt_startaddr.Text, startaddr) OrElse Not Integer.TryParse(Txt_stopaddr.Text, startaddr) Then
|
|||
|
|
' MsgBox("未输入正确的起始地址或结束地址!")
|
|||
|
|
' btn_Reload.PerformClick()
|
|||
|
|
' Return
|
|||
|
|
'End If
|
|||
|
|
If Not Integer.TryParse(Sendtimeout.Text, vsendTimeout) Then
|
|||
|
|
MsgBox("未输入正确的超时时间!")
|
|||
|
|
btn_Reload.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
DataGridView1.Rows.Clear()
|
|||
|
|
|
|||
|
|
'判断协议类对象是否是实例化
|
|||
|
|
If m_CommunicationFlow.IsCreateProtocol Then
|
|||
|
|
|
|||
|
|
OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("开始搜索设备!", Color.Black), 1)
|
|||
|
|
Dim li As List(Of (number As Integer, Cmdconfig)) = New List(Of (number As Integer, Cmdconfig))
|
|||
|
|
|
|||
|
|
Dim d_Cmdconfig As Cmdconfig = New Cmdconfig({CmdType.SearchCommand, 1, 0, 10, vsendTimeout})
|
|||
|
|
|
|||
|
|
|
|||
|
|
'Integer.TryParse(txt_BootTimeout.Text, BootTimeout)
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(BootTimeout)
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(EffTimeTime)
|
|||
|
|
d_Cmdconfig.SetProtocol(m_CommunicationFlow.m_Receiver)
|
|||
|
|
d_Cmdconfig.setCmdSendcontinueTime(60)
|
|||
|
|
li.Add((CmdType.SearchCommand, d_Cmdconfig))
|
|||
|
|
m_CommunicationFlow.m_Transmitter.ClearSendData()
|
|||
|
|
'm_CommunicationFlow.m_Receiver.MainProcess(WorkflowType.SearchEquipment, li, 60, DataGridView1, RText_OutputText, CInt(Txt_Myaddr.Text), CInt(Txt_startaddr.Text), CInt(Txt_stopaddr.Text), CInt(Cbo_Baud.Text), Btn_Search)
|
|||
|
|
|
|||
|
|
If mtest(CmdType.SearchCommand, WorkflowType.BootSearchEquipment, li, btn_Reload) Then
|
|||
|
|
|
|||
|
|
Else
|
|||
|
|
OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("参数异常,搜索结束!", Color.Red), 1)
|
|||
|
|
'btn_Reload_Click(Nothing, Nothing)
|
|||
|
|
End If
|
|||
|
|
Else
|
|||
|
|
MsgBox("请先选择通信协议")
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
End If
|
|||
|
|
' OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("结束搜索设备!", Color.Black), 1)
|
|||
|
|
'btn_Reload(Nothing, Nothing)
|
|||
|
|
|
|||
|
|
|
|||
|
|
End If
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub Chk_UpgradeAllSel_CheckedChanged(sender As Object, e As EventArgs) Handles Chk_UpgradeAllSel.CheckedChanged
|
|||
|
|
If IsUpgradeAllSel Then Return
|
|||
|
|
For i = 0 To DataGridView1.Rows.Count - 1
|
|||
|
|
DataGridView1.Rows(i).Cells(1).Value = Chk_UpgradeAllSel.Checked
|
|||
|
|
Next
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub CboLocalIp_TextChanged(sender As Object, e As EventArgs) Handles CboLongIP.TextChanged, CboLocalIp.TextChanged
|
|||
|
|
'If IsNothing(m_CommunicationFlow.m_Transmitter) Then
|
|||
|
|
' Tab_SerialSettings_SelectedIndexChanged(Nothing, Nothing)
|
|||
|
|
'End If
|
|||
|
|
'Dim cb As ComboBox = sender
|
|||
|
|
'If String.IsNullOrEmpty(cb.Text) Then
|
|||
|
|
' If cb.Name = "CboLocalIp" Then
|
|||
|
|
' MsgBox("请选择本地IP地址!")
|
|||
|
|
' ElseIf cb.Name = "CboLongIP" Then
|
|||
|
|
' MsgBox("请选择远程IP地址!")
|
|||
|
|
' End If
|
|||
|
|
' Return
|
|||
|
|
'End If
|
|||
|
|
'm_CommunicationFlow.m_Transmitter.SetTransmitterParameter(CboLocalIp.Text, NudLocalPort.Value, CboLongIP.Text, NudRemotePort.Value)
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub NudLocalPort_ValueChanged(sender As Object, e As EventArgs) Handles NudLocalPort.ValueChanged, NudRemotePort.ValueChanged
|
|||
|
|
'Dim cb As ComboBox = sender
|
|||
|
|
'If String.IsNullOrEmpty(cb.Text) Then
|
|||
|
|
' If cb.Name = "CboLocalIp" Then
|
|||
|
|
' MsgBox("请选择本地IP地址!")
|
|||
|
|
' ElseIf cb.Name = "CboLongIP" Then
|
|||
|
|
' MsgBox("请选择远程IP地址!")
|
|||
|
|
' End If
|
|||
|
|
' Return
|
|||
|
|
'End If
|
|||
|
|
'm_CommunicationFlow.m_Transmitter.SetTransmitterParameter(CboLocalIp.Text, NudLocalPort.Value, CboLongIP.Text, NudRemotePort.Value)
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub txt_cdataleng_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txt_cdataleng.KeyPress, txt_BlockLength.KeyPress
|
|||
|
|
e.Handled = Not $"0123456789{vbBack}".Contains(e.KeyChar) '如果要只允许输入数字,
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
Private Sub ReadDevbtn_Click(sender As Object, e As EventArgs) Handles ReadDevbtn.Click
|
|||
|
|
|
|||
|
|
If IsNothing(m_CommunicationFlow.m_Transmitter) OrElse m_CommunicationFlow.m_Transmitter.IsTransmitter = False Then
|
|||
|
|
MsgBox("发送器未打开,请先打开发送器!")
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If IsNothing(m_CommunicationFlow.m_Receiver) Then
|
|||
|
|
MsgBox("请先选择通信协议")
|
|||
|
|
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
Dim BootTimeout, Myaddr, startaddr, stopaddr, EffTimeTime, vsendTimeout, UpBaud As Integer
|
|||
|
|
If Not GetinputTextToint(TextBox1.Text, BootTimeout) Then
|
|||
|
|
MsgBox("未输入正确的读取地址!")
|
|||
|
|
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If Not Integer.TryParse(TextBox2.Text, EffTimeTime) Then
|
|||
|
|
MsgBox("未输入正确的读取长度!")
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
If Not Integer.TryParse(Sendtimeout.Text, vsendTimeout) Then
|
|||
|
|
MsgBox("未输入正确的超时时间!")
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
'DataGridView1.Rows.Clear()
|
|||
|
|
|
|||
|
|
'判断协议类对象是否是实例化
|
|||
|
|
If m_CommunicationFlow.IsCreateProtocol Then
|
|||
|
|
|
|||
|
|
'OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("开始读取设备!", Color.Black), 1)
|
|||
|
|
|
|||
|
|
|
|||
|
|
Dim li As List(Of (number As Integer, Cmdconfig)) = New List(Of (number As Integer, Cmdconfig))
|
|||
|
|
'这里要增加一个跳转命令
|
|||
|
|
Dim d_Cmdconfig As Cmdconfig = New Cmdconfig({CmdType.ReadingFlashData, 1, 0, 10, vsendTimeout}) '命令 SN 重发次数 重发间隔 超时时间
|
|||
|
|
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(BootTimeout)
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(EffTimeTime)
|
|||
|
|
|
|||
|
|
d_Cmdconfig.SetProtocol(m_CommunicationFlow.m_Receiver)
|
|||
|
|
li.Add((CmdType.ReadingFlashData, d_Cmdconfig))
|
|||
|
|
|
|||
|
|
|
|||
|
|
m_CommunicationFlow.m_Transmitter.ClearSendData()
|
|||
|
|
'm_CommunicationFlow.m_Receiver.MainProcess(WorkflowType.SearchEquipment, li, 60, DataGridView1, RText_OutputText, CInt(Txt_Myaddr.Text), CInt(Txt_startaddr.Text), CInt(Txt_stopaddr.Text), CInt(Cbo_Baud.Text), Btn_Search)
|
|||
|
|
|
|||
|
|
If mtest(CmdType.ReadingFlashData, WorkflowType.none, li, ReadDevbtn) Then
|
|||
|
|
|
|||
|
|
Else
|
|||
|
|
OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("参数异常,结束!", Color.Red), 1)
|
|||
|
|
'Btn_Search_Click_1(Nothing, Nothing)
|
|||
|
|
End If
|
|||
|
|
Else
|
|||
|
|
MsgBox("请先选择通信协议")
|
|||
|
|
ReadDevbtn.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
|
|||
|
|
If IsNothing(m_CommunicationFlow.m_Transmitter) OrElse m_CommunicationFlow.m_Transmitter.IsTransmitter = False Then
|
|||
|
|
MsgBox("发送器未打开,请先打开发送器!")
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If IsNothing(m_CommunicationFlow.m_Receiver) Then
|
|||
|
|
MsgBox("请先选择通信协议")
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
Dim BootTimeout, Myaddr, startaddr, stopaddr, EffTimeTime, vsendTimeout, UpBaud As Integer
|
|||
|
|
If Not GetinputTextToint(TextBox4.Text, BootTimeout) Then
|
|||
|
|
MsgBox("未输入正确的校验起始地址!")
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If Not GetinputTextToint(TextBox5.Text, EffTimeTime) Then
|
|||
|
|
MsgBox("未输入正确的校验结束地址!")
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If Not GetinputTextToint(TextBox6.Text, UpBaud) Then
|
|||
|
|
MsgBox("未输入正确的校验值!")
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
If Not GetinputTextToint(Sendtimeout.Text, vsendTimeout) Then
|
|||
|
|
MsgBox("未输入正确的超时时间!")
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
'If TextBox3.Text.Trim.Equals("1") Then
|
|||
|
|
' Myaddr = 1
|
|||
|
|
'ElseIf TextBox3.Text.Trim.Equals("2") Then
|
|||
|
|
' Myaddr = 2
|
|||
|
|
'Else
|
|||
|
|
' MsgBox("未输入正确的地址!")
|
|||
|
|
' Return
|
|||
|
|
'End If
|
|||
|
|
|
|||
|
|
'DataGridView1.Rows.Clear()
|
|||
|
|
|
|||
|
|
'判断协议类对象是否是实例化
|
|||
|
|
If m_CommunicationFlow.IsCreateProtocol Then
|
|||
|
|
|
|||
|
|
'OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("开始读取设备!", Color.Black), 1)
|
|||
|
|
|
|||
|
|
|
|||
|
|
Dim li As List(Of (number As Integer, Cmdconfig)) = New List(Of (number As Integer, Cmdconfig))
|
|||
|
|
'这里要增加一个跳转命令
|
|||
|
|
Dim d_Cmdconfig As Cmdconfig = New Cmdconfig({CmdType.SetUpParameters, 1, 0, 10, vsendTimeout}) '命令 SN 重发次数 重发间隔 超时时间
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(BootTimeout)
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(EffTimeTime)
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(UpBaud)
|
|||
|
|
d_Cmdconfig.SetProtocol(m_CommunicationFlow.m_Receiver)
|
|||
|
|
li.Add((CmdType.SetUpParameters, d_Cmdconfig))
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
m_CommunicationFlow.m_Transmitter.ClearSendData()
|
|||
|
|
'm_CommunicationFlow.m_Receiver.MainProcess(WorkflowType.SearchEquipment, li, 60, DataGridView1, RText_OutputText, CInt(Txt_Myaddr.Text), CInt(Txt_startaddr.Text), CInt(Txt_stopaddr.Text), CInt(Cbo_Baud.Text), Btn_Search)
|
|||
|
|
|
|||
|
|
If mtest(CmdType.SetUpParameters, WorkflowType.none, li, ReadDevbtn) Then
|
|||
|
|
|
|||
|
|
Else
|
|||
|
|
OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("参数异常,结束!", Color.Red), 1)
|
|||
|
|
'Btn_Search_Click_1(Nothing, Nothing)
|
|||
|
|
End If
|
|||
|
|
Else
|
|||
|
|
MsgBox("请先选择通信协议")
|
|||
|
|
ReadDevbtn.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
|
|||
|
|
If IsNothing(m_CommunicationFlow.m_Transmitter) OrElse m_CommunicationFlow.m_Transmitter.IsTransmitter = False Then
|
|||
|
|
MsgBox("发送器未打开,请先打开发送器!")
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If IsNothing(m_CommunicationFlow.m_Receiver) Then
|
|||
|
|
MsgBox("请先选择通信协议")
|
|||
|
|
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
Dim BootTimeout, Myaddr, startaddr, stopaddr, EffTimeTime, vsendTimeout, UpBaud As Integer
|
|||
|
|
'If Not GetinputTextToint(TextBox1.Text, BootTimeout) Then
|
|||
|
|
' MsgBox("未输入正确的读取地址!")
|
|||
|
|
|
|||
|
|
'Return
|
|||
|
|
'End If
|
|||
|
|
If Not Integer.TryParse(Cbo_Baud.Text, EffTimeTime) Then
|
|||
|
|
MsgBox("未输入正确的APP波特率!")
|
|||
|
|
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
If Not Integer.TryParse(Sendtimeout.Text, vsendTimeout) Then
|
|||
|
|
MsgBox("未输入正确的超时时间!")
|
|||
|
|
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
'If TextBox3.Text.Trim.Equals("1") Then
|
|||
|
|
' Myaddr = 1
|
|||
|
|
'ElseIf TextBox3.Text.Trim.Equals("2") Then
|
|||
|
|
' Myaddr = 2
|
|||
|
|
'Else
|
|||
|
|
' MsgBox("未输入正确的地址!")
|
|||
|
|
' Return
|
|||
|
|
'End If
|
|||
|
|
|
|||
|
|
'DataGridView1.Rows.Clear()
|
|||
|
|
|
|||
|
|
'判断协议类对象是否是实例化
|
|||
|
|
If m_CommunicationFlow.IsCreateProtocol Then
|
|||
|
|
|
|||
|
|
'OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("开始读取设备!", Color.Black), 1)
|
|||
|
|
|
|||
|
|
|
|||
|
|
Dim li As List(Of (number As Integer, Cmdconfig)) = New List(Of (number As Integer, Cmdconfig))
|
|||
|
|
'这里要增加一个跳转命令
|
|||
|
|
Dim d_Cmdconfig As Cmdconfig = New Cmdconfig({CmdType.SetUpParameters, 1, 0, 10, vsendTimeout}) '命令 SN 重发次数 重发间隔 超时时间
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(EffTimeTime)
|
|||
|
|
d_Cmdconfig.SetProtocol(m_CommunicationFlow.m_Receiver)
|
|||
|
|
li.Add((CmdType.SetUpParameters, d_Cmdconfig))
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
m_CommunicationFlow.m_Transmitter.ClearSendData()
|
|||
|
|
'm_CommunicationFlow.m_Receiver.MainProcess(WorkflowType.SearchEquipment, li, 60, DataGridView1, RText_OutputText, CInt(Txt_Myaddr.Text), CInt(Txt_startaddr.Text), CInt(Txt_stopaddr.Text), CInt(Cbo_Baud.Text), Btn_Search)
|
|||
|
|
|
|||
|
|
If mtest(CmdType.SetUpParameters, WorkflowType.none, li, ReadDevbtn) Then
|
|||
|
|
|
|||
|
|
Else
|
|||
|
|
OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("参数异常,结束!", Color.Red), 1)
|
|||
|
|
'Btn_Search_Click_1(Nothing, Nothing)
|
|||
|
|
End If
|
|||
|
|
Else
|
|||
|
|
MsgBox("请先选择通信协议")
|
|||
|
|
ReadDevbtn.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
|
|||
|
|
If IsNothing(m_CommunicationFlow.m_Transmitter) OrElse m_CommunicationFlow.m_Transmitter.IsTransmitter = False Then
|
|||
|
|
MsgBox("发送器未打开,请先打开发送器!")
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If IsNothing(m_CommunicationFlow.m_Receiver) Then
|
|||
|
|
MsgBox("请先选择通信协议")
|
|||
|
|
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
Dim BootTimeout, Myaddr, startaddr, stopaddr, EffTimeTime, vsendTimeout, UpBaud As Integer
|
|||
|
|
'If Not GetinputTextToint(TextBox1.Text, BootTimeout) Then
|
|||
|
|
' MsgBox("未输入正确的读取地址!")
|
|||
|
|
|
|||
|
|
'Return
|
|||
|
|
'End If
|
|||
|
|
'If Not Integer.TryParse(TextBox2.Text, EffTimeTime) Then
|
|||
|
|
' MsgBox("未输入正确的读取长度!")
|
|||
|
|
|
|||
|
|
'Return
|
|||
|
|
'End If
|
|||
|
|
|
|||
|
|
If Not Integer.TryParse(Sendtimeout.Text, vsendTimeout) Then
|
|||
|
|
MsgBox("未输入正确的超时时间!")
|
|||
|
|
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If TextBox3.Text.Trim.Equals("1") Then
|
|||
|
|
Myaddr = 1
|
|||
|
|
ElseIf TextBox3.Text.Trim.Equals("2") Then
|
|||
|
|
Myaddr = 2
|
|||
|
|
Else
|
|||
|
|
MsgBox("未输入正确的地址!")
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
'DataGridView1.Rows.Clear()
|
|||
|
|
|
|||
|
|
'判断协议类对象是否是实例化
|
|||
|
|
If m_CommunicationFlow.IsCreateProtocol Then
|
|||
|
|
|
|||
|
|
'OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("开始读取设备!", Color.Black), 1)
|
|||
|
|
|
|||
|
|
|
|||
|
|
Dim li As List(Of (number As Integer, Cmdconfig)) = New List(Of (number As Integer, Cmdconfig))
|
|||
|
|
'这里要增加一个跳转命令
|
|||
|
|
Dim d_Cmdconfig As Cmdconfig = New Cmdconfig({CmdType.skipCommand, 1, 0, 10, vsendTimeout}) '命令 SN 重发次数 重发间隔 超时时间
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(Myaddr)
|
|||
|
|
d_Cmdconfig.SetProtocol(m_CommunicationFlow.m_Receiver)
|
|||
|
|
li.Add((CmdType.skipCommand, d_Cmdconfig))
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
m_CommunicationFlow.m_Transmitter.ClearSendData()
|
|||
|
|
'm_CommunicationFlow.m_Receiver.MainProcess(WorkflowType.SearchEquipment, li, 60, DataGridView1, RText_OutputText, CInt(Txt_Myaddr.Text), CInt(Txt_startaddr.Text), CInt(Txt_stopaddr.Text), CInt(Cbo_Baud.Text), Btn_Search)
|
|||
|
|
|
|||
|
|
If mtest(CmdType.skipCommand, WorkflowType.none, li, ReadDevbtn) Then
|
|||
|
|
|
|||
|
|
Else
|
|||
|
|
OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("参数异常,结束!", Color.Red), 1)
|
|||
|
|
'Btn_Search_Click_1(Nothing, Nothing)
|
|||
|
|
End If
|
|||
|
|
Else
|
|||
|
|
MsgBox("请先选择通信协议")
|
|||
|
|
ReadDevbtn.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
|
|||
|
|
If IsNothing(m_CommunicationFlow.m_Transmitter) OrElse m_CommunicationFlow.m_Transmitter.IsTransmitter = False Then
|
|||
|
|
MsgBox("发送器未打开,请先打开发送器!")
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If IsNothing(m_CommunicationFlow.m_Receiver) Then
|
|||
|
|
MsgBox("请先选择通信协议")
|
|||
|
|
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
Dim BootTimeout, Myaddr, startaddr, stopaddr, EffTimeTime, vsendTimeout, UpBaud As Integer
|
|||
|
|
'If Not GetinputTextToint(TextBox1.Text, BootTimeout) Then
|
|||
|
|
' MsgBox("未输入正确的读取地址!")
|
|||
|
|
|
|||
|
|
'Return
|
|||
|
|
'End If
|
|||
|
|
'If Not Integer.TryParse(TextBox2.Text, EffTimeTime) Then
|
|||
|
|
' MsgBox("未输入正确的读取长度!")
|
|||
|
|
|
|||
|
|
'Return
|
|||
|
|
'End If
|
|||
|
|
|
|||
|
|
'If Not Integer.TryParse(Sendtimeout.Text, vsendTimeout) Then
|
|||
|
|
' MsgBox("未输入正确的超时时间!")
|
|||
|
|
|
|||
|
|
' Return
|
|||
|
|
'End If
|
|||
|
|
'If TextBox3.Text.Trim.Equals("1") Then
|
|||
|
|
' Myaddr = 1
|
|||
|
|
'ElseIf TextBox3.Text.Trim.Equals("2") Then
|
|||
|
|
' Myaddr = 2
|
|||
|
|
'Else
|
|||
|
|
' MsgBox("未输入正确的地址!")
|
|||
|
|
' Return
|
|||
|
|
'End If
|
|||
|
|
|
|||
|
|
'DataGridView1.Rows.Clear()
|
|||
|
|
|
|||
|
|
'判断协议类对象是否是实例化
|
|||
|
|
If m_CommunicationFlow.IsCreateProtocol Then
|
|||
|
|
|
|||
|
|
'OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("开始读取设备!", Color.Black), 1)
|
|||
|
|
|
|||
|
|
|
|||
|
|
Dim li As List(Of (number As Integer, Cmdconfig)) = New List(Of (number As Integer, Cmdconfig))
|
|||
|
|
'这里要增加一个跳转命令
|
|||
|
|
Dim d_Cmdconfig As Cmdconfig = New Cmdconfig({CmdType.EraseFlashData, 1, 0, 10, vsendTimeout}) '命令 SN 重发次数 重发间隔 超时时间
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(2)
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(0)
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(0)
|
|||
|
|
d_Cmdconfig.SetProtocol(m_CommunicationFlow.m_Receiver)
|
|||
|
|
li.Add((CmdType.EraseFlashData, d_Cmdconfig))
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
m_CommunicationFlow.m_Transmitter.ClearSendData()
|
|||
|
|
'm_CommunicationFlow.m_Receiver.MainProcess(WorkflowType.SearchEquipment, li, 60, DataGridView1, RText_OutputText, CInt(Txt_Myaddr.Text), CInt(Txt_startaddr.Text), CInt(Txt_stopaddr.Text), CInt(Cbo_Baud.Text), Btn_Search)
|
|||
|
|
|
|||
|
|
If mtest(CmdType.EraseFlashData, WorkflowType.none, li, ReadDevbtn) Then
|
|||
|
|
|
|||
|
|
Else
|
|||
|
|
OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("参数异常,结束!", Color.Red), 1)
|
|||
|
|
'Btn_Search_Click_1(Nothing, Nothing)
|
|||
|
|
End If
|
|||
|
|
Else
|
|||
|
|
MsgBox("请先选择通信协议")
|
|||
|
|
ReadDevbtn.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click
|
|||
|
|
|
|||
|
|
If IsNothing(m_CommunicationFlow.m_Transmitter) OrElse m_CommunicationFlow.m_Transmitter.IsTransmitter = False Then
|
|||
|
|
MsgBox("发送器未打开,请先打开发送器!")
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If IsNothing(m_CommunicationFlow.m_Receiver) Then
|
|||
|
|
MsgBox("请先选择通信协议")
|
|||
|
|
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
Dim BootTimeout, Myaddr, startaddr, stopaddr, EffTimeTime, vsendTimeout, UpBaud As Integer
|
|||
|
|
If Not GetinputTextToint(TextBox1.Text, BootTimeout) Then
|
|||
|
|
MsgBox("未输入正确的读取地址!")
|
|||
|
|
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If Not Integer.TryParse(TextBox2.Text, EffTimeTime) Then
|
|||
|
|
MsgBox("未输入正确的读取长度!")
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
If Not Integer.TryParse(Sendtimeout.Text, vsendTimeout) Then
|
|||
|
|
MsgBox("未输入正确的超时时间!")
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
'DataGridView1.Rows.Clear()
|
|||
|
|
|
|||
|
|
'判断协议类对象是否是实例化
|
|||
|
|
If m_CommunicationFlow.IsCreateProtocol Then
|
|||
|
|
|
|||
|
|
'OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("开始读取设备!", Color.Black), 1)
|
|||
|
|
|
|||
|
|
|
|||
|
|
Dim li As List(Of (number As Integer, Cmdconfig)) = New List(Of (number As Integer, Cmdconfig))
|
|||
|
|
'这里要增加一个跳转命令
|
|||
|
|
Dim d_Cmdconfig As Cmdconfig = New Cmdconfig({CmdType.ReadingEEPROMData, 1, 0, 10, vsendTimeout}) '命令 SN 重发次数 重发间隔 超时时间
|
|||
|
|
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(BootTimeout)
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(EffTimeTime)
|
|||
|
|
|
|||
|
|
d_Cmdconfig.SetProtocol(m_CommunicationFlow.m_Receiver)
|
|||
|
|
li.Add((CmdType.ReadingEEPROMData, d_Cmdconfig))
|
|||
|
|
|
|||
|
|
|
|||
|
|
m_CommunicationFlow.m_Transmitter.ClearSendData()
|
|||
|
|
'm_CommunicationFlow.m_Receiver.MainProcess(WorkflowType.SearchEquipment, li, 60, DataGridView1, RText_OutputText, CInt(Txt_Myaddr.Text), CInt(Txt_startaddr.Text), CInt(Txt_stopaddr.Text), CInt(Cbo_Baud.Text), Btn_Search)
|
|||
|
|
|
|||
|
|
If mtest(CmdType.ReadingEEPROMData, WorkflowType.none, li, ReadDevbtn) Then
|
|||
|
|
|
|||
|
|
Else
|
|||
|
|
OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("参数异常,结束!", Color.Red), 1)
|
|||
|
|
'Btn_Search_Click_1(Nothing, Nothing)
|
|||
|
|
End If
|
|||
|
|
Else
|
|||
|
|
MsgBox("请先选择通信协议")
|
|||
|
|
ReadDevbtn.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
|
|||
|
|
If IsNothing(m_CommunicationFlow.m_Transmitter) OrElse m_CommunicationFlow.m_Transmitter.IsTransmitter = False Then
|
|||
|
|
MsgBox("发送器未打开,请先打开发送器!")
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
If IsNothing(m_CommunicationFlow.m_Receiver) Then
|
|||
|
|
MsgBox("请先选择通信协议")
|
|||
|
|
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
Dim BootTimeout, Myaddr, startaddr, stopaddr, EffTimeTime, vsendTimeout, UpBaud As Integer
|
|||
|
|
'If Not GetinputTextToint(TextBox1.Text, BootTimeout) Then
|
|||
|
|
' MsgBox("未输入正确的读取地址!")
|
|||
|
|
|
|||
|
|
'Return
|
|||
|
|
'End If
|
|||
|
|
'If Not Integer.TryParse(TextBox2.Text, EffTimeTime) Then
|
|||
|
|
' MsgBox("未输入正确的读取长度!")
|
|||
|
|
|
|||
|
|
'Return
|
|||
|
|
'End If
|
|||
|
|
|
|||
|
|
'If Not Integer.TryParse(Sendtimeout.Text, vsendTimeout) Then
|
|||
|
|
' MsgBox("未输入正确的超时时间!")
|
|||
|
|
|
|||
|
|
' Return
|
|||
|
|
'End If
|
|||
|
|
'If TextBox3.Text.Trim.Equals("1") Then
|
|||
|
|
' Myaddr = 1
|
|||
|
|
'ElseIf TextBox3.Text.Trim.Equals("2") Then
|
|||
|
|
' Myaddr = 2
|
|||
|
|
'Else
|
|||
|
|
' MsgBox("未输入正确的地址!")
|
|||
|
|
' Return
|
|||
|
|
'End If
|
|||
|
|
|
|||
|
|
'DataGridView1.Rows.Clear()
|
|||
|
|
|
|||
|
|
'判断协议类对象是否是实例化
|
|||
|
|
If m_CommunicationFlow.IsCreateProtocol Then
|
|||
|
|
|
|||
|
|
'OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("开始读取设备!", Color.Black), 1)
|
|||
|
|
|
|||
|
|
|
|||
|
|
Dim li As List(Of (number As Integer, Cmdconfig)) = New List(Of (number As Integer, Cmdconfig))
|
|||
|
|
'这里要增加一个跳转命令
|
|||
|
|
Dim d_Cmdconfig As Cmdconfig = New Cmdconfig({CmdType.EraseEEPROMData, 1, 0, 10, vsendTimeout}) '命令 SN 重发次数 重发间隔 超时时间
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(2)
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(0)
|
|||
|
|
d_Cmdconfig.CmdArgs.Add(0)
|
|||
|
|
d_Cmdconfig.SetProtocol(m_CommunicationFlow.m_Receiver)
|
|||
|
|
li.Add((CmdType.EraseEEPROMData, d_Cmdconfig))
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
m_CommunicationFlow.m_Transmitter.ClearSendData()
|
|||
|
|
'm_CommunicationFlow.m_Receiver.MainProcess(WorkflowType.SearchEquipment, li, 60, DataGridView1, RText_OutputText, CInt(Txt_Myaddr.Text), CInt(Txt_startaddr.Text), CInt(Txt_stopaddr.Text), CInt(Cbo_Baud.Text), Btn_Search)
|
|||
|
|
|
|||
|
|
If mtest(CmdType.EraseEEPROMData, WorkflowType.none, li, ReadDevbtn) Then
|
|||
|
|
|
|||
|
|
Else
|
|||
|
|
OutputLogsToTheControl(RText_OutputText, New RuningLogConfig("参数异常,结束!", Color.Red), 1)
|
|||
|
|
'Btn_Search_Click_1(Nothing, Nothing)
|
|||
|
|
End If
|
|||
|
|
Else
|
|||
|
|
MsgBox("请先选择通信协议")
|
|||
|
|
ReadDevbtn.PerformClick()
|
|||
|
|
Return
|
|||
|
|
End If
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
|
|||
|
|
If CheckBox1.Checked Then
|
|||
|
|
RuningLog.SetLevel(0)
|
|||
|
|
Else
|
|||
|
|
RuningLog.SetLevel(1)
|
|||
|
|
End If
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
|
|||
|
|
End Class
|
|||
|
|
|
|||
|
|
Public Class SendFileconig
|
|||
|
|
'解析文件成功标志
|
|||
|
|
Public Property IsFileAnalysis As Boolean
|
|||
|
|
'解析消息
|
|||
|
|
Public Property Analysis As String
|
|||
|
|
|
|||
|
|
'发送地址
|
|||
|
|
Public Property SendAddr As UInt32
|
|||
|
|
'发送长度
|
|||
|
|
Public Property SendLen As UInt32
|
|||
|
|
'结束地址
|
|||
|
|
Public Property EndAddr As UInt32
|
|||
|
|
'发送数据
|
|||
|
|
Public Property Sendlist As List(Of (number As Integer, List(Of Byte)))
|
|||
|
|
'分块
|
|||
|
|
Public Property BlockLength As Integer
|
|||
|
|
'版本名称
|
|||
|
|
Public VersionsName As String
|
|||
|
|
'版本分组
|
|||
|
|
Public VersionsGroup As String
|
|||
|
|
'版本号
|
|||
|
|
Public VersionsNumber As Integer
|
|||
|
|
Public NVersions As String
|
|||
|
|
|
|||
|
|
|
|||
|
|
Sub New()
|
|||
|
|
Sendlist = New List(Of (number As Integer, List(Of Byte)))
|
|||
|
|
BlockLength = 512
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
'设置版本信息
|
|||
|
|
Public Function SetVersionsInfo(Versions As String) As Boolean
|
|||
|
|
'判断首尾是否是***
|
|||
|
|
If Versions.StartsWith("***") AndAlso Versions.EndsWith("***") Then
|
|||
|
|
Versions = Versions.Trim("***")
|
|||
|
|
'判断以_切割能否分出3个
|
|||
|
|
Dim VersionsArr() As String = Versions.Split("_")
|
|||
|
|
If VersionsArr.Length = 3 Then
|
|||
|
|
'判断第2个是否为Bootloader
|
|||
|
|
If VersionsArr(1).ToLower = "bootloader" Then
|
|||
|
|
Dim cv As Integer = 0
|
|||
|
|
VersionsName = VersionsArr(0)
|
|||
|
|
VersionsGroup = VersionsArr(1)
|
|||
|
|
VersionsNumber = Integer.TryParse((VersionsArr(2).Replace("V", "").Replace("v", "")), cv)
|
|||
|
|
NVersions = Versions
|
|||
|
|
Return True
|
|||
|
|
End If
|
|||
|
|
End If
|
|||
|
|
End If
|
|||
|
|
Return False
|
|||
|
|
End Function
|
|||
|
|
|
|||
|
|
|
|||
|
|
End Class
|