2025-12-11 10:06:44 +08:00
Imports System . ComponentModel
Imports System . Net
Imports BLV_Studio . EnumExtend
Imports BLV_Studio . GridModel . DeviceEventModel
Imports FlexCell
Imports Newtonsoft . Json
Public Class TableInteraction
#Region "全局变量"
Public _isVisible_Attributes As Boolean = True
Public _isVisible_Port As Boolean = True
Public _isVisible_Action As Boolean = True
Public _isVisible_Scenes As Boolean = True
Public _isVisible_Conditions As Boolean = True
''' <summary>
''' RCU设备名
''' </summary>
Public _RcuModelName As String = " "
Public Property AliasEncoding As Text . Encoding
''' <summary>刷新锁计数</summary>
Private _autoRedraw As Integer
''' <summary>进度条 控件</summary>
Public _tsp As ToolStripProgressBar
''' <summary>表格控件</summary>
Public _grd As FlexCell . Grid
''' <summary>条件文件名</summary>
Public ConditionFileName As String
''' <summary>
''' 设备对象基类信息
''' </summary>
''' <returns></returns>
Public Property BasicClasses As DeviceObjectClasses
''' <summary>基类文件名</summary>
Public BasicClassFilename As String
''' <summary>
''' 条件
''' </summary>
''' <returns></returns>
Public Property Condictions As ConfigActionConcitons
Public ConfigInfo As ConfigInfoStuct
''' <summary>
''' 主机名
''' </summary>
''' <returns></returns>
Property hostname As String
''' <summary>
''' 设备键值对 设备名-设备信息集合 主机=主机名 外设=外设名+播马地址
''' </summary>
Public Dic_Devicemodel As Dictionary ( Of String , DeviceModel )
''' <summary>
''' 设备动作信息 设备名-动作信息集合
''' </summary>
Public Dic_ActionConfiguration As List ( Of TableRowTag )
Private _Tip As String = " " ''' $"{ Chr(TableColSwitchKeyDate.TurnOn)} 表示开{vbLf }{ Chr(TableColSwitchKeyDate.TurnDrown)} 表示关{vbLf }数字 表示亮度百分比{vbCrLf }" '"表示先关后开{vbLf }{ Chr(TableColSwitchKeyDate.OnTodrowm)} 表示先开后关{vbLf }{ Chr(TableColSwitchKeyDate.TurnOn)} 表示只开不关{vbLf }{ Chr(TableColSwitchKeyDate.TurnDrown)} 表示只关不开{vbLf }数字 表示亮度百分比{vbCrLf }"
''' <summary>
''' 场景号 累加
''' </summary>
Private _SceneID As Integer = 1
''' <summary>文件是否有修改,如果有修改,则在关闭时提示保存</summary>
Public _isCellChanged As Boolean = True
Public _actionIndex As UShort
''' <summary>
''' 列的开始加载位置
''' </summary>
Private _ColumnStartLoad As Integer = TableColNumber . Max
'' <summary>
'' 服务集合!
'' </summary>
Private _ServerAction As Dictionary ( Of String , Integer )
''' <summary>
''' 服务插入行起始位
''' </summary>
Private _ServerInsertRows As Integer
Public ColumnAnothername As Dictionary ( Of String , String )
#End Region
#Region "枚举"
''' <summary>
''' 固定行
''' </summary>
Enum TableRowNumber
''' <summary>
''' 设备名
''' </summary>
DeviceName = 1
''' <summary>
''' 功能名
''' </summary>
FunctionName
FunctionAnotherName
''' <summary>
''' 功能下属节点ID
''' </summary>
FunctionChildNodeID
''' <summary>
''' 功能下属节点别名
''' </summary>
FunctionChildNodeAnother
''' <summary>
''' 条件列名
''' </summary>
ConditionalColumnName
Max
End Enum
''' <summary>
''' 固定列
''' </summary>
Enum TableColNumber
''' <summary>
''' 行号
''' </summary>
RowID = 0
<Description("设备地址")>
DeviceName
<Description("启用")>
choose
<Description("场景号")>
SceneID
<Description("键值")>
KeyVal
<Description("按键名称")>
KeyName
'<Description("设备类型")>
'DeviceType
<Description("场景属性")>
SceneAttribute
<Description("服务属性")>
ServerAttribute
InsertColumn
Max
End Enum
''' <summary>
''' 列数据的数据类型
''' </summary>
Enum TableColDateType
''' <summary>
''' 表列-音乐数据
''' </summary>
Music
''' <summary>
''' 表列-开关数据
''' </summary>
SwitchKey
''' <summary>
''' 表列-服务添加
''' </summary>
ServiceCondition
End Enum
''' <summary>
'''
''' </summary>
Enum TableColSwitchKeyDate
''' <summary>
''' 按键开
''' </summary>
TurnOn = - 24116
''' <summary>
''' 按键关
''' </summary>
TurnDrown = - 23592
''' <summary>
''' 表示先开后关
''' </summary>
'OnTodrowm = -24080
''' <summary>
''' 代表先关后开
''' </summary>
'drowmToOn = -24075
End Enum
Enum tabRange
devname
fr
lr
fc
lc
End Enum
#End Region
#Region "类 Body"
Public Sub New ( ByRef tsp As ToolStripProgressBar )
CopyActionData = New Dictionary ( Of Integer , String )
_actionIndex = 1
_tsp = tsp
Dic_Devicemodel = New Dictionary ( Of String , DeviceModel )
Dic_ActionConfiguration = New List ( Of TableRowTag )
_ServerAction = New Dictionary ( Of String , Integer )
ColumnAnothername = New Dictionary ( Of String , String )
AliasEncoding = Text . Encoding . GetEncoding ( " GBK " )
End Sub
#End Region
#Region "表格设置"
''' <summary>
''’
''' </summary>
''' <returns></returns>
Public Property Grid As Grid
Get
Return _grd
End Get
Set ( value As Grid )
_grd = value
grdRemoveHandler ( )
grdAddHandler ( )
End Set
End Property
Public Sub grdRemoveHandler ( )
RemoveHandler _grd . OwnerDrawCell , AddressOf Grid_OwnerDrawCell
RemoveHandler _grd . Click , AddressOf Grid_Click
RemoveHandler _grd . DoubleClick , AddressOf Grid_DoubleClick
RemoveHandler _grd . ComboDropDown , AddressOf Grid_ComboDropDown
'RemoveHandler _grd.ComboClick, AddressOf Grid_ComboClick
RemoveHandler _grd . CellChange , AddressOf Grid_CellChange
'RemoveHandler _grd.SelChange, AddressOf Grid_SelChange
'RemoveHandler _grd.KeyDown, AddressOf Grid_KeyDown
'RemoveHandler _grd.KeyUp, AddressOf Grid_KeyUp
'RemoveHandler _grd.MouseMove, AddressOf Grid_MouseMove
'RemoveHandler _grd.MouseWheel, AddressOf Grid_MouseWheel
'RemoveHandler _grd.LeaveCell, AddressOf Grid_LeaveCell
'RemoveHandler _grd.MouseDown, AddressOf Grid_MouseDown
'RemoveHandler _grd.MouseUp, AddressOf Grid_MouseUp
End Sub
Public Sub grdAddHandler ( )
'AddHandler _grd.MouseWheel, AddressOf Grid_MouseWheel
'AddHandler _grd.MouseMove, AddressOf Grid_MouseMove
'AddHandler _grd.KeyUp, AddressOf Grid_KeyUp
'AddHandler _grd.KeyDown, AddressOf Grid_KeyDown
'AddHandler _grd.SelChange, AddressOf Grid_SelChange
AddHandler _grd . CellChange , AddressOf Grid_CellChange
AddHandler _grd . ComboDropDown , AddressOf Grid_ComboDropDown
'AddHandler _grd.ComboClick, AddressOf Grid_ComboClick
AddHandler _grd . Click , AddressOf Grid_Click
AddHandler _grd . DoubleClick , AddressOf Grid_DoubleClick
AddHandler _grd . OwnerDrawCell , AddressOf Grid_OwnerDrawCell
'AddHandler _grd.LeaveCell, AddressOf Grid_LeaveCell
'AddHandler _grd.MouseDown, AddressOf Grid_MouseDown
'AddHandler _grd.MouseUp, AddressOf Grid_MouseUp
End Sub
Private Sub Grid_OwnerDrawCell ( Sender As Object , e As Grid . OwnerDrawCellEventArgs )
’ Console . WriteLine ( $ " Grid_OwnerDrawCell_{e.Row}_{ e.Col}_{_grd.Cell(e.Row, e.Col).Text } " )
If e . Row < TableRowNumber . Max OrElse e . Col < TableColNumber . InsertColumn Then
'Dim bColor As New SolidBrush(_grd.Cell(e.Row, e.Col).ForeColor)
'With _grd.Cell(e.Row, e.Col)
' Dim stringFormat = New StringFormat()
' stringFormat.Alignment = StringAlignment.Center
' Dim ft = New Font(_grd.DefaultFont.Name, .FontSize)
' Console.WriteLine($"Grid_OwnerDrawCell__【{ .Text}】color: 【{ .ForeColor}】 Left: 【{e.Bounds.Left}】 top: 【{e.Bounds.Top}】Height: 【{e.Bounds.Height}】Width: 【{e.Bounds.Width}】 ppp:【{e.Graphics.MeasureString(.Text, .Font).Height}】")
' Dim rect As RectangleF = New RectangleF(e.Bounds.Left, e.Bounds.Top + (e.Bounds.Height - e.Graphics.MeasureString(.Text, .Font).Height) / 2 + 2, e.Bounds.Width, e.Bounds.Height)
' e.Graphics.DrawString(.Text, ft, bColor, rect, stringFormat)
'End With
Return
End If
If Dic_ActionConfiguration . Count <= ( e . Row - TableRowNumber . Max ) Then
Return
End If
'获取显示内容
'Dim nodename As String = _grd.Cell(TableRowNumber.FunctionName, e.Col).Text
Dim celltext As String = _grd . Cell ( e . Row , e . Col ) . Text . Trim
Dim rowtag As TableRowTag = Dic_ActionConfiguration . Item ( e . Row - TableRowNumber . Max )
Dim Isflig As Boolean = False
'画树线
Dim pen As New System . Drawing . Pen ( Color . CornflowerBlue , 1 )
If Not String . IsNullOrEmpty ( _grd . Cell ( e . Row , e . Col ) . Text ) Then
Console . WriteLine ( _grd . Cell ( e . Row , e . Col ) . Text )
End If
Try
pen . DashStyle = Drawing2D . DashStyle . Solid
'判断内容
If rowtag . G_DicRow . ContainsKey ( e . Col ) Then
Dim cdrstr As String = rowtag . G_DicRow . Item ( e . Col )
Dim g_devname As New CtabRange ( _grd , TableRowNumber . FunctionName , e . Col )
Dim ctstr As String = EstimateFilag ( cdrstr , g_devname . devname )
Dim nbuf ( ) As String = cdrstr . Split ( vbLf )
If Not String . IsNullOrEmpty ( celltext ) AndAlso celltext . Equals ( ctstr ) AndAlso Not ( cdrstr . Substring ( 0 , 1 ) . Equals ( " 0 " ) AndAlso nbuf . Length = 1 ) Then
'+/-
For i = 0 To 8
e . Graphics . DrawLine ( Pens . Green , e . Bounds . Left , e . Bounds . Top + i , e . Bounds . Left + i , e . Bounds . Top )
Next
End If
End If
'文字
Dim bColor As New SolidBrush ( _grd . Cell ( e . Row , e . Col ) . ForeColor )
With _grd . Cell ( e . Row , e . Col )
Dim stringFormat = New StringFormat ( )
stringFormat . Alignment = StringAlignment . Center
Dim ft = New Font ( _grd . DefaultFont . Name , 8 . 2 )
' Console.WriteLine($"Grid_OwnerDrawCell__【{ .Text}】color: 【{ .ForeColor}】 Left: 【{e.Bounds.Left}】 top: 【{e.Bounds.Top}】Height: 【{e.Bounds.Height}】Width: 【{e.Bounds.Width}】 ppp:【{e.Graphics.MeasureString(.Text, .Font).Height}】")
Dim rect As RectangleF = New RectangleF ( e . Bounds . Left , e . Bounds . Top + ( e . Bounds . Height - e . Graphics . MeasureString ( . Text , . Font ) . Height ) / 2 + 2 , e . Bounds . Width , e . Bounds . Height )
e . Graphics . DrawString ( . Text , ft , bColor , rect , stringFormat )
End With
Catch ex As Exception
End Try
e . Handled = True
End Sub
Public Function EstimateFilag ( cellstr As String , nodename As String ) As String
If String . IsNullOrEmpty ( cellstr ) OrElse String . IsNullOrEmpty ( nodename ) Then Return String . Empty
Dim tbuf ( ) As String = cellstr . Split ( vbLf )
Dim cbuf ( ) As String = tbuf ( 0 ) . Split ( " , " )
If cbuf . Length < 2 Then Return String . Empty
Dim buf ( ) As String = cbuf ( cbuf . Length - 1 ) . Split ( " * " )
Dim result As String = String . Empty
Select Case nodename
2025-12-25 15:55:38 +08:00
Case " RKEY " , " lock "
2025-12-11 10:06:44 +08:00
result = cellstr
Case " CLED_FRESHAIR "
result = cellstr
Case " CLEDFLOORHEAT "
result = cellstr
Case " 485FloorHeat " , " 485FreshAir "
If buf . Length > 3 Then
cbuf = buf ( 3 ) . Split ( " " )
result = $ " {cbuf(cbuf.Length - 1)} "
End If
'Case
'result = $"{buf(3)}"
Case " 485MUSIC "
result = cellstr
'Case
' result = $"{buf(3)}"
Case " INFRARED_FORWARD "
If buf . Length = 3 Then
cbuf = buf ( 2 ) . Split ( " " )
result = $ " {cbuf(cbuf.Length - 1)} "
ElseIf buf . Length > 3 Then
cbuf = buf ( 2 ) . Split ( " " )
result = $ " {cbuf(cbuf.Length - 1)} "
cbuf = buf ( 3 ) . Split ( " " )
'result = $"{cbuf(cbuf.Length - 1)}"
result = $ " {result}:{cbuf(cbuf.Length - 1)} "
End If
Case " RELAY " , " PB_RELAY_DEVICE "
If buf . Length > 2 Then
cbuf = buf ( 2 ) . Split ( " " )
result = $ " {cbuf(cbuf.Length - 1)} "
If result . Equals ( " 开 " ) Then
result = Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ( )
ElseIf result . Equals ( " 关 " ) Then
result = Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ( )
End If
End If
'If buf.Length > 2 Then
' cbuf = buf(2).Split(" ")
' result = $"{cbuf(cbuf.Length - 1)}"
' If result.Equals("80") Then
' result = Chr(TableColSwitchKeyDate.TurnOn).ToString()
' ElseIf result.Equals("0") Then
' result = Chr(TableColSwitchKeyDate.TurnDrown).ToString()
' End If
'End If
Case " PB_LINE_CONTROL " , " PB_STRIP_DEVICE " , " PB_LED_DEVICE "
result = cellstr
'If buf.Length > 3 AndAlso ((tbuf(0).Contains("PB灯带亮度控制")) OrElse (tbuf(0).Contains("控制灯光"))) Then
' cbuf = buf(3).Split(" ")
' result = $"{cbuf(cbuf.Length - 1)}"
' If result.Equals("80") Then
' result = Chr(TableColSwitchKeyDate.TurnOn).ToString()
' ElseIf result.Equals("0") Then
' result = Chr(TableColSwitchKeyDate.TurnDrown).ToString()
' End If
'End If
Case " Dimming "
result = cellstr
If buf . Length > 2 AndAlso cellstr . Contains ( " 控制灯光 " ) AndAlso ( Not cellstr . Contains ( " 调光 " ) ) AndAlso ( Not cellstr . Contains ( " 控制灯光 - 仅 " ) ) Then
If buf . Length > 3 Then
cbuf = buf ( 3 ) . Split ( " " )
Else
cbuf = buf ( 2 ) . Split ( " " )
End If
result = $ " {cbuf(cbuf.Length - 1)} "
If result . Equals ( " 80 " ) AndAlso buf ( 2 ) . Contains ( " 开 " ) Then
result = Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ( )
ElseIf result . Equals ( " 0 " ) OrElse buf ( 2 ) . Contains ( " 关 " ) Then
result = Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ( )
Else
result = $ " {cbuf(cbuf.Length - 1)} "
End If
End If
Case " DO " , " LIGHT " , " DRY_CURTAIN " , " CURTAIN "
If buf . Length > 2 Then
cbuf = buf ( 2 ) . Split ( " " )
result = $ " {cbuf(cbuf.Length - 1)} "
End If
Case " RS485_Curtain "
result = cellstr
If buf . Length = 3 Then
cbuf = buf ( 2 ) . Split ( " " )
result = $ " {cbuf(cbuf.Length - 1)} "
End If
Case " MUSIC "
result = cellstr
Case " DRY_NoCard "
result = cellstr
Case " HOPO_Curtain "
result = cellstr
Case " Dev_VirtualGlobalSet "
result = cellstr
Case " Dev_ColorTemp "
result = cellstr
Case " BLEMUSIC "
result = cellstr
Case " Carbon_Device " , " Scene_Restore " , " Dev_Energy_Monitor "
result = cellstr
'Case
' result = $"{buf(2)}"
'Case
' result = $"{buf(2)}"
Case " Temp "
If buf . Length > 5 Then
'cbuf = buf(3).Split(" ")
'result = $"{cbuf(cbuf.Length - 1)}"
cbuf = buf ( 4 ) . Split ( " " )
result = $ " {cbuf(cbuf.Length - 1)} "
cbuf = buf ( 5 ) . Split ( " " )
result = $ " {result}{cbuf(cbuf.Length - 1)} "
End If
Case Else
End Select
Return result
End Function
Public Sub LoadTheHostTable ( model As DeviceModel )
'新主机项目 清空设备列表
Dic_Devicemodel . Clear ( )
Dic_ActionConfiguration . Clear ( )
_ServerAction . Clear ( )
ColumnAnothername . Clear ( )
'记录主机名称
hostname = model . Name
_ServerInsertRows = 0
_SceneID = 1
_ColumnStartLoad = TableColNumber . Max - 1
'加载表头
initGrid1 ( )
'加载设备
'将主机存入设备列表
Dic_Devicemodel . Add ( model . Name , model ) ' hostname = model.Name
'ShowRelay(model)
ShowRelay_Test ( model )
SpecifySetting ( model . Name , " " )
End Sub
''' <summary>
''' 表头初始化
''' </summary>
Public Sub initGrid1 ( )
LockGridAutoRedraw ( )
If Not IsNothing ( oldColDisplayDic ) Then
oldColDisplayDic . Clear ( )
End If
_grd . NewFile ( )
_grd . DefaultRowHeight = 21
_grd . DrawMode = DrawModeEnum . OwnerDraw
_grd . Cols = TableColNumber . Max
_grd . Rows = TableRowNumber . DeviceName
_grd . Column ( 0 ) . Visible = False
_grd . Row ( 0 ) . Visible = False
_grd . DefaultFont = New Font ( _grd . DefaultFont . Name , 8 )
'_grd.BackColorFixed = Color.LightPink
'_grd.BackColorFixedSel = Color.LightCoral
For i As Integer = TableRowNumber . DeviceName To TableRowNumber . Max - 1
_grd . AddItem ( " " )
Next
_grd . Row ( TableRowNumber . FunctionChildNodeAnother ) . Height = 70
With _grd . Range ( TableRowNumber . DeviceName , TableColNumber . SceneID , TableRowNumber . FunctionChildNodeID , TableColNumber . SceneAttribute )
. Merge ( )
. Alignment = AlignmentEnum . CenterCenter
End With
_grd . Cell ( TableRowNumber . DeviceName , TableColNumber . InsertColumn - 1 ) . Text = " 主机时间偏移 "
_grd . Cell ( TableRowNumber . DeviceName , TableColNumber . InsertColumn - 1 ) . Locked = True
'With _grd.Range(TableRowNumber.FunctionChildNodeID, TableColNumber.InsertColumn - 1, TableRowNumber.FunctionChildNodeID, TableColNumber.InsertColumn - 1)
' .Merge()
' .Alignment = AlignmentEnum.CenterCenter
'End With
With _grd . Cell ( TableRowNumber . FunctionAnotherName , TableColNumber . InsertColumn - 1 )
. Text = " 0 "
. CellType = CellTypeEnum . ComboBox
. Alignment = AlignmentEnum . CenterCenter
' .Locked = True
End With
With _grd . Range ( TableRowNumber . DeviceName , TableColNumber . DeviceName , TableRowNumber . FunctionChildNodeID , TableColNumber . choose )
. Merge ( )
. Alignment = AlignmentEnum . CenterCenter
. WrapText = True
End With
With _grd . Range ( TableRowNumber . FunctionChildNodeAnother , TableColNumber . DeviceName , TableRowNumber . FunctionChildNodeAnother , TableColNumber . InsertColumn - 1 )
. Merge ( )
. Alignment = AlignmentEnum . CenterCenter
. Locked = True
End With
_grd . Cell ( TableRowNumber . FunctionChildNodeAnother , TableColNumber . DeviceName ) . WrapText = True
With _grd . Cell ( TableRowNumber . DeviceName , TableColNumber . DeviceName )
. Text = " 取电设置 "
. Locked = True
. WrapText = True
End With
With _grd . Cell ( TableRowNumber . DeviceName , TableColNumber . SceneID )
. Text = _Tip
. Locked = True
. WrapText = True
End With
_grd . Cell ( TableRowNumber . ConditionalColumnName , TableColNumber . DeviceName ) . Text = EnumExtender . GetEnumDescription ( TableColNumber . DeviceName )
_grd . Cell ( TableRowNumber . ConditionalColumnName , TableColNumber . KeyVal ) . Text = EnumExtender . GetEnumDescription ( TableColNumber . KeyVal )
_grd . Column ( TableColNumber . KeyVal ) . Width = 30
_grd . Column ( TableColNumber . KeyVal ) . Locked = True
_grd . Cell ( TableRowNumber . ConditionalColumnName , TableColNumber . KeyName ) . Text = EnumExtender . GetEnumDescription ( TableColNumber . KeyName )
_grd . Cell ( TableRowNumber . ConditionalColumnName , TableColNumber . choose ) . Text = EnumExtender . GetEnumDescription ( TableColNumber . choose )
_grd . Column ( TableColNumber . choose ) . Width = 30
_grd . Cell ( TableRowNumber . ConditionalColumnName , TableColNumber . SceneID ) . Text = EnumExtender . GetEnumDescription ( TableColNumber . SceneID )
_grd . Column ( TableColNumber . SceneID ) . Width = 40
_grd . Column ( TableColNumber . SceneID ) . Locked = True
_grd . Column ( TableColNumber . InsertColumn ) . Width = 0
_grd . Column ( TableColNumber . choose ) . Width = 0
_grd . Cell ( TableRowNumber . ConditionalColumnName , TableColNumber . ServerAttribute ) . Text = EnumExtender . GetEnumDescription ( TableColNumber . ServerAttribute )
_grd . Cell ( TableRowNumber . ConditionalColumnName , TableColNumber . SceneAttribute ) . Text = EnumExtender . GetEnumDescription ( TableColNumber . SceneAttribute )
_grd . Range ( TableRowNumber . ConditionalColumnName , TableColNumber . DeviceName , TableRowNumber . ConditionalColumnName , TableColNumber . ServerAttribute ) . Locked = True
_grd . Cell ( TableRowNumber . ConditionalColumnName , TableColNumber . SceneAttribute ) . Text = EnumExtender . GetEnumDescription ( TableColNumber . SceneAttribute )
'_grd.Cell(TableRowNumber.ConditionalColumnName, TableColNumber.DeviceType).Text = EnumExtender.GetEnumDescription(TableColNumber.DeviceType)
_grd . Row ( TableRowNumber . FunctionChildNodeID ) . Locked = True
_grd . Row ( TableRowNumber . FunctionName ) . Visible = False
_grd . FrozenRows = TableRowNumber . Max - 1
_grd . FrozenCols = TableColNumber . Max - 2
'_grd.Column(TableColNumber.InsertColumn).AutoFit()
UnLockGridAutoRedraw ( )
End Sub
Public Sub AddToTableDevMode ( filepath As String )
Dim from1 As New AddPeripherals
from1 . Dirpath = filepath
from1 . g_grd = _grd
from1 . g_Devicemodel = Dic_Devicemodel
from1 . g_DevRELAYrow = GetDevLoopName ( " RELAY " , " PB_RELAY_DEVICE " )
from1 . g_Devinfraredrow = GetDevLoopName ( " INFRARED_FORWARD " )
from1 . g_Devintemp = GetDevLoopName ( " Temp " )
from1 . g_DevDimming = GetDevLoopName ( " Dimming " )
from1 . g_Devin485fraredrow = GetDevLoopName ( " RS485_Curtain " )
from1 . g_DevinCURTAINdrow = GetDevLoopName ( " CURTAIN " )
from1 . g_Devservice = GetHOSTSERVICENumber ( )
from1 . g_DevScenenumber = GetSceneNumbeAr ( )
from1 . g_ColumnAnothername = ColumnAnothername
If from1 . ShowDialog ( ) <> DialogResult . OK Then Return
If IsNothing ( from1 . Resultmodel ) Then
MsgBox ( " 添加外设设备失败! " )
Return
End If
ShowRelay ( from1 . Resultmodel , from1 . ResulDic )
Grid_Click ( Nothing , Nothing )
For Each index In from1 . Resultmodel . Nodes
If index . Interface . Equals ( " DI " ) AndAlso ( index . DEV_TYPE_DATA . Equals ( " 10 " ) OrElse index . DEV_TYPE_DATA . Equals ( " 24 " ) OrElse index . DEV_TYPE_DATA . Equals ( " 46 " ) ) Then
SpecifySetting ( from1 . Resultmodel . Name , " " )
End If
Next
End Sub
Public Shared Function CURTAIN_check ( grd As FlexCell . Grid , col As Integer ) As List ( Of Integer )
If IsNothing ( grd ) OrElse grd . Cols - 1 <= col Then Return Nothing
Dim li As New List ( Of Integer )
For i = TableRowNumber . Max To grd . Rows - 1
'Console.WriteLine($"{grd.Cell(i, col).Text.Trim}___{grd.Column(col).Locked}")
If ( Not String . IsNullOrEmpty ( grd . Cell ( i , col ) . Text . Trim ) ) OrElse grd . Column ( col ) . Locked Then
li . Add ( i )
End If
Next
Return li
End Function
Public Function GetSceneNumbeAr ( ) As Dictionary ( Of String , Integer )
Dim resulrdic As New Dictionary ( Of String , Integer )
For i = TableRowNumber . Max To _grd . Rows - 1
Dim g_devname = New CtabRange ( _grd , i , TableColNumber . DeviceName )
If g_devname . devname . Equals ( " HOSTSERVICE " ) Then
Continue For
End If
If _grd . Cell ( i , TableColNumber . SceneID ) . Text . Equals ( " 语音 " ) AndAlso String . IsNullOrEmpty ( _grd . Cell ( i , TableColNumber . SceneAttribute ) . Text ) Then
Continue For
End If
Dim ss As String = $ " {_grd.Cell(i, TableColNumber.SceneID).Text}*({_grd.Cell(i, TableColNumber.KeyName).Text}) "
resulrdic . Add ( $ " {_grd.Cell(i, TableColNumber.SceneID).Text}*({_grd.Cell(i, TableColNumber.KeyName).Text}) " , i )
Next
Return resulrdic
End Function
Public Function GetHOSTSERVICENumber ( ) As Dictionary ( Of String , Integer )
Dim resulrdic As New Dictionary ( Of String , Integer )
For i = TableRowNumber . Max To _grd . Rows - 1
Dim g_devname = New CtabRange ( _grd , i , TableColNumber . DeviceName )
If g_devname . devname . Equals ( " HOSTSERVICE " ) Then
Dim dkey As String = $ " {hostname}*HOSTSERVICE*{_grd.Cell(i, TableColNumber.KeyVal).Text }*({_grd.Cell(i, TableColNumber.KeyName).Text}) "
If resulrdic . ContainsKey ( dkey ) Then
Continue For
End If
resulrdic . Add ( dkey , i )
Else
Continue For
End If
Next
Return resulrdic
End Function
Public Function GetDevLoopName ( LoopName As String , Optional LoopName1 As String = Nothing ) As Dictionary ( Of String , Integer )
Dim resulrdic As New Dictionary ( Of String , Integer )
'resulrdic.Add("", 0)
For i = TableColNumber . InsertColumn To _grd . Cols - 1
Dim g_devname = New CtabRange ( _grd , TableRowNumber . FunctionName , i )
If g_devname . devname . Equals ( LoopName ) Then
Dim devname = New CtabRange ( _grd , TableRowNumber . DeviceName , i )
Dim gdevname = New CtabRange ( _grd , TableRowNumber . FunctionName , i )
Dim devnamestr As String = devname . devname
For ci = g_devname . fc To g_devname . lc
resulrdic . Add ( $ " {devnamestr}*{_grd.Cell(TableRowNumber.FunctionChildNodeID, ci).Text }*{gdevname.devname } " , ci )
Next
End If
If ( LoopName1 <> Nothing ) AndAlso g_devname . devname . Equals ( LoopName1 ) Then
Dim devname = New CtabRange ( _grd , TableRowNumber . DeviceName , i )
Dim gdevname = New CtabRange ( _grd , TableRowNumber . FunctionName , i )
Dim devnamestr As String = devname . devname
For ci = g_devname . fc To g_devname . lc
resulrdic . Add ( $ " {devnamestr}*{_grd.Cell(TableRowNumber.FunctionChildNodeID, ci).Text }*{gdevname.devname } " , ci )
Next
End If
i = g_devname . lc
Next
Return resulrdic
End Function
Public Sub ShowRelay_Test ( moduStr As DeviceModel , Optional OPTdic As Dictionary ( Of String , String ) = Nothing )
LockGridAutoRedraw ( )
'_grd.Cols = TableColNumber.Max
Dim demoindex As Integer = _ColumnStartLoad
Dim Interace_DI As New List ( Of DeviceChildNodeClass )
Dim Interace_DO As New List ( Of DeviceChildNodeClass )
' If moduStr.Nodes.Count = 1 AndAlso moduStr.Nodes(0).Nodes.Count = 0 Then
If moduStr . Nodes . Count = 1 AndAlso ( moduStr . Nodes ( 0 ) . Nodes . Count = 0 OrElse moduStr . Nodes ( 0 ) . DEV_TYPE_DATA . Equals ( " 48 " ) OrElse moduStr . Nodes ( 0 ) . DEV_TYPE_DATA . Equals ( " 46 " ) ) Then
Dim ctext As String = _grd . Cell ( TableRowNumber . FunctionChildNodeAnother , TableColNumber . DeviceName ) . Text
If String . IsNullOrEmpty ( ctext ) Then
ctext = moduStr . Name
Else
ctext = ctext & " , " & moduStr . Name
End If
'ctext = ctext.Substring(0, ctext.Length - 1)
_grd . Cell ( TableRowNumber . FunctionChildNodeAnother , TableColNumber . DeviceName ) . Text = ctext
UnLockGridAutoRedraw ( )
Return
End If
For Each ModuleFre In moduStr . Nodes
Select Case ModuleFre . Interface
Case " DO "
If String . IsNullOrEmpty ( ModuleFre . DEV_TYPE_DATA ) OrElse ModuleFre . DEV_TYPE_DATA = 4 Then Continue For
If ModuleFre . DEV_TYPE_DATA = 21 AndAlso ModuleFre . PROTOCOL_VER = 1 Then
Interace_DO . Insert ( 0 , ModuleFre )
Else
Interace_DO . Add ( ModuleFre )
End If
Case " DI "
Interace_DI . Add ( ModuleFre )
End Select
Next
For Each indesx In Interace_DO
If indesx . DEV_TYPE_DATA = 3 Then
AddColumnConfig ( indesx , demoindex , _ColumnStartLoad , moduStr , OPTdic )
Else
AddColumnConfig ( indesx , demoindex , _ColumnStartLoad , moduStr )
End If
Next
_ColumnStartLoad = demoindex
ShowSwitch2 ( moduStr . Name , Interace_DI , OPTdic )
ChangeTheServiceLineNumber ( )
UnLockGridAutoRedraw ( )
End Sub
Public Sub ShowRelay ( moduStr As DeviceModel , Optional OPTdic As Dictionary ( Of String , String ) = Nothing )
LockGridAutoRedraw ( )
'_grd.Cols = TableColNumber.Max
Dim demoindex As Integer = _ColumnStartLoad
Dim g_Dimming As DeviceChildNodeClass
Dim g_RELAY As DeviceChildNodeClass
Dim g_DO As DeviceChildNodeClass
Dim g_MUSIC As DeviceChildNodeClass
Dim g_Lock As DeviceChildNodeClass
Dim g_RS485_Curtain As DeviceChildNodeClass
Dim g_485MUSIC As DeviceChildNodeClass
Dim g_CURTAIN As DeviceChildNodeClass
Dim g_INFRARED_FORWARD As DeviceChildNodeClass
Dim g_Temp As DeviceChildNodeClass
Dim g_485FreshAir As DeviceChildNodeClass
Dim g_485FloorHeat As DeviceChildNodeClass
Dim g_PBnode As DeviceChildNodeClass
Dim Dev_ColorTemp As DeviceChildNodeClass
Dim All_DO As New List ( Of DeviceChildNodeClass )
Dim Interace_DI As New List ( Of DeviceChildNodeClass )
g_PBnode = Nothing
g_Dimming = Nothing
g_RELAY = Nothing
g_DO = Nothing
g_MUSIC = Nothing
g_Lock = Nothing
g_RS485_Curtain = Nothing
g_485MUSIC = Nothing
g_CURTAIN = Nothing
g_INFRARED_FORWARD = Nothing
g_Temp = Nothing
g_485FreshAir = Nothing
g_485FloorHeat = Nothing
Dev_ColorTemp = Nothing
If moduStr . Nodes . Count = 1 AndAlso ( moduStr . Nodes ( 0 ) . Nodes . Count = 0 OrElse moduStr . Nodes ( 0 ) . DEV_TYPE_DATA . Equals ( " 48 " ) OrElse moduStr . Nodes ( 0 ) . DEV_TYPE_DATA . Equals ( " 46 " ) ) Then
Dim ctext As String = _grd . Cell ( TableRowNumber . FunctionChildNodeAnother , TableColNumber . DeviceName ) . Text
If String . IsNullOrEmpty ( ctext ) Then
ctext = moduStr . Name
Else
ctext = ctext & " , " & moduStr . Name
End If
'ctext = ctext.Substring(0, ctext.Length - 1)
_grd . Cell ( TableRowNumber . FunctionChildNodeAnother , TableColNumber . DeviceName ) . Text = ctext
UnLockGridAutoRedraw ( )
Return
End If
For Each ModuleFre In moduStr . Nodes
If ModuleFre . Name . Equals ( " Dimming " ) Then
g_Dimming = ModuleFre
ElseIf ModuleFre . Name . Equals ( " RELAY " ) Then
g_RELAY = ModuleFre
ElseIf ModuleFre . Name . Equals ( " Dev_ColorTemp " ) Then
Dev_ColorTemp = ModuleFre
ElseIf ModuleFre . Name . Equals ( " DO " ) Then
g_DO = ModuleFre
ElseIf ModuleFre . Name . Equals ( " RKEY " ) AndAlso ModuleFre . Interface . Equals ( " DO " ) Then
g_Lock = ModuleFre
ElseIf ModuleFre . Name . Equals ( " DRY_NoCard " ) Then
g_DO = ModuleFre
ElseIf ModuleFre . Name . Equals ( " MUSIC " ) AndAlso ModuleFre . PROTOCOL_VER . Equals ( " 1 " ) Then
g_MUSIC = ModuleFre
2025-12-25 15:55:38 +08:00
'ElseIf ModuleFre.Name.Equals("Lock") Then
' g_Lock = ModuleFre
2025-12-11 10:06:44 +08:00
ElseIf ModuleFre . Name . Equals ( " 485MUSIC " ) Then
g_485MUSIC = ModuleFre
ElseIf ModuleFre . Name . Equals ( " RS485_Curtain " ) Then
g_RS485_Curtain = ModuleFre
ElseIf ModuleFre . Name . Equals ( " CURTAIN " ) Then
g_CURTAIN = ModuleFre
ElseIf ModuleFre . Name . Equals ( " INFRARED_FORWARD " ) Then
g_INFRARED_FORWARD = ModuleFre
ElseIf ModuleFre . Name . Equals ( " Temp " ) Then
g_Temp = ModuleFre
ElseIf ModuleFre . Name . Equals ( " 485FreshAir " ) Then
g_485FreshAir = ModuleFre
ElseIf ModuleFre . Name . Equals ( " CLED_FRESHAIR " ) Then
g_485FreshAir = ModuleFre
ElseIf ModuleFre . Name . Equals ( " CLEDFLOORHEAT " ) Then
g_485FloorHeat = ModuleFre
ElseIf ModuleFre . Name . Equals ( " 485FloorHeat " ) Then
g_485FloorHeat = ModuleFre
ElseIf ModuleFre . Name . Equals ( " PB_LED " ) OrElse ModuleFre . Name . Equals ( " PB_RELAY_DEVICE " ) OrElse ModuleFre . Name . Equals ( " PB_STRIP_DEVICE " ) Then
g_PBnode = ModuleFre
ElseIf ModuleFre . Interface . Equals ( " DO " ) AndAlso Not ModuleFre . Name . Equals ( " Virtual_Card " ) Then
All_DO . Add ( ModuleFre )
ElseIf ModuleFre . Interface . Equals ( " DI " ) Then
Interace_DI . Add ( ModuleFre )
End If
Next
AddColumnConfig ( g_MUSIC , demoindex , _ColumnStartLoad , moduStr )
AddColumnConfig ( g_DO , demoindex , _ColumnStartLoad , moduStr , OPTdic )
AddColumnConfig ( g_Dimming , demoindex , _ColumnStartLoad , moduStr )
AddColumnConfig ( g_RELAY , demoindex , _ColumnStartLoad , moduStr )
AddColumnConfig ( g_Lock , demoindex , _ColumnStartLoad , moduStr )
AddColumnConfig ( g_PBnode , demoindex , _ColumnStartLoad , moduStr )
AddColumnConfig ( g_RS485_Curtain , demoindex , _ColumnStartLoad , moduStr )
AddColumnConfig ( g_485MUSIC , demoindex , _ColumnStartLoad , moduStr )
AddColumnConfig ( g_CURTAIN , demoindex , _ColumnStartLoad , moduStr )
AddColumnConfig ( g_INFRARED_FORWARD , demoindex , _ColumnStartLoad , moduStr )
AddColumnConfig ( g_Temp , demoindex , _ColumnStartLoad , moduStr )
AddColumnConfig ( g_485FloorHeat , demoindex , _ColumnStartLoad , moduStr )
AddColumnConfig ( g_485FreshAir , demoindex , _ColumnStartLoad , moduStr )
For Each donode In All_DO
AddColumnConfig ( donode , demoindex , _ColumnStartLoad , moduStr )
Next
If Not IsNothing ( Dev_ColorTemp ) Then
AddColumnConfig ( Dev_ColorTemp , demoindex , _ColumnStartLoad , moduStr , Nothing , CInt ( moduStr . Desc . DevDescription ) )
End If
_ColumnStartLoad = demoindex
ShowSwitch2 ( moduStr . Name , Interace_DI , OPTdic )
ChangeTheServiceLineNumber ( )
UnLockGridAutoRedraw ( )
End Sub
Public Shared 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 " PB_LINE_CONTROL "
result = " 主机恒压调光 "
Case " PB_STRIP_DEVICE "
result = " PLC恒压调光 "
Case " PB_RELAY_DEVICE "
result = " PLC继电器 "
Case " Dev_ColorTemp "
result = " 色温调节 "
Case " BLEMUSIC "
result = " 蓝牙 "
Case " Carbon_Device "
result = " 碳达人 "
Case " DRY_NoCard "
result = " 无卡断电 "
Case " RKEY "
result = " 旋钮背光 "
Case " Scene_Restore "
result = " 场景还原 "
Case " Dev_Energy_Monitor "
result = " 能耗监测 "
Case Else
result = $ " {str} "
End Select
End If
Return result
End Function
''' <summary>
''' 加载设备头输出信息
''' </summary>
''' <param name="ModuleFre"></param>
''' <param name="demoindex"></param>
''' <param name="Startid"></param>
''' <param name="moduStr"></param>
Public Sub AddColumnConfig ( ModuleFre As DeviceChildNodeClass , ByRef demoindex As Integer , Startid As Integer , moduStr As DeviceModel , ByRef Optional OPTdic As Dictionary ( Of String , String ) = Nothing , Optional len As Integer = 0 )
'添加继电器列
If IsNothing ( ModuleFre ) OrElse ModuleFre . Nodes . Count = 0 Then Return
If len = 0 Then
len = ModuleFre . Nodes . Count
End If
'Console.WriteLine($"AddColumnConfig::::{demoindex}:{ _grd.Column(demoindex).Visible}")
_grd . InsertCol ( demoindex , len )
_grd . Column ( demoindex ) . Visible = True
'_grd.Column(demoindex).Width = 300
_grd . Range ( 0 , demoindex , _grd . Rows - 1 , demoindex ) . BackColor = Color . White
_grd . Range ( 0 , demoindex , _grd . Rows - 1 , demoindex ) . ForeColor = Color . Black
'_grd.Cols = demoindex + len
_grd . Cell ( TableRowNumber . FunctionName , demoindex ) . Text = ModuleFre . Name
_grd . Cell ( TableRowNumber . FunctionAnotherName , demoindex ) . Text = GetAnotherName ( ModuleFre . Name )
_grd . Range ( TableRowNumber . FunctionName , demoindex , TableRowNumber . FunctionName , demoindex + len - 1 ) . Locked = False
'For ti = demoindex To demoindex + len - 1
' Console.WriteLine($"C:{ti} V:{_grd.Column(ti).Locked }")
'Next
Console . WriteLine ( $ " R:{TableRowNumber.FunctionName} V:{_grd.Row(TableRowNumber.FunctionName).Locked } " )
_grd . Range ( TableRowNumber . FunctionName , demoindex , TableRowNumber . FunctionName , demoindex + len - 1 ) . Merge ( )
_grd . Range ( TableRowNumber . FunctionName , demoindex , TableRowNumber . FunctionName , demoindex + len - 1 ) . Locked = True
_grd . Range ( TableRowNumber . FunctionAnotherName , demoindex , TableRowNumber . FunctionAnotherName , demoindex + len - 1 ) . Locked = False
_grd . Range ( TableRowNumber . FunctionAnotherName , demoindex , TableRowNumber . FunctionAnotherName , demoindex + len - 1 ) . Merge ( )
_grd . Range ( TableRowNumber . FunctionAnotherName , demoindex , TableRowNumber . FunctionAnotherName , demoindex + len - 1 ) . Locked = True
_grd . Range ( TableRowNumber . DeviceName , Startid , TableRowNumber . DeviceName , demoindex + len - 1 ) . Locked = False
_grd . Range ( TableRowNumber . DeviceName , Startid , TableRowNumber . DeviceName , demoindex + len - 1 ) . Merge ( )
_grd . Range ( TableRowNumber . DeviceName , Startid , TableRowNumber . DeviceName , demoindex + len - 1 ) . Locked = True
_grd . Cell ( TableRowNumber . DeviceName , Startid ) . Text = moduStr . Name
_grd . Range ( TableRowNumber . DeviceName , Startid , TableRowNumber . FunctionChildNodeAnother , Startid + len - 1 ) . Alignment = AlignmentEnum . CenterCenter
For i As Integer = 0 To len - 1
Dim incol As Integer = demoindex + i
_grd . Cell ( TableRowNumber . FunctionChildNodeID , incol ) . Text = ( i + 1 ) . ToString
'Console.WriteLine($"{ModuleFre.Name}_R:{TableRowNumber.FunctionChildNodeID.ToString }_C:{Startid + i}_{(i + 1).ToString}")
_grd . Cell ( TableRowNumber . FunctionChildNodeAnother , incol ) . Text = ModuleFre . Nodes ( i ) . DefaultAliasName
_grd . Cell ( TableRowNumber . FunctionChildNodeAnother , incol ) . WrapText = True
_grd . Column ( incol ) . Width = 30
' Console.WriteLine($"AddColumnConfig::::{incol}:{_grd.Column(incol).Visible}:{_grd.Column(incol).Width}")
_grd . Column ( incol ) . Visible = True
'_grd.Cell(TableRowNumber.FunctionChildNodeAnother, incol).Orientation = TextOrientationEnum.Vertical
With _grd . Range ( TableRowNumber . FunctionChildNodeAnother , incol , TableRowNumber . ConditionalColumnName , incol )
. Locked = False
. Merge ( )
' .Locked = True
End With
'If i = 0 Then
' _grd.Cell(TableRowNumber.FunctionName, demoindex).Text = ModuleFre.Nodes(i).BaseClasses.Classes(0).Name
'End If
If IsNothing ( OPTdic ) OrElse OPTdic . Count = 0 Then Continue For
If _grd . Cell ( TableRowNumber . FunctionChildNodeAnother , incol ) . Text . Equals ( " 可视 " ) Then Continue For
If i = len - 1 AndAlso ( Not ModuleFre . Nodes ( i ) . Name . Equals ( " RKEY " ) ) Then
_grd . Column ( incol ) . Visible = False
End If
For j = 0 To OPTdic . Count - 1
If OPTdic . Keys ( j ) . Equals ( ModuleFre . Nodes ( i ) . LoopAddr ) Then
OPTdic . Item ( OPTdic . Keys ( j ) ) = ( incol ) . ToString
' _grd.Column(incol).Width = 0
End If
Next
Next
demoindex = demoindex + len
End Sub
''' <summary>
''' 加载设备输入信息
''' </summary>
''' <param name="moduStr"></param>
Public Sub ShowSwitch ( moduStrName As String , nterace_DI As List ( Of DeviceChildNodeClass ) , Optional OPTdic As Dictionary ( Of String , String ) = Nothing )
Dim rowid As Integer
Dim startrow As Integer = _grd . Rows
Dim ModuleFre As DeviceChildNodeClass
Dim SceneAttri As String = " 1,1,0 "
For j As Integer = 0 To nterace_DI . Count - 1
ModuleFre = nterace_DI . Item ( j )
rowid = _grd . Rows
' If ModuleFre.Name.Equals("DI") Then
'获取主机服务插入行起始位置
If moduStrName . Equals ( hostname ) Then
_ServerInsertRows = ModuleFre . Nodes . Count
End If
'添加继电器行
For i As Integer = 0 To ModuleFre . Nodes . Count - 1
_grd . AddItem ( " " )
If j = 0 Then
_grd . Cell ( rowid , TableColNumber . DeviceName ) . Text = moduStrName
_grd . Cell ( rowid , TableColNumber . DeviceName ) . WrapText = True
End If
Dim gTableRowTag As New TableRowTag ( )
gTableRowTag . G_DevNodeName = ModuleFre . Name
gTableRowTag . G_DevNodeIndex = i + 1
gTableRowTag . G_DevModeName = moduStrName
gTableRowTag . G_DicRow . Add ( TableColNumber . choose , " 1 " )
gTableRowTag . G_DicRow . Add ( TableColNumber . SceneAttribute , SceneAttri )
gTableRowTag . G_DicRow . Add ( TableColNumber . SceneID , _SceneID )
gTableRowTag . G_DicRow . Add ( TableColNumber . KeyVal , ( i + 1 ) . ToString )
gTableRowTag . G_DicRow . Add ( TableColNumber . KeyName , ModuleFre . Nodes ( i ) . Name )
If moduStrName . Equals ( hostname ) Then
gTableRowTag . Set_G_Attributes ( " DRY " , BasicClasses )
SceneAttri = " 1,1,1152921504606846976 "
Else
gTableRowTag . Set_G_Attributes ( " KEY " , BasicClasses )
SceneAttri = " 1,2,1224996690830819360 "
End If
Dic_ActionConfiguration . Add ( gTableRowTag )
If Not ( IsNothing ( OPTdic ) OrElse OPTdic . Count = 0 ) Then
If OPTdic . ContainsKey ( ModuleFre . Nodes ( i ) . LoopAddr ) Then
Dim bgc As Integer = - 1
If Integer . TryParse ( OPTdic . Item ( ModuleFre . Nodes ( i ) . LoopAddr ) , bgc ) Then
gTableRowTag . G_DicRow . Add ( bgc , " 对应场景 " )
_grd . Cell ( rowid + i , bgc ) . Text = Chr ( " 对应场景 " )
End If
End If
End If
_grd . Cell ( rowid + i , TableColNumber . SceneID ) . Text = _SceneID . ToString
_grd . Cell ( rowid + i , TableColNumber . KeyVal ) . Text = ( i + 1 ) . ToString
_grd . Cell ( rowid + i , TableColNumber . KeyName ) . Text = ModuleFre . Nodes ( i ) . Name
_grd . Cell ( rowid + i , TableColNumber . choose ) . Text = " 1 "
_grd . Cell ( rowid + i , TableColNumber . SceneAttribute ) . Text = SceneAttri
_SceneID = _SceneID + 1
_grd . Cell ( rowid + i , TableColNumber . ServerAttribute ) . WrapText = True
Next
'End If
Next
If nterace_DI . Count > 0 Then
_grd . Range ( startrow , TableColNumber . DeviceName , _grd . Rows - 1 , TableColNumber . DeviceName ) . Merge ( )
_grd . Range ( startrow , TableColNumber . DeviceName , _grd . Rows - 1 , TableColNumber . DeviceName ) . Locked = True
End If
_grd . Range ( TableRowNumber . Max - 1 , TableColNumber . RowID , _grd . Rows - 1 , _grd . Cols - 1 ) . Alignment = AlignmentEnum . CenterCenter
_grd . Range ( TableRowNumber . Max , TableColNumber . SceneAttribute , _grd . Rows - 1 , _grd . Cols - 1 ) . CellType = CellTypeEnum . ComboBox
_grd . Range ( TableRowNumber . Max , TableColNumber . choose , _grd . Rows - 1 , TableColNumber . choose ) . CellType = CellTypeEnum . CheckBox
End Sub
''' <summary>
''' 加载设备输入信息
''' </summary>
''' <param name="moduStr"></param>
Public Sub ShowSwitch2 ( moduStrName As String , nterace_DI As List ( Of DeviceChildNodeClass ) , Optional OPTdic As Dictionary ( Of String , String ) = Nothing )
'当前行
Dim rowid As Integer
'起始添加行
Dim startrow As Integer = _grd . Rows
Dim ModuleFre As DeviceChildNodeClass
Dim Mergerow , Mergecol As Integer
Dim SceneAttri As String = " 1,1,0 "
For j As Integer = 0 To nterace_DI . Count - 1
ModuleFre = nterace_DI . Item ( j )
'获取服务组起始行号
Dim srowid As CtabRange = GetRowDevNametabRange ( " HOSTSERVICE " , TableColNumber . DeviceName )
'默认从最后一行添加
If IsNothing ( srowid ) Then
startrow = _grd . Rows
Else
startrow = srowid . fr
End If
rowid = startrow
' If ModuleFre.Name.Equals("DI") Then
'获取主机服务插入行起始位置
'If moduStrName.Equals( hostname) Then
' _ServerInsertRows = ModuleFre.Nodes.Count
'End If
'添加继电器行
For i As Integer = 0 To ModuleFre . Nodes . Count - 1
'记录添加行行号
rowid = startrow + i
'行节点初始数据
Dim gTableRowTag As New TableRowTag ( )
If moduStrName . Equals ( hostname ) Then
gTableRowTag . Set_G_Attributes ( " DRY " , BasicClasses )
ModuleFre . Nodes ( i ) . DefaultClass = " DRY "
SceneAttri = " 1,1,1152921504606846976 "
Else
' If String.IsNullOrEmpty(ModuleFre.Nodes(i).DefaultClass) Then
If ModuleFre . Nodes ( i ) . DefaultClass . Equals ( " KEY " ) Then
gTableRowTag . Set_G_Attributes ( " KEY " , BasicClasses )
SceneAttri = " 1,2,1224996690830819360 "
if ModuleFre . PROTOCOL_VER . Equals ( " 003 " ) Then
SceneAttri = " 1,2,1152921504606846976 "
End If
ElseIf ModuleFre . Nodes ( i ) . DefaultClass . Equals ( " CARD " ) Then
gTableRowTag . Set_G_Attributes ( ModuleFre . Nodes ( i ) . DefaultClass , BasicClasses )
SceneAttri = " 1365,1,1152921504606846976 "
ElseIf ModuleFre . Nodes ( i ) . DefaultClass . Equals ( " SLIDER " ) Then
gTableRowTag . Set_G_Attributes ( ModuleFre . Nodes ( i ) . DefaultClass , BasicClasses )
SceneAttri = " 2,1,1152921504606847008 "
ElseIf ModuleFre . Nodes ( i ) . DefaultClass . Equals ( " RKEY " ) Then
gTableRowTag . Set_G_Attributes ( ModuleFre . Nodes ( i ) . DefaultClass , BasicClasses )
SceneAttri = " 4,12,1152921504606847008 "
2025-12-25 15:55:38 +08:00
2025-12-11 10:06:44 +08:00
Else
gTableRowTag . Set_G_Attributes ( ModuleFre . Nodes ( i ) . DefaultClass , BasicClasses )
SceneAttri = " 1,1,1152921504606846976 "
End If
End If
gTableRowTag . G_DevNodeName = ModuleFre . Name
gTableRowTag . G_DevNodeIndex = ModuleFre . Nodes ( i ) . LoopAddr ' i + 1
gTableRowTag . G_DevModeName = moduStrName
gTableRowTag . G_DicRow . Add ( TableColNumber . choose , " 1 " )
gTableRowTag . G_DicRow . Add ( TableColNumber . SceneAttribute , SceneAttri )
gTableRowTag . G_DicRow . Add ( TableColNumber . SceneID , _SceneID )
gTableRowTag . G_DicRow . Add ( TableColNumber . KeyVal , ModuleFre . Nodes ( i ) . LoopAddr )
gTableRowTag . G_DicRow . Add ( TableColNumber . KeyName , ModuleFre . Nodes ( i ) . DefaultAliasName )
'添加行Or插入行 ---如果已经添加服务则要用插入方式
If rowid >= _grd . Rows Then
_grd . AddItem ( " " )
'_grd.Row(rowid).Locked = False
Dic_ActionConfiguration . Add ( gTableRowTag )
Else
Dim growlock As Boolean = _grd . Row ( rowid ) . Locked
_grd . Row ( rowid ) . Locked = False
_grd . InsertRow ( rowid , 1 )
_grd . Row ( rowid ) . Locked = growlock
'_grd.Row(rowid).Locked = False
Dic_ActionConfiguration . Insert ( rowid - TableRowNumber . Max , gTableRowTag )
End If
'设置设备名
If j = 0 AndAlso i = 0 Then
_grd . Cell ( rowid , TableColNumber . DeviceName ) . Text = moduStrName
_grd . Cell ( rowid , TableColNumber . DeviceName ) . WrapText = True
Mergerow = rowid
End If
'设置 DI对应反馈灯
If Not ( IsNothing ( OPTdic ) OrElse OPTdic . Count = 0 ) Then
If OPTdic . ContainsKey ( ModuleFre . Nodes ( i ) . LoopAddr ) Then
Dim bgc As Integer = - 1
If Integer . TryParse ( OPTdic . Item ( ModuleFre . Nodes ( i ) . LoopAddr ) , bgc ) AndAlso bgc >= TableColNumber . Max Then
gTableRowTag . G_DicRow . Add ( bgc , " 对应场景 " )
_grd . Cell ( rowid , bgc ) . Text = " 对应场景 "
_grd . Column ( bgc ) . Visible = False
_grd . Column ( bgc ) . Locked = True
End If
End If
End If
'设置表格
_grd . Cell ( rowid , TableColNumber . SceneID ) . Text = _SceneID . ToString
_grd . Cell ( rowid , TableColNumber . KeyVal ) . Text = ModuleFre . Nodes ( i ) . LoopAddr '(i + 1).ToString
_grd . Cell ( rowid , TableColNumber . KeyName ) . Text = ModuleFre . Nodes ( i ) . DefaultAliasName
_grd . Cell ( rowid , TableColNumber . choose ) . Text = " 1 "
_grd . Cell ( rowid , TableColNumber . SceneAttribute ) . Text = SceneAttri
_SceneID = _SceneID + 1
_grd . Cell ( rowid , TableColNumber . ServerAttribute ) . WrapText = True
If ModuleFre . Name . Equals ( " 语音 " ) Then
_grd . Row ( rowid ) . Locked = True
_grd . Cell ( rowid , TableColNumber . SceneAttribute ) . Text = " "
gTableRowTag . G_DicRow . Item ( TableColNumber . SceneAttribute ) = " "
End If
Next
Next
'Dim rowlock = _grd.Row(24).Locked
'rowlock = _grd.Row(26).Locked
If nterace_DI . Count > 0 Then
Try
_grd . Range ( Mergerow , TableColNumber . DeviceName , rowid , TableColNumber . DeviceName ) . Locked = False
_grd . Range ( Mergerow , TableColNumber . DeviceName , rowid , TableColNumber . DeviceName ) . Merge ( )
_grd . Range ( Mergerow , TableColNumber . DeviceName , rowid , TableColNumber . DeviceName ) . Locked = True
Catch ex As Exception
End Try
End If
'rowlock = _grd.Row(24).Locked
'rowlock = _grd.Row(26).Locked
_grd . Range ( TableRowNumber . Max - 1 , TableColNumber . RowID , _grd . Rows - 1 , _grd . Cols - 1 ) . Alignment = AlignmentEnum . CenterCenter
_grd . Range ( TableRowNumber . Max , TableColNumber . SceneAttribute , _grd . Rows - 1 , _grd . Cols - 1 ) . CellType = CellTypeEnum . ComboBox
_grd . Range ( TableRowNumber . Max , TableColNumber . choose , _grd . Rows - 1 , TableColNumber . choose ) . CellType = CellTypeEnum . CheckBox
End Sub
Public Function GetgrdRange ( r As Integer , c As Integer , selectstr As tabRange ) As String
Dim result As String = String . Empty
With _grd . Range ( r , c , r , c )
Select Case selectstr
Case tabRange . devname
result = _grd . Cell ( . FirstRow , . FirstCol ) . Text
Case tabRange . fc
result = . FirstCol
Case tabRange . lc
result = . LastCol
Case tabRange . fr
result = . FirstRow
Case tabRange . lr
result = . LastRow
End Select
Return result
End With
End Function
Private Function GetRowDevNametabRange ( devname As String , colint As Integer , Optional startcrow As Integer = TableRowNumber . Max ) As CtabRange
Dim result As CtabRange = Nothing
Dim g_devname As CtabRange
For i = startcrow To _grd . Rows - 1
g_devname = New CtabRange ( _grd , i , colint )
If devname . Equals ( g_devname . devname ) Then
result = g_devname
Exit For
End If
i = g_devname . lr
Next
Return result
End Function
Private Function GetCoLDevNametabRange ( devname As String , colint As Integer , Optional startcol As Integer = TableColNumber . InsertColumn ) As CtabRange
Dim result As CtabRange = Nothing
Dim g_devname As CtabRange
For i = startcol To _grd . Cols - 1
g_devname = New CtabRange ( _grd , colint , i )
If devname . Equals ( g_devname . devname ) Then
result = g_devname
Exit For
End If
i = g_devname . lc
Next
Return result
End Function
''' <summary>
''' 模型关联的表格控件
''' </summary>
''' <returns></returns>
Protected Friend Sub LockGridAutoRedraw ( )
If _grd Is Nothing Then Return
If _autoRedraw = 0 Then
_grd . AutoRedraw = False
End If
_autoRedraw += 1
End Sub
Protected Friend Sub UnLockGridAutoRedraw ( )
If _grd Is Nothing Then Return
_autoRedraw -= 1
If _autoRedraw = 0 Then
_grd . AutoRedraw = True
_grd . Refresh ( )
Else
_autoRedraw = 0
End If
End Sub
#End Region
#Region "表格事件"
Public Cell_x , Cell_y As Integer
Private Sub Grid_Click ( Sender As Object , e As EventArgs )
Console . WriteLine ( $ " Grid_Click{_grd.Cell(_grd.ActiveCell.Row, _grd.ActiveCell.Col).Text } " )
Dim C_x , C_y As Integer
C_x = _grd . ActiveCell . Row
C_y = _grd . ActiveCell . Col
' Console.WriteLine($"C_x:{C_x} Cell_x:{Cell_x} C_y:{C_y} Cell_y:{Cell_y} ")
if C_x < TableRowNumber . Max Then Return
if C_y = 5 Then ’ 新加
If Cell_x = C_x AndAlso Cell_y = C_y Then Return '防止 重复点击
End If
'Console.WriteLine(_grd.Column(Cell_y).Locked)
If Cell_x >= _grd . Rows OrElse Cell_y >= _grd . Cols Then
Cell_x = 0
Cell_y = 0
End If
_grd . Range ( Cell_x , 0 , Cell_x , _grd . Cols - 1 ) . BackColor = Color . White
_grd . Range ( 0 , Cell_y , _grd . Rows - 1 , Cell_y ) . BackColor = Color . White
If C_x < TableRowNumber . Max OrElse C_y < TableColNumber . SceneID Then Return
_grd . Range ( C_x , 2 , C_x , _grd . Cols - 1 ) . BackColor = Color . LightBlue
If Not ( C_y < TableColNumber . InsertColumn ) Then
_grd . Range ( TableRowNumber . FunctionChildNodeID , C_y , _grd . Rows - 1 , C_y ) . BackColor = Color . LightBlue
End If
CheckGridData ( )
_grd . Cell ( C_x , C_y ) . BackColor = Color . LightPink
Cell_x = C_x
Cell_y = C_y
'Console.WriteLine(_grd.Cell(Cell_x, Cell_y).Locked)
End Sub
Public Function CheckGridData ( ) As Boolean
Dim result As Boolean = True
For r = 7 To _grd . Rows - 1
For c = 6 To _grd . Cols - 1
If _grd . Cell ( r , c ) . ForeColor = Color . DarkRed Then
_grd . Cell ( r , c ) . BackColor = Color . OrangeRed
Console . WriteLine ( $ " r:{r} c:{c} colname : {_grd.Cell(r, TableColNumber.SceneID).Text} text: {_grd.Cell(r, c).Text} " )
result = False
End If
Next
Next
Return result
End Function
Private Sub Grid_DoubleClick ( Sender As Object , e As EventArgs )
Console . WriteLine ( $ " Grid_DoubleClick{_grd.Cell(_grd.ActiveCell.Row, _grd.ActiveCell.Col).Text } " )
If _grd . ActiveCell . Row = TableRowNumber . DeviceName AndAlso _grd . ActiveCell . Col = TableColNumber . DeviceName Then
Dim fromshow As New PowerSupply
fromshow . G_ActionConfiguration = Dic_ActionConfiguration
fromshow . ParseDeviceList ( Dic_Devicemodel , _grd )
If fromshow . ShowDialog ( ) <> DialogResult . OK Then Return
ElseIf _grd . ActiveCell . Row > TableRowNumber . Max - 1 AndAlso _grd . ActiveCell . Col = TableColNumber . DeviceName Then
'取到设备名
Dim devname As String = GetgrdRange ( _grd . ActiveCell . Row , TableColNumber . DeviceName , tabRange . devname )
ModifyingDeviceInformationGroup ( devname )
ElseIf _grd . ActiveCell . Row = TableRowNumber . DeviceName AndAlso _grd . ActiveCell . Col > TableColNumber . InsertColumn Then
'取到设备名
Dim devname As String = GetgrdRange ( _grd . ActiveCell . Row , _grd . ActiveCell . Col , tabRange . devname )
ModifyingDeviceInformationGroup ( devname )
ElseIf _grd . ActiveCell . Row = TableRowNumber . FunctionChildNodeAnother AndAlso _grd . ActiveCell . Col = TableColNumber . DeviceName Then
Dim from1 As New DeviceListFrom
Dim steinput As String = _grd . Cell ( TableRowNumber . FunctionChildNodeAnother , TableColNumber . DeviceName ) . Text . Trim
from1 . SetDevnameTotable ( steinput , Dic_Devicemodel )
If from1 . ShowDialog ( ) <> DialogResult . OK Then Return
_grd . Cell ( TableRowNumber . FunctionChildNodeAnother , TableColNumber . DeviceName ) . Text = from1 . G_result
ElseIf _grd . ActiveCell . Row >= TableRowNumber . Max AndAlso _grd . ActiveCell . Col = TableColNumber . SceneAttribute Then
If String . IsNullOrEmpty ( _grd . Cell ( _grd . ActiveCell . Row , _grd . ActiveCell . Col ) . Text ) Then Return
Dim fromshow As New ExecutionCondition
fromshow . DicDevicemodel = Dic_Devicemodel
fromshow . G_grid = _grd
fromshow . G_ActionConfiguration = Dic_ActionConfiguration
fromshow . g_BasicClasses = BasicClasses
fromshow . G_Row = _grd . ActiveCell . Row
fromshow . G_celltag = JsonConvert . DeserializeObject ( Of Dictionary ( Of String , String ) ) ( _grd . Cell ( _grd . ActiveCell . Row , _grd . ActiveCell . Col ) . Tag )
If IsNothing ( fromshow . G_celltag ) Then
fromshow . G_celltag = New Dictionary ( Of String , String )
End If
fromshow . G_ConfigActionConcitons = Condictions
fromshow . G_input = _grd . Cell ( _grd . ActiveCell . Row , TableColNumber . SceneAttribute ) . Text
fromshow . G_ModeDevType = Dic_ActionConfiguration . Item ( _grd . ActiveCell . Row - TableRowNumber . Max ) . G_KeyType . ToArray
If fromshow . ShowDialog ( ) <> DialogResult . OK Then Return
' Dim nsre As String = JsonConvert.SerializeObject(fromshow.G_celltag)
_grd . Cell ( _grd . ActiveCell . Row , _grd . ActiveCell . Col ) . Tag = JsonConvert . SerializeObject ( fromshow . G_celltag )
_grd . Cell ( _grd . ActiveCell . Row , _grd . ActiveCell . Col ) . Text = fromshow . G_Result
End If
End Sub
Public Function AddServiceRow ( ) As Boolean
Dim fromshow As New ServiceAttribute
fromshow . G_input = " " '_grd.Cell(_grd.ActiveCell.Row, TableColNumber.ServerAttribute).Text
fromshow . G_hostNode = Nothing
For Each Anode In Dic_Devicemodel . Item ( hostname ) . Nodes
If Anode . Name . Equals ( " HOSTSERVICE " ) Then
fromshow . G_hostNode = Anode
End If
Next
If fromshow . ShowDialog ( ) <> DialogResult . OK Then Return False
Dim hostNode As DeviceChildNodeClass = Nothing
For Each Anode In Dic_Devicemodel . Item ( hostname ) . Nodes
If Anode . Name . Equals ( " HOSTSERVICE " ) Then
hostNode = Anode
Exit For
End If
Next
If ServiceAttribute . CheckDataIsOk ( fromshow . G_result , hostNode ) Then
If String . IsNullOrEmpty ( fromshow . G_result ) Then
Dim wbuff ( ) As String = fromshow . G_result . Trim . Split ( vbLf )
For Each index In wbuff
grdRemoveServerRow ( index )
Next
Return True
End If
Dim vbuff ( ) As String = fromshow . G_result . Split ( vbLf )
For Each index In vbuff
Dim vbuf ( ) As String = index . Split ( " , " )
grdInsertServerRow ( hostname , " HOSTSERVICE " , CInt ( vbuf ( 0 ) ) , " SERVICE " , vbuf ( 1 ) , hostNode )
Next
Else
Return False
End If
End Function
Public Sub ModifyingDeviceInformationGroup ( devname As String )
'判断设备是否是外设
If String . IsNullOrEmpty ( devname ) OrElse String . IsNullOrEmpty ( hostname ) Then
Return
End If
If devname . Equals ( hostname ) Then
MsgBox ( " 主机不可修改设备属性!! " )
Return
End If
If devname . Equals ( " HOSTSERVICE " ) Then
MsgBox ( " 服务不可修改设备属性!! " )
Return
End If
Dim cdicv As New Dictionary ( Of Integer , String ) '列号+DO地址
Dim rdicv As New Dictionary ( Of Integer , String ) '行号+DI地址
Dim rvdicv As New Dictionary ( Of String , String ) 'DO地址+DI地址
Dim startrow , startcol As Integer
'获取外设DO的所在列号集合
Dim tabledev As CtabRange = GetCoLDevNametabRange ( devname , TableRowNumber . DeviceName )
If Not IsNothing ( tabledev ) Then
startcol = tabledev . fc
tabledev = GetCoLDevNametabRange ( " DO " , TableRowNumber . FunctionName , tabledev . fc )
End If
If Not IsNothing ( tabledev ) Then
For i = tabledev . fc To tabledev . lc
cdicv . Add ( i , _grd . Cell ( TableRowNumber . FunctionChildNodeID , i ) . Text )
Next
End If
'行号集合
Dim devmodw As DeviceModel = Dic_Devicemodel . Item ( devname )
tabledev = GetRowDevNametabRange ( devname , TableColNumber . DeviceName )
'不一定在行有设备名
If Not IsNothing ( tabledev ) Then
startrow = tabledev . fr
For Each index In devmodw . Nodes
If index . Name . Equals ( " DI " ) Then
For Each node In index . Nodes
For i = tabledev . fr To tabledev . lr
Console . WriteLine ( $ " {_grd.Cell(i, TableColNumber.KeyName).Text}_{node.Name} " )
If _grd . Cell ( i , TableColNumber . KeyVal ) . Text . Equals ( node . LoopAddr ) Then
If rdicv . ContainsKey ( i ) Then
Continue For
Else
rdicv . Add ( i , _grd . Cell ( i , TableColNumber . KeyVal ) . Text )
End If
End If
Next
Next
Exit For
End If
Next
'匹配 DI_DO 键值对
For Each index In rdicv
For Each node In cdicv
If _grd . Cell ( index . Key , node . Key ) . Text . Trim . Equals ( " 对应场景 " ) Then
'_grd.Cell(index.Key, node.Key).Text = ""
If rvdicv . ContainsKey ( index . Value ) Then
Exit For
Else
rvdicv . Add ( index . Value , node . Value )
Exit For
End If
End If
Next
If Not rvdicv . ContainsKey ( index . Value ) Then
rvdicv . Add ( index . Value , " " )
End If
Next
End If
'设置到弹窗显示
Dim from1 As New AddPeripherals
from1 . g_Devicemodel = Dic_Devicemodel
from1 . g_grd = _grd
from1 . g_Devintemp = GetDevLoopName ( " Temp " )
from1 . g_DevRELAYrow = GetDevLoopName ( " RELAY " , " PB_RELAY_DEVICE " )
from1 . g_Devinfraredrow = GetDevLoopName ( " INFRARED_FORWARD " )
from1 . g_DevDimming = GetDevLoopName ( " Dimming " )
from1 . g_Devin485fraredrow = GetDevLoopName ( " RS485_Curtain " )
from1 . g_DevinCURTAINdrow = GetDevLoopName ( " CURTAIN " )
from1 . g_Devservice = GetHOSTSERVICENumber ( )
from1 . g_DevScenenumber = GetSceneNumbeAr ( )
from1 . g_ColumnAnothername = ColumnAnothername
from1 . EditFeedbackLamp ( rvdicv , devmodw )
If from1 . ShowDialog ( ) <> DialogResult . OK Then Return
'根据弹窗设置重新设置界面置
_grd . Cell ( TableRowNumber . DeviceName , startcol ) . Text = devmodw . Name
If startrow > 0 Then
For ri = tabledev . fr To tabledev . lr
Dic_ActionConfiguration ( ri - TableRowNumber . Max ) . G_DevModeName = devmodw . Name
Next
_grd . Cell ( startrow , TableColNumber . DeviceName ) . Text = devmodw . Name
End If
If IsNothing ( from1 . ResulDic ) OrElse from1 . ResulDic . Count = 0 Then Return
Dim colstr As String
LockGridAutoRedraw ( )
For Each rindex In rdicv
If from1 . ResulDic . ContainsKey ( rindex . Value ) Then
colstr = from1 . ResulDic . Item ( rindex . Value )
'_grd.Cell(rindex.Key, TableColNumber.KeyName).Text =devmodw.
For Each cnode In cdicv
If _grd . Cell ( rindex . Key , cnode . Key ) . Text . Trim . Equals ( " 对应场景 " ) Then
_grd . Cell ( rindex . Key , cnode . Key ) . Text = " "
_grd . Column ( cnode . Key ) . Visible = True
_grd . Column ( cnode . Key ) . Locked = False
End If
If cnode . Value . Equals ( colstr ) Then
_grd . Cell ( rindex . Key , cnode . Key ) . Text = " 对应场景 "
_grd . Column ( cnode . Key ) . Visible = False
_grd . Column ( cnode . Key ) . Locked = True
End If
Next
End If
Next
UnLockGridAutoRedraw ( )
End Sub
Private Function DetermineDeviceType ( Resultmodel As DeviceModel ) As Integer
Dim result As Integer = 0
For Each ModuleFre In Resultmodel . Nodes
Select Case ModuleFre . Name
Case " Temp "
Return 1
Case " CURTAIN "
Return 2
Case " 485FreshAir " , " CLED_FRESHAIR "
Return 4
Case " 485FloorHeat " , " CLEDFLOORHEAT "
Return 4
Case " 语音 "
Return 3
End Select
Next
Return result
End Function
Public Sub UnlockColumn ( Resultmodel As DeviceModel , Optional mbool As Boolean = True )
Select Case DetermineDeviceType ( Resultmodel )
Case 0
Return
Case 1
Case 2
Case 3
Case 4
Case Else
Return
End Select
End Sub
Private Sub Grid_CellChange ( Sender As Object , e As FlexCell . Grid . CellChangeEventArgs )
Console . WriteLine ( $ " Grid_CellChange_{_grd.Cell(e.Row, e.Col).Text } " )
Dim errindex As Integer = 0
Try
Select Case e . Row
'Case ComboDropDownON.HostDev
' For Each HostDevFN In IO.Directory.GetFiles(HostDevFNP)
' Grid1.ComboBox(0).Items.Add(HostDevFN.Substring(HostDevFNP.Length, HostDevFN.Length - HostDevFNP.Length - 4))
' Next
Case TableRowNumber . FunctionAnotherName
If TableColNumber . ServerAttribute = e . Col Then
Dim dtime As Integer = 0
Try
dtime = CInt ( _grd . Cell ( TableRowNumber . FunctionAnotherName , TableColNumber . InsertColumn - 1 ) . Text )
If dtime < - 24 OrElse dtime > 24 Then
dtime = 0
End If
Catch ex As Exception
dtime = 0
End Try
_grd . Cell ( TableRowNumber . FunctionAnotherName , TableColNumber . InsertColumn - 1 ) . Text = dtime
_grd . Cell ( TableRowNumber . FunctionAnotherName , TableColNumber . InsertColumn - 1 ) . CellType = CellTypeEnum . ComboBox
_grd . Cell ( TableRowNumber . FunctionAnotherName , TableColNumber . InsertColumn - 1 ) . Locked = False
End If
Case >= TableRowNumber . Max
errindex = 1
'Console.WriteLine()
If e . Col = TableColNumber . SceneAttribute Then
errindex = 3
Dim rowtag As TableRowTag = Dic_ActionConfiguration . Item ( e . Row - TableRowNumber . Max )
If ExecutionCondition . CheckDataIsOk ( _grd . Cell ( e . Row , e . Col ) . Text , Condictions , Dic_ActionConfiguration . Item ( e . Row - TableRowNumber . Max ) . G_KeyType . ToArray , rowtag , Dic_ActionConfiguration , _grd ) Then
_grd . Cell ( e . Row , e . Col ) . BackColor = Color . White
AddTableToTableRowTag ( e . Row , e . Col , _grd . Cell ( e . Row , e . Col ) . Text )
_grd . Cell ( e . Row , e . Col ) . ForeColor = Color . Black
Else
_grd . Cell ( e . Row , e . Col ) . BackColor = Color . OrangeRed
_grd . Cell ( e . Row , e . Col ) . ForeColor = Color . DarkRed
AddTableToTableRowTag ( e . Row , e . Col , _grd . Cell ( e . Row , e . Col ) . Text )
End If
ElseIf e . Col = TableColNumber . ServerAttribute Then
errindex = 4
Dim hostNode As DeviceChildNodeClass = Nothing
For Each Anode In Dic_Devicemodel . Item ( hostname ) . Nodes
If Anode . Name . Equals ( " HOSTSERVICE " ) Then
hostNode = Anode
Exit For
End If
Next
If ServiceAttribute . CheckDataIsOk ( _grd . Cell ( e . Row , e . Col ) . Text , hostNode ) Then
_grd . Cell ( e . Row , e . Col ) . BackColor = Color . White
_grd . Cell ( e . Row , e . Col ) . ForeColor = Color . Black
Dim serverstr As String = AddTableToTableRowTagX ( e . Row , e . Col , _grd . Cell ( e . Row , e . Col ) . Text )
If String . IsNullOrEmpty ( _grd . Cell ( e . Row , e . Col ) . Text ) Then
Dim wbuff ( ) As String = serverstr . Trim . Split ( vbLf )
For Each index In wbuff
grdRemoveServerRow ( index )
Next
Return
End If
Dim vbuff ( ) As String = _grd . Cell ( e . Row , e . Col ) . Text . Split ( vbLf )
For Each index In vbuff
Dim vbuf ( ) As String = index . Split ( " , " )
grdInsertServerRow ( hostname , " HOSTSERVICE " , CInt ( vbuf ( 0 ) ) , " SERVICE " , vbuf ( 1 ) , hostNode )
Next
Else
_grd . Cell ( e . Row , e . Col ) . BackColor = Color . OrangeRed
_grd . Cell ( e . Row , e . Col ) . ForeColor = Color . DarkRed
AddTableToTableRowTagX ( e . Row , e . Col , _grd . Cell ( e . Row , e . Col ) . Text )
End If
ElseIf e . Col = TableColNumber . KeyName Then
AddTableToTableRowTagtow ( e . Row , e . Col , _grd . Cell ( e . Row , e . Col ) . Text )
'ElseIf _grd.Cell(TableRowNumber.FunctionName, e.Col).Text.Equals( "MUSIC") Then
' errindex = 2
' 'If MusicArrangement.CheckDataIsOk(_grd.Cell(e.Row, e.Col).Text, BasicClasses) Then
' ' _grd.Cell(e.Row, e.Col).BackColor = Color.White
' ' AddTableToTableRowTagtow(e.Row, e.Col, _grd.Cell(e.Row, e.Col).Text)
' 'Else
' ' _grd.Cell(e.Row, e.Col).BackColor = Color.OrangeRed
' 'End If
' Dim g_devname As New CtabRange(_grd, TableRowNumber.FunctionName, e.Col)
' If ActionParameter.CheckDataIsOk(g_devname.devname.ToUpper, _grd.Cell(e.Row, e.Col).Text, BasicClasses) Then
' _grd.Cell(e.Row, e.Col).BackColor = Color.White
' AddTableToTableRowTagtow(e.Row, e.Col, _grd.Cell(e.Row, e.Col).Text)
' Else
' _grd.Cell(e.Row, e.Col).BackColor = Color.OrangeRed
' End If
ElseIf e . Col = TableColNumber . choose Then
AddTableToTableRowTagtow ( e . Row , e . Col , _grd . Cell ( e . Row , e . Col ) . Text )
ElseIf e . Col > TableColNumber . ServerAttribute Then
errindex = 5
Dim g_devname As New CtabRange ( _grd , TableRowNumber . FunctionName , e . Col )
Dim highpric As String = _grd . Cell ( e . Row , e . Col ) . Text
Dim rowtag As TableRowTag = Dic_ActionConfiguration . Item ( e . Row - TableRowNumber . Max )
If g_devname . devname . Equals ( " DO " ) Then
g_devname . devname = g_devname . devname . Replace ( " DO " , " LIGHT " )
ElseIf g_devname . devname . Equals ( " CURTAIN " ) Then
g_devname . devname = g_devname . devname . Replace ( " CURTAIN " , " DRY_CURTAIN " )
End If
If highpric . Equals ( " 高级 " ) Then
Dim fromshow As New ActionParameter
fromshow . g_DevNodename = rowtag . G_DevNodeName
fromshow . KeyName = _grd . Cell ( _grd . ActiveCell . Row , TableColNumber . KeyName ) . Text
fromshow . g_ExecutionMode = _grd . Cell ( _grd . ActiveCell . Row , TableColNumber . SceneAttribute ) . Text
Dim celltex As String = String . Empty
Dim celltxt As String = String . Empty
If rowtag . G_DicRow . ContainsKey ( e . Col . ToString ) Then
celltex = rowtag . G_DicRow . Item ( e . Col . ToString )
Else
celltex = " "
End If
fromshow . GetEquipmentParameter ( g_devname . devname . ToUpper , celltex , BasicClasses )
If fromshow . ShowDialog ( ) <> DialogResult . OK Then
If celltex . Contains ( " * " ) Then
highpric = EstimateFilag ( celltex , g_devname . devname )
Else
highpric = celltex
End If
CheckGridCellChangeIsOk ( g_devname , celltex , e )
_grd . Cell ( _grd . ActiveCell . Row , _grd . ActiveCell . Col ) . Text = highpric
Return
End If
highpric = EstimateFilag ( fromshow . G_Result , g_devname . devname )
CheckGridCellChangeIsOk ( g_devname , fromshow . G_Result , e )
_grd . Cell ( _grd . ActiveCell . Row , _grd . ActiveCell . Col ) . Text = highpric
Return
Else
End If
'Dim highpric As String = _grd.Cell(e.Row, e.Col).Text.Trim
If rowtag . G_DicRow . ContainsKey ( e . Col ) Then
Dim celltxt As String = rowtag . G_DicRow . Item ( e . Col )
celltxt = EstimateFilag ( celltxt , g_devname . devname )
If Not String . IsNullOrEmpty ( highpric ) AndAlso highpric . Equals ( celltxt ) Then
highpric = rowtag . G_DicRow . Item ( e . Col )
End If
End If
CheckGridCellChangeIsOk ( g_devname , highpric , e )
End If
Case = TableRowNumber . FunctionChildNodeAnother
If e . Col > TableColNumber . ServerAttribute Then
Dim gdevname = New CtabRange ( _grd , TableRowNumber . DeviceName , e . Col )
Dim gTdevname = New CtabRange ( _grd , TableRowNumber . FunctionName , e . Col )
Dim val As String = $ " {gdevname.devname }*{_grd.Cell(TableRowNumber.FunctionChildNodeID, e.Col).Text }*{gTdevname.devname } "
Dim key As String = $ " {gdevname.devname}_{ _grd.Cell(TableRowNumber.FunctionChildNodeAnother, e.Col).Text} "
'Dim key As String = $"{_grd.Cell(TableRowNumber.FunctionChildNodeAnother, e.Col).Text}"
If String . IsNullOrEmpty ( key ) Then Return
If ColumnAnothername . ContainsKey ( key ) Then
MsgBox ( $ " {key}:该别名已存在!请重新命名! " )
_grd . Cell ( TableRowNumber . FunctionChildNodeAnother , e . Col ) . Text = " "
Console . WriteLine ( $ " { e.Col}: {_grd.Cell(TableRowNumber.FunctionChildNodeAnother, e.Col).Text} " )
Return
Else
For Each strval In ColumnAnothername
If strval . Value . Equals ( val ) Then
ColumnAnothername . Remove ( strval . Key )
Exit For
End If
Next
ColumnAnothername . Add ( key , val )
End If
End If
End Select
Catch ex As Exception
MsgBox ( $ " {errindex}_{ex.Message} " )
End Try
End Sub
Public Sub CheckGridCellChangeIsOk ( g_devname As CtabRange , highpric As String , e As FlexCell . Grid . CellChangeEventArgs )
If g_devname . devname . ToUpper . Equals ( " DIMMING " ) OrElse
g_devname . devname . ToUpper . Equals ( " 485MUSIC " ) OrElse
g_devname . devname . ToUpper . Equals ( " INFRARED_FORWARD " ) OrElse
g_devname . devname . ToUpper . Equals ( " PB_RELAY_DEVICE " ) OrElse
g_devname . devname . ToUpper . Equals ( " PB_STRIP_DEVICE " ) OrElse
g_devname . devname . ToUpper . Equals ( " PB_LED_DEVICE " ) OrElse
g_devname . devname . ToUpper . Equals ( " DRY_CURTAIN " ) OrElse
g_devname . devname . ToUpper . Equals ( " LIGHT " ) OrElse
g_devname . devname . ToUpper . Equals ( " RELAY " ) OrElse
g_devname . devname . ToUpper . Equals ( " TEMP " ) OrElse
g_devname . devname . ToUpper . Equals ( " PB_LINE_CONTROL " ) OrElse
g_devname . devname . ToUpper . Equals ( " 485FloorHeat " . ToUpper ) OrElse
g_devname . devname . ToUpper . Equals ( " 485FreshAir " . ToUpper ) OrElse
g_devname . devname . ToUpper . Equals ( " CLED_FRESHAIR " . ToUpper ) OrElse
g_devname . devname . ToUpper . Equals ( " CLEDFLOORHEAT " . ToUpper ) OrElse
g_devname . devname . ToUpper . Equals ( " DRY_NoCard " . ToUpper ) OrElse
g_devname . devname . ToUpper . Equals ( " Dev_ColorTemp " . ToUpper ) OrElse
g_devname . devname . ToUpper . Equals ( " RKEY " . ToUpper ) OrElse
g_devname . devname . ToUpper . Equals ( " BLEMUSIC " . ToUpper ) OrElse
g_devname . devname . ToUpper . Equals ( " RS485_Curtain " . ToUpper ) OrElse
g_devname . devname . ToUpper . Equals ( " Carbon_Device " . ToUpper ) OrElse
g_devname . devname . ToUpper . Equals ( " Dev_Energy_Monitor " . ToUpper ) OrElse
g_devname . devname . ToUpper . Equals ( " Scene_Restore " . ToUpper ) OrElse
g_devname . devname . ToUpper . Equals ( " Dev_VirtualGlobalSet " . ToUpper ) OrElse
g_devname . devname . ToUpper . Equals ( " HOPO_Curtain " . ToUpper ) OrElse
2025-12-25 15:55:38 +08:00
g_devname . devname . ToUpper . Equals ( " lock " . ToUpper ) OrElse
2025-12-11 10:06:44 +08:00
g_devname . devname . ToUpper . Equals ( " MUSIC " . ToUpper ) Then
If ActionParameter . CheckDataIsOk ( g_devname . devname . ToUpper , highpric , BasicClasses ) Then
_grd . Cell ( e . Row , e . Col ) . BackColor = Color . White
_grd . Cell ( e . Row , e . Col ) . ForeColor = Color . Black
AddTableToTableRowTagtow ( e . Row , e . Col , highpric )
Else
If CheckDataIsOk ( g_devname . devname , highpric ) Then
_grd . Cell ( e . Row , e . Col ) . BackColor = Color . White
_grd . Cell ( e . Row , e . Col ) . ForeColor = Color . Black
AddTableToTableRowTagtow ( e . Row , e . Col , highpric )
Else
_grd . Cell ( e . Row , e . Col ) . BackColor = Color . OrangeRed
_grd . Cell ( e . Row , e . Col ) . ForeColor = Color . DarkRed
AddTableToTableRowTagtow ( e . Row , e . Col , highpric )
End If
End If
Else
If CheckDataIsOk ( g_devname . devname , highpric ) Then
_grd . Cell ( e . Row , e . Col ) . BackColor = Color . White
_grd . Cell ( e . Row , e . Col ) . ForeColor = Color . Black
AddTableToTableRowTagtow ( e . Row , e . Col , highpric )
Else
_grd . Cell ( e . Row , e . Col ) . BackColor = Color . OrangeRed
_grd . Cell ( e . Row , e . Col ) . ForeColor = Color . DarkRed
AddTableToTableRowTagtow ( e . Row , e . Col , highpric )
End If
End If
End Sub
Public Sub grdRemoveServerRow ( serverstr As String )
If String . IsNullOrEmpty ( serverstr ) Then Return
Dim buf ( ) As String = serverstr . Split ( " , " )
Dim serverindex As String = $ " {buf(0)},{buf(1)} "
'存在调用则不用删除
For i As Integer = TableRowNumber . Max To _grd . Rows - 1
If String . IsNullOrEmpty ( _grd . Cell ( i , TableColNumber . ServerAttribute ) . Text . Trim ) Then Continue For
Dim Clfbuf ( ) As String = _grd . Cell ( i , TableColNumber . ServerAttribute ) . Text . Trim . Split ( vbLf )
For Each index In Clfbuf
If index . Trim . IndexOf ( serverindex ) = 0 Then
Return
End If
Next
Next
If Not _ServerAction . ContainsKey ( serverindex ) Then Return
Dim deleterow As Integer = _ServerAction . Item ( serverindex )
'
Dim srowid As CtabRange = GetRowDevNametabRange ( " HOSTSERVICE " , TableColNumber . DeviceName )
'表格删除
_grd . Row ( deleterow ) . Delete ( )
If srowid . fr = deleterow AndAlso _grd . Rows <> deleterow Then
_grd . Cell ( deleterow , TableColNumber . DeviceName ) . Text = " HOSTSERVICE "
_grd . Range ( deleterow , TableColNumber . DeviceName , _grd . Rows - 1 , TableColNumber . DeviceName ) . Locked = False
_grd . Range ( deleterow , TableColNumber . DeviceName , _grd . Rows - 1 , TableColNumber . DeviceName ) . Merge ( )
_grd . Range ( deleterow , TableColNumber . DeviceName , _grd . Rows - 1 , TableColNumber . DeviceName ) . Merge ( )
_grd . Range ( deleterow , TableColNumber . DeviceName , _grd . Rows - 1 , TableColNumber . DeviceName ) . Locked = True
End If
'内存删除
Dic_ActionConfiguration . RemoveAt ( deleterow - TableRowNumber . Max )
'更服务所在行行号
For i As Integer = 0 To _ServerAction . Count
If _ServerAction . Values ( i ) > deleterow Then
_ServerAction . Item ( _ServerAction . Keys ( i ) ) = _ServerAction . Values ( i ) - 1
End If
Next
'删除服务动作
_ServerAction . Remove ( serverindex )
_ServerInsertRows = _ServerInsertRows - 1
End Sub
Public Sub grdInsertServerRow ( DevModeName As String , DevNodeName As String , DevNodeIndex As Integer , rowtype As String , Keytype As String , hostNode As DeviceChildNodeClass )
Dim serverindex As String = $ " {DevNodeIndex},{Keytype} "
If _ServerAction . ContainsKey ( serverindex ) Then Return
Dim InsertRow As Integer = _grd . Rows
_ServerAction . Add ( serverindex , InsertRow )
Dim gTableRowTag As New TableRowTag ( )
Dim KeyName As String = ServiceAttribute . Getservername ( DevNodeIndex , hostNode )
gTableRowTag . G_DevNodeName = DevNodeName
gTableRowTag . G_DevNodeIndex = DevNodeIndex
gTableRowTag . G_DevModeName = DevModeName
gTableRowTag . Set_G_Attributes ( rowtype , BasicClasses , Keytype )
gTableRowTag . G_DicRow . Add ( TableColNumber . choose , " 1 " )
gTableRowTag . G_DicRow . Add ( TableColNumber . SceneAttribute , $ " {Keytype},1,0 " )
gTableRowTag . G_DicRow . Add ( TableColNumber . SceneID , _SceneID )
gTableRowTag . G_DicRow . Add ( TableColNumber . KeyVal , DevNodeIndex . ToString )
gTableRowTag . G_DicRow . Add ( TableColNumber . KeyName , KeyName )
' If _grd.Rows <= InsertRow Then
'获取服务组起始行号
Dim srowid As CtabRange = GetRowDevNametabRange ( " HOSTSERVICE " , TableColNumber . DeviceName )
_grd . AddItem ( " " )
Dic_ActionConfiguration . Add ( gTableRowTag )
Dim rindex As Integer = _grd . Rows - 1
_grd . Cell ( rindex , TableColNumber . DeviceName ) . Text = $ " {DevNodeName} "
_grd . Cell ( rindex , TableColNumber . SceneID ) . Text = _SceneID . ToString
_grd . Cell ( rindex , TableColNumber . KeyVal ) . Text = DevNodeIndex . ToString
_grd . Cell ( rindex , TableColNumber . KeyName ) . Text = KeyName
_grd . Cell ( rindex , TableColNumber . choose ) . Text = " 1 "
_grd . Cell ( rindex , TableColNumber . SceneAttribute ) . Text = $ " {Keytype},1,0 "
_SceneID = _SceneID + 1
If Not IsNothing ( srowid ) Then
_grd . Range ( srowid . fr , TableColNumber . DeviceName , rindex , TableColNumber . DeviceName ) . Locked = False
_grd . Range ( srowid . fr , TableColNumber . DeviceName , rindex , TableColNumber . DeviceName ) . Merge ( )
_grd . Range ( srowid . fr , TableColNumber . DeviceName , rindex , TableColNumber . DeviceName ) . Locked = True
End If
'Else
' _grd.InsertRow(InsertRow, 1)
' Dic_ActionConfiguration.Insert(_ServerInsertRows, gTableRowTag)
' _grd.Cell(InsertRow, TableColNumber.DeviceName).Text = $"{DevNodeName}"
' _grd.Cell(InsertRow, TableColNumber.SceneID).Text = _SceneID.ToString
' _grd.Cell(InsertRow, TableColNumber.KeyVal).Text = DevNodeIndex.ToString
' _grd.Cell(InsertRow, TableColNumber.KeyName).Text = KeyName
' _grd.Cell(InsertRow, TableColNumber.choose).Text = "1"
' _grd.Cell(InsertRow, TableColNumber.SceneAttribute).Text = $"{Keytype},1,0"
'End If
_ServerInsertRows = _ServerInsertRows + 1
_grd . Range ( TableRowNumber . Max - 1 , TableColNumber . RowID , _grd . Rows - 1 , _grd . Cols - 1 ) . Alignment = AlignmentEnum . CenterCenter
_grd . Range ( TableRowNumber . Max , TableColNumber . SceneAttribute , _grd . Rows - 1 , _grd . Cols - 1 ) . CellType = CellTypeEnum . ComboBox
_grd . Range ( TableRowNumber . Max , TableColNumber . choose , _grd . Rows - 1 , TableColNumber . choose ) . CellType = CellTypeEnum . CheckBox
End Sub
Public Sub ChangeTheServiceLineNumber ( )
'获取服务组起始行号
Dim srowid As CtabRange = GetRowDevNametabRange ( " HOSTSERVICE " , TableColNumber . DeviceName )
If IsNothing ( srowid ) Then Return
Dim index As String
Dim buff ( ) As String
For i = srowid . fr To srowid . lr
index = _grd . Cell ( i , TableColNumber . KeyVal ) . Text . Trim
buff = _grd . Cell ( i , TableColNumber . SceneAttribute ) . Text . Trim . Split ( " , " )
index = $ " {index},{buff(0)} "
_ServerAction . Item ( index ) = i
Next
End Sub
Private Sub AddTableToTableRowTag ( row As Integer , col As Integer , text As String )
If String . IsNullOrEmpty ( text ) Then Return
Dim rowtag As TableRowTag = Dic_ActionConfiguration . Item ( row - TableRowNumber . Max )
If rowtag . G_DicRow . ContainsKey ( col . ToString ) Then
rowtag . G_DicRow . Item ( col . ToString ) = text
Else
rowtag . G_DicRow . Add ( col . ToString , text )
End If
End Sub
Private Sub AddTableToTableRowTagtow ( row As Integer , col As Integer , text As String )
Dim rowtag As TableRowTag = Dic_ActionConfiguration . Item ( row - TableRowNumber . Max )
If rowtag . G_DicRow . ContainsKey ( col . ToString ) Then
rowtag . G_DicRow . Item ( col . ToString ) = text
Else
rowtag . G_DicRow . Add ( col . ToString , text )
End If
End Sub
Private Function AddTableToTableRowTagX ( row As Integer , col As Integer , text As String ) As String
Dim rowtag As TableRowTag = Dic_ActionConfiguration . Item ( row - TableRowNumber . Max )
Dim reslut As String = String . Empty
If String . IsNullOrEmpty ( text ) Then
If rowtag . G_DicRow . ContainsKey ( col . ToString ) Then
reslut = rowtag . G_DicRow . Item ( col . ToString )
End If
End If
If rowtag . G_DicRow . ContainsKey ( col . ToString ) Then
reslut = rowtag . G_DicRow . Item ( col . ToString )
rowtag . G_DicRow . Item ( col . ToString ) = text
Else
rowtag . G_DicRow . Add ( col . ToString , text )
End If
Return reslut
End Function
Public Function GetComboDropDownDic ( ) As Dictionary ( Of String , List ( Of String ) )
Dim dic As New Dictionary ( Of String , List ( Of String ) )
Dim typeInten ( ) As String = { " RELAY " , " RS485_Curtain " . ToUpper , " LIGHT " , " CURTAIN " , " DRY_CURTAIN " , " DIMMING " , " TEMP " , " DO " ,
" INFRARED_FORWARD " , " CLED_FRESHAIR " , " CLEDFLOORHEAT " , " 485FreshAir " . ToUpper , " 485FloorHeat " . ToUpper , " PB_LINE_CONTROL " ,
" PB_LED_DEVICE " , " PB_STRIP_DEVICE " , " PB_RELAY_DEVICE " , " DRY_NoCard " . ToUpper , " Dev_ColorTemp " . ToUpper , " RKEY " . ToUpper , " Dev_Energy_Monitor " . ToUpper ,
2025-12-25 15:55:38 +08:00
" BLEMUSIC " . ToUpper , " Carbon_Device " . ToUpper , " HOPO_Curtain " . ToUpper , " Scene_Restore " . ToUpper , " Dev_VirtualGlobalSet " . ToUpper , " LOCK " . ToUpper }
2025-12-11 10:06:44 +08:00
For Each index In typeInten
Dim li As New List ( Of String )
Select Case index
Case " RELAY " , " PB_RELAY_DEVICE "
Dim cl = [ Enum ] . GetValues ( GetType ( TableColSwitchKeyDate ) )
For Each Cindex In cl
li . Add ( Chr ( Cindex ) )
Next
Case " RS485_Curtain " . ToUpper , " CURTAIN " , " DRY_CURTAIN "
Dim strarry ( ) As String = { " 开 " , " 关 " , " 停 " , " 互切 " }
li . AddRange ( strarry )
Case " DIMMING " , " PB_LINE_CONTROL " , " PB_STRIP_DEVICE " , " PB_LED_DEVICE "
Dim strarry ( ) As String = { Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ( ) , " 5 " , " 20 " , " 50 " , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ( ) }
li . AddRange ( strarry )
Case " TEMP " , " CLEDFLOORHEAT " , " 485FloorHeat " . ToUpper
Dim strarry ( ) As String = { " 开26度 " , " 关 " }
li . AddRange ( strarry )
Case " INFRARED_FORWARD "
Dim strarry ( ) As String = { " 开电视 " , " 关电视 " , " 静音 " , " 加音量 " , " 减音量 " }
li . AddRange ( strarry )
Case " 485FreshAir " . ToUpper , " CLED_FRESHAIR "
Dim strarry ( ) As String = { " 开 " , " 关 " }
li . AddRange ( strarry )
Case " DO " , " LIGHT "
Dim strarry ( ) As String = { " 开 " , " 关 " , " 闪 " , " 对应场景 " }
li . AddRange ( strarry )
End Select
If li . Count > 0 OrElse index . Equals ( " DRY_NoCard " . ToUpper ) OrElse index . Equals ( " HOPO_Curtain " . ToUpper ) OrElse index . Equals ( " Dev_ColorTemp " . ToUpper ) OrElse
index . Equals ( " Carbon_Device " . ToUpper ) OrElse index . Equals ( " RKEY " . ToUpper ) OrElse index . Equals ( " BLEMUSIC " . ToUpper ) OrElse index . Equals ( " Scene_Restore " . ToUpper ) OrElse
2025-12-25 15:55:38 +08:00
index . Equals ( " Dev_VirtualGlobalSet " . ToUpper ) OrElse index . Equals ( " Dev_Energy_Monitor " . ToUpper ) OrElse index . Equals ( " LOCK " . ToUpper ) Then
2025-12-11 10:06:44 +08:00
li . Add ( " 高级 " )
End If
dic . Add ( index , li )
Next
Return dic
End Function
Private Sub Grid_ComboDropDown ( Sender As Object , e As Grid . ComboDropDownEventArgs )
Console . WriteLine ( $ " Grid_ComboDropDown{_grd.Cell(e.Row, e.Col).Text } " )
_grd . ComboBox ( 0 ) . Items . Clear ( )
Dim ComboDropDownDic As Dictionary ( Of String , List ( Of String ) ) = GetComboDropDownDic ( )
Select Case e . Row
Case TableRowNumber . FunctionAnotherName
If TableColNumber . ServerAttribute Then
For i = - 24 To 24
_grd . ComboBox ( 0 ) . Items . Add ( i )
Next
End If
'Case ComboDropDownON.HostDev
' For Each HostDevFN In IO.Directory.GetFiles(HostDevFNP)
' Grid1.ComboBox(0).Items.Add(HostDevFN.Substring(HostDevFNP.Length, HostDevFN.Length - HostDevFNP.Length - 4))
' Next
Case >= TableRowNumber . Max
Console . WriteLine ( )
If _grd . ActiveCell . Col = TableColNumber . SceneAttribute Then
Dim fromshow As New ExecutionCondition
fromshow . G_grid = _grd
fromshow . DicDevicemodel = Dic_Devicemodel
fromshow . G_ActionConfiguration = Dic_ActionConfiguration
fromshow . g_BasicClasses = BasicClasses
fromshow . G_Row = _grd . ActiveCell . Row
fromshow . G_celltag = JsonConvert . DeserializeObject ( Of Dictionary ( Of String , String ) ) ( _grd . Cell ( _grd . ActiveCell . Row , _grd . ActiveCell . Col ) . Tag )
If IsNothing ( fromshow . G_celltag ) Then
fromshow . G_celltag = New Dictionary ( Of String , String )
End If
fromshow . G_ConfigActionConcitons = Condictions
fromshow . G_input = _grd . Cell ( _grd . ActiveCell . Row , TableColNumber . SceneAttribute ) . Text
fromshow . G_ModeDevType = Dic_ActionConfiguration . Item ( _grd . ActiveCell . Row - TableRowNumber . Max ) . G_KeyType . ToArray
If fromshow . ShowDialog ( ) <> DialogResult . OK Then Return
_grd . Cell ( _grd . ActiveCell . Row , _grd . ActiveCell . Col ) . Text = fromshow . G_Result
_grd . Cell ( _grd . ActiveCell . Row , _grd . ActiveCell . Col ) . Tag = JsonConvert . SerializeObject ( fromshow . G_celltag )
ElseIf _grd . ActiveCell . Col = TableColNumber . ServerAttribute Then
Dim fromshow As New ServiceAttribute
fromshow . G_input = _grd . Cell ( _grd . ActiveCell . Row , TableColNumber . ServerAttribute ) . Text
fromshow . G_hostNode = Nothing
For Each Anode In Dic_Devicemodel . Item ( hostname ) . Nodes
If Anode . Name . Equals ( " HOSTSERVICE " ) Then
fromshow . G_hostNode = Anode
End If
Next
If fromshow . ShowDialog ( ) <> DialogResult . OK Then Return
_grd . Cell ( _grd . ActiveCell . Row , _grd . ActiveCell . Col ) . Text = fromshow . G_result
'ElseIf _grd.Cell(TableRowNumber.FunctionName, _grd.ActiveCell.Col).Text.Equals( "MUSIC") Then
' Dim fromshow As New ActionParameter
' Dim g_devname As New CtabRange(_grd, TableRowNumber.FunctionName, _grd.ActiveCell.Col)
' fromshow.GetEquipmentParameter(g_devname.devname.ToUpper, _grd.Cell(_grd.ActiveCell.Row, _grd.ActiveCell.Col).Text, BasicClasses)
' If fromshow.ShowDialog() <> DialogResult.OK Then Return
' _grd.Cell(_grd.ActiveCell.Row, _grd.ActiveCell.Col).Text = fromshow.G_Result
ElseIf _grd . ActiveCell . Col > TableColNumber . ServerAttribute Then
Dim g_devname As New CtabRange ( _grd , TableRowNumber . FunctionName , _grd . ActiveCell . Col )
If g_devname . devname . ToUpper . Equals ( " 485MUSIC " ) OrElse
g_devname . devname . ToUpper . Equals ( " MUSIC " . ToUpper ) Then
Dim fromshow As New ActionParameter
fromshow . KeyName = _grd . Cell ( _grd . ActiveCell . Row , TableColNumber . KeyName ) . Text
Dim rowtag As TableRowTag = Dic_ActionConfiguration . Item ( e . Row - TableRowNumber . Max )
fromshow . g_DevNodename = rowtag . G_DevNodeName
fromshow . g_ExecutionMode = _grd . Cell ( _grd . ActiveCell . Row , TableColNumber . SceneAttribute ) . Text
fromshow . GetEquipmentParameter ( g_devname . devname . ToUpper , _grd . Cell ( _grd . ActiveCell . Row , _grd . ActiveCell . Col ) . Text , BasicClasses )
If fromshow . ShowDialog ( ) <> DialogResult . OK Then Return
_grd . Cell ( _grd . ActiveCell . Row , _grd . ActiveCell . Col ) . Text = fromshow . G_Result
Else
If ComboDropDownDic . ContainsKey ( g_devname . devname . ToUpper ) Then
Dim li As List ( Of String ) = ComboDropDownDic . Item ( g_devname . devname . ToUpper )
If IsNothing ( li ) Then
Return
End If
_grd . ComboBox ( 0 ) . Items . AddRange ( li . ToArray )
Else
For Each index In [ Enum ] . GetValues ( GetType ( TableColSwitchKeyDate ) )
_grd . ComboBox ( 0 ) . Items . Add ( Chr ( index ) )
Next
End If
End If
End If
End Select
End Sub
Public Function CheckDataIsOk ( devname As String , datastr As String ) As Boolean
If String . IsNullOrEmpty ( datastr ) Then Return True
Dim ComboDropDownDic As Dictionary ( Of String , List ( Of String ) ) = GetComboDropDownDic ( )
Select Case devname . ToUpper
Case " DIMMING " , " PB_LINE_CONTROL " , " PB_LED_DEVICE " , " PB_STRIP_DEVICE "
Dim dvalint As Integer = - 1
If datastr . Equals ( Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ( ) ) OrElse datastr . Equals ( Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ( ) ) Then Return True
If Integer . TryParse ( datastr , dvalint ) Then
If dvalint > - 1 AndAlso dvalint < 101 Then
Return True
End If
Else
Return False
End If
Case " 485MUSIC "
Case " TEMP " , " RS485_Curtain " . ToUpper , " DRY_CURTAIN " , " 485FloorHeat " . ToUpper , " 485FreshAir " . ToUpper , " INFRARED_FORWARD " , " RELAY " , " DO " , " LIGHT " , " CLED_FRESHAIR " , " CLEDFLOORHEAT "
For Each indx In ComboDropDownDic . Item ( devname . ToUpper )
If indx . Equals ( datastr ) Then
Return True
End If
Next
Return False
Case " MUSIC " . ToUpper
Case " DRY_NoCard " . ToUpper
Case " Dev_ColorTemp " . ToUpper
Case " BLEMUSIC " . ToUpper
Case " HOPO_Curtain " . ToUpper
Case " Carbon_Device " . ToUpper
Case " Dev_Energy_Monitor " . ToUpper
Case " Scene_Restore " . ToUpper
Case " Dev_VirtualGlobalSet " . ToUpper
Case Else
For Each index In [ Enum ] . GetValues ( GetType ( TableColSwitchKeyDate ) )
If datastr . Equals ( Chr ( index ) . ToString ) Then
Return True
End If
Next
End Select
Return False
End Function
Public Sub SpecifySetting ( devname As String , cand As String )
Dim srowid As CtabRange = GetRowDevNametabRange ( devname , TableColNumber . DeviceName )
If IsNothing ( srowid ) Then Return
Dim nuindex = 0
Dim tagdic As Dictionary ( Of String , String ) = New Dictionary ( Of String , String ) ( )
tagdic . Add ( " 50 可调下限设置(0-100) " , 10 )
tagdic . Add ( " 49 可调上限设置(0-100) " , 90 )
tagdic . Add ( " 48 主机调光百分比值(0-100) " , 90 )
tagdic . Add ( " 32 1-10V调光渐变时间 " , 21 )
tagdic . Add ( " 33 A9恒压调光渐变时间 " , 21 )
tagdic . Add ( " 34 A9PB调光渐变时间 " , 21 )
tagdic . Add ( " 35 C12调光渐变时间 " , 21 )
tagdic . Add ( " 36 灯带调光渐变时间 " , 21 )
tagdic . Add ( " C8PLC自带恒压调光渐变时间 " , 21 )
tagdic . Add ( " C8PLC外设恒压调光渐变时间 " , 21 )
tagdic . Add ( " 7 设定音乐音量 " , 6 )
tagdic . Add ( " 8 设定提示音音量 " , 6 )
tagdic . Add ( " 9 设定门铃和欢迎词音量 " , 6 )
tagdic . Add ( " 12 设定助眠音量 " , 6 )
tagdic . Add ( " 10 设定全局音量上限 " , 6 )
For i = srowid . fr To srowid . lr
Dim rowindex = i + nuindex
Dim datastr As String = _grd . Cell ( rowindex , TableColNumber . KeyName ) . Text . Trim
If rowindex = 7 Then
_grd . Cell ( rowindex , TableColNumber . SceneAttribute ) . Tag = JsonConvert . SerializeObject ( tagdic )
End If
Select Case datastr
Case " 插卡 "
_grd . Cell ( rowindex , TableColNumber . ServerAttribute ) . Text = " 1,1,0,1, "
_grd . Range ( rowindex , TableColNumber . KeyName , rowindex , TableColNumber . KeyName ) . SelectCells ( )
AddSceneLine ( " 插卡 " )
_grd . Cell ( rowindex + 1 , TableColNumber . KeyName ) . Text = " 拔卡 "
_grd . Cell ( rowindex + 1 , TableColNumber . ServerAttribute ) . Text = " 1,2,1,2, "
'Console.WriteLine(_grd.Cell(i + 1, TableColNumber.SceneAttribute).Text)
If _grd . Cell ( rowindex + 1 , TableColNumber . SceneAttribute ) . Text . Contains ( " 1365,1 " ) Then
_grd . Cell ( rowindex + 1 , TableColNumber . SceneAttribute ) . Text = " 2730,1,1152921504606846976 "
Else
_grd . Cell ( rowindex + 1 , TableColNumber . SceneAttribute ) . Text = " 2,1,1152921504606846976 "
End If
nuindex = nuindex + 1
Case " 门铃 "
_grd . Cell ( rowindex , TableColNumber . SceneAttribute ) . Text = " 1,1,1152921504606847520 "
Case " SOS按下 "
_grd . Range ( rowindex , TableColNumber . KeyName , rowindex , TableColNumber . KeyName ) . SelectCells ( )
_grd . Cell ( rowindex , TableColNumber . ServerAttribute ) . Text = " 8,1,0,1, "
AddSceneLine ( " SOS按下 " )
_grd . Cell ( rowindex + 1 , TableColNumber . ServerAttribute ) . Text = " 8,2,0,1, "
_grd . Cell ( rowindex + 1 , TableColNumber . KeyName ) . Text = " SOS松开 "
_grd . Cell ( rowindex + 1 , TableColNumber . SceneAttribute ) . Text = " 2,1,1152921504606846976 "
nuindex = nuindex + 1
Case " 开门磁 "
_grd . Range ( rowindex , TableColNumber . KeyName , rowindex , TableColNumber . KeyName ) . SelectCells ( )
_grd . Cell ( rowindex , TableColNumber . ServerAttribute ) . Text = " 13,1,0,1, "
AddSceneLine ( " 开门磁 " )
_grd . Cell ( rowindex + 1 , TableColNumber . ServerAttribute ) . Text = " 13,2,0,1, "
_grd . Cell ( rowindex + 1 , TableColNumber . KeyName ) . Text = " 关门磁 "
_grd . Cell ( rowindex , TableColNumber . SceneAttribute ) . Text = " 2,1,1152921504606846976 "
nuindex = nuindex + 1
Case Else
If _grd . Cell ( rowindex , TableColNumber . KeyName ) . Text . Contains ( " 滑动 " ) Then
_grd . Range ( rowindex , TableColNumber . KeyName , rowindex , TableColNumber . KeyName ) . SelectCells ( )
AddSceneLine ( " 左滑 " )
_grd . Cell ( rowindex + 1 , TableColNumber . KeyName ) . Text = " 右滑 "
_grd . Cell ( rowindex + 1 , TableColNumber . SceneAttribute ) . Text = " 1,1,1152921504606847008 "
nuindex = nuindex + 1
End If
End Select
Next
End Sub
Public Function AddSceneLine ( Optional valname As String = " " , Optional condition As String = " " ) As Boolean
If _grd . ActiveCell . Row >= TableRowNumber . Max And _grd . ActiveCell . Col >= TableColNumber . choose Then
Dim Crowtag As TableRowTag = Dic_ActionConfiguration . Item ( _grd . ActiveCell . Row - TableRowNumber . Max )
If Crowtag . G_DevNodeName . Equals ( " HOSTSERVICE " ) AndAlso False Then
MsgBox ( " 复制场景失败,服务场景不可复制! " )
Return False
Else
Dim rowtag As New TableRowTag
rowtag . G_DevModeName = Crowtag . G_DevModeName
rowtag . G_DevNodeName = Crowtag . G_DevNodeName
rowtag . G_DevNodeIndex = Crowtag . G_DevNodeIndex
rowtag . G_KeyType = Crowtag . G_KeyType
Dim old_SceneID As String = _grd . Cell ( _grd . ActiveCell . Row , TableColNumber . SceneID ) . Text
Dim FirstRow , Firstcol , LastCol , Lastrow As Integer
With _grd . Range ( _grd . ActiveCell . Row , TableColNumber . DeviceName , _grd . ActiveCell . Row , TableColNumber . DeviceName )
FirstRow = . FirstRow
Firstcol = . FirstCol
LastCol = . LastCol
Lastrow = . LastRow
End With
Dic_ActionConfiguration . Insert ( _grd . ActiveCell . Row - TableRowNumber . Max , rowtag )
Dim growlock As Boolean = _grd . Row ( _grd . ActiveCell . Row ) . Locked
_grd . InsertRow ( _grd . ActiveCell . Row , 1 )
_grd . Row ( _grd . ActiveCell . Row ) . Locked = growlock
For Each node In Crowtag . G_DicRow
If node . Key = TableColNumber . SceneID Then
rowtag . G_DicRow . Add ( node . Key , old_SceneID )
_grd . Cell ( _grd . ActiveCell . Row , node . Key ) . Text = old_SceneID
_grd . Cell ( _grd . ActiveCell . Row + 1 , node . Key ) . Text = _SceneID
Else
If node . Key = TableColNumber . KeyName AndAlso Not String . IsNullOrEmpty ( valname ) Then
rowtag . G_DicRow . Add ( node . Key , valname )
_grd . Cell ( _grd . ActiveCell . Row , node . Key ) . Text = valname
ElseIf node . Key = TableColNumber . SceneAttribute AndAlso Not String . IsNullOrEmpty ( condition ) Then
rowtag . G_DicRow . Add ( node . Key , condition )
_grd . Cell ( _grd . ActiveCell . Row , node . Key ) . Text = condition
Else
rowtag . G_DicRow . Add ( node . Key , node . Value )
_grd . Cell ( _grd . ActiveCell . Row , node . Key ) . Text = node . Value
End If
If node . Key = 6 Then
_grd . Cell ( _grd . ActiveCell . Row , node . Key ) . Tag = _grd . Cell ( _grd . ActiveCell . Row + 1 , node . Key ) . Tag
End If
End If
Next
Crowtag . G_DicRow . Item ( TableColNumber . SceneID ) = _SceneID
_SceneID = _SceneID + 1
If FirstRow = _grd . ActiveCell . Row Then
_grd . Range ( FirstRow , TableColNumber . choose , FirstRow , TableColNumber . Max ) . Locked = False
_grd . Range ( FirstRow , TableColNumber . SceneAttribute , FirstRow , _grd . Cols - 1 ) . CellType = CellTypeEnum . ComboBox
_grd . Range ( FirstRow , TableColNumber . choose , FirstRow , TableColNumber . choose ) . CellType = CellTypeEnum . CheckBox
_grd . Range ( FirstRow , TableColNumber . SceneID , FirstRow , TableColNumber . KeyVal ) . Locked = True
Dim rlockli As New List ( Of Integer )
For rli = _grd . ActiveCell . Row To Lastrow + 1
If _grd . Row ( rli ) . Locked = True Then
_grd . Row ( rli ) . Locked = False
rlockli . Add ( rli )
End If
Next
_grd . Range ( _grd . ActiveCell . Row , Firstcol , FirstRow + 1 , LastCol ) . Locked = False
_grd . Range ( _grd . ActiveCell . Row , Firstcol , FirstRow + 1 , LastCol ) . Merge ( )
_grd . Range ( _grd . ActiveCell . Row , Firstcol , FirstRow + 1 , LastCol ) . Locked = True
For Each rl In rlockli
_grd . Row ( rl ) . Locked = True
Next
End If
'_grd.Range(_grd.ActiveCell.Row, Firstcol, Lastrow 1, LastCol).Locked = False
'_grd.Range(_grd.ActiveCell.Row, Firstcol, Lastrow + 1, LastCol).Merge()
'_grd.Range(_grd.ActiveCell.Row, Firstcol, Lastrow + 1, LastCol).Locked = True
ChangeTheServiceLineNumber ( )
Return True
End If
Else
MsgBox ( " 复制场景失败,未选中需要复制的场景! " )
Return False
End If
End Function
Public Sub LaunchService ( )
'Dim srowid As CtabRange = GetRowDevNametabRange("HOSTSERVICE", TableColNumber.DeviceName)
'If IsNothing(srowid) Then Return
'For i = srowid.fr To srowid.lr
' If _grd.Row(i).Height > 0 Then
' _grd.Row(i).Height = 0
' Else
' _grd.Row(i).Height = 19
' End If
'Next
DisplayDicCol ( )
End Sub
Public oldColDisplayDic As Dictionary ( Of Integer , Boolean )
Public Sub DisplayDicCol ( )
If IsNothing ( _grd ) OrElse _grd . Cols = 0 Then Return
If IsNothing ( oldColDisplayDic ) Then
oldColDisplayDic = New Dictionary ( Of Integer , Boolean )
End If
Dim isEmpty As Integer = oldColDisplayDic . Count
For i = 1 To _grd . Cols - 1
If isEmpty = 0 Then
If _grd . Column ( i ) . Visible = True Then
If oldColDisplayDic . ContainsKey ( i ) Then
oldColDisplayDic . Item ( i ) = True
Else
oldColDisplayDic . Add ( i , True )
End If
Else
oldColDisplayDic . Add ( i , False )
End If
_grd . Column ( i ) . Visible = True
Else
If oldColDisplayDic . ContainsKey ( i ) Then
_grd . Column ( i ) . Visible = oldColDisplayDic . Item ( i )
oldColDisplayDic . Remove ( i )
End If
End If
Next
End Sub
Private CopyActionData As Dictionary ( Of Integer , String )
Public Sub CopySceneActionData ( )
CopyActionData . Clear ( )
If _grd . ActiveCell . Row > TableRowNumber . Max - 1 Then
For ei As Integer = TableColNumber . KeyName To _grd . Cols - 1
CopyActionData . Add ( ei , _grd . Cell ( _grd . ActiveCell . Row , ei ) . Text . Trim )
Next
Else
MsgBox ( " 非场景动作数据不可复制! " )
End If
End Sub
Public Sub GlueSceneActionData ( )
If CopyActionData . Count = 0 Then Return
If _grd . ActiveCell . Row > TableRowNumber . Max - 1 Then
If AddSceneLine ( ) Then
' _grd.Cell(_grd.ActiveCell.Row + 1, TableColNumber.KeyName).Text = _grd.Cell(_grd.ActiveCell.Row + 1, TableColNumber.KeyName).Text.Trim & "(复制)"
For Each index In CopyActionData
If index . Key = TableColNumber . KeyName Then
_grd . Cell ( _grd . ActiveCell . Row + 1 , index . Key ) . Text = index . Value . Trim & " (复制) "
Else
_grd . Cell ( _grd . ActiveCell . Row + 1 , index . Key ) . Text = index . Value
End If
Next
End If
Else
Return
End If
End Sub
Public Function IsAssociatedButtons ( fr As Integer , lr As Integer ) As Boolean
Dim rowtag As Dictionary ( Of String , String )
For i = fr To lr
rowtag = JsonConvert . DeserializeObject ( Of Dictionary ( Of String , String ) ) ( _grd . Cell ( i , 6 ) . Tag )
'CallRow
'CallRowA
If IsNothing ( rowtag ) Then Continue For
If rowtag . ContainsKey ( " CallRowA " ) AndAlso Not String . IsNullOrEmpty ( rowtag . Item ( " CallRowA " ) ) Then
Return True
End If
If rowtag . ContainsKey ( " CallRow " ) AndAlso Not String . IsNullOrEmpty ( rowtag . Item ( " CallRow " ) ) Then
Return True
End If
Next
Return False
End Function
Public Sub SelectRowNode ( )
'LockGridAutoRedraw()
If _grd . ActiveCell . Row > TableRowNumber . Max - 1 Then
If _grd . ActiveCell . Col = TableColNumber . DeviceName Then
Dim fr , lr , fc , lc As Integer
With _grd . Range ( _grd . ActiveCell . Row , TableColNumber . DeviceName , _grd . ActiveCell . Row , TableColNumber . DeviceName )
fr = . FirstRow
lr = . LastRow
fc = . FirstCol
lc = . LastCol
End With
Dim Removename As String = _grd . Cell ( fr , TableColNumber . DeviceName ) . Text . Trim
If Removename . Trim . Equals ( hostname ) Then
MsgBox ( " 主机设备不可删除!!! " )
Return
ElseIf Removename . Trim . Equals ( " HOSTSERVICE " ) Then
MsgBox ( " 服務模块不可删除!!! " )
Return
Else If IsAssociatedButtons ( fr , lr ) Then
MsgBox ( " 该设备已并联其他按键,请先解除并联再进行删除!!! " )
Return
Else
Dim devmode As DeviceModel = Dic_Devicemodel . Item ( Removename )
Dic_Devicemodel . Remove ( Removename )
Dim serverli As New List ( Of String )
For i = fr To lr
'从模块最大行号开始删
Dim deleteid As Integer = lr - i + fr
'先删除输入行
_grd . Row ( deleteid ) . Delete ( )
Dim rowtag As TableRowTag = Dic_ActionConfiguration . Item ( deleteid - TableRowNumber . Max )
Dic_ActionConfiguration . RemoveAt ( deleteid - TableRowNumber . Max )
If rowtag . G_DicRow . ContainsKey ( TableColNumber . ServerAttribute ) Then
Dim serverstr As String = rowtag . G_DicRow . Item ( TableColNumber . ServerAttribute )
If Not String . IsNullOrEmpty ( serverstr ) Then
serverli . Add ( serverstr )
End If
End If
Next
ChangeTheServiceLineNumber ( )
For Each serverstr In serverli
Dim wbuff ( ) As String = serverstr . Trim . Split ( vbLf )
For Each index In wbuff
grdRemoveServerRow ( index )
Next
Next
Dim coldevname As String = String . Empty
Dim TCols As Integer = _grd . Cols - 2
For ci = TableColNumber . InsertColumn To TCols
With _grd . Range ( TableRowNumber . DeviceName , ci , TableRowNumber . DeviceName , ci )
fr = . FirstRow
lr = . LastRow
fc = . FirstCol
lc = . LastCol
End With
If Removename . Equals ( _grd . Cell ( fr , fc ) . Text . Trim ) Then
'清空待删列缓存数据
DeleteTableClunm ( fc , lc )
'删除列
Dim cons As Integer = ColumnAnothername . Count
For indekey = 0 To cons - 1
If ColumnAnothername . Keys ( cons - 1 - indekey ) . Contains ( Removename ) Then
ColumnAnothername . Remove ( ColumnAnothername . Keys ( cons - 1 - indekey ) )
End If
Next
_grd . Range ( 0 , fc , _grd . Rows - 1 , lc ) . DeleteByCol ( )
_ColumnStartLoad = _ColumnStartLoad - ( lc - fc + 1 )
Exit For
End If
ci = lc
Next
'如果是特殊设备
Unboundrelay ( devmode )
End If
Else
Dim topval , inthepval , downpval As String
topval = _grd . Cell ( _grd . ActiveCell . Row - 1 , TableColNumber . KeyVal ) . Text . Trim
inthepval = _grd . Cell ( _grd . ActiveCell . Row , TableColNumber . KeyVal ) . Text . Trim
If _grd . ActiveCell . Row + 1 > _grd . Rows - 1 Then
downpval = String . Empty
Else
downpval = _grd . Cell ( _grd . ActiveCell . Row + 1 , TableColNumber . KeyVal ) . Text . Trim
End If
Dim rowtag As TableRowTag = Dic_ActionConfiguration . Item ( _grd . ActiveCell . Row - TableRowNumber . Max )
Dim g_devname = New CtabRange ( _grd , _grd . ActiveCell . Row , TableColNumber . DeviceName )
If g_devname . devname . Trim . Equals ( " HOSTSERVICE " ) Then
MsgBox ( " 服務模块不可删除!!! " )
Return
End If
If Not String . IsNullOrEmpty ( inthepval ) Then
If topval . Equals ( inthepval ) OrElse downpval . Equals ( inthepval ) Then
Dim deleterow As Integer = _grd . ActiveCell . Row
Dim srowid As CtabRange = GetRowDevNametabRange ( rowtag . G_DevModeName , TableColNumber . DeviceName )
_grd . Row ( deleterow ) . Delete ( )
Dic_ActionConfiguration . RemoveAt ( deleterow - TableRowNumber . Max )
If srowid . fr = deleterow Then
_grd . Cell ( deleterow , TableColNumber . DeviceName ) . Text = rowtag . G_DevModeName
_grd . Range ( deleterow , TableColNumber . DeviceName , srowid . lr - 1 , TableColNumber . DeviceName ) . Merge ( )
_grd . Range ( deleterow , TableColNumber . DeviceName , srowid . lr - 1 , TableColNumber . DeviceName ) . Locked = True
End If
'If rowtag.G_DevModeName.Equals( hostname) Then
' _ServerInsertRows = _ServerInsertRows - 1
' For dei As Integer = 0 To _ServerAction.Count - 1
' _ServerAction.Item(_ServerAction.Keys(dei)) = _ServerAction.Values(dei) - 1
' Next
'End If
If rowtag . G_DicRow . ContainsKey ( TableColNumber . ServerAttribute ) Then
Dim serverstr As String = rowtag . G_DicRow . Item ( TableColNumber . ServerAttribute )
If Not String . IsNullOrEmpty ( serverstr ) Then
Dim wbuff ( ) As String = serverstr . Trim . Split ( vbLf )
For Each index In wbuff
grdRemoveServerRow ( index )
Next
End If
End If
ChangeTheServiceLineNumber ( )
Else
MsgBox ( " 设备固定输入不可删除 " )
End If
End If
End If
ElseIf _grd . ActiveCell . Row = TableRowNumber . DeviceName AndAlso _grd . ActiveCell . Col >= TableColNumber . InsertColumn AndAlso _grd . ActiveCell . Col < ( _grd . Cols - 1 ) Then
Dim g_devname = New CtabRange ( _grd , TableRowNumber . DeviceName , _grd . ActiveCell . Col )
Dim srowid As CtabRange = GetRowDevNametabRange ( g_devname . devname , TableColNumber . DeviceName )
If g_devname . devname . Trim . Equals ( hostname ) Then
MsgBox ( " 主机设备不可删除!!! " )
Return
Else If ( not IsNothing ( srowid ) ) AndAlso IsAssociatedButtons ( srowid . fr , srowid . lr ) Then
MsgBox ( " 该设备已并联其他按键,请先解除并联再进行删除!!! " )
Return
End If
'删除行
Dim devmode As DeviceModel = Dic_Devicemodel . Item ( g_devname . devname )
Dic_Devicemodel . Remove ( g_devname . devname )
If Not IsNothing ( srowid ) Then
Dim serverli As New List ( Of String )
For i = srowid . fr To srowid . lr
'从模块最大行号开始删
Dim deleteid As Integer = srowid . lr - i + srowid . fr
'先删除输入行
_grd . Row ( deleteid ) . Delete ( )
Dim rowtag As TableRowTag = Dic_ActionConfiguration . Item ( deleteid - TableRowNumber . Max )
Dic_ActionConfiguration . RemoveAt ( deleteid - TableRowNumber . Max )
If rowtag . G_DicRow . ContainsKey ( TableColNumber . ServerAttribute ) Then
Dim serverstr As String = rowtag . G_DicRow . Item ( TableColNumber . ServerAttribute )
If Not String . IsNullOrEmpty ( serverstr ) Then
serverli . Add ( serverstr )
End If
End If
Next
End If
'清空待删列缓存数据
DeleteTableClunm ( g_devname . fc , g_devname . lc )
'删除列
Dim cons As Integer = ColumnAnothername . Count
For indekey = 0 To cons - 1
If ColumnAnothername . Keys ( cons - 1 - indekey ) . Contains ( g_devname . devname ) Then
ColumnAnothername . Remove ( ColumnAnothername . Keys ( cons - 1 - indekey ) )
End If
Next
_grd . Range ( 0 , g_devname . fc , _grd . Rows - 1 , g_devname . lc ) . DeleteByCol ( )
_ColumnStartLoad = _ColumnStartLoad - ( g_devname . lc - g_devname . fc + 1 )
'如果是特殊设备
Unboundrelay ( devmode )
End If
UnLockGridAutoRedraw ( )
End Sub
Public Sub Unboundrelay ( devmode As DeviceModel )
If IsNothing ( devmode ) Then Return
If devmode . Nodes ( 0 ) . Name . Equals ( " CURTAIN " ) OrElse
devmode . Nodes ( 0 ) . Name . ToUpper . Equals ( " 485FreshAir " . ToUpper ) OrElse
devmode . Nodes ( 0 ) . Name . ToUpper . Equals ( " 485FloorHeat " . ToUpper ) OrElse
devmode . Nodes ( 0 ) . Name . ToUpper . Equals ( " CLED_FRESHAIR " . ToUpper ) OrElse
devmode . Nodes ( 0 ) . Name . ToUpper . Equals ( " CLEDFLOORHEAT " . ToUpper ) Then
Dim oldbuf ( ) As String = devmode . Desc . ProtocolData . Split ( " , " )
If Not IsNothing ( oldbuf ) AndAlso oldbuf . Length > 0 Then
For Each index In oldbuf
Dim g_DevRELAYrow = GetDevLoopName ( " RELAY " , " PB_RELAY_DEVICE " )
If String . IsNullOrEmpty ( index ) Then Continue For
Dim oldcbuf ( ) As String = index . Split ( " * " )
Dim buf As String = $ " {oldcbuf(0)}*{oldcbuf(1)}*{oldcbuf(2)} "
If g_DevRELAYrow . ContainsKey ( buf ) AndAlso _grd . Cols > g_DevRELAYrow . Item ( buf ) Then
_grd . Column ( g_DevRELAYrow . Item ( buf ) ) . Visible = True
_grd . Column ( g_DevRELAYrow . Item ( buf ) ) . Locked = False
End If
Next
End If
Else
For Each node In devmode . Nodes
If node . Name . ToUpper . Equals ( " TEMP " ) Then
Dim dic As Dictionary ( Of String , String ) = JsonConvert . DeserializeObject ( Of Dictionary ( Of String , String ) ) ( devmode . Desc . ProtocolData )
If Not IsNothing ( dic ) AndAlso dic . Count > 0 Then
For Each index In dic
Dim g_DevRELAYrow = GetDevLoopName ( " RELAY " , " PB_RELAY_DEVICE " )
If g_DevRELAYrow . ContainsKey ( index . Value ) AndAlso _grd . Cols > g_DevRELAYrow . Item ( index . Value ) Then
_grd . Column ( g_DevRELAYrow . Item ( index . Value ) ) . Visible = True
_grd . Column ( g_DevRELAYrow . Item ( index . Value ) ) . Locked = False
End If
Next
End If
ElseIf node . Name . Equals ( " Dev_ColorTemp " ) Then
For i = 1 To node . Nodes . Count
Dim Index = node . Nodes ( i - 1 )
If Index . DefaultClass . Equals ( " Dev_ColorTemp " ) 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
End If
Next
End If
Next
End If
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 _grd . Cols - 1
Dim g_devname = New CtabRange ( _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 ( _grd , TableInteraction . TableRowNumber . FunctionAnotherName , i )
If g_devcloumn . devname . Equals ( nodetype ) Then
For vi = g_devcloumn . fc To g_devcloumn . lc
If _grd . Cell ( TableInteraction . TableRowNumber . FunctionChildNodeID , vi ) . Text . Equals ( devloop ) Then
_grd . Column ( vi ) . Visible = istrue
Console . WriteLine ( $ " Column{vi},Visible{istrue} " )
Exit Sub
End If
Next
End If
Next
End If
Next
End Sub
Private Sub DeleteTableClunm ( startindex As Integer , endtindex As Integer )
Dim len As Integer = endtindex - startindex + 1
Dim dic As New List ( Of ( Integer , String ) )
Dim dick , dicv As String
Dim G_DicRowlen As Integer = - 1
For i = TableRowNumber . Max To _grd . Rows - 1
Dim rowtag As TableRowTag = Dic_ActionConfiguration . Item ( i - TableRowNumber . Max )
'删除每行中需要删的列数据
'For j = startindex To endtindex
' If rowtag.G_DicRow.ContainsKey(j) Then
' rowtag.G_DicRow.Remove(j)
' End If
'Next
'变更列号
dic . Clear ( )
G_DicRowlen = rowtag . G_DicRow . Count - 1
For nodeindex As Integer = 0 To G_DicRowlen
dick = rowtag . G_DicRow . Keys ( nodeindex )
dicv = rowtag . G_DicRow . Values ( nodeindex )
If dick >= startindex AndAlso dick <= endtindex Then
dic . Add ( ( dick , " Remove " ) )
End If
If dick > endtindex Then
dic . Add ( ( dick , " Alter " ) )
End If
Next
If dic . Count > 2 Then
Console . WriteLine ( " " )
End If
dic . Sort ( )
For Each node In dic
Select Case node . Item2
Case " Alter "
Dim news As String = rowtag . G_DicRow . Item ( node . Item1 )
rowtag . G_DicRow . Add ( ( node . Item1 - len ) , rowtag . G_DicRow . Item ( node . Item1 ) )
rowtag . G_DicRow . Remove ( node . Item1 )
Case " Remove "
rowtag . G_DicRow . Remove ( node . Item1 )
End Select
Next
Next
End Sub
#End Region
#Region "编译"
Public Function TableCompiletoByte ( Optional savePath As String = " " ,
Optional ByVal IsShowCompileResult As Boolean = False ,
Optional ByVal ifCfgVerPlusPlus As Boolean = False ) As Boolean
Dim lst As New List ( Of Byte ( ) )
_actionIndex = 1
Dim newTableCompile As New TableCompile
Dim configInfoLst As New List ( Of Byte ( ) )
' 编译配置信息
If IsNothing ( ConfigInfo . Author ) Then
MsgBox ( " 未选中房型!!! " )
Return False
End If
Dim tmpInfo ( ) As Byte = FillConfigInfo ( ConfigInfo , hostname ) . ToArray
configInfoLst . Add ( tmpInfo )
Console . WriteLine ( $ " 编译配置信息:{ByteToString(tmpInfo)} " )
lst . AddRange ( configInfoLst . ToArray )
'编译设备存在
Dim deviceExistsDatas As List ( Of Byte ( ) )
Dim OutDevlist As New List ( Of Byte )
deviceExistsDatas = FillDeviceExistsData ( Dic_Devicemodel )
lst . AddRange ( deviceExistsDatas . ToArray )
'获取编译的设备动作
Dim actibuf As List ( Of Byte ( ) ) = FillDeviceObject ( Dic_Devicemodel , Dic_ActionConfiguration , _grd )
For Each buf In actibuf
lst . Add ( buf )
Next
'语音
actibuf = VoicementDeviceObject ( )
For Each buf In actibuf
lst . Add ( buf )
Next
'编译场景
Dim NoCardDatabuf As List ( Of Byte ( ) ) = GetNoCardData ( )
For Each buf In NoCardDatabuf
lst . Add ( buf )
Next
'编译场景信息
Dim SceneDatas As List ( Of Byte ( ) )
SceneDatas = FillSceneData ( Dic_ActionConfiguration )
lst . AddRange ( SceneDatas . ToArray )
Dim frames As List ( Of Byte ( ) ) = newTableCompile . FillDataFrames ( lst )
Dim path As String = savePath . Replace ( " .blv " , " .dat " )
'Dim filename As String = Application.StartupPath & "\Shipment\test.dat"
'If Not IO.Directory.Exists(Application.StartupPath & "\Shipment\") Then IO.Directory.CreateDirectory(Application.StartupPath & "\Shipment\")
If IO . File . Exists ( path ) Then IO . File . Delete ( path )
Using steam As New IO . FileStream ( path , IO . FileMode . OpenOrCreate )
For Each frame As Byte ( ) In frames
steam . Write ( frame , 0 , frame . Length )
Console . WriteLine ( $ " Length:{frame.Length:D4} Data:{BitConverter.ToString(frame).Replace( " - " , " " )} " )
Next
steam . Flush ( )
steam . Close ( )
End Using
Dim filebuff ( ) As Byte = IO . File . ReadAllBytes ( path )
Dim ismod As Integer = filebuff . Length Mod 4
Dim buff As New List ( Of Byte )
buff . AddRange ( filebuff )
For isnum As Integer = 1 To ( 4 - ismod )
buff . Add ( 0 )
Next
IO . File . WriteAllBytes ( path , buff . ToArray )
MsgBox ( $ " 编译完成:{path} " )
Return True
End Function
Public Function GetNoCardData ( ) As List ( Of Byte ( ) )
Dim result As New List ( Of Byte ( ) )
Dim UniqueDevice As DeviceModel
Dim NoCardNode As DeviceChildNodeClass
Dim vli , nli As List ( Of Byte ( ) )
Dim mli As Byte ( )
For Each index In Dic_Devicemodel . Values
For Each node In index . Nodes
If node . Name . Equals ( " Virtual_Card " ) Then
UniqueDevice = index
NoCardNode = node
If UniqueDevice . Desc . DevDataModelVer . Contains ( " 1.0 " ) Then
vli = PortInformation ( NoCardNode )
nli = ConditionalInformation ( UniqueDevice )
mli = EquipmentCommonStats ( UniqueDevice )
If Not IsNothing ( vli ) AndAlso vli . Count > 0 AndAlso Not IsNothing ( vli ) AndAlso vli . Count > 0 Then
result . AddRange ( vli )
result . AddRange ( nli )
If Not IsNothing ( mli ) AndAlso mli . Count > 0 Then
result . Add ( mli )
End If
End If
else
vli = PortInformation1 ( NoCardNode )
nli = ConditionalInformation1 ( UniqueDevice )
If Not IsNothing ( vli ) AndAlso vli . Count > 0 AndAlso Not IsNothing ( vli ) AndAlso vli . Count > 0 Then
result . AddRange ( vli )
result . AddRange ( nli )
End If
End If
End If
Next
Next
Return result
End Function
Public Function EquipmentCommonStats ( UniqueDevice As DeviceModel ) As Byte ( )
Dim lst As New List ( Of Byte )
Dim strbuf ( ) As String = UniqueDevice . Desc . ProtocolData . Split ( " , " )
If strbuf . Length < 6 Then Return Nothing
Dim cmd As Byte = & HB
lst . Add ( cmd )
lst . Add ( If ( strbuf ( 0 ) . Equals ( " 1 " ) , 1 , 0 ) )
Dim number As Integer = 0
If String . IsNullOrEmpty ( strbuf ( 1 ) ) Then
lst . AddRange ( BitConverter . GetBytes ( CShort ( number ) ) )
Else
Integer . TryParse ( strbuf ( 1 ) , number )
lst . AddRange ( BitConverter . GetBytes ( CShort ( number ) ) )
End If
lst . Add ( CInt ( strbuf ( 2 ) ) )
lst . Add ( If ( strbuf ( 3 ) . Equals ( " 1 " ) , 1 , 0 ) )
number = 0
If String . IsNullOrEmpty ( strbuf ( 4 ) ) Then
lst . AddRange ( BitConverter . GetBytes ( CShort ( number ) ) )
Else
Integer . TryParse ( strbuf ( 4 ) , number )
lst . AddRange ( BitConverter . GetBytes ( CShort ( number ) ) )
End If
lst . Add ( CInt ( strbuf ( 5 ) ) )
Return lst . ToArray
End Function
'端口信息
Public Function PortInformation ( NoCardNode As DeviceChildNodeClass ) As List ( Of Byte ( ) )
Dim result As New List ( Of Byte ( ) )
Dim sbuf ( ) As String
Dim isport As Boolean
For Each node In NoCardNode . Nodes
'If node.LoopAddr.Equals("1") Then Continue For '增加了跳过端口1的判断
sbuf = node . Description . Split ( " , " )
isport = True
For i = 0 To sbuf . Length - 1
If String . IsNullOrEmpty ( sbuf ( i ) ) AndAlso ( i <> 2 AndAlso i <> 3 ) Then
isport = False
End If
Next
If isport AndAlso sbuf . Length > 4 Then
result . Add ( GetPortInformation ( node . LoopAddr , node . Description ) )
Else
Continue For
End If
Next
Return result
End Function
Public Function PortInformation1 ( NoCardNode As DeviceChildNodeClass ) As List ( Of Byte ( ) )
Dim result As New List ( Of Byte ( ) )
Dim sbuf ( ) As String
Dim isport As Boolean
For Each node In NoCardNode . Nodes
'If node.LoopAddr.Equals("1") Then Continue For '增加了跳过端口1的判断
sbuf = node . Description . Split ( " , " )
isport = True
For i = 0 To sbuf . Length - 1
If String . IsNullOrEmpty ( sbuf ( i ) ) AndAlso ( i <> 2 AndAlso i <> 3 ) Then
isport = False
End If
Next
If isport AndAlso sbuf . Length > 4 Then
result . Add ( GetPortInformation1 ( node . LoopAddr , node . Description ) )
Else
Continue For
End If
Next
Return result
End Function
Public Function GetPortInformation ( LoopAddr As String , nStr As String ) As Byte ( )
Dim cmd As Byte = & H9
Dim Data = New List ( Of Byte )
Dim strbuf ( ) As String = nStr . Split ( " , " )
Data . Add ( cmd )
Data . Add ( CInt ( strbuf ( 5 ) ) )
Data . Add ( CInt ( strbuf ( 6 ) ) )
Data . AddRange ( BitConverter . GetBytes ( CShort ( CInt ( strbuf ( 4 ) ) ) ) )
If String . IsNullOrEmpty ( strbuf ( 2 ) ) Then
Data . Add ( 0 )
Else
Data . Add ( CInt ( strbuf ( 2 ) ) )
End If
Data . Add ( CInt ( LoopAddr ) ) '- 1) '增加了减1
If String . IsNullOrEmpty ( strbuf ( 3 ) ) OrElse strbuf ( 3 ) . Equals ( " 0 " ) Then
Data . Add ( 0 )
Else
Data . Add ( 1 )
End If
Return Data . ToArray
End Function
Public Function GetPortInformation1 ( LoopAddr As String , nStr As String ) As Byte ( )
Dim cmd As Byte = & H9
Dim Data = New List ( Of Byte )
Dim strbuf ( ) As String = nStr . Split ( " , " )
Data . Add ( cmd )
Data . Add ( CInt ( strbuf ( 8 ) ) )
Data . Add ( CInt ( strbuf ( 9 ) ) )
Data . AddRange ( BitConverter . GetBytes ( CShort ( CInt ( strbuf ( 7 ) ) ) ) )
If String . IsNullOrEmpty ( strbuf ( 2 ) ) Then
Data . Add ( 0 )
Else
Data . Add ( CInt ( strbuf ( 2 ) ) )
End If
Data . Add ( CInt ( LoopAddr ) ) '- 1) '增加了减1
If String . IsNullOrEmpty ( strbuf ( 4 ) ) OrElse strbuf ( 4 ) . Equals ( " 0 " ) Then
Data . Add ( 0 )
Else
Data . Add ( 1 )
End If
if String . IsNullOrEmpty ( strbuf ( 5 ) ) OrElse strbuf ( 5 ) . Equals ( " 0 " ) Then
Data . AddRange ( BitConverter . GetBytes ( CShort ( 0 ) ) )
Else
Data . AddRange ( BitConverter . GetBytes ( CShort ( CInt ( strbuf ( 5 ) ) ) ) )
End If
Data . Add ( GetGlossary8 ( strbuf ( 6 ) ) )
If String . IsNullOrEmpty ( strbuf ( 3 ) ) Then
Data . Add ( 0 )
Else
Data . Add ( CInt ( strbuf ( 3 ) ) )
End If
Return Data . ToArray
End Function
Public Function ConditionalInformation ( UniqueDevice As DeviceModel ) As List ( Of Byte ( ) )
Dim result As New List ( Of Byte ( ) )
Dim sbuf ( ) As String
Dim isport As Boolean
Dim IfGridRowdic As Dictionary ( Of String , List ( Of String ) )
Try
IfGridRowdic = JsonConvert . DeserializeObject ( Of Dictionary ( Of String , List ( Of String ) ) ) ( UniqueDevice . Desc . DevDescription )
Catch ex As Exception
Return Nothing
End Try
If IsNothing ( IfGridRowdic ) Then Return result
For Each index In IfGridRowdic
For Each node In index . Value
sbuf = node . Split ( " , " )
isport = True
For Each nStr In sbuf
If String . IsNullOrEmpty ( nStr ) Then
isport = False
End If
Next
If isport AndAlso sbuf . Length > 3 Then
result . Add ( GetConditionalInformation ( index . Key , node ) )
Else
Continue For
End If
Next
Next
Return result
End Function
Public Function ConditionalInformation1 ( UniqueDevice As DeviceModel ) As List ( Of Byte ( ) )
Dim result As New List ( Of Byte ( ) )
Dim sbuf ( ) As String
Dim isport As Boolean
Dim IfGridRowdic As Dictionary ( Of String , List ( Of String ) )
Try
IfGridRowdic = JsonConvert . DeserializeObject ( Of Dictionary ( Of String , List ( Of String ) ) ) ( UniqueDevice . Desc . DevDescription )
Catch ex As Exception
Return Nothing
End Try
If IsNothing ( IfGridRowdic ) Then Return result
For Each index In IfGridRowdic
For Each node In index . Value
sbuf = node . Split ( " , " )
isport = True
For Each nStr In sbuf
If String . IsNullOrEmpty ( nStr ) Then
isport = False
End If
Next
If isport AndAlso sbuf . Length > 3 Then
result . Add ( GetConditionalInformation1 ( index . Key , node ) )
Else
Continue For
End If
Next
Next
Return result
End Function
Public Function GetConditionalInformation1 ( key As String , nStr As String ) As Byte ( )
Dim cmd As Byte = & H8
Dim Data = New List ( Of Byte )
Dim strbuf ( ) As String = nStr . Split ( " , " )
Dim nbbuf ( ) As String
Data . Add ( cmd )
nbbuf = strbuf ( 1 ) . Split ( " : " )
Data . Add ( PowerSupply . GetNoCarDataKeyVal ( nbbuf ( 0 ) ) )
Data . Add ( CInt ( key ) )
Data . Add ( strbuf ( 0 ) )
Data . AddRange ( BitConverter . GetBytes ( CShort ( CInt ( strbuf ( 14 ) ) ) ) )
Data . Add ( GetGlossary8 ( strbuf ( 15 ) ) )
For i = 1 To 11 '11变成10
'nbbuf = strbuf(i + 1).Split(":")
Data . Add ( PowerSupply . GetNoCarDataKeyVal ( strbuf ( i + 1 ) ) ) 'i 加 1 编程 i+2
Next
Data . AddRange ( BitConverter . GetBytes ( CShort ( CInt ( strbuf ( 16 ) ) ) ) )
Data . Add ( GetGlossary8 ( strbuf ( 17 ) ) )
Return Data . ToArray
End Function
'条件信息
Public Function GetConditionalInformation ( key As String , nStr As String ) As Byte ( )
Dim cmd As Byte = & H8
Dim Data = New List ( Of Byte )
Dim strbuf ( ) As String = nStr . Split ( " , " )
Dim nbbuf ( ) As String
Data . Add ( cmd )
nbbuf = strbuf ( 1 ) . Split ( " : " )
Data . Add ( PowerSupply . GetNoCarDataKeyVal ( nbbuf ( 0 ) ) )
Data . Add ( CInt ( key ) )
Data . Add ( strbuf ( 0 ) )
Data . AddRange ( BitConverter . GetBytes ( CShort ( CInt ( strbuf ( 13 ) ) ) ) )
Data . Add ( GetGlossary8 ( strbuf ( 14 ) ) )
For i = 1 To 11 '11变成10
'nbbuf = strbuf(i + 1).Split(":")
Data . Add ( PowerSupply . GetNoCarDataKeyVal ( strbuf ( i + 1 ) ) ) 'i 加 1 编程 i+2
Next
Return Data . ToArray
End Function
Public Function GetGlossary8 ( sb As String ) As Byte
Dim result As Byte = 0
Select Case sb
Case " 秒 "
result = 1
Case " 分 "
result = 2
Case " 时 "
result = 3
Case Else
result = 0
End Select
Return result
End Function
Private Function FillSceneData ( SwitchConfig As List ( Of TableRowTag ) ) As List ( Of Byte ( ) )
Dim tmpBufferCount As Integer = 0
Dim resultDatas As New List ( Of Byte ( ) )
Dim cmd As Byte = & H6
Dim buf As List ( Of Byte )
For Each num In SwitchConfig
buf = New List ( Of Byte )
buf . Add ( cmd )
tmpBufferCount = CShort ( num . G_DicRow . Item ( TableColNumber . SceneID ) )
buf . AddRange ( BitConverter . GetBytes ( tmpBufferCount ) ) '2字节场景编号
Dim aliasData ( ) As Byte = AliasEncoding . GetBytes ( num . G_DicRow . Item ( TableColNumber . KeyName ) )
ReDim Preserve aliasData ( 15 )
buf . AddRange ( aliasData ) '16字节场景别名
buf . AddRange ( BitConverter . GetBytes ( tmpBufferCount ) ) '2n动作编号集
'tmpBufferCount = tmpBufferCount + buf.Count
resultDatas . Add ( buf . ToArray )
Next
'PrintInfo("场景编译完成,长度:" & tmpBufferCount & "Bytes")
Return resultDatas
End Function
Public Function FillDeviceObject ( ByRef DeviceModuleDic As Dictionary ( Of String , DeviceModel ) , SwitchConfig As List ( Of TableRowTag ) , Grid1 As FlexCell . Grid ) As List ( Of Byte ( ) )
'返回变量
Dim result As New List ( Of Byte ( ) )
'行tag
Dim rowtag As TableRowTag
'编译固定参书
Dim cmd As Byte = & H4
Dim g_devLoop As Integer = 1
'Dim CarbonDevice As Dictionary(Of String, List(Of (String, String))) = New Dictionary(Of String, List(Of (String, String)))
'CarbonDevice.Clear()
'遍历每个事件
For i As Integer = 0 To SwitchConfig . Count - 1
'取行tag
rowtag = SwitchConfig . Item ( i )
'枚举列直
'判断是否执行
If rowtag . G_DicRow . Count > 0 AndAlso rowtag . G_DicRow . Item ( TableColNumber . choose ) . Equals ( " 1 " ) AndAlso Not String . IsNullOrEmpty ( rowtag . G_DicRow . Item ( TableColNumber . SceneAttribute ) ) Then
Dim Grow As Integer = i + TableRowNumber . Max
Dim celltag As Dictionary ( Of String , String ) = JsonConvert . DeserializeObject ( Of Dictionary ( Of String , String ) ) ( _grd . Cell ( Grow , TableColNumber . SceneAttribute ) . Tag )
If Not IsNothing ( celltag ) AndAlso celltag . ContainsKey ( " CallRow " ) Then
Continue For
End If
'模型的设备类型
Console . WriteLine ( $ " FillDeviceObject 2561 {rowtag.G_DevModeName} " )
Dim devType As Byte
Try
devType = GetActionDeviceType ( DeviceModuleDic , rowtag . G_DevModeName , rowtag . G_DevNodeName )
Catch ex As Exception
Console . WriteLine ( $ " FillDeviceObject 2561 {rowtag.G_DevModeName} " )
End Try
'模型的拨码地址
Dim devAddr As Byte = GetActionDeviceAddr ( DeviceModuleDic , rowtag . G_DevModeName , rowtag . G_DevNodeName )
'回路地址
Dim devLoop ( ) As Byte = BitConverter . GetBytes ( CShort ( rowtag . G_DevNodeIndex ) )
'获取场景属性
Dim Exbuf ( ) As String = rowtag . G_DicRow . Item ( TableColNumber . SceneAttribute ) . Split ( " , " )
'事件编号
Dim strEventNum As UShort = 1
UShort . TryParse ( Exbuf ( 0 ) , strEventNum )
Dim eventNum ( ) As Byte = BitConverter . GetBytes ( strEventNum )
'执行条件编译数据
Dim clause ( ) As Byte = GetConditionDataUnderConditionGroup ( Exbuf ( 2 ) )
'取执行模式
Dim condition As Byte
Dim isCheckOut As Integer = 0
Dim CheckOutdeng As Integer = 0
Select Case Exbuf ( 1 )
Case " 8 " , " 9 " , " 7 "
condition = GetExecModeDataUnderCondtion ( 2 )
isCheckOut = CInt ( Exbuf ( 1 ) )
Case " 13 " , " 10 "
condition = GetExecModeDataUnderCondtion ( 1 )
isCheckOut = CInt ( Exbuf ( 1 ) )
Case Else
condition = GetExecModeDataUnderCondtion ( Exbuf ( 1 ) )
End Select
'事件条件别名
Dim aliasbuf ( 31 ) As Byte
'场景编号
Dim sceneIndex As UShort = CUShort ( rowtag . G_DicRow . Item ( TableColNumber . SceneID ) )
2025-12-25 15:55:38 +08:00
If sceneIndex = 23 Then
Console . WriteLine ( $ " FillDeviceObject 2597 " )
End If
2025-12-11 10:06:44 +08:00
Dim sceneNum ( ) As Byte = BitConverter . GetBytes ( sceneIndex )
'30位保留字段
Dim keepBuf ( 31 ) As Byte
'保留字段(32字节) -> 2022-05-28 V3.1 32bytes
Dim keepParam ( 31 ) As Byte
'执行动作
Dim ncbuf As New List ( Of Byte ( ) )
Dim Scenebuf As New List ( Of Byte ( ) )
Dim multiplebuf As New List ( Of List ( Of Byte ( ) ) )
Dim col As Integer = - 1
Dim t_col As Integer = - 1
Dim DevGroupName As String = String . Empty
Dim databuff As List ( Of Byte ( ) )
Dim textval As String = String . Empty
Dim DevModeName As String
Dim Ismusic As Boolean = False
Dim CheckOutDic As New Dictionary ( Of String , List ( Of Byte ) )
'遍历设备列表
If rowtag . G_DicRow . ContainsKey ( TableColNumber . ServerAttribute ) = False OrElse String . IsNullOrEmpty ( rowtag . G_DicRow . Item ( TableColNumber . ServerAttribute ) ) Then '按键
Else '服务
'获取场景属性
Dim Tserverbuf ( ) As String = rowtag . G_DicRow . Item ( TableColNumber . ServerAttribute ) . Split ( vbLf )
For Each Findex In Tserverbuf
Dim serverbuf ( ) As String = Findex . Split ( " , " )
DevModeName = hostname
DevGroupName = " HOSTSERVICE "
databuff = GetActionDatagather ( DeviceModuleDic , DevModeName , DevGroupName , serverbuf ( 0 ) , serverbuf ( 1 ) , Nothing , CInt ( serverbuf ( 2 ) ) , CInt ( serverbuf ( 3 ) ) )
If IsNothing ( databuff ) Then Continue For
ncbuf . AddRange ( databuff . ToArray )
Scenebuf . AddRange ( databuff . ToArray )
Next
End If
If Not IsNothing ( celltag ) AndAlso celltag . ContainsKey ( " CallRowA " ) AndAlso Not String . IsNullOrEmpty ( celltag . Item ( " CallRowA " ) ) Then
'添加反饋燈
Dim callA ( ) = celltag . Item ( " CallRowA " ) . Split ( " , " )
For Each callindex In callA
databuff = AdditionalFeedbackLamp ( callindex , DeviceModuleDic , celltag )
If IsNothing ( databuff ) Then Continue For
ncbuf . AddRange ( databuff . ToArray )
Scenebuf . AddRange ( databuff . ToArray )
databuff = ParallelScenario ( callindex , DeviceModuleDic , SwitchConfig )
If Not IsNothing ( databuff ) Then
multiplebuf . Add ( databuff )
End If
Next
End If
For Each index In rowtag . G_DicRow
Integer . TryParse ( index . Key , col )
'If index.Value.Equals("插卡") Then
If index . Value . Trim . Equals ( " 入住服务 " ) And rowtag . G_DicRow . Item ( TableColNumber . SceneAttribute ) . Substring ( 0 , 1 ) . Equals ( " 1 " ) Then
Dim onecelltag As Dictionary ( Of String , String ) = JsonConvert . DeserializeObject ( Of Dictionary ( Of String , String ) ) ( _grd . Cell ( 7 , TableColNumber . SceneAttribute ) . Tag )
If Not IsNothing ( onecelltag ) AndAlso onecelltag . ContainsKey ( " 34 A9PB调光渐变时间 " ) Then
Dim Rdic As New Dictionary ( Of String , String )
Dim Musicdic As New Dictionary ( Of String , String )
Dim partime As String = String . Empty
Dim partime1 As String = String . Empty
Dim partime2 As String = String . Empty
Dim partime3 As String = String . Empty
For Each TheDevMode In DeviceModuleDic . Values
Musicdic . Clear ( )
Rdic . Clear ( )
Select Case TheDevMode . Desc . Name
Case " 灯带 "
Rdic . Add ( " Dimming " . ToUpper , " 36 灯带调光渐变时间 " )
partime = onecelltag . Item ( " 36 灯带调光渐变时间 " )
Case " 1到10V调光 "
Rdic . Add ( " Dimming " . ToUpper , " 32 1-10V调光渐变时间 " )
partime = onecelltag . Item ( " 32 1-10V调光渐变时间 " )
Case " A9调光 "
Rdic . Add ( " Dimming " . ToUpper , " 33 A9恒压调光渐变时间 " )
partime = onecelltag . Item ( " 33 A9恒压调光渐变时间 " )
Case " A8PB调光 "
Rdic . Add ( " Dimming " . ToUpper , " 34 A9PB调光渐变时间 " )
partime = onecelltag . Item ( " 34 A9PB调光渐变时间 " )
'Case "PB"
Case " PB_STRIP_DEVICE "
Rdic . Add ( " PB_STRIP_DEVICE " . ToUpper , " C8PLC外设恒压调光渐变时间 " )
partime = onecelltag . Item ( " C8PLC外设恒压调光渐变时间 " )
Case " BLV_C12 "
For Each configindex In TheDevMode . Nodes
Select Case configindex . Name
Case " PB_LINE_CONTROL " . ToUpper
Rdic . Add ( " PB_LINE_CONTROL " . ToUpper , " C8PLC自带恒压调光渐变时间 " )
partime = onecelltag . Item ( " C8PLC自带恒压调光渐变时间 " )
If onecelltag . ContainsKey ( " 48 主机调光百分比值(0-100) " ) Then
partime1 = onecelltag . Item ( " 48 主机调光百分比值(0-100) " )
Else
partime1 = Nothing
End If
If onecelltag . ContainsKey ( " 50 可调下限设置(0-100) " ) Then
partime2 = onecelltag . Item ( " 50 可调下限设置(0-100) " )
Else
partime2 = Nothing
End If
If onecelltag . ContainsKey ( " 49 可调上限设置(0-100) " ) Then
partime3 = onecelltag . Item ( " 49 可调上限设置(0-100) " )
Else
partime3 = Nothing
End If
Case " Dimming " . ToUpper
Rdic . Add ( " Dimming " . ToUpper , " 35 C12调光渐变时间 " )
partime = onecelltag . Item ( " 35 C12调光渐变时间 " )
If onecelltag . ContainsKey ( " 48 主机调光百分比值(0-100) " ) Then
partime1 = onecelltag . Item ( " 48 主机调光百分比值(0-100) " )
Else
partime1 = Nothing
End If
If onecelltag . ContainsKey ( " 50 可调下限设置(0-100) " ) Then
partime2 = onecelltag . Item ( " 50 可调下限设置(0-100) " )
Else
partime2 = Nothing
End If
If onecelltag . ContainsKey ( " 49 可调上限设置(0-100) " ) Then
partime3 = onecelltag . Item ( " 49 可调上限设置(0-100) " )
Else
partime3 = Nothing
End If
End Select
Next
If Not String . IsNullOrEmpty ( onecelltag . Item ( " 7 设定音乐音量 " ) ) Then
Musicdic . Add ( 7 , onecelltag . Item ( " 7 设定音乐音量 " ) )
End If
If Not String . IsNullOrEmpty ( onecelltag . Item ( " 8 设定提示音音量 " ) ) Then
Musicdic . Add ( 8 , onecelltag . Item ( " 8 设定提示音音量 " ) )
End If
If Not String . IsNullOrEmpty ( onecelltag . Item ( " 9 设定门铃和欢迎词音量 " ) ) Then
Musicdic . Add ( 9 , onecelltag . Item ( " 9 设定门铃和欢迎词音量 " ) )
End If
If Not String . IsNullOrEmpty ( onecelltag . Item ( " 10 设定全局音量上限 " ) ) Then
Musicdic . Add ( 10 , onecelltag . Item ( " 10 设定全局音量上限 " ) )
'Musicdic.Add(10, onecelltag.Item("10 设定最大音量限制"))
End If
If Not String . IsNullOrEmpty ( onecelltag . Item ( " 12 设定助眠音量 " ) ) Then
Musicdic . Add ( 12 , onecelltag . Item ( " 12 设定助眠音量 " ) )
'Musicdic.Add(10, celltag.Item("10 设定最大音量限制"))
End If
Case Else
Continue For
End Select
If Rdic . ContainsKey ( " PB_STRIP_DEVICE " . ToUpper ) Then
If String . IsNullOrEmpty ( partime ) AndAlso String . IsNullOrEmpty ( partime1 ) Then Continue For
databuff = GetActionDatagather ( DeviceModuleDic , TheDevMode . Name , " PB_STRIP_DEVICE " , 1 , $ " 0,0,9,{partime} " , Rdic )
If Not IsNothing ( databuff ) Then
ncbuf . AddRange ( databuff . ToArray )
End If
'databuff = GetActionDatagather(DeviceModuleDic, TheDevMode.Name, "PB_LINE_CONTROL", 1, $"0,0,10,{partime1}", Rdic)
'If Not IsNothing(databuff) Then
' ncbuf.AddRange(databuff.ToArray)
'End If
End If
If Rdic . ContainsKey ( " PB_LINE_CONTROL " . ToUpper ) Then
If String . IsNullOrEmpty ( partime ) AndAlso String . IsNullOrEmpty ( partime1 ) Then Continue For
databuff = GetActionDatagather ( DeviceModuleDic , TheDevMode . Name , " PB_LINE_CONTROL " , 1 , $ " 0,0,9,{partime} " , Rdic )
If Not IsNothing ( databuff ) Then
ncbuf . AddRange ( databuff . ToArray )
End If
If Not String . IsNullOrEmpty ( partime1 ) Then
databuff = GetActionDatagather ( DeviceModuleDic , TheDevMode . Name , " PB_LINE_CONTROL " , 1 , $ " 0,0,10,{partime1} " , Rdic )
If Not IsNothing ( databuff ) Then
ncbuf . AddRange ( databuff . ToArray )
End If
End If
If Not String . IsNullOrEmpty ( partime2 ) Then
databuff = GetActionDatagather ( DeviceModuleDic , TheDevMode . Name , " PB_LINE_CONTROL " , 2 , $ " 0,0,12,{partime2} " , Rdic )
If Not IsNothing ( databuff ) Then
ncbuf . AddRange ( databuff . ToArray )
End If
End If
If Not String . IsNullOrEmpty ( partime3 ) Then
databuff = GetActionDatagather ( DeviceModuleDic , TheDevMode . Name , " PB_LINE_CONTROL " , 3 , $ " 0,0,11,{partime3} " , Rdic )
If Not IsNothing ( databuff ) Then
ncbuf . AddRange ( databuff . ToArray )
End If
End If
End If
If Rdic . ContainsKey ( " Dimming " . ToUpper ) Then
If String . IsNullOrEmpty ( partime ) AndAlso String . IsNullOrEmpty ( partime1 ) Then Continue For
databuff = GetActionDatagather ( DeviceModuleDic , TheDevMode . Name , " Dimming " , 1 , $ " 0,0,1,{partime} " , Rdic )
If Not IsNothing ( databuff ) Then
ncbuf . AddRange ( databuff . ToArray )
End If
If Not String . IsNullOrEmpty ( partime1 ) Then
Rdic . Clear ( )
Rdic . Add ( " Dimming " . ToUpper , " 48 主机调光百分比值(0-100) " )
databuff = GetActionDatagather ( DeviceModuleDic , TheDevMode . Name , " Dimming " , 1 , $ " 1,2,48,{partime1} " , Rdic )
If Not IsNothing ( databuff ) Then
ncbuf . AddRange ( databuff . ToArray )
End If
End If
If Not String . IsNullOrEmpty ( partime2 ) Then
Rdic . Clear ( )
Rdic . Add ( " Dimming " . ToUpper , " 50 可调下限设置(0-100) " )
databuff = GetActionDatagather ( DeviceModuleDic , TheDevMode . Name , " Dimming " , 2 , $ " 1,2,50,{partime2} " , Rdic )
If Not IsNothing ( databuff ) Then
ncbuf . AddRange ( databuff . ToArray )
End If
End If
If Not String . IsNullOrEmpty ( partime3 ) Then
Rdic . Clear ( )
Rdic . Add ( " Dimming " . ToUpper , " 49 可调上限设置(0-100)) " )
databuff = GetActionDatagather ( DeviceModuleDic , TheDevMode . Name , " Dimming " , 3 , $ " 1,2,49,{partime3} " , Rdic )
If Not IsNothing ( databuff ) Then
ncbuf . AddRange ( databuff . ToArray )
End If
End If
End If
If Musicdic . Count > 0 Then
For Each mnode In Musicdic
databuff = GetActionDatagather ( DeviceModuleDic , TheDevMode . Name , " MUSIC " , 1 , $ " 0,0,0,{mnode.Key },{mnode.Value },0 " , Nothing )
If IsNothing ( databuff ) Then Continue For
ncbuf . AddRange ( databuff . ToArray )
Next
End If
Next
End If
'For Each vindex In Voicement
' If vindex.Desc.DevDescription.Length > 0 AndAlso vindex.Desc.DevDescription.Substring(0, 1).Equals("1") Then
' databuff = GetActionDatagather(DeviceModuleDic, vindex.Name, "MUSIC", 1, "0,0,0,1,0,开启语音识别", Nothing)
' If IsNothing(databuff) Then Continue For
' ncbuf.AddRange(databuff.ToArray)
' End If
'Next
For Each vindex In devTempment
If vindex . Desc . DevDescription . Length > 0 AndAlso vindex . Desc . DevDescription . Substring ( 0 , 1 ) . Equals ( " 1 " ) Then
databuff = GetActionDatagather ( DeviceModuleDic , vindex . Name , " Temp " , 1 , " 0,2,0,1,1,0,0,温控器高级设置,0*秒*0 设置*1 插卡状态同步*1 开*0*0 " , Nothing )
If IsNothing ( databuff ) Then Continue For
ncbuf . AddRange ( databuff . ToArray )
ElseIf vindex . Desc . DevDescription . Length > 0 AndAlso vindex . Desc . DevDescription . Substring ( 0 , 1 ) . Equals ( " 0 " ) Then
databuff = GetActionDatagather ( DeviceModuleDic , vindex . Name , " Temp " , 1 , " 0,2,0,1,2,0,0,温控器高级设置,0*秒*0 设置*1 插卡状态同步*1 开*0*0 " , Nothing )
If IsNothing ( databuff ) Then Continue For
ncbuf . AddRange ( databuff . ToArray )
End If
'If vindex.Desc.DevDescription.Length > 6 AndAlso vindex.Desc.DevDescription.Substring(6, 1).Equals("1") Then
' databuff = GetActionDatagather(DeviceModuleDic, vindex.Name, "Temp", 1, "0,2,0,2,1,0,0,温控器高级设置,0*秒*0 设置*2 风速模式提示音*1 开*0*0", Nothing)
' If IsNothing(databuff) Then Continue For
' ncbuf.AddRange(databuff.ToArray)
'Else
' databuff = GetActionDatagather(DeviceModuleDic, vindex.Name, "Temp", 1, "0,2,0,2,2,0,0,温控器高级设置,0*秒*0 设置*2 风速模式提示音*1 开*0*0", Nothing)
' If IsNothing(databuff) Then Continue For
' ncbuf.AddRange(databuff.ToArray)
'End If
Next
'ElseIf index.Value.Equals("拔卡") Then
ElseIf index . Value . Equals ( " 入住服务 " ) And rowtag . G_DicRow . Item ( TableColNumber . SceneAttribute ) . Substring ( 0 , 1 ) . Equals ( " 2 " ) Then
'For Each vindex In Voicement
' If vindex.Desc.DevDescription.Length > 0 AndAlso vindex.Desc.DevDescription.Substring(0, 1).Equals("1") Then
' databuff = GetActionDatagather(DeviceModuleDic, vindex.Name, "MUSIC", 1, "0,0,0,2,0,关闭语音识别", Nothing)
' If IsNothing(databuff) Then Continue For
' ncbuf.AddRange(databuff.ToArray)
' End If
'Next
For Each vindex In devTempment
If vindex . Desc . DevDescription . Length > 0 AndAlso vindex . Desc . DevDescription . Substring ( 0 , 1 ) . Equals ( " 1 " ) Then
databuff = GetActionDatagather ( DeviceModuleDic , vindex . Name , " Temp " , 1 , " 0,2,0,1,1,0,0,温控器高级设置,0*秒*0 设置*1 插卡状态同步*1 开*0*0 " , Nothing )
If IsNothing ( databuff ) Then Continue For
ncbuf . AddRange ( databuff . ToArray )
ElseIf vindex . Desc . DevDescription . Length > 0 AndAlso vindex . Desc . DevDescription . Substring ( 0 , 1 ) . Equals ( " 0 " ) Then
databuff = GetActionDatagather ( DeviceModuleDic , vindex . Name , " Temp " , 1 , " 0,2,0,1,2,0,0,温控器高级设置,0*秒*0 设置*1 插卡状态同步*1 开*0*0 " , Nothing )
If IsNothing ( databuff ) Then Continue For
ncbuf . AddRange ( databuff . ToArray )
End If
'If vindex.Desc.DevDescription.Length > 6 AndAlso vindex.Desc.DevDescription.Substring(6, 1).Equals("1") Then
' databuff = GetActionDatagather(DeviceModuleDic, vindex.Name, "Temp", 1, "0,2,0,2,1,0,0,温控器高级设置,0*秒*0 设置*2 风速模式提示音*1 开*0*0", Nothing)
' If IsNothing(databuff) Then Continue For
' ncbuf.AddRange(databuff.ToArray)
'Else
' databuff = GetActionDatagather(DeviceModuleDic, vindex.Name, "Temp", 1, "0,2,0,2,2,0,0,温控器高级设置,0*秒*0 设置*2 风速模式提示音*1 开*0*0", Nothing)
' If IsNothing(databuff) Then Continue For
' ncbuf.AddRange(databuff.ToArray)
'End If
Next
End If
If col > TableColNumber . Max - 2 And col < Grid1 . Cols - 1 Then
Integer . TryParse ( Grid1 . Cell ( TableRowNumber . FunctionChildNodeID , col ) . Text , t_col )
Console . WriteLine ( $ " {Grid1.Cell(TableRowNumber.FunctionChildNodeAnother, col).Text}_{Grid1.Cell(TableRowNumber.FunctionChildNodeID, col).Text} " )
DevGroupName = Grid1 . Cell ( TableRowNumber . FunctionName , col - t_col + 1 ) . Text
DevModeName = Grid1 . Cell ( TableRowNumber . DeviceName , Grid1 . Range ( TableRowNumber . DeviceName , col , TableRowNumber . DeviceName , col ) . FirstCol ) . Text
If DevGroupName . ToUpper . Equals ( " MUSIC " ) And Not String . IsNullOrEmpty ( index . Value ) Then
Ismusic = True
Else
databuff = GetActionDatagather ( DeviceModuleDic , DevModeName , DevGroupName , t_col , index . Value , celltag )
If IsNothing ( databuff ) Then Continue For
Scenebuf . AddRange ( databuff . ToArray )
End If
If index . Value . Contains ( " 播放提示音 " ) AndAlso ( index . Value . Contains ( " 2 播放(提示音) " ) OrElse index . Value . Contains ( " 1 静音(提示音) " ) ) Then
Dim strbuf ( ) As String = index . Value . Split ( vbLf )
For Each prnode In strbuf
If prnode . Contains ( " 2 播放(提示音) " ) OrElse prnode . Contains ( " 1 静音(提示音) " ) Then
DevModeName = hostname
DevGroupName = " HOSTSERVICE "
Dim serverbuf ( ) As String = prnode . Split ( " , " )
databuff = GetActionDatagather ( DeviceModuleDic , DevModeName , DevGroupName , 24 , serverbuf ( 2 ) , Nothing , CInt ( serverbuf ( 0 ) ) , CInt ( serverbuf ( 1 ) ) )
Else
DevGroupName = Grid1 . Cell ( TableRowNumber . FunctionName , col - t_col + 1 ) . Text
DevModeName = Grid1 . Cell ( TableRowNumber . DeviceName , Grid1 . Range ( TableRowNumber . DeviceName , col , TableRowNumber . DeviceName , col ) . FirstCol ) . Text
databuff = GetActionDatagather ( DeviceModuleDic , DevModeName , DevGroupName , t_col , prnode , celltag )
End If
If isCheckOut > 0 Then
If rowtag . G_DevModeName . Equals ( DevModeName ) AndAlso prnode . Equals ( " 对应场景 " ) AndAlso DevGroupName . Equals ( " DO " ) AndAlso Grid1 . Column ( col ) . Visible = True Then
CheckOutdeng = t_col
End If
End If
If IsNothing ( databuff ) Then Continue For
If prnode . Equals ( " 对应场景 " ) AndAlso DevGroupName . Equals ( " DO " ) AndAlso rowtag . G_DicRow . Count = 6 AndAlso isCheckOut = 0 Then Continue For
ncbuf . AddRange ( databuff . ToArray )
Next
Continue For
ElseIf index . Value . Contains ( " 华尔思音乐控制 " ) Then
Dim strbuf ( ) As String = index . Value . Split ( vbLf )
Dim Tpar As String = String . Empty
Dim tbuf ( ) As String
For Each prnode In strbuf
If prnode . Contains ( " 2 关机 " ) Then
tbuf = prnode . Split ( " , " )
Tpar = $ " {tbuf(0)},{tbuf(1)},{tbuf(2)},{tbuf(tbuf.Length - 2)} "
databuff = GetActionDatagather ( DeviceModuleDic , DevModeName , DevGroupName , t_col , Tpar , celltag )
ncbuf . AddRange ( databuff . ToArray )
Continue For
ElseIf prnode . Contains ( " 1 开机 " ) Then
tbuf = prnode . Split ( " , " )
Tpar = $ " {tbuf(0)},{tbuf(1)},{tbuf(2)},{tbuf(tbuf.Length - 2)} "
databuff = GetActionDatagather ( DeviceModuleDic , DevModeName , DevGroupName , t_col , Tpar , celltag )
ncbuf . AddRange ( databuff . ToArray )
If prnode . Contains ( " 声道 " ) Then
Tpar = $ " {tbuf(0)},{tbuf(1)},{tbuf(3)},0,{tbuf(tbuf.Length - 2)} "
databuff = GetActionDatagather ( DeviceModuleDic , DevModeName , DevGroupName , t_col , Tpar , celltag )
ncbuf . AddRange ( databuff . ToArray )
End If
If prnode . Contains ( " 音量 " ) Then
Tpar = $ " {tbuf(0)},{tbuf(1)},0,{tbuf(4)},{tbuf(5)},{tbuf(tbuf.Length - 2)} "
databuff = GetActionDatagather ( DeviceModuleDic , DevModeName , DevGroupName , t_col , Tpar , celltag )
ncbuf . AddRange ( databuff . ToArray )
Else
Tpar = $ " {tbuf(0)},{tbuf(1)},0,{tbuf(4)},{tbuf(tbuf.Length - 2)} "
databuff = GetActionDatagather ( DeviceModuleDic , DevModeName , DevGroupName , t_col , Tpar , celltag )
ncbuf . AddRange ( databuff . ToArray )
End If
End If
Next
Continue For
End If
'If index.Value.Contains("设置节能状态*1 开") AndAlso (rowtag.G_DevNodeName.Equals("DI")) Then
' Dim lic As List(Of (String, String))
' If CarbonDevice.ContainsKey(DevModeName) Then
' lic = CarbonDevice.Item(DevModeName)
' lic.Add((rowtag.G_DevModeName, rowtag.G_DevNodeIndex))
' Else
' lic = New List(Of (String, String))
' lic.Add((rowtag.G_DevModeName, rowtag.G_DevNodeIndex))
' CarbonDevice.Add(DevModeName, lic)
' End If
'End If
databuff = GetActionDatagather ( DeviceModuleDic , DevModeName , DevGroupName , t_col , index . Value , celltag )
If isCheckOut > 0 Then
If rowtag . G_DevModeName . Equals ( DevModeName ) AndAlso index . Value . Equals ( " 对应场景 " ) AndAlso DevGroupName . Equals ( " DO " ) AndAlso Grid1 . Column ( col ) . Visible = True Then
CheckOutdeng = t_col
End If
End If
If IsNothing ( databuff ) Then Continue For
If index . Value . Equals ( " 对应场景 " ) AndAlso DevGroupName . Equals ( " DO " ) AndAlso rowtag . G_DicRow . Count = 6 AndAlso isCheckOut = 0 Then Continue For
ncbuf . AddRange ( databuff . ToArray )
End If
Next
'
If Ismusic = True And Scenebuf . Count > 0 Then
Dim li As New List ( Of Byte )
li . Add ( cmd ) '命令参数
li . Add ( 0 ) '设备类型
li . Add ( 0 ) '设备地址
li . AddRange ( BitConverter . GetBytes ( _actionIndex ) ) '动作编号 2
_actionIndex += 1
li . AddRange ( BitConverter . GetBytes ( CShort ( g_devLoop ) ) ) '设备回路 2
g_devLoop += 1
li . AddRange ( BitConverter . GetBytes ( CShort ( 0 ) ) ) '添加事件编号 2
li . AddRange ( clause ) '获取执行模式 8
li . AddRange ( keepParam ) '条件保留32Byte 32
li . Add ( condition ) '获取执行条件编译数据 1
li . AddRange ( aliasbuf ) '32字节, 事件条件别名 2022-06-07 caocong 32
li . AddRange ( sceneNum ) '2字节, 场景编号 2
li . AddRange ( keepBuf ) '30位保留字段 32
Dim valCount As UShort = Scenebuf . Count
li . Add ( valCount ) '获取执行动作数量 2
For Each buf In Scenebuf '32
li . AddRange ( buf ) '获取动作数据
Next
result . Add ( li . ToArray )
End If
'本行动作数据
If ncbuf . Count > 50 Then
MsgBox ( $ " {sceneIndex}场景动作数量超过上限,请通过增加服务将部分动作移动到新服务中。 " )
End If
If ncbuf . Count > 0 Then
Dim li As New List ( Of Byte )
li . Add ( cmd ) '命令参数
li . Add ( devType ) '设备类型
li . Add ( devAddr ) '设备地址
li . AddRange ( BitConverter . GetBytes ( _actionIndex ) ) '动作编号 2
_actionIndex += 1
li . AddRange ( devLoop ) '设备回路 2
li . AddRange ( eventNum ) '添加事件编号 2
li . AddRange ( clause ) '获取执行模式 8
li . AddRange ( keepParam ) '条件保留32Byte 32
li . Add ( condition ) '获取执行条件编译数据 1
li . AddRange ( aliasbuf ) '32字节, 事件条件别名 2022-06-07 caocong 32
Dim valCount As UShort
If Ismusic = True Then
valCount = sceneIndex + 30000
Else
valCount = sceneIndex
End If
li . AddRange ( BitConverter . GetBytes ( valCount ) ) '2字节, 场景编号 2
li . AddRange ( keepBuf ) '30位保留字段 32
valCount = CUShort ( ncbuf . Count )
li . Add ( valCount ) '获取执行动作数量 2
For Each buf In ncbuf '32
li . AddRange ( buf ) '获取动作数据
Next
'40901001
'40902001
'21 1 1 0 19 24 0 2
'3 0 1 0 14 0 0 1
If isCheckOut > 0 Then '判断是否需添加服务
CheckOutDic = CheckOutKey ( isCheckOut , rowtag . G_DevNodeIndex , CheckOutdeng , li , devAddr )
For Each index In CheckOutDic
result . Add ( index . Value . ToArray )
Next
Else
li = PowerSupplyService ( rowtag , strEventNum , li , DeviceModuleDic )
result . Add ( li . ToArray )
End If
' Console.WriteLine($"UDP收到的数据: {ByteToString(li.ToArray)}")
End If
'调用场景
For Each blian In multiplebuf
Dim li As New List ( Of Byte )
li . Add ( cmd ) '命令参数
li . Add ( blian ( 0 ) ( 0 ) ) '设备类型
li . Add ( blian ( 1 ) ( 0 ) ) '设备地址
li . AddRange ( BitConverter . GetBytes ( _actionIndex ) ) '动作编号 2
_actionIndex += 1
li . AddRange ( blian ( 2 ) ) '设备回路 2
li . AddRange ( eventNum ) '添加事件编号 2
li . AddRange ( clause ) '获取执行模式 8
li . AddRange ( keepParam ) '条件保留32Byte 32
li . Add ( condition ) '获取执行条件编译数据 1
li . AddRange ( aliasbuf ) '32字节, 事件条件别名 2022-06-07 caocong 32
li . AddRange ( blian ( 3 ) ) '2字节, 场景编号 2
li . AddRange ( keepBuf ) '30位保留字段 32
Dim valCount As UShort = ncbuf . Count
li . Add ( valCount ) '获取执行动作数量 2
For Each buf In ncbuf '32
li . AddRange ( buf ) '获取动作数据
Next
result . Add ( li . ToArray )
Next
Else
Continue For
End If
Next
'If CarbonDevice.Count > 0 Then
' For Each decindex In CarbonDevice
' For i = 1 To 2
' Dim li = Carbon_DeviceObject(_SceneID, DeviceModuleDic, decindex.Key, i, decindex.Value)
' If IsNothing(li) OrElse li.Count = 0 Then Continue For
' result.AddRange(li.ToArray)
' Next
' Next
'End If
Return result
End Function
Public Function PowerSupplyService ( rowtag As TableRowTag , strEventNum As UShort , li As List ( Of Byte ) , DeviceModuleDic As Dictionary ( Of String , DeviceModel ) ) As List ( Of Byte )
'判断是否是入住服务
Console . WriteLine ( rowtag . G_DevNodeName . ToUpper . Equals ( " HOSTSERVICE " ) )
If rowtag . G_DevNodeName . ToUpper . Equals ( " HOSTSERVICE " ) AndAlso rowtag . G_DevNodeIndex = 1 Then
Dim DevDescription As String = String . Empty
Dim addr As Integer = 0
For Each index In DeviceModuleDic
For Each node In index . Value . Nodes
If node . DEV_TYPE_DATA . Equals ( " 19 " ) Then
DevDescription = index . Value . Desc . DevDescription
addr = GetActionDeviceAddr ( DeviceModuleDic , index . Key , " " )
End If
Next
Next
If Not String . IsNullOrEmpty ( DevDescription ) Then
Dim actionlen As Integer = 116
Dim buf ( ) As String = DevDescription . Split ( " , " )
Select Case strEventNum
Case 1
If buf ( 0 ) . Equals ( " 1 " ) Then
li ( actionlen ) = li ( actionlen ) + 1
li . AddRange ( { 21 , addr , 1 , 0 , 16 , 0 , 0 , 1 } )
End If
If buf ( 3 ) . Equals ( " 1 " ) Then
li ( actionlen ) = li ( actionlen ) + 1
li . AddRange ( { 21 , addr , 1 , 0 , 192 , 0 , 10 , 2 } )
End If
' GetActionDatagather()
Case 2
If buf ( 0 ) . Equals ( " 1 " ) Then
li ( actionlen ) = li ( actionlen ) + 1
li . AddRange ( { 21 , addr , 1 , 0 , 32 , 0 , 10 , 1 } )
End If
Case Else
End Select
End If
End If
Return li
End Function
Public Function CheckOutKey ( isCheckOut As Integer , Diloop As Integer , devloop As Integer , li As List ( Of Byte ) , addr As Integer ) As Dictionary ( Of String , List ( Of Byte ) )
If devloop = 0 Then
devloop = Diloop
End If
Dim actionlen As Integer = 116
Dim resulrdic As New Dictionary ( Of String , List ( Of Byte ) )
Select Case isCheckOut '"7 清理", "8 勿扰", "9 稍后", "10 退房"
Case " 13 "
'li(actionlen) = li(actionlen) + 1
'li.AddRange({4, 0, 3, 0, 1, 0, 0, 1})
'resulrdic.Add("1", li)
Dim index As Integer
Dim actionlencun As Integer = li ( actionlen ) - 1
For i = 0 To actionlencun
index = ( actionlencun - i ) * 8 + actionlen
If li ( index + 1 ) = 6 AndAlso li ( index + 2 ) = addr AndAlso li ( index + 3 ) = devloop AndAlso li ( index + 4 ) = 0 AndAlso
li ( index + 5 ) = 3 AndAlso li ( index + 6 ) = 0 AndAlso li ( index + 7 ) = 0 AndAlso li ( index + 8 ) = 1 Then
li ( actionlen ) = li ( actionlen ) - 1
li . RemoveAt ( index + 8 )
li . RemoveAt ( index + 7 )
li . RemoveAt ( index + 6 )
li . RemoveAt ( index + 5 )
li . RemoveAt ( index + 4 )
li . RemoveAt ( index + 3 )
li . RemoveAt ( index + 2 )
li . RemoveAt ( index + 1 )
End If
Next
Dim li1 ( li . Count - 1 ) , li2 ( actionlen ) As Byte
Dim arrli1 , arrli2 As List ( Of Byte )
arrli1 = New List ( Of Byte )
arrli2 = New List ( Of Byte )
Array . Copy ( li . ToArray , li2 , actionlen )
'li2(actionlen) = 0
Array . Copy ( li . ToArray , li1 , li . Count - 1 )
Dim clause ( ) As Byte = GetConditionDataUnderConditionGroup ( " 1224996759550300160 " )
Dim libufb ( ) As Byte = li . ToArray
Array . Copy ( clause , 0 , libufb , 9 , 8 )
li . Clear ( )
li . AddRange ( libufb )
li ( 3 ) = 1
li ( actionlen ) = li ( actionlen ) + 4
li . AddRange ( { 4 , 0 , 11 , 0 , 1 , 0 , 0 , 1 } )
li . AddRange ( { 4 , 0 , 11 , 0 , 2 , 0 , 10 , 2 } )
li . AddRange ( { 21 , 1 , 1 , 0 , 19 , 167 , 0 , 1 } )
Dim loopBuf ( ) As Byte = BitConverter . GetBytes ( CShort ( devloop ) )
li . AddRange ( { 6 , addr , devloop , 0 , 14 , 0 , 1 , 2 } )
resulrdic . Add ( " 1 " , li )
clause = GetConditionDataUnderConditionGroup ( " 1224996725190561792 " )
Array . Copy ( clause , 0 , li1 , 9 , 8 )
arrli1 . Clear ( )
arrli1 . AddRange ( li1 )
arrli1 ( 3 ) = 2
arrli1 ( actionlen ) = arrli1 ( actionlen ) + 4
arrli1 . AddRange ( { 4 , 0 , 3 , 0 , 1 , 0 , 0 , 1 } )
arrli1 . AddRange ( { 4 , 0 , 11 , 0 , 1 , 0 , 0 , 1 } )
arrli1 . AddRange ( { 21 , 1 , 1 , 0 , 19 , 168 , 0 , 2 } )
' arrli1.AddRange({6, addr, devloop, 0, 14, 0, 1, 2})
arrli1 . AddRange ( { 6 , addr , devloop , 0 , 3 , 0 , 0 , 1 } )
resulrdic . Add ( " 2 " , arrli1 )
clause = GetConditionDataUnderConditionGroup ( " 1224996690830821376 " )
Array . Copy ( clause , 0 , li2 , 9 , 8 )
arrli2 . Clear ( )
arrli2 . AddRange ( li2 )
arrli2 ( 3 ) = 3
arrli2 ( actionlen ) = arrli2 ( actionlen ) + 3
arrli2 . AddRange ( { 4 , 0 , 3 , 0 , 2 , 0 , 0 , 1 } )
arrli2 . AddRange ( { 4 , 0 , 11 , 0 , 2 , 0 , 0 , 1 } )
arrli2 . AddRange ( { 21 , 1 , 1 , 0 , 19 , 169 , 0 , 2 } )
resulrdic . Add ( " 3 " , arrli2 )
Case " 8 "
li ( actionlen ) = li ( actionlen ) + 1
li . AddRange ( { 4 , 0 , 2 , 0 , 1 , 0 , 0 , 1 } )
resulrdic . Add ( " 1 " , li )
Case " 7 "
li ( actionlen ) = li ( actionlen ) + 1
li . AddRange ( { 4 , 0 , 3 , 0 , 1 , 0 , 0 , 1 } )
resulrdic . Add ( " 1 " , li )
Case " 9 "
li ( actionlen ) = li ( actionlen ) + 1
li . AddRange ( { 4 , 0 , 7 , 0 , 1 , 0 , 0 , 1 } )
resulrdic . Add ( " 1 " , li )
Case " 10 "
Dim index As Integer
Dim actionlencun As Integer = li ( actionlen ) - 1
For i = 0 To actionlencun
index = ( actionlencun - i ) * 8 + actionlen
If li ( index + 1 ) = 6 AndAlso li ( index + 2 ) = addr AndAlso li ( index + 3 ) = devloop AndAlso li ( index + 4 ) = 0 AndAlso
li ( index + 5 ) = 3 AndAlso li ( index + 6 ) = 0 AndAlso li ( index + 7 ) = 0 AndAlso li ( index + 8 ) = 1 Then
li ( actionlen ) = li ( actionlen ) - 1
li . RemoveAt ( index + 8 )
li . RemoveAt ( index + 7 )
li . RemoveAt ( index + 6 )
li . RemoveAt ( index + 5 )
li . RemoveAt ( index + 4 )
li . RemoveAt ( index + 3 )
li . RemoveAt ( index + 2 )
li . RemoveAt ( index + 1 )
End If
Next
Dim li1 ( li . Count - 1 ) , li2 ( li . Count - 1 ) As Byte
Dim arrli1 , arrli2 As List ( Of Byte )
arrli1 = New List ( Of Byte )
arrli2 = New List ( Of Byte )
Array . Copy ( li . ToArray , li2 , li . Count - 1 )
Array . Copy ( li . ToArray , li1 , li . Count - 1 )
Dim clause ( ) As Byte = GetConditionDataUnderConditionGroup ( " 1224996691906658304 " )
Dim libufb ( ) As Byte = li . ToArray
Array . Copy ( clause , 0 , libufb , 9 , 8 )
li . Clear ( )
li . AddRange ( libufb )
li ( 3 ) = 1
li ( actionlen ) = li ( actionlen ) + 4
li . AddRange ( { 4 , 0 , 9 , 0 , 1 , 0 , 0 , 1 } )
li . AddRange ( { 4 , 0 , 9 , 0 , 2 , 0 , 10 , 2 } )
li . AddRange ( { 21 , 1 , 1 , 0 , 19 , 24 , 0 , 1 } )
Dim loopBuf ( ) As Byte = BitConverter . GetBytes ( CShort ( devloop ) )
li . AddRange ( { 6 , addr , devloop , 0 , 14 , 0 , 1 , 2 } )
resulrdic . Add ( " 1 " , li )
clause = GetConditionDataUnderConditionGroup ( " 1224996691369787392 " )
Array . Copy ( clause , 0 , li1 , 9 , 8 )
arrli1 . Clear ( )
arrli1 . AddRange ( li1 )
arrli1 ( 3 ) = 2
arrli1 ( actionlen ) = arrli1 ( actionlen ) + 3
arrli1 . AddRange ( { 4 , 0 , 6 , 0 , 1 , 0 , 0 , 1 } )
arrli1 . AddRange ( { 21 , 1 , 1 , 0 , 19 , 18 , 0 , 2 } )
' arrli1.AddRange({6, addr, devloop, 0, 14, 0, 1, 2})
arrli1 . AddRange ( { 6 , addr , devloop , 0 , 3 , 0 , 0 , 1 } )
resulrdic . Add ( " 2 " , arrli1 )
clause = GetConditionDataUnderConditionGroup ( " 1224996690831867904 " )
Array . Copy ( clause , 0 , li2 , 9 , 8 )
arrli2 . Clear ( )
arrli2 . AddRange ( li2 )
arrli2 ( 3 ) = 3
arrli2 ( actionlen ) = arrli2 ( actionlen ) + 3
arrli2 . AddRange ( { 4 , 0 , 6 , 0 , 2 , 0 , 0 , 1 } )
arrli2 . AddRange ( { 21 , 1 , 1 , 0 , 19 , 19 , 0 , 2 } )
arrli2 . AddRange ( { 6 , addr , devloop , 0 , 2 , 0 , 0 , 1 } )
resulrdic . Add ( " 3 " , arrli2 )
'40901001
'40902001
'21 1 1 0 19 24 0 2
'3 0 1 0 14 0 0 1
Case Else
Return resulrdic
End Select
Return resulrdic
End Function
Public Function ParallelScenario ( number As String , ByRef DeviceModuleDic As Dictionary ( Of String , DeviceModel ) , SwitchConfig As List ( Of TableRowTag ) ) As List ( Of Byte ( ) )
Dim li As New List ( Of Byte ( ) )
'获取行号
Dim Nr As Integer = 0
For r = 7 To _grd . Rows - 1
If _grd . Cell ( r , 3 ) . Text . Equals ( number ) Then
Nr = r
Exit For
End If
Next
If Nr < 7 Then Return li
'模型的设备类型
Dim rowtag As TableRowTag = SwitchConfig . Item ( Nr - TableRowNumber . Max )
'Console.WriteLine("ParallelScenario 3123")
Dim devType As Byte = GetActionDeviceType ( DeviceModuleDic , rowtag . G_DevModeName , rowtag . G_DevNodeName )
li . Add ( { devType } )
'模型的拨码地址
Dim devAddr As Byte = GetActionDeviceAddr ( DeviceModuleDic , rowtag . G_DevModeName , rowtag . G_DevNodeName )
li . Add ( { devAddr } )
'回路地址
Dim devLoop ( ) As Byte = BitConverter . GetBytes ( CShort ( rowtag . G_DevNodeIndex ) )
li . Add ( devLoop )
'场景编号
Dim sceneIndex As UShort = CUShort ( rowtag . G_DicRow . Item ( TableColNumber . SceneID ) )
Dim sceneNum ( ) As Byte = BitConverter . GetBytes ( sceneIndex )
li . Add ( sceneNum )
Return li
End Function
Public Function AdditionalFeedbackLamp ( number As String , ByRef DeviceModuleDic As Dictionary ( Of String , DeviceModel ) , celltag As Dictionary ( Of String , String ) ) As List ( Of Byte ( ) )
Dim li As New List ( Of Byte ( ) )
'获取行号
Dim Nr As Integer
For r = 7 To _grd . Rows - 1
Console . WriteLine ( _grd . Cell ( r , 3 ) . Text )
If _grd . Cell ( r , 3 ) . Text . Equals ( number ) Then
Nr = r
Exit For
End If
Next
If Nr = 0 Then Return Nothing
'获取设备名
Dim devname As String = GetgrdRange ( Nr , 1 , tabRange . devname )
'获取设备名对应反馈灯列
Dim tabledev As CtabRange = GetCoLDevNametabRange ( devname , TableRowNumber . DeviceName )
tabledev = GetCoLDevNametabRange ( " DO " , TableRowNumber . FunctionName , tabledev . fc )
'行遍历反馈灯列动作
For col = tabledev . fc To tabledev . lc
If String . IsNullOrEmpty ( _grd . Cell ( Nr , col ) . Text ) Then
Continue For
Else
Dim databuff = GetActionDatagather ( DeviceModuleDic , devname , " DO " , _grd . Cell ( TableRowNumber . FunctionChildNodeID , col ) . Text , _grd . Cell ( Nr , col ) . Text , celltag )
li . AddRange ( databuff . ToArray )
End If
Next
Return li
End Function
Private Function TempDeviceObject ( ByRef Eventnumber As Integer , DeviceModuleDic As Dictionary ( Of String , DeviceModel ) , DevName As String , DevNodeName As String ) As List ( Of Byte ( ) )
'返回变量
Dim result As New List ( Of Byte ( ) )
Dim ncbuf As New List ( Of Byte ( ) )
Dim bytedic As New Dictionary ( Of Integer , List ( Of Byte ( ) ) )
'编译固定参书
Dim cmd As Byte = & H4
'模型的设备类型
'Console.WriteLine("TempDeviceObject 3180")
Dim devType As Byte = GetActionDeviceType ( DeviceModuleDic , DevName , DevNodeName )
'模型的拨码地址
Dim devAddr As Byte = GetActionDeviceAddr ( DeviceModuleDic , DevName , DevNodeName )
'回路地址
Dim devLoop ( ) As Byte = BitConverter . GetBytes ( CShort ( 1 ) )
'获取场景属性
'Dim Exbuf() As String = rowtag.G_DicRow.Item(TableColNumber.SceneAttribute).Split(",")
'事件编号
Dim strEventNum As UShort = 1
UShort . TryParse ( 1 , strEventNum )
Dim eventNum ( ) As Byte = BitConverter . GetBytes ( strEventNum )
'执行条件编译数据
Dim clause ( ) As Byte = GetConditionDataUnderConditionGroup ( 1152921504606846976 )
'取执行模式
Dim condition As Byte = GetExecModeDataUnderCondtion ( 1 )
'事件条件别名
Dim aliasbuf ( 31 ) As Byte
'场景编号
Dim sceneIndex As UShort
Dim sceneNum ( ) As Byte
'30位保留字段
Dim keepBuf ( 31 ) As Byte
'保留字段(32字节) -> 2022-05-28 V3.1 32bytes
Dim keepParam ( 31 ) As Byte
Dim Dev As DeviceModel = DeviceModuleDic . Item ( DevName )
'Dim Startname() As String = Dev.Desc.ProtocolData.Split(",")
Dim dic As Dictionary ( Of String , String ) = JsonConvert . DeserializeObject ( Of Dictionary ( Of String , String ) ) ( Dev . Desc . ProtocolData )
If Not AddPeripherals . CheckWhetherTheKeyExists ( AddPeripherals . Temproweven . 红外转发 , 1 , dic ) AndAlso
Not AddPeripherals . CheckWhetherTheKeyExists ( AddPeripherals . Temproweven . 风低 , 3 , dic ) AndAlso
Not AddPeripherals . CheckWhetherTheKeyExists ( AddPeripherals . Temproweven . 冷阈开 , 1 , dic ) AndAlso
Not AddPeripherals . CheckWhetherTheKeyExists2 ( dic ) AndAlso
Not AddPeripherals . CheckWhetherTheKeyExists ( AddPeripherals . Temproweven . 互锁 , 1 , dic ) Then
MsgBox ( $ " 无法识别温控类型,编译失败!! " )
Return Nothing
End If
'判断所关联回路的回路设备存在
For Each index In dic
If String . IsNullOrEmpty ( index . Value . Trim ) Then Continue For
Dim Obuf ( ) As String = index . Value . Trim . Split ( " * " ) '开
If Not DeviceModuleDic . ContainsKey ( Obuf ( 0 ) ) Then
MsgBox ( $ " 设备:{DevName}{vbCrLf }事件:{index.Key }{vbCrLf } 关联继电器回路:{index.Value}{vbCrLf }未找到,编译失败!! " )
Return Nothing
End If
Next
Dim temptype As Integer = - 1
' 判断是否是氟机 是则直接组包
If AddPeripherals . CheckWhetherTheKeyExists ( AddPeripherals . Temproweven . 红外转发 , 1 , dic ) AndAlso Not AddPeripherals . CheckWhetherTheKeyExists ( AddPeripherals . Temproweven . 风低 , 3 , dic ) Then
temptype = 0
Else '不是氟机
If AddPeripherals . CheckWhetherTheKeyExists ( AddPeripherals . Temproweven . 冷阈开 , 4 , dic ) Then '双阈三线
temptype = 4
ElseIf AddPeripherals . CheckWhetherTheKeyExists ( AddPeripherals . Temproweven . 冷阈开 , 1 , dic ) AndAlso
AddPeripherals . CheckWhetherTheKeyExists ( AddPeripherals . Temproweven . 热阈开 , 1 , dic ) Then '双阈2线
temptype = 3
ElseIf AddPeripherals . CheckWhetherTheKeyExists ( AddPeripherals . Temproweven . 冷阈开 , 1 , dic ) AndAlso
AddPeripherals . CheckWhetherTheKeyExists ( AddPeripherals . Temproweven . 冷阈关 , 1 , dic ) Then '单阈三线
temptype = 2
ElseIf AddPeripherals . CheckWhetherTheKeyExists ( AddPeripherals . Temproweven . 冷阈开 , 1 , dic ) Then '单阈2线
temptype = 1
ElseIf AddPeripherals . CheckWhetherTheKeyExists2 ( dic ) Then
temptype = 5
ElseIf AddPeripherals . CheckWhetherTheKeyExists ( AddPeripherals . Temproweven . 风低 , 3 , dic ) Then '单阈2线
temptype = 6
ElseIf AddPeripherals . CheckWhetherTheKeyExists ( AddPeripherals . Temproweven . 互锁 , 1 , dic ) Then '单阈2线
temptype = 7
End If
End If
Dim Dbuf ( ) As String
Eventnumber = Eventnumber + 1
For i = 1 To 11
clause = GetConditionDataUnderConditionGroup ( 1152939096792891392 )
sceneIndex = CUShort ( Eventnumber )
sceneNum = BitConverter . GetBytes ( sceneIndex )
ncbuf . Clear ( )
Select Case i
Case 1 '开机
UShort . TryParse ( 32800 , strEventNum )
eventNum = BitConverter . GetBytes ( strEventNum )
Dim checkbuf ( ) As String = Dev . Desc . DevDescription . Split ( " , " )
If checkbuf ( 0 ) . Equals ( " 1 " ) Then
clause = GetConditionDataUnderConditionGroup ( 1152939096792891424 )
End If
Select Case temptype
Case 0
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 红外转发 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , " INFRARED_FORWARD " , Dbuf ( 1 ) , " 0,1,1 " ) )
Case 1
Case 2
Case 3
Case 5
'Continue For
Case 4
Case 6
End Select
If temptype <> 0 AndAlso AddPeripherals . CheckWhetherTheKeyExists ( AddPeripherals . Temproweven . 红外转发 , 1 , dic ) Then
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 红外转发 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , " INFRARED_FORWARD " , Dbuf ( 1 ) , " 0,1,1 " ) )
End If
If AddPeripherals . CheckWhetherTheKeyExists ( AddPeripherals . Temproweven . 互锁 , 1 , dic ) Then
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 互锁 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , " Temp " , Dbuf ( 1 ) , " 0,1,1,1,1,1,16 " ) )
End If
If checkbuf ( 1 ) . Equals ( " 1 " ) Then
'Dbuf = dic.Item([Enum].GetName(GetType(AddPeripherals.Temproweven), AddPeripherals.Temproweven.互锁)).Trim.Split("*")
ncbuf . Add ( GetActionData ( DeviceModuleDic , hostname , " MUSIC " , 1 , " 0,2,3,1,11,0 " ) )
End If
If checkbuf ( 3 ) . Equals ( " 1 " ) Then
ncbuf . Add ( GetActionData ( DeviceModuleDic , DevName , " Temp " , 1 , " 0,2,0,2,1,0,0 " ) )
Else
ncbuf . Add ( GetActionData ( DeviceModuleDic , DevName , " Temp " , 1 , " 0,2,0,2,2,0,0 " ) )
End If
Case 2 '关机
UShort . TryParse ( 32 , strEventNum )
eventNum = BitConverter . GetBytes ( strEventNum )
Dim checkbuf ( ) As String = Dev . Desc . DevDescription . Split ( " , " )
If temptype <> 0 AndAlso AddPeripherals . CheckWhetherTheKeyExists ( AddPeripherals . Temproweven . 红外转发 , 1 , dic ) Then
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 红外转发 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , " INFRARED_FORWARD " , Dbuf ( 1 ) , " 0,1,1 " ) )
End If
Select Case temptype
Case 0
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 红外转发 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , " INFRARED_FORWARD " , Dbuf ( 1 ) , " 0,1,1 " ) )
Case 1
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Case 2
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈关 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
Case 3
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 热阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Case 4
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈关 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 热阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 热阈关 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
Case 6
Case 5
'Continue For
End Select
If AddPeripherals . CheckWhetherTheKeyExists ( AddPeripherals . Temproweven . 风低 , 3 , dic ) Then '单阈2线
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 风低 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 风中 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 风高 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
End If
If AddPeripherals . CheckWhetherTheKeyExists ( AddPeripherals . Temproweven . 互锁 , 1 , dic ) Then
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 互锁 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , " Temp " , Dbuf ( 1 ) , " 0,1,1,1,1,1,16 " ) )
End If
If checkbuf ( 1 ) . Equals ( " 1 " ) Then
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 互锁 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , hostname , " MUSIC " , 1 , " 0,2,3,1,12,0 " ) )
End If
If checkbuf ( 3 ) . Equals ( " 1 " ) Then
ncbuf . Add ( GetActionData ( DeviceModuleDic , DevName , " Temp " , 1 , " 0,2,0,2,1,0,0 " ) )
Else
ncbuf . Add ( GetActionData ( DeviceModuleDic , DevName , " Temp " , 1 , " 0,2,0,2,2,0,0 " ) )
End If
Case 3 '冷阀开
UShort . TryParse ( 1028 , strEventNum )
eventNum = BitConverter . GetBytes ( strEventNum )
Dim checkbuf ( ) As String = Dev . Desc . DevDescription . Split ( " , " )
If checkbuf ( 0 ) . Equals ( " 1 " ) Then
clause = GetConditionDataUnderConditionGroup ( 1152939096792891424 )
End If
Select Case temptype
Case 0
Case 6
Case 1
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
Case 2
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈关 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Case 3
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 热阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Case 4
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈关 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 热阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 热阈关 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
Case 5
Continue For
End Select
Case 4 '冷阀关
UShort . TryParse ( 4 , strEventNum )
eventNum = BitConverter . GetBytes ( strEventNum )
Dim checkbuf ( ) As String = Dev . Desc . DevDescription . Split ( " , " )
If checkbuf ( 0 ) . Equals ( " 1 " ) Then
clause = GetConditionDataUnderConditionGroup ( 1152939096792891424 )
End If
Select Case temptype
Case 0
Case 6
Case 1
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Case 2
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈关 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Case 3
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 热阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Case 4
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈关 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 热阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 热阈关 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
Case 5
Continue For
End Select
Case 5 '热阀开
UShort . TryParse ( 768 , strEventNum )
eventNum = BitConverter . GetBytes ( strEventNum )
Dim checkbuf ( ) As String = Dev . Desc . DevDescription . Split ( " , " )
If checkbuf ( 0 ) . Equals ( " 1 " ) Then
clause = GetConditionDataUnderConditionGroup ( 1152939096792891424 )
End If
Select Case temptype
Case 0
Case 1
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
Case 2
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈关 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Case 3
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 热阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Case 4
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 热阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 热阈关 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈关 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
Case 6
Case 5
Continue For
End Select
Case 6 '热阀关
UShort . TryParse ( 256 , strEventNum )
eventNum = BitConverter . GetBytes ( strEventNum )
Dim checkbuf ( ) As String = Dev . Desc . DevDescription . Split ( " , " )
If checkbuf ( 0 ) . Equals ( " 1 " ) Then
clause = GetConditionDataUnderConditionGroup ( 1152939096792891424 )
End If
Select Case temptype
Case 0
Case 1
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Case 2
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈关 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Case 3
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 热阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Case 4
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 热阈关 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 热阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈开 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 冷阈关 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
Case 6
Case 5
Continue For
End Select
Case 7 '风速停
UShort . TryParse ( 8 , strEventNum )
eventNum = BitConverter . GetBytes ( strEventNum )
Dim checkbuf ( ) As String = Dev . Desc . DevDescription . Split ( " , " )
If checkbuf ( 0 ) . Equals ( " 1 " ) Then
clause = GetConditionDataUnderConditionGroup ( 1152939096792891424 )
End If
Select Case temptype
Case 0
Case 5 , 7
Continue For
Case Else
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 风低 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 风中 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 风高 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
End Select
Case 8 '风速低
UShort . TryParse ( 2056 , strEventNum )
eventNum = BitConverter . GetBytes ( strEventNum )
Dim checkbuf ( ) As String = Dev . Desc . DevDescription . Split ( " , " )
If checkbuf ( 0 ) . Equals ( " 1 " ) Then
clause = GetConditionDataUnderConditionGroup ( 1152939096792891424 )
End If
Select Case temptype
Case 0
Case 5 , 7
Continue For
Case Else
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 风低 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 风中 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 风高 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
End Select
Case 9 '风速中
UShort . TryParse ( 4104 , strEventNum )
eventNum = BitConverter . GetBytes ( strEventNum )
Dim checkbuf ( ) As String = Dev . Desc . DevDescription . Split ( " , " )
If checkbuf ( 0 ) . Equals ( " 1 " ) Then
clause = GetConditionDataUnderConditionGroup ( 1152939096792891424 )
End If
Select Case temptype
Case 0
Case 5 , 7
Continue For
Case Else
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 风低 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 风中 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 风高 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
End Select
Case 10 '风速高
UShort . TryParse ( 6152 , strEventNum )
eventNum = BitConverter . GetBytes ( strEventNum )
Dim checkbuf ( ) As String = Dev . Desc . DevDescription . Split ( " , " )
If checkbuf ( 0 ) . Equals ( " 1 " ) Then
clause = GetConditionDataUnderConditionGroup ( 1152939096792891424 )
End If
Select Case temptype
Case 0
Case 5 , 7
Continue For
Case Else
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 风低 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 风中 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 风高 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
End Select
Case 11 '控制
UShort . TryParse ( 30 , strEventNum )
eventNum = BitConverter . GetBytes ( strEventNum )
Dim checkbuf ( ) As String = Dev . Desc . DevDescription . Split ( " , " )
If checkbuf ( 0 ) . Equals ( " 1 " ) Then
clause = GetConditionDataUnderConditionGroup ( 1152921504606847008 )
End If
Select Case temptype
Case 0
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 红外转发 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , " INFRARED_FORWARD " , Dbuf ( 1 ) , " 0,1,1 " ) )
Case 5
'Continue For
Case Else
End Select
If temptype <> 0 AndAlso AddPeripherals . CheckWhetherTheKeyExists ( AddPeripherals . Temproweven . 红外转发 , 1 , dic ) Then
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 红外转发 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , " INFRARED_FORWARD " , Dbuf ( 1 ) , " 0,1,1 " ) )
End If
If AddPeripherals . CheckWhetherTheKeyExists ( AddPeripherals . Temproweven . 互锁 , 1 , dic ) Then
Dbuf = dic . Item ( [ Enum ] . GetName ( GetType ( AddPeripherals . Temproweven ) , AddPeripherals . Temproweven . 互锁 ) ) . Trim . Split ( " * " )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , " Temp " , Dbuf ( 1 ) , " 0,1,1,1,1,1,16 " ) )
End If
End Select
If ncbuf . Count > 0 Then
Dim li As New List ( Of Byte )
li . Add ( cmd ) '命令参数
li . Add ( devType ) '设备类型
li . Add ( devAddr ) '设备地址
li . AddRange ( BitConverter . GetBytes ( _actionIndex ) ) '动作编号 2
_actionIndex += 1
li . AddRange ( devLoop ) '设备回路 2
li . AddRange ( eventNum ) '添加事件编号 2
li . AddRange ( clause ) '获取执行模式 8
li . AddRange ( keepParam ) '条件保留32Byte 32
li . Add ( condition ) '获取执行条件编译数据 1
li . AddRange ( aliasbuf ) '32字节, 事件条件别名 2022-06-07 caocong 32
li . AddRange ( sceneNum ) '2字节, 场景编号 2
Eventnumber = Eventnumber + 1
li . AddRange ( keepBuf ) '30位保留字段 32
Dim valCount As UShort = ncbuf . Count
li . Add ( valCount ) '获取执行动作数量 2
For Each buf In ncbuf '32
li . AddRange ( buf ) '获取动作数据
Next
result . Add ( li . ToArray )
' Console.WriteLine($"UDP收到的数据: {ByteToString(li.ToArray)}")
End If
Next
Return result
End Function
Public Function Carbon_DeviceObject ( ByRef Eventnumber As Integer , DeviceModuleDic As Dictionary ( Of String , DeviceModel ) , DevName As String , strEventNum As Integer , lic As List ( Of ( String , String ) ) ) As List ( Of Byte ( ) )
Dim result As New List ( Of Byte ( ) )
Dim ncbuf As New List ( Of Byte ( ) )
Dim cmd As Byte = & H4
Dim sceneIndex As UShort
Dim sceneNum ( ) As Byte
sceneIndex = CUShort ( Eventnumber )
sceneNum = BitConverter . GetBytes ( sceneIndex )
'模型的设备类型
'Console.WriteLine("TempDeviceObject 3180")
Dim devType As Byte = GetActionDeviceType ( DeviceModuleDic , DevName , " Carbon_Device " )
'模型的拨码地址
Dim devAddr As Byte = GetActionDeviceAddr ( DeviceModuleDic , DevName , " Carbon_Device " )
'回路地址
Dim devLoop ( ) As Byte = BitConverter . GetBytes ( CShort ( 1 ) )
'获取场景属性
'Dim Exbuf() As String = rowtag.G_DicRow.Item(TableColNumber.SceneAttribute).Split(",")
'事件编号
Dim intEventNum As Short = strEventNum
UShort . TryParse ( strEventNum , intEventNum )
Dim eventNum ( ) As Byte = BitConverter . GetBytes ( intEventNum )
'执行条件编译数据
Dim clause ( ) As Byte = GetConditionDataUnderConditionGroup ( 1152939096792891424 )
'取执行模式
Dim condition As Byte = GetExecModeDataUnderCondtion ( 1 )
'事件条件别名
Dim aliasbuf ( 31 ) As Byte
'场景编号
'30位保留字段
Dim keepBuf ( 31 ) As Byte
'保留字段(32字节) -> 2022-05-28 V3.1 32bytes
Dim keepParam ( 31 ) As Byte
For Each addrlop In lic
If strEventNum = 1 Then
ncbuf . Add ( GetActionData ( DeviceModuleDic , addrlop . Item1 , " DO " , addrlop . Item2 , " 开 " ) )
Else
ncbuf . Add ( GetActionData ( DeviceModuleDic , addrlop . Item1 , " DO " , addrlop . Item2 , " 关 " ) )
End If
Next
If ncbuf . Count > 0 Then
Dim li As New List ( Of Byte )
li . Add ( cmd ) '命令参数
li . Add ( devType ) '设备类型
li . Add ( devAddr ) '设备地址
li . AddRange ( BitConverter . GetBytes ( _actionIndex ) ) '动作编号 2
_actionIndex += 1
li . AddRange ( devLoop ) '设备回路 2
li . AddRange ( eventNum ) '添加事件编号 2 '4
li . AddRange ( clause ) '获取执行模式 8
li . AddRange ( keepParam ) '条件保留32Byte 32
li . Add ( condition ) '获取执行条件编译数据 1
li . AddRange ( aliasbuf ) '32字节, 事件条件别名 2022-06-07 caocong 32
li . AddRange ( sceneNum ) '2字节, 场景编号 2
Eventnumber = Eventnumber + 1
li . AddRange ( keepBuf ) '30位保留字段 32
Dim valCount As UShort = ncbuf . Count
li . Add ( valCount ) '获取执行动作数量 2
For Each buf In ncbuf '32
li . AddRange ( buf ) '获取动作数据
Next
result . Add ( li . ToArray )
' Console.WriteLine($"UDP收到的数据: {ByteToString(li.ToArray)}")
End If
Return result
End Function
Private Function Virtual_CardFillDeviceObject ( ByRef Eventnumber As Integer , DeviceModuleDic As Dictionary ( Of String , DeviceModel ) , DevName As String , DevNodeName As String ) As List ( Of Byte ( ) )
'返回变量
Dim result As New List ( Of Byte ( ) )
Dim ncbuf As New List ( Of Byte ( ) )
'编译固定参书
Dim cmd As Byte = & H4
'模型的设备类型
'Console.WriteLine("CURTAINFillDeviceObject 3615")
Dim devType As Byte = GetActionDeviceType ( DeviceModuleDic , DevName , DevNodeName )
'模型的拨码地址
Dim devAddr As Byte = GetActionDeviceAddr ( DeviceModuleDic , DevName , DevNodeName )
'回路地址
Dim devLoop ( ) As Byte = BitConverter . GetBytes ( CShort ( 1 ) )
'获取场景属性
'Dim Exbuf() As String = rowtag.G_DicRow.Item(TableColNumber.SceneAttribute).Split(",")
'事件编号
Dim strEventNum As UShort = 1
'执行条件编译数据
Dim clause ( ) As Byte = GetConditionDataUnderConditionGroup ( 0 )
'取执行模式
Dim condition As Byte = GetExecModeDataUnderCondtion ( 1 )
'事件条件别名
Dim aliasbuf ( 31 ) As Byte
'场景编号
Dim sceneIndex As UShort
Dim sceneNum ( ) As Byte
'30位保留字段
Dim keepBuf ( 31 ) As Byte
'保留字段(32字节) -> 2022-05-28 V3.1 32bytes
Dim keepParam ( 31 ) As Byte
Dim Dev As DeviceModel = DeviceModuleDic . Item ( DevName )
Eventnumber = Eventnumber + 1
For i = 1 To 2
UShort . TryParse ( i , strEventNum )
Dim eventNum ( ) As Byte = BitConverter . GetBytes ( strEventNum )
sceneIndex = CUShort ( Eventnumber )
sceneNum = BitConverter . GetBytes ( sceneIndex )
ncbuf . Clear ( )
ncbuf . Add ( GetActionData ( DeviceModuleDic , hostname , " HOSTSERVICE " , 1 , i ) )
If ncbuf . Count > 0 Then
Dim li As New List ( Of Byte )
li . Add ( cmd ) '命令参数
li . Add ( devType ) '设备类型
li . Add ( devAddr ) '设备地址
li . AddRange ( BitConverter . GetBytes ( _actionIndex ) ) '动作编号 2
_actionIndex += 1
li . AddRange ( devLoop ) '设备回路 2
li . AddRange ( eventNum ) '添加事件编号 2
li . AddRange ( clause ) '获取执行模式 8
li . AddRange ( keepParam ) '条件保留32Byte 32
li . Add ( condition ) '获取执行条件编译数据 1
li . AddRange ( aliasbuf ) '32字节, 事件条件别名 2022-06-07 caocong 32
li . AddRange ( sceneNum ) '2字节, 场景编号 2
Eventnumber = Eventnumber + 1
li . AddRange ( keepBuf ) '30位保留字段 32
Dim valCount As UShort = ncbuf . Count
li . Add ( valCount ) '获取执行动作数量 2
For Each buf In ncbuf '32
li . AddRange ( buf ) '获取动作数据
Next
result . Add ( li . ToArray )
' Console.WriteLine($"UDP收到的数据: {ByteToString(li.ToArray)}")
End If
Next
Return result
End Function
Private Function DRY_NoCardFillDeviceObject ( ByRef Eventnumber As Integer , DeviceModuleDic As Dictionary ( Of String , DeviceModel ) , DevName As String , DevNodeName As String ) As List ( Of Byte ( ) )
'返回变量
Dim result As New List ( Of Byte ( ) )
Dim ncbuf As New List ( Of Byte ( ) )
'编译固定参书
Dim cmd As Byte = & H4
'模型的设备类型
'Console.WriteLine("CURTAINFillDeviceObject 3615")
Dim devType As Byte = GetActionDeviceType ( DeviceModuleDic , DevName , DevNodeName )
'模型的拨码地址
Dim devAddr As Byte = GetActionDeviceAddr ( DeviceModuleDic , DevName , DevNodeName )
'回路地址
Dim devLoop ( ) As Byte = BitConverter . GetBytes ( CShort ( 1 ) )
'获取场景属性
'Dim Exbuf() As String = rowtag.G_DicRow.Item(TableColNumber.SceneAttribute).Split(",")
'事件编号
Dim strEventNum As UShort = 1
UShort . TryParse ( 1 , strEventNum )
Dim eventNum ( ) As Byte = BitConverter . GetBytes ( strEventNum )
'执行条件编译数据
Dim clause ( ) As Byte = GetConditionDataUnderConditionGroup ( 0 )
'取执行模式
Dim condition As Byte = GetExecModeDataUnderCondtion ( 1 )
'事件条件别名
Dim aliasbuf ( 31 ) As Byte
'场景编号
Dim sceneIndex As UShort
Dim sceneNum ( ) As Byte
'30位保留字段
Dim keepBuf ( 31 ) As Byte
'保留字段(32字节) -> 2022-05-28 V3.1 32bytes
Dim keepParam ( 31 ) As Byte
Dim Dev As DeviceModel = DeviceModuleDic . Item ( DevName )
Eventnumber = Eventnumber + 1
For i = 1 To 1
sceneIndex = CUShort ( Eventnumber )
sceneNum = BitConverter . GetBytes ( sceneIndex )
ncbuf . Clear ( )
ncbuf . Add ( GetActionData ( DeviceModuleDic , hostname , " HOSTSERVICE " , 1 , " 2 " ) )
If ncbuf . Count > 0 Then
Dim li As New List ( Of Byte )
li . Add ( cmd ) '命令参数
li . Add ( devType ) '设备类型
li . Add ( devAddr ) '设备地址
li . AddRange ( BitConverter . GetBytes ( _actionIndex ) ) '动作编号 2
_actionIndex += 1
li . AddRange ( devLoop ) '设备回路 2
li . AddRange ( eventNum ) '添加事件编号 2
li . AddRange ( clause ) '获取执行模式 8
li . AddRange ( keepParam ) '条件保留32Byte 32
li . Add ( condition ) '获取执行条件编译数据 1
li . AddRange ( aliasbuf ) '32字节, 事件条件别名 2022-06-07 caocong 32
li . AddRange ( sceneNum ) '2字节, 场景编号 2
Eventnumber = Eventnumber + 1
li . AddRange ( keepBuf ) '30位保留字段 32
Dim valCount As UShort = ncbuf . Count
li . Add ( valCount ) '获取执行动作数量 2
For Each buf In ncbuf '32
li . AddRange ( buf ) '获取动作数据
Next
result . Add ( li . ToArray )
' Console.WriteLine($"UDP收到的数据: {ByteToString(li.ToArray)}")
End If
Next
Return result
End Function
Private Function Dev_ColorTempFillDeviceObject ( ByRef Eventnumber As Integer , DeviceModuleDic As Dictionary ( Of String , DeviceModel ) , DevName As String , DevNodeName As String ) As List ( Of Byte ( ) )
'返回变量
Dim result As New List ( Of Byte ( ) )
Dim ncbuf As New List ( Of Byte ( ) )
'编译固定参书
Dim cmd As Byte = & HA
Dim devAddr As Byte = GetActionDeviceAddr ( DeviceModuleDic , DevName , DevNodeName )
Dim cvint As Integer = 0
Dim Dev As DeviceModel = DeviceModuleDic . Item ( DevName )
Integer . TryParse ( Dev . Desc . DevDescription , cvint )
Dim li As New List ( Of Byte )
li . Add ( cmd )
li . Add ( devAddr )
li . Add ( cvint )
For Each node In Dev . Nodes
If node . Name . Equals ( " Dev_ColorTemp " ) Then
For i = 1 To cvint
Dim spbuf ( ) As String = Nothing
If Not String . IsNullOrEmpty ( node . Nodes ( i - 1 ) . DefaultAliasName ) Then
spbuf = node . Nodes ( i - 1 ) . DefaultAliasName . Split ( " , " )
spbuf = spbuf ( 1 ) . Split ( " : " )
Dim typem As Integer = 0
Integer . TryParse ( spbuf ( 0 ) , typem )
li . Add ( typem )
Dim vli As List ( Of List ( Of String ) ) = JsonConvert . DeserializeObject ( Of List ( Of List ( Of String ) ) ) ( node . Nodes ( i - 1 ) . Description )
For Each linode In vli
li . Add ( CInt ( linode ( 3 ) ) )
li . Add ( CInt ( linode ( 1 ) ) )
li . Add ( CInt ( linode ( 2 ) ) )
Next
If vli . Count < 5 Then
Dim licount As Integer = ( ( 5 - vli . Count ) * 3 ) - 1
Dim testbuf ( licount ) As Byte
li . AddRange ( testbuf )
End If
Else
Continue For
End If
Next
End If
Next
result . Add ( li . ToArray )
Return result
End Function
Private Function CURTAINFillDeviceObject ( ByRef Eventnumber As Integer , DeviceModuleDic As Dictionary ( Of String , DeviceModel ) , DevName As String , DevNodeName As String ) As List ( Of Byte ( ) )
'返回变量
Dim result As New List ( Of Byte ( ) )
Dim ncbuf As New List ( Of Byte ( ) )
'编译固定参书
Dim cmd As Byte = & H4
'模型的设备类型
Console . WriteLine ( " CURTAINFillDeviceObject 3615 " )
Dim devType As Byte = GetActionDeviceType ( DeviceModuleDic , DevName , DevNodeName )
'模型的拨码地址
Dim devAddr As Byte = GetActionDeviceAddr ( DeviceModuleDic , DevName , DevNodeName )
'回路地址
Dim devLoop ( ) As Byte = BitConverter . GetBytes ( CShort ( 1 ) )
'获取场景属性
'Dim Exbuf() As String = rowtag.G_DicRow.Item(TableColNumber.SceneAttribute).Split(",")
'事件编号
Dim strEventNum As UShort = 1
UShort . TryParse ( 1 , strEventNum )
Dim eventNum ( ) As Byte = BitConverter . GetBytes ( strEventNum )
'执行条件编译数据
Dim clause ( ) As Byte = GetConditionDataUnderConditionGroup ( 0 )
'取执行模式
Dim condition As Byte = GetExecModeDataUnderCondtion ( 1 )
'事件条件别名
Dim aliasbuf ( 31 ) As Byte
'场景编号
Dim sceneIndex As UShort
Dim sceneNum ( ) As Byte
'30位保留字段
Dim keepBuf ( 31 ) As Byte
'保留字段(32字节) -> 2022-05-28 V3.1 32bytes
Dim keepParam ( 31 ) As Byte
Dim Dev As DeviceModel = DeviceModuleDic . Item ( DevName )
Dim Startname ( ) As String = Dev . Desc . ProtocolData . Split ( " , " )
If Startname . Length = 0 Then Return Nothing
If Startname . Length = 1 Then
Dim buf3 ( ) As String = Startname ( 0 ) . Split ( " * " )
If Not DeviceModuleDic . ContainsKey ( buf3 ( 0 ) ) Then
MsgBox ( $ " {DevName} 干接点窗帘485电机回路未找到! ! " )
Return Nothing
End If
Eventnumber = Eventnumber + 1
For i = 1 To 3
sceneIndex = CUShort ( Eventnumber )
sceneNum = BitConverter . GetBytes ( sceneIndex )
ncbuf . Clear ( )
Select Case i
Case 1 '窗帘开
UShort . TryParse ( 1 , strEventNum )
eventNum = BitConverter . GetBytes ( strEventNum )
ncbuf . Add ( GetActionData ( DeviceModuleDic , buf3 ( 0 ) , buf3 ( 2 ) , buf3 ( 1 ) , " 开 " ) )
ncbuf . Add ( GetActionData ( DeviceModuleDic , buf3 ( 0 ) , buf3 ( 2 ) , buf3 ( 1 ) , " 停 " , CInt ( buf3 ( 3 ) ) , 2 ) )
ncbuf . Add ( GetActionData ( DeviceModuleDic , DevName , DevNodeName , 1 , " 0,2,3 " ) )
Case 2
UShort . TryParse ( 2 , strEventNum )
eventNum = BitConverter . GetBytes ( strEventNum )
ncbuf . Add ( GetActionData ( DeviceModuleDic , buf3 ( 0 ) , buf3 ( 2 ) , buf3 ( 1 ) , " 关 " ) )
ncbuf . Add ( GetActionData ( DeviceModuleDic , buf3 ( 0 ) , buf3 ( 2 ) , buf3 ( 1 ) , " 停 " , CInt ( buf3 ( 3 ) ) , 2 ) )
ncbuf . Add ( GetActionData ( DeviceModuleDic , DevName , DevNodeName , 1 , " 0,2,3 " ) )
Case 3
UShort . TryParse ( 6 , strEventNum )
eventNum = BitConverter . GetBytes ( strEventNum )
ncbuf . Add ( GetActionData ( DeviceModuleDic , buf3 ( 0 ) , buf3 ( 2 ) , buf3 ( 1 ) , " 停 " ) )
' ncbuf.Add(GetActionData(DeviceModuleDic, Dbuf(0),Dbuf(2), Dbuf(1), Chr(TableColSwitchKeyDate.TurnDrown).ToString, CInt(Dbuf(2)), 2))
ncbuf . Add ( GetActionData ( DeviceModuleDic , DevName , DevNodeName , 1 , " 0,2,3 " ) )
End Select
If ncbuf . Count > 0 Then
Dim li As New List ( Of Byte )
li . Add ( cmd ) '命令参数
li . Add ( devType ) '设备类型
li . Add ( devAddr ) '设备地址
li . AddRange ( BitConverter . GetBytes ( _actionIndex ) ) '动作编号 2
_actionIndex += 1
li . AddRange ( devLoop ) '设备回路 2
li . AddRange ( eventNum ) '添加事件编号 2
li . AddRange ( clause ) '获取执行模式 8
li . AddRange ( keepParam ) '条件保留32Byte 32
li . Add ( condition ) '获取执行条件编译数据 1
li . AddRange ( aliasbuf ) '32字节, 事件条件别名 2022-06-07 caocong 32
li . AddRange ( sceneNum ) '2字节, 场景编号 2
Eventnumber = Eventnumber + 1
li . AddRange ( keepBuf ) '30位保留字段 32
Dim valCount As UShort = ncbuf . Count
li . Add ( valCount ) '获取执行动作数量 2
For Each buf In ncbuf '32
li . AddRange ( buf ) '获取动作数据
Next
result . Add ( li . ToArray )
' Console.WriteLine($"UDP收到的数据: {ByteToString(li.ToArray)}")
End If
Next
Else
Dim Obuf ( ) As String = Startname ( 0 ) . Split ( " * " ) '开
Dim Dbuf ( ) As String = Startname ( 1 ) . Split ( " * " ) '关
If Not DeviceModuleDic . ContainsKey ( Obuf ( 0 ) ) Then
MsgBox ( $ " {DevName} 干接点窗帘开继电器回路未找到!! " )
Return Nothing
ElseIf Not DeviceModuleDic . ContainsKey ( Dbuf ( 0 ) ) Then
MsgBox ( $ " {DevName} 干接点窗帘关继电器回路未找到!! " )
Return Nothing
End If
Eventnumber = Eventnumber + 1
For i = 1 To 3
sceneIndex = CUShort ( Eventnumber )
sceneNum = BitConverter . GetBytes ( sceneIndex )
ncbuf . Clear ( )
Select Case i
Case 1 '窗帘开
UShort . TryParse ( 1 , strEventNum )
eventNum = BitConverter . GetBytes ( strEventNum )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Obuf ( 0 ) , Obuf ( 2 ) , Obuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Obuf ( 0 ) , Obuf ( 2 ) , Obuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString , CInt ( Obuf ( 3 ) ) , 2 ) )
ncbuf . Add ( GetActionData ( DeviceModuleDic , DevName , DevNodeName , 1 , " 0,2,3 " ) )
Case 2
UShort . TryParse ( 2 , strEventNum )
eventNum = BitConverter . GetBytes ( strEventNum )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Obuf ( 0 ) , Obuf ( 2 ) , Obuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString , CInt ( Dbuf ( 3 ) ) , 2 ) )
ncbuf . Add ( GetActionData ( DeviceModuleDic , DevName , DevNodeName , 1 , " 0,2,3 " ) )
Case 3
UShort . TryParse ( 6 , strEventNum )
eventNum = BitConverter . GetBytes ( strEventNum )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Obuf ( 0 ) , Obuf ( 2 ) , Obuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Dbuf ( 0 ) , Dbuf ( 2 ) , Dbuf ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
' ncbuf.Add(GetActionData(DeviceModuleDic, Dbuf(0),Dbuf(2), Dbuf(1), Chr(TableColSwitchKeyDate.TurnDrown).ToString, CInt(Dbuf(2)), 2))
ncbuf . Add ( GetActionData ( DeviceModuleDic , DevName , DevNodeName , 1 , " 0,2,3 " ) )
End Select
If ncbuf . Count > 0 Then
Dim li As New List ( Of Byte )
li . Add ( cmd ) '命令参数
li . Add ( devType ) '设备类型
li . Add ( devAddr ) '设备地址
li . AddRange ( BitConverter . GetBytes ( _actionIndex ) ) '动作编号 2
_actionIndex += 1
li . AddRange ( devLoop ) '设备回路 2
li . AddRange ( eventNum ) '添加事件编号 2
li . AddRange ( clause ) '获取执行模式 8
li . AddRange ( keepParam ) '条件保留32Byte 32
li . Add ( condition ) '获取执行条件编译数据 1
li . AddRange ( aliasbuf ) '32字节, 事件条件别名 2022-06-07 caocong 32
li . AddRange ( sceneNum ) '2字节, 场景编号 2
Eventnumber = Eventnumber + 1
li . AddRange ( keepBuf ) '30位保留字段 32
Dim valCount As UShort = ncbuf . Count
li . Add ( valCount ) '获取执行动作数量 2
For Each buf In ncbuf '32
li . AddRange ( buf ) '获取动作数据
Next
result . Add ( li . ToArray )
' Console.WriteLine($"UDP收到的数据: {ByteToString(li.ToArray)}")
End If
Next
End If
Return result
End Function
Private Function Rs485DeviceObject ( Tdevtype As Integer , ByRef Eventnumber As Integer , DeviceModuleDic As Dictionary ( Of String , DeviceModel ) , DevName As String , DevNodeName As String ) As List ( Of Byte ( ) )
'返回变量
Dim result As New List ( Of Byte ( ) )
Dim ncbuf As New List ( Of Byte ( ) )
'编译固定参书
Dim cmd As Byte = & H4
'模型的设备类型
Console . WriteLine ( " Rs485DeviceObject 3729 " )
Dim devType As Byte = GetActionDeviceType ( DeviceModuleDic , DevName , DevNodeName )
'模型的拨码地址
Dim devAddr As Byte = GetActionDeviceAddr ( DeviceModuleDic , DevName , DevNodeName )
'回路地址
Dim devLoop ( ) As Byte = BitConverter . GetBytes ( CShort ( 1 ) )
'获取场景属性
'Dim Exbuf() As String = rowtag.G_DicRow.Item(TableColNumber.SceneAttribute).Split(",")
'事件编号
Dim strEventNum As UShort = 1
UShort . TryParse ( 1 , strEventNum )
Dim eventNum ( ) As Byte = BitConverter . GetBytes ( strEventNum )
'执行条件编译数据
Dim clause ( ) As Byte = GetConditionDataUnderConditionGroup ( 1152921504606846976 )
'取执行模式
Dim condition As Byte = GetExecModeDataUnderCondtion ( 1 )
'事件条件别名
Dim aliasbuf ( 31 ) As Byte
'场景编号
Dim sceneIndex As UShort
Dim sceneNum ( ) As Byte
'30位保留字段
Dim keepBuf ( 31 ) As Byte
'保留字段(32字节) -> 2022-05-28 V3.1 32bytes
Dim keepParam ( 31 ) As Byte
Dim Dev As DeviceModel = DeviceModuleDic . Item ( DevName )
If String . IsNullOrEmpty ( Dev . Desc . ProtocolData ) Then Return Nothing
Dim Startname ( ) As String = Dev . Desc . ProtocolData . Split ( " , " )
If Dev . Desc . ProtocolData . Contains ( " 地暖_阀开 " ) Then
Dim uvdic As Dictionary ( Of String , String ) = JsonConvert . DeserializeObject ( Of Dictionary ( Of String , String ) ) ( Dev . Desc . ProtocolData )
Dim uvlis As New List ( Of String )
Select Case Tdevtype
Case 1
If String . IsNullOrEmpty ( uvdic . Item ( " 地暖_阀开 " ) ) Then Return Nothing
uvlis . Add ( uvdic . Item ( " 地暖_阀开 " ) )
Case 2
If String . IsNullOrEmpty ( uvdic . Item ( " 地暖_阀开 " ) ) And String . IsNullOrEmpty ( uvdic . Item ( " 地暖_阀开 " ) ) And String . IsNullOrEmpty ( uvdic . Item ( " 地暖_阀开 " ) ) Then Return Nothing
uvlis . Add ( uvdic . Item ( " 新风_风速低 " ) )
uvlis . Add ( uvdic . Item ( " 新风_风速中 " ) )
uvlis . Add ( uvdic . Item ( " 新风_风速高 " ) )
End Select
Startname = uvlis . ToArray
End If
Dim Rli As New List ( Of String ( ) )
For i = 0 To Startname . Length - 1
Dim Obuf ( ) As String = Startname ( i ) . Split ( " * " ) '开
If Not DeviceModuleDic . ContainsKey ( Obuf ( 0 ) ) Then
If Tdevtype = 1 Then
MsgBox ( $ " 地暖阀开继电器回路未找到!! " )
Return Nothing
Else
Select Case i
Case 1
MsgBox ( $ " 新风 风速低 继电器回路未找到!! " )
Case 2
MsgBox ( $ " 新风 风速中 继电器回路未找到!! " )
Case 3
MsgBox ( $ " 新风 风速高 继电器回路未找到!! " )
End Select
Return Nothing
End If
Return Nothing
Else
Rli . Add ( Obuf )
End If
Next
Eventnumber = Eventnumber + 1
Dim checkbuf ( ) As String = Dev . Desc . DevDescription . Split ( " , " )
If checkbuf ( 0 ) . Equals ( " 1 " ) Then
clause = GetConditionDataUnderConditionGroup ( 1152921504606847008 )
End If
Select Case Tdevtype
Case 1
For i = 1 To 2
sceneIndex = CUShort ( Eventnumber )
sceneNum = BitConverter . GetBytes ( sceneIndex )
ncbuf . Clear ( )
Select Case i
Case 1
UShort . TryParse ( 256 , strEventNum )
eventNum = BitConverter . GetBytes ( strEventNum )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Rli . Item ( 0 ) ( 0 ) , Rli . Item ( 0 ) ( 2 ) , Rli . Item ( 0 ) ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
Case 2
UShort . TryParse ( 0 , strEventNum )
eventNum = BitConverter . GetBytes ( strEventNum )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Rli . Item ( 0 ) ( 0 ) , Rli . Item ( 0 ) ( 2 ) , Rli . Item ( 0 ) ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
End Select
If ncbuf . Count > 0 Then
Dim li As New List ( Of Byte )
li . Add ( cmd ) '命令参数
li . Add ( devType ) '设备类型
li . Add ( devAddr ) '设备地址
li . AddRange ( BitConverter . GetBytes ( _actionIndex ) ) '动作编号 2
_actionIndex += 1
li . AddRange ( devLoop ) '设备回路 2
li . AddRange ( eventNum ) '添加事件编号 2
li . AddRange ( clause ) '获取执行模式 8
li . AddRange ( keepParam ) '条件保留32Byte 32
li . Add ( condition ) '获取执行条件编译数据 1
li . AddRange ( aliasbuf ) '32字节, 事件条件别名 2022-06-07 caocong 32
li . AddRange ( sceneNum ) '2字节, 场景编号 2
Eventnumber = Eventnumber + 1
li . AddRange ( keepBuf ) '30位保留字段 32
Dim valCount As UShort = ncbuf . Count
li . Add ( valCount ) '获取执行动作数量 2
For Each buf In ncbuf '32
li . AddRange ( buf ) '获取动作数据
Next
result . Add ( li . ToArray )
' Console.WriteLine($"UDP收到的数据: {ByteToString(li.ToArray)}")
End If
Next
Case 2
For i = 1 To 4
sceneIndex = CUShort ( Eventnumber )
sceneNum = BitConverter . GetBytes ( sceneIndex )
ncbuf . Clear ( )
Select Case i
Case 1 '窗帘开
UShort . TryParse ( 0 , strEventNum )
eventNum = BitConverter . GetBytes ( strEventNum )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Rli . Item ( 0 ) ( 0 ) , Rli . Item ( 0 ) ( 2 ) , Rli . Item ( 0 ) ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Rli . Item ( 1 ) ( 0 ) , Rli . Item ( 1 ) ( 2 ) , Rli . Item ( 1 ) ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Rli . Item ( 2 ) ( 0 ) , Rli . Item ( 2 ) ( 2 ) , Rli . Item ( 2 ) ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Case 2
UShort . TryParse ( 769 , strEventNum )
eventNum = BitConverter . GetBytes ( strEventNum )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Rli . Item ( 0 ) ( 0 ) , Rli . Item ( 0 ) ( 2 ) , Rli . Item ( 0 ) ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Rli . Item ( 1 ) ( 0 ) , Rli . Item ( 1 ) ( 2 ) , Rli . Item ( 1 ) ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Rli . Item ( 2 ) ( 0 ) , Rli . Item ( 2 ) ( 2 ) , Rli . Item ( 2 ) ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Case 3
UShort . TryParse ( 513 , strEventNum )
eventNum = BitConverter . GetBytes ( strEventNum )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Rli . Item ( 0 ) ( 0 ) , Rli . Item ( 0 ) ( 2 ) , Rli . Item ( 0 ) ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Rli . Item ( 1 ) ( 0 ) , Rli . Item ( 1 ) ( 2 ) , Rli . Item ( 1 ) ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Rli . Item ( 2 ) ( 0 ) , Rli . Item ( 2 ) ( 2 ) , Rli . Item ( 2 ) ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
Case 4
UShort . TryParse ( 257 , strEventNum )
eventNum = BitConverter . GetBytes ( strEventNum )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Rli . Item ( 0 ) ( 0 ) , Rli . Item ( 0 ) ( 2 ) , Rli . Item ( 0 ) ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Rli . Item ( 1 ) ( 0 ) , Rli . Item ( 1 ) ( 2 ) , Rli . Item ( 1 ) ( 1 ) , Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) )
ncbuf . Add ( GetActionData ( DeviceModuleDic , Rli . Item ( 2 ) ( 0 ) , Rli . Item ( 2 ) ( 2 ) , Rli . Item ( 2 ) ( 1 ) , Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) )
End Select
If ncbuf . Count > 0 Then
Dim li As New List ( Of Byte )
li . Add ( cmd ) '命令参数
li . Add ( devType ) '设备类型
li . Add ( devAddr ) '设备地址
li . AddRange ( BitConverter . GetBytes ( _actionIndex ) ) '动作编号 2
_actionIndex += 1
li . AddRange ( devLoop ) '设备回路 2
li . AddRange ( eventNum ) '添加事件编号 2
li . AddRange ( clause ) '获取执行模式 8
li . AddRange ( keepParam ) '条件保留32Byte 32
li . Add ( condition ) '获取执行条件编译数据 1
li . AddRange ( aliasbuf ) '32字节, 事件条件别名 2022-06-07 caocong 32
li . AddRange ( sceneNum ) '2字节, 场景编号 2
Eventnumber = Eventnumber + 1
li . AddRange ( keepBuf ) '30位保留字段 32
Dim valCount As UShort = ncbuf . Count
li . Add ( valCount ) '获取执行动作数量 2
For Each buf In ncbuf '32
li . AddRange ( buf ) '获取动作数据
Next
result . Add ( li . ToArray )
' Console.WriteLine($"UDP收到的数据: {ByteToString(li.ToArray)}")
End If
Next
End Select
Return result
End Function
Private Function GetActionDeviceType ( DeviceModuleDic As Dictionary ( Of String , DeviceModel ) , DevName As String , DevNodeName As String ) As Byte
Dim Dev As DeviceModel
Dev = DeviceModuleDic . Item ( DevName )
If DevName . Equals ( hostname ) Then
For Each index In Dev . Config
If index . Name . Equals ( $ " {DevNodeName }设备组信息 " ) Then
For Each node In index . Attributes
If node . Name . Equals ( " DeviceType " ) Then
Return CInt ( node . DataDefault )
End If
Next
End If
Next
Else
For Each index In Dev . Nodes
If index . Name . Equals ( $ " {DevNodeName} " ) Then
Return CInt ( index . DEV_TYPE_DATA )
End If
Next
End If
End Function
Private Function GetActionDeviceAddr ( DeviceModuleDic As Dictionary ( Of String , DeviceModel ) , DevName As String , DevNodeName As String ) As Byte
Dim Dev As DeviceModel = DeviceModuleDic . Item ( DevName )
For Each index In Dev . Config
If DevName . Equals ( hostname ) Then
If index . Name . Equals ( $ " {DevNodeName }设备组信息 " ) Then
For Each node In index . Attributes
If node . Name . Equals ( " DeviceAddr " ) Then
Return CInt ( node . DataDefault )
End If
Next
End If
Else
If index . Name . Equals ( $ " 设备存在 " ) Then
For Each node In index . Attributes
If node . Name . Equals ( " 拨码地址 " ) Then
Return CInt ( node . Value )
End If
Next
End If
End If
Next
End Function
Private Function GetConditionDataUnderConditionGroup ( u64 As String ) As Byte ( )
'Dim result As New List(Of Byte)
'For i = 1 To 8
' result.Add(0)
'Next
'If pNode.RowType <> RowNode.RowTypeEnum.DeviceEventAllConditions Then Throw New Exception("转换条件时无效的类型")
'Dim a As New ConditionConverter
'For Each node As RowNode In pNode.Nodes
' Select Case node.Name
' Case " 1 动作输出使能"
' a.动作输出使能 = CInt(GetNodeSelectStringValue(node))
' Case " 2 判断房态"
' a.房态 = CInt(GetNodeSelectStringValue(node))
' Case " 3 控制取电服务"
' a.控制取电服务 = CInt(GetNodeSelectStringValue(node))
' Case " 4 判断取电状态"
' a.取电状态 = CInt(GetNodeSelectStringValue(node))
' Case " 5 判断勿扰状态"
' a.勿扰状态 = CInt(GetNodeSelectStringValue(node))
' Case " 6 判断清理状态"
' a.清理状态 = CInt(GetNodeSelectStringValue(node))
' Case " 7 判断呼叫状态"
' a.呼叫状态 = CInt(GetNodeSelectStringValue(node))
' Case " 8 判断洗衣状态"
' a.洗衣状态 = CInt(GetNodeSelectStringValue(node))
' Case " 9 判断退房状态"
' a.退房状态 = CInt(GetNodeSelectStringValue(node))
' Case "10 判断稍后状态"
' a.稍后状态 = CInt(GetNodeSelectStringValue(node))
' Case "11 判断SOS状态"
' a.SOS状态 = CInt(GetNodeSelectStringValue(node))
' ' Case "12 判断预约待租状态"
' Case "12 判断送餐状态"
' a.预约待租状态 = CInt(GetNodeSelectStringValue(node))
' Case "13 判断开锁状态"
' a.开锁状态 = CInt(GetNodeSelectStringValue(node))
' Case "14 判断行李状态"
' a.行李状态 = CInt(GetNodeSelectStringValue(node))
' Case "15 判断保险箱状态"
' a.保险箱状态 = CInt(GetNodeSelectStringValue(node))
' Case "16 判断门磁状态"
' a.门磁状态 = CInt(GetNodeSelectStringValue(node))
' Case "17 判断提示音状态"
' a.提示音状态 = CInt(GetNodeSelectStringValue(node))
' Case "18 判断背光状态"
' a.背光状态 = CInt(GetNodeSelectStringValue(node))
' Case "19 判断季节状态"
' a.季节状态 = CInt(GetNodeSelectStringValue(node))
' Case "20 判断时间状态"
' a.时间状态 = CInt(GetNodeSelectStringValue(node))
' Case "21 判断起夜状态"
' a.起夜状态 = CInt(GetNodeSelectStringValue(node))
' Case "22 判断锁定状态"
' a.锁定状态 = CInt(GetNodeSelectStringValue(node))
' Case Else
' Throw New Exception($"未知条件属性名:{node.Name}")
' End Select
'Next
'Return a.GetConditionData()
Dim num As UInt64 = 0
UInt64 . TryParse ( u64 , num )
Return BitConverter . GetBytes ( num )
End Function
''' <summary>
''' 从动作行节点获取动作数据
''' </summary>
''' <param name="node"></param>
''' <returns></returns>
Private Function GetActionDatagather ( DeviceModuleDic As Dictionary ( Of String , DeviceModel ) , DevModeName As String , colname As String , DeviceLoop As String , textval As String , tagdic As Dictionary ( Of String , String ) , Optional delaytime As Integer = 0 , Optional unit As Integer = 1 ) As List ( Of Byte ( ) )
' If node.RowType <> RowNode.RowTypeEnum.DeviceEventAction Then Throw New Exception($"行号:{node.RowListIndex},文本:{node.Text}不为动作节点")
If String . IsNullOrEmpty ( textval ) Then Return Nothing
Dim li As New List ( Of Byte ( ) )
Dim strbuf ( ) As String = textval . Split ( vbLf )
For Each Tnode In strbuf
'执行方式,不同设备类型有不同方式
Dim bolicActio As List ( Of Byte ( ) ) = GetSymbolicAction ( colname , Tnode , tagdic )
If IsNothing ( bolicActio ) OrElse bolicActio . Count = 0 Then Return Nothing
For Each liindex In bolicActio
Dim buf ( 7 ) As Byte
'模型的设备类型
'Console.WriteLine("GetActionDatagather 4053")
Dim devType As Byte = GetActionDeviceType ( DeviceModuleDic , DevModeName , colname )
'模型的拨码地址
Dim devAddr As Byte = GetActionDeviceAddr ( DeviceModuleDic , DevModeName , colname )
'设备类型,外接设备设备类型(主机特殊处理)
buf ( 0 ) = devType
'设备地址,选择对象的设备拨码地址(主机特殊处理)
buf ( 1 ) = devAddr
'设备回路,选择对象的回路地址
Dim loopBuf ( ) As Byte = BitConverter . GetBytes ( CShort ( DeviceLoop ) )
Array . Copy ( loopBuf , 0 , buf , 2 , loopBuf . Length )
Dim par ( ) As String = Tnode . Split ( " , " )
If par . Length > 1 Then
Integer . TryParse ( par ( 0 ) , delaytime )
Integer . TryParse ( par ( 1 ) , unit )
End If
buf ( 4 ) = liindex ( 0 ) '执行方式 继电器开关
'执行内容,不同设备类型有不同内容
buf ( 5 ) = liindex ( 1 ) '执行内容
'延时时间,动作执行延时
buf ( 6 ) = delaytime '延时时间
'延时单位,做东执行延时单位
buf ( 7 ) = unit '延时单位
'2022-10-31 Momo 打印动作数据
' Dim tmpStr As String = BitConverter.ToString(buf).Replace("-", " ")
' PrintInfo(" [行号:" & node.RowListIndex & "] - " & "> 动作数据:" & tmpStr)
li . Add ( buf )
Next
Next
Return li
End Function
Private Function GetActionData ( DeviceModuleDic As Dictionary ( Of String , DeviceModel ) , DevModeName As String , colname As String , DeviceLoop As String , textval As String , Optional delaytime As Integer = 0 , Optional unit As Integer = 1 ) As Byte ( )
' If node.RowType <> RowNode.RowTypeEnum.DeviceEventAction Then Throw New Exception($"行号:{node.RowListIndex},文本:{node.Text}不为动作节点")
If String . IsNullOrEmpty ( textval ) Then Return Nothing
Dim bolicActio As List ( Of Byte ( ) ) = GetSymbolicAction ( colname , textval , Nothing )
If IsNothing ( bolicActio ) OrElse bolicActio . Count = 0 Then Return Nothing
Dim buf ( 7 ) As Byte
'模型的设备类型
Dim devType As Byte = GetActionDeviceType ( DeviceModuleDic , DevModeName , colname )
'模型的拨码地址
Dim devAddr As Byte = GetActionDeviceAddr ( DeviceModuleDic , DevModeName , colname )
'设备类型,外接设备设备类型(主机特殊处理)
buf ( 0 ) = devType
'设备地址,选择对象的设备拨码地址(主机特殊处理)
buf ( 1 ) = devAddr
'设备回路,选择对象的回路地址
Dim loopBuf ( ) As Byte = BitConverter . GetBytes ( CShort ( DeviceLoop ) )
Array . Copy ( loopBuf , 0 , buf , 2 , loopBuf . Length )
Dim par ( ) As String = textval . Split ( " , " )
If par . Length > 1 Then
Integer . TryParse ( par ( 0 ) , delaytime )
Integer . TryParse ( par ( 1 ) , unit )
End If
'执行方式,不同设备类型有不同方式
buf ( 4 ) = bolicActio ( 0 ) ( 0 ) '执行方式 继电器开关
'执行内容,不同设备类型有不同内容
buf ( 5 ) = bolicActio ( 0 ) ( 1 ) '执行内容
'延时时间,动作执行延时
buf ( 6 ) = delaytime '延时时间
'延时单位,做东执行延时单位
buf ( 7 ) = unit '延时单位
'2022-10-31 Momo 打印动作数据
' Dim tmpStr As String = BitConverter.ToString(buf).Replace("-", " ")
' PrintInfo(" [行号:" & node.RowListIndex & "] - " & "> 动作数据:" & tmpStr)
Return buf
End Function
Public Function GetSymbolicAction ( modetyupe As String , straction As String , defkey As Dictionary ( Of String , String ) ) As List ( Of Byte ( ) )
Dim result ( 1 ) As Byte
Dim Tresult ( 1 ) As Byte
Dim li As New List ( Of Byte ( ) )
Dim parstr ( ) As String = straction . Split ( " , " )
Dim parCasre As String = String . Empty
If IsNothing ( parstr ) OrElse parstr . Length = 0 Then Return Nothing
Dim strli As New List ( Of String )
strli . AddRange ( parstr )
If strli . Item ( strli . Count - 1 ) . Contains ( " * " ) Then
strli . RemoveAt ( strli . Count - 1 )
parstr = strli . ToArray
End If
Select Case modetyupe
Case " RKEY "
If parstr . Length > 2 Then '高级设置
result ( 0 ) = parstr ( 2 )
If ( parstr . Count - 3 ) > 0 Then result ( 1 ) = parstr ( 3 )
li . Add ( result )
End If
2025-12-25 15:55:38 +08:00
Case " RELAY " , " PB_RELAY_DEVICE " , " LOCK "
2025-12-11 10:06:44 +08:00
If parstr . Length = 1 Then
parCasre = parstr ( 0 ) '快速设置
Select Case parCasre
Case Chr ( TableColSwitchKeyDate . TurnOn ) . ToString
result ( 0 ) = 1
Case Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString
result ( 0 ) = 2
'Case Chr(TableColSwitchKeyDate.OnTodrowm).ToString
' result(0) = 3
'Case Chr(TableColSwitchKeyDate.drowmToOn).ToString
' result(0) = 1
Case Else
Return Nothing
End Select
ElseIf parstr . Length > 2 Then '高级设置
result ( 0 ) = parstr ( 2 )
Else
Return Nothing
End If
li . Add ( result )
Case " Dimming "
Dim strint As Integer = 0
If Not IsNothing ( defkey ) Then
If defkey . ContainsKey ( " Dimming " . ToUpper ) Then
Dim rbuf ( ) As String = defkey . Item ( " Dimming " . ToUpper ) . Split ( " " )
If Not IsNothing ( rbuf ) And not String . IsNullOrEmpty ( rbuf ( 0 ) ) And parstr . Length > 2 Then
Integer . TryParse ( rbuf ( 0 ) , parstr ( 2 ) )
End If
End If
End If
If parstr . Length = 1 Then
Dim dimmval As Integer = 0
If straction . Equals ( Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) Then
straction = 80
ElseIf straction . Equals ( Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) Then
straction = 0
End If
Integer . TryParse ( straction , dimmval )
result ( 1 ) = dimmval
If strint = 0 Then
If dimmval = 0 Then
strint = 2
Else
strint = 1
End If
End If
result ( 0 ) = strint
ElseIf parstr . Length > 2 Then '高级设置
' result(0) = parstr(2)
If ( parstr . Count - 2 ) > 1 Then
result ( 1 ) = parstr ( 3 )
'If strint = 0 Then
' If result(1) = 0 Then
' strint = 2
' Else
' strint = 1
' End If
'End If
result ( 0 ) = parstr ( 2 )
End If
Else
Return Nothing
End If
li . Add ( result )
Case " PB_LINE_CONTROL " , " PB_STRIP_DEVICE " , " PB_LED_DEVICE "
Dim strint As Integer = 0
If Not IsNothing ( defkey ) Then
If defkey . ContainsKey ( " Dimming " . ToUpper ) Then
Dim rbuf ( ) As String = defkey . Item ( " Dimming " . ToUpper ) . Split ( " " )
If Not IsNothing ( rbuf ) Then
Integer . TryParse ( rbuf ( 0 ) , strint )
End If
End If
Select Case strint
Case 7
strint = 30 '主机未支持 2024.5.31
Case 8
strint = 31 '主机未支持 2024.5.31
Case 9
strint = 8
Case 10
strint = 28
Case 11
strint = 29
Case 26
strint = 26
Case 27
strint = 27
Case 28
strint = 32
Case 29
strint = 33
Case Else
strint = 0
End Select
'If defkey.ContainsKey("PB_LINE_CONTROL".ToUpper) Then
' Dim rbuf() As String = defkey.Item("PB_LINE_CONTROL".ToUpper).Split(" ")
' If Not IsNothing(rbuf) Then
' Integer.TryParse(rbuf(0), strint)
' End If
'End If
'If defkey.ContainsKey("PB_STRIP_DEVICE".ToUpper) Then
' Dim rbuf() As String = defkey.Item("PB_STRIP_DEVICE".ToUpper).Split(" ")
' If Not IsNothing(rbuf) Then
' Integer.TryParse(rbuf(0), strint)
' End If
'End If
End If
If parstr . Length = 1 Then
Dim dimmval As Integer = 0
If straction . Equals ( Chr ( TableColSwitchKeyDate . TurnOn ) . ToString ) Then
result ( 1 ) = 1
result ( 0 ) = 17
ElseIf straction . Equals ( Chr ( TableColSwitchKeyDate . TurnDrown ) . ToString ) Then
result ( 1 ) = 2
result ( 0 ) = 17
Else
Integer . TryParse ( straction , dimmval )
result ( 1 ) = dimmval
'If strint = 0 Then
' If dimmval = 0 Then
' strint = 2
' Else
' strint = 1
' End If
'End If
result ( 0 ) = 18
End If
ElseIf parstr . Length > 2 Then '高级设置
' result(0) = parstr(2)
If ( parstr . Count - 2 ) > 1 Then
result ( 1 ) = parstr ( 3 )
'If strint = -1 Then
' If result(1) = 0 Then
' strint = 2
' Else
' strint = 1
' End If
'End If
result ( 0 ) = parstr ( 2 )
End If
Else
Return Nothing
End If
li . Add ( result )
Case " DO " , " LIGHT "
If parstr . Length = 1 Then
parCasre = parstr ( 0 )
Select Case parCasre
Case " 开 "
result ( 0 ) = 1
Case " 关 "
result ( 0 ) = 2
Case " 闪 "
result ( 0 ) = 14
Case " 对应场景 "
result ( 0 ) = 3
Case Else
Return Nothing
End Select
ElseIf parstr . Length > 2 Then
result ( 0 ) = parstr ( 2 )
Else
Return Nothing
End If
li . Add ( result )
Case " Temp "
If parstr . Length = 1 Then
parCasre = parstr ( 0 ) '快速设置
Select Case parCasre
Case " 开26度 "
Dim sw As Integer = 1 '开关状态
Dim mode As Integer = 0 '模式
Dim speed As Integer = 2 '风速
Dim fm As Integer = 1 '阀门
Dim temp As Integer = 26 '温度
result ( 1 ) = fm
result ( 1 ) = result ( 1 ) Or ( speed << 2 )
result ( 1 ) = result ( 1 ) Or ( mode << 4 )
result ( 1 ) = result ( 1 ) Or ( sw << 6 )
result ( 0 ) = temp
Case " 关 "
Dim sw As Integer = 2 '开关状态
Dim mode As Integer = 0 '模式
Dim speed As Integer = 2 '风速
Dim fm As Integer = 1 '阀门
Dim temp As Integer = 26 '温度
result ( 1 ) = fm
result ( 1 ) = result ( 1 ) Or ( speed << 2 )
result ( 1 ) = result ( 1 ) Or ( mode << 4 )
result ( 1 ) = result ( 1 ) Or ( sw << 6 )
result ( 0 ) = temp
Case Else
Return Nothing
End Select
ElseIf parstr . Length > 6 Then '高级设置
Dim sw As Integer = CInt ( parstr ( 2 ) ) '开关状态
Dim mode As Integer = CInt ( parstr ( 3 ) ) '模式
Dim speed As Integer = CInt ( parstr ( 4 ) ) '风速
Dim fm As Integer = CInt ( parstr ( 5 ) ) '阀门
Dim temp As Integer = CInt ( parstr ( 6 ) ) '温度
result ( 1 ) = fm
result ( 1 ) = result ( 1 ) Or ( speed << 2 )
result ( 1 ) = result ( 1 ) Or ( mode << 4 )
result ( 1 ) = result ( 1 ) Or ( sw << 6 )
result ( 0 ) = temp
Else
Return Nothing
End If
li . Add ( result )
Case " CURTAIN " , " DRY_CURTAIN "
If parstr . Length = 1 Then
parCasre = parstr ( 0 )
Select Case parCasre
Case " 开 "
result ( 0 ) = 1
Case " 关 "
result ( 0 ) = 2
Case " 停 "
result ( 0 ) = 6
Case " 互切 "
result ( 0 ) = 4
Case Else
Return Nothing
End Select
ElseIf parstr . Length > 2 Then
result ( 0 ) = parstr ( 2 )
ElseIf parstr . Length > 4 Then
result ( 0 ) = parstr ( 2 )
result ( 1 ) = parstr ( 3 )
Else
Return Nothing
End If
li . Add ( result )
Case " RS485_Curtain "
If parstr . Length = 1 Then
parCasre = parstr ( 0 )
Select Case parCasre
Case " 开 "
result ( 0 ) = 1
Case " 关 "
result ( 0 ) = 2
Case " 停 "
result ( 0 ) = 6
Case " 互切 "
result ( 0 ) = 4
Case Else
Return Nothing
End Select
ElseIf parstr . Length = 4 Then
result ( 0 ) = parstr ( 2 )
ElseIf parstr . Length > 4 Then
result ( 0 ) = parstr ( 2 )
result ( 1 ) = parstr ( 3 )
Else
Return Nothing
End If
li . Add ( result )
Case " HOSTSERVICE "
Dim sw As Integer '开关状态
sw = CInt ( straction )
result ( 0 ) = sw
li . Add ( result )
Case " MUSIC "
'If Not IsNothing(defkey) Then
' If defkey.ContainsKey("MUSIC".ToUpper) Then
' Dim rbuf() As String = defkey.Item("Dimming".ToUpper).Split(" ")
' If Not IsNothing(rbuf) Then
' Integer.TryParse(rbuf(0), strint)
' End If
' End If
'End If
Dim dirIndex As Integer = 0 'node.Params(0).ValueData '文件夹索引
Dim modeStatus As Integer = 0 'node.Params(1).ValueData '播放时场景状态
Dim fileIndex As Integer = 0 'node.Params(2).ValueData '文件索引
If straction . Contains ( " 播放提示音 " ) AndAlso ( straction . Contains ( " 5 音量加 " ) OrElse straction . Contains ( " 6 音量减 " ) ) Then
parstr ( 4 ) = parstr ( 3 )
parstr ( 3 ) = parstr ( 2 )
parstr ( 2 ) = 0
End If
If straction . Contains ( " 播放音乐 " ) AndAlso ( straction . Contains ( " 1 播放 " ) OrElse straction . Contains ( " 2 暂停 " ) ) Then
parstr ( 4 ) = 0
End If
Select Case parstr . Count - 3 '延时和延时单位占了数组两个元素
Case 1
dirIndex = parstr ( 2 )
Case 2
dirIndex = parstr ( 2 ) '文件夹索引
modeStatus = parstr ( 3 ) '播放时场景状态
Case 3
dirIndex = parstr ( 2 ) '文件夹索引
modeStatus = parstr ( 3 ) '播放时场景状态
fileIndex = parstr ( 4 ) '文件索引
Case > 3
dirIndex = parstr ( 2 ) '文件夹索引
modeStatus = parstr ( 3 ) '播放时场景状态
fileIndex = parstr ( 4 ) '文件索引
Case Else
End Select
'2022-05-06 Caocong: 先将变量初始化为0.有可能没有三个参数 ---end
result ( 0 ) = result ( 0 ) Or ( dirIndex << 0 )
result ( 0 ) = result ( 0 ) Or ( modeStatus << 4 )
result ( 1 ) = fileIndex
li . Add ( result )
Case " CLED_FRESHAIR "
If parstr . Length = 1 Then
parCasre = parstr ( 0 )
Select Case parCasre
Case " 开 "
Tresult ( 0 ) = 1
Tresult ( 1 ) = 2
li . Add ( Tresult )
Case " 关 "
result ( 0 ) = 0
result ( 1 ) = 0
li . Add ( result )
End Select
ElseIf parstr . Length > 2 Then '高级设置
result ( 0 ) = parstr ( 2 )
If ( parstr . Count - 3 ) > 1 Then result ( 1 ) = parstr ( 3 )
li . Add ( result )
Else
Return Nothing
End If
Case " CLEDFLOORHEAT "
If parstr . Length = 1 Then
parCasre = parstr ( 0 )
Select Case parCasre
Case " 开26度 "
Tresult ( 0 ) = 1
Tresult ( 1 ) = 26
li . Add ( Tresult )
Case " 关 "
result ( 0 ) = 1
result ( 1 ) = 0
li . Add ( result )
End Select
ElseIf parstr . Length > 2 Then '高级设置
result ( 0 ) = parstr ( 2 )
If ( parstr . Count - 3 ) > 1 Then result ( 1 ) = parstr ( 3 )
li . Add ( result )
Else
Return Nothing
End If
Case " 485FreshAir "
If parstr . Length = 1 Then
parCasre = parstr ( 0 )
Select Case parCasre
Case " 开 "
Tresult ( 0 ) = 1
Tresult ( 1 ) = 1
li . Add ( Tresult )
result ( 0 ) = 4
result ( 1 ) = 2
li . Add ( result )
Case " 关 "
result ( 0 ) = 1
result ( 1 ) = 0
li . Add ( result )
End Select
ElseIf parstr . Length > 2 Then '高级设置
result ( 0 ) = parstr ( 2 )
If ( parstr . Count - 3 ) > 1 Then result ( 1 ) = parstr ( 3 )
li . Add ( result )
Else
Return Nothing
End If
Case " 485FloorHeat " '地暖
If parstr . Length = 1 Then
parCasre = parstr ( 0 )
Select Case parCasre
Case " 开26度 "
Tresult ( 0 ) = 1
Tresult ( 1 ) = 1
li . Add ( Tresult )
result ( 0 ) = 3
result ( 1 ) = 26
li . Add ( result )
Case " 关 "
result ( 0 ) = 1
result ( 1 ) = 0
li . Add ( result )
End Select
ElseIf parstr . Length > 2 Then '高级设置
result ( 0 ) = parstr ( 2 )
If ( parstr . Count - 3 ) > 1 Then result ( 1 ) = parstr ( 3 )
li . Add ( result )
Else
Return Nothing
End If
Case " INFRARED_FORWARD "
If parstr . Length = 1 Then
parCasre = parstr ( 0 )
Select Case parCasre
Case " 开电视 "
result ( 0 ) = 1
result ( 1 ) = 18
Case " 关电视 "
result ( 0 ) = 2
result ( 1 ) = 1
Case " 静音 "
result ( 0 ) = 1
result ( 1 ) = 1
Case " 加音量 "
result ( 0 ) = 1
result ( 1 ) = 3
Case " 减音量 "
result ( 0 ) = 1
result ( 1 ) = 4
Case Else
Return Nothing
End Select
li . Add ( result )
ElseIf parstr . Length > 2 Then '高级设置
result ( 0 ) = parstr ( 2 )
If ( parstr . Count - 3 ) > 1 Then result ( 1 ) = parstr ( 3 )
li . Add ( result )
Else
Return Nothing
End If
Case " DRY_NoCard "
If parstr . Length > 2 Then '高级设置
result ( 0 ) = parstr ( 2 )
If ( parstr . Count - 3 ) > 1 Then result ( 1 ) = parstr ( 3 )
li . Add ( result )
Else
Return Nothing
End If
Case " Dev_ColorTemp " , " Dev_VirtualGlobalSet "
If parstr . Length > 2 Then '高级设置
result ( 0 ) = parstr ( 2 )
If ( parstr . Count - 3 ) > 1 Then result ( 1 ) = parstr ( 3 )
li . Add ( result )
Else
Return Nothing
End If
Case " HOPO_Curtain "
If parstr . Length = 4 Then
result ( 0 ) = parstr ( 2 )
ElseIf parstr . Length > 4 Then
result ( 0 ) = parstr ( 2 )
result ( 1 ) = parstr ( 3 )
Else
Return Nothing
End If
li . Add ( result )
Case " BLEMUSIC "
Dim dirIndex As Integer = 0 'node.Params(0).ValueData '文件夹索引
Dim modeStatus As Integer = 0 'node.Params(1).ValueData '播放时场景状态
Dim fileIndex As Integer = 0 'node.Params(2).ValueData '文件索引
Select Case parstr . Count - 3 '延时和延时单位占了数组两个元素
Case 1
dirIndex = parstr ( 2 )
result ( 0 ) = dirIndex
result ( 1 ) = modeStatus
Case 2
dirIndex = parstr ( 2 ) '文件夹索引
modeStatus = parstr ( 3 ) '播放时场景状态
result ( 0 ) = dirIndex
result ( 1 ) = modeStatus
Case >= 3
dirIndex = parstr ( 2 ) '文件夹索引
modeStatus = parstr ( 3 ) '播放时场景状态
fileIndex = parstr ( 4 ) '文件索引
result ( 0 ) = result ( 0 ) Or ( dirIndex << 0 )
result ( 0 ) = result ( 0 ) Or ( modeStatus << 4 )
result ( 1 ) = fileIndex
Case Else
End Select
'2022-05-06 Caocong: 先将变量初始化为0.有可能没有三个参数 ---end
li . Add ( result )
Case " Carbon_Device " , " Scene_Restore " , " Dev_Energy_Monitor "
Dim dirIndex As Integer = 0 'node.Params(0).ValueData '文件夹索引
Dim modeStatus As Integer = 0 'node.Params(1).ValueData '播放时场景状态
Dim fileIndex As Integer = 0 'node.Params(2).ValueData '文件索引
Select Case parstr . Count - 3 '延时和延时单位占了数组两个元素
Case 1
dirIndex = parstr ( 2 )
result ( 0 ) = dirIndex
result ( 1 ) = modeStatus
Case 2
dirIndex = parstr ( 2 ) '文件夹索引
modeStatus = parstr ( 3 ) '播放时场景状态
result ( 0 ) = dirIndex
result ( 1 ) = modeStatus
Case >= 3
dirIndex = parstr ( 2 ) '文件夹索引
modeStatus = parstr ( 3 ) '播放时场景状态
fileIndex = parstr ( 4 ) '文件索引
result ( 0 ) = dirIndex
result ( 1 ) = result ( 1 ) Or ( fileIndex << 0 )
result ( 1 ) = result ( 1 ) Or ( modeStatus << 4 )
Case Else
End Select
li . Add ( result )
Case " 485MUSIC "
Dim dirIndex As Integer = 0 'node.Params(0).ValueData '文件夹索引
Dim modeStatus As Integer = 0 'node.Params(1).ValueData '播放时场景状态
Dim fileIndex As Integer = 0 'node.Params(2).ValueData '文件索引
Select Case parstr . Count - 3 '延时和延时单位占了数组两个元素
Case 1
dirIndex = parstr ( 2 )
Case 2
dirIndex = parstr ( 2 ) '文件夹索引
modeStatus = parstr ( 3 ) '播放时场景状态
Case >= 3
dirIndex = parstr ( 2 ) '文件夹索引
modeStatus = parstr ( 3 ) '播放时场景状态
fileIndex = parstr ( 4 ) '文件索引
Case Else
End Select
'2022-05-06 Caocong: 先将变量初始化为0.有可能没有三个参数 ---end
result ( 0 ) = result ( 0 ) Or ( dirIndex << 0 )
result ( 0 ) = result ( 0 ) Or ( modeStatus << 4 )
result ( 1 ) = fileIndex
li . Add ( result )
Case Else
Return Nothing
End Select
Return li
End Function
Private Function GetExecModeDataUnderCondtion ( straction As String ) As Byte
Dim result As Integer = 1
Integer . TryParse ( straction , result )
Return result
End Function
Public Function GetdevGroupHread ( devMode As DeviceModel , Addrstr As String ) As Byte ( )
Dim buf = New List ( Of Byte )
'命令参数
Dim cmd As Byte = & H4
Dim devType As Byte
'模型的拨码地址
Dim devAddr As Byte = Addrstr
Dim DevGroupName = $ " DI "
For Each cnode In devMode . Nodes
If cnode . Name . Equals ( DevGroupName ) Then
devType = cnode . DEV_TYPE_DATA
End If
Next
buf . Add ( cmd ) '命令参数
buf . Add ( devType ) '设备类型
buf . Add ( devAddr ) '设备地址
Return buf . ToArray
End Function
Public Function GetActionGroupHread ( devMode As DeviceModel ) As Byte ( )
Dim buf = New List ( Of Byte )
'命令参数
Dim cmd As Byte = & H4
Dim devType As Byte
'模型的拨码地址
Dim devAddr As Byte
Dim DevGroupName = $ " DI设备组信息 "
'模型的设备类型
For Each cnode In devMode . Config
If cnode . Name . Equals ( DevGroupName ) Then
For Each node In cnode . Attributes
Select Case node . Name
Case " DeviceType "
devType = node . DataDefault
Case " DeviceAddr "
devAddr = node . DataDefault
Case Else
Continue For
End Select
Next
End If
Next
buf . Add ( cmd ) '命令参数
buf . Add ( devType ) '设备类型
buf . Add ( devAddr ) '设备地址
Return buf . ToArray
End Function
'' <summary>
'' 填充设备存在
'' </summary>
'' <returns></returns>
Public Voicement As List ( Of DeviceModel )
Public devTempment As List ( Of DeviceModel )
Public Function FillDeviceExistsData ( ByRef DeviceModuleDic As Dictionary ( Of String , DeviceModel ) ) As List ( Of Byte ( ) )
Dim resultDatas As New List ( Of Byte ( ) )
Dim cmd As Byte = & H3
Dim buf As List ( Of Byte )
Dim devmovement As New List ( Of DeviceModel )
Dim Heat485ment As New List ( Of DeviceModel )
Dim Air485ment As New List ( Of DeviceModel )
Dim AirDRYNoCard As New List ( Of DeviceModel )
Dim Dev_ColorTemp As New List ( Of DeviceModel )
Dim Dev_BLEMUSIC As New List ( Of DeviceModel )
Dim VirtualCard As New List ( Of DeviceModel )
Voicement = New List ( Of DeviceModel )
devTempment = New List ( Of DeviceModel )
For Each Fnode In DeviceModuleDic . Values
' 配置RCU模型设备存在数据
If String . IsNullOrEmpty ( Fnode . Desc . DevInterface ) Then
buf = New List ( Of Byte )
buf . Add ( cmd )
Dim tmpBuffer ( ) As Byte = FillRCUModelDeviceExsist ( Fnode )
buf . AddRange ( tmpBuffer )
resultDatas . Add ( buf . ToArray )
'PrintInfo(" 主机模型 编译完成,长度:" & tmpBuffer.Count & " Bytes")
Else
Dim tmpBufferLst As List ( Of Byte ( ) ) = FillExternalModelDeviceExsist ( Fnode , DeviceModuleDic . Values ( 0 ) )
Dim tmpOutData As Byte ( )
For i = 0 To tmpBufferLst . Count - 1
tmpOutData = tmpBufferLst ( i ) . ToArray
resultDatas . Add ( tmpOutData . ToArray )
Next
End If
For Each Ccnode In Fnode . Config
If Not IsNothing ( Ccnode . CFG_Type ) AndAlso Ccnode . CFG_Type . Equals ( " DeviceExists " ) Then
buf = New List ( Of Byte )
Console . WriteLine ( Ccnode . Name )
buf . Add ( cmd )
Dim tmpBuffer ( ) As Byte = FillModeDeviceExsist ( Ccnode , Fnode )
buf . AddRange ( tmpBuffer )
resultDatas . Add ( buf . ToArray )
'PrintInfo(" 设备存在 编译完成,长度:" & tmpBuffer.Count & " Bytes")
End If
Next
For Each Ccnode In Fnode . Nodes
Select Case Ccnode . Name
Case " BLEMUSIC "
Dev_BLEMUSIC . Add ( Fnode )
Case " Dev_ColorTemp "
Dev_ColorTemp . Add ( Fnode )
Case " DRY_NoCard "
AirDRYNoCard . Add ( Fnode )
Case " Temp "
devTempment . Add ( Fnode )
Case " CURTAIN "
devmovement . Add ( Fnode )
Case " 485FreshAir " , " CLED_FRESHAIR "
Air485ment . Add ( Fnode )
Case " 485FloorHeat " , " CLEDFLOORHEAT "
Heat485ment . Add ( Fnode )
Case " 语音 "
Voicement . Add ( Fnode )
Case " Virtual_Card "
' VirtualCard.Add(Fnode)
Case Else
End Select
Next
Next
Dim T_SceneID As Integer = _SceneID
Dim result As List ( Of Byte ( ) )
For Each node In devmovement
result = CURTAINFillDeviceObject ( T_SceneID , DeviceModuleDic , node . Name , " CURTAIN " )
If IsNothing ( result ) Then Continue For
resultDatas . AddRange ( result . ToArray )
Next
For Each node In AirDRYNoCard
result = DRY_NoCardFillDeviceObject ( T_SceneID , DeviceModuleDic , node . Name , " DRY_NoCard " )
If IsNothing ( result ) Then Continue For
resultDatas . AddRange ( result . ToArray )
Next
For Each node In Dev_ColorTemp
result = Dev_ColorTempFillDeviceObject ( T_SceneID , DeviceModuleDic , node . Name , " Dev_ColorTemp " )
If IsNothing ( result ) Then Continue For
resultDatas . AddRange ( result . ToArray )
Next
'For Each node In VirtualCard
' result = Virtual_CardFillDeviceObject(T_SceneID, DeviceModuleDic, node.Name, "Virtual_Card")
' If IsNothing(result) Then Continue For
' resultDatas.AddRange(result.ToArray)
'Next
For Each node In devTempment
result = TempDeviceObject ( T_SceneID , DeviceModuleDic , node . Name , " Temp " )
If IsNothing ( result ) Then Continue For
resultDatas . AddRange ( result . ToArray )
Next
For Each node In Heat485ment
For Each tname In node . Nodes
Select Case tname . Name
Case " 485FloorHeat " , " CLEDFLOORHEAT "
result = Rs485DeviceObject ( 1 , T_SceneID , DeviceModuleDic , node . Name , tname . Name )
If IsNothing ( result ) Then Continue For
resultDatas . AddRange ( result . ToArray )
End Select
Next
Next
For Each node In Air485ment
For Each tname In node . Nodes
Select Case tname . Name
Case " 485FreshAir " , " CLED_FRESHAIR "
result = Rs485DeviceObject ( 2 , T_SceneID , DeviceModuleDic , node . Name , tname . Name )
If IsNothing ( result ) Then Continue For
resultDatas . AddRange ( result . ToArray )
End Select
Next
Next
Return resultDatas
End Function
Public Function VoicementDeviceObject ( ) As List ( Of Byte ( ) )
Dim cmd As Byte = & H5
Dim lst As New List ( Of Byte ( ) )
For Each node In Voicement
For Each Cnode In node . Config
If Cnode . CFG_Type . Equals ( " XiaoBaoCMD " ) Then
For Each cTnode In Cnode . Attributes
'Console.WriteLine($"cTnode.DataRangeValue:{cTnode.DataRangeValue}")
If Not String . IsNullOrEmpty ( cTnode . DataRangeValue ) Then
Dim Data = New List ( Of Byte )
Data . Add ( cmd )
Data . Add ( CInt ( Cnode . CFG_Value ) )
Data . Add ( CInt ( cTnode . DataDefault ) )
Dim buf As String ( ) = cTnode . DataRangeValue . Split ( " * " )
If buf . Length = 2 Then
Dim devType As Byte = 0
Dim devAddr As Byte = 0
Data . Add ( devType )
Data . Add ( devAddr )
Data . AddRange ( BitConverter . GetBytes ( CShort ( buf ( 0 ) ) ) )
lst . Add ( Data . ToArray )
ElseIf buf . Length = 3 Then
If cTnode . DataRangeValue . Contains ( " HOSTSERVICE " ) Then
Dim devType As Byte = GetActionDeviceType ( Dic_Devicemodel , buf ( 0 ) , buf ( 1 ) )
Dim devAddr As Byte = GetActionDeviceAddr ( Dic_Devicemodel , buf ( 0 ) , buf ( 1 ) )
Data . Add ( devType )
Data . Add ( devAddr )
Data . AddRange ( BitConverter . GetBytes ( CShort ( buf ( 2 ) ) ) )
lst . Add ( Data . ToArray )
Else
Dim devType As Byte = GetActionDeviceType ( Dic_Devicemodel , buf ( 0 ) , buf ( 2 ) )
Dim devAddr As Byte = GetActionDeviceAddr ( Dic_Devicemodel , buf ( 0 ) , buf ( 2 ) )
Data . Add ( devType )
Data . Add ( devAddr )
Data . AddRange ( BitConverter . GetBytes ( CShort ( buf ( 1 ) ) ) )
lst . Add ( Data . ToArray )
End If
End If
'Select Case Cnode.Name
' Case "0 场景"
' Dim buf As String() = cTnode.DataRangeValue.Split("*")
' Dim devType As Byte = 0
' Dim devAddr As Byte = 0
' Data.Add(devType)
' Data.Add(devAddr)
' Data.AddRange(BitConverter.GetBytes(CShort(buf(0))))
' Case "1 继电器"
' Dim buf As String() = cTnode.DataRangeValue.Split("*")
' Dim devType As Byte = GetActionDeviceType(Dic_Devicemodel, buf(0), buf(2))
' Dim devAddr As Byte = GetActionDeviceAddr(Dic_Devicemodel, buf(0), buf(2))
' Data.Add(devType)
' Data.Add(devAddr)
' Data.AddRange(BitConverter.GetBytes(CShort(buf(1))))
' Case "4 服务信息"
' Dim buf As String() = cTnode.DataRangeValue.Split("*")
' Dim devType As Byte = GetActionDeviceType(Dic_Devicemodel, buf(0), buf(1))
' Dim devAddr As Byte = GetActionDeviceAddr(Dic_Devicemodel, buf(0), buf(1))
' Data.Add(devType)
' Data.Add(devAddr)
' Data.AddRange(BitConverter.GetBytes(CShort(buf(2))))
' Case "5 窗帘"
' Dim buf As String() = cTnode.DataRangeValue.Split("*")
' Dim devType As Byte = GetActionDeviceType(Dic_Devicemodel, buf(0), buf(2))
' Dim devAddr As Byte = GetActionDeviceAddr(Dic_Devicemodel, buf(0), buf(2))
' Data.Add(devType)
' Data.Add(devAddr)
' Data.AddRange(BitConverter.GetBytes(CShort(buf(1))))
' Case "7 空调"
' Dim buf As String() = cTnode.DataRangeValue.Split("*")
' Dim devType As Byte = GetActionDeviceType(Dic_Devicemodel, buf(0), "Temp")
' Dim devAddr As Byte = GetActionDeviceAddr(Dic_Devicemodel, buf(0), "Temp")
' Data.Add(devType)
' Data.Add(devAddr)
' Data.AddRange(BitConverter.GetBytes(CShort(buf(1))))
' Case "15 电视"
' Dim buf As String() = cTnode.DataRangeValue.Split("*")
' Dim devType As Byte = GetActionDeviceType(Dic_Devicemodel, buf(0), buf(2))
' Dim devAddr As Byte = GetActionDeviceAddr(Dic_Devicemodel, buf(0), buf(2))
' Data.Add(devType)
' Data.Add(devAddr)
' Data.AddRange(BitConverter.GetBytes(CShort(buf(1))))
' Case "16 调光"
' Dim buf As String() = cTnode.DataRangeValue.Split("*")
' Dim devType As Byte = GetActionDeviceType(Dic_Devicemodel, buf(0), buf(2))
' Dim devAddr As Byte = GetActionDeviceAddr(Dic_Devicemodel, buf(0), buf(2))
' Data.Add(devType)
' Data.Add(devAddr)
' Data.AddRange(BitConverter.GetBytes(CShort(buf(1))))
' Case "18 灯带"
' Dim buf As String() = cTnode.DataRangeValue.Split("*")
' Dim devType As Byte = GetActionDeviceType(Dic_Devicemodel, buf(0), buf(2))
' Dim devAddr As Byte = GetActionDeviceAddr(Dic_Devicemodel, buf(0), buf(2))
' Data.Add(devType)
' Data.Add(devAddr)
' Data.AddRange(BitConverter.GetBytes(CShort(buf(1))))
' Case "21 音乐"
'End Select
End If
Next
End If
Next
'result = Rs485DeviceObject(2, T_SceneID, DeviceModuleDic, node.Name, node.Nodes(0).Name)
'If IsNothing(result) Then Continue For
'resultDatas.AddRange(result.ToArray)
Next
Return lst
End Function
''' <summary>
''' 根据RCU模型的设备存在属性组, 配置设备存在数据
''' </summary>
''' <param name="pNode">模型节点</param>
''' <returns></returns>
Private Function FillModeDeviceExsist ( Ccnode As DeviceModelConfigGroup , pNode As DeviceModel ) As Byte ( )
'If pNode.RowType <> RowNode.RowTypeEnum.ModelAttributes_DeviceExists Then Throw New Exception($"行号:{pNode.RowListIndex} 不为设备存在模型属性类型")
Dim buf As New List ( Of Byte )
Dim Cbuf ( 10 ) As Byte
For Each node In Ccnode . Attributes
Select Case node . Name
Case " DeviceType "
Cbuf ( 0 ) = node . DataDefault
Case " DeviceAddr "
Cbuf ( 1 ) = node . DataDefault
Case " DevicePort "
Cbuf ( 2 ) = node . DataRangeValue
Case " DeviceBaud "
Dim baudData ( ) As Byte = BitConverter . GetBytes ( CInt ( node . DataDefault ) )
Cbuf ( 3 ) = baudData ( 0 )
Cbuf ( 4 ) = baudData ( 1 )
Cbuf ( 5 ) = baudData ( 2 )
Cbuf ( 6 ) = baudData ( 3 )
Case " DeviceVer "
Cbuf ( 7 ) = node . DataDefault
Case " DeviceRetryNum "
Cbuf ( 8 ) = node . DataDefault
Case " DeviceRetryTime "
Dim retryTimeData ( ) As Byte = BitConverter . GetBytes ( CShort ( node . DataDefault ) )
Cbuf ( 9 ) = retryTimeData ( 0 )
Cbuf ( 10 ) = retryTimeData ( 1 )
Case Else
Continue For
End Select
Next
buf . AddRange ( Cbuf )
Dim keepParam ( 63 ) As Byte '保留字段(32字节) -> 2022-05-28 V3.1 32bytes->64Bytes
buf . AddRange ( keepParam )
Dim index As Integer = Ccnode . Name . IndexOf ( " 设备组信息 " )
Dim type As String = Ccnode . Name . Substring ( 0 , index )
Dim inputCount , outputCount As UShort
Dim inputSettings As New List ( Of Byte )
Dim outputAliases As New List ( Of Byte )
Dim inputGroupNode As DeviceChildNodeClass = Nothing
Dim outputGroupNode As DeviceChildNodeClass = Nothing
Select Case type '
Case " DI "
inputGroupNode = FindModelDeviceGroupUnderModel ( pNode , " DI " )
Case Else
outputGroupNode = FindModelDeviceGroupUnderModel ( pNode , type )
End Select
If inputGroupNode Is Nothing Then
inputCount = 0
Else
For Each node In inputGroupNode . Nodes
'If node.RowType <> RowNode.RowTypeEnum.DeviceObject Then Continue For
'If node.Compile = False Then Continue For
inputCount += 1
inputSettings . AddRange ( GetDeviceObjectSetting ( pNode . Name , node . DefaultClass ) )
Next
End If
If outputGroupNode Is Nothing Then
outputCount = 0
Else
If not outputGroupNode . DEV_TYPE_DATA . Equals ( " 4 " ) Then
For Each node In outputGroupNode . Nodes
'If node.RowType <> RowNode.RowTypeEnum.DeviceObject Then Continue For
'If node.Compile = False Then Continue For
outputCount += 1
Dim aliasData ( ) As Byte
'Momo 2022-05-03 增加DeviceAlias非空判断, 避免报错
If String . IsNullOrEmpty ( node . Name ) = False Then
aliasData = AliasEncoding . GetBytes ( node . Name )
End If
ReDim Preserve aliasData ( 31 ) 'caocong 2022-06-07 修改别名长度16Byte -> 32Byte
outputAliases . AddRange ( aliasData )
Console . WriteLine ( $ " {node.DefaultAliasName}{vbCrLf} " )
Next
End If
Console . WriteLine ( $ " {outputGroupNode.Name}:{outputGroupNode.Nodes.Count }:{outputAliases.Count }{vbCrLf} " )
End If
buf . AddRange ( BitConverter . GetBytes ( inputCount ) ) '输入回路数(2字节)
buf . AddRange ( BitConverter . GetBytes ( outputCount ) ) '输出回路数(2字节)
buf . AddRange ( inputSettings . ToArray ) '所有输入回路设置(n*4字节)
buf . AddRange ( outputAliases . ToArray ) '所有输出回路别名(n*16字节)
Return buf . ToArray
End Function
Private Function FindModelDeviceGroupUnderModel ( pNode As DeviceModel , name As String ) As DeviceChildNodeClass
Dim resultNode As DeviceChildNodeClass = Nothing
''2022-05-14 2.0.2.0 版本以前: 匹配节点名称与“DI”‘ DO’ 字符串, 来确定是否返回端点
''外设有继电器时, 继电器名称为“Relay”, Interface为“DO”, 此方法会范围“0”
For Each node In pNode . Nodes
'If node.RowType <> RowNode.RowTypeEnum.DeviceGroup Then Continue For
If String . Compare ( node . Name , name , True ) <> 0 Then Continue For
resultNode = node
Exit For
Next
Return resultNode
End Function
Private Function FindAttributeUnderModel ( pNode As DeviceModel , groupName As String , attributeName As String ) As Boolean
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 True
End If
Next
End If
Next
Return False
End Function
Private Function FillExternalModelDeviceExsist ( pNode As DeviceModel , hostNode As DeviceModel ) As List ( Of Byte ( ) )
Dim outDataLst As New List ( Of Byte ( ) ) '输出数据列表
Dim strObjGroupNodesTypedataAndProtocol As String = " "
Dim baudData ( 3 ) As Byte '波特率(4字节)
Dim retryTimeData ( 1 ) As Byte '重发次数(2字节)
Dim keepParam ( 59 ) As Byte '保留字段(32字节) -> 2022-05-28 V3.1 32bytes->64Bytes
Dim ipadd ( 3 ) As Byte
Dim ObjGroupNodesInOutDic As New Dictionary ( Of String , List ( Of Byte ) ) '键值对, 用于保存合并后的数据, Val = 设备组编译后的byte数组
Dim ObjGroupNodesInputCnt As New Dictionary ( Of String , UInt16 ) '键值对, 用于保存合并后的输入回路数, Val = 设备组编译后的byte数组
Dim ObjGroupNodesoutputCnt As New Dictionary ( Of String , UInt16 ) '键值对, 用于保存合并后的输出回路数, Val = 设备组编译后的byte数组
Dim ObjGroupNodesInpuSettings As New Dictionary ( Of String , List ( Of Byte ) ) '用于保存合并后输入设定数组
Dim ObjGroupNodesOutputAliases As New Dictionary ( Of String , List ( Of Byte ) ) '用于保存合并后输出别名数组
'添加设备组公共信息
Dim Baudrate ( ) As String = FindAttributeValueUnderModel ( pNode , " 设备存在 " , " 波特率 " ) . Split ( " " )
baudData = BitConverter . GetBytes ( CInt ( Baudrate ( 1 ) ) )
retryTimeData = BitConverter . GetBytes ( CShort ( FindAttributeValueUnderModel ( pNode , " 设备存在 " , " 重发时间 " ) ) )
Dim tmpAddr As Byte = CInt ( FindAttributeValueUnderModel2 ( pNode , " 设备存在 " , " 拨码地址 " ) ) '设备地址(1字节)
Dim hostAddr As Byte = CInt ( FindNodeValueUnderModel ( hostNode , " RS485 " , pNode . Desc . DevInterface ) ) '设备地址(1字节)
Dim TemptDevType As Byte = 0
Dim ParentDevType As Byte = 0
Dim ParentDevAddr As Byte = 0
Dim ParentDevPort As Byte = 0
Dim bytes ( 9 ) As Byte
Dim Curtainbuf ( ) As string
Dim node As Boolean = FindAttributeUnderModel ( pNode , " 设备存在 " , " BleName " )
If node Then
Dim nodestr = FindAttributeValueUnderModel2 ( pNode , " 设备存在 " , " BleName " ) '父设备美型(1字节)
bytes = System . Text . Encoding . UTF8 . GetBytes ( nodestr )
Array . Copy ( bytes , 0 , keepParam , 8 , bytes . Length )
TemptDevType = bytes ( 0 )
End If
node = FindAttributeUnderModel ( pNode , " 设备存在 " , " 父设备类型 " )
If node Then
ParentDevType = CInt ( FindAttributeValueUnderModel ( pNode , " 设备存在 " , " 父设备类型 " ) ) '父设备美型(1字节)
End If
node = FindAttributeUnderModel ( pNode , " 设备存在 " , " 父设备地址 " )
If node Then
ParentDevAddr = CInt ( FindAttributeValueUnderModel ( pNode , " 设备存在 " , " 父设备地址 " ) ) '父设备美型(1字节)
End If
node = FindAttributeUnderModel ( pNode , " 设备存在 " , " 父设备端口 " )
If node Then
Dim BaudDevPort ( ) As String = FindAttributeValueUnderModel ( pNode , " 设备存在 " , " 父设备端口 " ) . Split ( " " )
ParentDevPort = CInt ( BaudDevPort ( 0 ) ) '父设备美型(1字节)
End If
node = FindAttributeUnderModel ( pNode , " 设备存在 " , " 水机无阀 " )
If node Then
Dim BaudDevPort ( ) As String = FindAttributeValueUnderModel ( pNode , " 设备存在 " , " 水机无阀 " ) . Split ( " " )
TemptDevType = CInt ( BaudDevPort ( 0 ) ) '父设备美型(1字节)
End If
For Each Tcnode In pNode . Nodes
If Tcnode . Name . Equals ( " RS485_Curtain " ) And Not IsNothing ( pNode . Desc . DevDescription ) Then
Curtainbuf = pNode . Desc . DevDescription . split ( " , " )
If Curtainbuf . Length > 3 Then
TemptDevType = CInt ( Curtainbuf ( 3 ) )
Exit For
End If
End If
Next
keepParam ( 0 ) = ParentDevType
keepParam ( 1 ) = ParentDevAddr
keepParam ( 2 ) = ParentDevPort
keepParam ( 8 ) = TemptDevType
For indexi = 1 To 5
node = FindAttributeUnderModel ( pNode , " 设备存在 " , $ " 弱电输入{indexi} " )
If node Then
Dim BaudDevPort ( ) As String = FindAttributeValueUnderModel ( pNode , " 设备存在 " , $ " 弱电输入{indexi} " ) . Split ( " " )
ParentDevPort = CInt ( BaudDevPort ( 0 ) ) '父设备美型(1字节)
keepParam ( 2 + indexi ) = ParentDevPort
End If
Next
If Not IsNothing ( pNode . Desc . DevTypeData ) AndAlso pNode . Desc . DevTypeData . Equals ( " 55 " ) Then
Dim tabledev As CtabRange = GetRowDevNametabRange ( pNode . Name , TableRowNumber . DeviceName )
If Not IsNothing ( tabledev ) Then
Dim txtbuf ( ) As String
Dim txt As String
Dim txtbyte ( ) As Byte
For indexi = tabledev . fr To tabledev . lr
txtbuf = _grd . Cell ( indexi , TableColNumber . SceneAttribute ) . Text . Split ( " , " )
txt = _grd . Cell ( indexi , TableColNumber . SceneID ) . Text
txtbyte = BitConverter . GetBytes ( CShort ( txt ) )
If txtbuf ( 0 ) . Equals ( " 1 " ) Then
Array . Copy ( txtbyte , 0 , keepParam , 8 , txtbyte . Length )
ElseIf txtbuf ( 0 ) . Equals ( " 2 " ) Then
Array . Copy ( txtbyte , 0 , keepParam , 10 , txtbyte . Length )
End If
Next
End If
End If
For Each cnode In pNode . Nodes
strObjGroupNodesTypedataAndProtocol = cnode . DEV_TYPE_DATA & " , " & cnode . PROTOCOL_VER
If ObjGroupNodesInOutDic . ContainsKey ( strObjGroupNodesTypedataAndProtocol ) = False Then
'添加输出合并设备键值对’
ObjGroupNodesInOutDic . Add ( strObjGroupNodesTypedataAndProtocol , New List ( Of Byte ) )
ObjGroupNodesInputCnt . Add ( strObjGroupNodesTypedataAndProtocol , 0 ) '输入回路数 = 0
ObjGroupNodesoutputCnt . Add ( strObjGroupNodesTypedataAndProtocol , 0 ) '输出回路数 = 0
ObjGroupNodesInpuSettings . Add ( strObjGroupNodesTypedataAndProtocol , New List ( Of Byte ) )
ObjGroupNodesOutputAliases . Add ( strObjGroupNodesTypedataAndProtocol , New List ( Of Byte ) )
With ObjGroupNodesInOutDic ( strObjGroupNodesTypedataAndProtocol )
. Add ( & H3 ) '设备存在,每个数据块前面都加上 &H03
. Add ( CByte ( cnode . DEV_TYPE_DATA ) ) '设备类型(1字节)
. Add ( tmpAddr )
'PrintInfo(" *** 设备地址:" & tmpAddr.ToString)
. Add ( hostAddr ) '485端口(1字节)
. AddRange ( baudData ) '波特率(4字节)
. Add ( CByte ( cnode . PROTOCOL_VER ) ) '协议版本(1字节)
. Add ( CInt ( FindAttributeValueUnderModel ( pNode , " 设备存在 " , " 重发次数 " ) ) ) '重发次数(1字节)
. AddRange ( retryTimeData ) '重发间隔(2字节)
If cnode . DEV_TYPE_DATA . Equals ( " 42 " ) Then
Dim ipAddr As IPAddress = IPAddress . Parse ( FindAttributeValueUnderModel ( pNode , " 设备存在 " , " 中控IP地址 " ) ) '设备地址(1字节)
ipadd = ipAddr . GetAddressBytes ( )
' PrintInfo(" 中控IP地址 IPadd :" & ipAddr.ToString)
ElseIf cnode . DEV_TYPE_DATA . Equals ( " 43 " ) Then
Dim ipAddr As IPAddress = IPAddress . Parse ( FindAttributeValueUnderModel ( pNode , " 设备存在 " , " 域控IP地址 " ) ) '设备地址(1字节)
ipadd = ipAddr . GetAddressBytes ( )
' PrintInfo(" 域控IP地址 IPadd :" & ipAddr.ToString)
End If
. AddRange ( ipadd )
. AddRange ( keepParam )
End With
End If
'遍历设备
For Each objNode In cnode . Nodes
Select Case objNode . Interface
Case " DI "
ObjGroupNodesInputCnt ( strObjGroupNodesTypedataAndProtocol ) += 1 '输入回路数+1
ObjGroupNodesInpuSettings ( strObjGroupNodesTypedataAndProtocol ) . AddRange ( GetDeviceObjectSetting ( pNode . Name , objNode . DefaultClass ) ) '输入回路设定’
Case " DO "
Dim tmpDevAlias As String = String . Empty
If Not String . IsNullOrEmpty ( objNode . DefaultAliasName ) Then
tmpDevAlias = objNode . DefaultAliasName
End If
'If String.IsNullOrEmpty(tmpDevAlias) Then Continue For '未命名别名的输出设备不参与编译
Dim aliasData ( ) As Byte = AliasEncoding . GetBytes ( tmpDevAlias )
ReDim Preserve aliasData ( 31 ) 'caocong 2022-06-07 修改别名长度16Byte -> 32Byte
ObjGroupNodesoutputCnt ( strObjGroupNodesTypedataAndProtocol ) += 1 '输出回路数+1’
ObjGroupNodesOutputAliases ( strObjGroupNodesTypedataAndProtocol ) . AddRange ( aliasData ) '输出回路别名’
Case Else
Continue For
End Select
Next
Next
'遍历合并后的设备组(保存于键值对中)
For Each strKey As String In ObjGroupNodesInOutDic . Keys
Dim inputCnt As UInt16 = ObjGroupNodesInputCnt ( strKey )
Dim outputCnt As UInt16 = ObjGroupNodesoutputCnt ( strKey )
Dim arryInputSetting As Byte ( ) = ObjGroupNodesInpuSettings ( strKey ) . ToArray
Dim arryOutputSetting As Byte ( ) = ObjGroupNodesOutputAliases ( strKey ) . ToArray
ObjGroupNodesInOutDic ( strKey ) . AddRange ( BitConverter . GetBytes ( inputCnt ) )
ObjGroupNodesInOutDic ( strKey ) . AddRange ( BitConverter . GetBytes ( outputCnt ) )
ObjGroupNodesInOutDic ( strKey ) . AddRange ( arryInputSetting ) '所有输入回路设置(n*4字节)
ObjGroupNodesInOutDic ( strKey ) . AddRange ( arryOutputSetting ) '所有输出回路别名(n*16字节)
outDataLst . Add ( ObjGroupNodesInOutDic ( strKey ) . ToArray )
Next
Dim tmpOutData As Byte ( )
For i = 0 To outDataLst . Count - 1
tmpOutData = outDataLst ( i ) . ToArray
Console . WriteLine ( $ " 设备编译数据:{ByteToString(tmpOutData.ToArray)} " )
Next
Dim tmpBufferLst As List ( Of Byte ( ) ) = SelfCheckingPower ( pNode )
If IsNothing ( tmpBufferLst ) AndAlso tmpBufferLst . Count = 0 Then
Else
outDataLst . AddRange ( tmpBufferLst . ToArray )
End If
Return outDataLst
End Function
Public Function SelfCheckingPower ( pNode As DeviceModel ) As List ( Of Byte ( ) )
Dim outDataLst As New List ( Of Byte ( ) ) '输出数据列表
If Not pNode . Desc . DevInterface . Equals ( " PB_BUS_LINE " ) Then Return outDataLst
For Each objNode In pNode . Nodes
If objNode . DEV_TYPE_DATA . Equals ( " 49 " ) OrElse objNode . DEV_TYPE_DATA . Equals ( " 50 " ) OrElse objNode . DEV_TYPE_DATA . Equals ( " 51 " ) Then
Dim cmd As Byte = & H7
Dim tmpAddr As Byte = CInt ( FindAttributeValueUnderModel2 ( pNode , " 设备存在 " , " 拨码地址 " ) ) '设备地址(1字节)
Dim devtype As Byte = CByte ( objNode . DEV_TYPE_DATA )
'遍历设备
For Each jNode As DeviceChildNode In objNode . Nodes
'If objNode.RowType <> RowNode.RowTypeEnum.DeviceObject Then Continue For '设备
'If objNode.Compile = False Then Continue For '判断是否enable action’
' Dim bpTag As DeviceObjectRowNodeTag = objNode.Tag
Select Case jNode . Interface
Case " DI "
Case " DO "
Dim nli As New List ( Of Byte )
Dim upAddr As Integer = CInt ( FindAttributeValueUnderModel ( pNode , " 设备存在 " , $ " 回路{jNode.LoopAddr}自检功率下限 " ) ) '设备地址(1字节)
Dim domAddr As Integer = CInt ( FindAttributeValueUnderModel ( pNode , " 设备存在 " , $ " 回路{jNode.LoopAddr}自检功率上限 " ) ) '设备地址(1字节)
nli . Add ( cmd )
nli . Add ( devtype )
nli . Add ( tmpAddr )
nli . AddRange ( BitConverter . GetBytes ( CShort ( jNode . LoopAddr ) ) )
nli . AddRange ( BitConverter . GetBytes ( CShort ( upAddr ) ) )
nli . AddRange ( BitConverter . GetBytes ( CShort ( domAddr ) ) )
outDataLst . Add ( nli . ToArray )
Case Else
Continue For
End Select
Next
End If
Next
Return outDataLst
End Function
Private Function GetDeviceObjectSetting ( devname As String , nodetype As String ) As Byte ( )
Dim buf ( ) As Byte
Select Case nodetype
Case " KEY "
If devname . Equals ( hostname ) Then
buf = { 3 , 2 , 2 , 0 }
Else
buf = { 1 , 2 , 2 , 0 }
End If
Case " RKEY "
buf = { 1 , 0 , 0 , 100 }
Case " PIR "
buf = { 2 , 2 , 60 , 0 }
Case " DRY "
buf = { 3 , 2 , 2 , 0 }
Case " SLIDER "
buf = { 2 , 2 , 2 , 0 }
2025-12-25 15:55:38 +08:00
Case " CARD " , " BLV_CARD " , " LOCK " ‘ 250904 CZH 增加 BLV_CARD
2025-12-11 10:06:44 +08:00
buf = { 0 , 1 , 0 , 0 }
Case " Virtual_Card "
buf = { 2 , 0 , 0 , 0 }
Case " MUSIC "
buf = { 1 , 0 , 0 , 0 }
Case " Carbon_Device " , " Scene_Restore "
buf = { 1 , 0 , 0 , 0 }
End Select
'If devname.Equals(hostname) Then
' buf = {3, 2, 2, 0}
'Else
' buf = {1, 2, 2, 0}
'End If
'For Each node As RowNode In pNode.Nodes
' '查询设备属性集合
' If node.RowType <> RowNode.RowTypeEnum.DeviceAttributes Then Continue For
' '获取设备属性值
' Dim index As Integer = 0
' Dim tag As AttributeRowNodeTag
' For Each n As RowNode In node.Nodes
' tag = n.Tag
' buf(index) = tag.ValueData
' index += 1
' If index >= 4 Then Exit For
' Next
'Next
Return buf
End Function
Public Function ByteToString ( databuff ( ) As Byte )
Dim strData As String = String . Empty
For i = 0 To databuff . Length - 1
strData &= $ " {Hex(databuff(i)).PadLeft(2, " 0 " c)} "
Next
Return strData
End Function
Private Function FindAttributeValueUnderModel ( 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 . DataDefault
End If
Next
End If
Next
End Function
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
Private Function FindNodeValueUnderModel ( pNode As DeviceModel , groupName As String , attributeName As String ) As String
For Each cnode In pNode . Nodes
If cnode . Name . Equals ( groupName ) Then
For Each ccnode In cnode . Nodes
If ccnode . Interface . Equals ( attributeName ) Then
Return ccnode . LoopAddr
End If
Next
End If
Next
End Function
''' <summary>
''' 配置RCU模型设备存在数据
''' </summary>
''' <param name="pNode">模型节点</param>
''' <returns></returns>
Private Function FillRCUModelDeviceExsist ( pNode As DeviceModel ) As Byte ( )
' If pNode.RowType <> RowNode.RowTypeEnum.Model Then Throw New Exception($"行号:{pNode.RowListIndex} 不为RCU模型类型")
Dim buf As New List ( Of Byte )
'Dim tag As ModelRowNodeTag = pNode.Tag
buf . Add ( pNode . Desc . DevTypeData ) '设备类型(1字节)
buf . Add ( & H0 ) '设备地址(1字节)
buf . Add ( & H0 ) '485端口(1字节)
Dim baudrate As Integer = 0
buf . AddRange ( BitConverter . GetBytes ( baudrate ) ) '波特率(4字节)
buf . Add ( pNode . Desc . ProtocolVer ) '协议版本(1字节)
buf . Add ( & H0 ) '重发次数(1字节)
Dim retryInterval As Short = 0
buf . AddRange ( BitConverter . GetBytes ( retryInterval ) ) '重发间隔(2字节)
Dim keepParam ( 63 ) As Byte
buf . AddRange ( keepParam ) '保留字段(32字节) -> 2022-05-28 V3.1 32bytes->64Bytes
Dim inputCount As Short = 0
Dim outputCount As Short = 0
buf . AddRange ( BitConverter . GetBytes ( inputCount ) ) '输入回路数(2字节)
buf . AddRange ( BitConverter . GetBytes ( outputCount ) ) '输出回路数(2字节)
'所有输入回路设置(n*4字节)
'所有输出回路别名(n*16字节)
Return buf . ToArray
End Function
Public Function FillConfigInfo ( configInfo As ConfigInfoStuct , adevName As String ) As List ( Of Byte )
Dim resultDatas As New List ( Of Byte ( ) )
Dim cmd As Byte = & H1
Dim buf As List ( Of Byte ) = New List ( Of Byte )
Dim arrayCopyLenght As Integer = 0
'命令
buf . Add ( cmd )
'发布作者 P0~31
Dim bytesAuthor ( ) As Byte = AliasEncoding . GetBytes ( configInfo . Author . Trim )
Dim bytesAuthor_32bytes ( 31 ) As Byte
If bytesAuthor . Length <= 32 Then
arrayCopyLenght = bytesAuthor . Length
Else
arrayCopyLenght = 32
End If
Array . Copy ( bytesAuthor , bytesAuthor_32bytes , arrayCopyLenght )
buf . AddRange ( bytesAuthor_32bytes )
'软件版本号 P32~35
'Dim strConfigToolsVersion As String = Replace(configInfo.ConfigToolVersion, ".", "", 1, 4)
'Dim byetConfigToolsVersion() As Byte = System.Text.Encoding.UTF8.GetBytes(strConfigToolsVersion)
Dim ByteConfigToolsVersion ( ) As String = configInfo . ConfigToolVersion . Split ( " . " )
Dim byetConfigToolsVersion ( 3 ) As Byte
byetConfigToolsVersion ( 0 ) = Val ( ByteConfigToolsVersion ( 0 ) )
byetConfigToolsVersion ( 1 ) = Val ( ByteConfigToolsVersion ( 1 ) )
byetConfigToolsVersion ( 2 ) = Val ( ByteConfigToolsVersion ( 2 ) )
byetConfigToolsVersion ( 3 ) = Val ( ByteConfigToolsVersion ( 3 ) )
buf . AddRange ( byetConfigToolsVersion )
'配置发布日期 P36~42
'Dim strReleaseDate As String = Format(configInfo.ReleaseDate, "yyyyMMddHHmmss")
'Dim byteReleaseDate() = System.Text.Encoding.UTF8.GetBytes(strReleaseDate)
Dim byteReleaseDate ( 6 ) As Byte '
byteReleaseDate ( 0 ) = configInfo . ReleaseDate . Year \ 256 'yy H
byteReleaseDate ( 1 ) = configInfo . ReleaseDate . Year Mod 256 'yy L
byteReleaseDate ( 2 ) = configInfo . ReleaseDate . Month 'Month
byteReleaseDate ( 3 ) = configInfo . ReleaseDate . Day 'd
byteReleaseDate ( 4 ) = configInfo . ReleaseDate . Hour 'h
byteReleaseDate ( 5 ) = configInfo . ReleaseDate . Minute 'm
byteReleaseDate ( 6 ) = configInfo . ReleaseDate . Second 's
buf . AddRange ( byteReleaseDate )
'项目名称 P43~74
Dim byteHotelName ( ) As Byte = AliasEncoding . GetBytes ( configInfo . HotelName . Trim )
Dim byteHotelName_32Bytes ( 31 ) As Byte
If byteHotelName . Length <= 32 Then
arrayCopyLenght = byteHotelName . Length
Else
arrayCopyLenght = 32
End If
Array . Copy ( byteHotelName , byteHotelName_32Bytes , arrayCopyLenght )
buf . AddRange ( byteHotelName_32Bytes )
'项目编号 P75~78
Dim byteHotelCode ( ) As Byte = iByte4 ( configInfo . HotelCode )
buf . AddRange ( byteHotelCode )
'项目分组 P79~110
Dim byteHoteGroupName ( ) As Byte = AliasEncoding . GetBytes ( configInfo . HotelGroupName . Trim )
Dim byteHoteGroupName_32Bytes ( 31 ) As Byte
If byteHoteGroupName . Length <= 32 Then
arrayCopyLenght = byteHoteGroupName . Length
Else
arrayCopyLenght = 32
End If
Array . Copy ( byteHoteGroupName , byteHoteGroupName_32Bytes , arrayCopyLenght )
buf . AddRange ( byteHoteGroupName_32Bytes )
'房型别名 P111~142
Dim byteRoomTypeName ( ) As Byte = AliasEncoding . GetBytes ( configInfo . RoomTypeName . Trim )
Dim byteRoomTypeName_32Bytes ( 31 ) As Byte
If byteRoomTypeName . Length <= 32 Then
arrayCopyLenght = byteRoomTypeName . Length
Else
arrayCopyLenght = 32
End If
Array . Copy ( byteRoomTypeName , byteRoomTypeName_32Bytes , arrayCopyLenght )
buf . AddRange ( byteRoomTypeName_32Bytes )
'配置版本号 P143~146
'Dim byteConfigFileVersion() As Byte = iByte4(configInfo.CfgFileVersion)
'buf.AddRange(byteConfigFileVersion)
'Momo 2022-09-06 配置版本号只有3位 P143~145
Dim byteConfigFileVersion ( ) As Byte = iByte3 ( configInfo . CfgFileVersion )
buf . AddRange ( byteConfigFileVersion )
'配置机型 P146~P209 MCU机型名称 64
Dim tmpModelName As String = adevName . Trim
'MsgBox(tmpModelName)
Dim byteModelName ( ) As Byte = AliasEncoding . GetBytes ( tmpModelName )
Dim byteModelName_64Bytes ( 63 ) As Byte
If byteModelName . Length <= 64 Then
arrayCopyLenght = byteModelName . Length
Else
arrayCopyLenght = 64
End If
Array . Copy ( byteModelName , byteModelName_64Bytes , arrayCopyLenght )
buf . AddRange ( byteModelName_64Bytes )
'2024.12.20 CZH
Dim dtime As Short = 0
Try
dtime = CShort ( _grd . Cell ( TableRowNumber . FunctionAnotherName , TableColNumber . InsertColumn - 1 ) . Text )
If dtime < - 24 OrElse dtime > 24 Then
dtime = 0
End If
Catch ex As Exception
dtime = 0
End Try
Dim eventNum ( ) As Byte = BitConverter . GetBytes ( dtime )
buf . AddRange ( eventNum )
'完成配置数据添加
Return buf 'resultDatas
End Function
''' <summary>
''' Integer 类型转 4 字节 byte数组, 高字节在前
''' </summary>
''' <param name="i"></param>
''' <returns></returns>
Public Function iByte4 ( ByVal i As Integer ) As Byte ( )
Dim btemp ( ) As Byte = { 0 , 0 , 0 , 0 }
Dim b ( ) As Byte = BitConverter . GetBytes ( i )
btemp ( 3 ) = b ( 3 )
btemp ( 2 ) = b ( 2 )
btemp ( 1 ) = b ( 1 )
btemp ( 0 ) = b ( 0 )
Return btemp
End Function
''' <summary>
''' Integer 类型转 3 字节 byte数组, 高字节在前
''' </summary>
''' <param name="i"></param>
''' <returns></returns>
Public Function iByte3 ( ByVal i As Integer ) As Byte ( )
Dim btemp ( ) As Byte = { 0 , 0 , 0 }
Dim b ( ) As Byte = BitConverter . GetBytes ( i )
btemp ( 2 ) = b ( 2 )
btemp ( 1 ) = b ( 1 )
btemp ( 0 ) = b ( 0 )
Return btemp
End Function
Public Function SaveToExle ( g_XmlPath As String )
Try
_grd . ExportToExcel ( g_XmlPath , )
Return True
Catch ex As Exception
Return False
End Try
End Function
Public Function Save ( g_XmlPath As String ) As Boolean
Try
Dim fxml As New DrSeverGrid ( Dic_Devicemodel , Dic_ActionConfiguration , _grd , BasicClassFilename , ConditionFileName )
fxml . Save ( g_XmlPath )
Return True
Catch ex As Exception
Return False
End Try
End Function
Public Sub test ( )
For i = 5 To 20
Console . WriteLine ( $ " Rows :{i} VAL : {_grd.Row(i).Locked } " )
For j = 1 To 10
Console . WriteLine ( $ " cols :{j} VAL : {_grd.Column(j).Locked } " )
Console . WriteLine ( $ " cell :{i}, {j} VAL : {_grd.Cell(i, j).Locked } " )
Next
Next
_grd . Column ( 1 ) . Locked = False
_grd . Row ( 9 ) . Locked = False
_grd . Row ( 8 ) . Locked = False
With _grd . Range ( 8 , 1 , 9 , 1 )
. ClearAll ( )
. Locked = False
'.Merge()
End With
End Sub
'上传无卡取电回路别名
Public Function tbl_room_ble_devlistInsert ( HotelID As String , RoomTypeID As String ) As String
'判断设备列表是否为空
Dim result As String = " "
Dim strbuf ( ) as String
Dim arrayCopyLenght As String = $ " {HotelID}_{RoomTypeID} "
result = $ " '{arrayCopyLenght}', "
dim kstr as String = " "
Dim cnt as Integer = 0
Dim updatastr as String = " "
For Each index In Dic_Devicemodel . Values
For Each node In index . Nodes
If node . Name . Equals ( " Virtual_Card " ) AndAlso node . Interface . Equals ( " DO " ) Then
cnt = 0
For Each node1 In node . Nodes
strbuf = node1 . Description . Split ( " , " )
'Description = "卫红外,关门磁(18),50,,2,2,0"
If strbuf . Count > 1 Then
kstr = $ " {kstr}loop{cnt}, "
result = $ " {result}'{strbuf(1).Replace( " ( " , " _ " ).Replace( " ) " , "" )}', "
updatastr = $ " {updatastr}loop{cnt} = VALUES(loop{cnt}), "
End If
cnt = cnt + 1
Next
End If
Next
Next
If kstr . Length > 0 Then
result = result . Substring ( 0 , result . Length - 1 )
kstr = kstr . Substring ( 0 , kstr . Length - 1 )
updatastr = updatastr . Substring ( 0 , updatastr . Length - 1 )
result = $ " INSERT INTO tbl_rcu_virtualcard_looplogs (Combination_ID,{kstr}) VALUES ({result})
ON DUPLICATE KEY UPDATE { updatastr } ; "
else
Return " "
End If
Return result
End Function
Public Function GetServerCount ( ) As Integer
If Dic_Devicemodel . Count = 0 Then Return 0
'获取mode
Dim model As DeviceModel = Dic_Devicemodel . Values ( 0 )
'遍历 model 找到服务节点
For Each node In model . Nodes
If node . Name . Equals ( " HOSTSERVICE " ) Then
Return node . Nodes . Count
End If
Next
Return 0
End Function
Public Function Getdevmodefirmware ( ) As String
Dim result As String = " "
'判断设备列表是否存在或为空
If IsNothing ( Dic_Devicemodel ) OrElse Dic_Devicemodel . Count = 0 Then Return result
Dim holteanme As String
Dim devli As Dictionary ( Of String , String ) = New Dictionary ( Of String , String )
Dim devname As String ( )
Dim NDevName As String
'遍历Dic_Devicemodel
For i As Integer = 0 To Dic_Devicemodel . Count - 1
If IsNothing ( Dic_Devicemodel . Values ( i ) . filename ) OrElse Dic_Devicemodel . Values ( i ) . filename = " " Then Continue For
If i = 0 Then
holteanme = Dic_Devicemodel . Values ( i ) . filename
Else
devname = Dic_Devicemodel . Keys ( i ) . Split ( vbLf )
If devli . ContainsKey ( Dic_Devicemodel . Values ( i ) . filename ) Then
Continue For
else
devli . Add ( Dic_Devicemodel . Values ( i ) . filename , Dic_Devicemodel . Keys ( i ) )
NDevName = $ " '{Dic_Devicemodel.Values(i).filename}', "
End If
End If
Next
If String . IsNullOrEmpty ( holteanme ) Then Return result
If devli . Count > 0 Then
NDevName = NDevName . Substring ( 0 , NDevName . Length - 1 )
result = $ " SELECT `FirmwareName` FROM tbl_devmode_firmware_info WHERE `HostName` = '{holteanme}' AND `DevName` IN ({NDevName})GROUP BY `FirmwareName` HAVING COUNT(DISTINCT `DevName`) = 1 "
Else
result = $ " SELECT `FirmwareName` FROM tbl_devmode_firmware_info WHERE `HostName` = '{holteanme}' GROUP BY `FirmwareName` "
End If
Return result
End Function
2025-12-25 15:55:38 +08:00
Public Sub UploadConfiguredDevicesList ( HotelID As String , RoomTypeID As String , DbConnString As String )
'删除配置表
Dim sql As String = $ " DELETE FROM tbl_configured_devlist WHERE HotelID = '{HotelID}' AND RoomTypeID = '{RoomTypeID}' "
Add_room_type_circuit_powers ( DbConnString , sql )
'遍历设备列表
Dim dev As DeviceModel
Dim typeindex As Integer = 0
'获取酒店id和房型id
Dim g_devname As CtabRange
Dim dic As Dictionary ( Of string , string ) = New Dictionary ( Of string , string )
Dim insert As String = " "
Dim devAddr As String = " "
Dim Server ( ) As String
Dim devdatetype As Integer
Dim devname As String ( )
For i = 0 To Dic_Devicemodel . Count - 1
dev = Dic_Devicemodel . Values ( i )
If dev . Desc . DevInterface . Equals ( " VirtualObject " ) Then Continue For
If i = 0 Then
typeindex = 0
g_devname = GetCoLDevNametabRange ( dev . Name , TableRowNumber . Max , TableColNumber . DeviceName )
For gr As Integer = g_devname . fr To g_devname . lr
If _grd . Cell ( gr , TableColNumber . KeyName ) . Text . Contains ( " 红外 " ) OrElse _grd . Cell ( gr , TableColNumber . KeyName ) . Text . Contains ( " 雷达 " ) OrElse _grd . Cell ( gr , TableColNumber . KeyName ) . Text . Contains ( " 门磁 " ) Then
Server = _grd . Cell ( gr , TableColNumber . ServerAttribute ) . Text . Trim . Split ( " , " )
If IsNothing ( Server ) OrElse Server . Count = 0 OrElse string . IsNullOrEmpty ( Server ( 0 ) ) Then Continue For
devAddr = $ " 00400000{Server(0).ToString.Trim} "
insert = INSERTtbl_configured_devlist ( HotelID , RoomTypeID , _grd . Cell ( gr , TableColNumber . KeyName ) . Text , devAddr )
If dic . ContainsKey ( devAddr ) Then
Else
dic . Add ( devAddr , insert )
End If
Elseif _grd . Cell ( gr , TableColNumber . KeyName ) . Text . Contains ( " 插卡 " )
Server = _grd . Cell ( gr , TableColNumber . ServerAttribute ) . Text . Trim . Split ( " , " )
If IsNothing ( Server ) OrElse Server . Count = 0 OrElse string . IsNullOrEmpty ( Server ( 0 ) ) Then Continue For
devAddr = $ " 004000001 "
insert = INSERTtbl_configured_devlist ( HotelID , RoomTypeID , _grd . Cell ( gr , TableColNumber . KeyName ) . Text , devAddr )
If dic . ContainsKey ( devAddr ) Then
Else
dic . Add ( devAddr , insert )
End If
End If
Next
Else
'取dev.Desc.Name 按照如下格式截取出设备地址
' 485(轮询)1
'设备地址:9
'A9恒压调光_(RS485_轮询)
Dim str As String = dev . Desc . Name
Dim strbuf ( ) As String = str . Split ( vbLf )
If strbuf . Count > 1 Then
Dim strbuf1 ( ) As String = strbuf ( 1 ) . Trim . Split ( " : " )
If strbuf1 . Count > 1 Then
typeindex = cint ( strbuf1 ( 1 ) . Trim )
End If
End If
End If
'遍历设备节点
For Each node In dev . Nodes
'判断节点类型DEV_TYPE_DATA是否为空
If string . IsNullOrEmpty ( node . DEV_TYPE_DATA ) Then
Continue For
Else
'将node.DEV_TYPE_DATA 转int
devdatetype = cint ( node . DEV_TYPE_DATA )
devAddr = devdatetype . ToString ( ) . PadLeft ( 3 , " 0 "c )
devAddr = devAddr & typeindex . ToString ( ) . PadLeft ( 3 , " 0 "c )
devAddr = devAddr & " 001 "
If i = 0 Then
insert = INSERTtbl_configured_devlist ( HotelID , RoomTypeID , dev . Name . Replace ( vbLf , " _ " ) & " _主机 " , devAddr )
Else
devname = dev . Name . Split ( vbLf )
insert = INSERTtbl_configured_devlist ( HotelID , RoomTypeID , devname ( 2 ) , devAddr )
End If
If dic . ContainsKey ( devAddr ) Then
Else
dic . Add ( devAddr , insert )
End If
End If
Next
Next
''遍历dic集合 将数据插入字符串平接成事务插入语句
insert = " "
For Each item In dic
insert = insert & item . Value
Next
'执行插入语句
Add_room_type_circuit_powers ( DbConnString , insert )
End Sub
Public Function Add_room_type_circuit_powers ( DbConnString As String , insertClunm As String ) As Boolean
If String . IsNullOrEmpty ( insertClunm ) Then Return False
Dim dt As DataTable
Using db As New DbExecutor ( DbExecutor . DbTypeEnum . Mysql , DbConnString )
db . Open ( )
Try
db . BeginTransaction ( )
dt = db . ExecuteDataTable ( insertClunm )
db . CommitTransaction ( )
Catch ex As Exception
db . RollbackTransaction ( )
db . Close ( )
Return False
End Try
db . Close ( )
End Using
Return True
End Function
Public Function INSERTtbl_configured_devlist ( HotelID As String , RoomTypeID As String , DevName As String , DevAddr As String ) As String
' 主机显示在线仅表示其与服务器通讯正常,不代表主机端口功能完好,端口异常时需按异常按钮填报主机功能故障信息。
'开关显示在线仅表示其与主机通讯正常,不代表按键功能正常,按键异常时需按异常按钮填报开关功能故障信息。
'人在传感器范围内时,显示在线为正常,显示不在线为异常,需填报异常信息。
'开门能打开灯为正常,显示不在线为异常,需填报异常信息
Dim Process As String = " 待定 "
If DevName . Contains ( " 主机 " ) Then
Process = " 主机显示在线仅表示其与服务器通讯正常,不代表主机端口功能完好,端口异常时需按异常按钮填报主机功能故障信息。 "
Else If DevName . Contains ( " 雷达 " ) OrElse DevName . Contains ( " 红外 " ) then
Process = " 人在传感器范围内时,显示在线为正常,显示不在线为异常,需填报异常信息。 "
Else If DevName . Contains ( " 门磁 " ) Then
Process = " 开门能打开灯为正常,显示不在线为异常,需填报异常信息。 "
Else
Process = " 开关显示在线仅表示其与主机通讯正常,不代表按键功能正常,按键异常时需按异常按钮填报开关功能故障信息。 "
End If
2025-12-11 10:06:44 +08:00
2025-12-25 15:55:38 +08:00
Dim insert As String = $ " INSERT INTO `blv_rcu_db`.`tbl_configured_devlist`
( ` UpdateTime `
, ` HotelID `
, ` RoomTypeID `
, ` Process `
, ` DevName `
, ` DevAddr ` )
VALUES
( '{Now.ToString("yyyy-MM-dd HH:mm:ss")}'
, { HotelID }
, { RoomTypeID }
, '{Process}'
, '{DevName}'
, '{DevAddr}');{vbLf}"
return insert
End Function
2025-12-11 10:06:44 +08:00
Public Function TestReportingScenario ( _UserName As String , _HotleID As String , _RoomTypeID As String , filename As String , Version As String ) As ReportingScenario
Dim aaa As New ReportingScenario ( _UserName , _HotleID , _RoomTypeID , filename , Version , _grd , Dic_Devicemodel , Dic_ActionConfiguration )
Dim li As List ( Of MDevNodeMessage ) = aaa . getDateDisposeRuning
Dim str As String = JsonConvert . SerializeObject ( li )
'MsgBox(str)
Dim nsurl As String = " https://boonlive-rcu.com/api/UploadRoomTypeModal " '"https://pms.boonlive-rcu.com/api/UploadRoomTypeModal"
GetAccountAuth ( nsurl , str )
Return aaa
End Function
Public Function TestReportingScenario1 ( ) As ReportingScenario
Dim aaa As New ReportingScenario ( _grd , Dic_Devicemodel )
Return aaa
End Function
Public Function GetenergyConservationDev ( ) As String
'遍历设备列表 找出设备类型为 DEV_TYPE_DATA=54 的设备
Dim Dic As New Dictionary ( Of String , String )
Dim DModel As DeviceModel
For Each dev In Dic_Devicemodel . Values
If dev . Desc . DevTypeData = 54 Then
DModel = dev
Exit For
End If
Next
If DModel Is Nothing Then Return " "
dim headname As CtabRange = GetRowDevNametabRange ( DModel . Name , TableColNumber . DeviceName )
dim headname1 As CtabRange = GetCoLDevNametabRange ( DModel . Name , TablerowNumber . DeviceName )
If headname Is Nothing OrElse headname1 Is Nothing Then Return " "
Dim str As String = _grd . Cell ( headname . fr , headname1 . fc ) . Text . Trim
Return str
End Function
Private Function GetAccountAuth ( url As String , data As String ) As Boolean
Dim jsonString As String = HttpMothod . PostData2 ( url , data )
If String . IsNullOrWhiteSpace ( jsonString ) OrElse jsonString . ToUpper . Contains ( " False " . ToUpper ) Then
Throw New Exception ( $ " 用户鉴权异常,请联系管理员 " )
Return False
End If
Return True
End Function
Public Function LoadFile ( path As String ) As Boolean
'新主机项目 清空设备列表
Try
'Dim ts As DateTime = Now
'Dim st As TimeSpan
Dic_Devicemodel . Clear ( )
Dic_ActionConfiguration . Clear ( )
_ServerAction . Clear ( )
ColumnAnothername . Clear ( )
'记录主机名称
hostname = " "
_ServerInsertRows = 0
_SceneID = 1
_ColumnStartLoad = TableColNumber . Max - 1
initGrid1 ( )
LockGridAutoRedraw ( )
Dim fxml As New DrSeverGrid ( Dic_Devicemodel , Dic_ActionConfiguration , _grd , BasicClassFilename , ConditionFileName )
grdRemoveHandler ( )
'st = Now - ts
'Console.WriteLine($"st1:({st.TotalMilliseconds })")
fxml . LoadFile ( path )
'st = Now - ts
'Console.WriteLine($"st2:({st.TotalMilliseconds })")
hostname = _grd . Cell ( 1 , 8 ) . Text
Dic_Devicemodel = fxml . Dic_Devicemodel
_grd . Cell ( TableRowNumber . FunctionChildNodeAnother , TableColNumber . DeviceName ) . Text = getFunctionChildNodeAnother ( Dic_Devicemodel )
_ColumnStartLoad = fxml . InsertColumn
BasicClassFilename = fxml . Dic_Bname
ConditionFileName = fxml . Dic_Cname
_SceneID = fxml . G_SceneID
ColumnAnothername = fxml . ColumnAnothername
_ServerInsertRows = _grd . Rows - 1
ChangeTheServiceLineNumber ( )
grdAddHandler ( )
UnLockGridAutoRedraw ( )
'st = Now - ts
'Console.WriteLine($"st3:({st.TotalMilliseconds })")
Return True
Catch ex As Exception
Return False
End Try
End Function
Public Function getFunctionChildNodeAnother ( Devicemodel As Dictionary ( Of String , DeviceModel ) ) As String
Dim result As String = String . Empty
For Each moduStr In Devicemodel . Values
If moduStr . Nodes . Count = 1 AndAlso ( moduStr . Nodes ( 0 ) . Nodes . Count = 0 OrElse moduStr . Nodes ( 0 ) . DEV_TYPE_DATA . Equals ( " 48 " ) OrElse moduStr . Nodes ( 0 ) . DEV_TYPE_DATA . Equals ( " 46 " ) ) Then
If String . IsNullOrEmpty ( result ) Then
result = moduStr . Name
Else
result = result & " , " & moduStr . Name
End If
End If
Next
Return result
'_grd.Cell(TableRowNumber.FunctionChildNodeAnother, TableColNumber.DeviceName).Text = "test"
End Function
#End Region
End Class
Public Class CtabRange
Public devname As String = String . Empty
Public fr As Integer = 0
Public lr As Integer = 0
Public fc As Integer = 0
Public lc As Integer = 0
Sub New ( grd As FlexCell . Grid , tabr As Integer , tabc As Integer )
If grd . Rows > tabr AndAlso grd . Cols > tabc Then
With grd . Range ( tabr , tabc , tabr , tabc )
devname = grd . Cell ( . FirstRow , . FirstCol ) . Text
fc = . FirstCol
lc = . LastCol
fr = . FirstRow
lr = . LastRow
End With
End If
End Sub
End Class