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 '判断键值对存不存该键值 ''' ''' ''' ''' ''' 1获取 2设置 ''' 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对象 ''' ''' ''' ''' 第一个流程节点 ''' 流程列表 ''' 功能类型 ''' 触发按钮 ''' 运行状态 ''' 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 &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