Imports System.ComponentModel Imports FlexCell Imports Newtonsoft.Json Public Class AddPeripherals Public Dirpath As String = "C:\Users\Administrator\Desktop\微信临时文件\WeChat Files\wxid_a2psdqznmt8y22\FileStorage\File\2023-07\设备类别\窗帘" Public ResulDic As Dictionary(Of String, String) Public Resultmodel As DeviceModel Public g_Devicemodel As Dictionary(Of String, DeviceModel) Public isok As Boolean = False Public g_DevType As FromDevType '红外 Public g_Devinfraredrow As Dictionary(Of String, Integer) Public g_Devin485fraredrow As Dictionary(Of String, Integer) Public g_DevinCURTAINdrow As Dictionary(Of String, Integer) Public g_Devintemp As Dictionary(Of String, Integer) Public g_DevRELAYrow As Dictionary(Of String, Integer) Public g_DevDimming As Dictionary(Of String, Integer) Public g_Devservice As Dictionary(Of String, Integer) Public g_DevScenenumber As Dictionary(Of String, Integer) ' Public g_Devservice As Dictionary(Of String, Integer) Public g_grd As FlexCell.Grid Private _despar As List(Of String) Public g_ColumnAnothername As Dictionary(Of String, String) Enum FromDevType Normal Temp CURTAIN Voice FreshAir PB_Bus DRY_NoCard Dev_ColorTemp BLEMUSIC RS485_Curtain max End Enum Enum Tcolname 输入序号 = 0 按键别名 按键反馈灯 max End Enum Enum Temproweven 红外转发 = 1 互锁 冷阈开 冷阈关 热阈开 热阈关 风低 风中 风高 max End Enum Private Sub TextBox2_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox2.KeyPress '数字0~9所对应的keychar为48~57 e.Handled = True '输入0-9 If e.KeyChar = vbBack OrElse (Asc(e.KeyChar) >= 47 AndAlso Asc(e.KeyChar) <= 58) Then e.Handled = False End If End Sub Private Sub AddPeripherals_Load(sender As Object, e As EventArgs) Handles MyBase.Load If IsNothing(Resultmodel) Then TextBox2.Enabled = False TextBox1.Enabled = False Resultmodel = Nothing 'If IO.Directory.Exists(Dirpath) Then ' Dim dir() As String = IO.Directory.GetDirectories(Dirpath) ' For Each index In dir ' index = index.Replace(Dirpath, "").Replace(".", "").Replace("\", "") ' Cob_DirPath.Items.Add(index) ' Next 'Else ' Dirpath = "C:\" ' Dim dir() As String = IO.Directory.GetDirectories(Dirpath) ' For Each index In dir ' index = index.Replace(Dirpath, "").Replace(".", "").Replace("/", "") ' Cob_DirPath.Items.Add(index) ' Next 'End If Cob_DirPath.Items.Clear() Cob_DirPath.Items.AddRange({"开关面板", "继电器调光扩展模块", "窗帘模块", "背景音乐", "取电", "空调新风地暖红外发送", "PLC总线", "语音", "无线锁", "其他"}) SplitContainer2.Panel2Collapsed = True Else SplitContainer2.Panel2Collapsed = False End If End Sub Private Sub Cob_DirPath_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Cob_DirPath.SelectedIndexChanged Dim filepath As String = Cob_DirPath.Text & "_" If IO.Directory.Exists(Dirpath) Then Dim dir() As String = IO.Directory.GetFiles(Dirpath) Cob_FilePath.Items.Clear() For Each index In dir index = index.Replace(Dirpath, "").Replace("\", "") Console.WriteLine(index.IndexOf(filepath)) If index.IndexOf(filepath) = 0 AndAlso index.Contains(".xml") Then Cob_FilePath.Items.Add(index.Substring(filepath.Length)) End If Next End If End Sub Private Sub Cob_FilePath_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Cob_FilePath.SelectedIndexChanged 'Dim filepath As String = Dirpath & Cob_DirPath.Text & "\" & Cob_FilePath.Text Dim filepath As String = $"{Dirpath}\{Cob_DirPath.Text}_{Cob_FilePath.Text}" If IO.File.Exists(filepath) Then Try Resultmodel = FrmMain.LoadModelFromXml(filepath) ' Resultmodel.filename = $"{Cob_DirPath.Text}_{Cob_FilePath.Text}" Catch ex As Exception MsgBox("加载外设设备xml失败!请确认xml文件是否正确!") Return End Try TextBox2.Enabled = True TextBox1.Enabled = True Label7.Text = $"设备端口:{ShowDevicePort(Resultmodel)}" Label8.Text = GetDevmodeTypeData(Resultmodel) TextBox1.Text = Cob_FilePath.Text.Replace(".xml", "") For Each index In Resultmodel.Config For Each aindex In index.Attributes If aindex.Name.Equals("拨码地址") Then Dim rbugf() As String = aindex.DataDefault.Split(" ") TextBox2.Text = rbugf(0) End If Next Next Else MsgBox("未找到设备文件,加载外设设备失败!!") TextBox2.Enabled = False TextBox1.Enabled = False Return End If SelectiveDisplay() End Sub Public Function GetDevModeAindex(node As DeviceModel, eqstr As String) As String Dim result As String = String.Empty If Not IsNothing(node) Then For Each index In node.Config For Each aindex In index.Attributes ' If aindex.Name.Equals("拨码地址") Then If aindex.Name.Equals(eqstr) Then result = aindex.Value End If Next Next End If Return result End Function Private Sub SetDevModeAindex(node As DeviceModel, eqstr As String, settext As String) ' Dim result As String = String.Empty If Not IsNothing(node) Then For Each index In node.Config For Each aindex In index.Attributes ' If aindex.Name.Equals("拨码地址") Then If aindex.Name.Equals(eqstr) Then aindex.Value = settext Exit For End If Next Next End If End Sub Private Function ShowDevicePort(strtype As DeviceModel) As String Dim result As String = String.Empty Select Case Resultmodel.Desc.DevInterface Case "RS485Active" result = "485(主动)2" Case "RS485Polling" result = "485(轮询)1" Case "VirtualObject" result = "虚拟设备" Case "PB_BUS_LINE" result = "PB设备" Case "PB_LINE_CONTROL" result = "主机恒压调光" Case Else result = "未知设备" End Select Return result End Function Public Sub EditFeedbackLamp(rvdicv As Dictionary(Of String, String), devmodw As DeviceModel) Label1.Visible = False Label2.Visible = False Cob_DirPath.Visible = False Cob_FilePath.Visible = False Resultmodel = devmodw Dim buff() As String = Resultmodel.Name.Split(vbLf) If Not IsNothing(Resultmodel) Then TextBox2.Enabled = True TextBox1.Enabled = True TextBox1.Text = buff(2) Label7.Text = $"设备端口:{ShowDevicePort(Resultmodel)}" Label8.Text = GetDevmodeTypeData(Resultmodel) For Each index In Resultmodel.Config For Each aindex In index.Attributes If aindex.Name.Equals("拨码地址") Then TextBox2.Text = aindex.Value End If Next Next End If isok = True g_DevType = DetermineDeviceType() ComboBox1.Visible = False Label6.Visible = False Table_Grid1.Visible = False SplitContainer5.Panel2Collapsed = True SplitContainer2.Panel2Collapsed = False CheckBox1.Visible = False CheckBox2.Visible = False CheckBox3.Visible = False CheckBox4.Visible = False CheckBox5.Visible = False Label9.Visible = False TextBox3.Visible = False FdevPort.Visible = False FdevAddr.Visible = False FdevPortCom.Visible = False FdevPortText.Visible = False Fdevtype.Visible = False FdevtypeCom.Visible = False SplitContainer6.Visible = False If Not String.IsNullOrEmpty(Resultmodel.Desc.DevDescription) Then Dim Rchenk() As String = Resultmodel.Desc.DevDescription.Split(",") Dim ischenk As Integer = 0 For i = 0 To Rchenk.Length - 1 If i < 4 Then ischenk = 0 Integer.TryParse(Rchenk(i), ischenk) Select Case i Case 0 CheckBox1.Checked = ischenk Case 1 CheckBox2.Checked = ischenk Case 2 CheckBox3.Checked = ischenk Case 3 CheckBox5.Checked = ischenk 'Case 4 ' CheckBox5.Checked = ischenk End Select Else Exit For End If Next End If Select Case g_DevType Case FromDevType.Temp CheckBox1.Visible = True CheckBox2.Visible = True CheckBox5.Text = "风速模式提示音" CheckBox5.Visible = True SplitContainer4.Panel1Collapsed = True SplitContainer4.Panel2Collapsed = False Dim val As String = FindAttributeValueUnderModel(Resultmodel, "设备存在", "水机无阀") If String.IsNullOrEmpty(val) Then CheckBox6.Visible = False Else CheckBox6.Visible = True If val.Equals("1") Then CheckBox6.Checked = True Else CheckBox6.Checked = False End If End If Normal_initTable() Normal_SetIDOpenDO(rvdicv) Temp_initTable(Resultmodel) Temp_SetIDOpenDO() Case FromDevType.RS485_Curtain If Resultmodel.Desc.DevInterface.Equals("RS485Active") Then CheckBox5.Text = "控制反向" CheckBox5.Visible = True End If SplitContainer4.Panel2Collapsed = True Case FromDevType.CURTAIN Table_Grid1.Visible = True SplitContainer4.Panel2Collapsed = True CURTAIN_initTable(_despar) CURTAIN_SetIDOpenDO() Case FromDevType.BLEMUSIC SplitContainer4.Panel2Collapsed = True Label9.Visible = True TextBox3.Visible = True TextBox3.Enabled = True TextBox3.Text = FindAttributeValueUnderModel2(Resultmodel, "设备存在", "BleName") Normal_initTable() Normal_SetIDOpenDO(rvdicv) Case FromDevType.Normal SplitContainer4.Panel2Collapsed = True Normal_initTable() Normal_SetIDOpenDO(rvdicv) Case FromDevType.Voice CheckBox1.Visible = True 'CheckBox2.Visible = True CheckBox5.Text = "取电播放欢迎词" CheckBox5.Visible = True 'CheckBox3.Visible = True Table_Grid1.Visible = True SplitContainer4.Panel2Collapsed = True Voice_InitTable() Case FromDevType.FreshAir CheckBox1.Visible = True SplitContainer4.Panel2Collapsed = True Table_Grid1.Visible = True FreshAirInitTable(_despar) FreshAir_SetIDOpenDO() Case FromDevType.PB_Bus FdevPort.Visible = True FdevAddr.Visible = True FdevPortCom.Visible = True FdevPortText.Visible = True Fdevtype.Visible = True FdevtypeCom.Visible = True SplitContainer6.Visible = True Table_Grid1.Visible = True SplitContainer4.Panel2Collapsed = True Button2_Click(Nothing, Nothing) PB_Bus_initTable() Case FromDevType.DRY_NoCard Table_Grid1.Visible = True SplitContainer4.Panel2Collapsed = True NoCard_initTable() Case FromDevType.Dev_ColorTemp Table_Grid1.Visible = True Label6.Text = "显示回路" Label6.Visible = True ComboBox1.Visible = True ComboBox1.Items.Clear() For i = 1 To Resultmodel.Nodes(0).Nodes.Count ComboBox1.Items.Add(i) Next SplitContainer4.Panel1Collapsed = False SplitContainer4.Panel2Collapsed = True SplitContainer5.Panel1Collapsed = False ParseDeviceList(g_Devicemodel) initGrid() Dim cnt As Integer If Integer.TryParse(Resultmodel.Desc.DevDescription, cnt) Then ComboBox1.Text = cnt End If Case Else SplitContainer2.Panel2Collapsed = True End Select End Sub Public Sub PB_Bus_initTable() Table_Grid1.NewFile() Table_Grid1.Rows = 1 Table_Grid1.Cols = 5 Table_Grid1.ExtendLastCol = False With Table_Grid1 .Column(0).Alignment = FlexCell.AlignmentEnum.CenterCenter .Column(1).Alignment = FlexCell.AlignmentEnum.CenterCenter .Column(2).Alignment = FlexCell.AlignmentEnum.CenterCenter .Column(3).Alignment = FlexCell.AlignmentEnum.CenterCenter .Column(4).Alignment = FlexCell.AlignmentEnum.CenterCenter ' .Column(5).Alignment = FlexCell.AlignmentEnum.CenterCenter .Column(0).Width = 50 .Column(1).Width = 200 .Column(2).Width = 100 .Column(3).Width = 100 .Column(4).Width = 100 ' .Column(5).Width = 50 ' .Column(2).CellType = CellTypeEnum.ComboBox .Column(3).CellType = CellTypeEnum.ComboBox .Column(4).CellType = CellTypeEnum.ComboBox ' .Column(5).CellType = CellTypeEnum.ComboBox .Column(2).Locked = True .ComboBox(3).Locked = True .ComboBox(4).Locked = True ' .ComboBox(5).Locked = True .Column(0).Locked = True .Column(1).Locked = True '.Column(5).Locked = True .Cell(0, 0).Text = "输入序号" .Cell(0, 1).Text = "回路类型" .Cell(0, 2).Text = "回路别名" .Cell(0, 3).Text = "自检功率上限" .Cell(0, 4).Text = "自检功率下限" '.Cell(0, 5).Text = "备注" End With PB_Bus_AddGrid1RowDragDrop() End Sub Public Sub PB_Bus_AddGrid1RowDragDrop() If Not IsNothing(Resultmodel) Then Dim ustr As List(Of String) Dim sv As String = String.Empty ustr = GetPowerThresholdconfig(Resultmodel, "父设备类型", sv) Button1.PerformClick() FdevtypeCom.Items.Clear() FdevtypeCom.Items.AddRange(ustr.ToArray) FdevtypeCom.Text = sv ustr = GetPowerThresholdconfig(Resultmodel, "父设备地址", sv) FdevPortText.Items.Clear() FdevPortText.Items.AddRange(ustr.ToArray) FdevPortText.Text = sv ustr = GetPowerThresholdconfig(Resultmodel, "父设备端口", sv) FdevPortCom.Items.Clear() FdevPortCom.Items.AddRange(ustr.ToArray) FdevPortCom.Text = sv For Each ModuleFre In Resultmodel.Nodes '添加 For Each Index In ModuleFre.Nodes Table_Grid1.AddItem("") Table_Grid1.Cell(Table_Grid1.Rows - 1, 0).Text = Index.LoopAddr Table_Grid1.Cell(Table_Grid1.Rows - 1, 1).Text = Index.DefaultClass 'If String.IsNullOrEmpty(Index.DefaultAliasName.Trim) Then ' Index.DefaultAliasName = $"回路{Index.LoopAddr}" 'End If Table_Grid1.Cell(Table_Grid1.Rows - 1, 2).Text = Index.DefaultAliasName If String.IsNullOrEmpty(Table_Grid1.Cell(Table_Grid1.Rows - 1, 2).Text.Trim) Then Index.DefaultAliasName = $"回路{Index.LoopAddr}" Table_Grid1.Cell(Table_Grid1.Rows - 1, 2).Text = Index.DefaultAliasName End If ustr = GetPowerThreshold(Resultmodel, Table_Grid1.Rows - 1, 3) Dim scval As String If ustr.Count > 0 Then 'Table_Grid1.Cell(Table_Grid1.Rows - 1, 3).Text = ustr.Item(2) scval = JsonConvert.SerializeObject(ustr) Table_Grid1.Cell(Table_Grid1.Rows - 1, 3).Tag = scval Console.WriteLine(scval) 'Console.WriteLine(ustr.ToString) End If ustr = GetPowerThreshold(Resultmodel, Table_Grid1.Rows - 1, 4) If ustr.Count > 0 Then 'Table_Grid1.Cell(Table_Grid1.Rows - 1, 4).Text = ustr.Item(2) scval = JsonConvert.SerializeObject(ustr) Table_Grid1.Cell(Table_Grid1.Rows - 1, 4).Tag = JsonConvert.SerializeObject(ustr) Console.WriteLine(scval) 'Console.WriteLine(ustr.ToString) End If Next Next End If End Sub Public Sub NoCard_AddGrid1RowDragDrop() If Not IsNothing(Resultmodel) Then For Each ModuleFre In Resultmodel.Config(0).Attributes If ModuleFre.Name.Contains("弱电输入") Then Table_Grid1.AddItem("") Table_Grid1.Cell(Table_Grid1.Rows - 1, 0).Text = ModuleFre.Name Table_Grid1.Cell(Table_Grid1.Rows - 1, 1).Text = ModuleFre.DataDefault Dim u As Integer = 0 Dim d As Integer = 0 Dim buf() As String = ModuleFre.DataRange.Split(",") If buf.Length = 2 Then If Integer.TryParse(buf(0), d) AndAlso Integer.TryParse(buf(1), u) Then Dim result As List(Of String) = New List(Of String) result.Add("") For i = d To u result.Add(i) Next If result.Count > 0 Then Table_Grid1.Cell(Table_Grid1.Rows - 1, 1).Tag = JsonConvert.SerializeObject(result) End If End If End If End If Next End If End Sub Public Function GetPowerThreshold(Resultmodel As DeviceModel, addr As Integer, keysrt As Integer) As List(Of String) Dim result As List(Of String) = New List(Of String) Dim LoopAddr As String = $"回路{Table_Grid1.Cell(addr, 0).Text.Trim}{Table_Grid1.Cell(0, keysrt).Text.Trim}" For Each index In Resultmodel.Config If index.Name.Equals("设备存在") Then For Each node In index.Attributes If node.Name.Equals(LoopAddr) Then Dim u As Integer = 0 Dim d As Integer = 0 Dim buf() As String = node.DataRange.Split(",") Table_Grid1.Cell(addr, keysrt).Text = node.DataDefault If buf.Length = 2 Then If Integer.TryParse(buf(0), d) AndAlso Integer.TryParse(buf(1), u) Then For i = d To u result.Add(i) Next End If End If End If Next End If Next Return result End Function Private Function FindAttributeValueUnderModel(pNode As DeviceModel, groupName As String, attributeName As String) As String Dim result As String = String.Empty For Each cnode In pNode.Config If cnode.Name.Equals(groupName) Then For Each ccnode In cnode.Attributes If ccnode.Name.Equals(attributeName) Then result = ccnode.DataDefault End If Next End If Next Return result End Function Public Function GetPowerThresholdconfig(Resultmodel As DeviceModel, keysrt As String, ByRef val As String) As List(Of String) Dim result As List(Of String) = New List(Of String) Dim LoopAddr As String = keysrt For Each index In Resultmodel.Config If index.Name.Equals("设备存在") Then For Each node In index.Attributes If node.Name.Equals(LoopAddr) Then Dim rbugf() As String = node.DataDefault.Split(" ") val = rbugf(0) Dim buf() As String = node.DataRangeValue.Split(",") For Each i In buf result.Add(i) Next End If Next End If Next Return result End Function Public Sub SetPowerThresholdconfig(Resultmodel As DeviceModel, keysrt As String, val As String) Dim LoopAddr As String = keysrt For Each index In Resultmodel.Config If index.Name.Equals("设备存在") Then For Each node In index.Attributes If node.Name.Equals(LoopAddr) Then node.DataDefault = val End If Next End If Next End Sub Public Function GetDevmodeTypeData(Tmodel As DeviceModel) As String Dim result As String = String.Empty For Each index In Tmodel.Nodes result = $"{result}{GetAnotherName(index.Name) }{index.DEV_TYPE_DATA.PadLeft(3, "0")}," Next If result.Length > 0 Then result = result.Substring(0, result.Length - 1) End If Return result End Function Private Sub CURTAIN_SetIDOpenDO() If IsNothing(g_DevRELAYrow) OrElse g_DevRELAYrow.Count > 0 Then If Resultmodel.Desc.ProtocolData.Contains("*") Then Dim buf() As String = Resultmodel.Desc.ProtocolData.Split(",") Dim cbuf() As String Dim skey As String If Not IsNothing(buf) Then If buf.Length = 1 Then cbuf = buf(0).Split("*") skey = $"{cbuf(0)}*{cbuf(1)}*{cbuf(2)}" For Each index In g_ColumnAnothername If index.Value.Equals(skey) Then Table_Grid1.Cell(3, 2).Text = index.Key If cbuf.Length > 3 Then Table_Grid1.Cell(3, 3).Text = cbuf(3) End If Exit For End If Next ElseIf buf.Length = 2 Then For i = 0 To buf.Length - 1 cbuf = buf(i).Split("*") skey = $"{cbuf(0)}*{cbuf(1)}*{cbuf(2)}" For Each index In g_ColumnAnothername If index.Value.Equals(skey) Then Table_Grid1.Cell(i + 1, 2).Text = index.Key If cbuf.Length > 3 Then Table_Grid1.Cell(i + 1, 3).Text = cbuf(3) End If Exit For End If Next Next End If End If End If End If End Sub Private Function DetermineDeviceType() As FromDevType _despar = New List(Of String) Dim result As FromDevType = FromDevType.Normal For Each ModuleFre In Resultmodel.Nodes Select Case ModuleFre.Name Case "Dev_ColorTemp" Return FromDevType.Dev_ColorTemp Case "Temp" CheckBox4.Visible = True Return FromDevType.Temp Case "BLEMUSIC" Return FromDevType.BLEMUSIC Case "RS485_Curtain" Return FromDevType.RS485_Curtain Case "CURTAIN" _despar.Add("开帘") _despar.Add("关帘") _despar.Add("485电机") Return FromDevType.CURTAIN Case "485FreshAir", "CLED_FRESHAIR" _despar.Add("风速低") _despar.Add("风速中") _despar.Add("风速高") Return FromDevType.FreshAir Case "485FloorHeat", "CLEDFLOORHEAT" _despar.Add("阀开") Return FromDevType.FreshAir Case "语音" Return FromDevType.Voice Case "PB_LED", "PB_RELAY_DEVICE", "PB_STRIP_DEVICE" Return FromDevType.PB_Bus Case "DRY_NoCard" Return FromDevType.DRY_NoCard End Select Next Return result End Function Private Sub SelectiveDisplay() g_DevType = DetermineDeviceType() ComboBox1.Visible = False Label6.Visible = False Table_Grid1.Visible = False CheckBox1.Visible = False CheckBox1.Checked = False CheckBox5.Visible = False CheckBox4.Visible = False CheckBox2.Visible = False CheckBox3.Visible = False FdevPort.Visible = False FdevAddr.Visible = False FdevPortCom.Visible = False FdevPortText.Visible = False Fdevtype.Visible = False FdevtypeCom.Visible = False SplitContainer6.Visible = False Label9.Visible = False TextBox3.Visible = False SplitContainer5.Panel2Collapsed = True SplitContainer2.Panel2Collapsed = False If Not String.IsNullOrEmpty(Resultmodel.Desc.DevDescription) Then Dim Rchenk() As String = Resultmodel.Desc.DevDescription.Split(",") Dim ischenk As Integer = 0 For i = 0 To Rchenk.Length - 1 If i < 3 Then ischenk = 0 Integer.TryParse(Rchenk(i), ischenk) Select Case i Case 0 CheckBox1.Checked = ischenk Case 1 CheckBox2.Checked = ischenk Case 2 CheckBox3.Checked = ischenk End Select Else Exit For End If Next End If Select Case g_DevType Case FromDevType.Temp CheckBox1.Visible = True CheckBox1.Checked = True CheckBox2.Visible = True CheckBox5.Text = "风速模式提示音" CheckBox5.Visible = True CheckBox4.Visible = True SplitContainer4.Panel1Collapsed = True SplitContainer4.Panel2Collapsed = False Dim val As String = FindAttributeValueUnderModel(Resultmodel, "设备存在", "水机无阀") If String.IsNullOrEmpty(val) Then CheckBox6.Visible = False Else CheckBox6.Visible = True If val.Equals("1") Then CheckBox6.Checked = True Else CheckBox6.Checked = False End If End If Normal_initTable() Temp_initTable(Resultmodel) Case FromDevType.RS485_Curtain If Resultmodel.Desc.DevInterface.Equals("RS485Active") Then CheckBox5.Text = "控制反向" CheckBox5.Visible = True End If SplitContainer4.Panel2Collapsed = True Case FromDevType.CURTAIN Table_Grid1.Visible = True SplitContainer4.Panel2Collapsed = True CURTAIN_initTable(_despar) Case FromDevType.BLEMUSIC SplitContainer4.Panel2Collapsed = True Label9.Visible = True TextBox3.Visible = True TextBox3.Enabled = True TextBox3.Text = FindAttributeValueUnderModel2(Resultmodel, "设备存在", "BleName") Normal_initTable() Case FromDevType.Normal SplitContainer4.Panel2Collapsed = True Normal_initTable() Case FromDevType.Voice SplitContainer4.Panel2Collapsed = True CheckBox1.Visible = True CheckBox1.Checked = True 'CheckBox2.Visible = True CheckBox5.Text = "取电播放欢迎词" CheckBox5.Visible = True 'CheckBox3.Visible = True Table_Grid1.Visible = True Voice_InitTable() Case FromDevType.FreshAir CheckBox1.Visible = True CheckBox1.Checked = True SplitContainer4.Panel2Collapsed = True Table_Grid1.Visible = True FreshAirInitTable(_despar) Case FromDevType.PB_Bus FdevPort.Visible = True FdevAddr.Visible = True FdevPortCom.Visible = True FdevPortText.Visible = True Fdevtype.Visible = True FdevtypeCom.Visible = True SplitContainer4.Panel2Collapsed = True Table_Grid1.Visible = True SplitContainer6.Visible = True Button2_Click(Nothing, Nothing) PB_Bus_initTable() Case FromDevType.DRY_NoCard Table_Grid1.Visible = True SplitContainer4.Panel2Collapsed = True NoCard_initTable() Case FromDevType.Dev_ColorTemp Table_Grid1.Visible = True Label6.Text = "显示回路" Label6.Visible = True ComboBox1.Visible = True ComboBox1.Items.Clear() For i = 1 To Resultmodel.Nodes(0).Nodes.Count ComboBox1.Items.Add(i) Next SplitContainer4.Panel1Collapsed = False SplitContainer4.Panel2Collapsed = True SplitContainer5.Panel1Collapsed = False ParseDeviceList(g_Devicemodel) initGrid() Dim cnt As Integer If Integer.TryParse(Resultmodel.Desc.DevDescription, cnt) Then ComboBox1.Text = cnt End If Case Else SplitContainer2.Panel2Collapsed = True End Select End Sub Private Sub Table_Grid1_CellChange(Sender As Object, e As Grid.CellChangeEventArgs) Handles Table_Grid1.CellChange Select Case g_DevType Case FromDevType.Dev_ColorTemp If e.Row = 0 Then Return Select Case e.Col Case 2 If Not IsColorTemp Then Return Dim strbuf() As String = Table_Grid1.Cell(e.Row, e.Col).Text.Split(":") Dim v3 As Integer = 0 Integer.TryParse(strbuf(0), v3) Dim ntabler As Integer = Table_Grid1.Rows - 1 For r = e.Row + 1 To ntabler Dim urle As Integer = ntabler - r + e.Row + 1 If Table_Grid1.Cell(e.Row, 0).Text.Equals(Table_Grid1.Cell(urle, 0).Text) Then Table_Grid1.Row(urle).Delete() End If Next For i = 1 To v3 + 1 Table_Grid1.InsertRow(e.Row + i, 1) Table_Grid1.Range(e.Row + i, 0, e.Row + i, 2).Locked = True Table_Grid1.Cell(e.Row + i, 3).Locked = False Table_Grid1.Range(e.Row + i, 0, e.Row + i, 2).BackColor = Color.LightGray Table_Grid1.Range(e.Row + i, 3, e.Row + i, Table_Grid1.Cols - 1).BackColor = Color.White Table_Grid1.Cell(e.Row + i, 0).Text = Table_Grid1.Cell(e.Row, 0).Text Next Case 3, 4, 5 If String.IsNullOrEmpty(Table_Grid1.Cell(e.Row, 1).Text) OrElse e.Row = 0 Then Select Case e.Col Case 3 Table_Grid1.Cell(e.Row, e.Col + 1).Text = "" Table_Grid1.Cell(e.Row, e.Col + 2).Text = "" Table_Grid1.Cell(e.Row, e.Col + 3).Text = "" Case 4 Dim typestr As String = Table_Grid1.Cell(e.Row, e.Col).Text Dim addr As String = Table_Grid1.Cell(e.Row, e.Col - 1).Text If String.IsNullOrEmpty(addr) Then Table_Grid1.Cell(e.Row, e.Col).Text = "" MsgBox("请选择设备类型!") Return End If If String.IsNullOrEmpty(typestr) Then Table_Grid1.Cell(e.Row, e.Col + 1).Text = "" Return End If Table_Grid1.Cell(e.Row, e.Col).Tag = ParseDevDic.Item(addr).Item(typestr).Values(0).Item(0).Item2 Table_Grid1.Cell(e.Row, e.Col + 1).Text = "" Case 5 Dim celltxt As String = Table_Grid1.Cell(e.Row, e.Col).Tag Dim velltxt As String = Table_Grid1.Cell(e.Row, e.Col).Text Dim addr As String = Table_Grid1.Cell(e.Row, e.Col - 1).Text Dim typestr As String = Table_Grid1.Cell(e.Row, e.Col - 2).Text If String.IsNullOrEmpty(velltxt) Then Return End If If String.IsNullOrEmpty(addr) Then Table_Grid1.Cell(e.Row, e.Col).Text = "" MsgBox("请选择设备地址!") Return End If For Each tnode In ParseDevDic.Item(typestr).Item(addr).Item(celltxt) If velltxt.Equals(tnode.Item1) Then Table_Grid1.Cell(e.Row, e.Col + 1).Text = tnode.Item3 Exit For End If Next End Select Return Else If Not String.IsNullOrEmpty(Table_Grid1.Cell(e.Row, e.Col).Text) Then Table_Grid1.Cell(e.Row, e.Col).Text = "" End If End If End Select Case FromDevType.Temp Case FromDevType.CURTAIN If e.Col = 3 AndAlso e.Row > 0 Then Dim cetext As String = Table_Grid1.Cell(e.Row, e.Col).Text.Trim Dim cstin As Integer = 0 If Integer.TryParse(cetext, cstin) Then If cstin > -1 AndAlso cstin < 256 Then Table_Grid1.Cell(e.Row, e.Col).Text = cstin Else If cstin > 255 Then Table_Grid1.Cell(e.Row, e.Col).Text = 255 ElseIf cstin < 0 Then Table_Grid1.Cell(e.Row, e.Col).Text = 0 End If End If Else Table_Grid1.Cell(e.Row, e.Col).Text = 0 End If End If Case FromDevType.Voice 'Dim rtag As String = Table_Grid1.Cell(e.Row, 1).Tag 'Dim rtext As String = Table_Grid1.Cell(e.Row, 1).Text 'Dim rtval As String = Table_Grid1.Cell(e.Row, 4).Text 'If e.Col = 4 Then ' SetVoiceConfigNode(rtag, rtext, rtval) 'End If Case FromDevType.DRY_NoCard Dim LoopAddr As String = $"{Table_Grid1.Cell(e.Row, 0).Text.Trim}" For Each ModuleFre In Resultmodel.Config(0).Attributes If ModuleFre.Name.Equals(LoopAddr) AndAlso e.Col = 1 Then ModuleFre.DataDefault = Table_Grid1.Cell(e.Row, e.Col).Text End If Next Case FromDevType.Normal, FromDevType.BLEMUSIC If e.Row > 0 Then Select Case e.Col Case Tcolname.按键别名 Dim LoopAddr As String = Table_Grid1.Cell(e.Row, Tcolname.输入序号).Text.Trim For Each ModuleFre In Resultmodel.Nodes If ModuleFre.Interface.Equals("DI") Then For Each index In ModuleFre.Nodes If LoopAddr.Equals(index.LoopAddr) Then index.DefaultAliasName = Table_Grid1.Cell(e.Row, Tcolname.按键别名).Text.Trim Return End If Next End If Next Case Tcolname.按键反馈灯 Dim LoopAddr As String = Table_Grid1.Cell(e.Row, Tcolname.按键反馈灯).Text.Trim If String.IsNullOrEmpty(LoopAddr) Then Return For Each ModuleFre In Resultmodel.Nodes If ModuleFre.Interface.Equals("DO") Then For Each index In ModuleFre.Nodes If LoopAddr.Equals(index.LoopAddr) Then Return End If Next MsgBox("背光序号不存在!!将恢复默认调光序号!") Table_Grid1.Cell(e.Row, Tcolname.按键反馈灯).Text = Table_Grid1.Cell(e.Row, Tcolname.输入序号).Text End If Next End Select End If End Select End Sub Public Sub ResdultPB_Bus() For Trow As Integer = 1 To Table_Grid1.Rows - 1 Dim LoopAddrH As String = $"回路{ Table_Grid1.Cell(Trow, 0).Text.Trim}{Table_Grid1.Cell(0, 3).Text.Trim}" Dim LoopAddrL As String = $"回路{ Table_Grid1.Cell(Trow, 0).Text.Trim}{Table_Grid1.Cell(0, 4).Text.Trim}" For Each index In Resultmodel.Config If index.Name.Equals("设备存在") Then For Each node In index.Attributes If node.Name.Equals(LoopAddrH) Then node.DataDefault = Table_Grid1.Cell(Trow, 3).Text.Trim End If If node.Name.Equals(LoopAddrL) Then node.DataDefault = Table_Grid1.Cell(Trow, 4).Text.Trim End If Next End If Next Next 'If e.Col = 2 Then ' Dim LoopAddr As String = Table_Grid1.Cell(e.Row, Tcolname.输入序号).Text.Trim ' For Each ModuleFre In Resultmodel.Nodes ' If ModuleFre.Interface.Equals("DI") Then ' For Each index In ModuleFre.Nodes ' If LoopAddr.Equals(index.LoopAddr) Then ' index.DefaultAliasName = Table_Grid1.Cell(e.Row, Tcolname.按键别名).Text.Trim ' Return ' End If ' Next ' End If ' Next 'ElseIf e.Col > 2 Then ' Dim LoopAddr As String = $"回路{ Table_Grid1.Cell(e.Row, 0).Text.Trim}{Table_Grid1.Cell(0, e.Col).Text.Trim}" ' For Each index In Resultmodel.Config ' If index.Name.Equals("设备存在") Then ' For Each node In index.Attributes ' If node.Name.Equals(LoopAddr) Then ' node.DataDefault = Table_Grid1.Cell(e.Row, e.Col).Text ' End If ' Next ' End If ' Next 'End If End Sub Public Sub SetVoiceConfigNode(nodename As String, keytxt As String, valtext As String) If IsNothing(Resultmodel) Then Return For Each index In Resultmodel.Config If index.Name.Equals(nodename) Then For Each node In index.Attributes If node.Name.Equals(keytxt) Then node.DataRangeValue = keytxt Return End If Next End If Next Return End Sub Private Sub Table_Grid1_ComboDropDown(Sender As Object, e As Grid.ComboDropDownEventArgs) Handles Table_Grid1.ComboDropDown Select Case g_DevType Case FromDevType.Dev_ColorTemp Select Case e.Col Case 2 Table_Grid1.ComboBox(e.Col).Items.Clear() Table_Grid1.ComboBox(e.Col).Items.AddRange({"1:双路混光(一行配冷色二行配暖色)", "2:三路混光", "3:四路混光", "4:五路混光"}) Case 3 Table_Grid1.ComboBox(e.Col).Items.Clear() Table_Grid1.ComboBox(e.Col).Items.AddRange(ParseDevDic.Keys.ToArray) Case 4 Dim typestr As String = Table_Grid1.Cell(e.Row, e.Col).Text Dim addr As String = Table_Grid1.Cell(e.Row, e.Col - 1).Text If String.IsNullOrEmpty(addr) Then MsgBox("请先选择设备类型!") Return End If Table_Grid1.ComboBox(e.Col).Items.Clear() Table_Grid1.ComboBox(e.Col).Items.AddRange(ParseDevDic.Item(addr).Keys.ToArray) Case 5 Dim typestr As String = Table_Grid1.Cell(e.Row, e.Col - 2).Text Dim addr As String = Table_Grid1.Cell(e.Row, e.Col - 1).Text If String.IsNullOrEmpty(addr) OrElse String.IsNullOrEmpty(typestr) Then MsgBox("请先选择设备地址!") Return End If Table_Grid1.ComboBox(e.Col).Items.Clear() For Each index In ParseDevDic.Item(typestr).Item(addr).Values(0).ToArray Table_Grid1.ComboBox(e.Col).Items.Add(index.Item1) Next Table_Grid1.Cell(e.Row, e.Col).Tag = ParseDevDic.Item(typestr).Item(addr).Keys(0) End Select Case FromDevType.Temp Table_Grid1.ComboBox(Tcolname.按键反馈灯).Items.Clear() Table_Grid1.ComboBox(Tcolname.按键反馈灯).Items.Add("") If IsNothing(Normal_Do_li) Then Return Table_Grid1.ComboBox(Tcolname.按键反馈灯).Items.AddRange(Normal_Do_li.ToArray) Case FromDevType.CURTAIN Table_Grid1.ComboBox(e.Col).Items.Clear() Table_Grid1.ComboBox(e.Col).Items.Add("") If e.Col = 2 Then If e.Row = 3 Then If Not IsNothing(g_Devin485fraredrow) OrElse g_Devin485fraredrow.Count > 0 Then For Each nodex In g_Devin485fraredrow.Values Dim Anostr = g_grd.Cell(TableInteraction.TableRowNumber.FunctionChildNodeAnother, nodex).Text If String.IsNullOrEmpty(Anostr) Then Continue For Dim gdevname = New CtabRange(g_grd, TableInteraction.TableRowNumber.DeviceName, nodex) Anostr = $"{gdevname.devname}_{Anostr}" Table_Grid1.ComboBox(e.Col).Items.Add(Anostr) Next End If Else If Not IsNothing(g_DevRELAYrow) OrElse g_DevRELAYrow.Count > 0 Then For Each nodex In g_DevRELAYrow.Values Dim Anostr = g_grd.Cell(TableInteraction.TableRowNumber.FunctionChildNodeAnother, nodex).Text If String.IsNullOrEmpty(Anostr) Then Continue For Dim gdevname = New CtabRange(g_grd, TableInteraction.TableRowNumber.DeviceName, nodex) Anostr = $"{gdevname.devname}_{Anostr}" Table_Grid1.ComboBox(e.Col).Items.Add(Anostr) Next End If End If ElseIf e.Col = 3 Then For ti = 0 To 255 Table_Grid1.ComboBox(e.Col).Items.Add(ti) Next End If Case FromDevType.Normal, FromDevType.BLEMUSIC Table_Grid1.ComboBox(Tcolname.按键反馈灯).Items.Clear() Table_Grid1.ComboBox(Tcolname.按键反馈灯).Items.Add("") If IsNothing(Normal_Do_li) Then Return Table_Grid1.ComboBox(Tcolname.按键反馈灯).Items.AddRange(Normal_Do_li.ToArray) Case FromDevType.Voice Dim rtag As String = Table_Grid1.Cell(e.Row, 1).Tag If String.IsNullOrEmpty(rtag) Then Return Table_Grid1.ComboBox(e.Col).Items.Clear() Table_Grid1.ComboBox(e.Col).Items.Add("") Dim li As List(Of String) = Voice_SelectDropdownItem(rtag, e.Col) Table_Grid1.ComboBox(e.Col).Items.AddRange(li.ToArray) Case FromDevType.FreshAir Table_Grid1.ComboBox(e.Col).Items.Clear() Table_Grid1.ComboBox(e.Col).Items.Add("") If e.Col = 2 Then If Not IsNothing(g_DevRELAYrow) OrElse g_DevRELAYrow.Count > 0 Then For Each nodex In g_DevRELAYrow.Values Dim Anostr = g_grd.Cell(TableInteraction.TableRowNumber.FunctionChildNodeAnother, nodex).Text If String.IsNullOrEmpty(Anostr) Then Continue For Dim gdevname = New CtabRange(g_grd, TableInteraction.TableRowNumber.DeviceName, nodex) Anostr = $"{gdevname.devname}_{Anostr}" Table_Grid1.ComboBox(e.Col).Items.Add(Anostr) Next End If End If Case FromDevType.PB_Bus Dim vsccal As String = Table_Grid1.Cell(e.Row, e.Col).Tag 'Console.WriteLine(vsccal) Dim cellli As List(Of String) = JsonConvert.DeserializeObject(Of List(Of String))(vsccal) If IsNothing(cellli) OrElse cellli.Count = 0 Then Else Table_Grid1.ComboBox(e.Col).Items.Clear() Table_Grid1.ComboBox(e.Col).Items.AddRange(cellli.ToArray) End If Case FromDevType.DRY_NoCard Dim vsccal As String = Table_Grid1.Cell(e.Row, e.Col).Tag 'Console.WriteLine(vsccal) Dim cellli As List(Of String) = JsonConvert.DeserializeObject(Of List(Of String))(vsccal) If IsNothing(cellli) OrElse cellli.Count = 0 Then Else Table_Grid1.ComboBox(e.Col).Items.Clear() Table_Grid1.ComboBox(e.Col).Items.AddRange(cellli.ToArray) End If End Select End Sub Public Function GetAnotherName(str As String) As String Dim result As String = String.Empty If String.IsNullOrEmpty(str) Then result = "未知" Else Select Case str Case "CLED_FRESHAIR" result = "CLED新风" Case "CLEDFLOORHEAT" result = "CLED地暖" Case "485FloorHeat" result = "地暖" Case "485FreshAir" result = "新风" Case "485MUSIC" result = "485音乐" Case "CURTAIN" result = "干接点窗帘" Case "INFRARED_FORWARD" result = "红外" Case "RS485_Curtain" result = "485窗帘" Case "RELAY" result = "继电器" Case "MUSIC" result = "音乐" Case "Dimming" result = "调光" Case "DO" result = "输出" Case "Temp" result = "空调" Case "DI" result = "开关" Case "PB_RELAY_DEVICE" result = "PB继电器" Case "PB_STRIP_DEVICE" result = "PLC恒压调光" Case "PB_LINE_CONTROL" result = "主机恒压调光" Case Else result = $"未知设备:{str}" End Select End If Return result End Function Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ResulDic = New Dictionary(Of String, String) If IsNothing(Resultmodel) Then MsgBox("添加设备失败,未选中设备!") Return End If If IsNothing(g_Devicemodel) Then MsgBox("添加设备失败,未添加中主机模型!") Return End If If String.IsNullOrEmpty(TextBox1.Text) OrElse String.IsNullOrEmpty(TextBox2.Text) Then MsgBox("添加设备失败,设备别名或设备地址为空!") Return End If Dim olddevname As String = Resultmodel.Name Dim newdevname As String = $"{ShowDevicePort(Resultmodel)}{vbLf}设备地址:{TextBox2.Text.Trim }{vbLf}{TextBox1.Text.Trim }" Select Case g_DevType Case FromDevType.RS485_Curtain If CheckBox1.Checked Then Resultmodel.Desc.DevDescription = "1" Else Resultmodel.Desc.DevDescription = "0" End If If CheckBox2.Checked Then Resultmodel.Desc.DevDescription = $"{ Resultmodel.Desc.DevDescription},1" Else Resultmodel.Desc.DevDescription = $"{ Resultmodel.Desc.DevDescription},0" End If If CheckBox3.Checked Then Resultmodel.Desc.DevDescription = $"{ Resultmodel.Desc.DevDescription},1" Else Resultmodel.Desc.DevDescription = $"{ Resultmodel.Desc.DevDescription},0" End If If CheckBox5.Checked Then Resultmodel.Desc.DevDescription = $"{ Resultmodel.Desc.DevDescription},1" Else Resultmodel.Desc.DevDescription = $"{ Resultmodel.Desc.DevDescription},0" End If Case FromDevType.PB_Bus ResdultPB_Bus() Case FromDevType.Temp For i = 1 To Table_Grid1.Rows - 1 ResulDic.Add(Table_Grid1.Cell(i, Tcolname.输入序号).Text.Trim, Table_Grid1.Cell(i, Tcolname.按键反馈灯).Text.Trim) Next Dim Tdic As New Dictionary(Of String, String) For i = 1 To Temp_Grid.Rows - 1 Dim AnoName As String = Temp_Grid.Cell(i, 2).Text Console.WriteLine($"1:{Temp_Grid.Cell(i, 1).Text}_2:{Temp_Grid.Cell(i, 2).Text}") If g_ColumnAnothername.ContainsKey(AnoName) Then AnoName = g_ColumnAnothername.Item(AnoName) Else AnoName = "" End If Tdic.Add(Temp_Grid.Cell(i, 1).Text, AnoName) Next If Temp_BindingRelay(Tdic) Then Resultmodel.Desc.ProtocolData = JsonConvert.SerializeObject(Tdic) If CheckBox1.Checked Then Resultmodel.Desc.DevDescription = "1" Else Resultmodel.Desc.DevDescription = "0" End If If CheckBox2.Checked Then Resultmodel.Desc.DevDescription = $"{ Resultmodel.Desc.DevDescription},1" Else Resultmodel.Desc.DevDescription = $"{ Resultmodel.Desc.DevDescription},0" End If If CheckBox3.Checked Then Resultmodel.Desc.DevDescription = $"{ Resultmodel.Desc.DevDescription},1" Else Resultmodel.Desc.DevDescription = $"{ Resultmodel.Desc.DevDescription},0" End If If CheckBox5.Checked Then Resultmodel.Desc.DevDescription = $"{ Resultmodel.Desc.DevDescription},1" Else Resultmodel.Desc.DevDescription = $"{ Resultmodel.Desc.DevDescription},0" End If Else Return End If Case FromDevType.FreshAir Dim Rtime As String = String.Empty Dim TisNull As Boolean = False Dim dic As New Dictionary(Of String, String) For i = 1 To Table_Grid1.Rows - 1 If Not String.IsNullOrEmpty(Table_Grid1.Cell(i, 2).Text) Then TisNull = True End If Next If TisNull Then For i = 0 To _despar.Count - 1 '判断是否选择继电器 If String.IsNullOrEmpty(Table_Grid1.Cell(i + 1, 2).Text) Then MsgBox($"{Table_Grid1.Cell(i + 1, 1).Text}未选择继电器!") Return End If '判断继电器是否存在 Dim AnoName As String = Table_Grid1.Cell(i + 1, 2).Text AnoName = g_ColumnAnothername.Item(AnoName) Dim Lstart = TableInteraction.CURTAIN_check(g_grd, g_DevRELAYrow.Item(AnoName)) If IsNothing(Lstart) Then MsgBox($"{Table_Grid1.Cell(i + 1, 1).Text}继电器未找到!") Return End If If Lstart.Count > 0 Then If MsgBox($"{Table_Grid1.Cell(i + 1, 1).Text}继电器已存在配置,继续将清除该路继电器配置", MsgBoxStyle.OkCancel) <> MsgBoxResult.Ok Then Return End If End If '判断是否选择同一路继电器 If dic.ContainsKey(AnoName) Then MsgBox($"{Table_Grid1.Cell(i + 1, 1).Text}和{dic.Item(Table_Grid1.Cell(i + 1, 2).Text)} 的继电器冲突!") Return Else dic.Add(AnoName, Table_Grid1.Cell(i + 1, 1).Text) End If Rtime = $"{Rtime}{AnoName}," Next If Rtime.Length > 0 Then Rtime = Rtime.Substring(0, Rtime.Length - 1) End If BindingRelay(dic) If CheckBox1.Checked Then Resultmodel.Desc.DevDescription = "1" Else Resultmodel.Desc.DevDescription = "0" End If Resultmodel.Desc.ProtocolData = Rtime Else BindingRelay(dic) Resultmodel.Desc.ProtocolData = Rtime End If Case FromDevType.CURTAIN Dim dic As New Dictionary(Of String, String) Dim Rtime As String = String.Empty Dim Tstart As Integer = 0 Console.WriteLine(Table_Grid1.Cell(1, 2).Text) If String.IsNullOrEmpty(Table_Grid1.Cell(1, 2).Text) AndAlso String.IsNullOrEmpty(Table_Grid1.Cell(2, 2).Text) AndAlso String.IsNullOrEmpty(Table_Grid1.Cell(3, 2).Text) Then BindingRelay(dic) If CheckBox1.Checked Then Resultmodel.Desc.DevDescription = "1" Else Resultmodel.Desc.DevDescription = "0" End If Resultmodel.Desc.ProtocolData = Rtime Else If Not String.IsNullOrEmpty(Table_Grid1.Cell(1, 2).Text) AndAlso Not String.IsNullOrEmpty(Table_Grid1.Cell(2, 2).Text) Then For i = 0 To _despar.Count - 2 '判断是否选择继电器 'If String.IsNullOrEmpty(Table_Grid1.Cell(i + 1, 2).Text) Then ' MsgBox($"{Table_Grid1.Cell(i + 1, 1).Text}未选择继电器!") ' Return 'End If '判断继电器是否存在 Dim AnoName As String = Table_Grid1.Cell(i + 1, 2).Text AnoName = g_ColumnAnothername.Item(AnoName) Dim Lstart = TableInteraction.CURTAIN_check(g_grd, g_DevRELAYrow.Item(AnoName)) If IsNothing(Lstart) Then MsgBox($"{Table_Grid1.Cell(i + 1, 1).Text}继电器未找到!") Return End If If Lstart.Count > 0 Then If MsgBox($"{Table_Grid1.Cell(i + 1, 1).Text}继电器已存在配置,继续将清除该路继电器配置", MsgBoxStyle.OkCancel) <> MsgBoxResult.Ok Then Return End If End If '判断是否选择同一路继电器 If dic.ContainsKey(AnoName) Then MsgBox($"{Table_Grid1.Cell(i + 1, 1).Text}和{dic.Item(Table_Grid1.Cell(i + 1, 2).Text)} 的继电器冲突!") Return Else dic.Add(AnoName, Table_Grid1.Cell(i + 1, 1).Text) End If Tstart = 0 Integer.TryParse(Table_Grid1.Cell(i + 1, 3).Text, Tstart) Rtime = $"{Rtime}{AnoName}*{Tstart }," Next ElseIf Not String.IsNullOrEmpty(Table_Grid1.Cell(3, 2).Text) Then Dim AnoName As String = Table_Grid1.Cell(3, 2).Text AnoName = g_ColumnAnothername.Item(AnoName) Dim Lstart = TableInteraction.CURTAIN_check(g_grd, g_Devin485fraredrow.Item(AnoName)) If IsNothing(Lstart) Then MsgBox($"{Table_Grid1.Cell(3, 1).Text}485窗帘回路未找到!") Return End If If Lstart.Count > 0 Then If MsgBox($"{Table_Grid1.Cell(3, 1).Text}485窗帘回路已存在配置,继续将清除该回路配置", MsgBoxStyle.OkCancel) <> MsgBoxResult.Ok Then Return End If End If '判断是否选择同一路继电器 If dic.ContainsKey(AnoName) Then MsgBox($"{Table_Grid1.Cell(3, 1).Text}和{dic.Item(Table_Grid1.Cell(3, 2).Text)} 的485窗帘回路冲突!") Return Else dic.Add(AnoName, Table_Grid1.Cell(3, 1).Text) End If Tstart = 0 Integer.TryParse(Table_Grid1.Cell(3, 3).Text, Tstart) Rtime = $"{Rtime}{AnoName}*{Tstart }," ElseIf String.IsNullOrEmpty(Table_Grid1.Cell(1, 2).Text) Then MsgBox($"{Table_Grid1.Cell(1, 1).Text}未选择继电器!") Return ElseIf String.IsNullOrEmpty(Table_Grid1.Cell(2, 2).Text) Then MsgBox($"{Table_Grid1.Cell(2, 1).Text}未选择继电器!") Return End If If Rtime.Length > 0 Then Rtime = Rtime.Substring(0, Rtime.Length - 1) End If BindingRelay(dic) If CheckBox1.Checked Then Resultmodel.Desc.DevDescription = "1" Else Resultmodel.Desc.DevDescription = "0" End If Resultmodel.Desc.ProtocolData = Rtime End If Case FromDevType.Normal, FromDevType.BLEMUSIC For i = 1 To Table_Grid1.Rows - 1 ResulDic.Add(Table_Grid1.Cell(i, Tcolname.输入序号).Text.Trim, Table_Grid1.Cell(i, Tcolname.按键反馈灯).Text.Trim) Next If TextBox3.Visible Then SetDevModeAindex(Resultmodel, "BleName", TextBox3.Text) End If Case FromDevType.Voice Dim rtag As String Dim rtext As String For i = 1 To Table_Grid1.Rows - 1 'If String.IsNullOrEmpty(Table_Grid1.Cell(i, 4).Text) Then Continue For rtag = Table_Grid1.Cell(i, 1).Tag rtext = Table_Grid1.Cell(i, 1).Text If String.IsNullOrEmpty(rtag) Then Continue For For Each node In Resultmodel.Config If node.CFG_Type.Equals("XiaoBaoCMD") Then If node.Name.Equals(rtag) Then For Each index In node.Attributes If index.Name.Equals(rtext) Then Dim AnoName As String = Table_Grid1.Cell(i, 4).Text.Replace(vbCrLf, vbLf) If g_ColumnAnothername.ContainsKey(AnoName) Then AnoName = g_ColumnAnothername.Item(AnoName) End If index.DataRangeValue = AnoName Exit For End If Next Exit For End If End If Next Next Dim devdes As String = String.Empty If CheckBox1.Checked Then devdes = $"1" Else devdes = $"0" End If If CheckBox2.Checked Then devdes = $"{devdes},1" Else devdes = $"{devdes},0" End If If CheckBox3.Checked Then devdes = $"{devdes},1" Else devdes = $"{devdes},0" End If If CheckBox5.Checked Then devdes = $"{devdes},1" Else devdes = $"{devdes},0" End If Resultmodel.Desc.DevDescription = devdes Case FromDevType.Dev_ColorTemp Dim cnt As Integer If Integer.TryParse(ComboBox1.Text, cnt) Then Resultmodel.Desc.DevDescription = cnt Else MsgBox("未选择显示回路!!!") Return End If Dim dicli As Dictionary(Of String, Dictionary(Of String, List(Of List(Of String)))) = New Dictionary(Of String, Dictionary(Of String, List(Of List(Of String)))) Dim nkey, mkey As String Dim cdic As Dictionary(Of String, List(Of List(Of String))) Dim cli As List(Of List(Of String)) Dim vli As List(Of String) For i = 1 To Table_Grid1.Rows - 1 nkey = Table_Grid1.Cell(i, 0).Text If dicli.ContainsKey(nkey) Then cdic = dicli.Item(nkey) Else cdic = New Dictionary(Of String, List(Of List(Of String))) dicli.Add(nkey, cdic) End If If Not String.IsNullOrEmpty(Table_Grid1.Cell(i, 1).Text) Then mkey = $"{Table_Grid1.Cell(i, 1).Text},{Table_Grid1.Cell(i, 2).Text}" If cdic.ContainsKey(mkey) Then cli = cdic.Item(mkey) Else cli = New List(Of List(Of String)) cdic.Add(mkey, cli) End If Else If Table_Grid1.Row(i).Visible AndAlso (String.IsNullOrEmpty(Table_Grid1.Cell(i, 3).Text) OrElse String.IsNullOrEmpty(Table_Grid1.Cell(i, 4).Text) OrElse String.IsNullOrEmpty(Table_Grid1.Cell(i, 5).Text)) Then MsgBox($"第{i}行数据缺失!!!") Return End If vli = New List(Of String) vli.Add(Table_Grid1.Cell(i, 3).Text) vli.Add(Table_Grid1.Cell(i, 4).Text) vli.Add(Table_Grid1.Cell(i, 5).Text) vli.Add(Table_Grid1.Cell(i, 5).Tag) vli.Add(Table_Grid1.Cell(i, 4).Tag) vli.Add(Table_Grid1.Cell(i, 6).Text) cli.Add(vli) End If Next For Each node In Resultmodel.Nodes For i = 1 To node.Nodes.Count Dim Index = node.Nodes(i - 1) If Index.DefaultClass.Equals("Dev_ColorTemp") Then If dicli.ContainsKey(Index.LoopAddr) Then Dim Oldcdic As List(Of List(Of String)) = JsonConvert.DeserializeObject(Of List(Of List(Of String)))(Index.Description) If Not IsNothing(Oldcdic) AndAlso Oldcdic.Count > 0 Then For Each oldnode In Oldcdic If Not IsNothing(oldnode) AndAlso oldnode.Count > 4 Then SetColumnBind(oldnode(4), oldnode(0), oldnode(2), True) End If Next End If cdic = dicli.Item(Index.LoopAddr) Index.DefaultAliasName = cdic.Keys(0) Index.Description = JsonConvert.SerializeObject(cdic.Values(0)) For Each cdnode In cdic.Values(0) If Not IsNothing(cdnode) AndAlso cdnode.Count > 4 Then SetColumnBind(cdnode(4), cdnode(0), cdnode(2), False) End If Next End If End If Next Next End Select '存在且原名和旧名不一样 则为新设备 If g_Devicemodel.ContainsKey(newdevname) AndAlso Not (newdevname.Equals(olddevname)) Then MsgBox("添加设备失败,已存在相同别名相同设备地址的设备!!") Return Else If IfDipAddress(newdevname, TextBox2.Text.Trim, olddevname) Then If isok And g_Devicemodel.ContainsKey(olddevname) Then g_Devicemodel.Remove(olddevname) End If SetDevModeAindex(Resultmodel, "拨码地址", TextBox2.Text.Trim) Resultmodel.Name = newdevname g_Devicemodel.Add(newdevname, Resultmodel) Dim ndic As New Dictionary(Of String, String) For Each tindex In g_ColumnAnothername If olddevname.Contains("设备地址:") AndAlso tindex.Key.Contains(olddevname) Then ndic.Add(tindex.Key, tindex.Value) End If Next For Each yindex In ndic Dim nkey, nval As String nkey = yindex.Key.Replace(olddevname, newdevname) nval = yindex.Value.Replace(olddevname, newdevname) ' g_ColumnAnothername.Remove(yindex.Key) If g_ColumnAnothername.ContainsKey(nkey) Then g_ColumnAnothername.Item(nkey) = nval Else g_ColumnAnothername.Add(nkey, nval) End If ' Next Else Return End If End If Me.DialogResult = System.Windows.Forms.DialogResult.OK Me.Close() Return End Sub Public Sub SetColumnBind(devname As String, nodetype As String, devloop As String, istrue As Boolean) If String.IsNullOrEmpty(devloop) Then Return For i = TableInteraction.TableColNumber.InsertColumn To g_grd.Cols - 1 Dim g_devname = New CtabRange(g_grd, TableInteraction.TableRowNumber.DeviceName, i) If g_devname.devname.Equals(devname) Then For ci = g_devname.fc To g_devname.lc Dim g_devcloumn = New CtabRange(g_grd, TableInteraction.TableRowNumber.FunctionAnotherName, ci) If g_devcloumn.devname.Equals(nodetype) Then For vi = g_devcloumn.fc To g_devcloumn.lc If g_grd.Cell(TableInteraction.TableRowNumber.FunctionChildNodeID, vi).Text.Equals(devloop) Then g_grd.Column(vi).Visible = istrue If Not istrue Then g_grd.Range(TableInteraction.TableRowNumber.Max, vi, g_grd.Rows - 1, vi).ClearText() End If Console.WriteLine($"Column{vi},Visible{istrue}") Exit Sub End If Next End If Next End If Next End Sub Private ParseDevDic As Dictionary(Of String, Dictionary(Of String, Dictionary(Of String, List(Of (String, String, String))))) Public Sub ParseDeviceList(Devicemodel As Dictionary(Of String, DeviceModel)) ParseDevDic = New Dictionary(Of String, Dictionary(Of String, Dictionary(Of String, List(Of (String, String, String))))) Dim typename As String For Each index In Devicemodel.Values For Each node In index.Nodes 'If node.Name.Equals("Virtual_Card") Then ' UniqueDevice = index ' NoCardNode = node ' Exit For 'End If If node.Name.Equals("Dimming") OrElse node.Name.Equals("PB_LINE_CONTROL") OrElse node.Name.Equals("PB_STRIP_DEVICE") Then typename = GetAnotherName(node.Name) ' typename = $"{node.Name}" If String.IsNullOrEmpty(typename) Then Continue For Else Dim addressdic As Dictionary(Of String, Dictionary(Of String, List(Of (String, String, String)))) If ParseDevDic.ContainsKey(typename) Then addressdic = ParseDevDic.Item(typename) Else addressdic = New Dictionary(Of String, Dictionary(Of String, List(Of (String, String, String)))) ParseDevDic.Add(typename, addressdic) End If Dim addr As String Dim loopdic As Dictionary(Of String, List(Of (String, String, String))) Dim loopli As List(Of (String, String, String)) If index.Desc.Name.Equals("BLV_C12") Then addr = FindAttributeValueUnderModel(index, $"{node.Name }设备组信息", "DeviceAddr") Else addr = FindAttributeValueUnderModel2(index, "设备存在", "拨码地址") End If If addressdic.ContainsKey(addr) Then loopdic = addressdic.Item(addr) Else loopdic = New Dictionary(Of String, List(Of (String, String, String))) addressdic.Add(addr, loopdic) End If If loopdic.ContainsKey(node.DEV_TYPE_DATA) Then loopli = loopdic.Item(node.DEV_TYPE_DATA) Else loopli = New List(Of (String, String, String)) loopdic.Add(node.DEV_TYPE_DATA, loopli) End If For Each liindex In node.Nodes loopli.Add((liindex.LoopAddr, index.Name, liindex.DefaultAliasName)) Next End If Else Continue For End If Next Next End Sub Private Function FindAttributeValueUnderModel2(pNode As DeviceModel, groupName As String, attributeName As String) As String For Each cnode In pNode.Config If cnode.Name.Equals(groupName) Then For Each ccnode In cnode.Attributes If ccnode.Name.Equals(attributeName) Then Return ccnode.Value End If Next End If Next End Function Public Function IfDipAddress(newnama As String, addr As String, oldname As String) As Boolean If IsNothing(g_Devicemodel) OrElse IsNothing(Resultmodel) Then Return False Dim adddevaddress As String = addr Dim adddevn As String = String.Empty Dim lidevn As String = String.Empty Dim lidevaddress As String = String.Empty newnama = newnama.Replace(vbLf, "") Dim olddevname As String For Each node In Resultmodel.Nodes adddevn = $"{node.DEV_TYPE_DATA }_{adddevaddress}" For i = 0 To g_Devicemodel.Count - 1 If i = 0 Then lidevaddress = 0 Else lidevaddress = GetDevModeAindex(g_Devicemodel.Values(i), "拨码地址") End If For Each index In g_Devicemodel.Values(i).Nodes lidevn = $"{index.DEV_TYPE_DATA }_{lidevaddress}" If adddevn.Equals(lidevn) AndAlso Not (oldname.Equals(g_Devicemodel.Values(i).Name)) AndAlso g_DevType <> FromDevType.Voice Then olddevname = g_Devicemodel.Values(i).Name.Replace(vbLf, "") MsgBox($"添加设备失败{vbLf}{newnama }{vbLf}与{vbLf}{olddevname}{vbLf}设备地址冲突!!") Return False End If Next Next Next Return True End Function #Region "Temp" Public Shared Function CheckWhetherTheKeyExists(startint As Integer, nodeleng As Integer, dic As Dictionary(Of String, String)) As Boolean Dim cleng As Integer = nodeleng + startint If cleng > Temproweven.max Then Return False Dim dicket As String = String.Empty For i = startint To cleng - 1 dicket = [Enum].GetName(GetType(Temproweven), i) If dic.ContainsKey(dicket) AndAlso Not String.IsNullOrEmpty(dic.Item(dicket)) Then Continue For Else Return False End If Next Return True End Function Public Shared Function CheckWhetherTheKeyExists2(dic As Dictionary(Of String, String)) As Boolean If IsNothing(dic) OrElse dic.Count = 0 Then Return False For i As Integer = 0 To dic.Count If i < Temproweven.风高 Then If String.IsNullOrEmpty(dic.Values(i)) Then Continue For Else Return False End If End If Next Return True End Function Private Sub Temp_SetIDOpenDO() Dim dic As Dictionary(Of String, String) = JsonConvert.DeserializeObject(Of Dictionary(Of String, String))(Resultmodel.Desc.ProtocolData) Dim celltxt As String For i = Temproweven.红外转发 To Temp_Grid.Rows - 1 celltxt = Temp_Grid.Cell(i, 1).Text If dic.ContainsKey(celltxt) Then Dim AnoName = dic.Item(celltxt) For Each index In g_ColumnAnothername If index.Value.Equals(AnoName) Then Temp_Grid.Cell(i, 2).Text = index.Key Exit For End If Next End If Next If dic.ContainsKey("红外转发") Then If String.IsNullOrEmpty(dic.Item("红外转发")) OrElse g_Devinfraredrow.ContainsKey(dic.Item("红外转发")) Then CheckBox4.Checked = False Else If g_Devinfraredrow.ContainsKey(dic.Item("红外转发")) Then Dim r As Integer = g_Devinfraredrow.Item(dic.Item("红外转发")) If g_grd.Column(r).Visible Then CheckBox4.Checked = True End If End If End If End If End Sub Public Function Temp_BindingRelay(Tdic As Dictionary(Of String, String)) As Boolean Dim rowname As String Dim dic As New Dictionary(Of String, String) Dim frelist As New List(Of String) Dim rowval As String Dim Lstart As List(Of Integer) Dim arryls As New List(Of String) For Each ModuleFre In Resultmodel.Nodes Select Case ModuleFre.Name Case "485FreshAir", "CLED_FRESHAIR" If String.IsNullOrEmpty(Tdic.Item("新风_风速低")) And String.IsNullOrEmpty(Tdic.Item("新风_风速中")) And String.IsNullOrEmpty(Tdic.Item("新风_风速高")) Then Else arryls.Add("新风_风速低") arryls.Add("新风_风速中") arryls.Add("新风_风速高") End If Case "485FloorHeat", "CLEDFLOORHEAT" If String.IsNullOrEmpty(Tdic.Item("地暖_阀开")) Then Else arryls.Add("地暖_阀开") End If End Select Next For Each arynode In arryls rowval = Tdic.Item(arynode) If String.IsNullOrEmpty(rowval) Then MsgBox($"{arynode}继电器未配置!") Return False End If Lstart = TableInteraction.CURTAIN_check(g_grd, g_DevRELAYrow.Item(rowval)) If IsNothing(Lstart) Then MsgBox($"{arynode}继电器未找到!") Return False End If If Lstart.Count > 0 Then If MsgBox($"{arynode}继电器已存在配置,继续将清除该路继电器配置", MsgBoxStyle.OkCancel) <> MsgBoxResult.Ok Then Return False End If End If If dic.ContainsKey(rowval) Then MsgBox($"{arynode}和{dic.Item(rowval)}继电器冲突!") Return False Else dic.Add(rowval, arynode) End If Next '温控部分 If CheckWhetherTheKeyExists2(Tdic) Then '接触原绑定进行新绑定 Tx_BindingRelay(dic) Return True End If '判断是否是氟机或水机 If CheckWhetherTheKeyExists(Temproweven.红外转发, 1, Tdic) OrElse CheckWhetherTheKeyExists(Temproweven.冷阈开, 1, Tdic) Then '判断温控是氟机还是水机 If CheckWhetherTheKeyExists(Temproweven.红外转发, 1, Tdic) Then If CheckBox4.Checked Then Tx_BindingRelay(dic) Else rowname = String.Empty rowname = [Enum].GetName(GetType(Temproweven), Temproweven.红外转发) rowval = Tdic.Item(rowname) Lstart = TableInteraction.CURTAIN_check(g_grd, g_Devinfraredrow.Item(rowval)) If IsNothing(Lstart) Then MsgBox($"{rowname}红外未找到!") Return False End If If Lstart.Count > 0 Then If MsgBox($"{rowname}红外已存在配置,继续将清除该路红外配置", MsgBoxStyle.OkCancel) <> MsgBoxResult.Ok Then Return False End If End If If dic.ContainsKey(rowval) Then MsgBox($"{rowname}和{dic.Item(rowval)}红外冲突!") Return False Else dic.Add(rowval, rowname) End If '接触原绑定进行新绑定 Tx_BindingRelay(dic) End If Return True Else '温控为水机 需要 '判断风速继电器是否配置 If Not CheckWhetherTheKeyExists(Temproweven.风低, 3, Tdic) Then MsgBox("水机温控空调风速继电器配置异常!!") Return False End If '风速 For i = Temproweven.风低 To Temproweven.max - 1 rowname = [Enum].GetName(GetType(Temproweven), i) rowval = Tdic.Item(rowname) Lstart = TableInteraction.CURTAIN_check(g_grd, g_DevRELAYrow.Item(rowval)) If IsNothing(Lstart) Then MsgBox($"{rowname}继电器未找到!") Return False End If If Lstart.Count > 0 Then If MsgBox($"{rowname}继电器已存在配置,继续将清除该路继电器配置", MsgBoxStyle.OkCancel) <> MsgBoxResult.Ok Then Return False End If End If If dic.ContainsKey(rowval) Then MsgBox($"{rowname}和{dic.Item(rowval)}继电器冲突!") Return False Else dic.Add(rowval, rowname) End If Next '判断水机配置的继电器是否有数据 If CheckWhetherTheKeyExists(Temproweven.冷阈开, 4, Tdic) Then '双阈三线 For i = Temproweven.冷阈开 To Temproweven.热阈关 rowname = [Enum].GetName(GetType(Temproweven), i) rowval = Tdic.Item(rowname) Lstart = TableInteraction.CURTAIN_check(g_grd, g_DevRELAYrow.Item(rowval)) If IsNothing(Lstart) Then MsgBox($"{rowname}继电器未找到!") Return False End If If Lstart.Count > 0 Then If MsgBox($"{rowname}继电器已存在配置,继续将清除该路继电器配置", MsgBoxStyle.OkCancel) <> MsgBoxResult.Ok Then Return False End If End If If dic.ContainsKey(rowval) Then MsgBox($"{rowname}和{dic.Item(rowval)}继电器冲突!") Return False Else dic.Add(rowval, rowname) End If Next '双阈2线 ElseIf CheckWhetherTheKeyExists(Temproweven.冷阈开, 1, Tdic) AndAlso CheckWhetherTheKeyExists(Temproweven.热阈开, 1, Tdic) Then rowname = [Enum].GetName(GetType(Temproweven), Temproweven.冷阈开) rowval = Tdic.Item(rowname) Lstart = TableInteraction.CURTAIN_check(g_grd, g_DevRELAYrow.Item(rowval)) If IsNothing(Lstart) Then MsgBox($"{rowname}继电器未找到!") Return False End If If Lstart.Count > 0 Then If MsgBox($"{rowname}继电器已存在配置,继续将清除该路继电器配置", MsgBoxStyle.OkCancel) <> MsgBoxResult.Ok Then Return False End If End If If dic.ContainsKey(rowval) Then MsgBox($"{rowname}和{dic.Item(rowval)}继电器冲突!") Return False Else dic.Add(rowval, rowname) End If rowname = [Enum].GetName(GetType(Temproweven), Temproweven.热阈开) rowval = Tdic.Item(rowname) Lstart = TableInteraction.CURTAIN_check(g_grd, g_DevRELAYrow.Item(rowval)) If IsNothing(Lstart) Then MsgBox($"{rowname}继电器未找到!") Return False End If If Lstart.Count > 0 Then If MsgBox($"{rowname}继电器已存在配置,继续将清除该路继电器配置", MsgBoxStyle.OkCancel) <> MsgBoxResult.Ok Then Return False End If End If If dic.ContainsKey(rowval) Then MsgBox($"{rowname}和{dic.Item(rowval)}继电器冲突!") Return False Else dic.Add(rowval, rowname) End If '单阈三线 ElseIf CheckWhetherTheKeyExists(Temproweven.冷阈开, 1, Tdic) AndAlso CheckWhetherTheKeyExists(Temproweven.冷阈关, 1, Tdic) Then rowname = [Enum].GetName(GetType(Temproweven), Temproweven.冷阈开) rowval = Tdic.Item(rowname) Lstart = TableInteraction.CURTAIN_check(g_grd, g_DevRELAYrow.Item(rowval)) If IsNothing(Lstart) Then MsgBox($"{rowname}继电器未找到!") Return False End If If Lstart.Count > 0 Then If MsgBox($"{rowname}继电器已存在配置,继续将清除该路继电器配置", MsgBoxStyle.OkCancel) <> MsgBoxResult.Ok Then Return False End If End If If dic.ContainsKey(rowval) Then MsgBox($"{rowname}和{dic.Item(rowval)}继电器冲突!") Return False Else dic.Add(rowval, rowname) End If rowname = [Enum].GetName(GetType(Temproweven), Temproweven.冷阈关) rowval = Tdic.Item(rowname) Lstart = TableInteraction.CURTAIN_check(g_grd, g_DevRELAYrow.Item(rowval)) If IsNothing(Lstart) Then MsgBox($"{rowname}继电器未找到!") Return False End If If Lstart.Count > 0 Then If MsgBox($"{rowname}继电器已存在配置,继续将清除该路继电器配置", MsgBoxStyle.OkCancel) <> MsgBoxResult.Ok Then Return False End If End If If dic.ContainsKey(rowval) Then MsgBox($"{rowname}和{dic.Item(rowval)}继电器冲突!") Return False Else dic.Add(rowval, rowname) End If ElseIf CheckWhetherTheKeyExists(Temproweven.冷阈开, 1, Tdic) Then '单阈2线 rowname = [Enum].GetName(GetType(Temproweven), Temproweven.冷阈开) rowval = Tdic.Item(rowname) Lstart = TableInteraction.CURTAIN_check(g_grd, g_DevRELAYrow.Item(rowval)) If IsNothing(Lstart) Then MsgBox($"{rowname}继电器未找到!") Return False End If If Lstart.Count > 0 Then If MsgBox($"{rowname}继电器已存在配置,继续将清除该路继电器配置", MsgBoxStyle.OkCancel) <> MsgBoxResult.Ok Then Return False End If End If If dic.ContainsKey(rowval) Then MsgBox($"{rowname}和{dic.Item(rowval)}继电器冲突!") Return False Else dic.Add(rowval, rowname) End If End If '接触原绑定进行新绑定 Tx_BindingRelay(dic) Return True End If Else '判断温控类型异常 '判断风速继电器是否配置 If CheckWhetherTheKeyExists(Temproweven.风低, 3, Tdic) Then For i = Temproweven.风低 To Temproweven.风高 rowname = [Enum].GetName(GetType(Temproweven), i) rowval = Tdic.Item(rowname) Lstart = TableInteraction.CURTAIN_check(g_grd, g_DevRELAYrow.Item(rowval)) If IsNothing(Lstart) Then MsgBox($"{rowname}继电器未找到!") Return False End If If Lstart.Count > 0 Then If MsgBox($"{rowname}继电器已存在配置,继续将清除该路继电器配置", MsgBoxStyle.OkCancel) <> MsgBoxResult.Ok Then Return False End If End If If dic.ContainsKey(rowval) Then MsgBox($"{rowname}和{dic.Item(rowval)}继电器冲突!") Return False Else dic.Add(rowval, rowname) End If Next Tx_BindingRelay(dic) Return True End If If CheckWhetherTheKeyExists(Temproweven.互锁, 1, Tdic) Then Return True End If MsgBox("未配置红外转发或冷阈开继电器无法判断温控类型!!") Return False End If End Function Public Sub Temp_initTable(devmodw As DeviceModel) Temp_Grid.NewFile() Temp_Grid.Rows = Temproweven.max Temp_Grid.Cols = 3 Temp_Grid.ExtendLastCol = True For i = 0 To Temproweven.max - 1 If i = 0 Then Temp_Grid.Cell(i, 1).Text = "事件描述" Temp_Grid.Cell(i, 2).Text = "绑定回路" 'Table_Grid1.Cell(i, 3).Text = "延时" 'Table_Grid1.Cell(i, 4).Text = "延时单位" Temp_Grid.Column(1).Locked = True 'Table_Grid1.Column(4).Locked = True Temp_Grid.Column(2).CellType = CellTypeEnum.ComboBox Temp_Grid.ComboBox(2).Locked = True Temp_Grid.Column(2).Width = 150 'Table_Grid1.Column(3).CellType = CellTypeEnum.ComboBox 'Table_Grid1.ComboBox(3).Locked = True Continue For End If Temp_Grid.Cell(i, 1).Text = [Enum].GetName(GetType(Temproweven), i) Next For Each ModuleFre In Resultmodel.Nodes Select Case ModuleFre.Name Case "485FreshAir", "CLED_FRESHAIR" Temp_Grid.AddItem("") Temp_Grid.Cell(Temp_Grid.Rows - 1, 1).Text = "新风_风速低" Temp_Grid.AddItem("") Temp_Grid.Cell(Temp_Grid.Rows - 1, 1).Text = "新风_风速中" Temp_Grid.AddItem("") Temp_Grid.Cell(Temp_Grid.Rows - 1, 1).Text = "新风_风速高" Case "485FloorHeat", "CLEDFLOORHEAT" Temp_Grid.AddItem("") Temp_Grid.Cell(Temp_Grid.Rows - 1, 1).Text = "地暖_阀开" End Select Next Temp_Grid.Range(0, 0, Temp_Grid.Rows - 1, Temp_Grid.Cols - 1).Alignment = FlexCell.AlignmentEnum.CenterCenter End Sub #End Region #Region "Normal" Public Sub Normal_initTable2(li As List(Of DeviceChildNodeClass)) Grid1.NewFile() Grid1.Rows = 1 Grid1.Cols = 3 Grid1.ExtendLastCol = True Grid1.Column(0).Visible = True Grid1.Cell(0, 1).Text = "回路类型" Grid1.Cell(0, 2).Text = "回路别名" Grid1.Column(1).Locked = True Grid1.Column(2).Locked = True Grid1.Column(1).Alignment = FlexCell.AlignmentEnum.CenterCenter Grid1.Column(2).Alignment = FlexCell.AlignmentEnum.CenterCenter Normal_AddGrid1RowDragDrop2(li) End Sub Private Sub Normal_AddGrid1RowDragDrop2(li As List(Of DeviceChildNodeClass)) For Each devnade In li For i = 0 To devnade.Nodes.Count - 1 Dim Index = devnade.Nodes(i) Grid1.AddItem("") Grid1.Cell(Grid1.Rows - 1, 2).Text = Index.DefaultAliasName Grid1.Cell(Grid1.Rows - 1, 1).Text = $"{devnade.Name }*{ Index.LoopAddr}" Next Next End Sub Public Sub Normal_initTable() Table_Grid1.NewFile() Table_Grid1.Rows = 1 Table_Grid1.Cols = Tcolname.max Table_Grid1.ExtendLastCol = True For i = 0 To Tcolname.max - 1 Table_Grid1.Cell(0, i).Text = [Enum].GetName(GetType(Tcolname), i) Select Case i Case Tcolname.输入序号 With Table_Grid1.Column(i) .Width = 50 '.Visible = True .Locked = True End With Case Tcolname.按键别名 With Table_Grid1.Column(i) .Width = 200 .Alignment = FlexCell.AlignmentEnum.CenterCenter .Locked = True End With Case Tcolname.按键反馈灯 With Table_Grid1.Column(i) .Width = 50 .Alignment = FlexCell.AlignmentEnum.CenterCenter '.Locked = True .CellType = CellTypeEnum.ComboBox End With Table_Grid1.ComboBox(i).Locked = True Case Else Exit For End Select Next Normal_AddGrid1RowDragDrop() End Sub Public Sub NoCard_initTable() Table_Grid1.NewFile() Table_Grid1.Rows = 1 Table_Grid1.Cols = 2 Table_Grid1.ExtendLastCol = True With Table_Grid1 .Column(0).Alignment = FlexCell.AlignmentEnum.CenterCenter .Column(1).Alignment = FlexCell.AlignmentEnum.CenterCenter .Column(0).Width = 350 .Column(1).Width = 200 .Column(1).CellType = CellTypeEnum.ComboBox .Column(0).Locked = True .ComboBox(1).Locked = True .Cell(0, 0).Text = "回路别名" .Cell(0, 1).Text = "映射回路" End With NoCard_AddGrid1RowDragDrop() End Sub Private Normal_Do_li As List(Of String) Private Sub Normal_AddGrid1RowDragDrop() Normal_Do_li = New List(Of String) If Not IsNothing(Resultmodel) Then Dim li As New List(Of DeviceChildNodeClass) For Each ModuleFre In Resultmodel.Nodes If ModuleFre.Name.Equals("Dimming") Then If ModuleFre.Nodes.Count > 0 Then li.Add(ModuleFre) End If ElseIf ModuleFre.Name.Equals("RELAY") Then If ModuleFre.Nodes.Count > 0 Then li.Add(ModuleFre) End If ElseIf ModuleFre.Name.Equals("DI") Then If ModuleFre.Nodes.Count > 0 Then ComboBox1.Visible = True Label6.Visible = True Table_Grid1.Visible = True SplitContainer4.Panel1Collapsed = False End If For Each index In ModuleFre.Nodes Table_Grid1.AddItem("") Table_Grid1.Cell(Table_Grid1.Rows - 1, 0).Text = index.LoopAddr Table_Grid1.Cell(Table_Grid1.Rows - 1, 1).Text = index.DefaultAliasName Table_Grid1.Cell(Table_Grid1.Rows - 1, 2).Text = index.LoopAddr Next ElseIf ModuleFre.Name.Equals("SLIDER") Then If ModuleFre.Nodes.Count > 0 Then li.Add(ModuleFre) End If ElseIf ModuleFre.Name.Equals("DO") Then For Each index In ModuleFre.Nodes Normal_Do_li.Add(index.LoopAddr) Next ComboBox1.Items.AddRange(Normal_Do_li.ToArray) ComboBox1.SelectedIndex = ComboBox1.Items.Count - 1 Dim cnt As Integer If Integer.TryParse(Resultmodel.Desc.DevDescription, cnt) Then ComboBox1.Text = cnt End If End If Next If li.Count > 0 Then If Table_Grid1.Rows > 1 Then SplitContainer5.Panel1Collapsed = False Else SplitContainer5.Panel1Collapsed = True End If SplitContainer5.Panel2Collapsed = False Normal_initTable2(li) End If End If End Sub Private Sub Normal_SetIDOpenDO(rvdicv As Dictionary(Of String, String)) If IsNothing(rvdicv) OrElse rvdicv.Count = 0 Then Return If Not IsNothing(Resultmodel) Then Table_Grid1.Column(Tcolname.按键别名).Locked = True For i = 1 To Table_Grid1.Rows - 1 If rvdicv.ContainsKey(Table_Grid1.Cell(i, Tcolname.输入序号).Text.Trim) Then Table_Grid1.Cell(i, Tcolname.按键反馈灯).Text = rvdicv.Item(Table_Grid1.Cell(i, Tcolname.输入序号).Text.Trim) End If Next End If End Sub #End Region #Region "CURTAIN" Private Sub Tx_BindingRelay(dic As Dictionary(Of String, String)) Dim olddic As Dictionary(Of String, String) Try olddic = JsonConvert.DeserializeObject(Of Dictionary(Of String, String))(Resultmodel.Desc.ProtocolData) Catch ex As Exception olddic = Nothing Console.WriteLine($"{ex.Message }") End Try '解绑 If Not IsNothing(olddic) AndAlso olddic.Count > 0 Then For Each node In olddic If g_DevRELAYrow.ContainsKey(node.Value) AndAlso g_grd.Cols > g_DevRELAYrow.Item(node.Value) Then g_grd.Column(g_DevRELAYrow.Item(node.Value)).Locked = False g_grd.Column(g_DevRELAYrow.Item(node.Value)).Visible = True End If If g_Devinfraredrow.ContainsKey(node.Value) AndAlso g_grd.Cols > g_Devinfraredrow.Item(node.Value) Then g_grd.Column(g_Devinfraredrow.Item(node.Value)).Locked = False g_grd.Column(g_Devinfraredrow.Item(node.Value)).Visible = True End If Next End If '绑定 For Each node In dic If g_DevRELAYrow.ContainsKey(node.Key) AndAlso g_grd.Cols > g_DevRELAYrow.Item(node.Key) Then 'g_grd.Column(g_DevRELAYrow.Item(node.Key)).Locked = True g_grd.Column(g_DevRELAYrow.Item(node.Key)).Visible = False g_grd.Range(TableInteraction.TableRowNumber.Max, g_DevRELAYrow.Item(node.Key), g_grd.Rows - 1, g_DevRELAYrow.Item(node.Key)).ClearText() Console.WriteLine(g_grd.Cell(8, g_DevRELAYrow.Item(node.Key)).Text) 'g_grd.Column(g_DevRELAYrow.Item(node.Key)).Locked = True g_grd.Range(TableInteraction.TableRowNumber.Max, g_DevRELAYrow.Item(node.Key), g_grd.Rows - 1, g_DevRELAYrow.Item(node.Key)).ForeColor = Color.Black End If If g_Devinfraredrow.ContainsKey(node.Key) AndAlso g_grd.Cols > g_Devinfraredrow.Item(node.Key) Then ' g_grd.Column(g_Devinfraredrow.Item(node.Key)).Locked = True g_grd.Column(g_Devinfraredrow.Item(node.Key)).Visible = False End If Next End Sub Private Sub BindingRelay(dic As Dictionary(Of String, String)) Dim oldbuf() As String = Resultmodel.Desc.ProtocolData.Split(",") '解绑 If Not IsNothing(oldbuf) AndAlso Resultmodel.Desc.ProtocolData.Contains("*") Then 'oldbuf.Length > 1 Then For Each node In oldbuf Dim oldcbuf() As String = node.Split("*") Dim buf As String = $"{oldcbuf(0)}*{oldcbuf(1)}*{oldcbuf(2)}" If g_DevRELAYrow.ContainsKey(buf) AndAlso g_grd.Cols > g_DevRELAYrow.Item(buf) Then g_grd.Column(g_DevRELAYrow.Item(buf)).Locked = False g_grd.Column(g_DevRELAYrow.Item(buf)).Visible = True End If If g_Devin485fraredrow.ContainsKey(buf) AndAlso g_grd.Cols > g_Devin485fraredrow.Item(buf) Then g_grd.Column(g_Devin485fraredrow.Item(buf)).Locked = False g_grd.Column(g_Devin485fraredrow.Item(buf)).Visible = True End If Next End If '绑定 For Each node In dic If g_DevRELAYrow.ContainsKey(node.Key) AndAlso g_grd.Cols > g_DevRELAYrow.Item(node.Key) Then g_grd.Column(g_DevRELAYrow.Item(node.Key)).Visible = False g_grd.DrawMode = DrawModeEnum.Normal g_grd.Range(TableInteraction.TableRowNumber.Max, g_DevRELAYrow.Item(node.Key), g_grd.Rows - 1, g_DevRELAYrow.Item(node.Key)).ClearText() Console.WriteLine(g_grd.Cell(8, g_DevRELAYrow.Item(node.Key)).Text) ' g_grd.Column(g_DevRELAYrow.Item(node.Key)).Locked = True g_grd.Range(TableInteraction.TableRowNumber.Max, g_DevRELAYrow.Item(node.Key), g_grd.Rows - 1, g_DevRELAYrow.Item(node.Key)).ForeColor = Color.Black g_grd.DrawMode = DrawModeEnum.Normal End If If g_Devin485fraredrow.ContainsKey(node.Key) AndAlso g_grd.Cols > g_Devin485fraredrow.Item(node.Key) Then g_grd.Column(g_Devin485fraredrow.Item(node.Key)).Visible = False g_grd.DrawMode = DrawModeEnum.Normal g_grd.Range(TableInteraction.TableRowNumber.Max, g_Devin485fraredrow.Item(node.Key), g_grd.Rows - 1, g_Devin485fraredrow.Item(node.Key)).ClearText() Console.WriteLine(g_grd.Cell(8, g_Devin485fraredrow.Item(node.Key)).Text) ' g_grd.Column(g_DevRELAYrow.Item(node.Key)).Locked = True g_grd.Range(TableInteraction.TableRowNumber.Max, g_Devin485fraredrow.Item(node.Key), g_grd.Rows - 1, g_Devin485fraredrow.Item(node.Key)).ForeColor = Color.Black g_grd.DrawMode = DrawModeEnum.Normal End If Next End Sub Public Sub CURTAIN_initTable(li As List(Of String)) Table_Grid1.NewFile() Table_Grid1.Rows = li.Count + 1 Table_Grid1.Cols = 5 Table_Grid1.ExtendLastCol = True Table_Grid1.Range(0, 0, Table_Grid1.Rows - 1, Table_Grid1.Cols - 1).Alignment = FlexCell.AlignmentEnum.CenterCenter For i = 0 To li.Count If i = 0 Then Table_Grid1.Cell(i, 1).Text = "继电器描述" Table_Grid1.Cell(i, 2).Text = "继电器" Table_Grid1.Cell(i, 3).Text = "延时" Table_Grid1.Cell(i, 4).Text = "延时单位" Table_Grid1.Column(1).Locked = True Table_Grid1.Column(4).Locked = True Table_Grid1.Column(2).CellType = CellTypeEnum.ComboBox Table_Grid1.ComboBox(2).Locked = True Table_Grid1.Column(2).Width = 450 Table_Grid1.Column(3).CellType = CellTypeEnum.ComboBox 'Table_Grid1.ComboBox(3).Locked = True Continue For Else Table_Grid1.Cell(i, 1).Text = li.Item(i - 1) End If Table_Grid1.Cell(i, 4).Text = "秒" Next End Sub Private Sub Temp_Grid_ComboDropDown(Sender As Object, e As Grid.ComboDropDownEventArgs) Handles Temp_Grid.ComboDropDown Temp_Grid.ComboBox(e.Col).Items.Clear() Temp_Grid.ComboBox(e.Col).Items.Add("") Select Case e.Row Case 1 If Not IsNothing(g_Devinfraredrow) OrElse g_Devinfraredrow.Count > 0 Then For Each nodex In g_Devinfraredrow.Values Dim Anostr = g_grd.Cell(TableInteraction.TableRowNumber.FunctionChildNodeAnother, nodex).Text g_grd.Row(TableInteraction.TableRowNumber.FunctionChildNodeAnother).Visible = True If String.IsNullOrEmpty(Anostr) Then Continue For Dim gdevname = New CtabRange(g_grd, TableInteraction.TableRowNumber.DeviceName, nodex) Anostr = $"{gdevname.devname}_{Anostr}" Temp_Grid.ComboBox(e.Col).Items.Add(Anostr) Next End If Return Case 2 If Not IsNothing(g_Devintemp) OrElse g_Devintemp.Count > 0 Then For Each nodex In g_Devintemp.Values Dim Anostr = g_grd.Cell(TableInteraction.TableRowNumber.FunctionChildNodeAnother, nodex).Text If String.IsNullOrEmpty(Anostr) Then Continue For Dim gdevname = New CtabRange(g_grd, TableInteraction.TableRowNumber.DeviceName, nodex) Anostr = $"{gdevname.devname}_{Anostr}" Temp_Grid.ComboBox(e.Col).Items.Add(Anostr) Next End If Return Case Else If Not IsNothing(g_DevRELAYrow) OrElse g_DevRELAYrow.Count > 0 Then For Each nodex In g_DevRELAYrow.Values Dim Anostr = g_grd.Cell(TableInteraction.TableRowNumber.FunctionChildNodeAnother, nodex).Text If String.IsNullOrEmpty(Anostr) Then Continue For Dim gdevname = New CtabRange(g_grd, TableInteraction.TableRowNumber.DeviceName, nodex) Anostr = $"{gdevname.devname}_{Anostr}" Temp_Grid.ComboBox(e.Col).Items.Add(Anostr) Next End If Return End Select End Sub Private IsTemp_GridCellChange As Boolean = True Private Sub Temp_Grid_CellChange(Sender As Object, e As Grid.CellChangeEventArgs) Handles Temp_Grid.CellChange If IsTemp_GridCellChange Then Dim redstrin As String = Temp_Grid.Cell(1, 2).Text.Trim 'If String.IsNullOrEmpty(redstrin) Then ' 'For i = Temproweven.冷阈开 To Temproweven.max - 1 ' ' 'Temp_Grid.Cell(i, 2).Locked = False ' 'Next 'Else ' IsTemp_GridCellChange = False ' For i = Temproweven.冷阈开 To Temproweven.max - 1 ' Temp_Grid.Cell(i, 2).Text = "" ' 'Temp_Grid.Cell(i, 2).Locked = True ' Next ' IsTemp_GridCellChange = True 'End If End If End Sub #End Region #Region "语音" Private Sub Voice_InitTable() Table_Grid1.NewFile() Table_Grid1.DrawMode = DrawModeEnum.OwnerDraw Table_Grid1.Rows = 1 Table_Grid1.Cols = 5 Table_Grid1.ExtendLastCol = True Table_Grid1.Range(0, 0, 0, 0).Alignment = FlexCell.AlignmentEnum.CenterCenter With Table_Grid1 .Cell(0, 1).Text = "词条组" .Cell(0, 2).Text = "词条" .Cell(0, 3).Text = "设备类型" .Cell(0, 4).Text = "设备名称" .Column(1).Locked = True .Column(2).Locked = True .Column(2).Visible = False .Column(1).Width = 320 .Column(2).Width = 120 .Column(3).Visible = False .Column(4).Width = 120 .Column(4).CellType = CellTypeEnum.ComboBox .ComboBox(4).Locked = True End With Voice_FillInTable() End Sub Private VoiceNode_Dic As Dictionary(Of String, List(Of String)) Private Sub Voice_FillInTable() VoiceNode_Dic = New Dictionary(Of String, List(Of String)) For Each node In Resultmodel.Config If node.CFG_Type.Equals("XiaoBaoCMD") Then Dim li As New List(Of String) Table_Grid1.AddItem("") Table_Grid1.Row(Table_Grid1.Rows - 1).Locked = True Table_Grid1.Cell(Table_Grid1.Rows - 1, 1).Text = node.Name For Each Cnode In node.Attributes Table_Grid1.AddItem("") Table_Grid1.Cell(Table_Grid1.Rows - 1, 1).Text = Cnode.Name Table_Grid1.Cell(Table_Grid1.Rows - 1, 1).Tag = node.Name li.Add(Cnode.Name) If Voice_Isinteninthe(node.Name, Cnode.DataRangeValue) Then If g_Devservice.ContainsKey(Cnode.DataRangeValue) Then Table_Grid1.Cell(Table_Grid1.Rows - 1, 4).Text = Cnode.DataRangeValue Continue For End If If g_DevScenenumber.ContainsKey(Cnode.DataRangeValue) Then Table_Grid1.Cell(Table_Grid1.Rows - 1, 4).Text = Cnode.DataRangeValue Continue For End If For Each index In g_ColumnAnothername If index.Value.Equals(Cnode.DataRangeValue) Then Table_Grid1.Cell(Table_Grid1.Rows - 1, 4).Text = index.Key Exit For End If Next End If Next VoiceNode_Dic.Add(node.Name, li) End If Next End Sub Private Function Voice_Isinteninthe(fnoe As String, keystr As String) As Boolean ' g_grd Dim result As Boolean = False If String.IsNullOrEmpty(keystr) Then Return result ' Select Case fnoe 'Case "0 场景" 'result = g_DevScenenumber.ContainsKey(keystr) If Not result Then result = g_DevScenenumber.ContainsKey(keystr) End If ' Case "1 继电器" If Not result Then result = g_DevRELAYrow.ContainsKey(keystr) End If If Not result Then result = g_DevDimming.ContainsKey(keystr) End If ' Case "4 服务信息" 'result = g_Devservice.ContainsKey(keystr) If Not result Then result = g_Devservice.ContainsKey(keystr) End If ' Case "5 窗帘" If Not result Then result = g_DevinCURTAINdrow.ContainsKey(keystr) End If If Not result Then result = g_Devin485fraredrow.ContainsKey(keystr) End If ' Case "7 空调" If Not result Then result = g_Devintemp.ContainsKey(keystr) End If ' Case "15 电视" If Not result Then result = g_Devinfraredrow.ContainsKey(keystr) End If ' Case "16 调光" If Not result Then result = g_DevDimming.ContainsKey(keystr) End If 'Case "18 灯带" If Not result Then result = g_DevDimming.ContainsKey(keystr) End If ' Case "21 音乐" ' End Select Return result End Function Private Function Voice_SelectDropdownItem(keystr As String, ecol As Integer) As List(Of String) ' g_grd Dim li As New List(Of String) 'Select Case keystr ' Case "0 场景" For Each node In g_DevScenenumber li.Add($"{node.Key }") Next ' Case "1 继电器" For Each node In g_DevRELAYrow.Values Dim Anostr = g_grd.Cell(TableInteraction.TableRowNumber.FunctionChildNodeAnother, node).Text If String.IsNullOrEmpty(Anostr) Then Continue For Dim gdevname = New CtabRange(g_grd, TableInteraction.TableRowNumber.DeviceName, node) Anostr = $"{gdevname.devname}_{Anostr}" li.Add($"{Anostr}") Next For Each node In g_DevDimming.Values Dim Anostr = g_grd.Cell(TableInteraction.TableRowNumber.FunctionChildNodeAnother, node).Text If String.IsNullOrEmpty(Anostr) Then Continue For Dim gdevname = New CtabRange(g_grd, TableInteraction.TableRowNumber.DeviceName, node) Anostr = $"{gdevname.devname}_{Anostr}" li.Add($"{Anostr}") Next ' Case "4 服务信息" For Each node In g_Devservice 'Dim Anostr = g_grd.Cell(node, TableInteraction.TableColNumber.KeyVal).Text 'If String.IsNullOrEmpty(Anostr) Then Continue For 'Dim gdevname = New CtabRange(g_grd, node, TableInteraction.TableColNumber.DeviceName) 'Anostr = $"{gdevname.devname}_{Anostr}" li.Add($"{node.Key }") Next ' resulrdic.Add($"{hostname }*{_grd.Cell(i, TableColNumber.KeyVal).Text }*HOSTSERVICE", i) ' Case "5 窗帘" For Each node In g_DevinCURTAINdrow.Values Dim Anostr = g_grd.Cell(TableInteraction.TableRowNumber.FunctionChildNodeAnother, node).Text If String.IsNullOrEmpty(Anostr) Then Continue For Dim gdevname = New CtabRange(g_grd, TableInteraction.TableRowNumber.DeviceName, node) Anostr = $"{gdevname.devname}_{Anostr}" li.Add($"{Anostr}") Next For Each node In g_Devin485fraredrow.Values Dim Anostr = g_grd.Cell(TableInteraction.TableRowNumber.FunctionChildNodeAnother, node).Text If String.IsNullOrEmpty(Anostr) Then Continue For Dim gdevname = New CtabRange(g_grd, TableInteraction.TableRowNumber.DeviceName, node) Anostr = $"{gdevname.devname}_{Anostr}" li.Add($"{Anostr}") Next ' Case "7 空调" For Each node In g_Devintemp.Values Dim Anostr = g_grd.Cell(TableInteraction.TableRowNumber.FunctionChildNodeAnother, node).Text If String.IsNullOrEmpty(Anostr) Then Continue For Dim gdevname = New CtabRange(g_grd, TableInteraction.TableRowNumber.DeviceName, node) Anostr = $"{gdevname.devname}_{Anostr}" li.Add($"{Anostr}") Next ' Case "15 电视" For Each node In g_Devinfraredrow.Values Dim Anostr = g_grd.Cell(TableInteraction.TableRowNumber.FunctionChildNodeAnother, node).Text If String.IsNullOrEmpty(Anostr) Then Continue For Dim gdevname = New CtabRange(g_grd, TableInteraction.TableRowNumber.DeviceName, node) Anostr = $"{gdevname.devname}_{Anostr}" li.Add($"{Anostr}") Next ' Case "16 调光" 'For Each node In g_DevDimming.Values ' Dim Anostr = g_grd.Cell(TableInteraction.TableRowNumber.FunctionChildNodeAnother, node).Text ' If String.IsNullOrEmpty(Anostr) Then Continue For ' Dim gdevname = New CtabRange(g_grd, TableInteraction.TableRowNumber.DeviceName, node) ' Anostr = $"{gdevname.devname}_{Anostr}" ' li.Add($"{Anostr}") 'Next ' Case "18 灯带" 'For Each node In g_DevDimming.Values ' Dim Anostr = g_grd.Cell(TableInteraction.TableRowNumber.FunctionChildNodeAnother, node).Text ' If String.IsNullOrEmpty(Anostr) Then Continue For ' Dim gdevname = New CtabRange(g_grd, TableInteraction.TableRowNumber.DeviceName, node) ' Anostr = $"{gdevname.devname}_{Anostr}" ' li.Add($"{Anostr}") 'Next '' Case "21 音乐" 'End Select Return li End Function Private Sub Table_Grid1_OwnerDrawCell(Sender As Object, e As Grid.OwnerDrawCellEventArgs) Handles Table_Grid1.OwnerDrawCell If e.Row < 1 OrElse e.Col <> 1 Then Return Dim i, j As Integer Dim blnDrawLine As Boolean Dim node, tmpNode As RowNode Dim intLevel As Integer Dim intWidth As Integer Dim intAdd As Integer '判断是否为集合 If VoiceNode_Dic.ContainsKey(Table_Grid1.Cell(e.Row, e.Col).Text) Then intWidth = 10 intAdd = 6 Else intWidth = 20 intAdd = 26 End If '画树线 Dim pen As New System.Drawing.Pen(Color.CornflowerBlue, 1) Try pen.DashStyle = Drawing2D.DashStyle.Solid If intWidth = 10 AndAlso VoiceNode_Dic.Item(Table_Grid1.Cell(e.Row, e.Col).Text).Count > 0 Then '+/- Dim rect As New Rectangle(e.Bounds.Left + 2 + intLevel * intWidth, CInt(e.Bounds.Top + (e.Bounds.Height - 9) / 2), 8, 8) e.Graphics.FillRectangle(Brushes.White, rect) e.Graphics.DrawRectangle(Pens.Black, rect) If e.Row + 1 < Table_Grid1.Rows AndAlso Table_Grid1.Row(e.Row + 1).Visible = False Then e.Graphics.DrawLine(Pens.Black, rect.Left + 2, rect.Top + 4, rect.Right - 2, rect.Top + 4) e.Graphics.DrawLine(Pens.Black, rect.Left + 4, rect.Top + 2, rect.Left + 4, rect.Bottom - 2) Else e.Graphics.DrawLine(Pens.Black, rect.Left + 2, rect.Top + 4, rect.Right - 2, rect.Top + 4) 'e.Graphics.DrawLine(pen, CInt(e.Bounds.Left + intWidth * i + intAdd), CInt(e.Bounds.Top + e.Bounds.Height / 2) + 7, CInt(e.Bounds.Left + intWidth * i + intAdd), CInt(e.Bounds.Bottom + 1)) e.Graphics.DrawLine(pen, CInt(e.Bounds.Left + intWidth * i + intAdd), CInt(e.Bounds.Top + e.Bounds.Height / 2), CInt(e.Bounds.Left + intWidth * i + intAdd), CInt(e.Bounds.Bottom + 1)) End If Else '上半部分 e.Graphics.DrawLine(pen, CInt(e.Bounds.Left + 10 * i + 6), CInt(e.Bounds.Top - 1), CInt(e.Bounds.Left + 10 * i + 6), CInt(e.Bounds.Top + e.Bounds.Height / 2)) If e.Row + 1 < Table_Grid1.Rows AndAlso Not VoiceNode_Dic.ContainsKey(Table_Grid1.Cell(e.Row + 1, e.Col).Text) Then '下半部分 e.Graphics.DrawLine(pen, CInt(e.Bounds.Left + 10 * i + 6), CInt(e.Bounds.Top + e.Bounds.Height / 2), CInt(e.Bounds.Left + 10 * i + 6), CInt(e.Bounds.Bottom + 1)) End If '水平的 e.Graphics.DrawLine(pen, CInt(e.Bounds.Left + intWidth * (intLevel - 1) + intAdd), CInt(e.Bounds.Top + e.Bounds.Height / 2), CInt(e.Bounds.Left + intWidth * (intLevel - 1) + intAdd + 10), CInt(e.Bounds.Top + e.Bounds.Height / 2)) End If '文字 Dim bColor As New SolidBrush(Table_Grid1.Cell(e.Row, e.Col).ForeColor) If bColor.Color.A = 0 Then bColor.Color = Color.Black With Table_Grid1.Cell(e.Row, e.Col) If intWidth = 10 Then Dim ft = New Font(.Font, FontStyle.Bold) e.Graphics.DrawString(.Text, ft, bColor, e.Bounds.Left + intWidth * intLevel + 12, e.Bounds.Top + (e.Bounds.Height - e.Graphics.MeasureString(.Text, .Font).Height) / 2 + 1) Else e.Graphics.DrawString(.Text, .Font, bColor, e.Bounds.Left + intWidth * intLevel + 15, e.Bounds.Top + (e.Bounds.Height - e.Graphics.MeasureString(.Text, .Font).Height) / 2 + 1) End If End With Catch ex As Exception End Try e.Handled = True End Sub Private Sub Table_Grid1_Click(Sender As Object, e As EventArgs) Handles Table_Grid1.Click If g_DevType = FromDevType.Voice Then Try Dim point As Point = Table_Grid1.PointToClient(System.Windows.Forms.Cursor.Position) Dim cel As Cell = Table_Grid1.HitTest(point.X, point.Y) If cel Is Nothing Then Return If cel.Row < 1 OrElse cel.Col <> 1 Then Return If Not VoiceNode_Dic.ContainsKey(Table_Grid1.Cell(cel.Row, cel.Col).Text) Then Return Dim intWidth As Integer = 10 Dim rect As New Rectangle(cel.Bounds.Left + 2, cel.Bounds.Top + ((cel.Bounds.Height - 9) \ 2), 8, 8) If rect.Contains(point) = False Then Return Dim li As List(Of String) = VoiceNode_Dic.Item(Table_Grid1.Cell(cel.Row, cel.Col).Text) For i As Integer = 0 To li.Count - 1 Table_Grid1.Row(cel.Row + 1 + i).Visible = Not Table_Grid1.Row(cel.Row + 1 + i).Visible Next Table_Grid1.Refresh() Catch ex As Exception Console.WriteLine($"Grid_Click Error:{ex.Message}") End Try End If End Sub Private Sub Grid1_CellChange(Sender As Object, e As Grid.CellChangeEventArgs) Handles Grid1.CellChange If e.Row > 0 Then Dim Strarry() As String = Grid1.Cell(e.Row, 1).Text.Split("*") If IsNothing(Resultmodel) Then Return For Each node In Resultmodel.Nodes If node.Name.Equals(Strarry(0)) Then For Each index In node.Nodes If index.LoopAddr.Equals(Strarry(1)) Then index.DefaultAliasName = Grid1.Cell(e.Row, 2).Text End If Next Exit For Else Continue For End If Next End If End Sub #End Region #Region "FreshAir" Public Sub FreshAirInitTable(li As List(Of String)) With Table_Grid1 .NewFile() 'Table_Grid1.DrawMode = DrawModeEnum.OwnerDraw .Rows = 1 .Cols = 3 Table_Grid1.ExtendLastCol = True .Range(0, 0, 0, 0).Alignment = FlexCell.AlignmentEnum.CenterCenter .Column(2).CellType = CellTypeEnum.ComboBox .Cell(0, 1).Text = "继电器描述" .Cell(0, 2).Text = "继电器" .Column(1).Locked = True .Column(0).Visible = True .Column(1).Width = 120 .Column(2).Width = 120 .Column(1).Alignment = FlexCell.AlignmentEnum.CenterCenter .Column(2).Alignment = FlexCell.AlignmentEnum.CenterCenter End With FreshAirTableAddRow(li) End Sub Public Sub FreshAirTableAddRow(li As List(Of String)) For Each index In li Table_Grid1.AddItem("") Table_Grid1.Cell(Table_Grid1.Rows - 1, 1).Text = index Next End Sub Private Sub FreshAir_SetIDOpenDO() If Not IsNothing(g_DevRELAYrow) AndAlso g_DevRELAYrow.Count > 0 AndAlso Not String.IsNullOrEmpty(Resultmodel.Desc.ProtocolData) Then Dim buf() As String = Resultmodel.Desc.ProtocolData.Split(",") For i = 0 To buf.Length - 1 Dim cbuf() As String = buf(i).Split("*") Dim skey As String = $"{cbuf(0)}*{cbuf(1)}*{cbuf(2)}" For Each index In g_ColumnAnothername If index.Value.Equals(skey) Then Table_Grid1.Cell(i + 1, 2).Text = index.Key If cbuf.Length > 3 Then Table_Grid1.Cell(i + 1, 3).Text = cbuf(3) End If Exit For End If Next Next End If End Sub Private Sub CheckBox2_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox2.CheckedChanged CheckBox3.Checked = CheckBox2.Checked End Sub Private Sub FdevtypeCom_SelectedIndexChanged(sender As Object, e As EventArgs) Handles FdevtypeCom.SelectedIndexChanged SetPowerThresholdconfig(Resultmodel, "父设备类型", FdevtypeCom.Text) End Sub Private Sub FdevPortCom_SelectedIndexChanged(sender As Object, e As EventArgs) Handles FdevPortCom.SelectedIndexChanged SetPowerThresholdconfig(Resultmodel, "父设备端口", FdevPortCom.Text) End Sub Private Sub FdevPortText_SelectedIndexChanged(sender As Object, e As EventArgs) Handles FdevPortText.SelectedIndexChanged SetPowerThresholdconfig(Resultmodel, "父设备地址", FdevPortText.Text) End Sub Private Sub CheckBox6_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox6.CheckedChanged If CheckBox6.Checked Then SetPowerThresholdconfig(Resultmodel, "水机无阀", 1) Else SetPowerThresholdconfig(Resultmodel, "水机无阀", 0) End If End Sub Public IsColorTemp As Boolean Private Sub ComboBox1_SelectedValueChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedValueChanged '判断是否为特定类型 Dim vl As Integer = 0 Integer.TryParse(ComboBox1.Text, vl) If g_DevType = FromDevType.Dev_ColorTemp Then For i = 1 To Table_Grid1.Rows - 1 Dim v2 As Integer = -1 Integer.TryParse(Table_Grid1.Cell(i, 0).Text, v2) If v2 <= vl Then Table_Grid1.Row(i).Visible = True Else Table_Grid1.Row(i).Visible = False End If Next Else If g_DevType = FromDevType.Temp Then Else Resultmodel.Desc.DevDescription = vl End If End If End Sub Private Sub initGrid() IsColorTemp = False Table_Grid1.Visible = False Table_Grid1.AutoRedraw = False With Table_Grid1 .NewFile() 'Table_Grid1.DrawMode = DrawModeEnum.OwnerDraw .Rows = 1 .Cols = 7 Table_Grid1.ExtendLastCol = True .Range(0, 0, 0, 0).Alignment = FlexCell.AlignmentEnum.CenterCenter .Column(2).CellType = CellTypeEnum.ComboBox .Column(3).CellType = CellTypeEnum.ComboBox .Column(4).CellType = CellTypeEnum.ComboBox .Column(5).CellType = CellTypeEnum.ComboBox .Cell(0, 1).Text = "色温回路" .Cell(0, 2).Text = "色温回路类型" .Cell(0, 3).Text = "设备类型" .Cell(0, 4).Text = "设备地址" .Cell(0, 5).Text = "设备回路" .Cell(0, 6).Text = "回路名称" .ComboBox(2).Locked = True .ComboBox(3).Locked = True .ComboBox(4).Locked = True .ComboBox(5).Locked = True .Column(6).Locked = True .Column(1).Locked = True .Column(0).Visible = False '.Column(3).Locked = True '.Column(4).Locked = True '.Column(5).Locked = True .Column(1).Width = 230 .Column(2).Width = 230 .Column(3).Width = 180 .Column(4).Width = 180 .Column(5).Width = 200 .Column(1).Alignment = FlexCell.AlignmentEnum.CenterCenter .Column(2).Alignment = FlexCell.AlignmentEnum.CenterCenter .Column(3).Alignment = FlexCell.AlignmentEnum.CenterCenter .Column(4).Alignment = FlexCell.AlignmentEnum.CenterCenter .Column(5).Alignment = FlexCell.AlignmentEnum.CenterCenter .Column(6).Alignment = FlexCell.AlignmentEnum.CenterCenter End With For Each node In Resultmodel.Nodes For i = 1 To node.Nodes.Count Dim Index = node.Nodes(i - 1) If Index.DefaultClass.Equals("Dev_ColorTemp") Then Table_Grid1.AddItem("") Table_Grid1.Row(Table_Grid1.Rows - 1).Visible = False Dim spbuf() As String = Nothing If Not String.IsNullOrEmpty(Index.DefaultAliasName) Then spbuf = Index.DefaultAliasName.Split(",") Table_Grid1.Cell(Table_Grid1.Rows - 1, 1).Text = spbuf(0) Else Table_Grid1.Cell(Table_Grid1.Rows - 1, 1).Text = Index.Name End If Table_Grid1.Cell(Table_Grid1.Rows - 1, 0).Text = i Table_Grid1.Range(Table_Grid1.Rows - 1, 3, Table_Grid1.Rows - 1, 5).Merge() Table_Grid1.Range(Table_Grid1.Rows - 1, 1, Table_Grid1.Rows - 1, 6).BackColor = Color.Gray Table_Grid1.Range(Table_Grid1.Rows - 1, 3, Table_Grid1.Rows - 1, 5).Locked = True Table_Grid1.Range(Table_Grid1.Rows - 1, 0, Table_Grid1.Rows - 1, 1).Locked = True If Not IsNothing(spbuf) AndAlso spbuf.Length = 2 Then Table_Grid1.Cell(Table_Grid1.Rows - 1, 2).Text = spbuf(1) If Not String.IsNullOrEmpty(Index.Description) Then Dim li As List(Of List(Of String)) = JsonConvert.DeserializeObject(Of List(Of List(Of String)))(Index.Description) For Each linode In li Table_Grid1.AddItem("") Table_Grid1.Range(Table_Grid1.Rows - 1, 1, Table_Grid1.Rows - 1, 2).BackColor = Color.LightGray Table_Grid1.Range(Table_Grid1.Rows - 1, 0, Table_Grid1.Rows - 1, 2).Locked = True Table_Grid1.Row(Table_Grid1.Rows - 1).Visible = False Table_Grid1.Cell(Table_Grid1.Rows - 1, 0).Text = i Table_Grid1.Cell(Table_Grid1.Rows - 1, 5).Tag = linode(3) Table_Grid1.Cell(Table_Grid1.Rows - 1, 4).Tag = linode(4) Table_Grid1.Cell(Table_Grid1.Rows - 1, 3).Text = linode(0) Table_Grid1.Cell(Table_Grid1.Rows - 1, 4).Text = linode(1) Table_Grid1.Cell(Table_Grid1.Rows - 1, 5).Text = linode(2) Table_Grid1.Cell(Table_Grid1.Rows - 1, 6).Text = linode(5) Next End If Else Table_Grid1.Cell(Table_Grid1.Rows - 1, 2).Text = "1:双路混光(一行配冷色二行配暖色)" Table_Grid1.AddItem("") Table_Grid1.Range(Table_Grid1.Rows - 1, 1, Table_Grid1.Rows - 1, 2).BackColor = Color.LightGray Table_Grid1.Range(Table_Grid1.Rows - 1, 0, Table_Grid1.Rows - 1, 2).Locked = True Table_Grid1.Row(Table_Grid1.Rows - 1).Visible = False Table_Grid1.Cell(Table_Grid1.Rows - 1, 0).Text = i Table_Grid1.AddItem("") Table_Grid1.Range(Table_Grid1.Rows - 1, 1, Table_Grid1.Rows - 1, 2).BackColor = Color.LightGray Table_Grid1.Range(Table_Grid1.Rows - 1, 0, Table_Grid1.Rows - 1, 2).Locked = True Table_Grid1.Row(Table_Grid1.Rows - 1).Visible = False Table_Grid1.Cell(Table_Grid1.Rows - 1, 0).Text = i End If End If Next Next Table_Grid1.AutoRedraw = True Table_Grid1.Visible = True IsColorTemp = True End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click SplitContainer6.Panel1Collapsed = Not SplitContainer6.Panel1Collapsed End Sub Private Sub TextBox3_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox3.KeyPress e.Handled = True '输入0-9 If e.KeyChar = vbBack OrElse (Asc(e.KeyChar) >= 32 AndAlso Asc(e.KeyChar) <= 126) Then e.Handled = False End If End Sub Private Sub AddPeripherals_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed Me.DialogResult = System.Windows.Forms.DialogResult.Cancel Me.Close() End Sub #End Region End Class