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