Files
2025-12-11 10:09:40 +08:00

2194 lines
89 KiB
VB.net
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 IsNothingm_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