Imports System.Net Imports System.Net.Sockets Imports System.IO Imports System.Text Imports System.Threading Imports System.ComponentModel Imports System.Management Imports System.Net.NetworkInformation Public Class FrmCSeriesConfig Dim ftp As blvFtpServer Sub New(nftp As blvFtpServer) ' 此调用是设计器所必需的。 InitializeComponent() ftp = nftp ' 在 InitializeComponent() 调用之后添加任何初始化。 End Sub #Region "多语种信息" ''' ''' 初始化界面控件文本 ''' Private Sub MultiLanguageInfo() Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.CSeriesConfigTools) ToolStripMenuItem1.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Manage) TSMSwitchHotel.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.SwitchHotel) ToolStripMenuItem.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.SwitchUser) TStMSerialPortSetting.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.SerialportSettings) ToolStripMenuItemExit.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.HomeExit) ToolStripMenuItem2.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.HomeHelp) ToolStripMenuItem3.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.About) TabPage8.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.HostManage) Label52.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.LocalIP) Button25.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Search) CheckBox6.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Radio) CBoPort.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Port) CheckBox20.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Gateway) CheckBox19.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.DNS) CheckBox16.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Server) CheckBox21.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.SubnetMask) CheckBox18.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomRemark) CBoLock.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Lock) CBoMandateEnd.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.AuthorizationExpirationTime) CBoMandateDate.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.PrivilegedTime) GroupBox9.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.HostList) CheckBox12.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.SelectAll) TabPage9.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.FirmwareUpdate) 'Label53.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.FilePath) Button27.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Browse) 'BtnUpdateFile.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Upgrade) GroupBox8.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.SettingProjectInfo) CBoMandateTimeSet.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Clear) CBoProjectNumber.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.ProjectCode) CBoRoomState.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomStatus) CBoRoomTpRemark.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomTypeRemark) CBoRoomNuRemark.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomNumberRemark) CBoRoomRemark.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomRemark) CBoSeason.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Season) CBoMandateEndTime.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.AuthorizationExpirationTime) CBoRoomLock.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Lock) CBoUpdateDB.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.UpdateCloudData) Button26.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.ChooseIssued) GroupBox11.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.MatchTheInformation) TabPage10.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.ConfigIsIssued) Label7.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.ProjectCode) Label28.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.HotelName) Label9.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomNumberRemark) Label29.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomTypeRemark) Label62.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomRemark) Label49.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.MAC) Label60.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.RemoteIP) Label61.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.RemotePort) Label30.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.ConfigVersion) Label31.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Prompt) LblTipTxt.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Waiting) Button15.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.ReadSettings) Button6.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.ConfigIsIssued) BtnMAC.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.SetMAC) GroupBox5.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.ConfigIssuedInfo) GroupBox10.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.QueryDeviceStatus) TabPage3.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.CommunicationTest) Button20.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.SetMAC) Button24.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.ClearRecord) CheckBox1.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.SystemInfo) CheckBox2.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.NetworkInfo) CheckBox3.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.DeviceInfo) CheckBox4.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.LogicalInfo) CheckBox5.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.TemporaryInfo) GroupBox6.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.CommunicationRecords) Button28.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Matching) Label54.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.ModelTest) RadioButton1.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.NetworkSettings) RadioButton2.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.SerialportSettings) TabPage12.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.DevelopmentUse) GroupBox13.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.SettingProjectInfo) CBo1.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.ProjectCode) CBo2.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomTypeRemark) CBo3.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomNumberRemark) CBo4.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Season) CBo5.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomStatus) CBo6.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Lock) CBo7.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomRemark) CBo8.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.AuthorizationExpirationTime) CheckBoxSet.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Clear) Button21.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.SetMAC) Button23.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.ReadSettings) BtnCheckSetting.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.HomeSet) GroupBox15.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.NetworkInfo) CheckBox31.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.DHCP) & LanguageData.StringList(MultiLanguageDAL.StringEnum.Enabled) CheckBox32.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.UseTheFollowingIPAddress) Label36.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.IPAddress) Label37.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.SubnetMask) Label38.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Gateway) Label55.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.DNS) Button5.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.ReadSettings) Button22.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.HomeSet) GroupBox17.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.MQTT) CheckBox8.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.AliCloud) & LanguageData.StringList(MultiLanguageDAL.StringEnum.ProductKey) CheckBox9.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.AliCloud) & LanguageData.StringList(MultiLanguageDAL.StringEnum.DeviceName) CheckBox10.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.AliCloud) & LanguageData.StringList(MultiLanguageDAL.StringEnum.DeviceSecretKey) CheckBox14.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.AliCloud) & LanguageData.StringList(MultiLanguageDAL.StringEnum.ReleaseSession) CheckBox13.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.AliCloud) & LanguageData.StringList(MultiLanguageDAL.StringEnum.SubscribeSession) CheckBox11.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.AliCloud) & LanguageData.StringList(MultiLanguageDAL.StringEnum.OnlineTime) CheckBox22.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.ReleaseSession) CheckBox17.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.SubscribeSession) CheckBox15.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.DomainName) CheckBox29.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.ClientID) CheckBox28.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.UserName) CheckBox27.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.PassWord) Label65.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.MQTT) & LanguageData.StringList(MultiLanguageDAL.StringEnum.Cloud) Button19.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.ReadSettings) BtnSetMQTT.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.HomeSet) GroupBox14.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.SerialPortInfo) CheckBox26.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.SystemInfo) CheckBox25.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.NetworkInfo) CheckBox24.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.DeviceInfo) CheckBox23.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.LogicalInfo) CheckBox7.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.TemporaryInfo) GroupBox12.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.SettingCoreParam) Label64.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.HostModuleNumber) Label63.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.MainboardModelNumber) Label59.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.HostModuleNumber) Label57.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.MainboardModelNumber) Button30.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.ReadTheParam) Button31.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.SetTheParam) CheckBox33.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Server) & LanguageData.StringList(MultiLanguageDAL.StringEnum.IPAddress) Label69.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Server) TabPage15.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.BatchDataDelivery) GroupBox19.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.CloudData) Button29.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Refresh) & LanguageData.StringList(MultiLanguageDAL.StringEnum.CloudData) Button32.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Contrast) Button33.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.BatchConfig) CheckBox30.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Checked) End Sub #End Region #Region "测试子窗体_各机型模块" ''' 机型测试组名称 Private _modelsTestGroup() As String = {$"BLV-C5", $"BLV-C12", $"BLV-C8", "BLV-V9", "BLV-C9"} ''' ''' 测试机型列表 ''' Private _testModelsList As New Dictionary(Of String, Integer) ''' C5机型测试 Public _blvC8TestForm As FrmTest_C8 Private _blvC5TestForm As FrmTest_C5 ''' C12机型测试 Public _blvC12TestForm As FrmTest_C12 Public _blvV9TestForm As FrmTest_BLV_V9 ''' 测试机型索引标志位 Private _testFrmIndex As String ''' ''' 初始化测试Page ''' Private Sub InitTestPage() TabControlTest.SizeMode = TabSizeMode.Fixed TabControlTest.ItemSize = New Size(0, 1) End Sub ''' ''' 显示测试机型 ''' ''' Private Sub ShowTestModels(testModelsName As String) If _testModelsList.ContainsKey(testModelsName) Then '存在,则切换 Dim index As Integer = _testModelsList.Item(testModelsName) TabControlTest.SelectedIndex = index _testFrmIndex = testModelsName Else '不存在,则初始化 Dim tbIndex As Integer = InitTestModels(testModelsName) _testModelsList.Add(testModelsName, tbIndex) TabControlTest.SelectedIndex = tbIndex _testFrmIndex = testModelsName End If End Sub ''' ''' 初始化测试机型 ''' ''' Private Function InitTestModels(testModelsName As String) Dim tbIndex As Integer Select Case testModelsName Case _modelsTestGroup(0) Dim tpfrm1 As New TabPage _blvC5TestForm = New FrmTest_C5(Me) 'C5测试窗体 tpfrm1.Text = _modelsTestGroup(0) _blvC5TestForm.ShowForm(tpfrm1) TabControlTest.TabPages.Add(tpfrm1) tbIndex = TabControlTest.TabPages.IndexOf(tpfrm1) Case _modelsTestGroup(4) Dim tpfrm1 As New TabPage tpfrm1.Text = _modelsTestGroup(4) _blvC5TestForm = New FrmTest_C5(Me) 'C5测试窗体 _blvC5TestForm.ShowForm1(tpfrm1, _modelsTestGroup(4)) TabControlTest.TabPages.Add(tpfrm1) tbIndex = TabControlTest.TabPages.IndexOf(tpfrm1) Case _modelsTestGroup(2) ' CZH 2023-08-08 Dim tpfrm1 As New TabPage tpfrm1.Text = _modelsTestGroup(0) _blvC8TestForm = New FrmTest_C8(Me) 'C5测试窗体 _blvC8TestForm.ShowForm(tpfrm1) TabControlTest.TabPages.Add(tpfrm1) tbIndex = TabControlTest.TabPages.IndexOf(tpfrm1) Case _modelsTestGroup(1) Dim tpfrm2 As New TabPage tpfrm2.Text = _modelsTestGroup(1) _blvC12TestForm = New FrmTest_C12(Me) 'C12测试窗体 _blvC12TestForm.ShowForm(tpfrm2) TabControlTest.TabPages.Add(tpfrm2) tbIndex = TabControlTest.TabPages.IndexOf(tpfrm2) Case _modelsTestGroup(3) Dim tpfrm2 As New TabPage tpfrm2.Text = _modelsTestGroup(1) _blvV9TestForm = New FrmTest_BLV_V9(Me) 'C12测试窗体 _blvV9TestForm.ShowForm(tpfrm2) TabControlTest.TabPages.Add(tpfrm2) tbIndex = TabControlTest.TabPages.IndexOf(tpfrm2) Case Else Dim tpfrm2 As New TabPage Dim l1 As New Label l1.Height = 828 l1.Width = 289 l1.Text = $"机型测试" l1.TextAlign = ContentAlignment.MiddleCenter l1.ForeColor = Color.Green l1.Font = New Font($"Arial", 36, FontStyle.Bold) tpfrm2.Controls.Add(l1) l1.Dock = DockStyle.Fill 'tpfrm2.Text = _modelsTestGroup(1) '_blvC12TestForm = New FrmTest_C12 'C12测试窗体 '_blvC12TestForm.ShowForm(tpfrm2) TabControlTest.TabPages.Add(tpfrm2) tbIndex = TabControlTest.TabPages.IndexOf(tpfrm2) 'tbIndex = 0 End Select Return tbIndex End Function #End Region #Region "初始化" ''' ''' 窗体加载函数 ''' ''' ''' Private Sub FrmCSeriesConfig_Load(sender As Object, e As EventArgs) Handles Me.Load AddHandler AppDomain.CurrentDomain.UnhandledException, Sub(s As Object, arg As UnhandledExceptionEventArgs) Dim ex As Exception = CType(arg.ExceptionObject, Exception) AppLog.WriteFatalLog($"{Application.ProductName} {Application.ProductVersion}未处理异常,{ex}") MsgBox($"{Application.ProductName} {Application.ProductVersion}未处理异常,{ex}") End Sub logqe = New Queue(Of (String, Color)) MultiLanguageInfo() TabPage2.Parent = Nothing TabPage1.Parent = Nothing TabPage4.Parent = Nothing TabPage12.Parent = Nothing TabPage15.Parent = Nothing '弃用 RadioButton1.Visible = False RadioButton2.Visible = False '1、获取当前用户返回权限 'LblUserInfo.Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.WelcomeYou)}!{_userNames} {LanguageData.StringList(MultiLanguageDAL.StringEnum.PleaseSelectYourHotel)}!" '2、根据权限显示不同界面 InitAuthorityInfo() '连接后台数据库 '’ConnBackstageData() InitLastTimeConfig() 'InitCmdSearchTablesData() InitQueryDevStateTabData() InitRoomInfo() 'ConnDataSourse() InitLocalNetWorkInfo() '固件升级获取本地IP 'InitSerialPortBaud() InitDevType() InitRoomState() 'InitFolderItems() InitRCUHostsTablesData() '固件升级表格 InitMatchingGridInfo() '初始化匹配表 'FrmAdvancedSettings.BtnNetworkConnect.PerformClick() 'FrmAdvancedSettings.NetworkConnect() ''模拟点击 InitTestPage() InitHostsInfo() InitMQTTItem() InitPage() 'InitReset() InitBatchIssuedTableData() ComboBox31.SelectedIndex = 1 InitDHCPTable() TabControl3Visible() End Sub ''' ''' 初始化上一次关闭窗体前保存的配置数据 ''' Private Sub InitLastTimeConfig() Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.CSeriesConfigTools)} v{Application.ProductVersion} (User:{_userNames} )" 'CboLongIP.Text = My.Settings.RemoteIP 'NudLocalPort.Value = My.Settings.LocalPort End Sub #End Region #Region "权限管理" ''' ''' 用户酒店列表 ''' Private _userHotelList As New List(Of String) ''' ''' 用户酒店分组 ''' Private _userHotel As New List(Of String) ''' ''' 根据权限解锁功能 ''' Private Sub InitAuthorityInfo() FrmHotelList.AddAuthorityInfo() If _projectNumber Is Nothing Then _projectNumber = LanguageData.StringList(MultiLanguageDAL.StringEnum.ProjectCode) End If If _HotelName Is Nothing Then _HotelName = LanguageData.StringList(MultiLanguageDAL.StringEnum.HotelName) End If Dim dic As New Dictionary(Of String, String) For index = 0 To _loginData.Values.Count - 1 If dic.ContainsKey(_loginData.Values(index).Code) = False Then dic.Add(_loginData.Values(index).Code, _loginData.Values(index).HotelName) End If Next If dic.Count = 1 Then _projectNumber = _loginData.Values(0).Code _HotelName = _loginData.Values(0).HotelName LblUserNames.Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.TheCurrentHotel)}:{_projectNumber}-{_HotelName} | {_userNames} {LanguageData.StringList(MultiLanguageDAL.StringEnum.WelcomeYou)}! " TextBox9.Text = _projectNumber FrmHotelList.AddAuthorityInfo() ElseIf My.Settings.UserName = _userNames Then '用户名 LblUserNames.Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.TheCurrentHotel)}:{My.Settings.ProjectCode}-{My.Settings.CHotelName} | {_userNames} {LanguageData.StringList(MultiLanguageDAL.StringEnum.WelcomeYou)}! " TextBox9.Text = My.Settings.ProjectCode _projectNumber = My.Settings.ProjectCode _HotelName = My.Settings.CHotelName FrmHotelList.AddLastTimeAuthorityInfo() Else LblUserNames.Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.TheCurrentHotel)}:{LanguageData.StringList(MultiLanguageDAL.StringEnum.ProjectCode)}-{LanguageData.StringList(MultiLanguageDAL.StringEnum.HotelName)} | {_userNames} {LanguageData.StringList(MultiLanguageDAL.StringEnum.WelcomeYou)}! " '获取用户名 TextBox9.Text = $"0000" _authorityInfo.Clear() End If FrmHotelList.AddAuthorityInfo() FrmHotelList.AuthorityInfo(Me) End Sub #Region "权限管理_酒店权限" ''' ''' 权限状态 ''' Enum EnAuthState ''' 空权限 NULLAuth ''' 禁止权限 BanAuth ''' 只读权限 ReadOnlyAuth ''' 读写权限 ReadWriteAuth ''' 管理权限 Manage ''' 允许权限 Allow ''' 拒绝权限 Refused End Enum ''' ''' 锁定权限 ''' ''' Public Sub LockAuth(AuthState As String) Select Case AuthState Case EnAuthState.ReadOnlyAuth LockReadOnlyAuth() Case EnAuthState.ReadWriteAuth LockReadWriteAuth() Case Else LockNoAuth() End Select End Sub ''' ''' 锁定只读权限 ''' Private Sub LockReadOnlyAuth() AuthorityCheckBoxOperate(CBoLock, True) End Sub ''' ''' 锁定读写权限 ''' Private Sub LockReadWriteAuth() AuthorityCheckBoxOperate(CBoLock, True) AuthorityCheckBoxOperate(CBoRoomLock, True) AuthorityComboBoxOperate(ComboBox13, True) End Sub ''' ''' 锁定无权限 ''' Private Sub LockNoAuth() AuthorityCheckBoxOperate(CBoLock, False) AuthorityCheckBoxOperate(CBoRoomLock, False) AuthorityComboBoxOperate(ComboBox13, False) End Sub ''' ''' 授权时间权限 ''' ''' Public Sub AuthorizedTimeAuth(AuthState As String) Select Case AuthState Case EnAuthState.ReadOnlyAuth AuthorizedTimeReadOnlyAuth() Case EnAuthState.ReadWriteAuth AuthorizedTimeReadWriteAuth() Case Else AuthorizedTimeNoAuth() End Select End Sub ''' ''' 授权时间只读权限 ''' Private Sub AuthorizedTimeReadOnlyAuth() AuthorityCheckBoxOperate(CBoMandateDate, True) AuthorityCheckBoxOperate(CBoMandateEnd, True) End Sub ''' ''' 授权时间读写权限 ''' Private Sub AuthorizedTimeReadWriteAuth() AuthorityCheckBoxOperate(CBoMandateEndTime, True) AuthorityDateTimePickerOperate(DateTimePicker2, True) 'AuthorityCheckBoxOperate(CBoMandateTimeSet, True) AuthorityCheckBoxOperate(CBoMandateDate, True) AuthorityCheckBoxOperate(CBoMandateEnd, True) End Sub ''' ''' 授权时间无权限 ''' Private Sub AuthorizedTimeNoAuth() AuthorityCheckBoxOperate(CBoMandateEndTime, False) AuthorityDateTimePickerOperate(DateTimePicker2, False) 'AuthorityCheckBoxOperate(CBoMandateTimeSet, False) AuthorityCheckBoxOperate(CBoMandateDate, False) AuthorityCheckBoxOperate(CBoMandateEnd, False) End Sub ''' ''' 授权升级And房态And季节权限 ''' ''' Public Sub UpdateRoomStateSeasonAuth(AuthState As String) Select Case AuthState Case EnAuthState.Allow UpdateRoomStateSeasonReadWriteAuth() Case Else UpdateRoomStateSeasonNoAuth() End Select End Sub ''' ''' 允许 升级/房态/季节权限 ''' Private Sub UpdateRoomStateSeasonReadWriteAuth() BtnUpdateFile.Enabled = True BtnUpdateFile.Visible = True Button36.Enabled = True Button36.Visible = True AuthorityCheckBoxOperate(CBoRoomState, True) AuthorityComboBoxOperate(ComboBox15, True) AuthorityCheckBoxOperate(CBoSeason, True) AuthorityComboBoxOperate(ComboBox14, True) AuthorityComboBoxOperate(ComboBox18, True) AuthorityComboBoxOperate(ComboBox19, True) AuthorityComboBoxOperate(ComboBox20, True) AuthorityComboBoxOperate(ComboBox21, True) AuthorityComboBoxOperate(ComboBox22, True) AuthorityComboBoxOperate(ComboBox23, True) AuthorityComboBoxOperate(ComboBox24, True) AuthorityComboBoxOperate(ComboBox25, True) AuthorityComboBoxOperate(ComboBox26, True) AuthorityComboBoxOperate(ComboBox27, True) AuthorityComboBoxOperate(ComboBox28, True) End Sub ''' ''' 无 升级/房态/季节权限 ''' Private Sub UpdateRoomStateSeasonNoAuth() BtnUpdateFile.Enabled = False BtnUpdateFile.Visible = False Button36.Enabled = False Button36.Visible = False AuthorityCheckBoxOperate(CBoRoomState, False) AuthorityComboBoxOperate(ComboBox15, False) AuthorityCheckBoxOperate(CBoSeason, False) AuthorityComboBoxOperate(ComboBox14, False) AuthorityComboBoxOperate(ComboBox18, False) AuthorityComboBoxOperate(ComboBox19, False) AuthorityComboBoxOperate(ComboBox20, False) AuthorityComboBoxOperate(ComboBox21, False) AuthorityComboBoxOperate(ComboBox22, False) AuthorityComboBoxOperate(ComboBox23, False) AuthorityComboBoxOperate(ComboBox24, False) AuthorityComboBoxOperate(ComboBox25, False) AuthorityComboBoxOperate(ComboBox26, False) AuthorityComboBoxOperate(ComboBox27, False) AuthorityComboBoxOperate(ComboBox28, False) End Sub ''' ''' 授权研发管理权限 ''' ''' Public Sub UpdateResearchManageAuth(AuthState As String) Select Case AuthState Case EnAuthState.Allow UpdateResearchManageAllowAuth() Case Else UpdateResearchManageBanAuth() End Select End Sub ''' ''' 允许 研发管理权限 ''' Private Sub UpdateResearchManageAllowAuth() 'TabPage12.Parent = TabControl3 ' RadioButton1.Visible = True ' RadioButton2.Visible = True End Sub Public Sub TabControl3Visible() TabPage12.Parent = Nothing TabPage10.Parent = Nothing TabPage15.Parent = Nothing TabPage3.Parent = Nothing TabPage16.Parent = Nothing ' TabPage16.Parent = Nothing End Sub ''' ''' 禁止 研发管理权限 ''' Private Sub UpdateResearchManageBanAuth() TabPage12.Parent = Nothing RadioButton1.Visible = False RadioButton2.Visible = False End Sub ''' ''' 授权批量下发权限 ''' ''' Public Sub UpdateBatchIssuedAuth(AuthState As String) Select Case AuthState Case EnAuthState.Allow UpdateAllowBatchIssuedAuth() Case Else UpdateBanBatchIssuedAuth() End Select End Sub ''' ''' 允许 批量下发权限 ''' Private Sub UpdateAllowBatchIssuedAuth() TabPage15.Parent = Nothing ' TabPage15.Parent = TabControl3 End Sub ''' ''' 禁止 批量下发权限 ''' Private Sub UpdateBanBatchIssuedAuth() TabPage15.Parent = Nothing End Sub ''' ''' 无权限 ''' Public Sub NoAuthority() BtnUpdateFile.Enabled = False BtnUpdateFile.Visible = False Button36.Enabled = False Button36.Visible = False AuthorityCheckBoxOperate(CBoLock, False) AuthorityCheckBoxOperate(CBoMandateEnd, False) AuthorityCheckBoxOperate(CBoMandateDate, False) AuthorityCheckBoxOperate(CBoRoomLock, False) AuthorityCheckBoxOperate(CBoMandateTimeSet, False) AuthorityCheckBoxOperate(CBoMandateEndTime, False) AuthorityComboBoxOperate(ComboBox13, False) AuthorityDateTimePickerOperate(DateTimePicker2, False) AuthorityCheckBoxOperate(CBoRoomState, False) AuthorityComboBoxOperate(ComboBox15, False) AuthorityCheckBoxOperate(CBoSeason, False) AuthorityComboBoxOperate(ComboBox14, False) End Sub Private Sub AuthorityCheckBoxOperate(checkbox As CheckBox, switchs As Boolean) checkbox.Enabled = switchs checkbox.Visible = switchs End Sub Private Sub AuthorityComboBoxOperate(combobox As ComboBox, switchs As Boolean) combobox.Enabled = switchs combobox.Visible = switchs End Sub Private Sub AuthorityDateTimePickerOperate(DateTimeP As DateTimePicker, switchs As Boolean) DateTimeP.Enabled = False DateTimeP.Visible = switchs End Sub Private Sub AuthorityLabelOperate(label As Label, switchs As Boolean) label.Enabled = switchs label.Visible = switchs End Sub #End Region #Region "权限管理_酒店管理" ' ''' ' ''' 权限列表 ' ''' ' Enum EnAuthInfo ' ''' ' Null ' ''' 锁定权限 ' Lock ' ''' 授权时间 ' AuthorizedTime ' End Enum ' Private Sub Grid5_Click(Sender As Object, e As EventArgs) ' If Grid5.ActiveCell.Row > 0 Then ' _projectNumber = Grid5.Cell(Grid5.ActiveCell.Row, HotelDataCol.ProjectNumber).Text ' _HotelName = Grid5.Cell(Grid5.ActiveCell.Row, HotelDataCol.HotelName).Text ' End If ' End Sub ' ''' ' ''' 选择酒店事件 ' ''' ' ''' ' ''' ' Private Sub Button5_Click(sender As Object, e As EventArgs) ' NoAuthority() ' If Button5.Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Checked)}" Then ' 'If ComboBox19.Text = Nothing Then 'ComboBox18.Text = Nothing OrElse ' ' MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.PleaseSelectTheHotelUnderYourName)}!") ' ' Exit Sub ' 'End If ' 'For index = 0 To _userData.Rows.Count - 1 ' ' If ComboBox19.Text = _userData(index)(7) Then ' ' _projectNumber = _userData(index)(8) ' ' _authorityInfo = _userData(index)(5) ' ' Console.WriteLine($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ProjectCode)}{_projectNumber}") ' ' End If ' 'Next ' If Grid5.Cell(Grid5.ActiveCell.Row, HotelDataCol.ProjectNumber).Text = Nothing Then ' MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.PleaseSelectTheHotelUnderYourName)}!") ' Exit Sub ' End If ' If _projectNumber = $"" Then ' MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.PleaseSelectTheHotelUnderYourName)}!") ' Exit Sub ' End If ' If _HotelName = $"" Then ' MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.PleaseSelectTheHotelUnderYourName)}!") ' Exit Sub ' End If ' 'For index = 0 To _userData.Rows.Count - 1 ' ' If _HotelName = _userData(index)(7) Then ' ' _authorityInfo = _userData(index)(5) ' ' End If ' 'Next ' _authorityInfo.Clear() ' For index = 0 To _loginData.Values.Count - 1 ' If _HotelName = _loginData.Values(index).HotelName Then ' _authorityInfo.Add(_loginData.Values(index).AuthorityId, _loginData.Values(index).AuthotypeId) ' End If ' Next ' Button5.ForeColor = Color.Red ' Button5.Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Loosen)}" ' 'ComboBox19.Enabled = False ' TreeView1.Enabled = False ' Grid5.Enabled = False ' ElseIf Button5.Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Loosen)}" Then ' Button5.ForeColor = Color.Green ' Button5.Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Checked)}" ' 'ComboBox19.Enabled = True ' TreeView1.Enabled = True ' Grid5.Enabled = True ' End If ' LblUserNames.Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.TheCurrentHotel)}:{_projectNumber}-{_HotelName} | {_userNames} {LanguageData.StringList(MultiLanguageDAL.StringEnum.WelcomeYou)}! " ' TextBox9.Text = _projectNumber ' For index = 0 To _authorityInfo.Count - 1 ' Select Case _authorityInfo.Keys(index) ' Case EnAuthInfo.Lock '锁定 ' LockAuth(_authorityInfo.Values(index)) ' Case EnAuthInfo.AuthorizedTime '授权时间 ' AuthorizedTimeAuth(_authorityInfo.Values(index)) ' End Select ' Next ' End Sub ' ''' ' ''' 选择页面 ' ''' ' ''' ' ''' ' Private Sub TabControl1_Selecting(sender As Object, e As TabControlCancelEventArgs) Handles TabControl1.Selecting ' If Button5.Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Checked)}" Then ' MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.PleaseSelectTheHotelUnderYourName)}!") ' e.Cancel = True ' End If ' End Sub ' ''' ' ''' 初始化酒店区域信息 ' ''' ' Private Sub InitHotelInfo() ' InitHotelTable() ' Dim nodeOne As TreeNode = TreeView1.Nodes.Add($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.TongTai)}") ' Dim dic As New Dictionary(Of String, Integer) ' Dim txt As String ' For index = 0 To _loginData.Count - 1 ' txt = _loginData.Values(index).HotelGroupsName ' If dic.ContainsKey(txt) Then ' dic(txt) += 1 ' Else ' dic.Add(txt, 1) ' nodeOne.Nodes.Add(txt) ' End If ' Next ' 'Dim wacth As New Stopwatch ' 'wacth.Restart() ' 'Dim dic As New Dictionary(Of String, Integer) ' 'Dim txt As String ' 'If _userData.Rows.Count <= 0 Then Return ' 'For index = 0 To _userData.Rows.Count - 1 ' ' txt = _userData(index)(10).ToString ' ' If dic.ContainsKey(txt) Then ' ' dic(txt) += 1 ' ' Else ' ' dic.Add(txt, 1) ' ' nodeOne.Nodes.Add(txt) ' ' End If ' 'Next ' 'For index = 0 To dic.Count - 1 ' ' nodeOne.Nodes.Add(dic.ElementAt(index).Key & " " & dic.ElementAt(index).Value) ' 'Next ' 'If _userData.Rows.Count > 0 Then ' ' nodeOne.Nodes.Add($"{_userData(0)(10)}") ' ' For index = 1 To _userData.Rows.Count - 1 ' ' Dim isExists As Boolean = False ' ' For Each b As TreeNode In nodeOne.Nodes ' ' If b.Text = _userData(index)(10) Then ' ' isExists = True ' ' Exit For ' ' End If ' ' Next ' ' If isExists = False Then nodeOne.Nodes.Add($"{_userData(index)(10)}") ' ' Next ' 'End If ' 'wacth.Stop() ' 'Console.WriteLine($"ET:{wacth.ElapsedMilliseconds}") ' 'TreeView1.Nodes.Add($"酒店2").Nodes.Add("123") ' 'Dim node As TreeNode = TreeView1.Nodes.Add($"酒店5") ' 'node.Nodes.Add("n1") ' End Sub ' ''' ' ''' 树状目录点击事件 ' ''' ' ''' ' ''' ' Private Sub TreeView1_NodeMouseClick(sender As Object, e As TreeNodeMouseClickEventArgs) ' 'Console.WriteLine(e.Node.Text & " " & e.Node.Index & " " & e.Node.Level & " " & e.Node.FullPath) ' 'Grid5.DisplayRowNumber = True ' Grid5.NewFile() ' InitHotelTable() ' Dim rowCount As Integer = 0 ' Dim dic As New Dictionary(Of String, Integer) ' For index = 0 To _loginData.Values.Count - 1 ' If e.Node.Text = _loginData.Values(index).HotelGroupsName Then ' If dic.ContainsKey(_loginData.Values(index).Code) = False Then ' dic.Add(_loginData.Values(index).Code, 1) ' Grid5.Rows += 1 ' rowCount += 1 ' Grid5.Cell(rowCount, 1).Text = _loginData.Values(index).Code ' Grid5.Cell(rowCount, 2).Text = _loginData.Values(index).HotelName ' End If ' ElseIf e.Node.Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.TongTai)}" Then ' If dic.ContainsKey(_loginData.Values(index).Code) = False Then ' dic.Add(_loginData.Values(index).Code, 1) ' Grid5.Rows += 1 ' rowCount += 1 ' Grid5.Cell(rowCount, 1).Text = _loginData.Values(index).Code ' Grid5.Cell(rowCount, 2).Text = _loginData.Values(index).HotelName ' End If ' End If ' 'Console.WriteLine($"---------------------------------------------------------------------------") ' 'Console.WriteLine($"{_loginData.Count}") ' 'Console.WriteLine($"酒店+权限:{_loginData.Keys(index)}") ' 'Console.WriteLine($"酒店名称:{_loginData.Values(index).HotelName}") ' 'Console.WriteLine($"权限名称:{_loginData.Values(index).AuthorityName}") ' 'Console.WriteLine($"酒店组名称:{_loginData.Values(index).HotelGroupsName}") ' 'Console.WriteLine($"---------------------------------------------------------------------------") ' Next ' 'Dim lst As New List(Of Tuple(Of String, String)) '元组 ' 'Try ' ' _userHotelList.Clear() ' ' For index = 0 To _userData.Rows.Count - 1 ' ' If e.Node.Text = _userData(index)(10) Then ' ' lst.Add(New Tuple(Of String, String)(_userData(index)(8), _userData(index)(7))) ' ' '_userHotelList.Add($"{_userData(index)(8)}-{_userData(index)(7)}") ' ' End If ' ' Next ' 'Catch ex As Exception ' ' MsgBox($"{ex.Message}") ' 'End Try ' 'Grid5.NewFile() ' 'InitHotelTable() ' 'Dim QueryWithStanard2 = From el In lst ' ' Group el By dateGroup = New With { ' ' Key .Code = el.Item1, Key .Name = el.Item2 ' ' } Into g = Group ' ' Select New With {.code = dateGroup.Code, .name = dateGroup.Name} ' 'Dim lia2 = QueryWithStanard2.ToList() ' 'For index As Integer = 0 To QueryWithStanard2.ToList.Count - 1 ' ' Grid5.Rows += 1 ' ' Grid5.Cell(index + 1, 1).Text = lia2(index).code '(index - 1).Split($"-")(0) ' ' Grid5.Cell(index + 1, 2).Text = lia2(index).name ' 'Next ' 'If e.Node.Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.TongTai)}" Then ' ' InitLoadHotelInfo() ' 'End If ' End Sub ' ''' ' ''' 酒店区域表列名_枚举 ' ''' ' Enum HotelDataCol ' ''' ' Null ' ''' 项目编码 ' ProjectNumber ' ''' 酒店名称 ' HotelName ' End Enum ' ''' ' ''' 酒店区域表列名 ' ''' ' Private _hotelTable() As String = {$"0", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ProjectCode)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.HotelName)}"} ' ''' ' ''' 初始化酒店表格 ' ''' ' Private Sub InitHotelTable() ' Grid5.Column(0).Width = 0 ' Grid5.Cols = _hotelTable.Length ' Grid5.Rows = 1 ' For index = 1 To Grid5.Cols - 1 ' With Grid5.Cell(0, index) ' .ForeColor = Color.Blue ' .Text = _hotelTable(index) ' .ForeColor = Color.DarkCyan ' End With ' With Grid5.Column(index) ' .Alignment = FlexCell.AlignmentEnum.CenterCenter ' If index = HotelDataCol.ProjectNumber Then ' .Width = 75 ' Else ' .Width = 180 ' End If ' End With ' Next ' Grid5.SelectionMode = FlexCell.SelectionModeEnum.ByRow '设置选中行 ' End Sub ' Private Sub InitLoadHotelInfo() ' Dim amountGrpByDates = From row In _userData ' Group row By dateGroup = New With { ' Key .Code = row.Field(Of Integer)(_userData.Columns(8).ColumnName), ' Key .Name = row.Field(Of String)(_userData.Columns(7).ColumnName) ' } Into Group ' Select New With { ' Key .Code = dateGroup.Code, ' .Name = dateGroup.Name} ' Dim lst = amountGrpByDates.ToList ' For index = 0 To lst.Count - 1 ' Grid5.Rows += 1 ' Grid5.Cell(index + 1, 1).Text = lst(index).Code '项目编码 ' Grid5.Cell(index + 1, 2).Text = lst(index).Name '酒店名称 ' Next ' End Sub #End Region #Region "后台数据_房型房号" ''' ''' 房型备注列表 ''' Private _roomType As New List(Of String) ''' ''' 房号备注列表 ''' Private _roomNumber As New List(Of String) ''' ''' 房型备注_下拉框事件 ''' ''' ''' Private Sub ComboBox16_DropDown(sender As Object, e As EventArgs) Handles ComboBox16.DropDown Dim projectNumber As String = TextBox9.Text QueryProjectRoomType(projectNumber) End Sub ''' ''' 房型备注_文本改变事件 ''' ''' ''' Private Sub ComboBox16_TextChanged(sender As Object, e As EventArgs) Handles ComboBox16.TextChanged '房型备注 If ComboBox16.Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.All)}" Then Else ComboBox17.Items.Clear() End If CBoRoomTpRemark.Checked = True If ComboBox16.Text.Contains($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.All)}") Then CBoRoomNuRemark.Checked = False CBoRoomTpRemark.Checked = False End If CheckBox36.Checked = False ComboBox30.Items.Clear() TextBox63.Text = "" TextBox21.Text = "" Try If ComboBox16.SelectedIndex = 0 Then TextBox21.Text = $"0000" Else 'TextBox21.Text = _dtRoomType(ComboBox16.SelectedIndex - 1)(4) Dim roomTypeID As String = String.Empty Dim roomType As String = ComboBox16.Text 'For index = 0 To _hostListData.Keys.Count - 1 ' If roomType = _hostListData(index).RoomTypeName Then ' roomTypeID = _hostListData(index).RoomTypeID ' End If 'Next For index = 0 To _roomTypeListData.Keys.Count - 1 If roomType = _roomTypeListData(index).Name Then roomTypeID = _roomTypeListData(index).ID End If Next TextBox21.Text = roomTypeID End If Catch ex As Exception Console.WriteLine($"RoomType Error:{ex.Message}") End Try End Sub ''' ''' 房号备注_下拉框事件 ''' ''' ''' Private Sub ComboBox17_DropDown(sender As Object, e As EventArgs) Handles ComboBox17.DropDown Dim projectNumber As String = TextBox9.Text Dim roomType As String = ComboBox16.Text QueryProjectRoomNumber(projectNumber, roomType) End Sub ''' ''' 房号备注_文本改变事件 ''' ''' ''' Private Sub ComboBox17_TextChanged(sender As Object, e As EventArgs) Handles ComboBox17.TextChanged Iptype_txt.Text = "" Loadip_txt.Text = "" IPMask_txt.Text = "" IPGateway_txt.Text = "" ServerIP_txt.Text = "" ipconfig_txt.Text = "" IpDns_txt.Text = "" IpPort_txt.Text = "" TextBox25.Text = "" 'TextBox21.Text = "" Dim gAPIRoomNode As APIRoomNode If ComboBox16.Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.All)}" Then Dim projectNumber As String = TextBox9.Text Dim roomNumber As String = ComboBox17.Text QueryProjectRoomNumberType(projectNumber, roomNumber) QueryProjectRoomNumber(TextBox9.Text, ComboBox16.Text) ComboBox17.Text = roomNumber Else Dim projectNumber As String = TextBox9.Text Dim roomNumber As String = ComboBox17.Text Dim roomType As String = ComboBox16.Text Dim roomNumberId As String = String.Empty Dim creatDate As String If _hotelListData.ContainsKey(projectNumber) = True Then creatDate = _hotelListData(projectNumber).CreatDate If DealHostListInterfaceInfo(projectNumber, creatDate) = True Then For index = 0 To _hostListData.Keys.Count - 1 If roomNumber = _hostListData(index).RoomNumber Then roomNumberId = _hostListData(index).ID gAPIRoomNode = RoomControlSystemAPI.API_AllocationBarCode(_hostListData(index).RoomNumber, _hostListData(index).HotelID) CZHSetserverIP(gAPIRoomNode) End If Next End If End If TextBox25.Text = roomNumberId End If 'Try ' If ComboBox17.SelectedIndex > -1 Then ' TextBox25.Text = _dtRoomNumber(ComboBox17.SelectedIndex)(5) ' End If 'Catch ex As Exception ' Console.WriteLine($"RoomRemark Error:{ex.Message}") 'End Try CBoRoomNuRemark.Checked = True CBoProjectNumber.Checked = True ' GetserverIP(TextBox25.Text) End Sub Public Sub CZHSetserverIP(InServerData As APIRoomNode) If IsNothing(InServerData) Then MsgBox("No network or the room information is not set。") Return End If Dim dic As Dictionary(Of String, String) If InServerData.Result.Count < 1 Then MsgBox("Description Failed to obtain the room information!") Return End If 'dic = CType(InServerData.Result(0), Dictionary(Of String, String)) dic = InServerData.Result(0) If IsNothing(dic) Then MsgBox("Description Failed to obtain the IP address of the room!") Return End If If dic.Item("IPType").Equals("1") Then Iptype_txt.Text = "Auto" Iptype_txt.Tag = 1 ElseIf dic.Item("IPType").Equals("2") Then Iptype_txt.Text = "Manual Setting" Iptype_txt.Tag = 2 Else Iptype_txt.Text = "Exception (default automatic)" Iptype_txt.Tag = 1 End If Loadip_txt.Text = dic.Item("IP") IPMask_txt.Text = dic.Item("SubnetMask") IPGateway_txt.Text = dic.Item("Gateway") ServerIP_txt.Text = dic.Item("ServerIP") ipconfig_txt.Text = dic.Item("ServerPort") IpDns_txt.Text = dic.Item("DNS") IpPort_txt.Text = dic.Item("Port") End Sub Public Sub GetserverIP(isRoomOldId As String) If String.IsNullOrEmpty(isRoomOldId) Then Return Dim InServerData As Dictionary(Of String, String) Dim str As String = $"select * from tbl_room_set_config where ROOM_OLD_ID='{isRoomOldId}'" InServerData = _SqlServer.SelectTable(str) If IsNothing(InServerData) OrElse InServerData.Count = 0 Then MsgBox("无网络或未设置该房间信息。") Iptype_txt.Text = "" Loadip_txt.Text = "" IPMask_txt.Text = "" IPGateway_txt.Text = "" ServerIP_txt.Text = "" ipconfig_txt.Text = "" IpDns_txt.Text = "" IpPort_txt.Text = "" Return End If If InServerData.Item("IPType").Equals("1") Then Iptype_txt.Text = "Auto" Iptype_txt.Tag = 1 ElseIf InServerData.Item("IPType").Equals("2") Then Iptype_txt.Text = "Manual Setting" Iptype_txt.Tag = 2 Else Iptype_txt.Text = "Exception (default automatic)" Iptype_txt.Tag = 1 End If Loadip_txt.Text = InServerData.Item("RCU_LOCAL_IP") IPMask_txt.Text = InServerData.Item("RCU_SUB_MASK") IPGateway_txt.Text = InServerData.Item("RCU_GETWAY") ServerIP_txt.Text = InServerData.Item("RCU_CLOUD_SVR_IP") ipconfig_txt.Text = InServerData.Item("RCU_CLOUD_SVR_PORT") IpDns_txt.Text = InServerData.Item("RCU_DNS_SERVER") IpPort_txt.Text = InServerData.Item("RCU_LOCAL_PORT") End Sub ''' 房型表—根据项目编码查询得到 Private _dtRoomType As DataTable ''' ''' 根据项目编码查询房型 ''' ''' Private Sub QueryProjectRoomType(projectNumber As String) _roomType.Clear() _roomType.Add($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.All)}") Dim creatDate As String If _hotelListData.ContainsKey(projectNumber) = True Then creatDate = _hotelListData(projectNumber).CreatDate If DealRoomTypeListInterfaceInfo(projectNumber, creatDate) = True Then For index = 0 To _roomTypeListData.Keys.Count - 1 Dim roomType As String = _roomTypeListData(index).Name If _roomType.Contains(roomType) = False Then _roomType.Add(roomType) End If Next End If 'If DealHostListInterfaceInfo(projectNumber, creatDate) = True Then ' For index = 0 To _hostListData.Keys.Count - 1 ' Dim roomType As String = _hostListData(index).RoomTypeName ' If _roomType.Contains(roomType) = False Then ' _roomType.Add(roomType) ' End If ' Next 'End If End If '_dtRoomType = _backstageData.GetProjectRoomTypeInfo(projectNumber) 'If _dtRoomType.Rows.Count > 0 Then ' For index = 0 To _dtRoomType.Rows.Count - 1 ' _roomType.Add(_dtRoomType(index)(3)) '获取房型 ' Next 'End If Iptype_txt.Text = "" Loadip_txt.Text = "" IPMask_txt.Text = "" IPGateway_txt.Text = "" ServerIP_txt.Text = "" ipconfig_txt.Text = "" IpDns_txt.Text = "" IpPort_txt.Text = "" ComboBox16.Items.Clear() ComboBox16.Items.AddRange(_roomType.ToArray) If ComboBox16.Items.Count > 0 Then ComboBox16.SelectedIndex = 0 End Sub ''' 房号表—根据项目编码, 房型查询得到 Private _dtRoomNumber As DataTable ''' ''' 根据项目编码,房型查询房号 ''' ''' ''' Private Sub QueryProjectRoomNumber(projectNumber As String, roomType As String) _roomNumber.Clear() Dim creatDate As String If _hotelListData.ContainsKey(projectNumber) = True Then creatDate = _hotelListData(projectNumber).CreatDate If DealHostListInterfaceInfo(projectNumber, creatDate) = True Then For index = 0 To _hostListData.Keys.Count - 1 If roomType = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.All)}" Then Dim roomNumber As String = _hostListData(index).RoomNumber If _roomNumber.Contains(roomNumber) = False Then _roomNumber.Add(roomNumber) End If Else If roomType = _hostListData(index).RoomTypeName Then Dim roomNumber As String = _hostListData(index).RoomNumber If _roomNumber.Contains(roomNumber) = False Then _roomNumber.Add(roomNumber) End If End If End If Next End If End If '_dtRoomNumber = _backstageData.GetProjectRoomNumberInfo(projectNumber, roomType) 'If _dtRoomNumber.Rows.Count > 0 Then ' For index = 0 To _dtRoomNumber.Rows.Count - 1 ' _roomNumber.Add(_dtRoomNumber(index)(4)) '获取房号 ' Next 'End If ComboBox17.Items.Clear() ComboBox17.Items.AddRange(_roomNumber.ToArray) End Sub ''' ''' 根据项目编码,房号查询房型 ''' ''' ''' Private Sub QueryProjectRoomNumberType(projectNumber As String, roomNumber As String) Dim roomNumberId As String = String.Empty Dim roomType As String = String.Empty Dim roomTypeId As String = String.Empty Dim gAPIRoomNode As APIRoomNode Dim creatDate As String If _hotelListData.ContainsKey(projectNumber) = True Then creatDate = _hotelListData(projectNumber).CreatDate If DealHostListInterfaceInfo(projectNumber, creatDate) = True Then For index = 0 To _hostListData.Keys.Count - 1 If roomNumber = _hostListData(index).RoomNumber Then roomNumberId = _hostListData(index).ID roomType = _hostListData(index).RoomTypeName roomTypeId = _hostListData(index).RoomTypeID gAPIRoomNode = RoomControlSystemAPI.API_AllocationBarCode(_hostListData(index).RoomNumber, _hostListData(index).HotelID) CZHSetserverIP(gAPIRoomNode) End If Next End If End If TextBox25.Text = roomNumberId TextBox21.Text = roomTypeId ComboBox16.Text = roomType 'Dim dtUser As DataTable = _backstageData.GetProjectRoomNumberTypeInfo(projectNumber, roomNumber) 'If dtUser.Rows.Count > 0 Then ' ComboBox16.Text = dtUser(0)(3) ' TextBox21.Text = dtUser(0)(5) 'End If End Sub #End Region #Region "用户管理_菜单栏" '''' '''' 高级网络设置 '''' '''' '''' 'Private Sub TSMAdvancedSettings_Click(sender As Object, e As EventArgs) Handles TSMAdvancedSettings.Click ' FrmAdvancedSettings.ShowDialog() 'End Sub ''' ''' 高级串口设置 ''' ''' ''' Private Sub TStMSerialPortSetting_Click(sender As Object, e As EventArgs) Handles TStMSerialPortSetting.Click Dim FrmSerialport As New FrmSerialportSetting(Me) FrmSerialport.ShowDialog() End Sub ''' ''' 切换酒店 ''' ''' ''' Private Sub TSMSwitchHotel_Click(sender As Object, e As EventArgs) Handles TSMSwitchHotel.Click '方法1 'If My.Settings.UserName = _userNames Then '用户名 ' FrmHotelList.ShowDialog() 'Else ' Dim hotel As FrmHotelList = New FrmHotelList ' hotel.ShowDialog() 'End If Dim a As Boolean If My.Settings.UserName = _userNames Then a = True End If FrmHotelList.InitHotelList(a, Me) FrmHotelList.ShowDialog() End Sub Private Sub TestTSMSwitchHotel() '方法1 'If My.Settings.UserName = _userNames Then '用户名 ' FrmHotelList.ShowDialog() 'Else ' Dim hotel As FrmHotelList = New FrmHotelList ' hotel.ShowDialog() 'End If Dim a As Boolean If My.Settings.UserName = _userNames Then a = True End If Dim rfrom As New FrmHotelList rfrom.Buttin5click() End Sub ''' ''' 切换用户 ''' ''' ''' Private Sub 切换用户ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem.Click If _connectStatus = True Then _connectStatus = False _socket.Shutdown(SocketShutdown.Both) _socket.Close() _receiveThread.Abort() End If BFrmLogin.Show() My.Settings.ProjectCode = _projectNumber My.Settings.CHotelName = _HotelName My.Settings.UserName = _userNames My.Settings.Save() Close() End Sub ''' ''' 退出 ''' ''' ''' Private Sub 退出ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItemExit.Click Close() End Sub ''' ''' 帮助_关于 ''' ''' ''' Private Sub ToolStripMenuItem3_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem3.Click FrmAboutDialog.ShowDialog() End Sub #End Region #End Region #Region "通讯方式" #Region "发送方式" ''' ''' 发送测试数据 ''' ''' Public Sub SendTestData(dataBuff() As Byte) _isSendByUdp = CheckNetWorkDisConnect() SendDataMode(dataBuff) End Sub ''' ''' 检查网络连接 ''' ''' Private Function CheckNetWorkDisConnect() As Boolean If _connectStatus = False Then Return False End If Return True End Function ''' ''' 以哪种方式发送 ''' ''' Private Sub SendDataMode(databuff() As Byte) If _isSendByUdp = True Then SendUDPData(databuff) Else If SerialPort.IsOpen = False Then Exit Sub End If SendPortData(databuff) End If End Sub #End Region #Region "串口通信" #Region "串口发送接收" ''' ''' 当前时间 ''' Private _nowTime As Date ''' ''' 最后时间 ''' Private _lastTime As Date ''' ''' 时间间隔 ''' Private _timeInterbval As TimeSpan ''' ''' 接收数据偏移量 ''' Private _recvOffset As Integer ''' ''' 接收数据缓存包 ''' Private _recvBuffer(254) As Byte ''' ''' 配置串口 ''' ''' 串口名 ''' 串口波特率 Public Sub ConfigSerialPort(portName As String, portBaud As String) With SerialPort .PortName = portName '串口名 .BaudRate = CInt(portBaud) '波特率 .DataBits = 8 '数据位 .StopBits = Ports.StopBits.One '停止位 .Parity = Ports.Parity.None '偶校验 .RtsEnable = True .ReceivedBytesThreshold = 1 End With End Sub ''' ''' 发送485串口数据 ''' ''' ''' Public Function SendPortData(dataBuff() As Byte) Dim portData As String = ByteToString(dataBuff) Dim timeData As String Dim cutTime As String _nowTime = Now _timeInterbval = _nowTime - _lastTime _lastTime = _nowTime timeData = $"{Math.Round(_timeInterbval.TotalMilliseconds, 0)}" timeData = timeData.PadRight(6) cutTime = $"{Now:HH:mm:ss:fff}" Try SerialPort.Write(dataBuff, 0, dataBuff.Length) AppendTipText("Com-TX:", Color.Green) AppendTipText("(" & cutTime & "-", Color.Black) AppendTipText(timeData, Color.BlueViolet) AppendTipText("):", Color.Black) AppendTipText(portData & vbCrLf, Color.Green) AppendTipTextSerial("Com-TX:", Color.Green) AppendTipTextSerial("(" & cutTime & "-", Color.Black) AppendTipTextSerial(timeData, Color.BlueViolet) AppendTipTextSerial("):", Color.Black) AppendTipTextSerial(portData & vbCrLf, Color.Green) Catch ex As Exception MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SerialPortSendingErrorReason)}:{ex.Message}{vbCrLf}") AppendTipText($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SerialPortSendingErrorReason)}:{ex.Message}{vbCrLf}", Color.Red) AppendTipTextSerial($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SerialPortSendingErrorReason)}:{ex.Message}{vbCrLf}", Color.Red) Return False End Try Return True End Function ''' ''' 接收485串口数据 ''' ''' ''' Private Sub SerialPort_DataReceived(sender As Object, e As Ports.SerialDataReceivedEventArgs) Handles SerialPort.DataReceived Static bytes As Integer _recvOffset = 0 Try Do bytes = SerialPort.BytesToRead If bytes <= 0 Then Exit Sub If bytes + _recvOffset >= 255 Then SerialPort.Read(_recvBuffer, _recvOffset, 255 - _recvOffset) ShowPortReceData(_recvBuffer) AnalyticalData(_recvBuffer) _recvOffset = 0 Else SerialPort.Read(_recvBuffer, _recvOffset, bytes) _recvOffset += bytes End If Thread.Sleep(10) Loop While SerialPort.BytesToRead > 0 If _recvOffset > 0 Then Dim buf(_recvOffset - 1) As Byte Array.Copy(_recvBuffer, 0, buf, 0, buf.Length) ShowPortReceData(buf) AnalyticalData(_recvBuffer) End If Catch ex As Exception AppendTipText($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ReceiveSerialPortDataFailedReason)}:{ex.Message}{vbCrLf}", Color.Red) AppendTipTextSerial($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ReceiveSerialPortDataFailedReason)}:{ex.Message}{vbCrLf}", Color.Red) End Try End Sub ''' ''' 显示串口回复数据 ''' ''' Private Sub ShowPortReceData(databuff() As Byte) Dim portData As String = ByteToString(databuff) Dim timeData As String Dim cutTime As String _nowTime = Now _timeInterbval = _nowTime - _lastTime _lastTime = _nowTime timeData = $"{Math.Round(_timeInterbval.TotalMilliseconds, 0)}" timeData = timeData.PadRight(6) cutTime = $"{Now:HH:mm:ss:fff}" AppendTipText("Com-RX:", Color.Blue) AppendTipText("(" & cutTime & "-", Color.Black) AppendTipText(timeData, Color.BlueViolet) AppendTipText("):", Color.Black) AppendTipText(portData & vbCrLf, Color.Blue) AppendTipTextSerial("Com-RX:", Color.Blue) AppendTipTextSerial("(" & cutTime & "-", Color.Black) AppendTipTextSerial(timeData, Color.BlueViolet) AppendTipTextSerial("):", Color.Black) AppendTipTextSerial(portData & vbCrLf, Color.Blue) End Sub #End Region #Region "解析串口数据" ''' ''' 解析串口数据 ''' ''' Private Sub AnalyticalData(databuff() As Byte) If databuff(0) = &H0 Then If databuff(2) = &HF2 Then If databuff(3) = &H0 Then Select Case databuff(7) Case &H15 '读取寄存器内容 DealReadRegisterInfo(databuff) Case &H16 '设置寄存器内容 DealSetRegisterInfo(databuff) Case &H17 '设备测试回复 If databuff(8) = &H3 Then DealTourTest(databuff) End If DealInputCmd17(databuff) Case &H1B '设置核心参数信息 DealSetInfo(databuff) Case &H1C '读取核心参数信息 DealRecvInfo(databuff) Case &H1D '设置MQTT DealSetMQTTData(databuff) Case &H1E '读取MQTT DealPortReadMQTTData(databuff) Case Else MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SerialPort)}{LanguageData.StringList(MultiLanguageDAL.StringEnum.UnknownCommand)}!") End Select End If End If End If End Sub ''' ''' 处理读取寄存器信息 ''' ''' Private Sub DealReadRegisterInfo(dataBuff() As Byte) Console.WriteLine($"串口读取出 {dataBuff(8)} 个寄存器信息项") AppendTipTextSerial($"串口读取出 {dataBuff(8)} 个寄存器信息项{vbCrLf}", Color.Green) AppendTipTextSerial($"{ByteToString(dataBuff)}{vbCrLf}", Color.Green) End Sub ''' ''' 处理输入命令16_设置MAC地址 ''' ''' Private Sub DealSetRegisterInfo(dataBuff() As Byte) Select Case dataBuff(8) Case &H1 DealSetMACData($"Pass", Color.Green) Case &H2 DealSetMACData($"Fill", Color.Red) End Select End Sub ''' ''' 处理输入命令17 ''' ''' Private Sub DealInputCmd17(databuff() As Byte) If databuff(9) = &HF1 Then Dim bt1 As Byte = databuff(11) Dim bt2 As Byte = databuff(12) Dim bt3 As Byte = databuff(13) Dim bt4 As Byte = databuff(14) Dim a1 As Boolean = (bt1 >> 0) And 3 Dim a2 As Boolean = (bt1 >> 2) And 3 Dim a3 As Boolean = (bt1 >> 4) And 3 Dim a4 As Boolean = (bt1 >> 6) And 3 Dim a5 As Boolean = (bt2 >> 0) And 3 Dim a6 As Boolean = (bt2 >> 2) And 3 Dim a7 As Boolean = (bt2 >> 4) And 3 Dim a8 As Boolean = (bt2 >> 6) And 3 Dim a9 As Boolean = (bt3 >> 0) And 3 Dim a10 As Boolean = (bt3 >> 2) And 3 Dim a11 As Boolean = (bt3 >> 4) And 3 Dim a12 As Boolean = (bt3 >> 6) And 3 Dim a13 As Boolean = (bt4 >> 0) And 3 Select Case _testFrmIndex Case _modelsTestGroup(0), _modelsTestGroup(4) DealInputReplyData(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) Case _modelsTestGroup(1) DealC12InputReplyData(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) Case _modelsTestGroup(2) DealC8InputReplyData(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) Case _modelsTestGroup(3) DealV9InputReplyData(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) End Select End If End Sub ''' ''' 刷新设置MAC委托 ''' ''' ''' Delegate Sub delegate_SearchSetMAC_Change(txt As String, rgba As Color) ''' ''' 处理设置MAC数据 ''' ''' ''' Private Sub DealSetMACData(txt As String, rgba As Color) If InvokeRequired = True Then Dim dev As New delegate_SearchSetMAC_Change(AddressOf DealSetMACData) Me.Invoke(dev, New Object() {txt, rgba}) Else _blvC5TestForm.Label51.ForeColor = rgba _blvC5TestForm.Label51.Text = txt End If End Sub ''' ''' 刷新C5输入回复数据 ''' Delegate Sub delegate_SearchInputReplyData_Change(a1 As Boolean, a2 As Boolean, a3 As Boolean, a4 As Boolean, a5 As Boolean, a6 As Boolean, a7 As Boolean, a8 As Boolean, a9 As Boolean, a10 As Boolean, a11 As Boolean, a12 As Boolean, a13 As Boolean) ''' ''' 处理输入回复数据 ''' Private Sub DealInputReplyData(a1 As Boolean, a2 As Boolean, a3 As Boolean, a4 As Boolean, a5 As Boolean, a6 As Boolean, a7 As Boolean, a8 As Boolean, a9 As Boolean, a10 As Boolean, a11 As Boolean, a12 As Boolean, a13 As Boolean) If InvokeRequired = True Then Dim dev As New delegate_SearchInputReplyData_Change(AddressOf DealInputReplyData) Me.Invoke(dev, New Object() {a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13}) Else ChangeLblTxtColor(a1, _blvC5TestForm.Label41) ChangeLblTxtColor(a2, _blvC5TestForm.Label42) ChangeLblTxtColor(a3, _blvC5TestForm.Label43) ChangeLblTxtColor(a4, _blvC5TestForm.Label44) ChangeLblTxtColor(a5, _blvC5TestForm.Label45) ChangeLblTxtColor(a6, _blvC5TestForm.Label46) ChangeLblTxtColor(a7, _blvC5TestForm.Label47) ChangeLblTxtColor(a8, _blvC5TestForm.LblInput8) ChangeLblTxtColor(a9, _blvC5TestForm.LblInput9) ChangeLblTxtColor(a10, _blvC5TestForm.LblInput10) ChangeLblTxtColor(a11, _blvC5TestForm.LblInput11) ChangeLblTxtColor(a12, _blvC5TestForm.LblInput12) ChangeLblTxtColor(a13, _blvC5TestForm.LblInput13) End If End Sub ''' ''' 刷新C12输入回复数据 ''' Delegate Sub delegate_SearchC12InputReplyData_Change(a1 As Boolean, a2 As Boolean, a3 As Boolean, a4 As Boolean, a5 As Boolean, a6 As Boolean, a7 As Boolean, a8 As Boolean, a9 As Boolean, a10 As Boolean, a11 As Boolean, a12 As Boolean, a13 As Boolean) ''' ''' 处理输入回复数据 ''' Private Sub DealC12InputReplyData(a1 As Boolean, a2 As Boolean, a3 As Boolean, a4 As Boolean, a5 As Boolean, a6 As Boolean, a7 As Boolean, a8 As Boolean, a9 As Boolean, a10 As Boolean, a11 As Boolean, a12 As Boolean, a13 As Boolean) If InvokeRequired = True Then Dim dev As New delegate_SearchC12InputReplyData_Change(AddressOf DealC12InputReplyData) Me.Invoke(dev, New Object() {a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13}) Else ChangeLblTxtColor(a1, _blvC12TestForm.LblInput1) ChangeLblTxtColor(a2, _blvC12TestForm.LblInput2) ChangeLblTxtColor(a3, _blvC12TestForm.LblInput3) ChangeLblTxtColor(a4, _blvC12TestForm.LblInput4) ChangeLblTxtColor(a5, _blvC12TestForm.LblInput5) ChangeLblTxtColor(a6, _blvC12TestForm.LblInput6) ChangeLblTxtColor(a7, _blvC12TestForm.LblInput7) ChangeLblTxtColor(a8, _blvC12TestForm.LblInput8) ChangeLblTxtColor(a9, _blvC12TestForm.LblInput9) ChangeLblTxtColor(a10, _blvC12TestForm.LblInput10) ChangeLblTxtColor(a11, _blvC12TestForm.LblInput11) ChangeLblTxtColor(a12, _blvC12TestForm.LblInput12) ChangeLblTxtColor(a13, _blvC12TestForm.LblInput13) End If End Sub Private Sub DealV9InputReplyData(a1 As Boolean, a2 As Boolean, a3 As Boolean, a4 As Boolean, a5 As Boolean, a6 As Boolean, a7 As Boolean, a8 As Boolean, a9 As Boolean, a10 As Boolean, a11 As Boolean, a12 As Boolean, a13 As Boolean) If InvokeRequired = True Then Dim dev As New delegate_SearchC12InputReplyData_Change(AddressOf DealV9InputReplyData) Me.Invoke(dev, New Object() {a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13}) Else ChangeLblTxtColor(a1, _blvV9TestForm.LblInput1) ChangeLblTxtColor(a2, _blvV9TestForm.LblInput2) ChangeLblTxtColor(a3, _blvV9TestForm.LblInput3) ChangeLblTxtColor(a4, _blvV9TestForm.LblInput4) ChangeLblTxtColor(a5, _blvV9TestForm.LblInput5) ChangeLblTxtColor(a6, _blvV9TestForm.LblInput6) ChangeLblTxtColor(a7, _blvV9TestForm.LblInput7) ChangeLblTxtColor(a8, _blvV9TestForm.LblInput8) ChangeLblTxtColor(a9, _blvV9TestForm.LblInput9) ChangeLblTxtColor(a10, _blvV9TestForm.LblInput10) ChangeLblTxtColor(a11, _blvV9TestForm.LblInput11) ChangeLblTxtColor(a12, _blvV9TestForm.LblInput12) ChangeLblTxtColor(a13, _blvV9TestForm.LblInput13) End If End Sub Private Sub DealC8InputReplyData(a1 As Boolean, a2 As Boolean, a3 As Boolean, a4 As Boolean, a5 As Boolean, a6 As Boolean, a7 As Boolean, a8 As Boolean, a9 As Boolean, a10 As Boolean, a11 As Boolean, a12 As Boolean, a13 As Boolean) If InvokeRequired = True Then Dim dev As New delegate_SearchC12InputReplyData_Change(AddressOf DealC8InputReplyData) Me.Invoke(dev, New Object() {a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13}) Else ChangeLblTxtColor(a1, _blvC8TestForm.LblInput1) ChangeLblTxtColor(a2, _blvC8TestForm.LblInput2) ChangeLblTxtColor(a3, _blvC8TestForm.LblInput3) ChangeLblTxtColor(a4, _blvC8TestForm.LblInput4) ChangeLblTxtColor(a5, _blvC8TestForm.LblInput5) ChangeLblTxtColor(a6, _blvC8TestForm.LblInput6) ChangeLblTxtColor(a7, _blvC8TestForm.LblInput7) ChangeLblTxtColor(a8, _blvC8TestForm.LblInput8) ChangeLblTxtColor(a9, _blvC8TestForm.LblInput9) ChangeLblTxtColor(a10, _blvC8TestForm.LblInput10) ChangeLblTxtColor(a11, _blvC8TestForm.LblInput11) ChangeLblTxtColor(a12, _blvC8TestForm.LblInput12) ChangeLblTxtColor(a13, _blvC8TestForm.LblInput13) End If End Sub ''' ''' 改变Lable背景颜色 ''' ''' ''' Private Sub ChangeLblTxtColor(flg As Boolean, Lbl As Label) If flg Then Lbl.BackColor = Color.Green Else Lbl.BackColor = Color.Transparent End If End Sub ''' ''' 处理巡回测试 ''' ''' Private Sub DealTourTest(databuff() As Byte) '_isTourRealy = True If databuff(7) = &H17 Then If databuff(9) >= 95 Then ModelsTourTestTipInfo($"Pass", Color.Green) Else ModelsTourTestTipInfo($"Fail", Color.Red) End If End If End Sub ''' ''' 刷新巡回数据委托 ''' ''' ''' Delegate Sub Delegate_SearchTourData_Change(txt As String, rgba As Color) ''' ''' 处理巡回测试数据 ''' ''' ''' Private Sub DealTourTestData(txt As String, rgba As Color) If InvokeRequired = True Then Dim dev As New Delegate_SearchTourData_Change(AddressOf DealTourTestData) Me.Invoke(dev, New Object() {txt, rgba}) Else _blvC5TestForm.Label48.Text = txt _blvC5TestForm.Label48.ForeColor = rgba End If End Sub ''' ''' 刷新巡回数据委托 ''' ''' ''' Delegate Sub Delegate_SearchTourC12Data_Change(txt As String, rgba As Color) ''' ''' 处理巡回测试数据 ''' ''' ''' Private Sub DealC12TourTestData(txt As String, rgba As Color) If InvokeRequired = True Then Dim dev As New Delegate_SearchTourC12Data_Change(AddressOf DealC12TourTestData) Me.Invoke(dev, New Object() {txt, rgba}) Else _blvC12TestForm.Label48.Text = txt _blvC12TestForm.Label48.ForeColor = rgba End If End Sub ''' ''' 处理巡回测试数据 ''' ''' ''' Private Sub DealC8TourTestData(txt As String, rgba As Color) If InvokeRequired = True Then Dim dev As New Delegate_SearchTourC12Data_Change(AddressOf DealC8TourTestData) Me.Invoke(dev, New Object() {txt, rgba}) Else _blvC8TestForm.Label48.Text = txt _blvC8TestForm.Label48.ForeColor = rgba End If End Sub Private Sub DealV9TourTestData(txt As String, rgba As Color) If InvokeRequired = True Then Dim dev As New Delegate_SearchTourC12Data_Change(AddressOf DealV9TourTestData) Me.Invoke(dev, New Object() {txt, rgba}) Else _blvV9TestForm.Label48.Text = txt _blvV9TestForm.Label48.ForeColor = rgba End If End Sub ''' ''' 处理设置信息 ''' ''' Private Sub DealSetInfo(databuff() As Byte) If databuff(8) = &H1 Then MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SetTheSuccess)}") Else MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SetTheFailed)}") End If End Sub ''' ''' 处理读取信息 ''' ''' Private Sub DealRecvInfo(dataBuff() As Byte) Dim host(63) As Byte Array.Copy(dataBuff, 8, host, 0, host.Length) Dim hosts As String = System.Text.Encoding.ASCII.GetString(host) Dim amd(63) As Byte Array.Copy(dataBuff, (8 + host.Length), amd, 0, amd.Length) Dim amds As String = System.Text.Encoding.ASCII.GetString(amd) RefreshParam(hosts, amds) End Sub ''' ''' 读取核心参数信息-委托 ''' Delegate Sub delegate_RefreshParam_Change(hosts As String, amds As String) ''' ''' 读取核心参数信息 ''' Public Sub RefreshParam(hosts As String, amds As String) If InvokeRequired = True Then Dim dev As New delegate_RefreshParam_Change(AddressOf RefreshParam) Me.Invoke(dev, New Object() {hosts, amds}) Else Label58.ForeColor = Color.Green Label56.ForeColor = Color.Green Label58.Text = hosts Label56.Text = amds End If End Sub ''' ''' 处理设置MQTT数据 ''' ''' Private Sub DealSetMQTTData(databuff() As Byte) Select Case databuff(8) Case 1 MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SerialPort)}{LanguageData.StringList(MultiLanguageDAL.StringEnum.SetTheSuccess)}") Case 2 MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SerialPort)}{LanguageData.StringList(MultiLanguageDAL.StringEnum.SetTheFailed)}") End Select End Sub ''' ''' 处理读取MQTT数据 ''' ''' Private Sub DealPortReadMQTTData(databuff() As Byte) Dim count As Integer = databuff(8) Console.WriteLine($"当前读取出{count}个MQTT参数信息") Dim devType As Byte = databuff(9) Dim len As Integer = databuff(10) Dim data(len - 1) As Byte Array.Copy(databuff, 12, data, 0, data.Length) Dim Str As String = System.Text.Encoding.ASCII.GetString(data) Select Case devType Case &H1 '阿里云产品密钥 RefreshMQTTInfo(Str, TextBox28) Case &H2 '阿里云设备名 RefreshMQTTInfo(Str, TextBox31) Case &H3 '阿里云设备秘钥 RefreshMQTTInfo(Str, TextBox32) Case &H4 '阿里云发布会话 RefreshMQTTInfo(Str, TextBox33) Case &H5 '阿里云订阅会话 RefreshMQTTInfo(Str, TextBox34) Case &H6 '保持在线时间 RefreshMQTTInfo(BitConverter.ToUInt16(data, 0), NumericUpDown1) Case &H7 '发布会话 RefreshMQTTInfo(Str, TextBox52) Case &H8 '发布会话 RefreshMQTTInfo(Str, TextBox53) Case &H9 '域名 RefreshMQTTInfo(Str, TextBox54) Case &HA '客户端ID RefreshMQTTInfo(Str, TextBox55) Case &HB '用户名 RefreshMQTTInfo(Str, TextBox56) Case &HC '密码 RefreshMQTTInfo(Str, TextBox57) Case Else MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SerialPort)} {LanguageData.StringList(MultiLanguageDAL.StringEnum.MQTT)} {LanguageData.StringList(MultiLanguageDAL.StringEnum.UnknownCommand)}!") End Select End Sub #End Region #End Region #Region "网络通讯_UDP" #Region "填充发送数据" ''' ''' 填充发送数据 ''' ''' ''' ''' Public Function FillSendData(cmd As Byte, databuff As Byte()) As Byte() Dim head As Byte() Dim crc16 As Byte() Dim sendPacket As Byte() head = SendDataHead(cmd, databuff) '获取DataHaed crc16 = CheckSendData(head, databuff) '获取Data检验值 sendPacket = FillCSeriesData(head, databuff, crc16) '组合发送数据 Return sendPacket End Function ''' ''' 填充发送数据包头 ''' ''' ''' ''' Private Function SendDataHead(cmd As Byte, databuff As Byte()) As Byte() Dim head As Byte() Dim packetLength As Byte() = IntToByteHB(_dataHeadLength + _dataCRCLength + databuff.Length) head = FillSendPacketHead(packetLength, cmd) Return head End Function ''' ''' 获取帧号 ''' ''' Private Function GetFrameNumber() As Integer Select Case _frameNumber Case 1 _frameNumber = 1 Case 2 _frameNumber = 2 Case 3 _frameNumber = 3 Case 4 _frameNumber = 4 Case 5 _frameNumber = 5 Case Else _frameNumber = 0 End Select _frameNumber += 1 Return _frameNumber End Function ''' ''' 填充发送信息包头 ''' ''' ''' ''' Public Function FillSendPacketHead(length As Byte(), cmd As Byte) As Byte() Dim dataHead As New List(Of Byte) dataHead.AddRange(_fixedHead) dataHead.AddRange(length) dataHead.AddRange(_t3sa) dataHead.Add(cmd) dataHead.AddRange(IntToByteLB(GetFrameNumber())) dataHead.AddRange(_fixeHostAddr) Return dataHead.ToArray End Function ''' ''' 填充C系列数据包 ''' ''' ''' ''' ''' Private Function FillCSeriesData(head As Byte(), data As Byte(), tail As Byte()) Dim databuff As New List(Of Byte) databuff.AddRange(head) databuff.AddRange(data) databuff.AddRange(tail) Return databuff.ToArray End Function ''' ''' 填充发送校验数据 ''' ''' ''' ''' Public Function CheckSendData(head As Byte(), data As Byte()) As Byte() Dim crc16 As Byte() Dim dataList As New List(Of Byte) dataList.AddRange(head) dataList.AddRange(data) crc16 = GetCRC16CheckSum(dataList.ToArray, dataList.Count) Return crc16 End Function ''' ''' CRC16校验 ''' ''' ''' ''' Public Function GetCRC16CheckSum(dataBuff() As Byte, length As Integer) As Byte() Dim crc16 As UInteger Dim crcBytes() As Byte crc16 = &HFFFF For i = 0 To length - 1 crc16 = crc16 And &HFFFF crc16 = crc16 Xor dataBuff(i) For bit = 0 To 7 crc16 = IIf((crc16 And 1) = 0, crc16 >> 1, (crc16 >> 1) Xor &HA001) Next Next crc16 = crc16 And &HFFFF crcBytes = BitConverter.GetBytes(UShort.Parse(crc16)) Return crcBytes End Function #End Region #Region "UDP网络发送接收" ''' ''' 枚举Data偏移 ''' Enum EnDataOffset ''' ''' 包头 ''' Head = 0 ''' ''' 系统固定4个字节 ''' T3SA = 4 ''' ''' 命令字 ''' CMD = 8 End Enum ''' UDP通讯套接字 Private _udpClient As UdpClient ''' ''' Socket网络套接字 ''' Private _socket As Socket ''' ''' 是否处于网络接收状态 ''' Private _isReceiving As Boolean ''' ''' UDP通讯接收线程 ''' Private _receiveThread As Thread ''' ''' 包头数据长度 ''' Private _dataHeadLength As UShort = 15 ''' ''' 数据CRC校验长度 ''' Private _dataCRCLength As UShort = 2 ''' ''' 发送数据包头 ''' Private _fixedHead As Byte() = {&HAA, &H55} ''' ''' 系统固定的4个字节 ''' Private _t3sa As Byte() = {&H54, &H33, &H53, &H41} ''' ''' 主机项目地址 ''' Public _fixeHostAddr As Byte() = {&HFF, &HFF, &HFF, &HFF} ''' ''' 帧号 ''' Private _frameNumber As Integer = 1 ''' ''' 搜索命令的表格索引 ''' Private _CmdSearchIndex As Integer = 1 ''' ''' RCU主机搜索命令的表格索引 ''' Private _RCUHostsSearchIndex As Integer = 1 ''' ''' RCU搜索命令的表格索引 ''' Private _RCUSearchIndex As Integer = 1 ''' ''' 查询设备状态的表格索引 ''' Private _QueryDevStateIndex As Integer = 1 ''' ''' 设置配置数据标志位 ''' Private _SetConfigSign As Boolean ''' ''' 查询批量数据的表格索引 ''' Private _QueryBatchDataIndex As Integer = 1 '''' '''' 网络连接 '''' 'Public Sub NetworkConnectChange() ' UpdataConnectStatus(_connectStatus) 'End Sub ''' ''' 更新连接状态 ''' Public Sub UpdataConnectStatus() Dim address As IPAddress = IPAddress.Any Dim ep As IPEndPoint Dim addressString As String = _localIP Dim port As Integer If Integer.TryParse(_localPort, port) = False Then MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ThePortInputIsInvalid)}!") _connectStatus = False Return End If If IPAddress.TryParse(addressString, address) = False Then MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.TheIPAddressIsInvalid)}!") _connectStatus = False Return End If Try ep = New IPEndPoint(address, port) If _connectStatus = False Then _isReceiving = True '_udpClient = New UdpClient(New IPEndPoint(IPAddress.Any, 33444)) 'ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf Receive)) _socket = New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp) _socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1) '广播的精髓 ''加保护机制 _socket.Bind(ep) _connectStatus = True _receiveThread = New Thread(New ThreadStart(AddressOf UdpRecviveData)) _receiveThread.Start() _isNetWork = True Else _isReceiving = False _connectStatus = False _isNetWork = False ''加保护机制 _socket.Shutdown(SocketShutdown.Both) _socket.Close() End If Catch ex As Exception 'AppendMatchTipText($"网络异常! {ex.Message}", Color.Red) Console.WriteLine($"网络异常! {ex.Message}") End Try End Sub 'Private Sub Receive(obj As Object) ' Dim ep As New IPEndPoint(IPAddress.Any, 0) ' Dim bytes() As Byte ' While True ' Try ' bytes = _udpClient.Receive(ep) ' Catch ex As Exception ' Continue While ' End Try ' If bytes.Length = 0 Then Continue While ' _udpClient.Send(bytes, bytes.Length, ep) ' End While 'End Sub ''' ''' 发送UDP数据 ''' ''' Public Sub SendUDPData(sendPacket As Byte()) Dim remoteEp As New IPEndPoint(_RemoteIP, _RemotePort) If _connectStatus = True OrElse SerialPort.IsOpen Then Console.WriteLine($"远程IP地址:{remoteEp.Address}-{remoteEp.Port} 发送数据:{ByteToString(sendPacket)}") 'If isDhcp Then SetRegistData($"TX:远程IP地址:{remoteEp.Address}-{remoteEp.Port} 发送数据【{sendPacket.Length }】:{ByteToString(sendPacket)}", 4) _socket.SendTo(sendPacket, remoteEp) Else MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.PleaseOpenTheNetworkOrSerialPort)},IP地址:{remoteEp.Address}-{remoteEp.Port}!") End If End Sub Public Sub threadSendUDPData(sendPacket As Byte()) Dim remoteEp As New IPEndPoint(IPAddress.Parse("255.255.255.255"), 3341) If _connectStatus = True OrElse SerialPort.IsOpen Then 'Console.WriteLine($"远程IP地址:{remoteEp.Address}-{remoteEp.Port} 发送数据:{ByteToString(sendPacket)}") SetRegistData($"TX:远程IP地址:{remoteEp.Address}-{remoteEp.Port} 发送数据:{ByteToString(sendPacket)}", 4) Try gsocket.SendTo(sendPacket, remoteEp) Catch ex As Exception End Try Else MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.PleaseOpenTheNetworkOrSerialPort)},IP地址:{remoteEp.Address}-{remoteEp.Port}!") End If End Sub ''' ''' 发送Update数据 ''' ''' Public Sub SendUpdateData(sendPacket As Byte(), remoteEp As IPEndPoint) If _connectStatus = True OrElse SerialPort.IsOpen Then 'Console.WriteLine($"远程IP地址:{remoteEp.Address}-{remoteEp.Port} 发送数据:{ByteToString(sendPacket)}") SetRegistData($"TX:远程IP地址:{remoteEp.Address}-{remoteEp.Port} 发送数据:{ByteToString(sendPacket)}", 4) _socket.SendTo(sendPacket, remoteEp) Else MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.PleaseOpenTheNetworkOrSerialPort)},IP地址:{remoteEp.Address}-{remoteEp.Port}!") End If End Sub ''' ''' 发送Socket数据 ''' ''' Public Sub SendSocketData(csb As CommSocketBLL, sendPacket As Byte(), remoteEp As IPEndPoint) If csb.ConnSocket = True Then ' Console.WriteLine($"Socket远程IP地址:{remoteEp.Address}-{remoteEp.Port} Socket发送数据:{ByteToString(sendPacket)}") SetRegistData($"TX:远程IP地址:{remoteEp.Address}-{remoteEp.Port} 发送数据:{ByteToString(sendPacket)}", 4) csb.Sockets.SendTo(sendPacket, remoteEp) Else MsgBox($"请打开Socket网络!") End If End Sub ''' ''' UDP接收数据 ''' Private Sub UdpRecviveData() Dim ep As New IPEndPoint(IPAddress.Any, _RemotePort) Dim recvLength As Integer Dim recvBuffer(1024) As Byte While _connectStatus = True Try recvLength = _socket.ReceiveFrom(recvBuffer, ep) Catch ex As Exception 'Console.WriteLine($"Udp Recv Error:{ex.Message}") Return End Try ReceivingDataProcessing(recvBuffer, recvLength, ep) End While End Sub #End Region #Region "接收数据处理" ''' ''' 接收数据处理 ''' ''' ''' ''' Private Sub ReceivingDataProcessing(recvBuffer() As Byte, recvLength As Integer, ep As IPEndPoint) 'Console.WriteLine($"{vbCrLf}远程IP:{ep.Address} 端口号:{ep.Port}") Console.WriteLine($"网络接收数据:{ByteToString(recvBuffer)}") Dim startIndex As Integer '定义一个开始的计数值 Dim packetLength As Integer '定义包的长度 While startIndex < recvLength '判断计数值是否小于总包长 If recvBuffer(startIndex) = _fixedHead(EnDataOffset.Head) AndAlso recvBuffer(startIndex + 1) = _fixedHead(EnDataOffset.Head + 1) Then ' 判断包头是否等于AA55 If recvBuffer(startIndex + EnDataOffset.T3SA) = _t3sa(0) AndAlso '判断第4,5,6,7位是否等于固定值 recvBuffer(startIndex + EnDataOffset.T3SA + 1) = _t3sa(1) AndAlso recvBuffer(startIndex + EnDataOffset.T3SA + 2) = _t3sa(2) AndAlso recvBuffer(startIndex + EnDataOffset.T3SA + 3) = _t3sa(3) Then packetLength = recvBuffer(startIndex + 2) + recvBuffer(startIndex + 3) * 256 '赋值包长 If packetLength + startIndex <= recvLength Then '判断包长 + 计数值是否小于等于总包长 Dim packetData(packetLength - 1) As Byte '定义一个新数据包数组 Array.Copy(recvBuffer, startIndex, packetData, 0, packetLength) '复制数组 +5个重载 If CheckCRC16Sucess(packetData, packetData.Length) Then '判断CRC16校验是否通过 DealData(packetData, ep) '分部处理数据(显示文字提示) startIndex += packetData.Length '计数值更新 Else 'Console.WriteLine($"CRC16校验失败!{vbNewLine}", Color.Red) Exit While End If Else 'Console.WriteLine($"数据包长校验失败!{vbNewLine}", Color.Red) Exit While End If Else ' Console.WriteLine($"数据校验失败!{vbNewLine}", Color.Red) Exit While End If ElseIf recvBuffer(startIndex) = EnTftpCmd.Null Then 'Console.WriteLine($"TFTP接收_回复数据:{ByteToString(recvBuffer)}") If recvBuffer(startIndex + 1) = EnTftpCmd.RRQ OrElse recvBuffer(startIndex + 1) = EnTftpCmd.WRQ OrElse recvBuffer(startIndex + 1) = EnTftpCmd.DATA OrElse recvBuffer(startIndex + 1) = EnTftpCmd.ACK OrElse recvBuffer(startIndex + 1) = EnTftpCmd.TError Then packetLength = 4 If packetLength + startIndex <= recvLength Then Dim packetData(packetLength - 1) As Byte Array.Copy(recvBuffer, startIndex, packetData, 0, packetLength) DealTftpData(packetData, ep) startIndex += packetData.Length End If End If Else 'Console.WriteLine($"非主机发送的数据!数据:{ByteToString(recvBuffer)}{vbNewLine}", Color.Red) Exit While End If End While End Sub ''' ''' 检验CRC16成功 ''' ''' ''' ''' Private Function CheckCRC16Sucess(dataBuff() As Byte, length As Integer) As Boolean Dim crcBytes() As Byte = GetCRC16CheckSum(dataBuff, length - 2) If crcBytes(0) <> dataBuff(length - 2) OrElse crcBytes(1) <> dataBuff(length - 1) Then Return False Return True End Function ''' ''' 处理数据 ''' ''' 远程回复数据 ''' 远程IP和端口 ''' Private Function DealData(dataBuff() As Byte, ep As IPEndPoint) 'Console.WriteLine($"UDP收到的数据:{ByteToString(dataBuff)}") SetRegistData($"RX:远程IP地址:{ep.Address}-{ep.Port} 接收数据:{ByteToString(dataBuff)}", 4) Select Case dataBuff(EnDataOffset.CMD) 'Case &H1 '搜索主机 'DealCmdSearchHost(dataBuff) Case &HB1 '搜索主机_读取主机参数信息 DealCmdReadHostsInfo(dataBuff) Case &HB3 '校验命令 DealCmdCheckUpdate(dataBuff, ep) Case &HB4 '复位命令 DealCmdResetUpdate(dataBuff, ep) Case &HA '固件升级命令 DealCmdFirmwareUpdate(dataBuff, ep) Case &HD1 '查询设备状态 DealCmdQueryDeviceState(dataBuff, ep) Case &HD2 '配置下发 DealCmdConfigIssued(dataBuff) Case &HD3 '网络各机型测试 DealCmdC5ModelTest(dataBuff) Case &HD4 'MQTT设置 DealCmdSetMQTTData(dataBuff) Case &HD5 'MQTT读取 DealCmdReadMQTTData(dataBuff) Case &H30 '读取设置配置 DealCmdReadConfigData(dataBuff) Case &H31 '设置配置 DealCmdSetConfigData(dataBuff) Case Else MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.UnknownCommand)}!") End Select Return True End Function ''' ''' 搜索主机偏移量 ''' Private startIndex As Integer = 15 ''' ''' 搜索主机_详细信息 ''' Private _searchHosts As Boolean ''' ''' 搜索主机 ''' Private _searchHost As Boolean ''' ''' 搜索主机列表键值对 ''' Public _hostsList As New Dictionary(Of String, SearchHostsListBLL) ''' ''' 搜索主机 ''' 读取主机参数信息 ''' ''' Private Sub DealCmdReadHostsInfo(dataBuff() As Byte) If dataBuff.Length > 17 Then Dim cars As String = Encoding.GetEncoding("GBK").GetString(New Byte() {255}) Dim btnState As String = dataBuff(startIndex) ''本机按键状态 Dim temp(startIndex) As Byte Array.Copy(dataBuff, (startIndex + 1), temp, 0, temp.Length - 1) startIndex += temp.Length Dim modelNumber As String = Encoding.UTF8.GetString(temp) ''机型编号 Dim pojectList(5) As String ''IP地址, 服务器地址, 子网掩码, 网关, 端口, DNS For index = 0 To 5 If index = 4 Then pojectList(index) = $"{BitConverter.ToUInt16(dataBuff, startIndex + 1)}" startIndex += 4 Else pojectList(index) = $"{dataBuff(startIndex + 1)}.{dataBuff(startIndex + 2)}.{dataBuff(startIndex + 3)}.{dataBuff(startIndex + 4)}" startIndex += 4 End If Next Dim temps(19) As Byte Array.Copy(dataBuff, (startIndex + 1), temps, 0, temps.Length) Dim swVersion As String = Encoding.UTF8.GetString(temps) ''软件版本号(20Byte) swVersion = swVersion.Replace(vbNullChar, "") startIndex += temps.Length ''主机时间 Dim hostTime As String = $"20{dataBuff(startIndex + 1)}/{dataBuff(startIndex + 2)}/{dataBuff(startIndex + 3)} {dataBuff(startIndex + 4)}:{dataBuff(startIndex + 5)}:{dataBuff(startIndex + 6)}" ''主机时间 startIndex += 6 Dim Launcher As String = "" If dataBuff.Length > 440 Then Dim Launbuff(15) As Byte Array.Copy(dataBuff, (startIndex + 1), Launbuff, 0, Launbuff.Length) Launcher = Encoding.GetEncoding("GBK").GetString(Launbuff) Launcher = Launcher.Replace(vbNullChar, "").Replace(cars, "") End If startIndex += 20 Dim mac As String = BitConverter.ToString(dataBuff, startIndex + 1, 6) ''MAC地址 startIndex += 6 Dim pojectLists(8) As String ''项目编号, 房号ID, 房型ID, 配置数据版本号, 房态, 季节, 锁定状态, 授权时间, 授权到期时间 Dim ttt1 As Date For index = 0 To 8 If index = 1 Then '房号ID pojectLists(index) = $"{BitConverter.ToUInt32(dataBuff, startIndex + 1)}" pojectLists(index) = pojectLists(index).Replace(vbNullChar, "").Replace(cars, "") startIndex += 4 ElseIf index = 2 Then '房型ID pojectLists(index) = $"{BitConverter.ToUInt32(dataBuff, startIndex + 1)}" pojectLists(index) = pojectLists(index).Replace(vbNullChar, "").Replace(cars, "") startIndex += 4 ElseIf index = 3 Then '配置数据版本 pojectLists(index) = $"{dataBuff(startIndex + 1)}-{dataBuff(startIndex + 2)}-{dataBuff(startIndex + 3)}-{dataBuff(startIndex + 4)}" pojectLists(index) = pojectLists(index).Replace(vbNullChar, "").Replace(cars, "") startIndex += 4 ElseIf index = 4 Then '房态 pojectLists(index) = GetRoomStateTxt($"{BitConverter.ToUInt32(dataBuff, startIndex + 1)}") pojectLists(index) = pojectLists(index).Replace(vbNullChar, "").Replace(cars, "") startIndex += 4 ElseIf index = 5 Then '季节 Dim sen(3) As Byte Array.Copy(dataBuff, (startIndex + 1), sen, 0, sen.Length) 'pojectLists(index) = GetRoomSeasonTxt(sen) pojectLists(index) = GetSeasonText(sen) startIndex += 4 ElseIf index = 6 Then '锁定状态 pojectLists(index) = GetRoomLockTxt($"{BitConverter.ToUInt32(dataBuff, startIndex + 1)}") startIndex += 4 ElseIf index = 7 Then '授权时间 'Dim times As Long = (CInt(dataBuff(startIndex + 4)) * 256 * 65536) + (CInt(dataBuff(startIndex + 3)) * 65536) + (CInt(dataBuff(startIndex + 2)) * 256) + CInt(dataBuff(startIndex + 1)) Dim times As Long = BitConverter.ToUInt32(dataBuff, startIndex + 1) ttt1 = FromUnixTime(times, 8) 'Console.WriteLine($"---授权时间戳---: {times}") 'Console.WriteLine($"---授权时间---: {ttt1}") pojectLists(index) = $"{ttt1}" startIndex += 4 ElseIf index = 8 Then '授权到期时间 ''Date.Now.ToUniversalTime.Ticks Dim times As Long = BitConverter.ToUInt32(dataBuff, startIndex + 1) Dim ttt2 As Date = FromUnixTime(times, 8) Dim tm As TimeSpan = ttt2 - ttt1 ' Console.WriteLine($"---授权时间戳---: {times}") 'Console.WriteLine($"---授权到期时间---: {tm.Days()}") pojectLists(index) = $"{ttt2}" startIndex += 4 Else pojectLists(index) = $"{BitConverter.ToUInt32(dataBuff, startIndex + 1)}" startIndex += 4 End If Next Dim roomnumber As String '房号备注 Dim tem(15) As Byte Array.Copy(dataBuff, (startIndex + 1), tem, 0, tem.Length) roomnumber = Encoding.GetEncoding("GBK").GetString(tem) roomnumber = roomnumber.Replace(vbNullChar, "").Replace(cars, "") startIndex += 16 Dim roomtype As String '房型备注 Dim ter(15) As Byte Array.Copy(dataBuff, (startIndex + 1), ter, 0, ter.Length) roomtype = Encoding.GetEncoding("GBK").GetString(ter) roomtype = roomtype.Replace(vbNullChar, "").Replace(cars, "") startIndex += 16 Dim tempNote(95) As Byte Array.Copy(dataBuff, (startIndex + 1), tempNote, 0, tempNote.Length) Dim roomRemarks As String = Encoding.GetEncoding("GBK").GetString(tempNote) ''房间备注(96Byte) roomRemarks = roomRemarks.Replace(vbNullChar, "").Replace($" ", "") startIndex += tempNote.Length Dim mcuNames As String = String.Empty Dim centralNames As String = String.Empty If dataBuff.Length > 384 Then Dim mcuName(63) As Byte Array.Copy(dataBuff, (startIndex + 1), mcuName, 0, mcuName.Length) mcuNames = Encoding.GetEncoding("GBK").GetString(mcuName) ''Core(64Byte) Dim car As String = Encoding.GetEncoding("GBK").GetString(New Byte() {255}) mcuNames = mcuNames.Replace(vbNullChar, "").Replace(car, "") startIndex += mcuName.Length Dim centralName(63) As Byte Array.Copy(dataBuff, (startIndex + 1), centralName, 0, centralName.Length) centralNames = Encoding.GetEncoding("GBK").GetString(centralName) ''Model(64Byte) centralNames = centralNames.Replace(vbNullChar, "").Replace(car, "") startIndex += centralName.Length 'Dim c As Char = mcuNames.Chars(0) 'Console.WriteLine("Length:" & mcuNames.Length() & " C0:" & c) End If Dim pzholtename As String = "****" Dim pzroomname As String = "****" If dataBuff.Length > 447 Then Dim name(31) As Byte Array.Copy(dataBuff, (startIndex + 1), name, 0, name.Length) Console.WriteLine($"name={ByteToString(name)}") pzholtename = Encoding.GetEncoding("GBK").GetString(name) Console.WriteLine($"pzholtename={pzholtename}") pzholtename = pzholtename.Replace(vbNullChar, "").Replace(cars, "") startIndex += name.Length Array.Copy(dataBuff, (startIndex + 1), name, 0, name.Length) pzroomname = Encoding.GetEncoding("GBK").GetString(name) 'Console .WriteLine () Console.WriteLine($"配置房型数据:{ByteToString(name)}") pzroomname = pzroomname.Replace(vbNullChar, "").Replace(cars, "") End If startIndex = 15 '显示数据到表格 If _searchHosts = True Then 'RefreshSearchHosts() Dim isContainsKey As Boolean Dim devName As String = SearchHostsListBLL.GetHostInfo(mac, pojectList(0)) Dim adecname As String = String.Empty For Each astr In _hostsList.Keys If astr.Contains(mac) Then adecname = astr End If Next If String.IsNullOrEmpty(adecname) Then isContainsKey = False Else _hostsList.Remove(adecname) isContainsKey = True End If If dataBuff.Length > 384 Then If _hostsList.ContainsKey(devName) = False Then _hostsList.Add(devName, New SearchHostsListBLL(btnState, modelNumber, pojectList(0), pojectList(1), pojectList(2), pojectList(3), pojectList(4), pojectList(5), swVersion, hostTime, mac, pojectLists(0), pojectLists(1), roomnumber, pojectLists(2), roomtype, pojectLists(3), pojectLists(4), pojectLists(5), pojectLists(6), pojectLists(7), pojectLists(8), roomRemarks, mcuNames, centralNames, Launcher, pzholtename, pzroomname)) RefreshSearchHostL(_hostsList.Item(devName), isContainsKey) 'RefreshSearchHostsLists(_hostsList(devName).BtnSatae, _hostsList(devName).ModelNumber, _hostsList(devName).IPAddress, _hostsList(devName).ServiceAddress, _hostsList(devName).Subnet, ' _hostsList(devName).Gateway, _hostsList(devName).Port, _hostsList(devName).DNS, _hostsList(devName).SoftwareVersion, _hostsList(devName).HostsTime, ' _hostsList(devName).MAC, _hostsList(devName).ProjectCode, _hostsList(devName).RoomNumberId, _hostsList(devName).RoomNumber, _hostsList(devName).RoomTypeId, ' _hostsList(devName).RoomType, _hostsList(devName).ConfigVersion, _hostsList(devName).RoomState, _hostsList(devName).Season, _hostsList(devName).Lock, ' _hostsList(devName).PrivilegedTime, _hostsList(devName).PrivilegedDays, _hostsList(devName).RoomRemarks, _hostsList(devName).MCUName, _hostsList(devName).CentralName, _hostsList(devName).Launcher, _hostsList(devName).pzholtename, _hostsList(devName).pzroomname) End If End If End If End If End Sub Delegate Sub InSearchHostsList_Change(HostData As SearchHostsListBLL, isupdate As Boolean) Public Sub RefreshSearchHostL(HostData As SearchHostsListBLL, isupdate As Boolean) If InvokeRequired = True Then Dim dev As New InSearchHostsList_Change(AddressOf RefreshSearchHostL) Me.Invoke(dev, HostData, isupdate) Else Dim rowsindex As Integer = 0 If isupdate Then For r As Integer = 1 To GrdRCUHost.Rows - 1 If GrdRCUHost.Cell(r, EnRCUHosts.MAC).Text.Trim = HostData.MAC.Trim Then rowsindex = r Exit For End If Next 'MsgBox($"rowsindex={rowsindex}") Else GrdRCUHost.AddItem("") rowsindex = _RCUSearchIndex LabelCount.Text = $"0/{_RCUSearchIndex}" _RCUSearchIndex += 1 End If If rowsindex = 0 Then Return '本机按键状态 If HostData.BtnSatae.Equals("0") Then GrdRCUHost.Cell(rowsindex, EnRCUHosts.IPType).Text = "Exception" ElseIf HostData.BtnSatae.Equals("2") Then GrdRCUHost.Cell(rowsindex, EnRCUHosts.IPType).Text = "Manual Setting" Else GrdRCUHost.Cell(rowsindex, EnRCUHosts.IPType).Text = "Auto" End If ' GrdRCUHost.Cell(rowsindex, EnRCUHosts.Affiliation).Text = "本地" GrdRCUHost.Cell(rowsindex, EnRCUHosts.ModelNumber).Text = HostData.ModelNumber '机型编号 GrdRCUHost.Cell(rowsindex, EnRCUHosts.IPAddress).Text = "" GrdRCUHost.Cell(rowsindex, EnRCUHosts.IPAddress).Text = HostData.IPAddress 'IP地址 GrdRCUHost.Cell(rowsindex, EnRCUHosts.ServiceAddr).Text = HostData.ServiceAddress '服务器地址 GrdRCUHost.Cell(rowsindex, EnRCUHosts.Subnet).Text = HostData.Subnet '子网掩码 GrdRCUHost.Cell(rowsindex, EnRCUHosts.Gateway).Text = HostData.Gateway '网关 GrdRCUHost.Cell(rowsindex, EnRCUHosts.Port).Text = HostData.Port '端口 GrdRCUHost.Cell(rowsindex, EnRCUHosts.DNS).Text = HostData.DNS 'DNS GrdRCUHost.Cell(rowsindex, EnRCUHosts.SoftwareVersion).Text = HostData.SoftwareVersion '软件版本号 GrdRCUHost.Cell(rowsindex, EnRCUHosts.Time).Text = HostData.HostsTime '主机时间 GrdRCUHost.Cell(rowsindex, EnRCUHosts.MAC).Text = HostData.MAC 'MAC GrdRCUHost.Cell(rowsindex, EnRCUHosts.ProjectCode).Text = HostData.ProjectCode '项目编号 GrdRCUHost.Cell(rowsindex, EnRCUHosts.RoomNumberId).Text = HostData.RoomNumberId '房号ID GrdRCUHost.Cell(rowsindex, EnRCUHosts.RoomNumber).Text = HostData.RoomNumber '房号备注 GrdRCUHost.Cell(rowsindex, EnRCUHosts.RoomTypeId).Text = HostData.RoomTypeId '房型ID GrdRCUHost.Cell(rowsindex, EnRCUHosts.RoomType).Text = HostData.RoomType '房型备注 GrdRCUHost.Cell(rowsindex, EnRCUHosts.ConfigVersion).Text = GetConfigVersion(HostData.ConfigVersion) '配置数据版本号 GrdRCUHost.Cell(rowsindex, EnRCUHosts.RoomState).Text = HostData.RoomState '房态 GrdRCUHost.Cell(rowsindex, EnRCUHosts.Season).Text = HostData.Season '季节 GrdRCUHost.Cell(rowsindex, EnRCUHosts.Lock).Text = HostData.Lock '锁定状态 GrdRCUHost.Cell(rowsindex, EnRCUHosts.PrivilegedTime).Text = HostData.PrivilegedTime '授权时间 GrdRCUHost.Cell(rowsindex, EnRCUHosts.PrivilegedDays).Text = HostData.PrivilegedDays '授权到期时间 GrdRCUHost.Cell(rowsindex, EnRCUHosts.RoomRemarks).Text = HostData.RoomRemarks '房间备注 GrdRCUHost.Cell(rowsindex, EnRCUHosts.MCUName).Text = HostData.MCUName 'MCU机型名称 GrdRCUHost.Cell(rowsindex, EnRCUHosts.CentralName).Text = HostData.CentralName '中控机型名称 GrdRCUHost.Cell(rowsindex, EnRCUHosts.Launcher).Text = HostData.Launcher '中控机型名称 GrdRCUHost.Cell(rowsindex, EnRCUHosts.pzholtename).Text = HostData.pzholtename '中控机型名称 GrdRCUHost.Cell(rowsindex, EnRCUHosts.pzroomname).Text = HostData.pzroomname 'GrdRCUHost.Range(_RCUSearchIndex, EnRCUHosts.ID, _RCUSearchIndex - 1, EnRCUHosts.ID).Merge() 'GrdRCUHost.Range(_RCUSearchIndex, EnRCUHosts.IsCheck, _RCUSearchIndex - 1, EnRCUHosts.IsCheck).Merge() 'GrdRCUHost.Range(_RCUSearchIndex, EnRCUHosts.Update, _RCUSearchIndex - 1, EnRCUHosts.Update).Merge() 'ComparativeData(_RCUSearchIndex, EnRCUHosts.ProjectCode, Color.Red, GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.Lock).ForeColor) End If End Sub Public Function GetIPType(iptype As String) As String If iptype.Trim.Equals("1") Then Return "Auto" ElseIf iptype.Trim.Equals("2") Then Return "Manual Setting" Else Return "Data exception (default manual)" End If End Function ''' ''' 局部刷新设备列表委托 ''' Delegate Sub delegate_SearchHostsList_Change(btnSatae As String, modelNumber As String, iPAddress As String, serviceAddr As String, subnet As String, gateway As String, port As String, dns As String, softwareVer As String, hostsTime As String, mac As String, projectCode As String, roomNumberId As String, roomNumber As String, roomTypeId As String, roomType As String, configVer As String, roomState As String, season As String, lock As String, privilegedTime As String, privilegedDays As String, roomRemarks As String, mcu As String, central As String, Launcher As String, pzholtename As String, pzroomname As String) ''' ''' 刷新设备列表信息 ''' 局部刷新_委托 ''' ''' ''' ''' ''' ''' ''' ''' ''' ''' ''' ''' ''' ''' ''' ''' ''' ''' ''' ''' ''' ''' ''' ''' ''' ''' Public Sub RefreshSearchHostsLists(btnSatae As String, modelNumber As String, iPAddress As String, serviceAddr As String, subnet As String, gateway As String, port As String, dns As String, softwareVer As String, hostsTime As String, mac As String, projectCode As String, roomNumberId As String, roomNumber As String, roomTypeId As String, roomType As String, configVer As String, roomState As String, season As String, lock As String, privilegedTime As String, privilegedDays As String, roomRemarks As String, mcu As String, central As String, Launcher As String, pzholtename As String, pzroomname As String) If InvokeRequired = True Then Dim dev As New delegate_SearchHostsList_Change(AddressOf RefreshSearchHostsLists) Me.Invoke(dev, New Object() {btnSatae, modelNumber, iPAddress, serviceAddr, subnet, gateway, port, dns, softwareVer, hostsTime, mac, projectCode, roomNumberId, roomNumber, roomTypeId, roomType, configVer, roomState, season, lock, privilegedTime, privilegedDays, roomRemarks, mcu, central, Launcher, pzholtename, pzroomname}) Else GrdRCUHost.AddItem("") GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.BtnSatae).Text = btnSatae '本机按键状态 GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.ModelNumber).Text = modelNumber '机型编号 GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.IPAddress).Text = iPAddress 'IP地址 GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.ServiceAddr).Text = serviceAddr '服务器地址 GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.Subnet).Text = subnet '子网掩码 GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.Gateway).Text = gateway '网关 GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.Port).Text = port '端口 GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.DNS).Text = dns 'DNS GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.SoftwareVersion).Text = softwareVer '软件版本号 GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.Time).Text = hostsTime '主机时间 GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.MAC).Text = mac 'MAC GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.ProjectCode).Text = projectCode '项目编号 GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.RoomNumberId).Text = roomNumberId '房号ID GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.RoomNumber).Text = roomNumber '房号备注 GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.RoomTypeId).Text = roomTypeId '房型ID GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.RoomType).Text = roomType '房型备注 GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.ConfigVersion).Text = GetConfigVersion(configVer) '配置数据版本号 GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.RoomState).Text = roomState '房态 GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.Season).Text = season '季节 GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.Lock).Text = lock '锁定状态 GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.PrivilegedTime).Text = privilegedTime '授权时间 GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.PrivilegedDays).Text = privilegedDays '授权到期时间 GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.RoomRemarks).Text = roomRemarks '房间备注 GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.MCUName).Text = mcu 'MCU机型名称 GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.CentralName).Text = central '中控机型名称 GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.Launcher).Text = Launcher '中控机型名称 GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.pzholtename).Text = pzholtename '中控机型名称 GrdRCUHost.Cell(_RCUSearchIndex, EnRCUHosts.pzroomname).Text = pzroomname LabelCount.Text = $"0/{_RCUSearchIndex}" _RCUSearchIndex += 1 End If End Sub Public Function GetConfigVersion(configVer As String) As Integer Dim buff() As String = configVer.Split("-") If buff.Length = 4 Then If buff(3) > 0 AndAlso buff(2) > 0 Then Return 0 Else If buff(2) < 255 Then Return buff(0) + buff(1) * 255 Else Return 0 End If End If Else Return 0 End If End Function ''' ''' 获取房间状态文本 ''' ''' ''' Private Function GetRoomStateTxt(state As String) As String Dim sta As String Select Case state Case &H1 sta = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Rent)}" Case &H2 sta = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.CheckingOut)}" Case &H3 sta = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.VacantRoom)}" Case &H4 sta = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ForRent)}" Case Else sta = state End Select Return sta End Function ''' ''' 获取房间是否锁定 ''' ''' ''' Private Function GetRoomLockTxt(lock As String) As String Dim loc As String = String.Empty Select Case lock Case &H0 loc = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Normal)}" Case &H1 loc = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Lock)}" End Select Return loc End Function ''' ''' 获取房间季节 ''' ''' ''' Private Function GetRoomSeasonTxt(season As Byte()) As String Dim time As Integer = Date.Now.Month Dim sens As Byte Select Case time Case 1, 2, 3, 4 sens = season(0) Case 5, 6, 7, 8 sens = season(1) Case 9, 10, 11, 12 sens = season(2) End Select Dim rseason As String = GetSeasonTxt(sens) Return rseason End Function ''' ''' 设置12个月的季节 ''' ''' ''' Private Function GetSeasonText(season As Byte()) Dim str As String = String.Empty If season.Length > 3 Then Dim str1 As String = GetMonthSeason(season(0)) Dim str2 As String = GetMonthSeason(season(1)) Dim str3 As String = GetMonthSeason(season(2)) str = str1 & str2 & str3 str = str.Insert(3, " ").Insert(7, " ").Insert(11, " ") End If Return str End Function ''' ''' 获取当月季节 ''' ''' ''' Private Function GetMonthSeason(season As Byte) Dim b1 As Byte = (season >> 0) And 3 Dim b2 As Byte = (season >> 2) And 3 Dim b3 As Byte = (season >> 4) And 3 Dim b4 As Byte = (season >> 6) And 3 Dim rseason As String = GetSeasonTxt(b1) & GetSeasonTxt(b2) & GetSeasonTxt(b3) & GetSeasonTxt(b4) Return rseason End Function ''' ''' 获取季节文本 ''' ''' ''' Private Function GetSeasonTxt(season As Byte) As String Dim rseason As String = String.Empty Select Case season Case &H1 rseason = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Spring)}" Case &H2 rseason = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Summer)}" Case &H0 rseason = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Autumn)}" Case &H3 rseason = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Winter)}" End Select Return rseason End Function ''' ''' 搜索主机列表委托 ''' Delegate Sub delegate_SearchHosts_Change() ''' ''' 搜索主机列表信息 ''' Public Sub RefreshSearchHosts() If InvokeRequired = True Then Dim dev As New delegate_SearchHosts_Change(AddressOf RefreshSearchHosts) Me.Invoke(dev) Else GrdRCUHost.Rows += 1 End If End Sub ''' ''' 提示信息委托 ''' Delegate Sub delegate_SearchTipInfo_Change(TipTxt As String) ''' ''' 读取配置信息委托 ''' Public Sub RefreshSearchTipInfo(TipTxt As String) If InvokeRequired = True Then Dim dev As New delegate_SearchTipInfo_Change(AddressOf RefreshSearchTipInfo) Me.Invoke(dev, New Object() {TipTxt}) Else LblTipTxt.Text = TipTxt End If End Sub ''' ''' 查询设备状态 ''' ''' ''' Private Sub DealCmdQueryDeviceState(dataBuff() As Byte, ep As IPEndPoint) RefreshQueryDveStateIPAndAddr(ep) Dim devCount As Int16 = dataBuff(15) RefreshQueryDveState(devCount) Dim len As Integer = 15 If dataBuff.Length > 15 Then For index = 0 To devCount - 1 Dim iPAddress As String = ep.Address.ToString Dim port As String = ep.Port Dim devTypeBy As Byte = dataBuff(len + 1) Dim devType As String = GetDevTypeToString(devTypeBy) Dim devAddress As String = dataBuff(len + 2) Dim devState As String = dataBuff(len + 3) devState = GetDeviceState(devState) Dim stateColor As Color = GetDeviceStateColor(devState) Try GrdDevExist.Cell(_QueryDevStateIndex, EnCmdQueryCol.IPAddress).Text = iPAddress GrdDevExist.Cell(_QueryDevStateIndex, EnCmdQueryCol.Port).Text = port GrdDevExist.Cell(_QueryDevStateIndex, EnCmdQueryCol.DevType).Text = devType GrdDevExist.Cell(_QueryDevStateIndex, EnCmdQueryCol.DevAddress).Text = devAddress GrdDevExist.Cell(_QueryDevStateIndex, EnCmdQueryCol.DveState).ForeColor = stateColor GrdDevExist.Cell(_QueryDevStateIndex, EnCmdQueryCol.DveState).Text = devState _QueryDevStateIndex += 1 len += 3 Catch ex As Exception Console.WriteLine($"查询失败:{ex.Message}") End Try Next End If End Sub ''' ''' 刷新查询设备IP和地址委托 ''' Delegate Sub delegate_QueryDveStateIPAndAddr_Change(ep As IPEndPoint) ''' ''' 刷新查询设备IP和地址 ''' Public Sub RefreshQueryDveStateIPAndAddr(ep As IPEndPoint) If InvokeRequired = True Then Dim dev As New delegate_QueryDveStateIPAndAddr_Change(AddressOf RefreshQueryDveStateIPAndAddr) Me.Invoke(dev, {ep}) Else LabelRemoteIp.ForeColor = Color.Blue LabelRemotePort.ForeColor = Color.Blue LabelRemoteIp.Text = ep.Address.ToString LabelRemotePort.Text = ep.Port End If End Sub ''' ''' 获取设备状态文本 ''' ''' ''' Private Function GetDeviceState(devState As String) As String Dim state As String = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.UnknownState)}" Select Case devState Case $"1" state = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Online)}" Case $"2" state = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Offline)}" End Select Return state End Function ''' ''' 获取设备状态文本 ''' ''' ''' Private Function GetDeviceStateColor(devState As String) As Color Dim state As Color Select Case devState Case $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Online)}" state = Color.Green Case $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Offline)}" state = Color.Red End Select Return state End Function ''' ''' 刷新查询设备状态信息委托 ''' Delegate Sub delegate_QueryDveState_Change(devCount As Int16) ''' ''' 刷新查询设备状态信息 ''' 局部刷新_委托 ''' Public Sub RefreshQueryDveState(devCount As Int16) If InvokeRequired = True Then Dim dev As New delegate_QueryDveState_Change(AddressOf RefreshQueryDveState) Me.Invoke(dev, {devCount}) Else GrdDevExist.Rows += devCount End If End Sub ''' ''' 处理固件升级 ''' ''' ''' Private Sub DealCmdFirmwareUpdate(dataBuff As Byte(), ep As IPEndPoint) Select Case dataBuff(15) Case &H0 _isUpdateReply = True 'StateReplyLabel($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ReadyUpgrade)}!", Color.Blue) Case &H1 _isUpdateReply = False 'StateReplyLabel($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.UpgradeAccomplish)}", Color.Green) _RemotePort = _endPort _upgradeCount += 1 Dim swVersion As String If _UpgradeType = False Then Dim temps(19) As Byte Array.Copy(dataBuff, (15 + 1), temps, 0, temps.Length) swVersion = Encoding.UTF8.GetString(temps) ''软件版本号(20Byte) swVersion = swVersion.Replace(vbNullChar, "") End If Dim upkey As String = ep.Address.ToString & ":" & ep.Port 'If _upgrade.ContainsKey(ep) = True Then If _newupgrade.ContainsKey(upkey) Then ' Dim upgradeIndex As Integer = _upgrade.Item(ep) Dim upgradeIndex As Integer = _newupgrade.Item(upkey) UpgradeSuccessColor(upgradeIndex, swVersion) RefreshUpgradeCount($"Number of successful upgrades:{_upgradeCount}/{_upgradeSum}", TSSUpgradeCount) Console.WriteLine($"Number of successful upgrades:{_upgradeCount}/{_upgradeSum}") End If ' End If Case &H2 _isUpdateReply = False 'StateReplyLabel($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.UpgradeFailed)}!", Color.Red) Case &H3 _isUpdateReply = False 'StateReplyLabel($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.IncorrectNumberOfFileBlocks)}!", Color.Red) Case &H4 _isUpdateReply = False 'StateReplyLabel($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.FileTypeError)}!", Color.Red) Case &H5 _isUpdateReply = False 'StateReplyLabel($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.FileTypeError)}!", Color.Red) End Select End Sub ''' ''' 读取网络信息委托 ''' Delegate Sub delegate_UpgradeSuccessColorInfo_Change(Txt As Integer, swVersion As String) ''' ''' 读取网络信息委托 ''' Public Sub UpgradeSuccessColor(Txt As Integer, swVersion As String) If InvokeRequired = True Then Dim dev As New delegate_UpgradeSuccessColorInfo_Change(AddressOf UpgradeSuccessColor) Me.Invoke(dev, New Object() {Txt, swVersion}) Else If GrdRCUHost.Rows - 1 >= Txt Then GrdRCUHost.Range(Txt, 1, Txt, GrdRCUHost.Cols - 1).BackColor = Color.Lime GrdRCUHost.Cell(Txt, EnRCUHosts.Update).Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.UpgradeAccomplish) If _UpgradeType = False Then GrdRCUHost.Cell(Txt, EnRCUHosts.SoftwareVersion).Text = swVersion End If End If End If End Sub ''' ''' 读取网络信息委托 ''' Delegate Sub delegate_UpgradeResultColorInfo_Change(index As Integer, Text As String, color As Color) ''' ''' 读取网络信息委托 ''' Public Sub UpgradeResultColor(index As Integer, Text As String, color As Color) If InvokeRequired = True Then Dim dev As New delegate_UpgradeResultColorInfo_Change(AddressOf UpgradeResultColor) Me.Invoke(dev, New Object() {index, Text, color}) Else 'GrdRCUHost.Range(index, 1, index, GrdRCUHost.Cols - 1).BackColor = color GrdRCUHost.Cell(index, EnRCUHosts.Update).ForeColor = color GrdRCUHost.Cell(index, EnRCUHosts.Update).Text = Text End If End Sub ''' ''' 读取网络信息委托 ''' Delegate Sub delegate_UpgradeCountInfo_Change(Txt As String, TBo As ToolStripStatusLabel) ''' ''' 读取网络信息委托 ''' Public Sub RefreshUpgradeCount(Txt As String, TBo As ToolStripStatusLabel) If InvokeRequired = True Then Dim dev As New delegate_UpgradeCountInfo_Change(AddressOf RefreshUpgradeCount) Me.Invoke(dev, New Object() {Txt, TBo}) Else TBo.ForeColor = Color.Green TBo.Text = Txt End If End Sub ''' ''' 升级校验命令处理 ''' ''' ''' Private Sub DealCmdCheckUpdate(dataBuff() As Byte, ep As IPEndPoint) 'Dim upgradeIndex As Integer = _upgrade.Item(ep) Dim upkey As String = ep.Address.ToString & ":" & ep.Port Dim upgradeIndex As Integer = _newupgrade.Item(upkey) Select Case dataBuff(15) Case &H1 _isCheckReply = True UpgradeResultColor(upgradeIndex, $"校验成功", Color.Green) Case &H2 _isCheckReply = False UpgradeResultColor(upgradeIndex, $"校验失败", Color.Red) Case &H3 _isCheckReply = False UpgradeResultColor(upgradeIndex, $"未接收完成", Color.Yellow) Case &H10 _isCheckReply = False UpgradeResultColor(upgradeIndex, $"未知错误", Color.Red) End Select End Sub ''' ''' 升级复位命令处理 ''' ''' ''' Private Sub DealCmdResetUpdate(dataBuff() As Byte, ep As IPEndPoint) 'Dim upgradeIndex As Integer = _upgrade.Item(ep) Select Case dataBuff(15) Case &H1 _isResetReply = True 'UpgradeResultColor(upgradeIndex, $"复位成功", Color.Green) 'StateReplyLabel($"复位成功", Color.Blue) RebootPrompt(Label71, $"重启成功", Color.Green) Case &H2 _isResetReply = False 'UpgradeResultColor(upgradeIndex, $"复位失败", Color.Red) RebootPrompt(Label71, $"重启失败", Color.Red) End Select End Sub ''' ''' 读取网络信息委托 ''' Delegate Sub delegate_RebootPrompt_Change(lbl As Label, text As String, color As Color) ''' ''' 读取网络信息委托 ''' Public Sub RebootPrompt(lbl As Label, text As String, color As Color) If InvokeRequired = True Then Dim dev As New delegate_RebootPrompt_Change(AddressOf RebootPrompt) Me.Invoke(dev, New Object() {lbl, text, color}) Else lbl.ForeColor = color lbl.Text = text End If End Sub ''' ''' 处理设置配置数据 ''' ''' Private Sub DealCmdSetConfigData(dataBuff() As Byte) Select Case dataBuff(15) Case &H1 _SetConfigSign = True MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SetTheSuccess)}!") RefreshSearchTipInfo($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SetTheSuccess)}!") Case &H2 _SetConfigSign = False Console.WriteLine($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SetTheFailed)}!") MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SetTheFailed)}!") RefreshSearchTipInfo($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SetTheFailed)}!") Case Else _SetConfigSign = False MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SetTheFailed)}!") RefreshSearchTipInfo($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SetTheFailed)}!") End Select End Sub ''' ''' 处理读取配置数据 ''' ''' Private Sub DealCmdReadConfigData(dataBuff() As Byte) 'Console.WriteLine($"读取出{dataBuff(15)} 个配置项") Dim projectNumber(3) As Byte Dim configVer(3) As Byte Dim roomNumber(3) As Byte Dim roomType(3) As Byte If dataBuff.Length > 44 Then projectNumber(0) = dataBuff(20) projectNumber(1) = dataBuff(21) projectNumber(2) = dataBuff(22) projectNumber(3) = dataBuff(23) configVer(0) = dataBuff(28) configVer(1) = dataBuff(29) configVer(2) = dataBuff(30) configVer(3) = dataBuff(31) roomNumber(0) = dataBuff(36) roomNumber(1) = dataBuff(37) roomNumber(2) = dataBuff(38) roomNumber(3) = dataBuff(39) roomType(0) = dataBuff(44) roomType(1) = dataBuff(45) roomType(2) = dataBuff(46) roomType(3) = dataBuff(47) End If Dim proBumber As Integer = projectNumber(3) * 256 + projectNumber(2) * 256 + projectNumber(1) * 256 + projectNumber(0) Dim configVers As String = $"{configVer(0)}.{configVer(1)}.{configVer(2)}.{configVer(3)}" Dim romNumber As Integer = roomNumber(3) * 256 + roomNumber(2) * 256 + roomNumber(1) * 256 + roomNumber(0) Dim roomTypes As String = System.Text.Encoding.UTF8.GetString(roomType) roomTypes = roomTypes.Replace(vbNullChar, "") RefreshSearchConfigInfo(proBumber, configVers, romNumber, roomTypes) RefreshSearchTipInfo($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ReadAccomplish)}!") DealReadRegisterData(dataBuff) End Sub ''' ''' 解析读取寄存器数据 ''' ''' Private Sub DealReadRegisterData(dataBuff() As Byte) Dim count As Integer = CInt(dataBuff(15)) Console.WriteLine($"读取寄存器项:{count} 个") Dim data() As Byte Dim len As Integer If dataBuff.Length > 19 Then len = dataBuff.Length - 23 Dim datas(len) As Byte data = {dataBuff(16), dataBuff(17), dataBuff(18), dataBuff(19)} Array.Copy(dataBuff, 20, datas, 0, datas.Length) If datas.Length > 100 Then Dim project() As Byte = {datas(0), datas(1), datas(2), datas(3)} Dim projectStr As String = $"{BitConverter.ToUInt32(project, 0)}" Dim lock() As Byte = {datas(4), datas(5), datas(6), datas(7)} Dim lockdata() As Byte = {datas(8), datas(9), datas(10), datas(11)} Dim lockStr As String = GetRoomLockTxt($"{BitConverter.ToUInt32(lockdata, 0)}") Dim roomState() As Byte = {datas(12), datas(13), datas(14), datas(15)} Dim roomStatedate() As Byte = {datas(16), datas(17), datas(18), datas(19)} Dim roomStateStr As String = GetRoomStateTxt($"{BitConverter.ToUInt32(roomStatedate, 0)}") Dim season() As Byte = {datas(20), datas(21), datas(22), datas(23)} Dim seasondate() As Byte = {datas(24), datas(25), datas(26), datas(27)} Dim seasonStr As String = GetRoomSeasonTxt(seasondate) Dim roomNumber() As Byte = {datas(28), datas(29), datas(30), datas(31)} Dim roomNumberdate1() As Byte = {datas(32), datas(33), datas(34), datas(35)} Dim roomNumberdate2() As Byte = {datas(40), datas(41), datas(42), datas(43)} Dim roomNumberdate3() As Byte = {datas(48), datas(49), datas(50), datas(51)} Dim roomNumberdate4() As Byte = {datas(56), datas(57), datas(58), datas(59)} Dim roomNumberdata As New List(Of Byte) roomNumberdata.AddRange(roomNumberdate1) roomNumberdata.AddRange(roomNumberdate2) roomNumberdata.AddRange(roomNumberdate3) roomNumberdata.AddRange(roomNumberdate4) Dim roomNumberStr As String = Encoding.GetEncoding("GBK").GetString(roomNumberdata.ToArray) Dim roomNumberId() As Byte = {datas(60), datas(61), datas(62), datas(63)} Dim roomNumberIddata() As Byte = {datas(64), datas(65), datas(66), datas(67)} Dim roomNumberIdStr As String = $"{BitConverter.ToUInt32(roomNumberIddata, 0)}" Dim roomType() As Byte = {datas(68), datas(69), datas(70), datas(71)} Dim roomTypedate1() As Byte = {datas(72), datas(73), datas(74), datas(75)} Dim roomTypedate2() As Byte = {datas(80), datas(81), datas(82), datas(83)} Dim roomTypedate3() As Byte = {datas(88), datas(89), datas(90), datas(91)} Dim roomTypedate4() As Byte = {datas(96), datas(97), datas(98), datas(99)} Dim roomTypedata As New List(Of Byte) roomTypedata.AddRange(roomTypedate1) roomTypedata.AddRange(roomTypedate2) roomTypedata.AddRange(roomTypedate3) roomTypedata.AddRange(roomTypedate4) Dim roomTypeStr As String = Encoding.GetEncoding("GBK").GetString(roomTypedata.ToArray) Dim roomTypeId() As Byte = {datas(100), datas(101), datas(102), datas(103)} Dim roomTypeIddata() As Byte = {datas(104), datas(105), datas(106), datas(107)} Dim roomTypeIdStr As String = $"{BitConverter.ToUInt32(roomTypeIddata, 0)}" If Enumerable.SequenceEqual(data, _projectCode) Then RefreshMQTTInfo(projectStr, TBoProjectCode) End If If Enumerable.SequenceEqual(lock, _roomLocks) Then RefreshMQTTInfo(lockStr, CBoLocks) End If If Enumerable.SequenceEqual(roomState, _roomStates) Then RefreshMQTTInfo(roomStateStr, CBoRoomStates) End If If Enumerable.SequenceEqual(season, _season) Then RefreshMQTTInfo(seasonStr, CBoSeasons) End If If Enumerable.SequenceEqual(roomNumber, _roomNuRemark) Then RefreshMQTTInfo(roomNumberStr, TBoRoomTN) End If If Enumerable.SequenceEqual(roomNumberId, _roomNuRemarkID) Then RefreshMQTTInfo(roomNumberIdStr, TBoRoomTNId) End If If Enumerable.SequenceEqual(roomType, _roomTpRemark) Then RefreshMQTTInfo(roomTypeStr, TBoRoomTP) End If If Enumerable.SequenceEqual(roomTypeId, _roomTpRemarkID) Then RefreshMQTTInfo(roomTypeIdStr, TBoRoomTPId) End If 'If Enumerable.SequenceEqual(data, _roomRemark) Then ' RefreshMQTTInfo(Str, TBoRoomRemarks) 'End If End If If Enumerable.SequenceEqual(data, _networkIpInfo) Then '网络信息 DealReadNetworkInfo(datas) End If End If End Sub ''' ''' 处理读取网络信息 ''' ''' Private Sub DealReadNetworkInfo(dataBuff() As Byte) Dim ipAdde(3) As Byte 'IP ipAdde(0) = dataBuff(0) ipAdde(1) = dataBuff(1) ipAdde(2) = dataBuff(2) ipAdde(3) = dataBuff(3) Dim subnet(3) As Byte Dim data1() As Byte = {dataBuff(4), dataBuff(5), dataBuff(6), dataBuff(7)} If Enumerable.SequenceEqual(data1, _networkSubnetInfo) Then '网络信息子网 subnet(0) = dataBuff(8) subnet(1) = dataBuff(9) subnet(2) = dataBuff(10) subnet(3) = dataBuff(11) End If Dim gateway(3) As Byte Dim data2() As Byte = {dataBuff(12), dataBuff(13), dataBuff(14), dataBuff(15)} If Enumerable.SequenceEqual(data2, _networkGatewayInfo) Then '网络信息网关 gateway(0) = dataBuff(16) gateway(1) = dataBuff(17) gateway(2) = dataBuff(18) gateway(3) = dataBuff(19) End If Dim dns(3) As Byte Dim data3() As Byte = {dataBuff(20), dataBuff(21), dataBuff(22), dataBuff(23)} If Enumerable.SequenceEqual(data3, _networkDNSInfo) Then '网络信息DNS dns(0) = dataBuff(24) dns(1) = dataBuff(25) dns(2) = dataBuff(26) dns(3) = dataBuff(27) End If Dim server(3) As Byte Dim data4() As Byte = {dataBuff(28), dataBuff(29), dataBuff(30), dataBuff(31)} If Enumerable.SequenceEqual(data4, _networkServerInfo) Then '服务器 server(0) = dataBuff(32) server(1) = dataBuff(33) server(2) = dataBuff(34) server(3) = dataBuff(35) End If Dim dhcp(3) As Byte Dim data5() As Byte = {dataBuff(36), dataBuff(37), dataBuff(38), dataBuff(39)} If Enumerable.SequenceEqual(data4, _networkServerInfo) Then 'DHCP dhcp(0) = dataBuff(40) dhcp(1) = dataBuff(41) dhcp(2) = dataBuff(42) dhcp(3) = dataBuff(43) End If RefreshNetworkInfo(CInt(ipAdde(0)), TextBox49) RefreshNetworkInfo(CInt(ipAdde(1)), TextBox48) RefreshNetworkInfo(CInt(ipAdde(2)), TextBox51) RefreshNetworkInfo(CInt(ipAdde(3)), TextBox50) RefreshNetworkInfo(CInt(subnet(0)), TextBox39) RefreshNetworkInfo(CInt(subnet(1)), TextBox38) RefreshNetworkInfo(CInt(subnet(2)), TextBox37) RefreshNetworkInfo(CInt(subnet(3)), TextBox36) RefreshNetworkInfo(CInt(gateway(0)), TextBox43) RefreshNetworkInfo(CInt(gateway(1)), TextBox42) RefreshNetworkInfo(CInt(gateway(2)), TextBox41) RefreshNetworkInfo(CInt(gateway(3)), TextBox40) RefreshNetworkInfo(CInt(dns(0)), TextBox47) RefreshNetworkInfo(CInt(dns(1)), TextBox46) RefreshNetworkInfo(CInt(dns(2)), TextBox45) RefreshNetworkInfo(CInt(dns(3)), TextBox44) RefreshNetworkInfo(CInt(server(0)), TextBox60) RefreshNetworkInfo(CInt(server(1)), TextBox59) RefreshNetworkInfo(CInt(server(2)), TextBox58) RefreshNetworkInfo(CInt(server(3)), TextBox35) Dim rb3 As Boolean = GetDHCPResultInfo(dhcp(0)) Dim rb4 As Boolean = GetDHCPResultInfo(dhcp(1)) Dim rb5 As Boolean = GetDHCPResultInfo(dhcp(2)) RefreshNetworkDHCPInfo(rb3, CheckBox31) RefreshNetworkDHCPInfo(rb4, CheckBox32) RefreshNetworkDHCPInfo(rb5, CheckBox33) End Sub ''' ''' 获取DHCP结果 ''' ''' ''' Private Function GetDHCPResultInfo(data As Byte) As Boolean Select Case data Case &H1 Return True Case &H2 Return False End Select Return False End Function ''' ''' 读取网络信息委托 ''' Delegate Sub delegate_NetworkInfo_Change(Txt As String, TBo As TextBox) ''' ''' 读取网络信息委托 ''' Public Sub RefreshNetworkInfo(Txt As String, TBo As TextBox) If InvokeRequired = True Then Dim dev As New delegate_NetworkInfo_Change(AddressOf RefreshNetworkInfo) Me.Invoke(dev, New Object() {Txt, TBo}) Else TBo.Text = Txt End If End Sub ''' ''' 读取网络DHCP信息委托 ''' Delegate Sub delegate_NetworkDHCPInfo_Change(Txt As Boolean, TBo As CheckBox) ''' ''' 读取网络信息委托 ''' Public Sub RefreshNetworkDHCPInfo(Txt As Boolean, TBo As CheckBox) If InvokeRequired = True Then Dim dev As New delegate_NetworkDHCPInfo_Change(AddressOf RefreshNetworkDHCPInfo) Me.Invoke(dev, New Object() {Txt, TBo}) Else TBo.Checked = Txt End If End Sub ''' ''' 读取配置信息委托 ''' Delegate Sub delegate_SearchConfigInfo_Change(proBumber As String, configVers As String, romNumber As String, roomTypes As String) ''' ''' 读取配置信息委托 ''' Public Sub RefreshSearchConfigInfo(proBumber As String, configVers As String, romNumber As String, roomTypes As String) If InvokeRequired = True Then Dim dev As New delegate_SearchConfigInfo_Change(AddressOf RefreshSearchConfigInfo) Me.Invoke(dev, New Object() {proBumber, configVers, romNumber, roomTypes}) Else ComboBox6.Text = proBumber ComboBox7.Text = configVers ComboBox4.Text = romNumber TextBox24.Text = roomTypes End If End Sub ''' ''' 处理配置下发 ''' ''' Private Sub DealCmdConfigIssued(dataBuff() As Byte) 'Console.WriteLine($"配置下发回复数据 {ByteToString(dataBuff)}") If dataBuff(15) = 1 Then RefreshSearchTipInfo($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.IssuedTheSuccessful)}!") ElseIf dataBuff(16) = 2 Then RefreshSearchTipInfo($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.IssuedTheFailure)}!") End If End Sub ''' ''' 查询设备状态_枚举 ''' Enum EnCmdQueryCol ''' ID ID ''' IP地址 IPAddress ''' 端口号 Port ''' 设备类型 DevType ''' 设备地址 DevAddress ''' 设备状态 DveState End Enum ''' 查询设备表状态列集合 Private _queryDevStateColsTables() As String = {"ID", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.IPAddress)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Port)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.DeviceType)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.DeviceAddress)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.DeviceState)}"} ''' ''' 查询设备表状态列集合 ''' Private Sub InitQueryDevStateTabData() GrdDevExist.DisplayRowNumber = True GrdDevExist.Cols = _queryDevStateColsTables.Length GrdDevExist.Rows = 1 For index = 1 To GrdDevExist.Cols - 1 With GrdDevExist.Cell(0, index) .Text = _queryDevStateColsTables(index) .BackColor = Color.LightGray .ForeColor = Color.Blue .Font = New Font("Arial", 8, FontStyle.Bold) End With With GrdDevExist.Column(index) .Alignment = FlexCell.AlignmentEnum.CenterCenter .Width = 100 End With Next GrdDevExist.SelectionMode = FlexCell.SelectionModeEnum.ByRow '设置选中行 GrdDevExist.AllowUserSort = True End Sub ''' ''' 匹配配置版本号 ''' ''' Private Sub MatchVersion(txt As String) If txt = "0.0.0.0" Then RefreshSearchTipInfo($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.TheCurrentRoomIsNotConfigured)}!") End If End Sub '''' '''' 根据项目编号和房间编号查询配置版本 '''' 同时查询配置数据 '''' '''' '''' 'Private Sub ComboBox7_DropDown_1(sender As Object, e As EventArgs) Handles ComboBox7.DropDown ' If ComboBox6.Text = Nothing Then ' MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.PleaseSelectTheItemNumber)}!") ' Exit Sub ' End If ' If ComboBox4.Text = Nothing Then ' MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.PleaseSelectRoomNumber)}!") ' Exit Sub ' End If ' ComboBox7.Items.Clear() ' Dim addItems As New List(Of String) ' Dim cols As String = $" DISTINCT ConfigVersion" ' Dim dtTable As DataTable = _SqlServer.Query(cols, _DevConfigName, "") ' For r = 0 To dtTable.Rows.Count - 1 ' addItems.Add(dtTable(r)(0)) ' Next ' ComboBox7.Items.AddRange(addItems.ToArray) 'End Sub 'Private Sub ComboBox7_TextChanged(sender As Object, e As EventArgs) Handles ComboBox7.TextChanged ' If ComboBox6.Text Is Nothing And ComboBox6.Text = "" Then ' MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.TheItemNumberIsEmpty)}!") ' Exit Sub ' End If ' If ComboBox4.Text Is Nothing And ComboBox4.Text = "" Then ' MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.TheItemNumberIsEmpty)}!") ' Exit Sub ' End If ' If ComboBox7.Text Is Nothing And ComboBox7.Text = "" Then ' MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.TheConfigVersionIsEmpty)}!") ' Exit Sub ' End If ' Dim projectCode As String = ComboBox6.Text ' Dim roomNumber As String = ComboBox4.Text ' Dim config As String = ComboBox7.Text ' 'Dim taTable As DataTable ' 'Dim queryCols As String = $"ProjectNumber, RoomNumber, RoomType" ' 'Dim conditions As String = $"WHERE ProjectNumber = '{projectCode}' AND RoomNumber = '{roomNumber}'" ' 'taTable = _SqlServer.Query(queryCols, _RoomInfoLists, conditions) ' 'If taTable.Rows.Count > 0 Then ' ' Dim addItem As String = taTable.Rows(0)(2) ' ' TextBox24.Text = addItem ' 'End If ' If TextBox24.Text Is Nothing And TextBox24.Text = "" Then ' MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.PleaseSelectTheItemNumber)}!") ' Exit Sub ' End If ' Dim roomType As String = TextBox24.Text ' Dim queryCol As String = $"DevType, DevAddress, DevBaud, DevPort, DevProtocol, DevTypeNumber, DevName, Remarks" ' Dim condition As String = $"WHERE ProjectNumber = '{projectCode}' AND RoomType = '{roomType}' AND ConfigVersion = '{config}'" ' _SqlServer.Query(queryCol, _DevConfigName, GrdConfigDatas, condition) 'End Sub ''' ''' 根据项目编码查询项目名称 ''' ''' Private Sub QueryProjectName(ProjectCode As String) Dim projectName As DataTable Dim queryCol As String = $"ProjectNumber, ProjectName" Dim conditons As String = $"Where ProjectNumber = {ProjectCode}" projectName = _SqlServer.Query(queryCol, _ProjectInfoLists, conditons) 'dt.Rows[行][列] = DBNull.Value; '设置DataTable单元格为空值 If projectName.Rows.Count > 0 Then Dim addItem As String = projectName.Rows(0)(1) TextBox23.Text = addItem End If End Sub ''' ''' 处理 TFTP 数据 ''' ''' ''' Private Sub DealTftpData(packetData As Byte(), ep As IPEndPoint) Select Case packetData(1) Case EnTftpCmd.RRQ Case EnTftpCmd.WRQ Case EnTftpCmd.DATA Case EnTftpCmd.ACK _TftpNewPort = ep.Port _isUpdateWRQReply = True _isTftpSendReply = True _resend = 0 Case EnTftpCmd.TError End Select End Sub ''' ''' 处理C5机型测试 ''' ''' Private Sub DealCmdC5ModelTest(dataBuff As Byte()) 'ShowPortReceData(dataBuff) AppendTipText($"RX:{ByteToString(dataBuff)}!{vbCrLf}", Color.Blue) AppendTipTextSerial($"RX:{ByteToString(dataBuff)}!{vbCrLf}", Color.Blue) Select Case dataBuff(15) Case &H11 '网络输入测试 DealNetworkInputTest(dataBuff) Case &H12 '网络输出测试 'DealNetworkOutputTest(dataBuff) Case &H13 '网络巡回测试 DealNetworkTourTest(dataBuff) End Select End Sub ''' ''' 处理网络设置输入 ''' ''' Private Sub DealNetworkInputTest(databuff() As Byte) If databuff(16) = &HF1 Then Dim bt1 As Byte = databuff(18) Dim bt2 As Byte = databuff(19) Dim bt3 As Byte = databuff(20) Dim bt4 As Byte = databuff(21) Dim a1 As Boolean = (bt1 >> 0) And 3 Dim a2 As Boolean = (bt1 >> 2) And 3 Dim a3 As Boolean = (bt1 >> 4) And 3 Dim a4 As Boolean = (bt1 >> 6) And 3 Dim a5 As Boolean = (bt2 >> 0) And 3 Dim a6 As Boolean = (bt2 >> 2) And 3 Dim a7 As Boolean = (bt2 >> 4) And 3 Dim a8 As Boolean = (bt2 >> 6) And 3 Dim a9 As Boolean = (bt3 >> 0) And 3 Dim a10 As Boolean = (bt3 >> 2) And 3 Dim a11 As Boolean = (bt3 >> 4) And 3 Dim a12 As Boolean = (bt3 >> 6) And 3 Dim a13 As Boolean = (bt4 >> 0) And 3 Select Case _testFrmIndex Case _modelsTestGroup(0) DealInputReplyData(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) Case _modelsTestGroup(1) DealC12InputReplyData(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) Case _modelsTestGroup(2) DealC8InputReplyData(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) End Select End If End Sub ''' ''' 处理网络巡回测试 ''' ''' Private Sub DealNetworkTourTest(databuff() As Byte) If databuff(16) >= 95 Then ModelsTourTestTipInfo($"Pass", Color.Green) Else ModelsTourTestTipInfo($"Fail", Color.Red) End If End Sub ''' ''' 各机型巡回测试结果 ''' ''' ''' Private Sub ModelsTourTestTipInfo(txt As String, col As Color) Select Case _testFrmIndex Case _modelsTestGroup(0), _modelsTestGroup(4) AppendTipText($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ItinerateTestFailed)}!{vbCrLf}", Color.Red) AppendTipTextSerial($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ItinerateTestFailed)}!{vbCrLf}", Color.Red) DealTourTestData(txt, col) Case _modelsTestGroup(1) AppendTipText($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ItinerateTestFailed)}!{vbCrLf}", Color.Red) AppendTipTextSerial($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ItinerateTestFailed)}!{vbCrLf}", Color.Red) DealC12TourTestData(txt, col) Case _modelsTestGroup(2) AppendTipText($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ItinerateTestFailed)}!{vbCrLf}", Color.Red) AppendTipTextSerial($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ItinerateTestFailed)}!{vbCrLf}", Color.Red) DealC8TourTestData(txt, col) Case _modelsTestGroup(3) AppendTipText($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ItinerateTestFailed)}!{vbCrLf}", Color.Red) AppendTipTextSerial($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ItinerateTestFailed)}!{vbCrLf}", Color.Red) DealV9TourTestData(txt, col) End Select End Sub ''' ''' 处理设置MQTT数据 ''' ''' Private Sub DealCmdSetMQTTData(dataBuff() As Byte) Select Case dataBuff(15) Case &H0 MsgBox($"MQTT {LanguageData.StringList(MultiLanguageDAL.StringEnum.SetTheFailed)}!") Case &H1 MsgBox($"MQTT {LanguageData.StringList(MultiLanguageDAL.StringEnum.SetTheSuccess)}!") End Select End Sub Private _aliProductKey() As Byte = {&H0, &H0, &H0, &H0} '阿里云产品密钥偏移地址 Private _aliDevName() As Byte = {&HC, &H0, &H0, &H0} '阿里云设备名称偏移地址 Private _aliDevKey() As Byte = {&H4D, &H0, &H0, &H0} '阿里云设备密钥偏移地址 Private _aliReSession() As Byte = {&H6E, &H0, &H0, &H0} '阿里云发布会话偏移地址 Private _aliSubSession() As Byte = {&HAF, &H0, &H0, &H0} '阿里云订阅会话偏移地址 Private _onlineTime() As Byte = {&HF0, &H0, &H0, &H0} '在线时间偏移地址 Private _reSsession() As Byte = {&HF2, &H0, &H0, &H0} '发布会话偏移地址 Private _subSession() As Byte = {&H33, &H1, &H0, &H0} '订阅会话偏移地址 Private _domainName() As Byte = {&H74, &H1, &H0, &H0} '域名偏移地址 Private _clientID() As Byte = {&HB5, &H1, &H0, &H0} '客户端ID偏移地址 Private _userName() As Byte = {&HF6, &H1, &H0, &H0} '用户名偏移地址 Private _password() As Byte = {&H37, &H2, &H0, &H0} '密码偏移地址 ''' ''' 处理读取MQTT数据 ''' ''' Private Sub DealCmdReadMQTTData(dataBuff() As Byte) Console.WriteLine($"MQTT回复数据:{ByteToString(dataBuff)}") If dataBuff(15) = &H1 Then Dim data() As Byte Dim Str As String 'Dim datas(dataBuff.Length - 25) As Byte Dim len As Integer If dataBuff.Length > 19 Then len = dataBuff.Length - 25 Dim datas(len) As Byte data = {dataBuff(16), dataBuff(17), dataBuff(18), dataBuff(19)} Array.Copy(dataBuff, 22, datas, 0, datas.Length) Dim car As String = Encoding.ASCII.GetString(New Byte() {255}) Str = System.Text.Encoding.ASCII.GetString(datas).Replace(car, "") If Enumerable.SequenceEqual(data, _aliProductKey) Then RefreshMQTTInfo(Str, TextBox28) End If If Enumerable.SequenceEqual(data, _aliDevName) Then RefreshMQTTInfo(Str, TextBox31) End If If Enumerable.SequenceEqual(data, _aliDevKey) Then RefreshMQTTInfo(Str, TextBox32) End If If Enumerable.SequenceEqual(data, _aliReSession) Then RefreshMQTTInfo(Str, TextBox33) End If If Enumerable.SequenceEqual(data, _aliSubSession) Then RefreshMQTTInfo(Str, TextBox34) End If If Enumerable.SequenceEqual(data, _onlineTime) Then RefreshMQTTInfo(BitConverter.ToUInt16(datas, 0), NumericUpDown1) End If If Enumerable.SequenceEqual(data, _reSsession) Then RefreshMQTTInfo(Str, TextBox52) End If If Enumerable.SequenceEqual(data, _subSession) Then RefreshMQTTInfo(Str, TextBox53) End If If Enumerable.SequenceEqual(data, _domainName) Then RefreshMQTTInfo(Str, TextBox54) End If If Enumerable.SequenceEqual(data, _clientID) Then RefreshMQTTInfo(Str, TextBox55) End If If Enumerable.SequenceEqual(data, _userName) Then RefreshMQTTInfo(Str, TextBox56) End If If Enumerable.SequenceEqual(data, _password) Then RefreshMQTTInfo(Str, TextBox57) End If End If End If End Sub ''' ''' MQTT信息委托 ''' Delegate Sub delegate_MQTTInfo_Change(txt As String, TBo As Object) ''' ''' MQTT信息委托 ''' Public Sub RefreshMQTTInfo(txt As String, Texts As Object) If InvokeRequired = True Then Dim dev As New delegate_MQTTInfo_Change(AddressOf RefreshMQTTInfo) Me.Invoke(dev, New Object() {txt, Texts}) Else If TypeOf Texts Is TextBox Then Texts.Text = txt ElseIf TypeOf Texts Is NumericUpDown Then Texts.Value = txt ElseIf TypeOf Texts Is ComboBox Then Texts.Text = txt End If End If End Sub '''' '''' MQTT信息时间值委托 '''' 'Delegate Sub delegate_MQTTValueInfo_Change(txt As Integer, nud As NumericUpDown) '''' '''' MQTT信息时间值委托 '''' 'Public Sub RefreshMQTTValueInfo(txt As Integer, nud As NumericUpDown) ' If InvokeRequired = True Then ' Dim dev As New delegate_MQTTValueInfo_Change(AddressOf RefreshMQTTValueInfo) ' Me.Invoke(dev, New Object() {txt, nud}) ' Else ' nud.Value = txt ' End If 'End Sub 'Private Function GetArrayCompare(array1() As Byte, array2() As Byte) As Boolean ' If array1.Length = 0 OrElse array2.Length = 0 Then ' Return False ' End If ' If array1.Length <> array2.Length Then ' Return False ' End If ' For index As Integer = 0 To array1.Length AndAlso array2.Length ' If array1(index) <> array2(index) Then ' Return False ' End If ' Next ' Return True 'End Function #End Region #Region "通讯记录" ''' ''' 清除记录 ''' ''' ''' Private Sub Button24_Click(sender As Object, e As EventArgs) Handles Button24.Click RichTextBox1.Clear() End Sub ''' ''' 添加记录文本和颜色 ''' ''' 需要添加的记录内容 ''' 需要设置的记录颜色 Public Sub AppendTextAndSetStyle(ByVal str As String, ByVal cor As Color) Dim selStart As Integer Dim selLength As Integer selStart = RichTextBox1.TextLength RichTextBox1.AppendText(str) selLength = RichTextBox1.TextLength - selStart RichTextBox1.Select(selStart, selLength) RichTextBox1.SelectionColor = cor End Sub ''' ''' 添加记录 ''' ''' ''' Public Sub AppendTipText(recordString As String, col As Color) If RichTextBox1.InvokeRequired Then RichTextBox1.Invoke(New Action(Sub() If RichTextBox1.Lines.Count >= 256 Then RichTextBox1.Clear() AppendTextAndSetStyle($"{recordString}", col) RichTextBox1.ScrollToCaret() End Sub)) Else If RichTextBox1.Lines.Count >= 256 Then RichTextBox1.Clear() AppendTextAndSetStyle($"{recordString}", col) RichTextBox1.ScrollToCaret() End If End Sub ''' ''' 添加记录文本和颜色 ''' ''' 需要添加的记录内容 ''' 需要设置的记录颜色 Public Sub AppendTextAndSetStyle3(ByVal str As String, ByVal cor As Color) Dim selStart As Integer Dim selLength As Integer selStart = RichTextBox3.TextLength RichTextBox3.AppendText(str) selLength = RichTextBox3.TextLength - selStart RichTextBox3.Select(selStart, selLength) RichTextBox3.SelectionColor = cor End Sub ''' ''' 添加记录 ''' ''' ''' Public Sub AppendTipTextSerial(recordString As String, col As Color) If RichTextBox3.InvokeRequired Then RichTextBox3.Invoke(New Action(Sub() If RichTextBox3.Lines.Count >= 256 Then RichTextBox3.Clear() AppendTextAndSetStyle3($"{recordString}", col) RichTextBox3.ScrollToCaret() End Sub)) Else If RichTextBox3.Lines.Count >= 256 Then RichTextBox3.Clear() AppendTextAndSetStyle3($"{recordString}", col) RichTextBox3.ScrollToCaret() End If End Sub ''' ''' 添加匹配文本和颜色 ''' ''' 需要添加的记录内容 ''' 需要设置的记录颜色 Public Sub AppendMatchTextAndSetStyle(ByVal str As String, ByVal cor As Color) Dim selStart As Integer Dim selLength As Integer selStart = RichTextBox2.TextLength RichTextBox2.AppendText(str) selLength = RichTextBox2.TextLength - selStart RichTextBox2.Select(selStart, selLength) RichTextBox2.SelectionColor = cor End Sub ''' ''' 添加匹配记录 ''' ''' ''' Public Sub AppendMatchTipText(recordString As String, col As Color) If RichTextBox2.InvokeRequired Then RichTextBox2.Invoke(New Action(Sub() If RichTextBox2.Lines.Count >= 256 Then RichTextBox2.Clear() AppendMatchTextAndSetStyle($"{recordString}", col) RichTextBox2.ScrollToCaret() End Sub)) Else If RichTextBox2.Lines.Count >= 256 Then RichTextBox2.Clear() AppendMatchTextAndSetStyle($"{recordString}", col) RichTextBox2.ScrollToCaret() End If End Sub #End Region #End Region #End Region #Region "设备存在_数据表操作" ''' ''' 项目列表名称 ''' Private _ProjectInfoLists As String = $"CSeries_ProjectLists" ''' ''' 房型列表名称 ''' Private _RoomTypeLists As String = $"CSeries_RoomTypeLists" ''' ''' 房间列表名称 ''' Private _RoomInfoLists As String = $"CSeries_ProjectRoomLists" ''' ''' 配置设备列表名称 ''' Private _DevConfigName As String = $"CSeries_DevConfigLists" ''' ''' 判断点击的是哪个Pages ''' ''' ''' Private Sub TabControl2_Click(sender As Object, e As EventArgs) Handles TabControl2.Click Select Case TabControl2.SelectedIndex Case 0 '项目信息页面 QueryProjectInfoList() Case 1 '房型信息页面 QueryRoomTypeList() Case 2 '房间信息页面 QueryRoomInfoList() Case Else End Select End Sub #Region "项目列表" ''' ''' 查询设备列表 ''' Private Sub QueryProjectInfoList() Dim queryCol As String = $"ProjectNumber, ProjectName, ProjectAddress, Remarks" _SqlServer.Query(queryCol, _ProjectInfoLists, Grid1) End Sub ''' ''' 项目信息_查询 ''' ''' ''' Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click QueryProjectInfoList() End Sub ''' ''' 项目信息_增加 ''' ''' ''' Private Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click Dim projectNumber As String = TextBox2.Text '项目编号 Dim projectName As String = TextBox3.Text '项目名称 Dim prijectAddr As String = TextBox19.Text '项目地址 Dim remarks As String = TextBox1.Text '备注 Dim conditions As String = $"(ProjectNumber, ProjectName, ProjectAddress, Remarks) values('{projectNumber}', '{projectName}', '{prijectAddr}', '{remarks}')" _SqlServer.Add(_ProjectInfoLists, Grid1, conditions) QueryProjectInfoList() End Sub ''' ''' 项目信息_修改 ''' ''' ''' Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click Dim projectNumber As String = String.Empty '项目编号 Dim projectName As String = String.Empty '项目名称 Dim prijectAddr As String = String.Empty '项目地址 Dim remarks As String = String.Empty '备注 If Grid1.ActiveCell.Row > 0 Then projectNumber = Grid1.Cell(Grid1.ActiveCell.Row, 1).Text projectName = Grid1.Cell(Grid1.ActiveCell.Row, 2).Text prijectAddr = Grid1.Cell(Grid1.ActiveCell.Row, 3).Text remarks = Grid1.Cell(Grid1.ActiveCell.Row, 4).Text End If Dim projectNumber1 As String = TextBox2.Text '项目编号 Dim projectName1 As String = TextBox3.Text '项目名称 Dim prijectAddr1 As String = TextBox19.Text '项目地址 Dim remarks1 As String = TextBox1.Text '备注 Dim conditions As String = $"Set ProjectNumber = N'{projectNumber1}', ProjectName = N'{projectName1}', ProjectAddress = N'{prijectAddr1}', Remarks = N'{remarks1}'Where ProjectNumber = N'{projectNumber}' And ProjectName = N'{projectName}' And ProjectAddress = N'{prijectAddr}' And Remarks = N'{remarks}'" Dim hint As DialogResult = MessageBox.Show($"要修改的文件信息如下{vbCrLf}{vbCrLf}项目编号:{projectNumber1}{vbCr}项目名称:{projectName1}{vbCr}项目地址:{prijectAddr1}{vbCr}备注:{remarks1}{vbCrLf}{vbCrLf}是否继续修改?", "警告!!!", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) If hint = DialogResult.OK Then Console.WriteLine($"修改完成") _SqlServer.Modify(_ProjectInfoLists, Grid1, conditions) MsgBox($"修改成功!") End If QueryProjectInfoList() End Sub ''' ''' 项目信息_删除 ''' ''' ''' Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click Dim projectNumber1 As String = TextBox2.Text '项目编号 Dim projectName1 As String = TextBox3.Text '项目名称 Dim prijectAddr1 As String = TextBox19.Text '项目地址 Dim remarks1 As String = TextBox1.Text '备注 Dim conditions As String = $"Where ProjectNumber = N'{projectNumber1}' And ProjectName = N'{projectName1}' And ProjectAddress = N'{prijectAddr1}' And Remarks = N'{remarks1}'" _SqlServer.Delete(_ProjectInfoLists, Grid1, conditions) TextBox2.Text = Nothing TextBox3.Text = Nothing TextBox19.Text = Nothing TextBox1.Text = Nothing QueryProjectInfoList() End Sub ''' ''' 项目表表格点击事件 ''' ''' ''' Private Sub Grid1_Click(Sender As Object, e As EventArgs) Handles Grid1.Click If Grid1.ActiveCell.Row > 0 Then TextBox2.Text = Grid1.Cell(Grid1.ActiveCell.Row, 1).Text TextBox3.Text = Grid1.Cell(Grid1.ActiveCell.Row, 2).Text TextBox19.Text = Grid1.Cell(Grid1.ActiveCell.Row, 3).Text TextBox1.Text = Grid1.Cell(Grid1.ActiveCell.Row, 4).Text TextBox14.Text = Grid1.Cell(Grid1.ActiveCell.Row, 1).Text TextBox6.Text = Grid1.Cell(Grid1.ActiveCell.Row, 1).Text End If End Sub #End Region #Region "房型列表" ''' ''' 查询设备列表 ''' Private Sub QueryRoomTypeList() Dim queryCol As String = $"ProjectNumber, RoomType, Remarks" 'If TextBox14.Text = Nothing Or TextBox14.Text = "" Then _SqlServer.Query(queryCol, _RoomTypeLists, Grid2) 'Else ' 'Dim conditions As String = $"Where ProjectNumber = '{TextBox14.Text}'" ' '_SqlServer.Query(queryCol, _RoomTypeLists, Grid2, conditions) 'End If End Sub ''' ''' 房型列表_查询 ''' ''' ''' Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click QueryRoomTypeList() End Sub ''' ''' 房型列表_添加 ''' ''' ''' Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click Dim projectNumber As String = TextBox14.Text '项目编号 Dim roomType As String = TextBox13.Text '房型 Dim remarks As String = TextBox17.Text '备注 Dim conditions As String = $"(ProjectNumber, RoomType, Remarks) values('{projectNumber}', '{roomType}', '{remarks}')" _SqlServer.Add(_RoomTypeLists, Grid2, conditions) QueryRoomTypeList() End Sub ''' ''' 房型列表_修改 ''' ''' ''' Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click Dim projectNumber As String = String.Empty '项目编号 Dim roomType As String = String.Empty '房型 Dim remarks As String = String.Empty '备注 If Grid2.ActiveCell.Row > 0 Then projectNumber = Grid2.Cell(Grid2.ActiveCell.Row, 1).Text roomType = Grid2.Cell(Grid2.ActiveCell.Row, 2).Text remarks = Grid2.Cell(Grid2.ActiveCell.Row, 3).Text End If Dim projectNumber1 As String = TextBox14.Text '项目编号 Dim roomType1 As String = TextBox13.Text '房型 Dim remarks1 As String = TextBox17.Text '备注 Dim conditions As String = $"Set ProjectNumber = N'{projectNumber1}', RoomType = N'{roomType1}', Remarks = N'{remarks1}' Where ProjectNumber = N'{projectNumber}' And RoomType = N'{roomType}' And Remarks = N'{remarks}'" Dim hint As DialogResult = MessageBox.Show($"要修改的文件信息如下{vbCrLf}{vbCrLf}项目编号:{projectNumber1}{vbCr}房型:{roomType1}{vbCr}备注:{remarks1}{vbCrLf}{vbCrLf}是否继续修改?", "警告!!!", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) If hint = DialogResult.OK Then Console.WriteLine("修改完成") _SqlServer.Modify(_RoomTypeLists, Grid2, conditions) MsgBox($"修改成功!") End If QueryRoomTypeList() End Sub ''' ''' 房型列表_删除 ''' ''' ''' Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim projectNumber As String = TextBox14.Text '项目编号 Dim roomType As String = TextBox13.Text '房型 Dim remarks As String = TextBox17.Text '备注 Dim conditions As String = $"Where ProjectNumber = N'{projectNumber}' And RoomType = N'{roomType}' And Remarks = N'{remarks}'" _SqlServer.Delete(_RoomTypeLists, Grid2, conditions) TextBox14.Text = Nothing TextBox13.Text = Nothing TextBox17.Text = Nothing QueryRoomTypeList() End Sub ''' ''' 房型列表点击事件 ''' ''' ''' Private Sub Grid2_Click(Sender As Object, e As EventArgs) Handles Grid2.Click If Grid2.ActiveCell.Row > 0 Then TextBox14.Text = Grid2.Cell(Grid2.ActiveCell.Row, 1).Text TextBox13.Text = Grid2.Cell(Grid2.ActiveCell.Row, 2).Text TextBox17.Text = Grid2.Cell(Grid2.ActiveCell.Row, 3).Text TextBox20.Text = Grid2.Cell(Grid2.ActiveCell.Row, 2).Text End If End Sub #End Region #Region "房间列表" ''' ''' 初始化房间状态 ''' Private Sub InitRoomState() Dim rState As String() = {$"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Offline)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Online)}"} ComboBox5.Items.Clear() ComboBox5.Items.AddRange(rState) If ComboBox5.Items.Count > 0 Then ComboBox5.SelectedIndex = 0 End Sub ''' ''' 查询设备列表 ''' Private Sub QueryRoomInfoList() Dim queryCol As String = $"ProjectNumber, RoomNumber, RoomType, CurrentState, HostMAC, ConfigVersion, LastCommTime, Remarks" 'If TextBox6.Text = Nothing And TextBox20.Text = Nothing Then _SqlServer.Query(queryCol, _RoomInfoLists, Grid3) 'Else 'Dim conditions As String = $"Where ProjectNumber = '{TextBox6.Text}' And RoomType = '{TextBox20.Text}'" '_SqlServer.Query(queryCol, _RoomInfoLists, Grid3, conditions) 'End If End Sub ''' ''' 房间列表_查询 ''' ''' ''' Private Sub Button11_Click(sender As Object, e As EventArgs) Handles Button11.Click QueryRoomInfoList() End Sub ''' ''' 房间列表_增加 ''' ''' ''' Private Sub Button14_Click(sender As Object, e As EventArgs) Handles Button14.Click Dim projectNumber As String = TextBox6.Text '项目编号 Dim roomNumber As String = TextBox18.Text '房间编号 Dim roomType As String = TextBox20.Text '房型 Dim currentState As String = ComboBox5.Text '当前状态 Dim hostMac As String = TextBox27.Text '主机MAC Dim configVer As String = TextBox26.Text '配置版本号 Dim lastCommTime As String = TextBox22.Text '最后一次通讯时间 Dim remarks As String = TextBox4.Text '备注 Dim conditions As String = $"(ProjectNumber, RoomNumber, RoomType, CurrentState, HostMAC, ConfigVersion, LastCommTime, Remarks) Values('{projectNumber}', '{roomNumber}', '{roomType}', '{currentState}', '{hostMac}', '{configVer}', '{lastCommTime}', '{remarks}')" _SqlServer.Add(_RoomInfoLists, Grid3, conditions) QueryRoomInfoList() End Sub ''' ''' 房间列表_修改 ''' ''' ''' Private Sub Button13_Click(sender As Object, e As EventArgs) Handles Button13.Click Dim projectNumber As String = String.Empty '项目编号 Dim roomNumber As String = String.Empty '房间编号 Dim roomType As String = String.Empty '房型 Dim currentState As String = String.Empty '当前状态 Dim hostMac As String = String.Empty '主机MAC Dim configVer As String = String.Empty '配置版本号 Dim lastCommTime As String = String.Empty '最后一次通讯时间 Dim remarks As String = String.Empty '备注 If Grid3.ActiveCell.Row > 0 Then projectNumber = Grid3.Cell(Grid3.ActiveCell.Row, 1).Text roomNumber = Grid3.Cell(Grid3.ActiveCell.Row, 2).Text roomType = Grid3.Cell(Grid3.ActiveCell.Row, 3).Text currentState = Grid3.Cell(Grid3.ActiveCell.Row, 4).Text hostMac = Grid3.Cell(Grid3.ActiveCell.Row, 5).Text configVer = Grid3.Cell(Grid3.ActiveCell.Row, 6).Text lastCommTime = Grid3.Cell(Grid3.ActiveCell.Row, 7).Text remarks = Grid3.Cell(Grid3.ActiveCell.Row, 8).Text End If Dim projectNumber1 As String = TextBox6.Text '项目编号 Dim roomNumber1 As String = TextBox18.Text '房间编号 Dim roomType1 As String = TextBox20.Text '房型 Dim currentState1 As String = ComboBox5.Text '当前状态 Dim hostMac1 As String = TextBox27.Text '主机MAC Dim configVer1 As String = TextBox26.Text '配置版本号 Dim lastCommTime1 As String = TextBox22.Text '最后一次通讯时间 Dim remarks1 As String = TextBox4.Text '备注 Dim conditions As String = $"Set ProjectNumber = '{projectNumber1}', RoomNumber = '{roomNumber1}', RoomType = '{roomType1}', CurrentState = '{currentState1}', HostMAC = '{hostMac1}', ConfigVersion = '{configVer1}', LastCommTime = '{lastCommTime1}', Remarks = '{remarks1}' Where ProjectNumber = '{projectNumber}' And RoomNumber = '{roomNumber}' And RoomType = N'{roomType}' And CurrentState = N'{currentState}' And HostMAC = '{hostMac}' And ConfigVersion = '{configVer}' And LastCommTime = N'{lastCommTime}' And Remarks = N'{remarks}'" Dim hint As DialogResult = MessageBox.Show($"要修改的文件信息如下{vbCrLf}{vbCrLf}项目编号:{projectNumber1}{vbCr}房间编号:{roomNumber1}{vbCr}房型:{roomType1}{vbCr}主机MAC:{hostMac1}{vbCr}配置版本号:{configVer1}{vbCr}当前状态:{currentState1}{vbCr}最后一次通讯时间:{lastCommTime1}{vbCr}备注:{remarks1}{vbCrLf}{vbCrLf}是否继续修改?", "警告!!!", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) If hint = DialogResult.OK Then Console.WriteLine($"修改完成") _SqlServer.Modify(_RoomInfoLists, Grid3, conditions) MsgBox($"修改成功!") End If QueryRoomInfoList() End Sub ''' ''' 房间列表_删除 ''' ''' ''' Private Sub Button12_Click(sender As Object, e As EventArgs) Handles Button12.Click Dim projectNumber As String = TextBox6.Text '项目编号 Dim roomNumber As String = TextBox18.Text '房间编号 Dim roomType As String = TextBox20.Text '房型 Dim currentState As String = ComboBox5.Text '当前状态 Dim hostMac As String = TextBox27.Text '主机MAC Dim configVer As String = TextBox26.Text '配置版本号 Dim lastCommTime As String = TextBox22.Text '最后一次通讯时间 Dim remarks As String = TextBox4.Text '备注 Dim conditions As String = $"Where ProjectNumber = '{projectNumber}' And RoomNumber = '{roomNumber}' And RoomType = '{roomType}' And CurrentState = '{currentState}' And HostMAC = '{hostMac}' And ConfigVersion = '{configVer}' And LastCommTime = '{lastCommTime}' And Remarks = '{remarks}'" _SqlServer.Delete(_RoomInfoLists, Grid3, conditions) TextBox6.Text = Nothing TextBox18.Text = Nothing TextBox20.Text = Nothing ComboBox5.Text = Nothing TextBox27.Text = Nothing TextBox26.Text = Nothing TextBox22.Text = Nothing TextBox4.Text = Nothing QueryRoomInfoList() End Sub ''' ''' 房间表格点击事件 ''' ''' ''' Private Sub Grid3_Click(Sender As Object, e As EventArgs) Handles Grid3.Click If Grid3.ActiveCell.Row > 0 Then TextBox6.Text = Grid3.Cell(Grid3.ActiveCell.Row, 1).Text '项目编号 TextBox18.Text = Grid3.Cell(Grid3.ActiveCell.Row, 2).Text '房间编号 TextBox20.Text = Grid3.Cell(Grid3.ActiveCell.Row, 3).Text '房型 ComboBox5.Text = Grid3.Cell(Grid3.ActiveCell.Row, 4).Text '当前状态 TextBox27.Text = Grid3.Cell(Grid3.ActiveCell.Row, 5).Text '主机MAC TextBox26.Text = Grid3.Cell(Grid3.ActiveCell.Row, 6).Text '配置版本号 TextBox22.Text = Grid3.Cell(Grid3.ActiveCell.Row, 7).Text '最后一次通讯时间 TextBox4.Text = Grid3.Cell(Grid3.ActiveCell.Row, 8).Text '备注 End If End Sub #End Region #Region "配置设备列表" 'Private _dev As New List(Of String) From {"0_无效设备", "1_电继电器"} ''另一种用法 ''' 设备类型合集 Private _devTypes() As String = {"0_无效设备", "1_电继电器", "2_继电器输入状态", "3_继电器输出状态", "4_服务信息", "5_干节点窗帘", "6_开关指示灯", "7_空调1", "8_红外感应", "9_空气质量检测设备", "10_插卡取电", "11_地暖", "12_RCU设备网络", "13_窗帘", "14_继电器", "15_红外发送", "16_直流调光", "17_可控硅调光", "18_灯带", "19_中控", "20_微信锁", "21_背景音乐", "22_房态下发", "23_主机本地调光", "24_PWM调光", "25_LED调光", "26_RCU电源", "27_A9IO开关", "28_A9IO扩展", "29_A9IO电源", "30_无线网关轮询", "31_无线网关主动"} ''' 设备波特率 Private _devBauds() As String = {"不存在", "2400", "4800", "9600", "14400", "19200", "38400", "56000", "57600", "115200"} ''' 设备端口号 Private _devPorts() As String = {"不存在", "1号", "2号", "3号"} ''' ''' 设备类型合集 ''' Enum EnDevTypeFailarmy ''' 0_无效设备 Dev_Host_Invalid ''' 1_电继电器 Dev_Host_HVout ''' 2_电输入_输入状态 Dev_Host_LVinput ''' 3_电输出_输出状态 Dev_Host_LVoutput ''' 4_服务信息_可配置数量,输出状态 Dev_Host_Service ''' 5_干节点窗帘_可配置数量,输出状态 Dev_NodeCurtain '' 485设备类型 ''' 开关指示灯 DEV_RS485_SWT ''' 空调1_空调状态 DEV_RS485_TEMPCTRL1 ''' 红外感应_备用 DEV_RS485_INFRARED ''' 空气质量检测设备_备用 DEV_RS485_AirDetect ''' 插卡取电_取电状态 DEV_RS485_CARD ''' 地暖_地暖状态 DEV_RS485_HEATER ''' RCU设备网络 Dev_RCU_NET ''' 窗帘_窗帘状态 DEV_RS485_CURTAIN ''' 继电器_继电器状态 DEV_RS485_RELAY ''' 红外发送_红外发送状态 DEV_RS485_IR_SEND ''' 直流调光_调光状态 DEV_RS485_DIMMING ''' 可控硅调光_可控硅状态 DEV_RS485_TRAIC ''' 灯带_灯带状态 DEV_RS485_STRIP ''' 中控 DEV_RS485_CoreCtrl ''' 微信锁_微信锁状态 DEV_RS485_WxLock ''' 背景音乐_背景音乐状态 DEV_RS485_MUSIC ''' 房态下发 DEV_NET_ROOMSTATE ''' 主机本地调光 Dev_Host_PWMLight ''' 485PWM调光_PWM调光状态 DEV_RS485_PWM ''' 总线调光_PBLED调光状态 DEV_PB_LED ''' RCU电源 DEV_RCU_POWER ''' A9IO开关_独立开关,没有协议区分 DEV_RS485_A9_IO_SWT ''' A9IO扩展_独立扩展,没有协议区分 DEV_RS485_A9_IO_EXP ''' A9IO电源_独立电源,没有协议区分 DEV_RS485_A9_IO_POWER ''' 无线网关轮询_用于轮询控制轮询设备,给无线网关下发配置和询问网关状态 DEV_RS485_RFGatewayCycle ''' 无线网关主动 DEV_RS485_RFGatewayHost End Enum ''' ''' 初始化设备类型,波特率,端口,频率 ''' Private Sub InitDevType() ComboBox1.Items.Clear() ComboBox1.Items.AddRange(_devTypes) If ComboBox1.Items.Count > 1 Then ComboBox1.SelectedIndex = 1 ComboBox2.Items.Clear() ComboBox2.Items.AddRange(_devBauds) If ComboBox2.Items.Count > 1 Then ComboBox2.SelectedIndex = 0 ComboBox3.Items.Clear() ComboBox3.Items.AddRange(_devPorts) If ComboBox3.Items.Count > 1 Then ComboBox3.SelectedIndex = 0 End Sub ''' ''' 查询设备列表 ''' Private Sub QueryDevList() Dim queryCol As String = $"ProjectNumber, RoomType, ConfigVersion, HostTypeNumber, DevPort, DevName, DevType, DevTypeNumber, DevProtocol, DevBaud, DevAddress, Remarks" _SqlServer.Query(queryCol, _DevConfigName, GrdDevLists) End Sub ''' ''' 配置设备列表_查询 ''' ''' ''' Private Sub BtnDevQuery_Click(sender As Object, e As EventArgs) Handles BtnDevQuery.Click QueryDevList() End Sub ''' ''' 配置设备列表_添加 ''' ''' ''' Private Sub BtnDevAdd_Click(sender As Object, e As EventArgs) Handles BtnDevAdd.Click Dim projectNumber As String = ComboBox11.Text '项目编号 Dim roomType As String = ComboBox12.Text '房型 Dim configVer As String = TextBox11.Text '配置版本 Dim hostTypeNumber As String = TextBox12.Text '主机型号 Dim devPort As String = ComboBox3.Text '端口号 Dim devName As String = TextBox15.Text '设备名称 Dim devType As String = ComboBox1.Text '设备类型 Dim devTypeNumber As String = TextBox16.Text '设备型号 Dim devxieyi As String = TextBox8.Text '协议 Dim devBand As String = ComboBox2.Text '波特率 Dim devAddr As String = NumericUpDown3.Text '设备地址 Dim remarks As String = TextBox10.Text '备注 Dim conditions As String = $"(ProjectNumber, RoomType, ConfigVersion, HostTypeNumber, DevPort, DevName, DevType, DevTypeNumber, DevProtocol, DevBaud, DevAddress, Remarks) values('{projectNumber}', '{roomType}', '{configVer}', '{hostTypeNumber}', '{devPort}', '{devName}', '{devType}', '{devTypeNumber}', '{devxieyi}', '{devBand}', '{devAddr}', '{remarks}')" _SqlServer.Add(_DevConfigName, GrdDevLists, conditions) QueryDevList() End Sub ''' ''' 配置设备列表_修改 ''' ''' ''' Private Sub Button16_Click(sender As Object, e As EventArgs) Handles Button16.Click Dim projectNumber As String = String.Empty '项目编号 Dim roomType As String = String.Empty '房型 Dim configVer As String = String.Empty '配置版本 Dim hostTypeNumber As String = String.Empty '主机型号 Dim devPort As String = String.Empty '端口号 Dim devName As String = String.Empty '设备名称 Dim devType As String = String.Empty '设备类型 Dim devTypeNumber As String = String.Empty '设备型号 Dim devxieyi As String = String.Empty '协议 Dim devBand As String = String.Empty '波特率 Dim devAddr As String = String.Empty '设备地址 Dim remarks As String = String.Empty '备注 If GrdDevLists.ActiveCell.Row > 0 Then projectNumber = GrdDevLists.Cell(GrdDevLists.ActiveCell.Row, 1).Text roomType = GrdDevLists.Cell(GrdDevLists.ActiveCell.Row, 2).Text configVer = GrdDevLists.Cell(GrdDevLists.ActiveCell.Row, 3).Text hostTypeNumber = GrdDevLists.Cell(GrdDevLists.ActiveCell.Row, 4).Text devPort = GrdDevLists.Cell(GrdDevLists.ActiveCell.Row, 5).Text devName = GrdDevLists.Cell(GrdDevLists.ActiveCell.Row, 6).Text devType = GrdDevLists.Cell(GrdDevLists.ActiveCell.Row, 7).Text devTypeNumber = GrdDevLists.Cell(GrdDevLists.ActiveCell.Row, 8).Text devxieyi = GrdDevLists.Cell(GrdDevLists.ActiveCell.Row, 9).Text devBand = GrdDevLists.Cell(GrdDevLists.ActiveCell.Row, 10).Text devAddr = GrdDevLists.Cell(GrdDevLists.ActiveCell.Row, 11).Text remarks = GrdDevLists.Cell(GrdDevLists.ActiveCell.Row, 12).Text End If Dim projectNumber1 As String = ComboBox11.Text '项目编号 Dim roomType1 As String = ComboBox12.Text '房型 Dim configVer1 As String = TextBox11.Text '配置版本 Dim hostTypeNumber1 As String = TextBox12.Text '主机型号 Dim devPort1 As String = ComboBox3.Text '端口号 Dim devName1 As String = TextBox15.Text '设备名称 Dim devType1 As String = ComboBox1.Text '设备类型 Dim devTypeNumber1 As String = TextBox16.Text '设备型号 Dim devxieyi1 As String = TextBox8.Text '协议 Dim devBand1 As String = ComboBox2.Text '波特率 Dim devAddr1 As String = NumericUpDown3.Text '设备地址 Dim remarks1 As String = TextBox10.Text '备注 Dim conditions As String = $"Set ProjectNumber = '{projectNumber1}', RoomType = '{roomType1}', ConfigVersion = '{configVer1}', HostTypeNumber = '{hostTypeNumber1}', DevPort = '{devPort1}', DevName = '{devName1}', DevType = '{devType1}', DevTypeNumber = '{devTypeNumber1}', DevProtocol = '{devxieyi1}', DevBaud = '{devBand1}', DevAddress = '{devAddr1}', Remarks = '{remarks1}' Where ProjectNumber = '{projectNumber}' And RoomType = '{roomType}' And ConfigVersion = '{configVer}' And HostTypeNumber = '{hostTypeNumber}' And DevPort = '{devPort}' And DevName = '{devName}' And DevType = '{devType}' And DevTypeNumber = '{devTypeNumber}' And DevProtocol = '{devxieyi}' And DevBaud = '{devBand}' And DevAddress = '{devAddr}' And Remarks = '{remarks}'" Dim hint As DialogResult = MessageBox.Show($"要修改的文件信息如下{vbCrLf}{vbCrLf}项目编号:{projectNumber1}{vbCr}房型:{roomType1}{vbCr}配置版本:{configVer1}{vbCr}主机型号:{hostTypeNumber1}{vbCr}端口号:{devPort1}{vbCr}设备名称:{devName1}{vbCr}设备类型:{devType1}{vbCr}设备型号:{devTypeNumber1}{vbCr}协议:{devxieyi1}{vbCr}波特率:{devBand1}{vbCr}设备地址:{devAddr1}{vbCr}备注:{remarks1}{vbCr} {vbCrLf}是否继续修改?", "警告!!!", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) If hint = DialogResult.OK Then Console.WriteLine($"修改完成") _SqlServer.Modify(_DevConfigName, GrdDevLists, conditions) MsgBox($"修改成功!") End If QueryDevList() End Sub ''' ''' 配置设备列表_删除 ''' ''' ''' Private Sub Button17_Click(sender As Object, e As EventArgs) Handles Button17.Click Dim projectNumber As String = ComboBox11.Text '项目编号 Dim roomType As String = ComboBox12.Text '房型 Dim configVer As String = TextBox11.Text '配置版本 Dim hostTypeNumber As String = TextBox12.Text '主机型号 Dim devPort As String = ComboBox3.Text '端口号 Dim devName As String = TextBox15.Text '设备名称 Dim devType As String = ComboBox1.Text '设备类型 Dim devTypeNumber As String = TextBox16.Text '设备型号 Dim devxieyi As String = TextBox8.Text '协议 Dim devBand As String = ComboBox2.Text '波特率 Dim devAddr As String = NumericUpDown3.Value '设备地址 Dim remarks As String = TextBox10.Text '备注 Dim conditions As String = $"Where ProjectNumber = '{projectNumber}' And RoomType = '{roomType}' And ConfigVersion = '{configVer}' And HostTypeNumber = '{hostTypeNumber}' And DevPort = '{devPort}' And DevName = '{devName}' And DevType = '{devType}' And DevTypeNumber = '{devTypeNumber}' And DevProtocol = '{devxieyi}' And DevBaud = '{devBand}' And DevAddress = '{devAddr}' And Remarks = '{remarks}'" _SqlServer.Delete(_DevConfigName, GrdDevLists, conditions) ComboBox11.Text = Nothing ComboBox12.Text = Nothing TextBox11.Text = Nothing TextBox12.Text = Nothing ComboBox3.Text = Nothing TextBox15.Text = Nothing ComboBox1.Text = Nothing TextBox16.Text = Nothing TextBox8.Text = Nothing ComboBox2.Text = Nothing NumericUpDown3.Value = 0 TextBox10.Text = Nothing QueryDevList() End Sub ''' ''' 设备列表点击表格事件 ''' ''' ''' Private Sub GrdDevList_Click(Sender As Object, e As EventArgs) Handles GrdDevLists.Click If GrdDevLists.ActiveCell.Row > 0 Then ComboBox11.Text = GrdDevLists.Cell(GrdDevLists.ActiveCell.Row, 1).Text '项目编号 ComboBox12.Text = GrdDevLists.Cell(GrdDevLists.ActiveCell.Row, 2).Text '房型 TextBox11.Text = GrdDevLists.Cell(GrdDevLists.ActiveCell.Row, 3).Text '配置版本 TextBox12.Text = GrdDevLists.Cell(GrdDevLists.ActiveCell.Row, 4).Text '主机型号 ComboBox3.Text = GrdDevLists.Cell(GrdDevLists.ActiveCell.Row, 5).Text '端口号 TextBox15.Text = GrdDevLists.Cell(GrdDevLists.ActiveCell.Row, 6).Text '设备名称 ComboBox1.Text = GrdDevLists.Cell(GrdDevLists.ActiveCell.Row, 7).Text '设备类型 TextBox16.Text = GrdDevLists.Cell(GrdDevLists.ActiveCell.Row, 8).Text '设备型号 TextBox8.Text = GrdDevLists.Cell(GrdDevLists.ActiveCell.Row, 9).Text '协议 ComboBox2.Text = GrdDevLists.Cell(GrdDevLists.ActiveCell.Row, 10).Text '波特率 If GrdDevLists.Cell(GrdDevLists.ActiveCell.Row, 11).Text = Nothing Then NumericUpDown3.Value = 0 Else NumericUpDown3.Value = GrdDevLists.Cell(GrdDevLists.ActiveCell.Row, 11).Text '设备地址 End If TextBox10.Text = GrdDevLists.Cell(GrdDevLists.ActiveCell.Row, 12).Text '备注 End If End Sub ''' ''' 下拉选择项目编号 ''' ''' ''' Private Sub ComboBox11_DropDown(sender As Object, e As EventArgs) Handles ComboBox11.DropDown ComboBox11.Items.Clear() Dim addItems As New List(Of String) Dim queryCol As String = $"DISTINCT ProjectNumber" Dim dtTable As DataTable = _SqlServer.Query(queryCol, _ProjectInfoLists, "") For r = 0 To dtTable.Rows.Count - 1 addItems.Add(dtTable(r)(0)) Next ComboBox11.Items.AddRange(addItems.ToArray) End Sub ''' ''' 下拉框项目编号文本改变 ''' ''' ''' Private Sub ComboBox11_TextChanged(sender As Object, e As EventArgs) Handles ComboBox11.TextChanged ComboBox12.Items.Clear() End Sub ''' ''' 查询配置房型 ''' ''' ''' Private Sub ComboBox12_DropDown(sender As Object, e As EventArgs) Handles ComboBox12.DropDown If ComboBox11.Text Is Nothing Then MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.PleaseSelectTheItemNumber)}!") Exit Sub End If ComboBox12.Items.Clear() Dim projectCode As String = ComboBox11.Text '根据项目编号查询房型 QueryConfigRoomType(projectCode) End Sub ''' ''' 查询房间编号 ''' ''' 项目编号 Private Sub QueryConfigRoomType(projectCode As String) Dim addItems As New List(Of String) Dim cols As String = $"DISTINCT RoomType" Dim conditions As String = $"Where ProjectNumber = '{projectCode}'" Dim dtTable As DataTable = _SqlServer.Query(cols, _RoomTypeLists, conditions) For r = 0 To dtTable.Rows.Count - 1 addItems.Add(dtTable(r)(0)) Next ComboBox12.Items.AddRange(addItems.ToArray) End Sub #End Region #Region "设备列表" Private _FrmAddDev As FrmAddDevice ''' ''' 新增设备 ''' ''' ''' Private Sub Button18_Click(sender As Object, e As EventArgs) Handles Button18.Click _FrmAddDev = New FrmAddDevice If _FrmAddDev.ShowDialog = DialogResult.OK Then End If End Sub #End Region #Region "设备存在" ''' ''' MAC地址 ''' Private _MAC As String ''' ''' 匹配次数 ''' Private _countMatching As Integer = 0 ''' ''' 点击表格显示主机设备存在 ''' ''' ''' Private Sub GrdRCUHost_Click(Sender As Object, e As EventArgs) Handles GrdRCUHost.Click Try If GrdRCUHost.ActiveCell.Row > 0 Then _RemoteIP = IPAddress.Parse(GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.IPAddress).Text) _MAC = GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.MAC).Text InitQueryDevStateTabData() _QueryDevStateIndex = 1 Dim cmd As Byte = &HD1 Dim data(0) As Byte data(0) = &H1 Dim sendData As Byte() = FillSendData(cmd, data) SendUDPData(sendData) 'Console.WriteLine($"查询设备状态:{ByteToString(sendData)}") 'GetMatchingHostsInfo() SetProjectInfo() _countMatching += 1 If _countMatching = 1 Then _dtMatchingInfo = GetCloudMatchingData(TextBox9.Text) End If 'QueryMatchingInfo(_projectNumber) MatchingInfo() ShowTestModels(GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.CentralName).Text) SetBatchTableData(GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.MAC).Text) End If Catch ex As Exception Console.WriteLine($"未知错误!{ex.Message}") End Try End Sub ''' ''' ''' ''' ''' Private Sub GrdRCUHost_CellChange(Sender As Object, e As FlexCell.Grid.CellChangeEventArgs) Handles GrdRCUHost.CellChange LabelCount.Text = $"{CheckedCount()}/{GrdRCUHost.Rows - 1}" End Sub ''' ''' 获取匹配主机信息 ''' Private Sub GetMatchingHostsInfo() GrdMatching.Cell(1, EnMatchingInfo.HostsData).Text = GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.ProjectCode).Text '项目编码 GrdMatching.Cell(2, EnMatchingInfo.HostsData).Text = GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.RoomTypeId).Text '房型Id GrdMatching.Cell(3, EnMatchingInfo.HostsData).Text = GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.SoftwareVersion).Text '软件版本号 GrdMatching.Cell(4, EnMatchingInfo.HostsData).Text = GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.MCUName).Text 'Core GrdMatching.Cell(5, EnMatchingInfo.HostsData).Text = GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.CentralName).Text 'Model-中控 GrdMatching.Cell(6, EnMatchingInfo.HostsData).Text = GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.RoomRemarks).Text '房间备注 End Sub ''' ''' 设置项目信息 ''' 设置主机信息到设置面板 ''' Private Sub SetProjectInfo() 'TextBox9.Text = GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.ProjectCode).Text '项目编码 'ComboBox15.Text = GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.RoomState).Text '房态 'ComboBox16.Text = GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.RoomType).Text '房型备注 'ComboBox17.Text = GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.RoomNumber).Text '房号备注 'TextBox21.Text = GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.RoomTypeId).Text '房型ID 'TextBox25.Text = GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.RoomNumberId).Text '房号ID 'ComboBox14.Text = GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.Season).Text '季节 'ComboBox13.Text = GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.Lock).Text '锁定 'DateTimePicker2.Value = GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.PrivilegedDays).Text '授权到期 TextBox30.Text = GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.RoomRemarks).Text '房间备注 End Sub ''' ''' 获取云端匹配数据 ''' ''' Private Function GetCloudMatchingData(projectNumber As String) Dim dtUser As New DataTable dtUser.Columns.Add("ID") dtUser.Columns.Add("房号") dtUser.Columns.Add("房型ID") dtUser.Columns.Add("房型") dtUser.Columns.Add("MAC") Dim creatDate As String If _hotelListData.ContainsKey(projectNumber) = True Then creatDate = _hotelListData(projectNumber).CreatDate If DealHostListInterfaceInfo(projectNumber, creatDate) = True Then For row = 0 To _hostListData.Keys.Count - 1 dtUser.Rows.Add("") dtUser(row)(0) = _hostListData(row).ID dtUser(row)(1) = _hostListData(row).RoomNumber dtUser(row)(2) = _hostListData(row).RoomTypeID dtUser(row)(3) = _hostListData(row).RoomTypeName dtUser(row)(4) = _hostListData(row).MAC Next End If End If Return dtUser End Function ''' ''' 匹配信息 ''' Private Sub MatchingInfo() If TextBox9.Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ProjectCode)}" Then Return If TextBox9.Text <> GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.ProjectCode).Text Then CBoProjectNumber.ForeColor = Color.Red AppendMatchTipText($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ProjectCodesDoNotMatch)}!{vbCrLf}", Color.Red) Else CBoProjectNumber.ForeColor = Color.Black ''房型ID, 房号ID If _dtMatchingInfo.Rows.Count > 0 Then If GetRoomIDIsExist(0, EnRCUHosts.RoomNumberId) = False Then '房号ID AppendMatchTipText($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ProjectCode)}:{GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.ProjectCode).Text}-{LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomIDSDoNotMatch)}!{vbCrLf}", Color.Red) End If If GetRoomIDIsExist(2, EnRCUHosts.RoomTypeId) = False Then '房型ID AppendMatchTipText($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ProjectCode)}:{GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.ProjectCode).Text}-{LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomIDDoesNotMatch)}!{vbCrLf}", Color.Red) End If '房型,房号 If GetRoomIDIsMatch(0, 1, EnRCUHosts.RoomNumberId, EnRCUHosts.RoomNumber) = True Then CBoRoomTpRemark.ForeColor = Color.Black Else CBoRoomTpRemark.ForeColor = Color.Red AppendMatchTipText($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ProjectCode)}:{GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.ProjectCode).Text}-{LanguageData.StringList(MultiLanguageDAL.StringEnum.TheRoomNumberDoesNotMatchTheRoomID)}!{vbCrLf}", Color.Red) End If If GetRoomIDIsMatch(2, 3, EnRCUHosts.RoomTypeId, EnRCUHosts.RoomType) = True Then CBoRoomNuRemark.ForeColor = Color.Black Else CBoRoomNuRemark.ForeColor = Color.Red AppendMatchTipText($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ProjectCode)}:{GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.ProjectCode).Text}-{LanguageData.StringList(MultiLanguageDAL.StringEnum.TheRoomTypeDoesNotMatchTheRoomID)}!{vbCrLf}", Color.Red) End If If GetRoomIDIsMatch(0, 2, EnRCUHosts.RoomNumberId, EnRCUHosts.RoomTypeId) = False Then AppendMatchTipText($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ProjectCode)}:{GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.ProjectCode).Text}-{LanguageData.StringList(MultiLanguageDAL.StringEnum.TheRoomIDDoesNotMatchTheRoomTypeID)}!{vbCrLf}", Color.Red) End If 'MAC地址 If GetRoomIDIsMatch(0, 4, EnRCUHosts.RoomNumberId, EnRCUHosts.MAC) = False Then AppendMatchTipText($"MAC地址:匹配失败!{vbCrLf}", Color.Red) AppendMatchTipText($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ProjectCode)}:{GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, EnRCUHosts.ProjectCode).Text}-{LanguageData.StringList(MultiLanguageDAL.StringEnum.TheRoomIDDoesNotMatchTheMACaddress)}! 云端MAC地址:{_macCloud}{vbCrLf}", Color.Red) End If End If End If End Sub ''' ''' 查询房间信息是否存在 ''' ''' ''' ''' Private Function GetRoomIDIsExist(queryRow As Integer, dtRow As Integer) As Boolean For index = 0 To _dtMatchingInfo.Rows.Count - 1 If _dtMatchingInfo(index)(queryRow) = GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, dtRow).Text Then Return True End If Next Return False End Function Private _macCloud As String ''' ''' 查询房间信息是否匹配 ''' ''' ''' ''' ''' ''' Private Function GetRoomIDIsMatch(queryRow1 As Integer, queryRow2 As Integer, dtRow1 As Integer, dtRow2 As Integer) As Boolean For index = 0 To _dtMatchingInfo.Rows.Count - 1 'Console.WriteLine($"匹配信息:{_dtMatchingInfo(index)(queryRow2)}------{GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, dtRow1).Text}") If _dtMatchingInfo(index)(queryRow1) = GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, dtRow1).Text Then Dim dtRow As String = GrdRCUHost.Cell(GrdRCUHost.ActiveCell.Row, dtRow2).Text dtRow = dtRow.Replace(vbNullChar, "") 'Console.WriteLine($"1:{_dtMatchingInfo(index)(queryRow2)} 2:{dtRow}") If _dtMatchingInfo(index)(queryRow2) = dtRow Then Return True End If If queryRow2 = 4 Then _macCloud = _dtMatchingInfo(index)(queryRow2) End If End If Next Return False End Function ''' 匹配信息表 Private _dtMatchingInfo As New DataTable ''' ''' 根据项目编码,查询匹配信息 ''' ''' Private Sub QueryMatchingInfo(projectNumber As String) '_dtMatchingInfo = _backstageData.GetMatchingInfo(projectNumber) ''If _dtMatchingInfo.Rows.Count > 0 Then '' For index = 0 To _dtMatchingInfo.Rows.Count - 1 '' _roomNumber.Add(_dtMatchingInfo(index)(4)) '获取房号 '' Next ''End If End Sub Private _batch As Integer = 0 ''' ''' 设置批量表格数据显示 ''' ''' Private Sub SetBatchTableData(mac As String) Dim remoteMAC As String For j = 1 To GrdBatchData.Rows - 1 remoteMAC = GrdBatchData.Cell(j, EnBatchData.MAC).Text If GetComparison(mac, remoteMAC) = True Then If GrdRCUHost.ActiveCell.Row <> _rcu Then GrdRCUHost.Range(_rcu, 1, _rcu, GrdRCUHost.Cols - 1).BackColor = Color.LightCyan GrdBatchData.Range(_rcu, 1, _rcu, GrdBatchData.Cols - 1).BackColor = Color.LightCyan End If GrdBatchData.Range(_batch, 1, _batch, GrdBatchData.Cols - 1).BackColor = Color.LightCyan GrdBatchData.Range(j, 1, j, GrdBatchData.Cols - 1).BackColor = Color.LightSkyBlue _batch = j Exit For 'Else 'GrdBatchData.Range(j, 1, j, GrdBatchData.Cols - 1).BackColor = Color.LightCyan End If Next End Sub #End Region #End Region #Region "通讯数据" ''' ''' 填充数据_搜索主机 ''' ''' Private Function FillDataBuff() Dim user(3) As Byte Dim heartbeat As Byte = &H0 Dim data As New List(Of Byte) data.AddRange(user) data.Add(heartbeat) data.AddRange(GetAddressToByte) data.AddRange(GetPortToByte) Return data.ToArray End Function ''' ''' IP地址转换为Byte数组 ''' ''' Private Function GetAddressToByte() 'Dim addr As String = CboLocalIp.Text 'Dim iadd() As String = addr.Split(New Char() {"."c}, StringSplitOptions.RemoveEmptyEntries) Dim address(3) As Byte address(0) = $"&H{Hex(255)}" address(1) = $"&H{Hex(255)}" address(2) = $"&H{Hex(255)}" address(3) = $"&H{Hex(255)}" Return address End Function ''' ''' 端口号转换为Byte数组 ''' ''' Private Function GetPortToByte() Dim bport As Integer = CInt(_localPort) Dim port() As Byte = IntToByteLB(bport) Return port End Function '''' '''' 项目编号下拉触发事件 '''' '''' '''' 'Private Sub ComboBox6_DropDown_1(sender As Object, e As EventArgs) Handles ComboBox6.DropDown ' ComboBox6.Items.Clear() ' QueryProjectNumber() 'End Sub ''' ''' 查询项目编号 ''' Private Sub QueryProjectNumber() Dim addItems As New List(Of String) Dim cols As String = $"DISTINCT ProjectNumber" Dim dtTable As DataTable = _SqlServer.Query(cols, _ProjectInfoLists, "") For r = 0 To dtTable.Rows.Count - 1 addItems.Add(dtTable(r)(0)) Next ComboBox6.Items.AddRange(addItems.ToArray) End Sub '''' '''' 查询项目编号对应的项目名称 '''' '''' '''' 'Private Sub ComboBox6_TextChanged(sender As Object, e As EventArgs) Handles ComboBox6.TextChanged ' ComboBox4.Text = Nothing ' ComboBox7.Text = Nothing ' TextBox24.Text = Nothing ' Dim addItem As New List(Of String) ' Dim cols As String = $"ProjectNumber, ProjectName" ' Dim contions As String = $"Where ProjectNumber = '{ComboBox6.Text}'" ' Dim daTable As DataTable = _SqlServer.Query(cols, _ProjectInfoLists, contions) ' If daTable.Rows.Count > 0 Then ' TextBox23.Text = daTable(0)(1) ' End If 'End Sub '''' '''' 根据项目编号查询房型 '''' '''' '''' 'Private Sub ComboBox4_DropDown_1(sender As Object, e As EventArgs) Handles ComboBox4.DropDown ' If ComboBox6.Text Is Nothing Then ' MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.PleaseSelectTheItemNumber)}!") ' Exit Sub ' End If ' ComboBox4.Items.Clear() ' Dim projectCode As String = ComboBox6.Text ' '根据项目编号查询房型 ' QueryRoomType(projectCode) 'End Sub ''' ''' 查询房型编号 ''' ''' 项目编号 Private Sub QueryRoomType(projectCode As String) Dim addItems As New List(Of String) Dim cols As String = $"DISTINCT RoomNumber" Dim conditions As String = $"Where ProjectNumber = '{projectCode}'" Dim dtTable As DataTable = _SqlServer.Query(cols, _RoomInfoLists, conditions) For r = 0 To dtTable.Rows.Count - 1 addItems.Add(dtTable(r)(0)) Next ComboBox4.Items.AddRange(addItems.ToArray) End Sub '''' '''' 下拉框文本改变事件 '''' 根据项目编号和房型查询配置数据 '''' '''' '''' 'Private Sub ComboBox4_TextChanged(sender As Object, e As EventArgs) Handles ComboBox4.TextChanged ' TextBox24.Text = Nothing ' ComboBox7.Text = Nothing ' If ComboBox6.Text Is Nothing And ComboBox6.Text = "" Then ' MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.TheItemNumberIsEmpty)}!") ' Exit Sub ' End If ' Dim projectCode As String = ComboBox6.Text ' Dim roomNumber As String = ComboBox4.Text ' Dim roomRemarks As String = TextBox29.Text ' Dim taTable As DataTable ' Dim queryCols As String = $"DISTINCT RoomType, Remarks " ' Dim conditions As String = $"WHERE ProjectNumber = '{projectCode}' AND RoomNumber = '{roomNumber}'" ' taTable = _SqlServer.Query(queryCols, _RoomInfoLists, conditions) ' If taTable.Rows.Count > 0 Then ' Dim addItem As String = taTable.Rows(0)(0) ' TextBox24.Text = addItem ' Dim addRemarks As String = taTable.Rows(0)(1) ' TextBox29.Text = addRemarks ' End If 'End Sub ''' ''' 配置存在 ''' ''' ''' Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click ''Console.WriteLine($"请选择主机 {GrdRCUHost.ActiveCell.Row}") 'If GrdRCUHost.ActiveCell.Row = 0 Then ' MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SelectTheHostToBeConfigured)}!") ' Exit Sub 'End If 'If TextIsNull(ComboBox6, $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ProjectCode)}") = False Then Exit Sub 'If TextIsNull(ComboBox7, $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ConfigVersion)}") = False Then Exit Sub 'If TextIsNull(ComboBox4, $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomNumberRemark)}") = False Then Exit Sub 'If TextIsNull(TextBox24, $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomTypeRemark)}") = False Then Exit Sub ''1、设置配置 'SetConfig() 'PauseWait(100) ''2、配置下发 'If _SetConfigSign = True Then ' ConfigIssued() 'End If End Sub ''' ''' 设置配置 ''' Private Sub SetConfig() Dim cmd As Byte = &H31 Dim data As Byte() = FillSetConfigData() '发送 Dim sendData As Byte() = FillSendData(cmd, data) SendUDPData(sendData) 'Console.WriteLine($"设置配置:{ByteToString(sendData)}") End Sub ''' ''' 填充设置配置数据 ''' ''' Private Function FillSetConfigData() As Byte() Dim projectNumber As String = ComboBox6.Text Dim configNumber As String = ComboBox7.Text Dim roomNumber As String = ComboBox4.Text Dim roomType As String = TextBox24.Text Dim configCount As Byte = &H4 Dim proNum() As Byte Dim conNum() As Byte Dim roomNum() As Byte Dim roomT() As Byte Dim roomtypes(3) As Byte Dim databuf As New List(Of Byte) databuf.Add(configCount) '项目编号 databuf.Add(&H38) databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) proNum = StringToByte(projectNumber) databuf.AddRange(proNum) '配置版本号 databuf.Add(&H40) databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) conNum = VerStringToByte(configNumber) databuf.AddRange(conNum) '房间编号 databuf.Add(&H44) databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) roomNum = StringToByte(roomNumber) databuf.AddRange(roomNum) '房型 databuf.Add(&H48) databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) roomT = System.Text.Encoding.UTF8.GetBytes(roomType) Array.Copy(roomT, 0, roomtypes, 0, roomT.Length) databuf.AddRange(roomtypes) 'Console.WriteLine($"设置配置数据:{ByteToString(databuf.ToArray)}") Return databuf.ToArray End Function ''' ''' 字符串转4个byte的数组 ''' ''' ''' Private Function StringToByte(txt As String) As Byte() Dim buf(3) As Byte Dim arrtxt As Long = txt buf = BitConverter.GetBytes(arrtxt) Dim buff(3) As Byte Array.Copy(buf, 0, buff, 0, buff.Length) Return buff End Function ''' ''' 字符串转4个字节Byte ''' ''' ''' Private Function VerStringToByte(txt As String) As Byte() Dim txtString() As String = txt.Split(".") Dim buf(3) As Byte For index = 0 To txtString.Length - 1 If index = 4 Then Exit For buf(index) = txtString(index) Next Return buf End Function ''' ''' 配置下发 ''' Private Sub ConfigIssued() Dim dtTable As DataTable = GrdConfigDatas.DataSource If dtTable.Rows().Count = 0 Then '特殊处理 MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.EquipmentIsEmpty)}!") Exit Sub End If SelectDevListData(dtTable) End Sub ''' ''' 查询设备列表数据 ''' ''' Private Function SelectDevListData(dtTable As DataTable) '一包最多容纳2个设备,一个设备240个字节 Dim sendCount As Integer = dtTable.Rows().Count \ 2 + 1 Dim sendIndex As Integer = 1 Dim data As New List(Of Byte) data.Add(sendCount) data.Add(sendIndex) Dim devIndex As Integer = 0 For Each dtRow As DataRow In dtTable.Rows() '填充buf data.Add(&H0) '设备存在 'If _devTypes.Contains(dtRow("DevType")) Then '设备类型 ' data.Add(_devTypes.ToList.IndexOf(dtRow("DevType"))) 'Else ' data.Add(&H0) 'End If data.Add(GetDevTypeToByte(dtRow("DevType"))) '设备类型 data.Add(dtRow("DevAddress")) '设备地址 data.Add(GetDevBaudToByte(dtRow("DevBaud"))) '波特率 If _devPorts.Contains(dtRow("DevPort")) Then '端口号 data.Add(_devPorts.ToList.IndexOf(dtRow("DevPort"))) Else data.Add(&H0) End If data.Add(dtRow("DevProtocol")) '设备协议 For index = 1 To 64 data.Add(&H0) '保留64位 Next 'data.AddRange(BitConverter.GetBytes(CShort(dtRow("DevInput")))) '输入回路 'data.AddRange(BitConverter.GetBytes(CShort(dtRow("DevOutput")))) '输出回路 Dim devTypeNumber(15) As Byte Dim temp() As Byte temp = System.Text.Encoding.UTF8.GetBytes("DevTypeNumber") Array.Copy(temp, 0, devTypeNumber, 0, temp.Length) 'Console.WriteLine($"{BitConverter.ToString(devTypeNumber)}") 'Console.WriteLine($"{System.Text.Encoding.UTF8.GetString(devTypeNumber)}") data.AddRange(devTypeNumber) '设备型号 Dim devName(15) As Byte Dim tmp() As Byte tmp = System.Text.Encoding.UTF8.GetBytes("DevName") Array.Copy(tmp, 0, devName, 0, tmp.Length) 'Console.WriteLine($"{BitConverter.ToString(devName)}") 'Console.WriteLine($"{System.Text.Encoding.UTF8.GetString(devName)}") data.AddRange(devName) '设备名称 Dim remarks(137) As Byte Dim temps() As Byte temps = System.Text.Encoding.UTF8.GetBytes(dtRow("Remarks")) Array.Copy(temps, 0, devTypeNumber, 0, temps.Length) data.AddRange(remarks) '备注 devIndex += 1 If devIndex = 2 Then SendDevlistData(data.ToArray) '发送 devIndex = 0 sendIndex += 1 data.Clear() data.Add(sendCount) data.Add(sendIndex) End If Next If devIndex > 0 Then SendDevlistData(data.ToArray) '发送 End If Return data End Function ''' ''' 发送设备列表数据 ''' ''' Private Sub SendDevlistData(data() As Byte) Dim cmd As Byte = &HD2 '发送 Dim sendData As Byte() = FillSendData(cmd, data) SendUDPData(sendData) 'Console.WriteLine($"配置主机:{ByteToString(sendData)}") 'Console.WriteLine($"配置主机数据长:{sendData.Length}") _SetConfigSign = False End Sub ''' ''' 获取设备类型 ''' ''' ''' Private Function GetDevTypeToByte(devType As String) As Byte Dim devTypeBt As Byte Select Case devType Case $"0_无效设备" devTypeBt = &H0 Case $"1_电继电器" devTypeBt = &H1 Case $"2_继电器输入状态" devTypeBt = &H2 Case $"3_继电器输出状态" devTypeBt = &H3 Case $"4_服务信息" devTypeBt = &H4 Case $"5_干节点窗帘" devTypeBt = &H5 Case $"6_开关指示灯" devTypeBt = &H6 Case $"7_空调1" devTypeBt = &H7 Case $"8_红外感应" devTypeBt = &H8 Case $"9_空气质量检测设备" devTypeBt = &H9 Case $"10_插卡取电" devTypeBt = &HA Case $"11_地暖" devTypeBt = &HB Case $"12_RCU设备网络" devTypeBt = &HC Case $"13_窗帘" devTypeBt = &HD Case $"14_继电器" devTypeBt = &HE Case $"15_红外发送" devTypeBt = &HF Case $"16_直流调光" devTypeBt = &H10 Case $"17_可控硅调光" devTypeBt = &H11 Case $"18_灯带" devTypeBt = &H12 Case $"19_中控" devTypeBt = &H13 Case $"20_微信锁" devTypeBt = &H14 Case $"21_背景音乐" devTypeBt = &H15 Case $"22_房态下发" devTypeBt = &H16 Case $"23_主机本地调光" devTypeBt = &H17 Case $"24_PWM调光" devTypeBt = &H18 Case $"25_LED调光" devTypeBt = &H19 Case $"26_RCU电源" devTypeBt = &H1A Case $"27_A9IO开关" devTypeBt = &H1B Case $"28_A9IO扩展" devTypeBt = &H1C Case $"29_A9IO电源" devTypeBt = &H1D Case $"30_无线网关轮询" devTypeBt = &H1E Case $"31_无线网关主动" devTypeBt = &H1F Case Else devTypeBt = &H0 End Select Return devTypeBt End Function ''' ''' 获取设备类型 ''' ''' ''' Private Function GetDevTypeToString(devTypeBy As Byte) As String Dim devType As String Select Case devTypeBy Case &H0 devType = $"无效设备-{devTypeBy}" Case &H1 devType = $"电继电器" Case &H2 devType = $"继电器输入状态" Case &H3 devType = $"继电器输出状态" Case &H4 devType = $"服务信息" Case &H5 devType = $"干节点窗帘" Case &H6 devType = $"开关指示灯" Case &H7 devType = $"空调" Case &H8 devType = $"红外感应" Case &H9 devType = $"空气质量检测设备" Case &HA devType = $"插卡取电" Case &HC devType = $"RCU设备网络" Case &HD devType = $"窗帘" Case &HE devType = $"继电器" Case &HF devType = $"红外发送" Case &H10 devType = $"直流调光" Case &H11 devType = $"可控硅调光" Case &H12 devType = $"灯带" Case &H13 devType = $"中控" Case &H14 devType = $"微信锁" Case &H15 devType = $"背景音乐" Case &H16 devType = $"房态下发" Case &H17 devType = $"主机本地调光" Case &H18 devType = $"PWM调光" Case &H19 devType = $"LED调光" Case &H1A devType = $"RCU电源" Case &H1B devType = $"A9IO开关" Case &H1C devType = $"A9IO扩展" Case &H1D devType = $"A9IO电源" Case &H1E devType = $"无线网关轮询" Case &H1F devType = $"无线网关主动" Case &HF2 devType = $"PC测试" Case &HF1 devType = $"C5IO" Case Else devType = $"未知设备-{devTypeBy}" End Select Return devType End Function ''' ''' 获取设备波特率Byte值 ''' ''' ''' Private Function GetDevBaudToByte(devBaud As String) As Byte Dim baud As Byte Select Case devBaud Case "9600" baud = &H1 Case "14400" baud = &H2 Case "19200" baud = &H3 Case "38400" baud = &H4 Case "56000" baud = &H5 Case "57600" baud = &H6 Case "115200" baud = &H7 Case "4800" baud = &H8 Case "2400" baud = &H9 Case Else baud = &H0 End Select Return baud End Function ''' ''' 读取设置配置 ''' ''' ''' Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click 'If GrdRCUHost.ActiveCell.Row = 0 Then ' MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SelectTheHostToBeConfigured)}!") ' Exit Sub 'End If 'Dim cmd As Byte = &H30 ''发送 'Dim data As Byte() = FillReadConfigData() 'Dim sendData As Byte() = FillSendData(cmd, data) 'SendUDPData(sendData) ''Console.WriteLine($"读取设置配置:{ByteToString(sendData)}") End Sub ''' ''' 填充读取设置数据 ''' ''' Private Function FillReadConfigData() As Byte() Dim configCount As Byte = &H4 Dim databuf As New List(Of Byte) databuf.Add(configCount) '项目编号 databuf.Add(&H34) databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) '配置版本号 databuf.Add(&H3C) databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) '房间编号 databuf.Add(&H40) databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) '房型 databuf.Add(&H44) databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) Return databuf.ToArray End Function ''' ''' 是否点击OK ''' Public _IsOK As Boolean ''' ''' 设置MAC ''' Private Sub SetMAC() Dim frmmacdia As New FrmMACDialog(Me) frmmacdia.ShowMyDialog() If _IsOK = True Then Dim data() As Byte = frmmacdia.GetMACAddress() Dim cmd As Byte = &H31 '发送 Dim databuff As Byte() = FillMACIssuedData(data) Dim senddata As Byte() = FillSendData(cmd, databuff) 'Console.WriteLine($"设置mac:{ByteToString(senddata)}") SendUDPData(senddata) Console.WriteLine($"设置mac:{ByteToString(senddata)}") _IsOK = False End If End Sub ''' ''' 填充MAC下发数据 ''' ''' Public Function FillMACIssuedData(data As Byte()) Dim dataBuff As New List(Of Byte) dataBuff.Add(&H1) '寄存器个数 dataBuff.Add(&H14) '寄存器地址'00000014 dataBuff.Add(&H0) dataBuff.Add(&H0) dataBuff.Add(&H0) dataBuff.AddRange(data) Return dataBuff.ToArray End Function ''' ''' MAC地址下发 ''' ''' ''' Private Sub BtnMAC_Click(sender As Object, e As EventArgs) Handles BtnMAC.Click SetMAC() End Sub ''' ''' MAC地址下发 ''' ''' ''' Private Sub Button20_Click(sender As Object, e As EventArgs) Handles Button20.Click SetMAC() End Sub #End Region #Region "调试信息" ''' ''' 系统信息 ''' Private Sub SystemInfo() Dim cmd As Byte = &H9 Dim state(0) As Byte If CheckBox1.Checked = True Then state(0) = &H1 Else state(0) = &H0 End If Dim sendData() As Byte = FillModelsSerialPortTest(cmd, state) 'Console.WriteLine($"系统信息测试:{ByteToString(sendData)}") SendPortData(sendData) End Sub ''' ''' 网络信息 ''' Private Sub NetworkInfo() Dim cmd As Byte = &H9 Dim state(0) As Byte If CheckBox2.Checked = True Then state(0) = &H2 Else state(0) = &H0 End If Dim sendData() As Byte = FillModelsSerialPortTest(cmd, state) 'Console.WriteLine($"网络信息测试:{ByteToString(sendData)}") SendPortData(sendData) End Sub ''' ''' 设备信息 ''' Private Sub EquipmentInfo() Dim cmd As Byte = &H9 Dim state(0) As Byte If CheckBox3.Checked = True Then state(0) = &H4 Else state(0) = &H0 End If Dim sendData() As Byte = FillModelsSerialPortTest(cmd, state) 'Console.WriteLine($"设备信息测试:{ByteToString(sendData)}") SendPortData(sendData) End Sub ''' ''' 逻辑信息 ''' Private Sub LogicalInfo() Dim cmd As Byte = &H9 Dim state(0) As Byte If CheckBox4.Checked = True Then state(0) = &H8 Else state(0) = &H0 End If Dim sendData() As Byte = FillModelsSerialPortTest(cmd, state) ' Console.WriteLine($"逻辑信息测试:{ByteToString(sendData)}") SendPortData(sendData) End Sub ''' ''' 临时信息 ''' Private Sub TemporaryInfo() Dim cmd As Byte = &H9 Dim state(0) As Byte If CheckBox5.Checked = True Then state(0) = &H16 Else state(0) = &H0 End If Dim sendData() As Byte = FillModelsSerialPortTest(cmd, state) 'Console.WriteLine($"临时信息测试:{ByteToString(sendData)}") SendPortData(sendData) End Sub ''' ''' 系统信息 ''' ''' ''' Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged SystemInfo() End Sub ''' ''' 网络信息 ''' ''' ''' Private Sub CheckBox2_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox2.CheckedChanged NetworkInfo() End Sub ''' ''' 设备信息 ''' ''' ''' Private Sub CheckBox3_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox3.CheckedChanged EquipmentInfo() End Sub ''' ''' 逻辑信息 ''' ''' ''' Private Sub CheckBox4_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox4.CheckedChanged LogicalInfo() End Sub ''' ''' 临时信息 ''' ''' ''' Private Sub CheckBox5_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox5.CheckedChanged TemporaryInfo() End Sub #End Region #Region "固件升级" #Region "RCU主机列表" ''' ''' EnRCUHosts ''' Enum EnRCUHosts ''' ID ID ''' 勾选 IsCheck ''' 升级 Update ''' 项目编码 ProjectCode ''' 房型 RoomType ''' 房号 RoomNumber ''' MAC MAC IPType ''' IP地址 IPAddress ''' 房间备注 RoomRemarks ''' 房态 RoomState ''' 机型编号 ModelNumber ''' 软件版本号 SoftwareVersion ''' 配置版本号 ConfigVersion pzholtename pzroomname ''' 按键状态 BtnSatae ''' 房号ID RoomNumberId ''' 房型ID RoomTypeId ''' 端口号 Port ''' 网关 Gateway ''' 子网掩码 Subnet ''' DNS DNS ''' 服务器地址 ServiceAddr ''' 主机时间 Time ''' 季节 Season ''' 锁定 Lock ''' 授权时间 PrivilegedTime ''' 授权到期时间 PrivilegedDays ''' MCU机型名称 MCUName ''' 中控机型名称 CentralName Launcher End Enum ''' ''' RFU主机列名 ''' Private _colNames() As String = {$"空", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Ticked)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.UpgradeProgress)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ProjectCode)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomTypeRemark)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomNumberRemark)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.MAC)}", $"IP Type", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.IPAddress)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomRemark)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomStatus)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ModelNumber)}", $"Firmware APP version", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ConfigVersion)}", $"Assign hotel name", $"Configure the room type name", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Buttons)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomNumberID)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomTypeID)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Port)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Gateway)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SubnetMask)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.DNS)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Server)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.HostTime)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Season)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Lock)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.PrivilegedTime)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.AuthorizationExpirationTime)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Core)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Model)}", $"Launcher"} ''' ''' 初始化RCU主机表格数据 ''' Private Sub InitRCUHostsTablesData() GrdRCUHost.DisplayRowNumber = True GrdRCUHost.Cols = _colNames.Length GrdRCUHost.Rows = 1 For index = 1 To GrdRCUHost.Cols - 1 With GrdRCUHost.Cell(0, index) .Text = _colNames(index) .BackColor = Color.LightGray .ForeColor = Color.Blue .Font = New Font($"Arial", 9, FontStyle.Bold) End With If CBoPort.Checked = True Then '端口-40 GrdRCUHost.Column(EnRCUHosts.Port).Width = 40 Else GrdRCUHost.Column(EnRCUHosts.Port).Width = 0 End If If CheckBox16.Checked = True Then '服务器-90 GrdRCUHost.Column(EnRCUHosts.ServiceAddr).Width = 90 Else GrdRCUHost.Column(EnRCUHosts.ServiceAddr).Width = 0 End If If CheckBox21.Checked = True Then '子网掩码-90 GrdRCUHost.Column(EnRCUHosts.Subnet).Width = 90 Else GrdRCUHost.Column(EnRCUHosts.Subnet).Width = 0 End If If CheckBox20.Checked = True Then '网关-90 GrdRCUHost.Column(EnRCUHosts.Gateway).Width = 90 Else GrdRCUHost.Column(EnRCUHosts.Gateway).Width = 0 End If If CheckBox19.Checked = True Then 'DNS-110 GrdRCUHost.Column(EnRCUHosts.DNS).Width = 110 Else GrdRCUHost.Column(EnRCUHosts.DNS).Width = 0 End If If CBoLock.Checked = True Then '锁定-40px GrdRCUHost.Column(EnRCUHosts.Lock).Width = 40 Else GrdRCUHost.Column(EnRCUHosts.Lock).Width = 0 End If If CBoMandateDate.Checked = True Then '授权时间-120px GrdRCUHost.Column(EnRCUHosts.PrivilegedTime).Width = 120 Else GrdRCUHost.Column(EnRCUHosts.PrivilegedTime).Width = 0 End If If CBoMandateEnd.Checked = True Then '授权到期时间-120px GrdRCUHost.Column(EnRCUHosts.PrivilegedDays).Width = 120 Else GrdRCUHost.Column(EnRCUHosts.PrivilegedDays).Width = 0 End If If CheckBox18.Checked = True Then '房间备注-200px GrdRCUHost.Column(EnRCUHosts.RoomRemarks).Width = 200 Else GrdRCUHost.Column(EnRCUHosts.RoomRemarks).Width = 0 End If With GrdRCUHost.Column(index) If index = EnRCUHosts.MAC Then .Alignment = FlexCell.AlignmentEnum.CenterCenter .Width = 110 ElseIf index = EnRCUHosts.ConfigVersion OrElse index = EnRCUHosts.SoftwareVersion OrElse index = EnRCUHosts.MCUName OrElse index = EnRCUHosts.CentralName OrElse index = EnRCUHosts.PrivilegedTime OrElse index = EnRCUHosts.PrivilegedDays OrElse index = EnRCUHosts.Time Then .Alignment = FlexCell.AlignmentEnum.CenterCenter .Width = 120 ElseIf index = EnRCUHosts.RoomRemarks OrElse index = EnRCUHosts.Season Then .Alignment = FlexCell.AlignmentEnum.CenterCenter .Width = 200 ElseIf index = EnRCUHosts.IPAddress Then .Alignment = FlexCell.AlignmentEnum.CenterCenter .Width = 90 ElseIf index = EnRCUHosts.ProjectCode OrElse index = EnRCUHosts.ModelNumber Then .Alignment = FlexCell.AlignmentEnum.CenterCenter .Width = 60 ElseIf index = EnRCUHosts.Update Then .Alignment = FlexCell.AlignmentEnum.CenterCenter .Width = 100 ElseIf index = EnRCUHosts.IsCheck Then .Alignment = FlexCell.AlignmentEnum.CenterCenter .Width = 40 ElseIf index = EnRCUHosts.Launcher Then .Alignment = FlexCell.AlignmentEnum.CenterCenter .Width = 100 ElseIf index = EnRCUHosts.pzholtename Then .Alignment = FlexCell.AlignmentEnum.CenterCenter .Width = 240 ElseIf index = EnRCUHosts.pzroomname Then .Alignment = FlexCell.AlignmentEnum.CenterCenter .Width = 240 Else .Alignment = FlexCell.AlignmentEnum.CenterCenter .Width = 70 End If If index = 1 Then .CellType = FlexCell.CellTypeEnum.CheckBox End If End With Next GrdRCUHost.Column(0).Width = 25 GrdRCUHost.SelectionMode = FlexCell.SelectionModeEnum.ByRow '设置选中行 GrdRCUHost.Column(EnRCUHosts.BtnSatae).Visible = False GrdRCUHost.FrozenCols = 7 GrdRCUHost.AllowUserSort = True End Sub #End Region #Region "文件解析" #Region "搜索" ''' 升级文件的名称 Private _UpdateFileName As String ''' ''' 初始化网络信息 ''' Private Sub InitLocalNetWorkInfo() CboLocalIPInfo.Items.Clear() CboLocalIPInfo.Items.AddRange(GetLocalIp().ToArray) If CboLocalIPInfo.Items.Count > 0 Then CboLocalIPInfo.SelectedIndex = 0 End Sub ''' ''' 切换本地IP地址 ''' ''' ''' Private Sub CboLocalIPInfo_TextChanged(sender As Object, e As EventArgs) Handles CboLocalIPInfo.TextChanged _localIP = CboLocalIPInfo.Text _localPort = GetRandomPort() ConnNetWork() 'FrmAdvancedSettings.BtnNetworkConnect.PerformClick() '_localIP = CboLocalIPInfo.Text '_localPort = FrmAdvancedSettings.NudLocalPort.Text 'FrmAdvancedSettings.BtnNetworkConnect.PerformClick() End Sub Private Sub ConnNetWork() If _connectStatus = True Then _connectStatus = False _isReceiving = False _isNetWork = False ''加保护机制 _socket.Shutdown(SocketShutdown.Both) _socket.Close() End If UpdataConnectStatus() End Sub ''' ''' 网络发送方式 ''' ''' ''' Private Sub CheckBox6_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox6.CheckedChanged If CheckBox6.Checked = True Then CheckBox6.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Radio) Else CheckBox6.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.DirectlyConn) End If End Sub ''' 按键文本改变 Private _BtnTextThread As Thread ''' ''' 固件升级_搜索 ''' ''' ''' Private Sub Button25_Click(sender As Object, e As EventArgs) Handles Button25.Click If CheckBox6.Checked = True Then _RemoteIP = IPAddress.Parse($"255.255.255.255") _RemotePort = 3341 Else Dim ipaddr As IPAddress = LocalIPInfo() _RemoteIP = ipaddr _RemotePort = 3341 End If 'If _connectStatus = False Then ' MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.PleaseOpenTheNetworkOrSerialPort)}!") ' Return 'End If _countMatching = 0 'RadioButton1.Checked = True Panel2.Visible = False Panel1.BringToFront() Panel1.Visible = True 'StateReplyLabel($"...", Color.Black) If Button25.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Search) Then ConnNetWork() _hostsList.Clear() InitRCUHostsTablesData() _RCUSearchIndex = 1 _searchHost = False _searchHosts = True _isShowCol = True GrdRCUHost.Enabled = False _BtnTextThread = New Thread(New ThreadStart(AddressOf SearchHosts)) _BtnTextThread.Start() Else 'SendIntervalTime = 10 GrdRCUHost.Enabled = True _BtnTextThread.Abort() Button25.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Search) LabelCount.Text = $"0/{GrdRCUHost.Rows - 1}" End If RichTextBox2.Clear() '清空匹配记录 '_RemoteIP = IPAddress.Parse($"255.255.255.255") 'InitRCUHostsTablesData() '_RCUHostsSearchIndex = 1 'Dim cmd As Byte = &H1 'Dim data As Byte() = FillDataBuff() 'Dim sendData As Byte() = FillSendData(cmd, data) 'SendUDPData(sendData) 'Console.WriteLine($"固件升级-搜索主机:{ByteToString(sendData)}") End Sub ''' ''' 搜索按键文本改变 ''' ''' ''' Private Sub Button25_TextChanged(sender As Object, e As EventArgs) Handles Button25.TextChanged If Button25.Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Stops)}(0s)" Then GrdRCUHost.Enabled = True _BtnTextThread.Abort() Button25.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Search) End If End Sub ''' ''' 搜索主机 ''' Public SendIntervalTime As Integer = 10 Private Sub SearchHosts() For index = 300 To 0 Step -1 If index Mod 10 = 0 Then ReadHostsParameterInfo() End If ChangeButtonText($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Stops)}({index}s)") Thread.Sleep(1000) Next End Sub Public threadIsflag As Boolean = True Public gsocket As Socket Private Sub ThreadSearchHosts() Dim Index As Integer = 1 Dim address As IPAddress = IPAddress.Parse("192.168.1.10") Dim ep = New IPEndPoint(address, 21891) 'If IsNothing(gsocket) Then gsocket = New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp) gsocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1) gsocket.Bind(ep) ' End If Dim t As Date = Now While threadIsflag If Index Mod SendIntervalTime = 0 Then t = Now threadReadHostsParameterInfo() End If Thread.Sleep(1000) Console.WriteLine($"发送时间隔:{(Now - t).TotalMilliseconds }") If Index = 300 Then Index = 1 Else Index = Index + 1 End If End While gsocket.Close() End Sub Private Sub NewSearchHosts() For index = 300 To 0 Step -1 If index Mod SendIntervalTime = 0 Then ReadHostsParameterInfo() End If ' ChangeButtonText($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Stops)}({index}s)") Thread.Sleep(1000) Next End Sub ''' ''' 进度条委托 ''' ''' Delegate Sub delegate_Button_Text(text As String) ''' ''' 进度条委托 ''' ''' Private Sub ChangeButtonText(text As String) If Me.InvokeRequired = True Then Dim changeval As New delegate_Button_Text(AddressOf ChangeButtonText) Me.Invoke(changeval, New Object() {text}) Else Button25.Text = text End If End Sub ''' ''' 浏览-选择文件-固件升级 ''' ''' ''' Private Sub Button27_Click(sender As Object, e As EventArgs) Handles Button27.Click _UpgradeType = False LoadTheFile() End Sub ''' ''' 浏览-选择文件-配置下发 ''' ''' ''' Private Sub Button35_Click(sender As Object, e As EventArgs) Handles Button35.Click _UpgradeType = True LoadTheFile() End Sub Private Sub LoadTheFile() If _UpgradeType = True Then _ParseConfigData = Nothing StateLabelConfig($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ReadyToFile)}......", Color.Blue, False) Else _ParseData = Nothing StateLabel($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ReadyToFile)}......", Color.Blue, False) End If Dim dlg As New OpenFileDialog dlg.InitialDirectory = Application.StartupPath If _UpgradeType = True Then dlg.Filter = $"Issued File|*.dat" Else dlg.Filter = $"Update File|*.hex|Update File|*.bin" End If Dim oldPath As String = TextBox7.Text If IO.File.Exists(oldPath) Then dlg.InitialDirectory = IO.Path.GetDirectoryName(oldPath) dlg.FileName = oldPath Else dlg.InitialDirectory = Application.StartupPath End If If dlg.ShowDialog() = DialogResult.OK Then If _UpgradeType = True Then TextBox61.Text = dlg.FileName Else TextBox7.Text = dlg.FileName End If _UpdateFileName = dlg.SafeFileName 'BtnSelectFile.PerformClick() Else If _UpgradeType = True Then StateLabelConfig($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ReadyToFile)}......", Color.Blue, True) TextBox61.Text = Nothing Else StateLabel($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ReadyToFile)}......", Color.Blue, True) TextBox7.Text = Nothing End If Exit Sub End If '解析Hex文件 Dim path As String If _UpgradeType = True Then path = TextBox61.Text If path.Contains($"dat") = True OrElse path.Contains($"Dat") = True Then ThreadPool.QueueUserWorkItem(AddressOf DealDatFile, path) End If Else path = TextBox7.Text If path.Contains($"hex") = True OrElse path.Contains($"Hex") = True Then ThreadPool.QueueUserWorkItem(AddressOf DealHexFile, path) ElseIf path.Contains($"bin") = True OrElse path.Contains($"Bin") = True Then ThreadPool.QueueUserWorkItem(AddressOf DealBinFile, path) End If End If End Sub ''' ''' 读取主机系统参数信息 ''' Private Sub ReadHostsParameterInfo() Dim cmd As Byte = &HB1 Dim data As Byte() = FillReadCmdData() Dim sendData As Byte() = FillSendData(cmd, data) SendUDPData(sendData) 'Console.WriteLine($"读取主机系统参数信息") Console.WriteLine($"读取主机:{ByteToString(sendData)}") End Sub Private Sub threadReadHostsParameterInfo() Dim cmd As Byte = &HB1 Dim data As Byte() = FillReadCmdData() Dim sendData As Byte() = FillSendData(cmd, data) threadSendUDPData(sendData) 'Console.WriteLine($"读取主机系统参数信息") Console.WriteLine($"读取主机:{ByteToString(sendData)}") End Sub ''' ''' 本地IP信息委托 ''' Delegate Function delegate_LocalIPInfo_Change() ''' ''' 本地IP信息 ''' Public Function LocalIPInfo() As IPAddress If InvokeRequired = True Then Dim dev As New delegate_LocalIPInfo_Change(AddressOf LocalIPInfo) Return Me.Invoke(dev) Else Dim ipAddr As IPAddress = IPAddress.Parse($"{CboLocalIPInfo.Text}") Return ipAddr End If End Function ''' ''' 填充读取命令数据 ''' ''' Private Function FillReadCmdData() Dim data(4) As Byte If SendIntervalTime = 10 Then data(0) = &H0 Else data(0) = &H1 End If data(1) = &H0 data(2) = &H0 data(3) = &H0 data(4) = &H0 Return data End Function #End Region #Region "设置信息" ''' 季节 Private _roomSeason() As String = {$"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Spring)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Summer)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Autumn)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Winter)}"} ''' 房态 Private _roomState() As String = {$"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Rent)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.CheckingOut)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.VacantRoom)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ForRent)}"} ''' 房间是否锁定 Private _roomLock() As String = {$"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Normal)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Lock)}"} ''' ''' 初始化房间信息 ''' Private Sub InitRoomInfo() SetSeason() ComboBox15.Items.Clear() '房态 ComboBox15.Items.AddRange(_roomState) If ComboBox15.Items.Count > 0 Then ComboBox15.SelectedIndex = 2 ComboBox13.Items.Clear() '房间锁定 ComboBox13.Items.AddRange(_roomLock) If ComboBox13.Items.Count > 0 Then ComboBox13.SelectedIndex = 0 DateTimePicker2.MinDate = Date.Now() CBoSeasons.Items.Clear() '研发使用季节 CBoSeasons.Items.AddRange(_roomSeason) If CBoSeasons.Items.Count > 0 Then CBoSeasons.SelectedIndex = 0 CBoRoomStates.Items.Clear() '研发使用房态 CBoRoomStates.Items.AddRange(_roomState) If CBoRoomStates.Items.Count > 0 Then CBoRoomStates.SelectedIndex = 2 CBoLocks.Items.Clear() '研发使用房间锁定 CBoLocks.Items.AddRange(_roomLock) If CBoLocks.Items.Count > 0 Then CBoLocks.SelectedIndex = 1 DateTimePicker1.MinDate = Date.Now() End Sub ''' ''' 设置季节 ''' Private Sub SetSeason() SetMonthSeason(ComboBox14, 0) SetMonthSeason(ComboBox18, 0) SetMonthSeason(ComboBox19, 0) SetMonthSeason(ComboBox20, 1) SetMonthSeason(ComboBox21, 1) SetMonthSeason(ComboBox22, 1) SetMonthSeason(ComboBox23, 2) SetMonthSeason(ComboBox24, 2) SetMonthSeason(ComboBox25, 2) SetMonthSeason(ComboBox26, 3) SetMonthSeason(ComboBox27, 3) SetMonthSeason(ComboBox28, 3) End Sub ''' ''' 设置当月季节 ''' ''' Private Sub SetMonthSeason(cbo As ComboBox, index As Integer) cbo.Items.Clear() '季节 cbo.Items.AddRange(_roomSeason) If cbo.Items.Count >= 3 Then cbo.SelectedIndex = index End Sub ''' ''' 获取房间状态 ''' ''' ''' Private Function GetRoomState(state As String) As Byte Dim sta As Byte Select Case state Case $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Rent)}" sta = &H1 Case $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.CheckingOut)}" sta = &H2 Case $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.VacantRoom)}" sta = &H3 Case $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ForRent)}" sta = &H4 End Select Return sta End Function ''' ''' 获取房间是否锁定 ''' ''' ''' Private Function GetRoomLock(lock As String) As Byte Dim loc As Byte Select Case lock Case $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Normal)}" loc = &H0 Case $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Lock)}" loc = &H1 End Select Return loc End Function ''' ''' 获取房间季节 ''' ''' ''' Private Function GetRoomSeason(season As String) As Byte Dim rseason As Byte Select Case season Case $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Spring)}" rseason = &H1 Case $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Summer)}" rseason = &H2 Case $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Autumn)}" rseason = &H0 Case $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Winter)}" rseason = &H3 End Select Return rseason End Function ''' ''' 下发计数 ''' Private _count As Integer = 0 ''' ''' 设置主机信息 ''' ''' ''' Private Sub Button26_Click_1(sender As Object, e As EventArgs) Handles Button26.Click If TextBox9.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.ProjectCode) Then MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.PleaseSelectTheHotelUnderYourName)}") Return End If If GrdRCUHost.Rows > 1 Then 'For index = 1 To GrdRCUHost.Rows - 1 ' If GrdRCUHost.Cell(index, EnRCUHosts.IsCheck).Text = $"1" Then ' _count += 1 ' End If 'Next _count = CheckedCount() If _count = 0 Then MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SelectTheHostToBeConfigured)}!") Exit Sub ElseIf _count > 1 Then If CBoRoomNuRemark.Checked = True Then 'MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomNumbersCannotBeDeliveredInBatches)}!") MsgBox("不可勾选两台或两台以上主机") _count = 0 Exit Sub End If If CBoRoomRemark.Checked = True Then ' MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomNotesCannotBeDeliveredInBatches)}!") MsgBox("不可勾选两台或两台以上主机") _count = 0 Exit Sub End If End If For index = 1 To GrdRCUHost.Rows - 1 If GrdRCUHost.Cell(index, EnRCUHosts.IsCheck).Text = $"1" Then _RemoteIP = IPAddress.Parse(GrdRCUHost.Cell(index, EnRCUHosts.IPAddress).Text) SetHostInfo() '设置主键信息 End If Next Else MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SelectTheInformationToBeDeliveredAndTheHost)}") End If _count = 0 _remarksCount = 0 _remarkAddr = &H1C Dim roomNumber As String = ComboBox17.Text If CBoRoomNuRemark.Checked = True Then UpdateMACDB(roomNumber) End Sub ''' ''' 更新MAC地址 ''' ''' Private Sub UpdateMACDB(roomNumber As String) 'If CBoUpdateDB.Checked = True Then If roomNumber <> Nothing Then Dim creatDate As String If _hotelListData.ContainsKey(_projectNumber) = True Then creatDate = _hotelListData(_projectNumber).CreatDate If DealSetHostMACInterfaceInfo(_projectNumber, creatDate, roomNumber, _MAC) = True Then AppendMatchTipText($"项目编码:[{_projectNumber}], 房号:[{roomNumber}]与MAC:[{_MAC}] 已绑定!", Color.Green) AppendMatchTipText($"MAC地址绑定成功!{vbCrLf}", Color.Green) Else AppendMatchTipText($"项目编码:[{_projectNumber}], 房号:[{roomNumber}]与MAC:[{_MAC}] 绑定失败!{vbCrLf}", Color.Red) AppendMatchTipText($"失败原因:{_setResult}{vbCrLf}", Color.Red) Dim state As String = String.Empty If DealHostListInterfaceInfo(_projectNumber, creatDate) = True Then For index = 0 To _hostListData.Keys.Count - 1 If _hostListData(index).MAC = _MAC Then state = _hostListData(index).Status End If Next End If If state = "0" Then state = $"离线" ElseIf state = "1" Then state = $"在线" End If FrmMACBindingResults.TBoBindingTxt.Text = $"项目编码:{_projectNumber}{vbCrLf}房号:{roomNumber}{vbCrLf}MAC:{_MAC}{vbCrLf}绑定失败!{vbCrLf}{vbCrLf}失败原因:{_setResult}{vbCrLf}{vbCrLf}主机在线状态:{state} {vbCrLf}" FrmMACBindingResults.ShowDialog() If _isMACUnbundle = True Then Console.WriteLine($"解绑") If DealSetHostMACInterfaceInfo(_projectNumber, creatDate, roomNumber, "") = True Then AppendMatchTipText($"项目编码:[{_projectNumber}], 房号:[{roomNumber}], MAC地址解绑成功!", Color.Green) Else AppendMatchTipText($"项目编码:[{_projectNumber}], 房号:[{roomNumber}], MAC地址解绑失败!", Color.Green) End If _isMACUnbundle = False End If 'If _isMACRetry = True Then ' Console.WriteLine($"重试") ' If RetrySetting(_projectNumber, creatDate, roomNumber, _MAC) = True Then ' AppendMatchTipText($"项目编码:[{_projectNumber}], 房号:[{roomNumber}]与MAC:[{_MAC}] 已绑定!", Color.Green) ' AppendMatchTipText($"MAC地址绑定成功!{vbCrLf}", Color.Green) ' Else ' AppendMatchTipText($"项目编码:[{_projectNumber}], 房号:[{roomNumber}]与MAC:[{_MAC}] 绑定失败!{vbCrLf}", Color.Red) ' AppendMatchTipText($"失败原因:{_setResult}{vbCrLf}", Color.Red) ' End If ' _isMACRetry = False 'End If End If End If Else MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.TheRoomNumberCannotBeEmpty)}!") End If 'End If End Sub '''' '''' 重试绑定MAC '''' '''' '''' '''' '''' '''' 'Private Function RetrySetting(projectNumber As String, createDate As String, roomNumber As String, mac As String) ' For index = 1 To 5 ' Threading.Thread.Sleep(100) ' Console.WriteLine($"重试{index}次") ' If DealSetHostMACInterfaceInfo(projectNumber, createDate, roomNumber, mac) = True Then ' Return True ' End If ' Next ' Return False 'End Function ''' ''' 设置主机信息 ''' Private Sub SetHostInfo() Dim projectNumber As String = TextBox9.Text '项目编号 Dim roomType As String = ComboBox16.Text '房型备注 Dim roomNumber As String = ComboBox17.Text '房号备注 Dim roomTpId As String = TextBox21.Text '房型ID Dim roomNuId As String = TextBox25.Text '房号ID Dim roomStates As String = ComboBox15.Text '房态 Dim roomSeason As String = ComboBox14.Text '季节 Dim locks As String = ComboBox13.Text '锁定 Dim roomRemarks As String = TextBox30.Text '房间注释 Dim setTime As Boolean = CBoMandateTimeSet.Checked '授权时间是否设置 Dim dateTimeValue As Date = DateTimePicker2.Value '授权到期时间 Dim projectNumberB As Boolean = CBoProjectNumber.Checked Dim RoomStateB As Boolean = CBoRoomState.Checked Dim RoomTpRemarkB As Boolean = CBoRoomTpRemark.Checked Dim RoomNuRemarkB As Boolean = CBoRoomNuRemark.Checked Dim roomRemarkB As Boolean = CBoRoomRemark.Checked Dim SeasonB As Boolean = CBoSeason.Checked Dim MandateEndTimeB As Boolean = CBoMandateEndTime.Checked Dim RoomLockB As Boolean = CBoRoomLock.Checked Dim ipconfig As New HostConfig ipconfig.Ischeck = Network_cke.Checked ipconfig.IFNetworkFormat(ipconfig.IPDNS, IpDns_txt.Text) ipconfig.IFPortisNumber(ipconfig.Port, IpPort_txt.Text) ipconfig.IPType = Iptype_txt.Tag ipconfig.IFNetworkFormat(ipconfig.IPMask, IPMask_txt.Text) ipconfig.IFNetworkFormat(ipconfig.LoadIP, Loadip_txt.Text) ipconfig.IFNetworkFormat(ipconfig.IPGateway, IPGateway_txt.Text) 'ipconfig.Remark = Remark_txt.Text ipconfig.IFNetworkFormat(ipconfig.ServerIP, ServerIP_txt.Text) ipconfig.IFPortisNumber(ipconfig.ServerPort, ipconfig_txt.Text) Dim cmd As Byte = &H31 Dim data As Byte() = FillSetHostsInfo(projectNumber, roomType, roomNumber, roomTpId, roomNuId, roomStates, roomSeason, locks, roomRemarks, setTime, dateTimeValue, projectNumberB, RoomStateB, RoomTpRemarkB, RoomNuRemarkB, roomRemarkB, SeasonB, MandateEndTimeB, RoomLockB, ipconfig) If Enumerable.SequenceEqual(data, _roomNull) = False Then Dim sendData As Byte() = FillSendData(cmd, data) SendUDPData(sendData) End If 'Console.WriteLine($"设置主机信息:{ByteToString(sendData)}") End Sub ''' ''' 获取设置总数数据 ''' ''' 项目编码 ''' 房态 ''' 房型备注房型ID ''' 房号备注房号ID ''' 房间备注 ''' 季节 ''' 授权到期时间 ''' 锁定 ''' Private Function GetSetCountData(proNum() As Byte, roomSta() As Byte, roomT() As Byte, roomNum() As Byte, roomRemark() As Byte, seasons() As Byte, dateTime() As Byte, Loc() As Byte, ProjectNumber As Boolean, RoomState As Boolean, RoomTpRemark As Boolean, RoomNuRemark As Boolean, RoomRemarks As Boolean, Season As Boolean, MandateEndTime As Boolean, RoomLock As Boolean, isserverip As Boolean, serverip() As Byte, Optional Isipcheck As Boolean = False, Optional Ipdata() As Byte = Nothing) As Byte() '1、判断勾选项, 算出设备个数 Dim setCount As Byte = 0 Dim databuf As New List(Of Byte) If ProjectNumber = True Then '项目编码 setCount += 1 databuf.AddRange(proNum) End If If RoomState = True Then '房态 setCount += 1 databuf.AddRange(roomSta) End If If RoomTpRemark = True Then '房型备注和房型ID setCount += 5 databuf.AddRange(roomT) End If If RoomNuRemark = True Then '房号备注和房号ID setCount += 5 databuf.AddRange(roomNum) End If If RoomRemarks = True Then '房间备注 setCount += _remarksCount databuf.AddRange(roomRemark) End If If Season = True Then '季节 setCount += 1 databuf.AddRange(seasons) End If If MandateEndTime = True Then '授权到期时间 setCount += 2 databuf.AddRange(dateTime) End If If RoomLock = True Then '锁定 setCount += 1 databuf.AddRange(Loc) End If If Isipcheck Then databuf.AddRange(Ipdata) If Iptype_txt.Text.Equals("自动") Then setCount += 1 Else setCount += 6 End If End If If isserverip Then setCount += 2 databuf.AddRange(serverip) End If databuf.Insert(0, setCount) Return databuf.ToArray End Function Private _roomNull() As Byte = {&H0, &H0} ''' ''' 设置主机信息数据 ''' ''' Private Function FillSetHostsInfo(projectNumber As String, roomType As String, roomNumber As String, roomTpId As String, roomNuId As String, roomStates As String, RoomSeason As String, locks As String, roomRemarks As String, setTime As Boolean, dateTimeValue As Date, ProjectNumberB As Boolean, RoomStateB As Boolean, RoomTpRemarkB As Boolean, RoomNuRemarkB As Boolean, RoomRemarksB As Boolean, SeasonB As Boolean, MandateEndTimeB As Boolean, RoomLockB As Boolean, Optional Hofig As HostConfig = Nothing) As Byte() If projectNumber = "" Then projectNumber = &H0 If roomType = "" Then roomType = &H0 If roomNumber = "" Then roomNumber = &H0 If roomTpId = "" Then roomTpId = &H0 If roomNuId = "" Then roomNuId = &H0 Dim roomTs() As Byte Dim roomTypes(15) As Byte 'roomT = System.Text.Encoding.Unicode.GetBytes(roomType) roomTs = System.Text.Encoding.GetEncoding("GBK").GetBytes(roomType) If roomTs.Length > 16 Then MsgBox($"房型长度过长!") Return _roomNull End If Array.Copy(roomTs, 0, roomTypes, 0, roomTs.Length) Dim roomNumbers() As Byte Dim roomNums(15) As Byte roomNumbers = System.Text.Encoding.GetEncoding("GBK").GetBytes(roomNumber) If roomNumbers.Length > 16 Then MsgBox($"房号长度过长!") Return _roomNull End If Array.Copy(roomNumbers, 0, roomNums, 0, roomNumbers.Length) Dim roomState As Byte = GetRoomState(roomStates) '房态 Dim season As String = RoomSeason '季节 Dim lock As Byte = GetRoomLock(locks) '锁定 Dim proNum() As Byte = GetProjectNumber(projectNumber) '项目编码 Dim roomT() As Byte = GetRoomType(roomTypes, roomTpId) '房型 Dim roomNum() As Byte = GetRoomNumber(roomNums, roomNuId) '房号 Dim roomSta() As Byte = GetRoomStateData(roomState) '房态 Dim seasons() As Byte = GetSeasonData(season) '季节 Dim loc() As Byte = GetLockData(lock) '锁定 Dim roomRemark() As Byte = GetRoomRemarks(roomRemarks) '备注 Dim dateTime() As Byte = GetTimeByte(setTime, dateTimeValue) '授权时间 'Dim roomTpIds() As Byte = GetRoomTypeID(roomTpId) '房型ID 'Dim roomNuIds() As Byte = GetRoomNumberID(roomNuId) '房号ID Dim serverbyte() As Byte = GetServerIpByte(Hofig) Dim databuf() As Byte If IsNothing(Hofig) Then databuf = GetSetCountData(proNum, roomSta, roomT, roomNum, roomRemark, seasons, dateTime, loc, ProjectNumberB, RoomStateB, RoomTpRemarkB, RoomNuRemarkB, RoomRemarksB, SeasonB, MandateEndTimeB, RoomLockB, CheckBox37.Checked, serverbyte) Else If Hofig.Ischeck Then Dim ipbyte() As Byte = getHostconfigbyte(Hofig, CheckBox37.Checked) databuf = GetSetCountData(proNum, roomSta, roomT, roomNum, roomRemark, seasons, dateTime, loc, ProjectNumberB, RoomStateB, RoomTpRemarkB, RoomNuRemarkB, RoomRemarksB, SeasonB, MandateEndTimeB, RoomLockB, CheckBox37.Checked, serverbyte, Hofig.Ischeck, ipbyte) Else databuf = GetSetCountData(proNum, roomSta, roomT, roomNum, roomRemark, seasons, dateTime, loc, ProjectNumberB, RoomStateB, RoomTpRemarkB, RoomNuRemarkB, RoomRemarksB, SeasonB, MandateEndTimeB, RoomLockB, CheckBox37.Checked, serverbyte) End If End If 'Console.WriteLine($"设置主机信息数据:{ByteToString(databuf.ToArray)}") Return databuf.ToArray End Function Public Function getHostconfigbyte(Hofig As HostConfig, isserver As Boolean) As Byte() Dim li As New List(Of Byte) Dim dhcp() As Byte = GetDHCP(Hofig.IPType, isserver) If dhcp(4) = &H1 Then Return dhcp Dim ip() As String = Hofig.LoadIP.Split(".") Dim subnet1() As String = Hofig.IPMask.Split(".") Dim gateway1() As String = Hofig.IPGateway.Split(".") Dim DNS1() As String = Hofig.IPDNS.Split(".") Dim databuf() As Byte = GetSetData(ip(0), ip(1), ip(2), ip(3), subnet1(0), subnet1(1), subnet1(2), subnet1(3), gateway1(0), gateway1(1), gateway1(2), gateway1(3), DNS1(0), DNS1(1), DNS1(2), DNS1(3)) li.AddRange(dhcp) li.AddRange(databuf) li.Add(&H4) '项目编号 li.Add(&H0) li.Add(&H0) li.Add(&H0) Dim loadport() As Byte = StringToByte(Hofig.Port) li.AddRange(loadport) li.Add(&H1C) '项目编号 li.Add(&H0) li.Add(&H0) li.Add(&H0) 'Dim ServerPort() As Byte = StringToByte(Hofig.ServerPort) 'li.AddRange(ServerPort) 'buff = Hofig.ServerIP.Split(".") 'Dim serverIp() As Byte = GetServerData(buff(0), buff(1), buff(2), buff(3)) 'li.AddRange(serverIp) Return li.ToArray End Function Public Function GetServerIpByte(Hofig As HostConfig) As Byte() Dim buff() As String Dim li As New List(Of Byte) Dim ServerPort() As Byte = GetServerPort(Hofig.ServerPort) li.AddRange(ServerPort) buff = Hofig.ServerIP.Split(".") Dim serverIp() As Byte = GetServerData(buff(0), buff(1), buff(2), buff(3)) li.AddRange(serverIp) Return li.ToArray End Function Private Function GetServerPort(txt As String) As Byte() Dim databuf As New List(Of Byte) databuf.Add(&H1C) '使能 databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) Dim ServerPort() As Byte = StringToByte(txt) databuf.AddRange(ServerPort) Return databuf.ToArray End Function Private Function GetDHCP(dhcp As String, isserver As Boolean) As Byte() Dim databuf As New List(Of Byte) databuf.Add(&H30) '使能 databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) If dhcp.Trim.Equals("1") Then databuf.Add(&H1) '使能 databuf.Add(&H2) If isserver Then databuf.Add(&H1) Else databuf.Add(&H2) End If databuf.Add(&H0) Else databuf.Add(&H2) '使能 databuf.Add(&H1) If isserver Then databuf.Add(&H1) Else databuf.Add(&H2) End If databuf.Add(&H0) End If Return databuf.ToArray End Function Private Function GetSeason() As Byte() Dim m1 As Integer = GetRoomSeason(ComboBox14.Text) Dim m2 As Integer = GetRoomSeason(ComboBox18.Text) Dim m3 As Integer = GetRoomSeason(ComboBox19.Text) Dim m4 As Integer = GetRoomSeason(ComboBox20.Text) Dim m5 As Integer = GetRoomSeason(ComboBox21.Text) Dim m6 As Integer = GetRoomSeason(ComboBox22.Text) Dim m7 As Integer = GetRoomSeason(ComboBox23.Text) Dim m8 As Integer = GetRoomSeason(ComboBox24.Text) Dim m9 As Integer = GetRoomSeason(ComboBox25.Text) Dim m10 As Integer = GetRoomSeason(ComboBox26.Text) Dim m11 As Integer = GetRoomSeason(ComboBox27.Text) Dim m12 As Integer = GetRoomSeason(ComboBox28.Text) 'Console.WriteLine($"季节:{m1} - {m2} - {m3} - {m4} - {m5} - {m6} - {m7} - {m8} - {m9} - {m10} - {m11} - {m12}") Dim b1 As Byte = (m4 << 6) Or (m3 << 4) Or (m2 << 2) Or m1 Dim b2 As Byte = (m8 << 6) Or (m7 << 4) Or (m6 << 2) Or m5 Dim b3 As Byte = (m12 << 6) Or (m11 << 4) Or (m10 << 2) Or m9 Dim season(3) As Byte season(0) = b1 season(1) = b2 season(2) = b3 Return season End Function ''' ''' 获取两个授权时间的Byte数据 ''' Private Function GetTimeByte(setTime As Boolean, dateTimeValeu As Date) Dim times1 As Date = Date.Now() Dim times2 As Date Dim time1Long As Long Dim time2Long As Long If setTime = True Then times2 = dateTimeValeu time1Long = GetUTCTimeStamp(times1) time2Long = GetUTCTimeStamp(times2) Else times2 = Nothing time1Long = GetUTCTimeStamp(times1) time2Long = 0 End If 'Dim time1Long As Long = times1.ToUniversalTime.Ticks 'Dim time2Long As Long = times2.ToUniversalTime.Ticks 'Console.WriteLine($"求出设定时间的UTC时间戳: {time1Long} - {time2Long} {vbCrLf}") 'Dim time1By() As Byte = BitConverter.GetBytes(time1Long) 'Dim time2By() As Byte = BitConverter.GetBytes(time2Long) 'Console.WriteLine($"求出设定时间的Byte数组: {BitConverter.ToString(time1By)} - {BitConverter.ToString(time2By)}") Dim t1Byte As Byte() = GetUTCTimeByte(time1Long) Dim t2Byte As Byte() If setTime = True Then t2Byte = GetUTCTimeByte(time2Long) Else Dim times(3) As Byte t2Byte = times End If Dim data As New List(Of Byte) data.Add(&H20) data.Add(&H0) data.Add(&H0) data.Add(&H0) data.AddRange(t2Byte) data.Add(&H28) data.Add(&H0) data.Add(&H0) data.Add(&H0) data.AddRange(t1Byte) 'Console.WriteLine($"设置授权时间:{BitConverter.ToString(data.ToArray)}") Return data.ToArray End Function ''' ''' 获取UTC时间戳 ''' ''' Private Function GetUTCTimeStamp(dates As Date) As Long Dim span As TimeSpan = dates.ToUniversalTime() - New DateTime(1970, 1, 1, 0, 0, 0, 0) Dim stamp As Long = Convert.ToInt64(span.TotalSeconds) Console.WriteLine($"{stamp}") Return stamp End Function ''' ''' 获取UTC时间戳Byte数组_4个字节长度 ''' ''' ''' Private Function GetUTCTimeByte(dates As Long) As Byte() Dim tH As Integer = dates \ 65536 Dim tL As Integer = dates Mod 65536 'Console.WriteLine($"时间高位:{tH} 时间低位{tL}") Dim bTimes(3) As Byte bTimes(3) = tH \ 256 bTimes(2) = tH Mod 256 bTimes(1) = tL \ 256 bTimes(0) = tL Mod 256 'Console.WriteLine($"求出数组:{BitConverter.ToString(bTimes)}{vbCrLf}") Return bTimes End Function ''' ''' 获取项目编号 ''' ''' ''' Private Function GetProjectNumber(projectNumber As String) As Byte() Dim proNum() As Byte Dim databuf As New List(Of Byte) databuf.Add(&H38) '项目编号 databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) proNum = StringToByte(projectNumber) databuf.AddRange(proNum) Return databuf.ToArray End Function ''' ''' 房型ID ''' ''' ''' Private Function GetRoomTypeID(roomNuId As String) As Byte() Dim proNum() As Byte Dim databuf As New List(Of Byte) '房型ID databuf.Add(&H48) databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) proNum = StringToByte(roomNuId) databuf.AddRange(proNum) Return databuf.ToArray End Function ''' ''' 房号ID ''' ''' ''' Private Function GetRoomNumberID(roomNuId As String) As Byte() Dim proNum() As Byte Dim databuf As New List(Of Byte) '房号ID databuf.Add(&H44) databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) proNum = StringToByte(roomNuId) databuf.AddRange(proNum) Return databuf.ToArray End Function ''' ''' 获取房型 ''' ''' Private Function GetRoomType(roomTypes As Byte(), roomTpId As String) As Byte() Dim roomTaddr1() As Byte = {&H10, &H1, &H0, &H0} '房型地址 Dim roomTaddr2() As Byte = {&H14, &H1, &H0, &H0} '房型地址 Dim roomTaddr3() As Byte = {&H18, &H1, &H0, &H0} '房型地址 Dim roomTaddr4() As Byte = {&H1C, &H1, &H0, &H0} '房型地址 Dim databuf As New List(Of Byte) Dim roomda(3) As Byte Array.Copy(roomTypes, 0, roomda, 0, roomda.Length) databuf.AddRange(roomTaddr1) databuf.AddRange(roomda) Array.Copy(roomTypes, 4, roomda, 0, roomda.Length) databuf.AddRange(roomTaddr2) databuf.AddRange(roomda) Array.Copy(roomTypes, 8, roomda, 0, roomda.Length) databuf.AddRange(roomTaddr3) databuf.AddRange(roomda) Array.Copy(roomTypes, 12, roomda, 0, roomda.Length) databuf.AddRange(roomTaddr4) databuf.AddRange(roomda) '房型ID databuf.Add(&H48) databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) Dim proNum() As Byte = StringToByte(roomTpId) databuf.AddRange(proNum) Return databuf.ToArray End Function ''' ''' 获取房号 ''' ''' Private Function GetRoomNumber(roomNums As Byte(), roomNuId As String) As Byte() Dim roomNaddr1() As Byte = {&H0, &H1, &H0, &H0} '房号地址 Dim roomNaddr2() As Byte = {&H4, &H1, &H0, &H0} '房号地址 Dim roomNaddr3() As Byte = {&H8, &H1, &H0, &H0} '房号地址 Dim roomNaddr4() As Byte = {&HC, &H1, &H0, &H0} '房号地址 Dim databuf As New List(Of Byte) Dim roomda(3) As Byte Array.Copy(roomNums, 0, roomda, 0, roomda.Length) databuf.AddRange(roomNaddr1) databuf.AddRange(roomda) Array.Copy(roomNums, 4, roomda, 0, roomda.Length) databuf.AddRange(roomNaddr2) databuf.AddRange(roomda) Array.Copy(roomNums, 8, roomda, 0, roomda.Length) databuf.AddRange(roomNaddr3) databuf.AddRange(roomda) Array.Copy(roomNums, 12, roomda, 0, roomda.Length) databuf.AddRange(roomNaddr4) databuf.AddRange(roomda) '房号ID databuf.Add(&H44) databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) Dim proNum() As Byte = StringToByte(roomNuId) databuf.AddRange(proNum) Return databuf.ToArray End Function ''' ''' 获取房态 ''' ''' ''' Private Function GetRoomStateData(roomState As String) As Byte() Dim roomSta() As Byte Dim databuf As New List(Of Byte) databuf.Add(&H4C) '房态 databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) roomSta = GetRoomSetInfo(roomState) databuf.AddRange(roomSta) Return databuf.ToArray End Function ''' ''' 获取季节 ''' ''' ''' Private Function GetSeasonData(season As String) As Byte() Dim seasons() As Byte = GetSeason() Dim databuf As New List(Of Byte) databuf.Add(&H50) '季节 databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) 'seasons = GetRoomSeasonData(season) databuf.AddRange(seasons) Return databuf.ToArray End Function ''' ''' 获取季节数据 ''' ''' Private Function GetRoomSeasonData(season As String) As Byte() Dim time As Integer = Date.Now.Month Dim seasons(3) As Byte Select Case time Case 1 seasons(0) = GetRoomSeason(season) Case 2 seasons(0) = GetRoomSeason(season) Case 3 seasons(0) = GetRoomSeason(season) Case 4 seasons(0) = GetRoomSeason(season) Case 5 seasons(1) = GetRoomSeason(season) Case 6 seasons(1) = GetRoomSeason(season) Case 7 seasons(1) = GetRoomSeason(season) Case 8 seasons(1) = GetRoomSeason(season) Case 9 seasons(2) = GetRoomSeason(season) Case 10 seasons(2) = GetRoomSeason(season) Case 11 seasons(2) = GetRoomSeason(season) Case 12 seasons(2) = GetRoomSeason(season) End Select Return seasons End Function ''' ''' 获取锁定 ''' ''' ''' Private Function GetLockData(lock As String) As Byte() Dim loc() As Byte Dim databuf As New List(Of Byte) databuf.Add(&H2C) '锁定 databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) loc = GetRoomSetInfo(lock) databuf.AddRange(loc) Return databuf.ToArray End Function ''' 房间备注偏移地址数量 Private _remarksCount As Int16 = 0 ''' 房间备注偏移地址 Private _remarkAddr As Byte = &H1C ''' ''' 房间注释 ''' ''' ''' Private Function GetRoomRemarks(roomRemarks As String) As Byte() Dim roomRemark() As Byte Dim remark(95) As Byte Dim databuf As New List(Of Byte) roomRemark = Encoding.GetEncoding("GBK").GetBytes(roomRemarks) Array.Copy(roomRemark, 0, remark, 0, roomRemark.Length) 'Console.WriteLine($"设置备注数据:{BitConverter.ToString(remark)}") For index = 1 To remark.Length Step 4 If index = remark.Length Then Exit For _remarksCount += 1 Dim roomda(3) As Byte Array.Copy(remark, index - 1, roomda, 0, roomda.Length) databuf.Add(_remarkAddr + 4) '房间注释 databuf.Add(&H1) databuf.Add(&H0) databuf.Add(&H0) databuf.AddRange(roomda) _remarkAddr += 4 Next Return databuf.ToArray End Function ''' ''' 项目编码变化事件 ''' 项目编码与房号同步 ''' ''' ''' Private Sub CBoProjectNumber_CheckedChanged(sender As Object, e As EventArgs) Handles CBoProjectNumber.CheckedChanged If CBoProjectNumber.Checked = True Then CBoProjectNumber.Checked = True CBoRoomNuRemark.Checked = True Else CBoProjectNumber.Checked = False CBoRoomNuRemark.Checked = False End If End Sub ''' ''' 房号变化事件 ''' 房号与项目编码同步 ''' ''' ''' Private Sub CBoRoomNuRemark_CheckedChanged(sender As Object, e As EventArgs) Handles CBoRoomNuRemark.CheckedChanged If ComboBox16.Text.Contains("全部") Then CBoRoomNuRemark.Checked = False CBoRoomTpRemark.Checked = False End If If CBoRoomNuRemark.Checked = True Then CBoProjectNumber.Checked = True CBoRoomNuRemark.Checked = True CBoRoomTpRemark.Checked = True Network_cke.Enabled = True Else 'CBoProjectNumber.Checked = False CBoRoomNuRemark.Checked = False 'CBoRoomTpRemark.Checked = False Network_cke.Enabled = False Network_cke.Checked = False End If 'If CBoRoomTpRemark.Checked And Not CBoRoomNuRemark.Checked Then ' Network_cke.Checked = False 'Else 'End If End Sub #Region "互斥" Private Sub CBoMandateTimeSet_CheckedChanged(sender As Object, e As EventArgs) Handles CBoMandateTimeSet.CheckedChanged If CBoMandateTimeSet.Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Clear)}" Then CBoMandateTimeSet.Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.HomeSet)}" DateTimePicker2.Enabled = True Else CBoMandateTimeSet.Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Clear)}" DateTimePicker2.Enabled = False End If End Sub Private Sub TextBox9_TextChanged(sender As Object, e As EventArgs) Handles TextBox9.TextChanged '项目编码 CBoProjectNumber.Checked = True CBoRoomNuRemark.Checked = True End Sub 'Private Sub ComboBox15_TextChanged(sender As Object, e As EventArgs) Handles ComboBox15.TextChanged ' '房态 ' CBoRoomState.Checked = True 'End Sub 'Private Sub TextBox30_TextChanged(sender As Object, e As EventArgs) Handles TextBox30.TextChanged ' '房间注释 ' CBoRoomRemark.Checked = True 'End Sub 'Private Sub ComboBox14_TextChanged(sender As Object, e As EventArgs) Handles ComboBox14.TextChanged ' '季节 ' CBoSeason.Checked = True 'End Sub 'Private Sub ComboBox13_TextChanged(sender As Object, e As EventArgs) Handles ComboBox13.TextChanged ' '锁定 ' CBoRoomLock.Checked = True 'End Sub 'Private Sub DateTimePicker2_ValueChanged(sender As Object, e As EventArgs) Handles DateTimePicker2.ValueChanged ' '授权时间 ' CBoMandateEndTime.Checked = True 'End Sub #End Region ''' ''' 获取房间设置信息 ''' ''' ''' Private Function GetRoomSetInfo(setitfo As Byte) As Byte() Dim buf(3) As Byte buf(0) = setitfo buf(1) = &H0 buf(2) = &H0 buf(3) = &H0 Return buf End Function ''' ''' 填充设置配置数据 ''' ''' Private Function FillSetConfig() As Byte() Dim projectNumber As String = ComboBox6.Text Dim configNumber As String = ComboBox7.Text Dim roomNumber As String = ComboBox4.Text Dim roomType As String = TextBox24.Text Dim configCount As Byte = &H4 Dim proNum() As Byte Dim conNum() As Byte Dim roomNum() As Byte Dim roomT() As Byte Dim roomtypes(3) As Byte Dim databuf As New List(Of Byte) databuf.Add(configCount) '项目编号 databuf.Add(&H38) databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) proNum = StringToByte(projectNumber) databuf.AddRange(proNum) '配置版本号 databuf.Add(&H40) databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) conNum = VerStringToByte(configNumber) databuf.AddRange(conNum) '房号 databuf.Add(&H44) databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) roomNum = StringToByte(roomNumber) databuf.AddRange(roomNum) '房型 databuf.Add(&H48) databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) roomT = System.Text.Encoding.UTF8.GetBytes(roomType) Array.Copy(roomT, 0, roomtypes, 0, roomT.Length) databuf.AddRange(roomtypes) 'Console.WriteLine($"设置配置数据:{ByteToString(databuf.ToArray)}") Return databuf.ToArray End Function #End Region #Region "高级设置_勾选显示主机信息" ''勾选设置是否显示选中列 ''' ''' 显示列信息 ''' Private _isShowCol As Boolean ''' ''' 端口号 ''' ''' ''' Private Sub CheckBox14_CheckedChanged(sender As Object, e As EventArgs) Handles CBoPort.CheckedChanged If _isShowCol = False Then Exit Sub If CBoPort.Checked = True Then GrdRCUHost.Column(EnRCUHosts.Port).Width = 40 Else GrdRCUHost.Column(EnRCUHosts.Port).Width = 0 End If End Sub ''' ''' 服务器 ''' ''' ''' Private Sub CheckBox16_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox16.CheckedChanged If _isShowCol = False Then Exit Sub If CheckBox16.Checked = True Then GrdRCUHost.Column(EnRCUHosts.ServiceAddr).Width = 90 Else GrdRCUHost.Column(EnRCUHosts.ServiceAddr).Width = 0 End If End Sub ''' ''' 子网掩码 ''' ''' ''' Private Sub CheckBox21_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox21.CheckedChanged If _isShowCol = False Then Exit Sub If CheckBox21.Checked = True Then GrdRCUHost.Column(EnRCUHosts.Subnet).Width = 90 Else GrdRCUHost.Column(EnRCUHosts.Subnet).Width = 0 End If End Sub ''' ''' 网关 ''' ''' ''' Private Sub CheckBox20_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox20.CheckedChanged If _isShowCol = False Then Exit Sub If CheckBox20.Checked = True Then GrdRCUHost.Column(EnRCUHosts.Gateway).Width = 90 Else GrdRCUHost.Column(EnRCUHosts.Gateway).Width = 0 End If End Sub ''' ''' DNS ''' ''' ''' Private Sub CheckBox19_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox19.CheckedChanged If _isShowCol = False Then Exit Sub If CheckBox19.Checked = True Then GrdRCUHost.Column(EnRCUHosts.DNS).Width = 110 Else GrdRCUHost.Column(EnRCUHosts.DNS).Width = 0 End If End Sub ''' ''' 锁定 ''' ''' ''' Private Sub CheckBox25_CheckedChanged(sender As Object, e As EventArgs) Handles CBoLock.CheckedChanged If _isShowCol = False Then Exit Sub If CBoLock.Checked = True Then GrdRCUHost.Column(EnRCUHosts.Lock).Width = 40 Else GrdRCUHost.Column(EnRCUHosts.Lock).Width = 0 End If End Sub ''' ''' 授权时间 ''' ''' ''' Private Sub CheckBox23_CheckedChanged(sender As Object, e As EventArgs) Handles CBoMandateDate.CheckedChanged If _isShowCol = False Then Exit Sub If CBoMandateDate.Checked = True Then GrdRCUHost.Column(EnRCUHosts.PrivilegedTime).Width = 130 Else GrdRCUHost.Column(EnRCUHosts.PrivilegedTime).Width = 0 End If End Sub ''' ''' 授权到期时间 ''' ''' ''' Private Sub CheckBox22_CheckedChanged(sender As Object, e As EventArgs) Handles CBoMandateEnd.CheckedChanged If _isShowCol = False Then Exit Sub If CBoMandateEnd.Checked = True Then GrdRCUHost.Column(EnRCUHosts.PrivilegedDays).Width = 130 Else GrdRCUHost.Column(EnRCUHosts.PrivilegedDays).Width = 0 End If End Sub ''' ''' 房间备注 ''' ''' ''' Private Sub CheckBox18_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox18.CheckedChanged If _isShowCol = False Then Exit Sub If CheckBox18.Checked = True Then GrdRCUHost.Column(EnRCUHosts.RoomRemarks).Width = 120 Else GrdRCUHost.Column(EnRCUHosts.RoomRemarks).Width = 0 End If End Sub #End Region #Region "Hex文件" ''' 加载文件大小 Const _loadFileSize As Integer = 1024 * 1024 * 2 ''' 加载数据大小 Const _loadDataSize As Integer = 1024 * 1024 * 2 ''' 加载Hex文件数据 Private _LoadHexFileData(_loadFileSize - 1) As Byte ''' 加载数据Buff Private _LoadDataBuff(_loadDataSize - 1) As Byte ''' 加载结束地址 Private _LoadEndAddr As Integer ''' C1-Hex文件起始值 Private _HexStart_C1 As Integer = 0 ''' 解析出的文件数据 Private _ParseData As Byte() ''' 解析出的配置数据 Private _ParseConfigData As Byte() ''' ''' 解析Hex文件 ''' ''' Private Sub DealHexFile(filePath As String) StateLabel($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ParsingHexFile)}...", Color.Blue, False) Dim tmpRet As Boolean = LoadDataFromFile(filePath) Dim checkSum(3) As Byte Dim tmpIdx As Integer = 0 Dim tmpLineCnt As Integer = 1 Dim tmpHexValidLenght As Integer = _LoadEndAddr - _HexStart_C1 If tmpRet Then Dim parse As New StringBuilder 'Dim tmpStrBuffer As String For tmpIdx = _HexStart_C1 To _LoadEndAddr - 1 parse.Append(HexByteStr(_LoadDataBuff(tmpIdx))) '<10ms Next _ParseData = GetStringToDataByte(parse.ToString) 'Console.WriteLine($"解析出的数据:{vbCrLf}{parse.ToString}") Array.Copy(_ParseData, _matchingValue, _matchingData, 0, _matchingData.Length) 'Console.WriteLine($"——解析匹配数据——:{vbCrLf}{BitConverter.ToString(_matchingData)}") StateLabel($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ParsingIsComplete)}", Color.Green, True) ''Dim a() As Byte = {&H0} ''Dim b As String = Encoding.GetEncoding("GBK").GetString(a) '_matchingData Dim project(1) As Byte '项目编码 2 Bytes Array.Copy(_matchingData, 0, project, 0, project.Length) 'Dim projects As String = Encoding.GetEncoding("GBK").GetString(project) Dim projects As String = $"{project(0) + project(1) * 256}" projects = projects.Replace(vbNullChar, "") Dim roomId(3) As Byte '房型Id 4 Bytes Array.Copy(_matchingData, project.Length, roomId, 0, roomId.Length) 'Dim roomIds As String = Encoding.GetEncoding("GBK").GetString(roomId) Dim roomIds As String = $"{BitConverter.ToUInt32(roomId, 0)}" roomIds = roomIds.Replace(vbNullChar, "") Dim version(19) As Byte '版本号 20 Bytes Array.Copy(_matchingData, (project.Length + roomId.Length), version, 0, version.Length) Dim versions As String = Encoding.GetEncoding("GBK").GetString(version) versions = versions.Replace(vbNullChar, "") Dim mcu(15) As Byte 'MCU型号 16 Bytes Array.Copy(_matchingData, (project.Length + roomId.Length + version.Length), mcu, 0, mcu.Length) Dim mcus As String = Encoding.GetEncoding("GBK").GetString(mcu) mcus = mcus.Replace(vbNullChar, "") Dim central(15) As Byte '中控型号 16 Bytes Array.Copy(_matchingData, (project.Length + roomId.Length + version.Length + mcu.Length), central, 0, central.Length) Dim centrals As String = Encoding.GetEncoding("GBK").GetString(central) centrals = centrals.Replace(vbNullChar, "") Dim remark(63) As Byte '备注 64 Bytes Array.Copy(_matchingData, (project.Length + roomId.Length + version.Length + mcu.Length + central.Length), remark, 0, remark.Length) Dim remarks As String = Encoding.GetEncoding("GBK").GetString(remark) remarks = remarks.Replace(vbNullChar, "") Console.WriteLine($"项目编码:{projects} 房型Id:{roomIds} 版本号:{versions} MCU型号:{mcus} 中控型号:{centrals} 备注:{remarks}") MatchingInfo(projects, roomIds, versions, mcus, centrals, remarks) End If End Sub ''' ''' 匹配信息委托 ''' Delegate Sub delegate_MatchingInfo_Change(projects As String, roomIds As String, versions As String, mcus As String, centrals As String, remarks As String) ''' ''' 匹配信息 ''' Private _Mcus As String Public Sub MatchingInfo(projects As String, roomIds As String, versions As String, mcus As String, centrals As String, remarks As String) _Mcus = mcus 'If InvokeRequired = True Then ' Dim dev As New delegate_MatchingInfo_Change(AddressOf MatchingInfo) ' Me.Invoke(dev, New Object() {projects, roomIds, versions, mcus, centrals, remarks}) 'Else ' GrdMatching.Cell(1, EnMatchingInfo.HexDeal).Text = projects ' GrdMatching.Cell(2, EnMatchingInfo.HexDeal).Text = roomIds ' GrdMatching.Cell(3, EnMatchingInfo.HexDeal).Text = versions ' GrdMatching.Cell(4, EnMatchingInfo.HexDeal).Text = mcus ' GrdMatching.Cell(5, EnMatchingInfo.HexDeal).Text = centrals ' GrdMatching.Cell(6, EnMatchingInfo.HexDeal).Text = remarks 'End If End Sub ''' ''' 加载hex文件数据 ''' ''' ''' Private Function LoadDataFromFile(ByVal path As String) As Boolean Array.Clear(_LoadHexFileData, 0, _LoadHexFileData.Length) Try Dim fs As New IO.FileStream(path, IO.FileMode.Open, IO.FileAccess.Read) If fs.Length <= _loadFileSize Then fs.Read(_LoadHexFileData, 0, fs.Length) Else Return False End If fs.Close() Catch ex As Exception Return False End Try Return HexFileToData(_LoadHexFileData, _LoadDataBuff, _LoadEndAddr) End Function ''' 匹配数据 Private _matchingData(511) As Byte ''' 匹配起始地址 Private ReadOnly _matchingAddr As Integer = 49152 '0xC000 匹配数据起始地址 ''' 匹配起始值 Private _matchingValue As Integer ''' ''' 解析Hex文件到Byte数组 ''' ''' ''' ''' ''' Private Function HexFileToData(ByVal hexBuffer() As Byte, ByVal dataBuffer() As Byte, ByRef endAddr As Integer) As Boolean Dim i As Integer '行数 Dim LineCnt As Integer = 0 Dim DataType_00_Idx As Integer = 0 '清空数据缓存区域 For i = 0 To dataBuffer.Length - 1 dataBuffer(i) = &HFF Next '本行数据缓存 Dim dataStrBuf(31) As Byte Dim dataValBuf(15) As Byte '首地址标记 Dim headAddrFlag As Boolean = True '本行地址值 Dim tmpLineAdd As Integer = 0 '偏移地址 0x04 数据类型指示偏移地址 Dim LineAddOffestBase As Integer = 0 '结束地址 endAddr = 0 Dim flashAddressBuf(3) As Byte Dim flashAddress As Integer For i = 0 To hexBuffer.Length - 1 '首先找到冒号 If hexBuffer(i) = &H3A Then '&H3A = ":" LineCnt += 1 'B0:数据长度 Dim dataLen As Integer = (StrToHex(hexBuffer(i + 1)) * 16 + StrToHex(hexBuffer(i + 2))) If dataLen > 0 Then 'By:CheckSum Dim checkSum As Byte = (StrToHex(hexBuffer(i + 9 + dataLen * 2)) * 16 + StrToHex(hexBuffer(i + 10 + dataLen * 2))) '取出整行数据 Dim rowDataStrBuf(41) As Byte Dim rowDataValBuf(20) As Byte Dim rowLen As Integer Array.Clear(rowDataStrBuf, 0, 42) Array.Clear(rowDataValBuf, 0, 21) rowLen = (dataLen * 2) + 10 Array.Copy(hexBuffer, i + 1, rowDataStrBuf, 0, rowLen) StrToHex(rowDataValBuf, rowDataStrBuf, rowLen / 2) Dim tempCheckSum As Byte = GetSumChecks(rowDataValBuf, rowLen / 2) If tempCheckSum <> &HFF Then Return False 'CheckSum校验不通过,返回错误 End If 'B4~Bx:数据内容 Array.Clear(dataStrBuf, 0, 32) Array.Clear(dataValBuf, 0, 16) Array.Copy(hexBuffer, i + 9, dataStrBuf, 0, dataLen * 2) StrToHex(dataValBuf, dataStrBuf, dataLen) End If 'B1~B2:取出地址位的值 Array.Copy(hexBuffer, i + 3, flashAddressBuf, 0, 4) '本行地址取出来放在 flashAddress中’ StrToHex(tmpLineAdd, flashAddressBuf) flashAddress = LineAddOffestBase + tmpLineAdd 'B3:数据类型 Dim dataType = StrToHex(hexBuffer(i + 8)) Select Case dataType Case 0 '数据记录 DataType_00_Idx = DataType_00_Idx + 1 '将第一个00类型数据的地址作为起始地址, 保存到 _HexStart_C1 If DataType_00_Idx = 1 Then _HexStart_C1 = flashAddress _matchingValue = _matchingAddr - _HexStart_C1 End If Array.Copy(dataValBuf, 0, dataBuffer, flashAddress, dataLen) endAddr = flashAddress + dataLen Case 1 '文件结束 If endAddr = 0 Then Return False Else Return True End If Case 2, 3, 5 '扩展段地址, 开始段地址, 开始线性地址’ Continue For Case 4 '扩展线性地址 If dataLen = 2 Then LineAddOffestBase = (dataValBuf(0) * 256 + dataValBuf(1)) * 65536 Else Return False '确认DataLen必须是2,否则报错 End If Case Else Return False End Select End If Next Return False End Function ''' ''' 和校验 ''' 求Byte数组的和校验 ''' ''' Byte数组 ''' Public Function GetSumChecks(dataPacket As Byte(), ByRef len As Integer) As Byte Dim sum As Integer For idx = 0 To len - 1 sum += dataPacket(idx) sum = sum And &HFF Next sum = (Not sum) And &HFF Return sum End Function Private Function HexByteStr(hexByte As Byte) As String If hexByte < 16 Then Return "0" & Hex(hexByte) Else Return Hex(hexByte) End If End Function ''' ''' 获取和校验 ''' ''' ''' ''' Private Sub GetSumCheck(ByVal buf() As Byte, ByVal len As UInt32, ByRef resultBuf() As Byte) Dim sum As Integer = 0 Dim i As Integer = 0 Dim j As Integer = 0 Dim retByte As Integer Do For j = 0 To 127 sum += buf(i + j) sum = sum And &HFFFFFFFF Next i += 128 Loop Until i >= len retByte = sum 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 StrToHex(pbDest() As Byte, pbSrc() As Byte, nLen As UInt16) Dim h1 As Byte Dim h2 As Byte Dim s1 As Byte Dim s2 As Byte Dim i As Integer For i = 0 To nLen - 1 h1 = pbSrc(2 * i) h2 = pbSrc(2 * i + 1) s1 = toupper(h1) - &H30 If s1 > 9 Then s1 -= 7 End If s2 = toupper(h2) - &H30 If s2 > 9 Then s2 -= 7 End If pbDest(i) = s1 * 16 + s2 Next End Sub Private Sub StrToHex(ByRef pbDest As UInt16, pbSrc() As Byte) Dim pBufDest(1) As Byte Dim h1 As Byte Dim h2 As Byte Dim s1 As Byte Dim s2 As Byte Dim i As UInt16 For i = 0 To 2 - 1 h1 = pbSrc(2 * i) h2 = pbSrc(2 * i + 1) s1 = toupper(h1) - &H30 If s1 > 9 Then s1 -= 7 End If s2 = toupper(h2) - &H30 If s2 > 9 Then s2 -= 7 End If pBufDest(i) = s1 * 16 + s2 Next 'pbDest = (pBufDest(0) << 8) + pBufDest(1) pbDest = pBufDest(0) * 256 + pBufDest(1) End Sub Private Function StrToHex(ByVal src) As Byte If src >= &H30 AndAlso src <= &H39 Then Return (src - &H30) ElseIf src >= &H41 AndAlso src <= &H46 Then Return (src - &H41 + 10) ElseIf src >= &H61 AndAlso src <= &H66 Then Return (src - &H61 + 10) Else Return 0 End If End Function Private Function toupper(val As Byte) As Byte If val >= &H61 AndAlso val <= &H7A Then Return (val - &H20) Else Return val End If End Function #End Region #Region "Bin文件" ''' ''' 解析Bin文件 ''' ''' Private Sub DealBinFile(filePath As String) StateLabel($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.NOTNULL)}...", Color.Blue, False) Dim dataFile() As Byte = File.ReadAllBytes(filePath) _ParseData = dataFile StateLabel($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ParsingBinFile)}", Color.Green, True) 'Console.WriteLine($"{BitConverter.ToString(dataFile)}") End Sub #End Region #Region "dat文件" ''' ''' 解析dat文件 ''' Private _DatPath As String Private Sub DealDatFile(filePath As String) _DatPath = filePath StateLabelConfig($"正在解析配置文件...", Color.Green, True) Dim dataFile() As Byte = File.ReadAllBytes(filePath) Dim vars As Integer = dataFile.Length Mod 4 If vars <> 0 Then Dim eb(3 - vars) As Byte Dim parseData As New List(Of Byte) parseData.AddRange(dataFile) parseData.AddRange(eb) _ParseConfigData = parseData.ToArray Else _ParseConfigData = dataFile End If If _ParseConfigData.Length = 0 Then StateLabelConfig($"配置文件为空", Color.Blue, True) Else StateLabelConfig($"配置文件解析完成", Color.Green, True) End If Console.WriteLine($"解析dat文件:{BitConverter.ToString(dataFile)}") End Sub #End Region #Region "状态栏委托" ''' ''' 状态栏解析文本委托 ''' 改变文本和颜色 ''' ''' ''' ''' Delegate Sub Delegate_StateLabel_Change(text As String, color As Color, flg As Boolean) ''' ''' 状态栏解析文本 ''' 改变文本和颜色 ''' ''' ''' ''' Private Sub StateLabel(text As String, color As Color, flg As Boolean) If Me.InvokeRequired = True Then Dim a As New Delegate_StateLabel_Change(AddressOf StateLabel) Me.Invoke(a, New Object() {text, color, flg}) Else TSSLbl1.ForeColor = color TSSLbl1.Text = text BtnUpdateFile.Enabled = flg End If End Sub ''' ''' 状态栏解析文本委托 ''' 改变文本和颜色 ''' ''' ''' ''' Delegate Sub Delegate_StateLabelConfig_Change(text As String, color As Color, flg As Boolean) ''' ''' 状态栏解析文本 ''' 改变文本和颜色 ''' ''' ''' ''' Private Sub StateLabelConfig(text As String, color As Color, flg As Boolean) If Me.InvokeRequired = True Then Dim a As New Delegate_StateLabelConfig_Change(AddressOf StateLabelConfig) Me.Invoke(a, New Object() {text, color, flg}) Else TSSLbl1.ForeColor = color TSSLbl1.Text = text Button36.Enabled = flg End If End Sub '''' '''' 状态栏解析回复文本委托 '''' 改变文本和颜色 '''' '''' '''' 'Delegate Sub Delegate_StateReplyLabel_Change(text As String, color As Color) '''' '''' 状态栏解析回复文本 '''' 改变文本和颜色 '''' '''' '''' 'Private Sub StateReplyLabel(text As String, color As Color) ' If Me.InvokeRequired = True Then ' Dim a As New Delegate_StateReplyLabel_Change(AddressOf StateReplyLabel) ' Me.Invoke(a, New Object() {text, color}) ' Else ' TSSLblReply.ForeColor = color ' TSSLblReply.Text = text ' End If 'End Sub #End Region #End Region #Region "匹配信息" ''' ''' 匹配信息 ''' Enum EnMatchingInfo ''' null ''' 是否选中 CKS ''' 数据类型 DataType ''' 主机数据 HostsData ''' Hex解析 HexDeal End Enum '''' 匹配列名 'Private _colsMatching() As String = {"空", "CKS", "DataType", "HostData", "HexParsing"} '''' 匹配数据类型 'Private _matchingType() As String = {"ProjectCode", "RoomTypeID", "Version", "Core", "Model", "Remark"} ''' 匹配列名 Private _colsMatching() As String = {"空", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.CKS)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.DataType)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.HostData)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.HexParsing)}"} ''' 匹配数据类型 Private _matchingType() As String = {$"{LanguageData.StringList(MultiLanguageDAL.StringEnum.ProjectCode)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomTypeID)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SoftwareVersion)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Core)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Model)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomRemark)}"} ''' ''' 初始化匹配表格信息 ''' Private Sub InitMatchingGridInfo() GrdMatching.DisplayRowNumber = True GrdMatching.Cols = _colsMatching.Length GrdMatching.Rows = 1 For index = 1 To GrdMatching.Cols - 1 With GrdMatching.Cell(0, index) .Text = _colsMatching(index) .BackColor = Color.LightGray .ForeColor = Color.Blue .Font = New Font($"Arial", 9, FontStyle.Bold) End With With GrdMatching.Column(index) If index = 1 Then .CellType = FlexCell.CellTypeEnum.CheckBox .Alignment = FlexCell.AlignmentEnum.CenterCenter .Width = 40 ElseIf index = 2 Then .Alignment = FlexCell.AlignmentEnum.CenterCenter .Width = 70 Else .Alignment = FlexCell.AlignmentEnum.CenterCenter .Width = 130 End If End With Next GrdMatching.SelectionMode = FlexCell.SelectionModeEnum.ByRow '设置选中行 GrdMatching.Rows += _matchingType.Length For index = 1 To _matchingType.Length GrdMatching.Cell(index, EnMatchingInfo.CKS).Text = 1 GrdMatching.Cell(index, EnMatchingInfo.DataType).Text = _matchingType(index - 1) Next GrdMatching.Cell(_matchingType.Length, EnMatchingInfo.CKS).Text = 0 GrdMatching.Cell(_matchingType.Length, EnMatchingInfo.CKS).Locked = True '锁定房间备注_单元格 'GrdMatching.Cell(_matchingType.Length - 1, EnMatchingInfo.CKS).Locked = True '锁定Model_单元格 GrdMatching.Cell(_matchingType.Length - 2, EnMatchingInfo.CKS).Locked = True '锁定Core_单元格 GrdMatching.Cell(_matchingType.Length - 1, EnMatchingInfo.HostsData).Locked = True '锁定Model_单元格 GrdMatching.Cell(_matchingType.Length - 2, EnMatchingInfo.HostsData).Locked = True '锁定Core_单元格 GrdMatching.Cell(_matchingType.Length - 1, EnMatchingInfo.HexDeal).Locked = True '锁定Model_单元格 GrdMatching.Cell(_matchingType.Length - 2, EnMatchingInfo.HexDeal).Locked = True '锁定Core_单元格 GrdMatching.Cell(_matchingType.Length - 1, EnMatchingInfo.DataType).Locked = True '锁定Model_单元格 GrdMatching.Cell(_matchingType.Length - 2, EnMatchingInfo.DataType).Locked = True End Sub ''' ''' 下发匹配信息 ''' ''' Private Function UpdateMatching() As Boolean For index = 1 To _matchingType.Length - 1 '备注不参与匹配 If GrdMatching.Cell(index, EnMatchingInfo.CKS).Text = 1 Then '选择匹配类型参与匹配 If GetMatchingCheck(GrdMatching.Cell(index, EnMatchingInfo.HostsData).Text, GrdMatching.Cell(index, EnMatchingInfo.HexDeal).Text) = True Then Button28.ForeColor = Color.Red Button28.Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Mismatching)}" Return False End If End If Next Return True End Function Private Function UpdateMatching(rowid As Integer) As Boolean 'For index = 1 To _matchingType.Length - 1 '备注不参与匹配 ' If GrdMatching.Cell(index, EnMatchingInfo.CKS).Text = 1 Then '选择匹配类型参与匹配 If GetMatchingCheck(GrdRCUHost.Cell(rowid, EnRCUHosts.MCUName).Text, _Mcus) = True Then Button28.ForeColor = Color.Red Button28.Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Mismatching)}" Return False End If ' End If 'Next Return True End Function ''' ''' 获取匹配校验 ''' ''' 主机数据 ''' Hex解析数据 ''' Private Function GetMatchingCheck(hosts As String, hexdeal As String) As Boolean 'Console.WriteLine($"匹配比对:主机数据-{hosts} Hex数据-{hexdeal}") If String.IsNullOrWhiteSpace(hosts) OrElse String.IsNullOrWhiteSpace(hexdeal) Then Return False If String.Compare(hosts, hexdeal) = 0 Then Return False End If Return True End Function #End Region #Region "固件升级" ''' Tftp端口 Private _TftpPort As Integer = 69 ''' Tftp新端口 Private _TftpNewPort As Integer ''' 是否升级回复 Private _isUpdateReply As Boolean ''' 是否Tftp写请求回复 Private _isUpdateWRQReply As Boolean ''' 是否Tftp发送数据包回复 Private _isTftpSendReply As Boolean ''' Tftp回复超时 Private ReadOnly _TftpRelayTimeout As Integer = 1000 ''' 校验包回复 Private _isCheckReply As Boolean ''' 复位回复 Private _isResetReply As Boolean ''' 最后端口 Private _endPort As Integer ''' 下发升级线程 Private _IssuedUpgradeThread As Thread Private _UpgradeType As Boolean ''' ''' 勾选 ''' ''' ''' Private Sub CheckBox12_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox12.CheckedChanged Dim check As Integer If CheckBox12.Checked = True Then check = 1 Else check = 0 End If For index = 1 To GrdRCUHost.Rows - 1 GrdRCUHost.Cell(index, EnRCUHosts.IsCheck).Text = $"{check}" Next End Sub ''' ''' 勾选计数 ''' ''' Private Function CheckedCount() As Integer Dim count As Integer = 0 For index = 1 To GrdRCUHost.Rows - 1 If GrdRCUHost.Cell(index, EnRCUHosts.IsCheck).Text = $"1" Then count += 1 End If Next Return count End Function Private Function CheckedCount(flag As Boolean) As List(Of Integer) Dim count As New List(Of Integer) For index = 1 To GrdRCUHost.Rows - 1 If GrdRCUHost.Cell(index, EnRCUHosts.IsCheck).Text = $"1" Then count.Add(index) End If Next Return count End Function ''' ''' 升级计数 ''' Private _upgradeCount As Integer = 0 ''' ''' 升级总数 ''' Private _upgradeSum As Integer = 0 ''' ''' 同时最大升级个数 ''' Private _upgradeMaxCount As Integer = 128 ''' ''' 勾选下发 ''' ''' ''' Private Sub BtnUpdateFile_Click(sender As Object, e As EventArgs) Handles BtnUpdateFile.Click _UpgradeType = False FirmwareUpdate() End Sub ''' ''' 固件升级 ''' Private Sub FirmwareUpdate() ChangePrgAirBurnValue(0) Dim li = CheckedCount(False) _upgradeSum = li.Count If TextBox7.Text = Nothing Then MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SelectTheFileYouWantToUpgrade)}!") Exit Sub End If If _upgradeSum = 0 Then MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SelectTheHostToBeConfigured)}!") Return End If If _upgradeSum > _upgradeMaxCount Then MsgBox($"超出最大升级 {_upgradeMaxCount} 个数。请重试!") Return End If ''下发匹配信息——GrdMatching If UpdateMatching(li(0)) = False Then MsgBox($"{GrdRCUHost.Cell(li(0), EnRCUHosts.MCUName).Text}, {_Mcus} 不匹配") Exit Sub Else Button28.ForeColor = Color.Green Button28.Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Matching)}" End If Button25.Enabled = False _upgradeCount = 0 TSSUpgradeCount.ForeColor = Color.Green TSSUpgradeCount.Text = $"Number of successful upgrades:{_upgradeCount}/{_upgradeSum}" _IssuedUpgradeThread = New Thread(AddressOf StartUpdate) _IssuedUpgradeThread.Start(True) 'StartUpdate() End Sub ''' ''' 升级键值对 ''' 'Private _upgrade As New Dictionary(Of IPEndPoint, String) Private _newupgrade As New Dictionary(Of String, String) ''' ''' 升级方式_两种升级命令, 不同升级方式 ''' Private _updateWay As Boolean = False Public Function CompareVersions(filename As String, launcherver As String) As Boolean Dim buff1() As String = filename.Split("_") Dim laver As String If String.IsNullOrEmpty(launcherver) Then Return True laver = "L2" Else If IsNumeric(launcherver.Substring(launcherver.Length - 2, 2)) Then laver = launcherver.Substring(0, 1) & CInt(launcherver.Substring(launcherver.Length - 2, 2)) Else laver = "L2" End If End If If laver.ToLower.Equals(buff1(2).ToLower) Then Return True Return False End Function ''' ''' 开始固件升级 ''' Private Sub StartUpdate(flag As Boolean) '_upgrade.Clear() _newupgrade.Clear() Try If GrdRCUHost.Rows > 1 Then For index = 1 To GrdRCUHost.Rows - 1 '遍历选中设备 If GrdRCUHost.Cell(index, EnRCUHosts.IsCheck).Text = $"1" Then If flag Then If UpdateMatching(index) = False Then Continue For End If If CompareVersions(_UpdateFileName, GrdRCUHost.Cell(index, EnRCUHosts.Launcher).Text) Then Else MsgBox($"该文件launch版本与主机launch不匹配请更换升级文件") Continue For End If Else If String.IsNullOrEmpty(_DatPath) Then Return Dim filetxt As String = File.ReadAllText(_DatPath).Replace(vbNullChar, "") Dim tabletxt As String = GrdRCUHost.Cell(index, EnRCUHosts.CentralName).Text If String.IsNullOrEmpty(tabletxt) OrElse String.IsNullOrEmpty(filetxt) Then MsgBox("该主机未设置机型,请先设置机型再升级配置") Continue For End If If ComparisonModelNames(filetxt, tabletxt) Then Else If MsgBox($"该文件配置主机型与当前主机机型,是否继续升级?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then Else Continue For End If End If End If Dim ipAddr As String = GrdRCUHost.Cell(index, EnRCUHosts.IPAddress).Text Dim port As String = GrdRCUHost.Cell(index, EnRCUHosts.Port).Text Dim localIp As IPAddress = LocalIPInfo() Dim localport As Integer = GetRandomPort() Dim localEP As IPEndPoint = New IPEndPoint(localIp, localport) Dim remoteEP As IPEndPoint = New IPEndPoint(IPAddress.Parse(ipAddr), port) Dim udpSocket As Socket = New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp) Dim commSockets As New CommSocketBLL commSockets.Sockets = udpSocket commSockets.LocalEP = localEP commSockets.ReomteEP = remoteEP commSockets.ConnSocket = False 'If CommSocket(commSockets) = True Then _RemoteIP = IPAddress.Parse(ipAddr) _RemotePort = port _endPort = port 'UpdateBCmd(commSockets, ipAddr, port, remoteEP) If _UpgradeType = True Then ConfigIssuedCmd(ipAddr, port) Else UpdateBCmd(ipAddr, port) End If WaitReplyUpdate(500) '500 Dim localporttftp As Integer = GetRandomPort() Dim localEPtftp As IPEndPoint = New IPEndPoint(localIp, localporttftp) Dim remoteEPtftp As IPEndPoint = New IPEndPoint(IPAddress.Parse(ipAddr), _TftpPort) Dim tftpSocket As Socket = New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp) Dim tftpSockets As New CommSocketBLL tftpSockets.Sockets = tftpSocket tftpSockets.LocalEP = localEPtftp tftpSockets.ReomteEP = remoteEPtftp tftpSockets.ConnSocket = False If _isUpdateReply = True Then _updateWay = True If CommSocket(tftpSockets) = True Then tftpSockets.ConnSocket = True '_RemotePort = _TftpPort '69端口 'tftpSockets.ReomteEP.Port = _TftpPort TftpSendWRQ(tftpSockets, remoteEPtftp) '发送写请求 WaitReplyWrite(500) '500 'WaitReply(_isUpdateWRQReply, _relayTimeout) '等待回复,记录端口 If _isUpdateWRQReply = False Then TftpSendWRQ(tftpSockets, remoteEPtftp) '发送写请求 WaitReplyWrite(500) '1000 End If _isTftpSendReply = False IsBatchPrgAirBurnValueChange(2, _upgradeCount) If _isUpdateWRQReply = True Then Dim ud As New UpgradeBLL ud.Index = index ud.ReomteEP = New IPEndPoint(tftpSockets.ReomteEP.Address, _TftpNewPort) ud.socket = tftpSocket Dim reomteEP As IPEndPoint = New IPEndPoint(tftpSockets.ReomteEP.Address, port) ' _upgrade.Add(reomteEP, index) Dim upkey As String = tftpSockets.ReomteEP.Address.ToString & ":" & port _newupgrade.Add(upkey, index) tftpSockets.ReomteEP.Port = _TftpNewPort 'Tftp新端口 '_RemotePort = _TftpNewPort 'Tftp新端口 '发送数据 'ThreadPool.QueueUserWorkItem(AddressOf SendUpdateData, ud) SendUpdateData(ud, tftpSockets) Else MsgBox($"主机写请求未回复,请检查网络是否通畅、电脑防火墙是否拦截!") End If End If Else 'UpdateACmd(commSockets, ipAddr, port, remoteEP) UpdateACmd(ipAddr, port) 'WaitReply(_isUpdateReply, _relayTimeout) WaitReplyUpdate(200) If _isUpdateReply = True Then ' If CommSocket(tftpSockets) = True Then tftpSockets.ConnSocket = True 'tftpSockets.ReomteEP.Port = _TftpPort '_RemotePort = _TftpPort '69端口 TftpSendWRQ(tftpSockets, remoteEPtftp) '发送写请求 WaitReplyWrite(200) 'WaitReply(_isUpdateWRQReply, _relayTimeout) '等待回复,记录端口 If _isUpdateWRQReply = False Then TftpSendWRQ(tftpSockets, remoteEPtftp) '发送写请求 WaitReplyWrite(500) End If _isTftpSendReply = False IsBatchPrgAirBurnValueChange(2, _upgradeCount) If _isUpdateWRQReply = True Then Dim ud As New UpgradeBLL ud.Index = index ud.ReomteEP = New IPEndPoint(tftpSockets.ReomteEP.Address, _TftpNewPort) ud.socket = tftpSocket Dim reomteEP As IPEndPoint = New IPEndPoint(tftpSockets.ReomteEP.Address, port) ' _upgrade.Add(reomteEP, index) Dim upkey As String = tftpSockets.ReomteEP.Address.ToString & ":" & port _newupgrade.Add(upkey, index) tftpSockets.ReomteEP.Port = _TftpNewPort 'Tftp新端口 '_RemotePort = _TftpNewPort 'Tftp新端口 '发送数据 'ThreadPool.QueueUserWorkItem(AddressOf SendUpdateData, ud) SendUpdateData(ud, tftpSockets) '开始发送数据 Else MsgBox($"主机写请求未回复!!!") End If End If End If End If End If Next Else MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SearchForTheHostToUpgrade)}!") End If Catch ex As Exception MsgBox($"升级下发异常:{ex.Message}!") End Try BtnEnabledChange(Button25, True) End Sub Private Function ComparisonModelNames(filetxt As String, tabletxt As String) As Boolean tabletxt = tabletxt.Replace("-", "_") Return filetxt.Contains(tabletxt) End Function Private Function CommSocket(csb As CommSocketBLL) If UpdataConnUdpSocket(csb) = True Then Return True End If Return False End Function ''' ''' 更新连接状态 ''' Public Function UpdataConnUdpSocket(csb As CommSocketBLL) Dim ep As IPEndPoint Try ep = New IPEndPoint(csb.LocalEP.Address, csb.LocalEP.Port) If csb.ConnSocket = False Then 'csb.Sockets = New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp) csb.Sockets.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1) '广播的精髓 csb.Sockets.Bind(ep) ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf UdpRecvSocketData), csb) Return True Else Return False csb.Sockets.Shutdown(SocketShutdown.Both) csb.Sockets.Close() End If Catch ex As Exception Console.WriteLine($"网络异常! {ex.Message}") Return False End Try End Function ''' ''' UDP Socket接收数据 ''' Private Sub UdpRecvSocketData(csb As CommSocketBLL) Dim ep As New IPEndPoint(IPAddress.Any, csb.ReomteEP.Port) Dim recvLength As Integer Dim recvBuffer(2048) As Byte '2024-06-13 Add timeout Momo/CZH 'Dim tickLast As Integer = My.Computer.Clock.TickCount 'Dim tickNow As Integer = My.Computer.Clock.TickCount 'Dim tmpBuffLen As Integer = 0 While _connectStatus = True Try 'tickNow = My.Computer.Clock.TickCount 'tmpBuffLen = csb.Sockets.ReceiveBufferSize recvLength = csb.Sockets.ReceiveFrom(recvBuffer, ep) Catch ex As Exception Console.WriteLine($"Socket Error:{ex.Message}") Return End Try ReceivingDataProcessing(recvBuffer, recvLength, ep) End While End Sub ''' ''' 按键是否可用 ''' Delegate Sub Delegate_BtnEnabled_Change(btn As Button, enab As Boolean) ''' ''' 按键是否可用 ''' Private Sub BtnEnabledChange(btn As Button, enab As Boolean) If Me.InvokeRequired = True Then Dim a As New Delegate_BtnEnabled_Change(AddressOf BtnEnabledChange) Me.Invoke(a, New Object() {btn, enab}) Else btn.Enabled = enab End If End Sub ''' ''' 固件升级-0x0A升级命令 ''' ''' ''' Private Sub UpdateACmd(commSockets As CommSocketBLL, ipAddr As String, port As String, remoteEP As IPEndPoint) Dim cmd As Byte = &HA '升级命令 0x0A Dim data As Byte() = FillUpdateCmdData(ipAddr, port) Dim sendData As Byte() = FillSendData(cmd, data) SendSocketData(commSockets, sendData, remoteEP) 'SendUDPData(sendData) 'Console.WriteLine($"固件升级-升级命令:{ByteToString(sendData)}") End Sub ''' ''' 固件升级-0xB2升级命令 ''' ''' ''' Private Sub UpdateBCmd(commSockets As CommSocketBLL, ipAddr As String, port As String, remoteEP As IPEndPoint) Dim cmd As Byte = &HB2 '升级命令由 0x0A 更改为 0xB2 更改时间:2022/1/6 Dim data As Byte() = FillUpdateCmdData(ipAddr, port) Dim sendData As Byte() = FillSendData(cmd, data) SendSocketData(commSockets, sendData, remoteEP) 'SendUDPData(sendData) 'Console.WriteLine($"固件升级-升级命令:{ByteToString(sendData)}") End Sub ''' ''' 固件升级-0x0A升级命令 ''' ''' ''' Private Sub UpdateACmd(ipAddr As String, port As String) Dim cmd As Byte = &HA '升级命令 0x0A Dim data As Byte() = FillUpdateCmdData(ipAddr, port) Dim sendData As Byte() = FillSendData(cmd, data) SendUDPData(sendData) 'Console.WriteLine($"固件升级-升级命令:{ByteToString(sendData)}") End Sub ''' ''' 固件升级-0xB2升级命令 ''' ''' ''' Private Sub UpdateBCmd(ipAddr As String, port As String) Dim cmd As Byte = &HB2 '升级命令由 0x0A 更改为 0xB2 更改时间:2022/1/6 Dim data As Byte() = FillUpdateCmdData(ipAddr, port) Dim sendData As Byte() = FillSendData(cmd, data) SendUDPData(sendData) 'Console.WriteLine($"固件升级-升级命令:{ByteToString(sendData)}") End Sub ''' ''' 配置下发-0xB5升级命令 ''' Private Sub ConfigIssuedCmd(ipAddr As String, port As String) Dim cmd As Byte = &HB5 '配置下发命令 Dim data As Byte() = FillUpdateCmdData(ipAddr, port) Dim sendData As Byte() = FillSendData(cmd, data) SendUDPData(sendData) 'Console.WriteLine($"配置下发-下发命令:{ByteToString(sendData)}") End Sub ''' ''' 固件升级-升级命令数据 ''' ''' ''' ''' Private Function FillUpdateCmdData(ipAddr As String, port As String) As Byte() Dim ipAddress As Byte() = GetAddressToBytes(ipAddr) Dim ports As Byte() = GetPortToBytes(port) Dim md5 As Byte() Dim blocks As Byte() If _UpgradeType = True Then md5 = GetDataMd5Byte(_ParseConfigData) blocks = IntToByteHB(GetBlocks(_ParseConfigData, 512)) Else md5 = GetDataMd5Byte(_ParseData) blocks = IntToByteHB(GetBlocks(_ParseData, 512)) End If Dim md5s As Byte() = GetMd5Sort(md5) 'Dim md5 As Byte() = GetDataMd5Byte(_ParseData) 'Console.WriteLine($"MD5-String:{BitConverter.ToString(md5s)}") Dim data As New List(Of Byte) data.AddRange(ipAddress) data.AddRange(ports) data.AddRange(md5s) data.AddRange(blocks) Return data.ToArray End Function ''' ''' 固件升级-校验命令 ''' Private Sub CheckCmd(remoteip As IPAddress, port As Integer) Dim ep As IPEndPoint = New IPEndPoint(remoteip, port) Dim cmd As Byte = &HB3 '校验命令 Dim data(0) As Byte data(0) = &H1 'App文件校验 'data(0) = &H2 '配置文件校验 Dim sendData As Byte() = FillSendData(cmd, data) SendUpdateData(sendData, ep) Console.WriteLine($"固件升级-校验命令:{ByteToString(sendData)}") End Sub ''' ''' 固件升级-复位命令 ''' Private Sub ResetCmd(remoteip As IPAddress, port As Integer) Dim ep As IPEndPoint = New IPEndPoint(remoteip, port) Dim cmd As Byte = &HB4 '复位命令 Dim data(0) As Byte data(0) = &H1 '软件复位 'data(0) = &H2 '看门狗复位 Dim sendData As Byte() = FillSendData(cmd, data) SendUpdateData(sendData, ep) Console.WriteLine($"固件升级-复位命令:{ByteToString(sendData)}") End Sub ''' ''' MD5值排序 ''' ''' ''' Private Function GetMd5Sort(md5 As Byte()) As Byte() Dim md51(3) As Byte Dim md52(3) As Byte Dim md53(3) As Byte Dim md54(3) As Byte Array.Copy(md5, 0, md51, 0, md51.Length) Array.Copy(md5, 4, md52, 0, md52.Length) Array.Copy(md5, 8, md53, 0, md53.Length) Array.Copy(md5, 12, md54, 0, md54.Length) Array.Reverse(md51) Array.Reverse(md52) Array.Reverse(md53) Array.Reverse(md54) Dim md5Sort As New List(Of Byte) md5Sort.AddRange(md51) md5Sort.AddRange(md52) md5Sort.AddRange(md53) md5Sort.AddRange(md54) Return md5Sort.ToArray End Function ''' ''' 升级等待回复 ''' ''' 超时时间 Public Sub WaitReplyUpdate(TimeOut As Integer) Dim tick As Integer Dim startTick As Integer = My.Computer.Clock.TickCount _isUpdateReply = False While _isUpdateReply = False AndAlso tick <= TimeOut Thread.Sleep(20) tick = My.Computer.Clock.TickCount - startTick Application.DoEvents() End While End Sub ''' ''' 写请求等待回复 ''' ''' 超时时间 Public Sub WaitReplyWrite(TimeOut As Integer) Dim tick As Integer Dim startTick As Integer = My.Computer.Clock.TickCount _isUpdateWRQReply = False While _isUpdateWRQReply = False AndAlso tick <= TimeOut Thread.Sleep(20) tick = My.Computer.Clock.TickCount - startTick Application.DoEvents() End While End Sub ''' ''' 发送数据包等待回复 ''' ''' 超时时间 Public Sub WaitReplySendPacket(TimeOut As Integer) Dim tick As Integer Dim startTick As Integer = My.Computer.Clock.TickCount _isTftpSendReply = False While _isTftpSendReply = False AndAlso tick <= TimeOut Thread.Sleep(10) tick = My.Computer.Clock.TickCount - startTick Application.DoEvents() End While End Sub ''' ''' 等待校验回复 ''' ''' 超时时间 Public Sub WaitReplyCheckPacket(TimeOut As Integer) Dim tick As Integer Dim startTick As Integer = My.Computer.Clock.TickCount _isCheckReply = False While _isCheckReply = False AndAlso tick <= TimeOut Thread.Sleep(100) tick = My.Computer.Clock.TickCount - startTick Application.DoEvents() End While End Sub ''' ''' 等待复位回复 ''' ''' 超时时间 Public Sub WaitReplyResetPacket(TimeOut As Integer) Dim tick As Integer Dim startTick As Integer = My.Computer.Clock.TickCount _isResetReply = False While _isResetReply = False AndAlso tick <= TimeOut Thread.Sleep(50) tick = My.Computer.Clock.TickCount - startTick Application.DoEvents() End While End Sub ''' ''' Tftp命令 ''' Enum EnTftpCmd ''' Null = 0 ''' 读请求 RRQ = 1 ''' 写请求 WRQ = 2 ''' 数据 DATA = 3 ''' Ack确认 ACK = 4 ''' Tftp_错误 TError = 5 End Enum ''' ''' Tftp开始发送写请求_数据 ''' Private Sub TftpSendWRQ(commSockets As CommSocketBLL, remoteEP As IPEndPoint) Dim sendData As Byte() = TftpStartSend() 'SendUDPData(sendData) SendSocketData(commSockets, sendData, remoteEP) Console.WriteLine($"Tftp开始发送写请求_数据命令:{ByteToString(sendData)}") End Sub ''' ''' Tftp开始发送写请求 ''' Private Sub TftpSendWRQ() Dim sendData As Byte() = TftpStartSend() SendUDPData(sendData) Console.WriteLine($"Tftp开始发送写请求_数据命令:{ByteToString(sendData)}") End Sub ''' ''' Tftp开始发送写请求_数据 ''' ''' Private Function TftpStartSend() As Byte() Dim data As New List(Of Byte) data.Add(EnTftpCmd.Null) data.Add(EnTftpCmd.WRQ) data.AddRange(Encoding.UTF8.GetBytes(_UpdateFileName)) data.Add(EnTftpCmd.Null) data.AddRange(Encoding.UTF8.GetBytes($"octet")) data.Add(EnTftpCmd.Null) Return data.ToArray End Function ''' ''' 重发次数标志位 ''' Public _resend As Integer = 0 Public _resendCheck As Integer = 0 Public _resendReset As Integer = 0 ''' ''' 向Tftp发送升级数据 ''' Private Sub SendUpdateData(ud As UpgradeBLL, csb As CommSocketBLL) _resend = 0 'StateReplyLabel($"升级中...", Color.Blue) '数据分包 Dim blockCount As Integer If _UpgradeType = True Then blockCount = GetBlocks(_ParseConfigData, 512) Else blockCount = GetBlocks(_ParseData, 512) End If Dim burnPackage() As Byte Dim packageNumber As Integer 'sent packet one by one For packageNumber = 1 To blockCount '发送类型 If _UpgradeType = True Then '发送固件 burnPackage = FillOnePackage(_ParseConfigData, packageNumber, blockCount) Else '发送配置数据 burnPackage = FillOnePackage(_ParseData, packageNumber, blockCount) End If Console.WriteLine($"开始发送第{packageNumber}包数据..." & vbCrLf, Color.Blue) 'SendUpdateData(burnPackage, ud.ReomteEP) 'UDP发送 SendSocketData(csb, burnPackage, ud.ReomteEP) '表格内容更新发送包数信息 GrdRCUHost.Cell(ud.Index, EnRCUHosts.Update).Text = $"{packageNumber}/{blockCount}" Console.WriteLine($"第{packageNumber}包:{ByteToString(burnPackage)}") '进度条更新 If _upgradeSum = 1 Then ChangePrgValue(packageNumber, blockCount) '进度条显示 Else ChangePrgValue(_upgradeCount, _upgradeSum) '批量升级显示 End If '等待ACK WaitReplySendPacket(500) '重发 If _isTftpSendReply = True Then '重发机制 '收到ACK If packageNumber = blockCount Then Console.WriteLine($"升级数据发送完成!") GrdRCUHost.Cell(ud.Index, EnRCUHosts.Update).Text = $"Leveling up" If _updateWay = True Then GrdRCUHost.Cell(ud.Index, EnRCUHosts.Update).Text = $"Wait check" 'StateReplyLabel($"等待校验", Color.Blue) CheckCmd(ud.ReomteEP.Address, _endPort) WaitReplyCheckPacket(30000) If _isCheckReply = True Then ResetCmd(ud.ReomteEP.Address, _endPort) 'GrdRCUHost.Cell(ud.Index, EnRCUHosts.Update).Text = $"等待复位" 'StateReplyLabel($"等待复位", Color.Blue) WaitReplyResetPacket(2000) If _isResetReply = True Then GrdRCUHost.Cell(ud.Index, EnRCUHosts.Update).Text = $"Wait for restart" 'StateReplyLabel($"升级完成", Color.Blue) Else If ResendReset(ud.ReomteEP) = True Then GrdRCUHost.Cell(ud.Index, EnRCUHosts.Update).Text = $"Wait for restart" 'StateReplyLabel($"升级完成", Color.Blue) Else GrdRCUHost.Cell(ud.Index, EnRCUHosts.Update).Text = $"Upgrade failure" 'StateReplyLabel($"升级失败", Color.Blue) End If BtnEnabledChange(Button25, True) End If Else If ResendCheck(ud.ReomteEP) = True Then ResetCmd(ud.ReomteEP.Address, _endPort) End If End If End If _updateWay = False End If _resend = 0 Else '重发 _resend += 1 If _resend <= 5 Then Console.WriteLine($"No reply, start to resend the data, resend {_resend} times!") packageNumber -= 1 Else Console.WriteLine($"The number of resends exceeded the maximum number of resends. Procedure") MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.UpgradeFailed)}!") IsBatchPrgAirBurnValueChange(0, _upgradeCount) 'StateReplyLabel($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.UpgradeFailed)}", Color.Red) _resend = 0 BtnEnabledChange(Button25, True) Exit For End If End If Next End Sub Private Function ResendCheck(remoteEp As IPEndPoint) For index = 0 To 5 CheckCmd(remoteEp.Address, _endPort) WaitReplyCheckPacket(30000) If _isCheckReply = True Then Return True End If Next Return False End Function Private Function ResendReset(remoteEp As IPEndPoint) For index = 0 To 10 ResetCmd(remoteEp.Address, _endPort) WaitReplyResetPacket(2000) If _isResetReply = True Then Return True End If Next Return False End Function ''' ''' 填充单包数据 ''' ''' ''' ''' ''' Private Function FillOnePackage(padData() As Byte, blockIndex As Integer, blockCount As Integer) As Byte() Dim data As New List(Of Byte) data.Add(EnTftpCmd.Null) data.Add(EnTftpCmd.DATA) data.AddRange(IntToByteLB(blockIndex)) data.AddRange(FillOnePackageData(padData, blockIndex, blockCount)) Return data.ToArray End Function ''' ''' 填充单包_取对应包数据 ''' ''' ''' ''' ''' Private Function FillOnePackageData(padData() As Byte, blockIndex As Integer, blockCount As Integer) As Byte() Dim data As New List(Of Byte) If blockIndex = blockCount Then For index = 512 * (blockIndex - 1) To padData.Length - 1 data.Add(padData(index)) Next Else For index = 512 * (blockIndex - 1) To 512 * blockIndex - 1 data.Add(padData(index)) Next End If Return data.ToArray End Function ''' ''' 进度条变化 ''' Private Sub ChangePrgValue(packageNumber As Integer, blockCount As Integer) If packageNumber > blockCount * 0 AndAlso packageNumber < blockCount * 0.1 Then ChangePrgAirBurnValue(5) ElseIf packageNumber > blockCount * 0.1 AndAlso packageNumber < blockCount * 0.2 Then ChangePrgAirBurnValue(10) ElseIf packageNumber > blockCount * 0.2 AndAlso packageNumber < blockCount * 0.3 Then ChangePrgAirBurnValue(20) ElseIf packageNumber > blockCount * 0.3 AndAlso packageNumber < blockCount * 0.4 Then ChangePrgAirBurnValue(30) ElseIf packageNumber > blockCount * 0.4 AndAlso packageNumber < blockCount * 0.5 Then ChangePrgAirBurnValue(40) ElseIf packageNumber > blockCount * 0.5 AndAlso packageNumber < blockCount * 0.6 Then ChangePrgAirBurnValue(50) ElseIf packageNumber > blockCount * 0.6 AndAlso packageNumber < blockCount * 0.7 Then ChangePrgAirBurnValue(60) ElseIf packageNumber > blockCount * 0.7 AndAlso packageNumber < blockCount * 0.8 Then ChangePrgAirBurnValue(70) ElseIf packageNumber > blockCount * 0.8 AndAlso packageNumber < blockCount * 0.9 Then ChangePrgAirBurnValue(80) ElseIf packageNumber > blockCount * 0.9 AndAlso packageNumber < blockCount Then ChangePrgAirBurnValue(90) ElseIf packageNumber = blockCount Then ChangePrgAirBurnValue(100) End If End Sub ''' ''' 进度条委托 ''' ''' Delegate Sub delegate_PrgAirBurn_Value(ByRef Value As Integer) ''' ''' 进度条委托 ''' ''' Private Sub ChangePrgAirBurnValue(ByRef value As Integer) If Me.InvokeRequired = True Then Dim changeval As New delegate_PrgAirBurn_Value(AddressOf ChangePrgAirBurnValue) Me.Invoke(changeval, New Object() {value}) Else TStPrgBurn.Value = value End If End Sub ''' ''' 是否批量下发改变进度值 ''' Private Sub IsBatchPrgAirBurnValueChange(one As Integer, count As Integer) If _upgradeSum = 1 Then ChangePrgAirBurnValue(one) Else 'ChangePrgAirBurnValue(count) End If End Sub #End Region #Region "配置下发" Private Sub Button36_Click(sender As Object, e As EventArgs) Handles Button36.Click _UpgradeType = True ConfigurationIssued() End Sub ''' ''' 配置下发 ''' Private Sub ConfigurationIssued() ChangePrgAirBurnValue(0) If TextBox61.Text = Nothing Then MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SelectTheFileYouWantToUpgrade)}!") Exit Sub End If If CheckedCount() = 0 Then MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SelectTheHostToBeConfigured)}!") Return End If If CheckedCount() > _upgradeMaxCount Then MsgBox($"Exceed the maximum number of {_upgradeMaxCount} upgrades. Please try again!") Return End If _upgradeSum = CheckedCount() Button25.Enabled = False _upgradeCount = 0 TSSUpgradeCount.ForeColor = Color.Green TSSUpgradeCount.Text = $"Number of successful upgrades:{_upgradeCount}/{_upgradeSum}" _IssuedUpgradeThread = New Thread(AddressOf StartUpdate) _IssuedUpgradeThread.Start(False) End Sub #End Region #End Region #Region "研发使用" #Region "通讯方式设置" '''' '''' 切换网络&通讯记录 '''' '''' '''' 'Private Sub TabControl3_TabIndexChanged(sender As Object, e As EventArgs) Handles TabControl3.TabIndexChanged ' If TabControl3.SelectedIndex = 0 OrElse TabControl3.SelectedIndex = 1 OrElse TabControl3.SelectedIndex = 2 Then ' Panel1.Visible = True ' Panel1.BringToFront() ' Panel2.Visible = False ' Else ' Panel2.Visible = True ' Panel2.BringToFront() ' Panel1.Visible = False ' End If 'End Sub ''' ''' 按键次数 ''' Private _rBtncount As Integer = 0 Private Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton1.CheckedChanged _rBtncount += 1 If _rBtncount > 1 Then If RadioButton1.Checked = True Then Panel2.Visible = False Panel1.BringToFront() Panel1.Visible = True 'FrmAdvancedSettings.ShowDialog() End If End If End Sub Private Sub RadioButton2_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton2.CheckedChanged If RadioButton2.Checked = True Then Panel1.Visible = False Panel2.BringToFront() Panel2.Visible = True 'FrmSerialportSetting.ShowDialog() End If End Sub ''' ''' 设置寄存器组包 ''' ''' ''' ''' Public Function FillPacket(cmd As Byte, dataBuff() As Byte) As Byte() If RadioButton1.Checked = True AndAlso _isNetWork = True Then dataBuff = FillSendData(cmd, dataBuff) '网络数据 ElseIf RadioButton2.Checked = True AndAlso _isSerialPort = True Then cmd = &H6 '串口Cmd dataBuff = FillModelsSerialPortTest(cmd, dataBuff) '串口数据 End If Return dataBuff End Function ''' ''' 发送方式 ''' ''' Private Sub SendPacket(dataBuff() As Byte) If RadioButton1.Checked = True AndAlso _isNetWork = True Then SendUDPData(dataBuff) ElseIf RadioButton2.Checked = True AndAlso _isSerialPort = True Then SendPortData(dataBuff) End If End Sub ''' ''' 读取寄存器组包 ''' ''' ''' ''' Public Function FillReadPacket(cmd As Byte, dataBuff() As Byte) As Byte() If RadioButton1.Checked = True AndAlso _isNetWork = True Then dataBuff = FillSendData(cmd, dataBuff) '网络数据 ElseIf RadioButton2.Checked = True AndAlso _isSerialPort = True Then cmd = &H15 '串口Cmd dataBuff = FillModelsSerialPortTest(cmd, dataBuff) '串口数据 End If Return dataBuff End Function '''' '''' 设置MQTT组包 '''' '''' '''' '''' 'Public Function FillMQTTPacket(cmd As Byte, dataBuff() As Byte) As Byte() ' If RadioButton1.Checked = True AndAlso _isNetWork = True Then ' cmd = &HD4 '网络设置MQTT_Cmd ' dataBuff = FillSendData(cmd, dataBuff) '网络数据 ' ElseIf RadioButton2.Checked = True AndAlso _isSerialPort = True Then ' cmd = &HD '串口设置MQTT_Cmd ' dataBuff = FillModelsSerialPortTest(cmd, dataBuff) '串口数据 ' End If ' Return dataBuff 'End Function #End Region #Region "设置读取_项目信息" Private _setCount As Integer = 0 ''' ''' 设置主机信息按键 ''' ''' ''' Private Sub BtnCheckSetting_Click(sender As Object, e As EventArgs) Handles BtnCheckSetting.Click If RadioButton1.Checked = True Then If GrdRCUHost.Rows > 1 Then _setCount = CheckedCount() If _setCount = 0 Then MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SelectTheHostToBeConfigured)}!") Exit Sub End If For index = 1 To GrdRCUHost.Rows - 1 If GrdRCUHost.Cell(index, EnRCUHosts.IsCheck).Text = $"1" Then _RemoteIP = IPAddress.Parse(GrdRCUHost.Cell(index, EnRCUHosts.IPAddress).Text) SetHostInfoRD() '设置主键信息 End If Next Else MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SelectTheInformationToBeDeliveredAndTheHost)}") End If _setCount = 0 _remarksCount = 0 _remarkAddr = &H1C Else SetHostInfoRD() '设置主键信息 End If End Sub ''' ''' 设置主机信息 ''' Private Sub SetHostInfoRD() Dim projectNumber As String = TBoProjectCode.Text '项目编号 Dim roomType As String = TBoRoomTP.Text '房型备注 Dim roomNumber As String = TBoRoomTN.Text '房号备注 Dim roomTpId As String = TBoRoomTPId.Text '房型ID Dim roomNuId As String = TBoRoomTNId.Text '房号ID Dim roomStates As String = CBoRoomStates.Text '房态 Dim roomSeason As String = CBoSeasons.Text '季节 Dim locks As String = CBoLocks.Text '锁定 Dim roomRemarks As String = TBoRoomRemarks.Text '房间注释 Dim setTime As Boolean = CheckBoxSet.Checked '授权时间是否设置 Dim dateTimeValue As Date = DateTimePicker1.Value '授权到期时间 Dim projectCodeB As Boolean = CBo1.Checked Dim RoomTpRemarkB As Boolean = CBo2.Checked Dim RoomNuRemarkB As Boolean = CBo3.Checked Dim SeasonB As Boolean = CBo4.Checked Dim RoomStateB As Boolean = CBo5.Checked Dim RoomLockB As Boolean = CBo6.Checked Dim roomRemarkB As Boolean = CBo7.Checked Dim MandateEndTimeB As Boolean = CBo8.Checked Dim cmd As Byte = &H31 Dim data As Byte() = FillSetHostsInfo(projectNumber, roomType, roomNumber, roomTpId, roomNuId, roomStates, roomSeason, locks, roomRemarks, setTime, dateTimeValue, projectCodeB, RoomStateB, RoomTpRemarkB, RoomNuRemarkB, roomRemarkB, SeasonB, MandateEndTimeB, RoomLockB) If Enumerable.SequenceEqual(data, _roomNull) = False Then Dim sendData As Byte() = FillPacket(cmd, data) SendPacket(sendData) Console.WriteLine($"研发设置主机信息:{ByteToString(sendData)}") End If End Sub Private Sub CheckBoxSet_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBoxSet.CheckedChanged If CheckBoxSet.Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Clear)}" Then CheckBoxSet.Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.HomeSet)}" DateTimePicker1.Enabled = True Else CheckBoxSet.Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Clear)}" DateTimePicker1.Enabled = False End If End Sub #Region "读取项目信息" Private _networkIpInfo() As Byte = {&H0, &H0, &H0, &H0} Private _networkSubnetInfo() As Byte = {&H8, &H0, &H0, &H0} Private _networkGatewayInfo() As Byte = {&HC, &H0, &H0, &H0} Private _networkDNSInfo() As Byte = {&H10, &H0, &H0, &H0} Private _networkServerInfo() As Byte = {&H18, &H0, &H0, &H0} Private _projectCode() As Byte = {&H38, &H0, &H0, &H0} Private _roomLocks() As Byte = {&H2C, &H0, &H0, &H0} Private _roomStates() As Byte = {&H4C, &H0, &H0, &H0} Private _season() As Byte = {&H50, &H0, &H0, &H0} Private _roomNuRemark() As Byte = {&H0, &H1, &H0, &H0} Private _roomNuRemark1() As Byte = {&H4, &H1, &H0, &H0} Private _roomNuRemark2() As Byte = {&H8, &H1, &H0, &H0} Private _roomNuRemark3() As Byte = {&HC, &H1, &H0, &H0} Private _roomNuRemarkID() As Byte = {&H44, &H0, &H0, &H0} Private _roomTpRemark() As Byte = {&H10, &H1, &H0, &H0} Private _roomTpRemark1() As Byte = {&H14, &H1, &H0, &H0} Private _roomTpRemark2() As Byte = {&H18, &H1, &H0, &H0} Private _roomTpRemark3() As Byte = {&H1C, &H1, &H0, &H0} Private _roomTpRemarkID() As Byte = {&H48, &H0, &H0, &H0} Private _roomRemark() As Byte = {&H20, &H1, &H0, &H0} Private _mandateTime() As Byte = {&H28, &H0, &H0, &H0} Private _mandateEndTime() As Byte = {&H20, &H0, &H0, &H0} ''' ''' 读取信息 ''' ''' ''' Private Sub Button23_Click(sender As Object, e As EventArgs) Handles Button23.Click 'Dim projectCodeB As Boolean = CBo1.Checked 'Dim RoomTpRemarkB As Boolean = CBo2.Checked 'Dim RoomNuRemarkB As Boolean = CBo3.Checked 'Dim SeasonB As Boolean = CBo4.Checked 'Dim RoomStateB As Boolean = CBo5.Checked 'Dim RoomLockB As Boolean = CBo6.Checked 'Dim roomRemarkB As Boolean = CBo7.Checked 'Dim MandateEndTimeB As Boolean = CBo8.Checked 'Dim MandateTimeB As Boolean = CheckBoxSet.Checked 'If projectCodeB = True OrElse RoomTpRemarkB = True OrElse RoomNuRemarkB = True OrElse SeasonB = True OrElse RoomStateB = True OrElse RoomLockB = True OrElse roomRemarkB = True OrElse MandateEndTimeB = True OrElse MandateTimeB = True Then 'Else ' MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.PleaseSelectTheItemInfoItemToRead)}!") ' Return 'End If Dim cmd As Byte = &H30 Dim data() As Byte = GetReadCountData() 'Dim data() As Byte = GetReadCountData(projectCodeB, RoomTpRemarkB, RoomNuRemarkB, SeasonB, RoomStateB, RoomLockB, roomRemarkB, MandateEndTimeB, MandateTimeB) Dim sendData As Byte() = FillReadPacket(cmd, data) SendPacket(sendData) Console.WriteLine($"研发读取主机信息:{ByteToString(sendData)}") End Sub ''' ''' 获取设置总数数据 ''' ''' Private Function GetReadCountData() As Byte() '1、判断勾选项, 算出设备个数 Dim setCount As Byte = 0 Dim databuf As New List(Of Byte) databuf.Add(14) databuf.AddRange(_projectCode) '项目编码 databuf.AddRange(_roomLocks) '锁定 databuf.AddRange(_roomStates) '房态 databuf.AddRange(_season) '季节 databuf.AddRange(_roomNuRemark) '房号备注 databuf.AddRange(_roomNuRemark1) '房号备注 databuf.AddRange(_roomNuRemark2) '房号备注 databuf.AddRange(_roomNuRemark3) '房号备注 databuf.AddRange(_roomNuRemarkID) '房号ID databuf.AddRange(_roomTpRemark) '房型备注 databuf.AddRange(_roomTpRemark1) '房型备注 databuf.AddRange(_roomTpRemark2) '房型备注 databuf.AddRange(_roomTpRemark3) '房型备注 databuf.AddRange(_roomTpRemarkID) '房型ID 'databuf.AddRange(_roomRemark) '房间备注 'databuf.AddRange(_mandateEndTime) '授权到期时间 'databuf.AddRange(_mandateTime) '授权时间 Return databuf.ToArray End Function '''' '''' 获取设置总数数据 '''' '''' 项目编码 '''' 房态 '''' 房型备注&房型ID '''' 房型备注&房型ID '''' 房间备注 '''' 季节 '''' 授权到期时间 '''' 锁定 '''' 授权时间 '''' 'Private Function GetReadCountData(ProjectNumber As Boolean, RoomState As Boolean, RoomTpRemark As Boolean, RoomNuRemark As Boolean, RoomRemarks As Boolean, Season As Boolean, MandateEndTime As Boolean, RoomLock As Boolean, MandateTime As Boolean) As Byte() ' '1、判断勾选项, 算出设备个数 ' Dim setCount As Byte = 0 ' Dim databuf As New List(Of Byte) ' If ProjectNumber = True Then '项目编码 ' setCount += 1 ' databuf.AddRange(_projectCode) ' End If ' If RoomState = True Then '房态 ' setCount += 1 ' databuf.AddRange(_roomStates) ' End If ' If RoomTpRemark = True Then '房型备注和房型ID ' setCount += 5 ' databuf.AddRange(_roomTpRemark) ' End If ' If RoomNuRemark = True Then '房号备注和房号ID ' setCount += 5 ' databuf.AddRange(_roomNuRemark) ' End If ' If RoomRemarks = True Then '房间备注 ' setCount += _remarksCount ' databuf.AddRange(_roomRemark) ' End If ' If Season = True Then '季节 ' setCount += 1 ' databuf.AddRange(_season) ' End If ' If MandateEndTime = True Then '授权到期时间 ' setCount += 1 ' databuf.AddRange(_mandateEndTime) ' End If ' If RoomLock = True Then '锁定 ' setCount += 1 ' databuf.AddRange(_roomLocks) ' End If ' If MandateTime = True Then '授权时间 ' setCount += 1 ' databuf.AddRange(_mandateTime) ' End If ' databuf.Insert(0, setCount) ' Return databuf.ToArray 'End Function #End Region #Region "复位" 'Private ReadOnly resetText() As String = {"软件复位", "看门狗复位"} 'Private Sub InitReset() ' ComboBox29.Items.Clear() ' ComboBox29.Items.AddRange(resetText) ' If ComboBox29.Items.Count > 0 Then ComboBox29.SelectedIndex = 0 'End Sub ''' ''' 复位命令 ''' ''' ''' Private Sub Button34_Click(sender As Object, e As EventArgs) Handles Button34.Click Label71.Text = $"Waiting to restart..." Dim resetCMD As Byte = &H1 'If ComboBox29.SelectedIndex = 0 Then ' resetCMD = &H1 'ElseIf ComboBox29.SelectedIndex = 1 Then ' resetCMD = &H2 'End If Dim cmd As Byte = &HB4 Dim data(0) As Byte data(0) = resetCMD Dim sendData As Byte() = FillSendData(cmd, data) SendUDPData(sendData) End Sub #End Region #End Region #Region "设置MAC" ''' ''' 研发使用MAC地址下发 ''' ''' ''' Private Sub Button21_Click(sender As Object, e As EventArgs) Handles Button21.Click RDSetMAC() End Sub ''' ''' 是否点击OK ''' Public _RDIsOK As Boolean ''' ''' 设置MAC ''' Private Sub RDSetMAC() Dim frmmacdia As New FrmMACDialog(Me) frmmacdia.ShowMyDialog() If _IsOK = True Then Dim data() As Byte = frmmacdia.GetMACAddress() Dim cmd As Byte = &H31 '发送 Dim databuff As Byte() = FillMACIssuedData(data) Dim senddata As Byte() = FillPacket(cmd, data) SendPacket(senddata) Console.WriteLine($"研发设置MAC:{ByteToString(senddata)}") _IsOK = False End If End Sub #End Region #Region "设置读取_网络信息" ''' ''' 网络计数 ''' Private _NetCount As Integer = 0 ''' ''' 设置网络信息按键 ''' ''' ''' Private Sub Button22_Click(sender As Object, e As EventArgs) Handles Button22.Click Dim ip1 As String = TextBox49.Text Dim ip2 As String = TextBox48.Text Dim ip3 As String = TextBox51.Text Dim ip4 As String = TextBox50.Text Dim subnet1 As String = TextBox39.Text Dim subnet2 As String = TextBox38.Text Dim subnet3 As String = TextBox37.Text Dim subnet4 As String = TextBox36.Text Dim gateway1 As String = TextBox43.Text Dim gateway2 As String = TextBox42.Text Dim gateway3 As String = TextBox41.Text Dim gateway4 As String = TextBox40.Text Dim DNS1 As String = TextBox47.Text Dim DNS2 As String = TextBox46.Text Dim DNS3 As String = TextBox45.Text Dim DNS4 As String = TextBox44.Text Dim server1 As String = TextBox60.Text Dim server2 As String = TextBox59.Text Dim server3 As String = TextBox58.Text Dim server4 As String = TextBox35.Text If CheckBox32.Checked = True Then If GetNetworkInfoIsLegal(ip1, $"IP地址") = False Then Return If GetNetworkInfoIsLegal(ip2, $"IP地址") = False Then Return If GetNetworkInfoIsLegal(ip3, $"IP地址") = False Then Return If GetNetworkInfoIsLegal(ip4, $"IP地址") = False Then Return If GetNetworkInfoIsLegal(subnet1, $"子网掩码") = False Then Return If GetNetworkInfoIsLegal(subnet2, $"子网掩码") = False Then Return If GetNetworkInfoIsLegal(subnet3, $"子网掩码") = False Then Return If GetNetworkInfoIsLegal(subnet4, $"子网掩码") = False Then Return If GetNetworkInfoIsLegal(gateway1, $"网关") = False Then Return If GetNetworkInfoIsLegal(gateway2, $"网关") = False Then Return If GetNetworkInfoIsLegal(gateway3, $"网关") = False Then Return If GetNetworkInfoIsLegal(gateway4, $"网关") = False Then Return If GetNetworkInfoIsLegal(DNS1, $"DNS") = False Then Return If GetNetworkInfoIsLegal(DNS2, $"DNS") = False Then Return If GetNetworkInfoIsLegal(DNS3, $"DNS") = False Then Return If GetNetworkInfoIsLegal(DNS4, $"DNS") = False Then Return End If If CheckBox33.Checked = True Then If GetNetworkInfoIsLegal(server1, $"服务器") = False Then Return If GetNetworkInfoIsLegal(server2, $"服务器") = False Then Return If GetNetworkInfoIsLegal(server3, $"服务器") = False Then Return If GetNetworkInfoIsLegal(server4, $"服务器") = False Then Return End If If RadioButton1.Checked = True Then If GrdRCUHost.Rows > 1 Then _NetCount = CheckedCount() If _NetCount = 0 Then MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SelectTheHostToBeConfigured)}!") Exit Sub End If For index = 1 To GrdRCUHost.Rows - 1 If GrdRCUHost.Cell(index, EnRCUHosts.IsCheck).Text = $"1" Then _RemoteIP = IPAddress.Parse(GrdRCUHost.Cell(index, EnRCUHosts.IPAddress).Text) SetNetworkInfo(ip1, ip2, ip3, ip4, subnet1, subnet2, subnet3, subnet4, gateway1, gateway2, gateway3, gateway4, DNS1, DNS2, DNS3, DNS4, server1, server2, server3, server4) End If Next Else MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SelectTheInformationToBeDeliveredAndTheHost)}") End If _NetCount = 0 Else SetNetworkInfo(ip1, ip2, ip3, ip4, subnet1, subnet2, subnet3, subnet4, gateway1, gateway2, gateway3, gateway4, DNS1, DNS2, DNS3, DNS4, server1, server2, server3, server4) End If End Sub ''' ''' 设置网络信息 ''' Private Sub SetNetworkInfo(ip1 As String, ip2 As String, ip3 As String, ip4 As String, subnet1 As String, subnet2 As String, subnet3 As String, subnet4 As String, gateway1 As String, gateway2 As String, gateway3 As String, gateway4 As String, DNS1 As String, DNS2 As String, DNS3 As String, DNS4 As String, server1 As String, server2 As String, server3 As String, server4 As String) Dim cmd As Byte = &H31 Dim data As Byte() = GetDHCPData() Dim databuff As Byte() = GetDHCP(data) Dim getServer As Byte() = GetServerData(server1, server2, server3, server4) Dim dataPackage As Byte() Dim count As Byte Dim sendData As Byte() If CheckBox32.Checked = False Then If CheckBox33.Checked = True Then count = &H2 dataPackage = GetServerSendData(databuff, getServer) dataPackage = GetDHCPPackage(count, dataPackage) Else count = &H1 dataPackage = GetDHCPPackage(count, databuff) End If Else Dim setData As Byte() = GetSetData(ip1, ip2, ip3, ip4, subnet1, subnet2, subnet3, subnet4, gateway1, gateway2, gateway3, gateway4, DNS1, DNS2, DNS3, DNS4) Dim setDataDHCP As Byte() = GetSetDHCPPackage(databuff, setData) If CheckBox33.Checked = True Then count = &H6 dataPackage = GetServerSendData(setDataDHCP, getServer) dataPackage = GetDHCPPackage(count, dataPackage) Else count = &H5 dataPackage = GetDHCPPackage(count, setDataDHCP) End If End If sendData = FillPacket(cmd, dataPackage) SendPacket(sendData) Console.WriteLine($"研发设置网络信息:{ByteToString(sendData)}") End Sub Private Function GetServerSendData(data1 As Byte(), data2 As Byte()) As Byte() Dim databuf As New List(Of Byte) databuf.AddRange(data1) databuf.AddRange(data2) Return databuf.ToArray End Function Private Function GetDHCPData() Dim dh As Byte Dim setdh As Byte Dim server As Byte If CheckBox31.Checked = True Then dh = &H1 '1设置 Else dh = &H2 End If If CheckBox32.Checked = True Then setdh = &H1 Else setdh = &H2 End If If CheckBox33.Checked = True Then server = &H1 Else server = &H2 End If Dim data(3) As Byte data(0) = dh data(1) = setdh data(2) = server data(3) = &H0 Return data End Function ''' ''' 获取 DHCP 使能 ''' ''' ''' Private Function GetDHCP(data As Byte()) As Byte() Dim databuf As New List(Of Byte) databuf.Add(&H30) '使能 databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) databuf.AddRange(data) Return databuf.ToArray End Function ''' ''' 获取DHCP包 ''' ''' ''' ''' Private Function GetDHCPPackage(count As Byte, data As Byte()) Dim databuf As New List(Of Byte) databuf.Add(count) databuf.AddRange(data) Return databuf.ToArray End Function ''' ''' 获取DHCP设置包 ''' ''' ''' ''' Private Function GetSetDHCPPackage(dhcp As Byte(), data As Byte()) Dim databuf As New List(Of Byte) databuf.AddRange(dhcp) databuf.AddRange(data) Return databuf.ToArray End Function ''' ''' 获取服务器IP地址数据 ''' ''' ''' ''' ''' ''' Private Function GetServerData(server1 As String, server2 As String, server3 As String, server4 As String) Dim databuf As New List(Of Byte) databuf.Add(&H18) '服务器IP地址 databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) databuf.Add(server1) databuf.Add(server2) databuf.Add(server3) databuf.Add(server4) Return databuf.ToArray End Function ''' ''' 获取设置DHCP数据 ''' ''' Private Function GetSetData(ip1 As String, ip2 As String, ip3 As String, ip4 As String, subnet1 As String, subnet2 As String, subnet3 As String, subnet4 As String, gateway1 As String, gateway2 As String, gateway3 As String, gateway4 As String, DNS1 As String, DNS2 As String, DNS3 As String, DNS4 As String) As Byte() Dim databuf As New List(Of Byte) databuf.Add(&H0) 'IP地址 databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) databuf.Add(ip1) databuf.Add(ip2) databuf.Add(ip3) databuf.Add(ip4) databuf.Add(&H8) '子网掩码 databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) databuf.Add(subnet1) databuf.Add(subnet2) databuf.Add(subnet3) databuf.Add(subnet4) databuf.Add(&HC) '网关 databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) databuf.Add(gateway1) databuf.Add(gateway2) databuf.Add(gateway3) databuf.Add(gateway4) databuf.Add(&H10) 'DNS databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) databuf.Add(DNS1) databuf.Add(DNS2) databuf.Add(DNS3) databuf.Add(DNS4) Return databuf.ToArray End Function Private Sub CheckBox32_Click(sender As Object, e As EventArgs) Handles CheckBox32.Click If CheckBox32.Checked = True Then SetRadioBtnState(True) Else SetRadioBtnState(False) End If End Sub Private Sub CheckBox33_Click(sender As Object, e As EventArgs) Handles CheckBox33.Click If CheckBox31.Checked = False AndAlso CheckBox32.Checked = False Then CheckBox33.Checked = False MsgBox($"请选择DHCP或者固定IP") Return End If If CheckBox33.Checked = True Then SetServerBtnState(True) Else SetServerBtnState(False) End If End Sub Private Sub CheckBox32_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox32.CheckedChanged If CheckBox32.Checked = True Then SetRadioBtnState(True) Else SetRadioBtnState(False) End If End Sub Private Sub CheckBox33_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox33.CheckedChanged If CheckBox33.Checked = True Then SetServerBtnState(True) Else SetServerBtnState(False) End If End Sub ''' ''' 设置按键状态 ''' ''' Private Sub SetRadioBtnState(state As Boolean) TextBox49.Enabled = state TextBox48.Enabled = state TextBox51.Enabled = state TextBox50.Enabled = state TextBox39.Enabled = state TextBox38.Enabled = state TextBox37.Enabled = state TextBox36.Enabled = state TextBox43.Enabled = state TextBox42.Enabled = state TextBox41.Enabled = state TextBox40.Enabled = state TextBox47.Enabled = state TextBox46.Enabled = state TextBox45.Enabled = state TextBox44.Enabled = state Label36.Enabled = state Label37.Enabled = state Label38.Enabled = state Label39.Enabled = state Label40.Enabled = state Label41.Enabled = state Label42.Enabled = state Label43.Enabled = state Label44.Enabled = state Label45.Enabled = state Label46.Enabled = state Label47.Enabled = state Label48.Enabled = state Label50.Enabled = state Label51.Enabled = state Label55.Enabled = state End Sub ''' ''' 设置服务器按键状态 ''' ''' Private Sub SetServerBtnState(state As Boolean) TextBox60.Enabled = state TextBox59.Enabled = state TextBox58.Enabled = state TextBox35.Enabled = state Label69.Enabled = state Label68.Enabled = state Label67.Enabled = state Label66.Enabled = state End Sub #Region "读取网络信息" ''' ''' 读取网络信息 ''' ''' ''' Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click CheckBox31.Checked = False CheckBox32.Checked = False CheckBox33.Checked = False Dim cmd As Byte = &H30 Dim data As Byte() = GetReadNetworkInfo() Dim sendData As Byte() = FillReadPacket(cmd, data) SendPacket(sendData) Console.WriteLine($"研发读取网络信息:{ByteToString(sendData)}") End Sub ''' ''' 获取读取数据 ''' ''' Private Function GetReadNetworkInfo() As Byte() Dim databuff As New List(Of Byte) databuff.Add(&H6) databuff.Add(&H0) 'IP地址 databuff.Add(&H0) databuff.Add(&H0) databuff.Add(&H0) databuff.Add(&H8) '子网掩码 databuff.Add(&H0) databuff.Add(&H0) databuff.Add(&H0) databuff.Add(&HC) '网关 databuff.Add(&H0) databuff.Add(&H0) databuff.Add(&H0) databuff.Add(&H10) 'DNS databuff.Add(&H0) databuff.Add(&H0) databuff.Add(&H0) databuff.Add(&H18) '服务器 databuff.Add(&H0) databuff.Add(&H0) databuff.Add(&H0) databuff.Add(&H30) '使能 databuff.Add(&H0) databuff.Add(&H0) databuff.Add(&H0) Return databuff.ToArray End Function #End Region #End Region #Region "设置读取_MQTT" Private _MQTTItem() = {$"{LanguageData.StringList(MultiLanguageDAL.StringEnum.MQTT)}_{LanguageData.StringList(MultiLanguageDAL.StringEnum.AliCloud)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.MQTT)}_{LanguageData.StringList(MultiLanguageDAL.StringEnum.CustomCloud)}"} Private Sub InitMQTTItem() ComboBox10.Items.Clear() ComboBox10.Items.AddRange(_MQTTItem) If ComboBox10.Items.Count > 0 Then ComboBox10.SelectedIndex = 0 End Sub Private Sub InitPage() TabControl4.SizeMode = TabSizeMode.Fixed TabControl4.ItemSize = New Size(0, 1) End Sub ''' ''' MQTT选择 ''' ''' ''' Private Sub ComboBox10_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox10.SelectedIndexChanged Select Case ComboBox10.SelectedIndex Case 0 TabControl4.SelectedIndex = 0 Case 1 TabControl4.SelectedIndex = 1 Case Else End Select End Sub ''' ''' 设置计数 ''' Private _setcounts As Integer = 0 ''' ''' 设置MQTT ''' ''' ''' Private Sub BtnSetMQTT_Click(sender As Object, e As EventArgs) Handles BtnSetMQTT.Click Dim aliProductKeyB As Boolean = CheckBox8.Checked Dim aliDevNameB As Boolean = CheckBox9.Checked Dim aliDevKeyB As Boolean = CheckBox10.Checked Dim aliReSessionB As Boolean = CheckBox14.Checked Dim aliSubSessionB As Boolean = CheckBox13.Checked Dim onlineTimeB As Boolean = CheckBox11.Checked Dim reSsessionB As Boolean = CheckBox22.Checked Dim subSessionB As Boolean = CheckBox17.Checked Dim domainNameB As Boolean = CheckBox15.Checked Dim clientIDB As Boolean = CheckBox29.Checked Dim userNameB As Boolean = CheckBox28.Checked Dim passwordB As Boolean = CheckBox27.Checked Dim aliProductKey() As Byte = GetMQTTSingleData(TextBox28.Text) Dim aliDevName() As Byte = GetMQTTSingleData(TextBox31.Text) Dim aliDevKey() As Byte = GetMQTTSingleData(TextBox32.Text) Dim aliReSession() As Byte = GetMQTTSingleData(TextBox33.Text) Dim aliSubSession() As Byte = GetMQTTSingleData(TextBox34.Text) Dim onlineTime() As Byte = GetMQTTSingleByte(IntToByteHB(NumericUpDown1.Value)) Dim reSsession() As Byte = GetMQTTSingleData(TextBox52.Text) Dim subSession() As Byte = GetMQTTSingleData(TextBox53.Text) Dim domainName() As Byte = GetMQTTSingleData(TextBox54.Text) Dim clientID() As Byte = GetMQTTSingleData(TextBox55.Text) Dim userName() As Byte = GetMQTTSingleData(TextBox56.Text) Dim password() As Byte = GetMQTTSingleData(TextBox57.Text) Dim cmd As Byte Dim sendData As Byte() Dim data As Byte() = GetMQTTData(aliProductKeyB, aliDevNameB, aliDevKeyB, aliReSessionB, aliSubSessionB, onlineTimeB, reSsessionB, subSessionB, domainNameB, clientIDB, userNameB, passwordB, aliProductKey, aliDevName, aliDevKey, aliReSession, aliSubSession, onlineTime, reSsession, subSession, domainName, clientID, userName, password) Dim networkDate As Byte() = GetNetworkData(aliProductKeyB, aliDevNameB, aliDevKeyB, aliReSessionB, aliSubSessionB, onlineTimeB, reSsessionB, subSessionB, domainNameB, clientIDB, userNameB, passwordB, aliProductKey, aliDevName, aliDevKey, aliReSession, aliSubSession, onlineTime, reSsession, subSession, domainName, clientID, userName, password) If RadioButton1.Checked = True AndAlso _isNetWork = True Then cmd = &HD4 '网络设置MQTT_Cmd sendData = FillSendData(cmd, networkDate) '网络数据 ElseIf RadioButton2.Checked = True AndAlso _isSerialPort = True Then cmd = &HD '串口设置MQTT_Cmd sendData = FillModelsSerialPortTest(cmd, data) '串口数据 Else MsgBox($"非法设置") Return End If Console.WriteLine($"设置MQTT:{ByteToString(sendData)}") If RadioButton1.Checked = True Then If GrdRCUHost.Rows > 1 Then _setcounts = CheckedCount() If _setcounts = 0 Then MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SelectTheHostToBeConfigured)}!") Exit Sub End If Else MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SelectTheInformationToBeDeliveredAndTheHost)}") End If For index = 1 To GrdRCUHost.Rows - 1 If GrdRCUHost.Cell(index, EnRCUHosts.IsCheck).Text = $"1" Then _RemoteIP = IPAddress.Parse(GrdRCUHost.Cell(index, EnRCUHosts.IPAddress).Text) SendPacket(sendData) End If Next Else SendPacket(sendData) End If _setcounts = 0 End Sub ''' ''' 获取 MQTT 数据 ''' ''' Private Function GetMQTTData(aliProductKeyB As Boolean, aliDevNameB As Boolean, aliDevKeyB As Boolean, aliReSessionB As Boolean, aliSubSessionB As Boolean, onlineTimeB As Boolean, reSsessionB As Boolean, subSessionB As Boolean, domainNameB As Boolean, clientIDB As Boolean, userNameB As Boolean, passwordB As Boolean, aliProductKey() As Byte, aliDevName() As Byte, aliDevKey() As Byte, aliReSession() As Byte, aliSubSession() As Byte, onlineTime() As Byte, reSsession() As Byte, subSession() As Byte, domainName() As Byte, clientID() As Byte, userName() As Byte, password() As Byte) Dim setCount As Byte = 0 Dim databuf As New List(Of Byte) If aliProductKeyB = True Then '阿里云产品密钥 setCount += 1 databuf.Add(&H1) databuf.AddRange(aliProductKey) End If If aliDevNameB = True Then '阿里云设备名称 setCount += 1 databuf.Add(&H2) databuf.AddRange(aliDevName) End If If aliDevKeyB = True Then '阿里云设备密钥 setCount += 1 databuf.Add(&H3) databuf.AddRange(aliDevKey) End If If aliReSessionB = True Then '阿里云发布会话 setCount += 1 databuf.Add(&H4) databuf.AddRange(aliReSession) End If If aliSubSessionB = True Then '阿里云订阅会话 setCount += 1 databuf.Add(&H5) databuf.AddRange(aliSubSession) End If If onlineTimeB = True Then '在线时间 setCount += 1 databuf.Add(&H6) databuf.AddRange(onlineTime) End If If reSsessionB = True Then '发布会话 setCount += 1 databuf.Add(&H7) databuf.AddRange(reSsession) End If If subSessionB = True Then '订阅会话 setCount += 1 databuf.Add(&H8) databuf.AddRange(subSession) End If If domainNameB = True Then '域名 setCount += 1 databuf.Add(&H9) databuf.AddRange(domainName) End If If clientIDB = True Then '客户端ID setCount += 1 databuf.Add(&HA) databuf.AddRange(clientID) End If If userNameB = True Then '用户名 setCount += 1 databuf.Add(&HB) databuf.AddRange(userName) End If If passwordB = True Then '密码 setCount += 1 databuf.Add(&HC) databuf.AddRange(password) End If databuf.Insert(0, setCount) Return databuf.ToArray End Function ''' ''' 获取 MQTT 网络数据 ''' ''' Private Function GetNetworkData(aliProductKeyB As Boolean, aliDevNameB As Boolean, aliDevKeyB As Boolean, aliReSessionB As Boolean, aliSubSessionB As Boolean, onlineTimeB As Boolean, reSsessionB As Boolean, subSessionB As Boolean, domainNameB As Boolean, clientIDB As Boolean, userNameB As Boolean, passwordB As Boolean, aliProductKey() As Byte, aliDevName() As Byte, aliDevKey() As Byte, aliReSession() As Byte, aliSubSession() As Byte, onlineTime() As Byte, reSsession() As Byte, subSession() As Byte, domainName() As Byte, clientID() As Byte, userName() As Byte, password() As Byte) Dim databuf As New List(Of Byte) databuf.Add(&H1) 'MQTT参数 If aliProductKeyB = True Then '阿里云产品密钥 Dim offset() As Byte = {&H0, &H0, &H0, &H0} '偏移地址 databuf.AddRange(offset) databuf.AddRange(aliProductKey) End If If aliDevNameB = True Then '阿里云设备名称 Dim offset() As Byte = {&HC, &H0, &H0, &H0} databuf.AddRange(offset) databuf.AddRange(aliDevName) End If If aliDevKeyB = True Then '阿里云设备密钥 Dim offset() As Byte = {&H4D, &H0, &H0, &H0} databuf.AddRange(offset) databuf.AddRange(aliDevKey) End If If aliReSessionB = True Then '阿里云发布会话 Dim offset() As Byte = {&H6E, &H0, &H0, &H0} databuf.AddRange(offset) databuf.AddRange(aliReSession) End If If aliSubSessionB = True Then '阿里云订阅会话 Dim offset() As Byte = {&HAF, &H0, &H0, &H0} databuf.AddRange(offset) databuf.AddRange(aliSubSession) End If If onlineTimeB = True Then '在线时间 Dim offset() As Byte = {&HF0, &H0, &H0, &H0} databuf.AddRange(offset) databuf.AddRange(onlineTime) End If If reSsessionB = True Then '发布会话 Dim offset() As Byte = {&HF2, &H0, &H0, &H0} databuf.AddRange(offset) databuf.AddRange(reSsession) End If If subSessionB = True Then '订阅会话 Dim offset() As Byte = {&H33, &H1, &H0, &H0} databuf.AddRange(offset) databuf.AddRange(subSession) End If If domainNameB = True Then '域名 Dim offset() As Byte = {&H74, &H1, &H0, &H0} databuf.AddRange(offset) databuf.AddRange(domainName) End If If clientIDB = True Then '客户端ID Dim offset() As Byte = {&HB5, &H1, &H0, &H0} databuf.AddRange(offset) databuf.AddRange(clientID) End If If userNameB = True Then '用户名 Dim offset() As Byte = {&HF6, &H1, &H0, &H0} databuf.AddRange(offset) databuf.AddRange(userName) End If If passwordB = True Then '密码 Dim offset() As Byte = {&H37, &H2, &H0, &H0} databuf.AddRange(offset) databuf.AddRange(password) End If Return databuf.ToArray End Function ''' ''' 获取MQTT单项数据 ''' ''' ''' Private Function GetMQTTSingleData(singleStr As String) As Byte() If singleStr = "" Then singleStr = 0 Dim data() As Byte = System.Text.Encoding.ASCII.GetBytes(singleStr) Dim databuf As New List(Of Byte) If RadioButton1.Checked = True Then '网络 databuf.AddRange(IntToByteHB(data.Length)) Else '串口 databuf.Add(data.Length) End If databuf.AddRange(data) Return databuf.ToArray End Function ''' ''' 获取MQTT单项数据 ''' ''' ''' Private Function GetMQTTSingleByte(singlebyte As Byte()) As Byte() Dim databuf As New List(Of Byte) databuf.Add(singlebyte.Length) databuf.Add(&H0) databuf.AddRange(singlebyte) Return databuf.ToArray End Function #Region "读取MQTT" ''' ''' 读取计数 ''' Private _readcounts As Integer = 0 ''' ''' 读取MQTT ''' ''' ''' Private Sub Button19_Click(sender As Object, e As EventArgs) Handles Button19.Click Dim aliProductKeyB As Boolean = CheckBox8.Checked Dim aliDevNameB As Boolean = CheckBox9.Checked Dim aliDevKeyB As Boolean = CheckBox10.Checked Dim aliReSessionB As Boolean = CheckBox14.Checked Dim aliSubSessionB As Boolean = CheckBox13.Checked Dim onlineTimeB As Boolean = CheckBox11.Checked Dim reSsessionB As Boolean = CheckBox22.Checked Dim subSessionB As Boolean = CheckBox17.Checked Dim domainNameB As Boolean = CheckBox15.Checked Dim clientIDB As Boolean = CheckBox29.Checked Dim userNameB As Boolean = CheckBox28.Checked Dim passwordB As Boolean = CheckBox27.Checked If aliProductKeyB = True OrElse aliDevNameB = True OrElse aliDevKeyB = True OrElse aliReSessionB = True OrElse aliSubSessionB = True OrElse onlineTimeB = True OrElse reSsessionB = True OrElse subSessionB = True OrElse domainNameB = True OrElse clientIDB = True OrElse userNameB = True OrElse passwordB = True Then Else MsgBox($"请选择要读取的MQTT信息项") Return End If Dim cmd As Byte Dim sendData As Byte() Dim data As Byte() = GetReadPortMQTTData(aliProductKeyB, aliDevNameB, aliDevKeyB, aliReSessionB, aliSubSessionB, onlineTimeB, reSsessionB, subSessionB, domainNameB, clientIDB, userNameB, passwordB) Dim networkDate As Byte() = GetReadNetworkData(aliProductKeyB, aliDevNameB, aliDevKeyB, aliReSessionB, aliSubSessionB, onlineTimeB, reSsessionB, subSessionB, domainNameB, clientIDB, userNameB, passwordB) If RadioButton1.Checked = True AndAlso _isNetWork = True Then cmd = &HD5 '网络MQTT_Cmd sendData = FillSendData(cmd, networkDate) '网络数据 ElseIf RadioButton2.Checked = True AndAlso _isSerialPort = True Then cmd = &HE '串口MQTT_Cmd sendData = FillModelsSerialPortTest(cmd, data) '串口数据 Else MsgBox($"非法读取") Return End If Console.WriteLine($"读取MQTT:{ByteToString(sendData)}") If RadioButton1.Checked = True Then If GrdRCUHost.Rows > 1 Then _readcounts = CheckedCount() If _readcounts = 0 Then MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SelectTheHostToBeConfigured)}!") Exit Sub End If Else MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SelectTheInformationToBeDeliveredAndTheHost)}") End If For index = 1 To GrdRCUHost.Rows - 1 If GrdRCUHost.Cell(index, EnRCUHosts.IsCheck).Text = $"1" Then _RemoteIP = IPAddress.Parse(GrdRCUHost.Cell(index, EnRCUHosts.IPAddress).Text) SendPacket(sendData) End If Next Else SendPacket(sendData) End If _readcounts = 0 End Sub ''' ''' 获取 MQTT 数据 ''' ''' Private Function GetReadPortMQTTData(aliProductKeyB As Boolean, aliDevNameB As Boolean, aliDevKeyB As Boolean, aliReSessionB As Boolean, aliSubSessionB As Boolean, onlineTimeB As Boolean, reSsessionB As Boolean, subSessionB As Boolean, domainNameB As Boolean, clientIDB As Boolean, userNameB As Boolean, passwordB As Boolean) Dim setCount As Byte = 0 Dim databuf As New List(Of Byte) If aliProductKeyB = True Then '阿里云产品密钥 setCount += 1 databuf.Add(&H1) End If If aliDevNameB = True Then '阿里云设备名称 setCount += 1 databuf.Add(&H2) End If If aliDevKeyB = True Then '阿里云设备密钥 setCount += 1 databuf.Add(&H3) End If If aliReSessionB = True Then '阿里云发布会话 setCount += 1 databuf.Add(&H4) End If If aliSubSessionB = True Then '阿里云订阅会话 setCount += 1 databuf.Add(&H5) End If If onlineTimeB = True Then '在线时间 setCount += 1 databuf.Add(&H6) End If If reSsessionB = True Then '发布会话 setCount += 1 databuf.Add(&H7) End If If subSessionB = True Then '订阅会话 setCount += 1 databuf.Add(&H8) End If If domainNameB = True Then '域名 setCount += 1 databuf.Add(&H9) End If If clientIDB = True Then '客户端ID setCount += 1 databuf.Add(&HA) End If If userNameB = True Then '用户名 setCount += 1 databuf.Add(&HB) End If If passwordB = True Then '密码 setCount += 1 databuf.Add(&HC) End If databuf.Insert(0, setCount) Return databuf.ToArray End Function ''' ''' 获取 MQTT 数据 ''' ''' Private Function GetReadNetworkData(aliProductKeyB As Boolean, aliDevNameB As Boolean, aliDevKeyB As Boolean, aliReSessionB As Boolean, aliSubSessionB As Boolean, onlineTimeB As Boolean, reSsessionB As Boolean, subSessionB As Boolean, domainNameB As Boolean, clientIDB As Boolean, userNameB As Boolean, passwordB As Boolean) Dim databuf As New List(Of Byte) databuf.Add(&H1) 'MQTT参数 If aliProductKeyB = True Then '阿里云产品密钥 Dim offset() As Byte = {&H0, &H0, &H0, &H0} '偏移地址 databuf.AddRange(offset) databuf.AddRange(IntToByteHB(12)) End If If aliDevNameB = True Then '阿里云设备名称 Dim offset() As Byte = {&HC, &H0, &H0, &H0} databuf.AddRange(offset) databuf.AddRange(IntToByteHB(65)) End If If aliDevKeyB = True Then '阿里云设备密钥 Dim offset() As Byte = {&H4D, &H0, &H0, &H0} databuf.AddRange(offset) databuf.AddRange(IntToByteHB(33)) End If If aliReSessionB = True Then '阿里云发布会话 Dim offset() As Byte = {&H6E, &H0, &H0, &H0} databuf.AddRange(offset) databuf.AddRange(IntToByteHB(65)) End If If aliSubSessionB = True Then '阿里云订阅会话 Dim offset() As Byte = {&HAF, &H0, &H0, &H0} databuf.AddRange(offset) databuf.AddRange(IntToByteHB(65)) End If If onlineTimeB = True Then '在线时间 Dim offset() As Byte = {&HF0, &H0, &H0, &H0} databuf.AddRange(offset) databuf.AddRange(IntToByteHB(2)) End If If reSsessionB = True Then '发布会话 Dim offset() As Byte = {&HF2, &H0, &H0, &H0} databuf.AddRange(offset) databuf.AddRange(IntToByteHB(65)) End If If subSessionB = True Then '订阅会话 Dim offset() As Byte = {&H33, &H1, &H0, &H0} databuf.AddRange(offset) databuf.AddRange(IntToByteHB(65)) End If If domainNameB = True Then '域名 Dim offset() As Byte = {&H74, &H1, &H0, &H0} databuf.AddRange(offset) databuf.AddRange(IntToByteHB(65)) End If If clientIDB = True Then '客户端ID Dim offset() As Byte = {&HB5, &H1, &H0, &H0} databuf.AddRange(offset) databuf.AddRange(IntToByteHB(65)) End If If userNameB = True Then '用户名 Dim offset() As Byte = {&HF6, &H1, &H0, &H0} databuf.AddRange(offset) databuf.AddRange(IntToByteHB(65)) End If If passwordB = True Then '密码 Dim offset() As Byte = {&H37, &H2, &H0, &H0} databuf.AddRange(offset) databuf.AddRange(IntToByteHB(65)) End If Return databuf.ToArray End Function #End Region #Region "选择MQTT" Private Sub CheckBox8_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox8.CheckedChanged If CheckBox8.Checked = True Then CheckBox8.Checked = True CheckBox9.Checked = False CheckBox10.Checked = False CheckBox14.Checked = False CheckBox13.Checked = False CheckBox11.Checked = False CheckBox22.Checked = False CheckBox17.Checked = False CheckBox15.Checked = False CheckBox29.Checked = False CheckBox28.Checked = False CheckBox27.Checked = False End If End Sub Private Sub CheckBox9_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox9.CheckedChanged If CheckBox9.Checked = True Then CheckBox8.Checked = False CheckBox9.Checked = True CheckBox10.Checked = False CheckBox14.Checked = False CheckBox13.Checked = False CheckBox11.Checked = False CheckBox22.Checked = False CheckBox17.Checked = False CheckBox15.Checked = False CheckBox29.Checked = False CheckBox28.Checked = False CheckBox27.Checked = False End If End Sub Private Sub CheckBox10_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox10.CheckedChanged If CheckBox10.Checked = True Then CheckBox8.Checked = False CheckBox9.Checked = False CheckBox10.Checked = True CheckBox14.Checked = False CheckBox13.Checked = False CheckBox11.Checked = False CheckBox22.Checked = False CheckBox17.Checked = False CheckBox15.Checked = False CheckBox29.Checked = False CheckBox28.Checked = False CheckBox27.Checked = False End If End Sub Private Sub CheckBox14_CheckedChanged_1(sender As Object, e As EventArgs) Handles CheckBox14.CheckedChanged If CheckBox14.Checked = True Then CheckBox8.Checked = False CheckBox9.Checked = False CheckBox10.Checked = False CheckBox14.Checked = True CheckBox13.Checked = False CheckBox11.Checked = False CheckBox22.Checked = False CheckBox17.Checked = False CheckBox15.Checked = False CheckBox29.Checked = False CheckBox28.Checked = False CheckBox27.Checked = False End If End Sub Private Sub CheckBox13_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox13.CheckedChanged If CheckBox13.Checked = True Then CheckBox8.Checked = False CheckBox9.Checked = False CheckBox10.Checked = False CheckBox14.Checked = False CheckBox13.Checked = True CheckBox11.Checked = False CheckBox22.Checked = False CheckBox17.Checked = False CheckBox15.Checked = False CheckBox29.Checked = False CheckBox28.Checked = False CheckBox27.Checked = False End If End Sub Private Sub CheckBox11_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox11.CheckedChanged If CheckBox11.Checked = True Then CheckBox8.Checked = False CheckBox9.Checked = False CheckBox10.Checked = False CheckBox14.Checked = False CheckBox13.Checked = False CheckBox11.Checked = True CheckBox22.Checked = False CheckBox17.Checked = False CheckBox15.Checked = False CheckBox29.Checked = False CheckBox28.Checked = False CheckBox27.Checked = False End If End Sub Private Sub CheckBox22_CheckedChanged_1(sender As Object, e As EventArgs) Handles CheckBox22.CheckedChanged If CheckBox22.Checked = True Then CheckBox8.Checked = False CheckBox9.Checked = False CheckBox10.Checked = False CheckBox14.Checked = False CheckBox13.Checked = False CheckBox11.Checked = False CheckBox22.Checked = True CheckBox17.Checked = False CheckBox15.Checked = False CheckBox29.Checked = False CheckBox28.Checked = False CheckBox27.Checked = False End If End Sub Private Sub CheckBox17_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox17.CheckedChanged If CheckBox17.Checked = True Then CheckBox8.Checked = False CheckBox9.Checked = False CheckBox10.Checked = False CheckBox14.Checked = False CheckBox13.Checked = False CheckBox11.Checked = False CheckBox22.Checked = False CheckBox17.Checked = True CheckBox15.Checked = False CheckBox29.Checked = False CheckBox28.Checked = False CheckBox27.Checked = False End If End Sub Private Sub CheckBox15_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox15.CheckedChanged If CheckBox15.Checked = True Then CheckBox8.Checked = False CheckBox9.Checked = False CheckBox10.Checked = False CheckBox14.Checked = False CheckBox13.Checked = False CheckBox11.Checked = False CheckBox22.Checked = False CheckBox17.Checked = False CheckBox15.Checked = True CheckBox29.Checked = False CheckBox28.Checked = False CheckBox27.Checked = False End If End Sub Private Sub CheckBox29_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox29.CheckedChanged If CheckBox29.Checked = True Then CheckBox8.Checked = False CheckBox9.Checked = False CheckBox10.Checked = False CheckBox14.Checked = False CheckBox13.Checked = False CheckBox11.Checked = False CheckBox22.Checked = False CheckBox17.Checked = False CheckBox15.Checked = False CheckBox29.Checked = True CheckBox28.Checked = False CheckBox27.Checked = False End If End Sub Private Sub CheckBox28_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox28.CheckedChanged If CheckBox28.Checked = True Then CheckBox8.Checked = False CheckBox9.Checked = False CheckBox10.Checked = False CheckBox14.Checked = False CheckBox13.Checked = False CheckBox11.Checked = False CheckBox22.Checked = False CheckBox17.Checked = False CheckBox15.Checked = False CheckBox29.Checked = False CheckBox28.Checked = True CheckBox27.Checked = False End If End Sub Private Sub CheckBox27_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox27.CheckedChanged If CheckBox27.Checked = True Then CheckBox8.Checked = False CheckBox9.Checked = False CheckBox10.Checked = False CheckBox14.Checked = False CheckBox13.Checked = False CheckBox11.Checked = False CheckBox22.Checked = False CheckBox17.Checked = False CheckBox15.Checked = False CheckBox29.Checked = False CheckBox28.Checked = False CheckBox27.Checked = True End If End Sub 'Todo:思考优解 Private Sub SetMQTTState(ck1 As CheckBox, ck2 As CheckBox, ck3 As CheckBox, ck4 As CheckBox, ck5 As CheckBox, ck6 As CheckBox, ck7 As CheckBox, ck8 As CheckBox, ck9 As CheckBox, ck10 As CheckBox, ck11 As CheckBox, ck12 As CheckBox) If ck1.Checked = True Then ck1.Checked = False ck2.Checked = False ck3.Checked = False ck4.Checked = False ck5.Checked = False ck6.Checked = False ck7.Checked = False ck8.Checked = False ck9.Checked = False ck10.Checked = False ck11.Checked = False ck12.Checked = True End If End Sub #End Region #End Region #Region "设置打印调试信息" ''' ''' 系统信息 ''' ''' ''' Private Sub CheckBox26_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox26.CheckedChanged SystemInfo() End Sub ''' ''' 网络信息 ''' ''' ''' Private Sub CheckBox25_CheckedChanged_1(sender As Object, e As EventArgs) Handles CheckBox25.CheckedChanged NetworkInfo() End Sub ''' ''' 设备信息 ''' ''' ''' Private Sub CheckBox24_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox24.CheckedChanged EquipmentInfo() End Sub ''' ''' 逻辑信息 ''' ''' ''' Private Sub CheckBox23_CheckedChanged_1(sender As Object, e As EventArgs) Handles CheckBox23.CheckedChanged LogicalInfo() End Sub ''' ''' 临时信息 ''' ''' ''' Private Sub CheckBox7_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox7.CheckedChanged TemporaryInfo() End Sub #End Region #Region "设置读取核心参数" ''' 主机信息 Private _hostInfo() As String = {"BLV-C1", "BLV-C1F", "BLV-C2", "BLV-PDU-A8"} ''' 主板信息 Private _amdInfo() As String = {"BLV-C5", "BLV-C6", "BLV-C7", "BLV-C8", "BLV-C12", "BLV-PDU-A8"} ''' ''' 初始化信息 ''' Private Sub InitHostsInfo() ComboBox9.Items.Clear() '主机型号 ComboBox9.Items.AddRange(_hostInfo) If ComboBox9.Items.Count > 0 Then ComboBox9.SelectedIndex = 0 ComboBox8.Items.Clear() '主板型号 ComboBox8.Items.AddRange(_amdInfo) If ComboBox8.Items.Count > 0 Then ComboBox8.SelectedIndex = 0 End Sub ''' ''' 设置核心板参数 ''' ''' ''' Private Sub Button31_Click(sender As Object, e As EventArgs) Handles Button31.Click '组包 Dim cmd As Byte = &HB Dim data() As Byte = GetSetInfo(ComboBox9.Text, ComboBox8.Text, CheckBox34.Checked, CheckBox35.Checked) Dim sendData() As Byte = FillModelsSerialPortTest(cmd, data) Console.WriteLine($"设置核心参数信息:{ByteToString(sendData)}") '串口发送 SendPortData(sendData) End Sub ''' ''' 获取设置信息 ''' ''' Private Function GetSetInfo(hostInfo As String, amdInfo As String, hostInfoB As Boolean, amdInfoB As Boolean) As Byte() Dim data As New List(Of Byte) Dim host() As Byte = System.Text.Encoding.ASCII.GetBytes(hostInfo) Dim amd() As Byte = System.Text.Encoding.ASCII.GetBytes(amdInfo) Dim hosts(63) As Byte Dim amds(63) As Byte Dim isSet As Byte = &H0 If hostInfoB = True Then Array.Copy(host, 0, hosts, 0, host.Length) isSet = isSet Or &H1 End If If amdInfoB = True Then Array.Copy(amd, 0, amds, 0, amd.Length) isSet = isSet Or &H2 End If data.Add(isSet) data.AddRange(hosts) data.AddRange(amds) Return data.ToArray End Function ''' ''' 读取核心参数 ''' ''' ''' Private Sub Button30_Click(sender As Object, e As EventArgs) Handles Button30.Click Label58.Text = Nothing Label56.Text = Nothing Dim cmd As Byte = &HC Dim data(0) As Byte data(0) = &H0 Dim sendData() As Byte = FillModelsSerialPortTest(cmd, data) Console.WriteLine($"读取核心参数信息:{ByteToString(sendData)}") '串口发送 SendPortData(sendData) End Sub #End Region #End Region #Region "批量数据下发" #Region "刷新云数据" ''' ''' 批量数据枚举 ''' Enum EnBatchData ''' ID ID ''' 勾选 IsCheck ''' 房号 RoomNumber ''' MAC MAC ''' IP地址 IPAddress '''' 房间备注 'RoomRemarks '''' 房号ID 'RoomNumberId '''' 房型ID 'RoomTypeId '''' 端口号 'Port '''' 网关 'Gateway '''' 子网掩码 'Subnet '''' DNS 'DNS '''' 锁定 'Lock '''' 授权时间 'PrivilegedTime End Enum ''' ''' 批量数据表格列名 ''' Private _batchDataCols() As String = {$"空", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Ticked)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomNumberRemark)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.MAC)}", $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.IPAddress)}"} '$"{LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomRemark)}", '$"{LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomNumberID)}", '$"{LanguageData.StringList(MultiLanguageDAL.StringEnum.RoomTypeID)}", '$"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Port)}", '$"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Gateway)}", '$"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SubnetMask)}", '$"{LanguageData.StringList(MultiLanguageDAL.StringEnum.DNS)}", '$"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Lock)}", '$"{LanguageData.StringList(MultiLanguageDAL.StringEnum.PrivilegedTime)}" ''' ''' 初始化批量下发表格数据 ''' Private Sub InitBatchIssuedTableData() GrdBatchData.DisplayRowNumber = True GrdBatchData.Cols = _batchDataCols.Length GrdBatchData.Rows = 1 For index = 1 To GrdBatchData.Cols - 1 With GrdBatchData.Cell(0, index) .Text = _batchDataCols(index) .BackColor = Color.LightGray .ForeColor = Color.Blue .Font = New Font($"Arial", 9, FontStyle.Bold) End With 'index = EnBatchData.DNS OrElse 'index = EnBatchData.Gateway OrElse 'index = EnBatchData.Subnet OrElse With GrdBatchData.Column(index) If index = EnBatchData.MAC OrElse index = EnBatchData.IPAddress Then .Alignment = FlexCell.AlignmentEnum.CenterCenter .Width = 120 ElseIf index = EnBatchData.RoomNumber Then .Alignment = FlexCell.AlignmentEnum.CenterCenter .Width = 100 Else .Alignment = FlexCell.AlignmentEnum.CenterCenter .Width = 50 End If If index = 1 Then .CellType = FlexCell.CellTypeEnum.CheckBox End If End With Next GrdBatchData.Column(0).Width = 30 GrdBatchData.SelectionMode = FlexCell.SelectionModeEnum.ByRow '设置选中行 'GrdBatchData.FrozenCols = 7 GrdBatchData.AllowUserSort = True End Sub ''' ''' 刷新云数据 ''' 根据当前选中酒店查询 ''' ''' ''' Private Sub Button29_Click(sender As Object, e As EventArgs) Handles Button29.Click GrdBatchData.NewFile() InitBatchIssuedTableData() _QueryBatchDataIndex = 1 Dim projectCode As String = _projectNumber Console.WriteLine($"批量查询的项目编码:{projectCode}") If _projectNumber = LanguageData.StringList(MultiLanguageDAL.StringEnum.ProjectCode) Then MsgBox($"请选择酒店!") Return End If 'Dim dtUser As DataTable = _backstageData.GetBatchDataInfo(projectCode) Dim dtUser As DataTable = GetCloudData(projectCode) For index = 0 To dtUser.Rows.Count - 1 Dim RoomNumber As String = String.Empty Dim MAC As String = String.Empty Dim IPAddress As String = String.Empty 'Dim Gateway As String = String.Empty 'Dim Subnet As String = String.Empty 'Dim DNS As String = String.Empty RoomNumber = GetBatchItemData(RoomNumber, dtUser(index)(0)) MAC = GetBatchItemData(MAC, dtUser(index)(1)) IPAddress = GetBatchItemData(IPAddress, dtUser(index)(2)) 'Gateway = GetBatchItemData(Port, dtUser(index)(7)) 'Subnet = GetBatchItemData(Subnet, dtUser(index)(8)) 'DNS = GetBatchItemData(DNS, dtUser(index)(9)) 'RefreshBatchDataTable(RoomNumber, MAC, IPAddress, Gateway, Subnet, Dns) RefreshBatchDataTable(RoomNumber, MAC, IPAddress) Next End Sub ''' ''' 获取云端数据 ''' ''' Private Function GetCloudData(projectNumber As String) Dim dtUser As New DataTable dtUser.Columns.Add("房号") dtUser.Columns.Add("MAC") dtUser.Columns.Add("IP") Dim creatDate As String If _hotelListData.ContainsKey(projectNumber) = True Then creatDate = _hotelListData(projectNumber).CreatDate If DealHostListInterfaceInfo(projectNumber, creatDate) = True Then For row = 0 To _hostListData.Keys.Count - 1 dtUser.Rows.Add("") dtUser(row)(0) = _hostListData(row).RoomNumber dtUser(row)(1) = _hostListData(row).MAC dtUser(row)(2) = _hostListData(row).IP Next End If End If Return dtUser End Function Private Function GetBatchItemData(items As String, itemVar As Object) If TypeOf itemVar Is DBNull Then items = "" Else items = itemVar End If Return items End Function Private Sub RefreshBatchDataTable(RoomNumber As String, MAC As String, IPAddress As String) GrdBatchData.AddItem("") GrdBatchData.Cell(_QueryBatchDataIndex, EnBatchData.RoomNumber).Text = RoomNumber GrdBatchData.Cell(_QueryBatchDataIndex, EnBatchData.MAC).Text = MAC GrdBatchData.Cell(_QueryBatchDataIndex, EnBatchData.IPAddress).Text = IPAddress _QueryBatchDataIndex += 1 End Sub 'Private Sub RefreshBatchDataTable(RoomNumber As String, MAC As String, IPAddress As String, RoomRemarks As String, RoomNumberId As String, RoomTypeId As String, Port As String, Gateway As String, Subnet As String, DNS As String, Lock As String, PrivilegedTime As String) ' GrdBatchData.AddItem("") ' GrdBatchData.Cell(_QueryBatchDataIndex, EnBatchData.RoomNumber).Text = RoomNumber ' GrdBatchData.Cell(_QueryBatchDataIndex, EnBatchData.MAC).Text = MAC ' GrdBatchData.Cell(_QueryBatchDataIndex, EnBatchData.IPAddress).Text = IPAddress ' GrdBatchData.Cell(_QueryBatchDataIndex, EnBatchData.Gateway).Text = Gateway ' GrdBatchData.Cell(_QueryBatchDataIndex, EnBatchData.Subnet).Text = Subnet ' GrdBatchData.Cell(_QueryBatchDataIndex, EnBatchData.DNS).Text = DNS ' _QueryBatchDataIndex += 1 'End Sub #End Region #Region "比对数据" Private _localData As New Dictionary(Of String, List(Of Integer)) Private _remoteData As New Dictionary(Of String, List(Of Integer)) Private Sub Button32_Click(sender As Object, e As EventArgs) Handles Button32.Click If GrdRCUHost.Rows = 1 Then Return If GrdBatchData.Rows = 1 Then Return _rcu = 0 _batch = 0 ComparisonData() End Sub ''' ''' 比对数据 ''' Private Sub ComparisonData() Dim localMAC As String Dim remoteMAC As String For i = 1 To GrdRCUHost.Rows - 1 localMAC = GrdRCUHost.Cell(i, EnRCUHosts.MAC).Text For j = 1 To GrdBatchData.Rows - 1 remoteMAC = GrdBatchData.Cell(j, EnBatchData.MAC).Text If GetComparison(localMAC, remoteMAC) = True Then 'Console.WriteLine($"比对:{_countCom}次 ---- 本地MAC:{localMAC} 云端MAC:{remoteMAC} 匹配成功!") 'GrdRCUHost.Cell(i, EnRCUHosts.MAC).BackColor = Color.LightCyan GrdRCUHost.Range(i, 1, i, GrdRCUHost.Cols - 1).BackColor = Color.LightCyan GrdBatchData.Range(j, 1, j, GrdBatchData.Cols - 1).BackColor = Color.LightCyan 'Console.WriteLine($"比对 ---- 本地房号:{GrdRCUHost.Cell(i, EnRCUHosts.RoomNumber).Text} 云端房号:{GrdBatchData.Cell(j, EnBatchData.RoomNumber).Text} ") If GetComparison(GrdRCUHost.Cell(i, EnRCUHosts.RoomNumber).Text, GrdBatchData.Cell(j, EnBatchData.RoomNumber).Text) = True Then GrdRCUHost.Cell(i, EnRCUHosts.RoomNumber).ForeColor = Color.Green Else GrdRCUHost.Cell(i, EnRCUHosts.RoomNumber).ForeColor = Color.Red End If If GetComparison(GrdRCUHost.Cell(i, EnRCUHosts.IPAddress).Text, GrdBatchData.Cell(j, EnBatchData.IPAddress).Text) = True Then GrdRCUHost.Cell(i, EnRCUHosts.IPAddress).ForeColor = Color.Green Else GrdRCUHost.Cell(i, EnRCUHosts.IPAddress).ForeColor = Color.Red End If GrdRCUHost.Row(i).Position = 1 GrdBatchData.Row(j).Position = 1 Exit For End If Next Next End Sub ''' ''' 获取比对结果 ''' ''' ''' ''' Private Function GetComparison(localMAC As String, remoteMAC As String) If String.IsNullOrWhiteSpace(localMAC) OrElse String.IsNullOrWhiteSpace(remoteMAC) Then Return False If String.Compare(localMAC, remoteMAC) = 0 Then Return True End If Return False End Function ''' ''' 批量表格点击事件 ''' ''' ''' Private Sub GrdBatchData_Click(Sender As Object, e As EventArgs) Handles GrdBatchData.Click If GrdBatchData.ActiveCell.Row > 0 Then SetRCUTableData(GrdBatchData.Cell(GrdBatchData.ActiveCell.Row, EnBatchData.MAC).Text) End If End Sub Private _rcu As Integer = 0 ''' ''' 设置RCU表格数据显示 ''' ''' Private Sub SetRCUTableData(mac As String) Dim localMAC As String For i = 1 To GrdRCUHost.Rows - 1 localMAC = GrdRCUHost.Cell(i, EnRCUHosts.MAC).Text If GetComparison(localMAC, mac) = True Then If GrdBatchData.ActiveCell.Row <> _batch Then GrdRCUHost.Range(_batch, 1, _batch, GrdRCUHost.Cols - 1).BackColor = Color.LightCyan GrdBatchData.Range(_batch, 1, _batch, GrdBatchData.Cols - 1).BackColor = Color.LightCyan End If GrdRCUHost.Range(_rcu, 1, _rcu, GrdRCUHost.Cols - 1).BackColor = Color.LightCyan GrdRCUHost.Range(i, 1, i, GrdRCUHost.Cols - 1).BackColor = Color.LightSkyBlue _rcu = i Exit For 'Else 'GrdRCUHost.Range(i, 1, i, GrdRCUHost.Cols - 1).BackColor = Color.LightCyan End If Next End Sub #End Region #Region "批量配置" ''' ''' 勾选表格信息 ''' ''' ''' Private Sub CheckBox30_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox30.CheckedChanged Dim check As Integer If CheckBox30.Checked = True Then check = 1 Else check = 0 End If For index = 1 To GrdBatchData.Rows - 1 GrdBatchData.Cell(index, EnBatchData.IsCheck).Text = $"{check}" Next End Sub ''' ''' 批量配置 ''' ''' ''' Private Sub Button33_Click(sender As Object, e As EventArgs) Handles Button33.Click If GrdBatchData.Rows > 1 Then Dim localCount As Integer = CheckedCount() Dim batchCount As Integer = GetLocalTableCheckCount() If localCount > 1 AndAlso batchCount > 1 AndAlso localCount = batchCount Then For index = 1 To GrdBatchData.Rows - 1 If GetComparison(GrdRCUHost.Cell(index, EnRCUHosts.MAC).Text, GrdBatchData.Cell(index, EnBatchData.MAC).Text) = True Then If GrdBatchData.Cell(index, EnBatchData.IsCheck).Text = $"1" Then _RemoteIP = IPAddress.Parse(GrdBatchData.Cell(index, EnBatchData.IPAddress).Text) '设置云端信息到主机 Dim roomNumber As String = GrdBatchData.Cell(index, EnBatchData.RoomNumber).Text Dim ipAddr As String = GrdBatchData.Cell(index, EnBatchData.IPAddress).Text SetCloudInfoToHosts(roomNumber, ipAddr) End If End If Next Else MsgBox($"两个表格勾选数量不匹配且至少选择一个:主机表:{localCount} 个 云端表:{batchCount} 个") End If Else MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SelectTheInformationToBeDeliveredAndTheHost)}") End If End Sub ''' ''' 获取批量表格勾选个数 ''' ''' Private Function GetLocalTableCheckCount() Dim count As Integer = 0 For index = 1 To GrdBatchData.Rows - 1 If GrdBatchData.Cell(index, EnBatchData.IsCheck).Text = $"1" Then count += 1 End If Next Return count End Function ''' ''' 设置云端信息到主机 ''' Private Sub SetCloudInfoToHosts(roomNumber As String, ipAddr As String) Dim cmd As Byte = &H31 Dim data As Byte() = GetSetCloudSendData(roomNumber, ipAddr) Dim sendData As Byte() = FillSendData(cmd, data) Console.WriteLine($"设置云端信息到主机:{ByteToString(sendData)}") SendUDPData(sendData) End Sub ''' ''' 获取设置云端发送数据 ''' ''' ''' ''' Private Function GetSetCloudSendData(roomNumber As String, ipAddr As String) As Byte() Dim roomNumbers As Byte() = GetRoomNumber(roomNumber) Dim ipAddress As Byte() = GetCloudIPAddr(ipAddr) Dim count As Byte = &H5 Dim data As New List(Of Byte) data.Add(count) data.AddRange(roomNumbers) data.AddRange(ipAddress) Return data.ToArray End Function ''' ''' 获取房号 ''' ''' ''' Private Function GetRoomNumber(roomNumber As String) As Byte() Dim roomNaddr1() As Byte = {&H0, &H1, &H0, &H0} '房号偏移地址 Dim roomNaddr2() As Byte = {&H4, &H1, &H0, &H0} '房号偏移地址 Dim roomNaddr3() As Byte = {&H8, &H1, &H0, &H0} '房号偏移地址 Dim roomNaddr4() As Byte = {&HC, &H1, &H0, &H0} '房号偏移地址 Dim roomNum() As Byte Dim roomNums(15) As Byte roomNum = System.Text.Encoding.GetEncoding("GBK").GetBytes(roomNumber) Array.Copy(roomNum, 0, roomNums, 0, roomNum.Length) Dim databuf As New List(Of Byte) Dim roomda(3) As Byte Array.Copy(roomNums, 0, roomda, 0, roomda.Length) databuf.AddRange(roomNaddr1) databuf.AddRange(roomda) Array.Copy(roomNums, 4, roomda, 0, roomda.Length) databuf.AddRange(roomNaddr2) databuf.AddRange(roomda) Array.Copy(roomNums, 8, roomda, 0, roomda.Length) databuf.AddRange(roomNaddr3) databuf.AddRange(roomda) Array.Copy(roomNums, 12, roomda, 0, roomda.Length) databuf.AddRange(roomNaddr4) databuf.AddRange(roomda) Return databuf.ToArray End Function ''' ''' 获取云端数据要设置主机的IP地址 ''' ''' ''' Private Function GetCloudIPAddr(ipAddr As String) As Byte() Dim ip() As String = ipAddr.Split($".") Dim databuf As New List(Of Byte) databuf.Add(&H0) 'IP地址 databuf.Add(&H0) databuf.Add(&H0) databuf.Add(&H0) databuf.Add(ip(0)) databuf.Add(ip(1)) databuf.Add(ip(2)) databuf.Add(ip(3)) Return databuf.ToArray End Function #End Region #End Region #Region "关闭主窗体" ''' ''' 关闭窗体 ''' ''' ''' 'Private Sub FrmCSeriesConfig_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing ' If _connectStatus = True Then ' _connectStatus = False ' _socket.Shutdown(SocketShutdown.Both) ' _socket.Close() ' _receiveThread.Abort() ' End If ' If _BtnTextThread IsNot Nothing Then _BtnTextThread.Abort() ' _SqlServer.ConnClose() ' My.Settings.ProjectCode = _projectNumber ' My.Settings.HotelName = _HotelName ' My.Settings.UserName = _userNames ' My.Settings.Save() ' FrmCSeriesConfig_FormClosing() ' If _blvC5TestForm IsNot Nothing Then _blvC5TestForm.Close() ' If _blvC12TestForm IsNot Nothing Then _blvC12TestForm.Close() 'End Sub Public Sub FrmCSeriesConfig_Closing() 'sender As Object, e As CancelEventArgs) If _connectStatus = True Then _connectStatus = False _socket.Shutdown(SocketShutdown.Both) _socket.Close() _receiveThread.Abort() End If If _BtnTextThread IsNot Nothing Then _BtnTextThread.Abort() _SqlServer.ConnClose() My.Settings.ProjectCode = _projectNumber My.Settings.CHotelName = _HotelName My.Settings.UserName = _userNames My.Settings.Save() If _blvC5TestForm IsNot Nothing Then _blvC5TestForm.Close() If _blvC12TestForm IsNot Nothing Then _blvC12TestForm.Close() FrmCSeriesConfig_FormClosing() Close() End Sub Private Sub CBoMandateEndTime_CheckedChanged(sender As Object, e As EventArgs) Handles CBoMandateEndTime.CheckedChanged If CBoMandateEndTime.Checked Then '"yyyy-MM-dd HH:mm:ss.fff Now.Month.ToString.PadLeft(0) ' Console .WriteLine (date.) Dim str As String = $"{Now.Year + 80}-{ Now.Month.ToString.PadLeft(2, "0") }-{Now.Day.ToString.PadLeft(2, "0")} {Now.Hour.ToString.PadLeft(2, "0") }:{Now.Minute.ToString.PadLeft(2, "0")}:{Now.Second.ToString.PadLeft(2, "0") }" 'Date.Parse(index.Item("DateTime")).ToString("yyyy-MM-dd HH:mm:ss") DateTimePicker2.Value = Date.Parse(str) DateTimePicker2.Enabled = True DateTimePicker2.Visible = True End If End Sub Private Sub CBoRoomTpRemark_CheckedChanged(sender As Object, e As EventArgs) Handles CBoRoomTpRemark.CheckedChanged If CBoRoomTpRemark.Checked And Not CBoRoomNuRemark.Checked Then Network_cke.Checked = False Network_cke.Enabled = False Else ' Network_cke.Enabled = True End If If CBoRoomTpRemark.Checked Then Getfile_btn.Enabled = True CBoRoomNuRemark.Enabled = True Else Getfile_btn.Enabled = False CBoRoomNuRemark.Enabled = False CBoRoomNuRemark.Checked = False End If End Sub Public DownloadRoonTypeFile As New Dictionary(Of String, String) Private Sub Getfile_btn_Click(sender As Object, e As EventArgs) Handles Getfile_btn.Click If String.IsNullOrEmpty(ComboBox16.Text) Then MsgBox("未选择房型") Else '获取 'Dim li As List(Of Integer) = CheckedCount(True) 'If li.Count = 1 Then ' Dim tabrow As Integer = li.Item(0) ' Dim laver As String = getlauncherver(GrdRCUHost.Cell(tabrow, EnRCUHosts.Launcher).Text.Trim) ' If String.IsNullOrEmpty(laver) Then ' laver = "L2" ' End If DownloadRoonTypeFile.Clear() ComboBox30.Items.Clear() TextBox63.Text = "" GetRoomTypeFile(_projectNumber, ComboBox16.Text) 'Dim hexquery = From filename As String In DownloadRoonTypeFile.Keys ' Where filename.ToLower.Contains(".hex") ' Select filename For Each filename In DownloadRoonTypeFile.Keys If filename.ToLower.Contains(".dat") Then TextBox63.Text = filename TextBox63.Tag = DownloadRoonTypeFile.Item(filename) ElseIf filename.ToLower.Contains(".hex") Then ComboBox30.Items.Add(filename) ComboBox30.SelectedIndex = 0 Else Continue For End If Next 'Else ' MsgBox("未勾选主机或勾选多个主机。") 'End If End If End Sub Public Function GetRoomTypeFile(Projectnumber As String, RoomType As String) As Boolean Dim sqlstr As String = $"select a.* ,b.PROJECT_NUMBER,b.HOTEL_NAME_CN ,c.HOTEL_GROUP_NAME FROM tbl_room_type_list a left JOIN tbl_hotel_basic_info b on a.HOTEL_OLD_ID =b.IDOLD left JOIN tbl_hotel_group_info c on c.HOTEL_GROUP_OLD_ID =b.HOTEL_OLD_GROUP where b.PROJECT_NUMBER='{Projectnumber}' and a.ROOM_TYPE_NAME='{RoomType}' and a.IsDel='0'" Dim dic = _SqlServer.SelectTable(sqlstr) If IsNothing(dic) OrElse dic.Count < 1 Then MsgBox("获取文件失败所选房型没上传固件(APP)或配置,请检查网络或联系管理员") Return False End If Dim loadfiledir As String Dim loadfilepath As String Dim serverfilepath As String loadfiledir = Application.StartupPath '下载app loadfilepath = loadfiledir & "\CStool\Firmware\" & $"{dic.Item("PROJECT_NUMBER")}-{dic.Item("HOTEL_NAME_CN")}\{ComboBox16.Text}\" serverfilepath = "\Data\Firmware\" If Not DowFirmware(loadfilepath, serverfilepath, dic) Then MsgBox("该房型固件文件下载错误,请查看网络或联系开发者") Return False End If If dic.Item("APPTYPE").Equals("Hex_Code") Then MsgBox("此项目,APP固件类型包含了配置逻辑,无需配置逻辑文件,只下发APP固件即可") Return True End If loadfilepath = loadfiledir & "\CStool\Config\" & $"{dic.Item("PROJECT_NUMBER")}-{dic.Item("HOTEL_NAME_CN")}\{ComboBox16.Text}\{dic.Item("CONFIG_BIN")}" serverfilepath = "\Data\Config\" & $"{dic.Item("HOTEL_GROUP_NAME").Trim}\{dic.Item("PROJECT_NUMBER")}-{dic.Item("HOTEL_NAME_CN")}\{dic.Item("CONFIG_BIN")}" Dim md5 As String = $"{dic.Item("CONFIG_BIN_MD5")}" '下载dat文件 If String.IsNullOrEmpty(dic.Item("CONFIG_BIN")) Then MsgBox("该房型未上传配置文件到数据库,请先上传文件再下载。") Return False End If If Not CSFileDownload(loadfilepath, serverfilepath, md5) Then MsgBox("该房型DAT文件下载错误,请查看网络或联系开发者") Return False End If Return True End Function Private Function DowFirmware(loadfilepath As String, serverfilepath As String, dic As Dictionary(Of String, String)) As Boolean Dim md5 As String Dim filename As String Dim nmd5 As String Dim nfilename As String If dic.Item("APPTYPE").Equals("Hex_Code") Then md5 = dic.Item("Hex_Code_For_L2_MD5") filename = dic.Item("Hex_Code_For_L2") nmd5 = dic.Item("Hex_Code_For_L4_MD5") nfilename = dic.Item("Hex_Code_For_L4") Else md5 = dic.Item("App_Cfg_For_L2_MD5") filename = dic.Item("App_Cfg_For_L2") nmd5 = dic.Item("App_Cfg_For_L4_MD5") nfilename = dic.Item("App_Cfg_For_L4") End If If String.IsNullOrEmpty(nfilename) And String.IsNullOrEmpty(filename) Then Return False End If If CSFileDownload(loadfilepath & filename, serverfilepath & filename, md5) Or CSFileDownload(loadfilepath & nfilename, serverfilepath & nfilename, nmd5) Then ' 解析文件 '_UpgradeType = False 'LoadTheFile2(serverfilepath & filename) Return True '下载 Else Return False End If End Function Private Function CSFileDownload(loadfilepath As String, serverfilepath As String, md5 As String) As Boolean If loadfilepath.Trim.Substring(loadfilepath.Length - 1).Equals("\") Then Return True If File.Exists(loadfilepath) Then If ftp.VerifyFileMD5(loadfilepath, md5) Then '一致=不下载 Else 'If MsgBox("本地文件和远端文件存在差异,是否下载最新文件", MsgBoxStyle.YesNo) = MsgBoxResult.Ok Then '下载 If Not ftp.FtpfileDownload(serverfilepath, loadfilepath, md5) Then ' MsgBox("文件下载错误,请查看网络或联系开发者") Return False End If ' End If End If Else '下载 If Not ftp.FtpfileDownload(serverfilepath, loadfilepath, md5) Then 'MsgBox("文件下载错误,请查看网络或联系开发者") Return False End If End If If DownloadRoonTypeFile.ContainsKey(loadfilepath.Substring(loadfilepath.LastIndexOf("\") + 1)) Then Return True DownloadRoonTypeFile.Add(loadfilepath.Substring(loadfilepath.LastIndexOf("\") + 1), loadfilepath) Return True End Function Private Sub CheckBox36_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox36.CheckedChanged If CheckBox36.Checked Then Button37.Enabled = True Button45.Enabled = True Else Button37.Enabled = False Button45.Enabled = False End If End Sub Private Sub Button37_Click(sender As Object, e As EventArgs) Handles Button37.Click _UpgradeType = False If String.IsNullOrEmpty(ComboBox30.Text) Then MsgBox("云固件为空") Return End If '解析文件 DealHexFile(ComboBox30.Tag) _UpdateFileName = ComboBox30.Text FirmwareUpdate2(True) End Sub Public Sub FirmwareUpdate2(isIssued As Boolean) ChangePrgAirBurnValue(0) Dim li = CheckedCount(False) _upgradeSum = li.Count If _upgradeSum = 0 Then MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.SelectTheHostToBeConfigured)}!") Return End If If _upgradeSum > _upgradeMaxCount Then MsgBox($"The number of upgrades exceeds the maximum by {_upgradeMaxCount} Please try again") Return End If If GrdRCUHost.Cell(li(0), EnRCUHosts.RoomType).Text.Trim.Equals(ComboBox16.Text.Trim) Then Else If MsgBox("The room type does not match the current hotel when the firmware (APP) or configuration is delivered by the selected host. Yes No Continue", MsgBoxStyle.OkCancel) <> 1 Then Return End If End If If isIssued Then ''下发匹配信息——GrdMatching If UpdateMatching(li(0)) = False Then MsgBox("The host model matching the file does not match the selected host model") Exit Sub Else Button28.ForeColor = Color.Green Button28.Text = $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Matching)}" End If End If Button25.Enabled = False _upgradeCount = 0 TSSUpgradeCount.ForeColor = Color.Green TSSUpgradeCount.Text = $"Number of successful upgrades:{_upgradeCount}/{_upgradeSum}" _IssuedUpgradeThread = New Thread(AddressOf StartUpdate) _IssuedUpgradeThread.Start(isIssued) End Sub Private Sub ComboBox30_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox30.SelectedIndexChanged ComboBox30.Tag = DownloadRoonTypeFile.Item(ComboBox30.Text) End Sub Private Sub Button45_Click(sender As Object, e As EventArgs) Handles Button45.Click _UpgradeType = True If String.IsNullOrEmpty(TextBox63.Text) Then MsgBox("云配置为空") Return End If DealDatFile(TextBox63.Tag) _UpdateFileName = TextBox63.Text FirmwareUpdate2(False) End Sub #End Region #Region “DHCP” Public TheDHCPServer As DhcpServer Private Sub CboLocalIPInfo_DropDown(sender As Object, e As EventArgs) Handles CboLocalIPInfo.DropDown CboLocalIPInfo.Items.Clear() CboLocalIPInfo.Items.AddRange(GetLocalIp().ToArray) End Sub Public Sub InitDHCPTable() Dhcp_table.NewFile() Dhcp_table.Cols = 5 Dhcp_table.Rows = 1 Dhcp_table.Cell(0, 1).Text = "allocated at" Dhcp_table.Cell(0, 2).Text = "IP" Dhcp_table.Cell(0, 3).Text = "MAC" Dhcp_table.Cell(0, 4).Text = "renew at" Dhcp_table.Column(1).Width = 100 Dhcp_table.Column(2).Width = 100 Dhcp_table.Column(3).Width = 100 Dhcp_table.Column(4).Width = 100 End Sub Public DirectConnection As Thread Public intcat As Integer = 0 Private Sub ComboBox31_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox31.SelectedIndexChanged SendIntervalTime = 10 threadIsflag = False Dim tip As String If ComboBox31.SelectedIndex = 0 Then '直连 tip = $"Select 【Direct Computer as Route】 mode search{vbCrLf } 1. The IP property of the network port connected to the host network is set to [manual setting].{vbCrLf } IP:192.168.1.10{vbCrLf } mask:255.255.0.0{vbCrLf } gateway;192.168.1.1{vbCrLf } Preferred DNS: 114.114.114.114{vbCrLf } Alternate DNS:223.5.5.5{vbCrLf } 2, disable redundant adapters, only keep the Internet Wifi and direct network port adapter{vbCrLf } 3, you must turn off the computer firewall" MsgBox(tip) 'CheckBox6.Checked = False If Not NetworkHelp.SetNetworkAdapter() Then If intcat < 5 Then If intcat = 0 Then intcat = 1 End If MsgBox($"ip分配失败!请确保主机与电脑已处于直连状态!重试:{intcat}") intcat = intcat + 1 ComboBox31_SelectedIndexChanged(Nothing, Nothing) Return Else MsgBox("以太网连接中断,直连失败!") intcat = 1 Return End If End If '刷新ip 并延时等待设置完成 SendIntervalTime = 1 CboLocalIPInfo.Text = "192.168.1.10" 'Button25.Enabled = False If Not IsNothing(TheDHCPServer) Then Return Try TheDHCPServer = New DhcpServer AddHandler TheDHCPServer.OupPrintfDHCPlog, AddressOf OupPrintfDHCPlog Catch ex As Exception MsgBox($"通信网卡异常,请禁用蓝牙网卡以及多余的本地网卡!{ex.Message }") End Try _connectStatus = True threadIsflag = True If IsNothing(DirectConnection) Then DirectConnection = New Thread(New ThreadStart(AddressOf ThreadSearchHosts)) DirectConnection.Start() Else Thread.Sleep(1000) 'If Not IsNothing(gsocket) Then gsocket.Close() DirectConnection.Abort() DirectConnection = New Thread(New ThreadStart(AddressOf ThreadSearchHosts)) DirectConnection.Start() End If ElseIf ComboBox31.SelectedIndex = 1 Then If intcat > 0 Then tip = $"Select: Note when searching for the 【Routing within the LAN】 mode: 1. Set the IP address of the network port connected to the host network to automatically obtain{vbCrLf } 2. Ensure that the computer network segment is consistent with the host{vbCrLf } 3, you must turn off the computer firewall" intcat = 1 MsgBox(tip) Else intcat = 1 End If 'CheckBox6.Checked = True If Not IsNothing(DirectConnection) Then threadIsflag = False If Not IsNothing(gsocket) Then gsocket.Close() DirectConnection.Abort() End If Button25.Enabled = True If IsNothing(TheDHCPServer) Then Return TheDHCPServer.ClockDHCPServer() TheDHCPServer = Nothing NetworkHelp.SetNetworkAdapterDHCP() ElseIf ComboBox31.SelectedIndex = 2 Then ' If Not IsNothing(TheDHCPServer) Then TheDHCPServer.ClockDHCPServer() If Not NetworkHelp.SetNetworkAdapter() Then Return End If SendIntervalTime = 1 CboLocalIPInfo.Text = "192.168.1.10" threadIsflag = True If IsNothing(DirectConnection) Then If Not IsNothing(gsocket) Then gsocket.Close() End If DirectConnection = New Thread(New ThreadStart(AddressOf ThreadSearchHosts)) DirectConnection.Start() Else Thread.Sleep(1000) If Not IsNothing(gsocket) Then gsocket.Close() End If DirectConnection.Abort() DirectConnection = New Thread(New ThreadStart(AddressOf ThreadSearchHosts)) DirectConnection.Start() End If End If End Sub Public Sub OupPrintfDHCPlog(IPadd As String, mac As String, msgtype As Integer) If msgtype = 5 Then SetButton25Enabled() If SetdhcpTable(IPadd, mac) Then SetRegistData($"客户端:{mac}:请求IP:{IPadd} 成功", 2) End If End If If isDhcp Then Select Case msgtype Case 1 ' SetRegistData($"客户端:{mac}:请求接入", 1) Case 2 SetRegistData($"客户端:{mac}:请求接入失败:IP池无可用IP", 3) Case 3 SetRegistData($"客户端:{mac}:正在请求IP:{IPadd}", 2) Case 4 SetRegistData($"客户端:{mac}:请求IP:{IPadd} 失败,该IP 已被占用。", 3) Case 5 End Select End If End Sub Public Function SetdhcpTable(IPadd As String, mac As String) As Boolean For inrow As Integer = 1 To Dhcp_table.Rows - 1 If Dhcp_table.Cell(inrow, 2).Text.Equals(IPadd) Then Return False End If Next SetDhcp_tableshow(IPadd, mac) Return True End Function Delegate Sub theSetDhcp_tableshow(IPadd As String, mac As String) Public Sub SetDhcp_tableshow(IPadd As String, mac As String) If Dhcp_table.InvokeRequired Then Dim dev As New theSetDhcp_tableshow(AddressOf SetDhcp_tableshow) Dhcp_table.Invoke(dev, IPadd, mac) Return End If Dhcp_table.AddItem("") Dhcp_table.Cell(Dhcp_table.Rows - 1, 2).Text = IPadd Dhcp_table.Cell(Dhcp_table.Rows - 1, 3).Text = mac End Sub Delegate Sub theSetButton25Enabledshow() Public Sub SetButton25Enabled() If RichText_Debug.InvokeRequired Then Dim dev As New theSetButton25Enabledshow(AddressOf SetButton25Enabled) RichText_Debug.Invoke(dev) Return Else Button25.Enabled = True Console.WriteLine("======================================") End If End Sub ' Delegate Sub theSetopenUartshow(txt As String, bcolor As Integer) Private logqe As Queue(Of (String, Color)) Private logtick As Date = Now Public Sub SetRegistData(Text As String, porttype As Integer) 'If RichText_Debug.InvokeRequired Then ' Dim dev As New theSetopenUartshow(AddressOf SetRegistData) ' RichText_Debug.Invoke(dev, Text, porttype) ' Return 'Else If String.IsNullOrEmpty(Text) Then Return Dim tsp As TimeSpan Dim at As String = "" Dim txtcolor As Color If porttype = 1 Then 'TextBox1.Text = Text & "mA" txtcolor = Color.Black at = $"{Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}:{Text} {vbCrLf}" ElseIf porttype = 2 Then txtcolor = Color.Blue at = $"{Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}:{Text} {vbCrLf}" ElseIf porttype = 3 Then txtcolor = Color.BlueViolet at = $"{Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}:{Text} {vbCrLf}" ElseIf porttype = 4 Then txtcolor = Color.BlueViolet tsp = Now - logtick logtick = Now at = $"{Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}:【{tsp.TotalMilliseconds }】:{Text} {vbCrLf}" ElseIf porttype = 5 Then tsp = Now - logtick logtick = Now txtcolor = Color.OrangeRed at = $"{Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}:【{tsp.TotalMilliseconds }】:{Text} {vbCrLf}" End If ' nAppendTextAndSetStyle(at, txtcolor) If logqe.Count > 2000 Then logqe.Dequeue() End If logqe.Enqueue((at, txtcolor)) ' End If End Sub Private Sub ToolStripButton1_Click(sender As Object, e As EventArgs) Handles ToolStripButton1.Click RichText_Debug.Clear() logqe.Clear() End Sub ''' ''' 添加记录文本和颜色 ''' ''' 需要添加的记录内容 ''' 需要设置的记录颜色 Public Sub nAppendTextAndSetStyle(ByVal str As String, ByVal cor As Color) Dim selStart As Integer Dim selLength As Integer selStart = RichText_Debug.TextLength RichText_Debug.AppendText(str) selLength = RichText_Debug.TextLength - selStart RichText_Debug.Select(selStart, selLength) RichText_Debug.SelectionColor = cor RichText_Debug.ScrollToCaret() End Sub Private Sub ric_DhcpLog_TextChanged(sender As Object, e As EventArgs) Handles RichText_Debug.TextChanged If RichText_Debug.TextLength > 1555000 Then RichText_Debug.Select(0, 4000) RichText_Debug.SelectedText = "..." End If RichText_Debug.ScrollToCaret() End Sub Public isDhcp As Boolean = False Private Sub ToolStripButton2_Click(sender As Object, e As EventArgs) Handles ToolStripButton2.Click If isDhcp Then ToolStripButton2.Text = "显示信息" isDhcp = Not isDhcp Else Dim strInputMsg As String = InputBox("请输入用户密码", "密码确认").Trim If strInputMsg.Equals("Cc2022OK") Then ToolStripButton2.Text = "隐藏信息" isDhcp = Not isDhcp Dim logqeCount = logqe.Count - 1 For i = 0 To logqeCount Dim snode = logqe.Dequeue nAppendTextAndSetStyle(snode.Item1, snode.Item2) Next End If End If End Sub Private Sub ToolStripButton3_Click(sender As Object, e As EventArgs) Handles ToolStripButton3.Click InitDHCPTable() End Sub Private Sub FrmCSeriesConfig_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed NetworkHelp.SetNetworkAdapterDHCP() If Not IsNothing(DirectConnection) Then threadIsflag = False If Not IsNothing(gsocket) Then gsocket.Close() DirectConnection.Abort() End If End Sub Private Sub FrmCSeriesConfig_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing NetworkHelp.SetNetworkAdapterDHCP() If Not IsNothing(DirectConnection) Then threadIsflag = False If Not IsNothing(gsocket) Then gsocket.Close() DirectConnection.Abort() End If End Sub Public Sub FrmCSeriesConfig_FormClosing() NetworkHelp.SetNetworkAdapterDHCP() If Not IsNothing(DirectConnection) Then threadIsflag = False If Not IsNothing(gsocket) Then gsocket.Close() DirectConnection.Abort() End If End Sub Public Sub ShowForm(parentControl As Control) FormBorderStyle = FormBorderStyle.None TopLevel = False Dock = DockStyle.Fill Parent = parentControl Enabled = True Show() End Sub Private Sub Button38_Click(sender As Object, e As EventArgs) Handles Button38.Click TSMSwitchHotel_Click(Nothing, Nothing) End Sub Private Sub CheckBox37_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox37.CheckedChanged If CheckBox37.Checked Then If MsgBox($"注意下发服务器IP,主机将连接到本地服务器。云端服务器将无法检测到该主机!!!{vbCrLf }是否使用本地服务器?", MsgBoxStyle.OkCancel) = MsgBoxResult.Ok Then Return Else CheckBox37.Checked = False End If End If End Sub #End Region End Class