Files
Desktop_BLVStudio/BLV_Studio/Test/GridTest/AddPeripherals.vb

3194 lines
136 KiB
VB.net
Raw Normal View History

2025-12-11 10:06:44 +08:00
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
<Description("输入序号")>
输入序号 = 0
<Description("设备别名")>
按键别名
<Description("背光")>
按键反馈灯
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 = $"设备端口:{ShowDevicePortResultmodel)}"
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 = $"设备端口:{ShowDevicePortResultmodel)}"
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.TryParsestrbuf0 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 = $"{ShowDevicePortResultmodel)}{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 IsNothingLstart 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 IsNothingLstart 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 IsNothingLstart 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.Rowi.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.Nodesi - 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 IsNothingOldcdic AndAlso Oldcdic.Count > 0 Then
For Each oldnode In Oldcdic
If Not IsNothingoldnode 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 IsNothingcdnode 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 IsNothingLstart 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 IsNothingLstart 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 IsNothingLstart 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 IsNothingLstart 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 IsNothingLstart 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 IsNothingLstart 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 IsNothingLstart 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 IsNothingLstart 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 IsNothingLstart 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 IsNothingLstart 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 IsNothingrvdicv 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 IsNothingoldbuf 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.Nodesi - 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