Public Class FrmRFFunction Implements IModuleForm #Region "窗体" ''' ''' 窗体加载 ''' ''' ''' Private Sub FrmRFWiFiFunction_Load(sender As Object, e As EventArgs) Handles Me.Load InitPage() 'RF设备列表 InitRFConfigInfo() '插卡取电 InitInsertCalorie() '开关面板 InitTime() '无线温控 InitTempControl() '微信锁 IsSet() InitInfoWeChat() TextBox1.Text = My.Settings.CurtainsCMD TxtCurtainData.Text = My.Settings.CurtainsData End Sub ''' ''' 显示窗体接口 ''' ''' Public Sub ShowForm(parentControl As Control) Implements IModuleForm.ShowForm FormBorderStyle = FormBorderStyle.None '无边框 TopLevel = False Dock = DockStyle.Fill '填满大小 Parent = parentControl '父容器 Show() End Sub ''' ''' 发送函数 ''' ''' Public Sub SendData(sendPacket() As Byte) 'FrmRCU.SendData(sendPacket) '方法1 If InvokeRequired Then Invoke(New Action(Sub() FrmRCU.SendData(sendPacket) End Sub)) Else FrmRCU.SendData(sendPacket) End If End Sub #End Region #Region "RF无线功能配置" ''' ''' RF网关 ''' Enum RFGateway ''' ''' 485网关地址 ''' Address485 ''' ''' 设备类型 ''' DevType ''' ''' 设备地址 ''' DevAddress ''' ''' 和校验 ''' CheckSum ''' ''' 数据包长 ''' Len ''' ''' 命令字 ''' Cmd ''' ''' 数据内容 ''' Databuff End Enum ''' ''' RF设备类型 ''' Enum RFDevType 插卡取电 = &H5 开关面板 = &H7 无线语音 = &H8 无线温控 = &H9 微信锁 = &HA 电动窗帘 = &HB End Enum ''' ''' 检查通信连接 ''' Public Function CheckConn() If CheckNetWorkConn() = False OrElse CheckSerialPortConn() = False Then Return False Return True End Function #Region "初始化设备列表信息" Enum DevColName ''' ''' 设备名称 ''' DevName = 1 ''' ''' 设备类型 ''' DevType = 2 ''' ''' 设备地址 ''' DevAddr = 3 ''' ''' 设备状态 ''' DevState = 4 ''' ''' 控制计数 ''' ControlCount = 5 ''' ''' 控制信息 ''' ControlInfo = 6 ''' ''' 设备测试 ''' DevTest = 7 End Enum Private Sub InitRFConfigInfo() GrdRFcfg.DisplayRowNumber = True GrdRFcfg.ExtendLastCol = True GrdRFcfg.Cols = DevColName.DevTest + 1 '设置表格界限 GrdRFcfg.Rows = 1 With GrdRFcfg.Cell(0, DevColName.DevName) .Text = "设备名称" .BackColor = Color.LightGray .ForeColor = Color.Blue .Font = New Font("Arial", 8, FontStyle.Bold) End With With GrdRFcfg.Cell(0, DevColName.DevType) .Text = "设备类型" .BackColor = Color.LightGray .ForeColor = Color.Blue .Font = New Font("Arial", 8, FontStyle.Bold) End With With GrdRFcfg.Cell(0, DevColName.DevAddr) .Text = "设备地址" .BackColor = Color.LightGray .ForeColor = Color.Blue .Font = New Font("Arial", 8, FontStyle.Bold) End With With GrdRFcfg.Cell(0, DevColName.DevState) .Text = "设备状态" .BackColor = Color.LightGray .ForeColor = Color.Blue .Font = New Font("Arial", 8, FontStyle.Bold) End With With GrdRFcfg.Cell(0, DevColName.ControlCount) .Text = "计数" .BackColor = Color.LightGray .ForeColor = Color.Blue .Font = New Font("Arial", 8, FontStyle.Bold) End With With GrdRFcfg.Cell(0, DevColName.ControlInfo) .Text = "操作信息" .BackColor = Color.LightGray .ForeColor = Color.Blue .Font = New Font("Arial", 8, FontStyle.Bold) End With With GrdRFcfg.Cell(0, DevColName.DevTest) .Text = "测试成功率" .BackColor = Color.LightGray .ForeColor = Color.Blue .Font = New Font("Arial", 8, FontStyle.Bold) End With GrdRFcfg.Column(DevColName.DevName).Alignment = FlexCell.AlignmentEnum.CenterCenter GrdRFcfg.Column(DevColName.DevName).Width = 80 GrdRFcfg.Column(DevColName.DevType).Alignment = FlexCell.AlignmentEnum.CenterCenter GrdRFcfg.Column(DevColName.DevType).Width = 80 GrdRFcfg.Column(DevColName.DevAddr).Alignment = FlexCell.AlignmentEnum.CenterCenter GrdRFcfg.Column(DevColName.DevAddr).Width = 80 GrdRFcfg.Column(DevColName.DevState).Alignment = FlexCell.AlignmentEnum.CenterCenter GrdRFcfg.Column(DevColName.DevState).Width = 80 GrdRFcfg.Column(DevColName.ControlCount).Alignment = FlexCell.AlignmentEnum.CenterCenter GrdRFcfg.Column(DevColName.ControlCount).Width = 40 GrdRFcfg.Column(DevColName.DevTest).Alignment = FlexCell.AlignmentEnum.CenterCenter GrdRFcfg.Column(DevColName.DevTest).Width = 100 End Sub #End Region #Region "RF网关组包" ''' ''' 填充RF网关包 ''' Private Function FillRFGatewayPackage(address485 As Byte, devType As Byte, devAddress As Byte, cmd As Byte) As Byte() Dim packetData(5) As Byte packetData(RFGateway.Address485) = address485 packetData(RFGateway.DevType) = devType packetData(RFGateway.DevAddress) = devAddress packetData(RFGateway.Len) = &H0 packetData(RFGateway.Cmd) = cmd packetData(RFGateway.CheckSum) = GetSumCheckMod(packetData) Return packetData End Function ''' ''' 填充RF网关包 ''' Private Function FillRFGatewayDataPackage(address485 As Byte, devType As Byte, devAddress As Byte, cmd As Byte, databuff() As Byte) As Byte() Dim packetData(6 + databuff.Length - 1) As Byte packetData(RFGateway.Address485) = address485 packetData(RFGateway.DevType) = devType packetData(RFGateway.DevAddress) = devAddress packetData(RFGateway.Len) = $"&H{Hex(databuff.Length)}" packetData(RFGateway.Cmd) = cmd Array.Copy(databuff, 0, packetData, RFGateway.Databuff, databuff.Length) packetData(RFGateway.CheckSum) = GetSumCheckMod(packetData) Return packetData End Function #End Region #Region "RF设备配对" ''' ''' 设备列表设备总数 ''' Public _devCount As Integer = 1 ''' ''' 设置RF配对 ''' ''' ''' Private Sub BtnPairing_Click(sender As Object, e As EventArgs) Handles BtnPairing.Click 'If CheckConn() = False Then Exit Sub PairingBtnChange() _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" Dim address485 As Byte = $"&H{Hex(Nup485DialAddr.Value)}" Dim devType As Byte = &H0 Dim devAddress As Byte = &H0 Dim cmd As Byte = &H9 Dim databuff() As Byte = PairingData() Console.WriteLine($"配对指令:{ByteToString(databuff)}") Dim sendPacket As Byte() = FillRFGatewayDataPackage(address485, devType, devAddress, cmd, databuff) sendPacket = FillPacket(sendPacket) '组包 SendData(sendPacket) '发送 Console.WriteLine($"设置RF配对数据:{ByteToString(sendPacket)}") Timer1.Interval = 2000 * 60 Timer1.Start() End Sub ''' ''' 配对按键变化 ''' Private Sub PairingBtnChange() If BtnPairing.Text = $"进入配对" Then BtnPairing.Text = $"退出配对" BtnPairing.ForeColor = Color.Red _pairingModel = True BtnReadRFDevList.Enabled = False ElseIf BtnPairing.Text = $"退出配对" Then BtnPairing.Text = $"进入配对" BtnPairing.ForeColor = Color.Green _pairingModel = False BtnReadRFDevList.Enabled = True End If End Sub ''' ''' 配对数据内容 ''' ''' Private Function PairingData() Dim databuff(0) As Byte If BtnPairing.Text = $"进入配对" Then databuff(0) = &H2 AppendTipText($"退出配对{vbCrLf}", Color.Green) ElseIf BtnPairing.Text = $"退出配对" Then AppendTipText($"进入配对......{vbCrLf}", Color.Green) databuff(0) = &H1 Timer1.Stop() End If Return databuff End Function ''' ''' 定时检测,若在配对状态,则两分钟继续保持 ''' ''' ''' Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" 'If CheckConn() = False Then Exit Sub If BtnPairing.Text = $"退出配对" Then Dim address485 As Byte = $"&H{Hex(Nup485DialAddr.Value)}" 'Dim devType As Byte = $"&H{Hex(NupDevType.Value)}" 'Dim devAddress As Byte = $"&H{Hex(NupDevAddress.Value)}" Dim devType As Byte = &H0 Dim devAddress As Byte = &H0 Dim cmd As Byte = &H9 Dim databuff(0) As Byte databuff(0) = &H3 Dim sendPacket As Byte() = FillRFGatewayDataPackage(address485, devType, devAddress, cmd, databuff) AppendTipText($"保持配对......{vbCrLf}", Color.Green) sendPacket = FillPacket(sendPacket) '组包 SendData(sendPacket) '发送 'Console.WriteLine($"设置保持连接数据:{sendPacket}") End If End Sub ''' ''' 读取RF网络地址 ''' ''' ''' Private Sub BtnReadRFWifi_Click(sender As Object, e As EventArgs) Handles BtnReadRFWifi.Click _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" Dim address485 As Byte = $"&H{Hex(Nup485DialAddr.Value)}" Dim devType As Byte = &H0 Dim devAddress As Byte = &H0 Dim cmd As Byte = &H3 Dim sendPacket As Byte() = FillRFGatewayPackage(address485, devType, devAddress, cmd) AppendTipText($"开始读取RF网络状态......{vbCrLf}", Color.Green) sendPacket = FillPacket(sendPacket) '组包 SendData(sendPacket) End Sub ''' ''' 读取RF设备网络委托 ''' ''' Delegate Sub delegate_ReadRFWifi_Change(data As Byte) ''' ''' 读取RF设备网络 ''' ''' Public Sub ReadRFWifi(data As Byte) If InvokeRequired = True Then Dim dev As New delegate_ReadRFWifi_Change(AddressOf ReadRFWifi) Me.Invoke(dev, New Object() {data}) Else TboNetworkAddress.Text = $"{data}" End If End Sub ''' ''' 设置RF网络地址 ''' ''' ''' Private Sub BtnSetRFWifi_Click(sender As Object, e As EventArgs) Handles BtnSetRFWifi.Click _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" Dim address485 As Byte = $"&H{Hex(Nup485DialAddr.Value)}" Dim devType As Byte = &H0 Dim devAddress As Byte = &H0 Dim cmd As Byte = &H7 Dim databuff(0) As Byte If TboNetworkAddress.Text = Nothing Then MsgBox($"需要设置的网络地址不能为空!") Exit Sub End If databuff(0) = $"&H{Hex(TboNetworkAddress.Text)}" Dim sendPacket As Byte() = FillRFGatewayDataPackage(address485, devType, devAddress, cmd, databuff) sendPacket = FillPacket(sendPacket) '组包 SendData(sendPacket) Console.WriteLine($"设置网络{ByteToString(sendPacket)}") End Sub ''' ''' 读取设备列表在线状态 ''' ''' ''' Private Sub BtnReadRFDevList_Click(sender As Object, e As EventArgs) Handles BtnReadRFDevList.Click ReadRFDevList() End Sub ''' ''' 读取RF设备列表 ''' Private Sub ReadRFDevList() _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" InitRFConfigInfo() Dim address485 As Byte = $"&H{Hex(Nup485DialAddr.Value)}" Dim devType As Byte = &H0 Dim devAddress As Byte = &H0 Dim cmd As Byte = &H5 Dim sendPacket As Byte() = FillRFGatewayPackage(address485, devType, devAddress, cmd) sendPacket = FillPacket(sendPacket) '组包 SendData(sendPacket) End Sub ''' ''' 全部刷新设备列表委托 ''' Delegate Sub delegate_DevList_Change() ''' ''' 刷新设备列表信息 ''' 全部刷新_委托 ''' Public Sub RefreshDeviceList() _devCount = 1 If InvokeRequired = True Then Dim dev As New delegate_DevList_Change(AddressOf RefreshDeviceList) Me.Invoke(dev, New Object() {}) Else For Each key As String In _devList.Keys GrdRFcfg.AddItem("") GrdRFcfg.Cell(_devCount, DevColName.DevName).Text = _devList(key).DevName GrdRFcfg.Cell(_devCount, DevColName.DevType).Text = _devList(key).DevType GrdRFcfg.Cell(_devCount, DevColName.DevAddr).Text = _devList(key).DevAddr GrdRFcfg.Cell(_devCount, DevColName.DevState).Text = _devList(key).DevState 'GrdRFcfg.Cell(_devCount, DevColName.ControlCount).Text = _devList(key).DevControlCount GrdRFcfg.Cell(_devCount, DevColName.ControlCount).Text = _devList(key).DevControlCount _devCount += 1 Next End If End Sub ''' ''' 局部刷新设备列表委托 ''' ''' ''' ''' Delegate Sub delegate_PairingDevList_Change(devName As String, devType As String, devAddr As String) ''' ''' 刷新设备列表信息 ''' 局部刷新_委托 ''' ''' ''' ''' Public Sub RefreshPairingDeviceList(devName As String, devType As String, devAddr As String) If InvokeRequired = True Then Dim dev As New delegate_PairingDevList_Change(AddressOf RefreshPairingDeviceList) Me.Invoke(dev, New Object() {devName, devType, devAddr}) Else GrdRFcfg.AddItem("") GrdRFcfg.Cell(_devCount, DevColName.DevName).Text = devName GrdRFcfg.Cell(_devCount, DevColName.DevType).Text = devType GrdRFcfg.Cell(_devCount, DevColName.DevAddr).Text = devAddr GrdRFcfg.Cell(_devCount, DevColName.ControlCount).Text = _devList.Item(devName).DevControlCount _devCount += 1 End If End Sub ''' ''' 局部刷新设备列表控制委托 ''' Delegate Sub delegate_ControlDevList_Change(devType As String, devAddr As String) ''' ''' 刷新设备列表控制信息 ''' 局部刷新_委托 ''' Public Sub RefreshDevListControl(devType As String, devAddr As String) Dim valveTxt As String Dim TxtInfo() As String Dim temp() As String Dim tempTxt As String If InvokeRequired = True Then Dim dev As New delegate_ControlDevList_Change(AddressOf RefreshDevListControl) Me.Invoke(dev, New Object() {devType, devAddr}) Else Dim devName As String = DeviceListInfo.GetDevName(devType, devAddr) Try For row As Integer = 1 To GrdRFcfg.Rows - 1 If GrdRFcfg.Cell(row, DevColName.DevType).Text = devType And GrdRFcfg.Cell(row, DevColName.DevAddr).Text = devAddr Then GrdRFcfg.Cell(row, DevColName.ControlCount).Text = _devList(devName).DevControlCount.ToString GrdRFcfg.Cell(row, DevColName.ControlInfo).Text = _devList.Item(devName).DevControlInfo '开关控制阀门信息 If GrdRFcfg.Cell(row, DevColName.DevType).Text = "无线温控" Then valveTxt = _devList.Item(devName).DevControlInfo 'Console.WriteLine($"原始数据:{valveTxt}") TxtInfo = valveTxt.Split(",") 'Console.WriteLine($"切割数据:{TxtInfo(2)}") BtnTempControlValve.Text = TxtInfo(2) '阀门开关 tempTxt = TxtInfo(1) temp = tempTxt.Split(":") LblTempControlValue.Text = temp(1) End If Exit For End If _devList(devName).DevControlCount += 1 Next Catch ex As Exception Console.WriteLine($"上报数据:{ex.Message}") End Try End If End Sub ''' ''' 清空设备列表 ''' ''' ''' Private Sub BtnClearList_Click(sender As Object, e As EventArgs) Handles BtnClearList.Click _devList.Clear() 'ReadRFDevList() InitRFConfigInfo() TabRFFunction.SelectedIndex = 0 End Sub #End Region #Region "窗体功能模块切换" ''' ''' 全局设备地址 ''' 点击后从列表获取 ''' Private _DevAddress As String ''' ''' 初始化功能Page ''' Private Sub InitPage() TabRFFunction.SizeMode = TabSizeMode.Fixed TabRFFunction.ItemSize = New Size(0, 1) End Sub ''' ''' 点击表格刷新Page控件 ''' ''' ''' Private Sub GrdRFcfg_Click(Sender As Object, e As EventArgs) Handles GrdRFcfg.Click If _pairingModel = False Then '配对设备不触发点击事件 If GrdRFcfg.ActiveCell.Row > 0 Then Select Case GrdRFcfg.Cell(GrdRFcfg.ActiveCell.Row, 2).Text Case $"插卡取电" TabRFFunction.SelectedIndex = 1 _DevAddress = GrdRFcfg.Cell(GrdRFcfg.ActiveCell.Row, 3).Text Case $"开关面板" TabRFFunction.SelectedIndex = 2 _DevAddress = GrdRFcfg.Cell(GrdRFcfg.ActiveCell.Row, 3).Text Case $"无线语音" TabRFFunction.SelectedIndex = 3 _DevAddress = GrdRFcfg.Cell(GrdRFcfg.ActiveCell.Row, 3).Text Case $"无线温控" TabRFFunction.SelectedIndex = 4 _DevAddress = GrdRFcfg.Cell(GrdRFcfg.ActiveCell.Row, 3).Text Case $"微信锁" TabRFFunction.SelectedIndex = 5 _DevAddress = GrdRFcfg.Cell(GrdRFcfg.ActiveCell.Row, 3).Text Case $"电动窗帘" TabRFFunction.SelectedIndex = 6 _DevAddress = GrdRFcfg.Cell(GrdRFcfg.ActiveCell.Row, 3).Text Case Else TabRFFunction.SelectedIndex = 0 Console.WriteLine($"当前选择设备为{GrdRFcfg.Cell(GrdRFcfg.ActiveCell.Row, 2).Text}, 未收录此设备类型!") End Select End If End If End Sub #End Region #End Region #Region "RF设备" #Region "回复信息" ''' ''' 回复41 00数据 ''' ''' Public Sub ReplyData(dataBuff As Byte()) _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" Dim data(6) As Byte Dim addr As Byte = dataBuff(0) Dim zero As Byte = &H0 Dim cmd As Byte = &H41 data(0) = addr data(1) = zero data(2) = zero data(3) = zero data(4) = &H1 data(5) = cmd data(6) = zero data(3) = GetSumCheckMod(data) data = FillPacket(data) '组包 SendData(data) '发送数据 'Console.WriteLine($"回复数据:{ByteToString(data)}") End Sub #End Region #Region "插卡取电 & RF-CR-1808" ''' ''' 设置读取扇区标志位 ''' Private _rfInsertSector() As String = {$"读取", $"设置"} ''' ''' 初始化插卡取电信息 ''' Private Sub InitInsertCalorie() CboInsertSet.Items.Clear() CboInsertSet.Items.AddRange(_rfInsertSector) CboInsertSet.SelectedIndex = 0 End Sub ''' ''' 设置读取扇区 ''' ''' ''' Private Sub BtnRFInsertCalorie_Click(sender As Object, e As EventArgs) Handles BtnRFInsertCalorie.Click Dim address485 As Byte = $"&H{Hex(Nup485DialAddr.Value)}" Dim devType As Byte = RFDevType.插卡取电 Dim devAddress As Byte = $"&H{Hex(_DevAddress)}" Dim cmd As Byte = &H19 Dim databuff() As Byte = GetSector() Dim sendPacket As Byte() = FillRFGatewayDataPackage(address485, devType, devAddress, cmd, databuff) sendPacket = FillPacket(sendPacket) '组包 SendData(sendPacket) End Sub ''' ''' 获取扇区值 ''' ''' Private Function GetSector() Dim rfclear(1) As Byte If CboInsertSet.Text = _rfInsertSector(0) Then rfclear(0) = &H0 ElseIf CboInsertSet.Text = _rfInsertSector(1) Then rfclear(0) = &H1 rfclear(1) = $"&H{NudRFSector.Value}" End If Return rfclear End Function ''' ''' 插卡取电回复命令 ''' Public Sub RFInsertCalorieReplyData() Dim address485 As Byte = $"&H{Hex(Nup485DialAddr.Value)}" Dim devType As Byte = RFDevType.插卡取电 Dim devAddress As Byte = $"&H{Hex(_DevAddress)}" Dim cmd As Byte = &H18 Dim databuff(0) As Byte databuff(0) = &H1 Dim sendPacket As Byte() = FillRFGatewayDataPackage(address485, devType, devAddress, cmd, databuff) sendPacket = FillPacket(sendPacket) '组包 SendData(sendPacket) End Sub #End Region #Region "开关面板 & RF_K9S" ''' ''' 渐变时间 ''' Private _GradientTime() As String = {"立即控制", "250ms", "500ms", "1s", "2s", "3s", "4s", "5s"} ''' ''' 延时时间 ''' Private _DelayTime() As String = {"50ms", "100ms", "150ms", "200ms", "250ms"} ''' ''' 初始化选择时间 ''' Private Sub InitTime() '亮灭渐变时间 ComboBox1.Items.Clear() ComboBox1.Items.AddRange(_GradientTime) ComboBox1.SelectedIndex = 0 '本地控制延时时间 ComboBox2.Items.Clear() ComboBox2.Items.AddRange(_DelayTime) ComboBox2.SelectedIndex = 0 End Sub ''' ''' 控件点击变化 ''' ''' Private Sub BtnChange(btn As Control) If btn.Text = $"无" Then btn.Text = $"亮" btn.ForeColor = Color.Red ElseIf btn.Text = $"亮" Then btn.Text = $"灭" btn.ForeColor = Color.Green ElseIf btn.Text = $"灭" Then btn.Text = $"亮" btn.ForeColor = Color.Red End If End Sub ''' ''' 控件状态 ''' ''' ''' Private Function BtnState(btn As Control) As Byte Dim one As Byte If btn.Text = $"无" Then one = &H0 ElseIf btn.Text = $"亮" Then one = &H1 ElseIf btn.Text = $"灭" Then one = &H2 End If Return one End Function '''' '''' 设置指示灯 '''' '''' '''' 'Private Sub BtnSetIndicatorLight_Click(sender As Object, e As EventArgs) Handles BtnSetIndicatorLight.Click ' _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" ' _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" ' Dim address485 As Byte = $"&H{Hex(Nup485DialAddr.Value)}" ' Dim devType As Byte = RFDevType.开关面板 ' Dim devAddress As Byte = $"&H{Hex(_DevAddress)}" ' Dim cmd As Byte = &H6 ' Dim databuff() As Byte = GetSetLight() ' Dim sendPacket As Byte() = FillRFGatewayDataPackage(address485, devType, devAddress, cmd, databuff) ' sendPacket = FillPacket(sendPacket) '组包 ' SendData(sendPacket) 'End Sub ''' ''' 获取设置指示灯的值 ''' ''' Private Function GetSetLight() As Byte() Dim l1 As Byte = BtnState(BtnSwitch1) Dim l2 As Byte = BtnState(BtnSwitch2) Dim l3 As Byte = BtnState(BtnSwitch3) Dim l4 As Byte = BtnState(BtnSwitch4) Dim l5 As Byte = BtnState(BtnSwitch5) Dim l6 As Byte = BtnState(BtnSwitch6) Dim l7 As Byte = BtnState(BtnBacklight) Dim l8 As Byte = &H0 Dim data As New List(Of Byte) Dim cmd As Byte = &H23 Dim bit1 As Byte = GetBit(l1, l2, l3, l4) Dim bit2 As Byte = GetBit(l5, l6, l7, l8) data.Add(cmd) data.Add(bit1) data.Add(bit2) Return data.ToArray End Function ''' ''' 设置指示灯bit ''' 四个Bit的Byte ''' ''' ''' ''' ''' ''' Private Function GetBit(l1 As Byte, l2 As Byte, l3 As Byte, l4 As Byte) As Byte Dim bit As Byte l4 = l4 << 6 l3 = l3 << 4 l2 = l2 << 2 bit = l4 Or l3 Or l2 Or l1 Console.WriteLine($"设置指示灯值:{bit}") Return bit End Function ''' ''' 获取标志位 ''' 八个Bit的Byte ''' ''' ''' ''' ''' ''' ''' ''' ''' ''' Private Function BitSign(b1 As Byte, b2 As Byte, b3 As Byte, b4 As Byte, b5 As Byte, b6 As Byte, b7 As Byte, b8 As Byte) As Byte Dim bit As Byte b8 = b8 << 7 b7 = b7 << 6 b6 = b6 << 5 b5 = b5 << 4 b4 = b4 << 3 b3 = b3 << 2 b2 = b2 << 1 bit = b8 Or b7 Or b6 Or b5 Or b4 Or b3 Or b2 Or b1 Console.WriteLine($"Bit值:{bit}") Return bit End Function ''' ''' 设置亮灭灯 ''' ''' ''' Private Sub BtnSetSwitchLights_Click(sender As Object, e As EventArgs) Handles BtnSetSwitchLights.Click _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" Dim address485 As Byte = $"&H{Hex(Nup485DialAddr.Value)}" Dim devType As Byte = RFDevType.开关面板 Dim devAddress As Byte = $"&H{Hex(_DevAddress)}" Dim cmd As Byte = &H6 Dim databuff() As Byte = GetLightValue() Dim sendPacket As Byte() = FillRFGatewayDataPackage(address485, devType, devAddress, cmd, databuff) sendPacket = FillPacket(sendPacket) '组包 SendData(sendPacket) End Sub ''' ''' 获取亮度值数据 ''' ''' Private Function GetLightValue() Dim g1 As Byte = &H1 Dim gg As Byte = &H0 Dim cmd As Byte = &H24 Dim bit As Byte = BitSign(g1, gg, gg, gg, gg, gg, gg, gg) Dim lightvalue As Byte = $"&H{Hex(NumericUpDown1.Value)}" Dim zero As Byte = &H0 Dim data As New List(Of Byte) data.Add(cmd) data.Add(bit) data.Add(lightvalue) data.Add(zero) data.Add(zero) data.Add(zero) Return data.ToArray End Function ''' ''' 选择状态 ''' ''' ''' Private Function CheckBoxState(Cbo As CheckBox) As Byte Dim one As Byte If Cbo.Checked = False Then one = &H0 ElseIf Cbo.Checked = True Then one = &H1 End If Return one End Function ''' ''' 设置亮灭渐变时间 ''' ''' ''' Private Sub BtnSetGradientTime_Click(sender As Object, e As EventArgs) Handles BtnSetGradientTime.Click _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" Dim address485 As Byte = $"&H{Hex(Nup485DialAddr.Value)}" Dim devType As Byte = RFDevType.开关面板 Dim devAddress As Byte = $"&H{Hex(_DevAddress)}" Dim cmd As Byte = &H6 Dim databuff() As Byte = GetGradientTimeData() Dim sendPacket As Byte() = FillRFGatewayDataPackage(address485, devType, devAddress, cmd, databuff) sendPacket = FillPacket(sendPacket) '组包 SendData(sendPacket) End Sub ''' ''' 获取渐变时间数据 ''' ''' Private Function GetGradientTimeData() As Byte() Dim g3 As Byte = &H1 Dim gg As Byte = &H0 Dim cmd As Byte = &H24 Dim bit As Byte = BitSign(gg, gg, g3, gg, gg, gg, gg, gg) Dim zero As Byte = &H0 Dim gtime As Byte = GetGradientTime() Dim data As New List(Of Byte) data.Add(cmd) data.Add(bit) data.Add(zero) data.Add(zero) data.Add(gtime) data.Add(zero) Return data.ToArray End Function ''' ''' 获取渐变时间 ''' ''' Private Function GetGradientTime() As Byte Dim gtime As Byte Select Case ComboBox1.SelectedIndex Case 0 gtime = &H0 Case 1 gtime = &H1 Case 2 gtime = &H2 Case 3 gtime = &H3 Case 4 gtime = &H4 Case 5 gtime = &H5 Case 6 gtime = &H6 Case 7 gtime = &H7 End Select Return gtime End Function ''' ''' 设置本地控制延时时间 ''' ''' ''' Private Sub BtnSetDelayTime_Click(sender As Object, e As EventArgs) Handles BtnSetDelayTime.Click _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" Dim address485 As Byte = $"&H{Hex(Nup485DialAddr.Value)}" Dim devType As Byte = RFDevType.开关面板 Dim devAddress As Byte = $"&H{Hex(_DevAddress)}" Dim cmd As Byte = &H6 Dim databuff() As Byte = GetDelayTimeData() Dim sendPacket As Byte() = FillRFGatewayDataPackage(address485, devType, devAddress, cmd, databuff) sendPacket = FillPacket(sendPacket) '组包 SendData(sendPacket) End Sub ''' ''' 获取本地控制延时时间 ''' ''' Private Function GetDelayTimeData() As Byte() Dim g4 As Byte = &H1 Dim gg As Byte = &H0 Dim cmd As Byte = &H24 Dim bit As Byte = BitSign(gg, gg, gg, g4, gg, gg, gg, gg) Dim zero As Byte = &H0 Dim dtime As Byte = GetDelayTime() Dim data As New List(Of Byte) data.Add(cmd) data.Add(bit) data.Add(zero) data.Add(zero) data.Add(zero) data.Add(dtime) Return data.ToArray End Function ''' ''' 获取延时时间 ''' ''' Private Function GetDelayTime() As Byte Dim dtime As Byte Select Case ComboBox2.SelectedIndex Case 0 dtime = &H1 Case 1 dtime = &H2 Case 2 dtime = &H3 Case 3 dtime = &H4 Case 4 dtime = &H5 End Select Return dtime End Function ''' ''' 本地控制开关 ''' Private _switchControl As Boolean = False ''' ''' 设置本地控制开关 ''' ''' ''' Private Sub BtnSetLocalControl_Click(sender As Object, e As EventArgs) Handles BtnSetLocalControl.Click _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" Dim address485 As Byte = $"&H{Hex(Nup485DialAddr.Value)}" Dim devType As Byte = RFDevType.开关面板 Dim devAddress As Byte = $"&H{Hex(_DevAddress)}" Dim cmd As Byte = &H6 Dim databuff() As Byte = GetLocalControl() Dim sendPacket As Byte() = FillRFGatewayDataPackage(address485, devType, devAddress, cmd, databuff) sendPacket = FillPacket(sendPacket) '组包 SendData(sendPacket) End Sub ''' ''' 获取本地控制开关数据 ''' ''' Private Function GetLocalControl() Dim g5 As Byte If _switchControl = False Then _switchControl = True g5 = &H0 ElseIf _switchControl = True Then _switchControl = False g5 = &H1 End If Dim zero As Byte = &H0 Dim cmd As Byte = &H24 Dim bit As Byte = BitSign(zero, zero, zero, zero, g5, zero, zero, zero) Dim switch As Byte = GetSwitch() Dim data As New List(Of Byte) data.Add(cmd) data.Add(bit) data.Add(zero) data.Add(zero) data.Add(zero) data.Add(zero) data.Add(switch) Return data.ToArray End Function ''' ''' 获取本地控制开关 ''' ''' Private Function GetSwitch() Dim switch As Byte If BtnSetLocalControl.ForeColor = Color.Green Then BtnSetLocalControl.ForeColor = Color.Red switch = &H1 ElseIf BtnSetLocalControl.ForeColor = Color.Red Then BtnSetLocalControl.ForeColor = Color.Green switch = &H0 End If Return switch End Function ''' ''' 读取指示灯信息 ''' ''' ''' Private Sub BtnReadLigthInfo_Click(sender As Object, e As EventArgs) Handles BtnReadLigthInfo.Click _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" Dim address485 As Byte = $"&H{Hex(Nup485DialAddr.Value)}" Dim devType As Byte = RFDevType.开关面板 Dim devAddress As Byte = $"&H{Hex(_DevAddress)}" Dim cmd As Byte = &H6 Dim databuff(1) As Byte databuff(0) = &H25 databuff(1) = &H0 Dim sendPacket As Byte() = FillRFGatewayDataPackage(address485, devType, devAddress, cmd, databuff) sendPacket = FillPacket(sendPacket) '组包 SendData(sendPacket) End Sub ''' ''' 设置指示灯 ''' Private Sub SetIndicatorLight() _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" Dim address485 As Byte = $"&H{Hex(Nup485DialAddr.Value)}" Dim devType As Byte = RFDevType.开关面板 Dim devAddress As Byte = $"&H{Hex(_DevAddress)}" Dim cmd As Byte = &H41 Dim databuff() As Byte = GetIndicatorLightData() Dim sendPacket As Byte() = FillRFGatewayDataPackage(address485, devType, devAddress, cmd, databuff) sendPacket = FillPacket(sendPacket) '组包 SendData(sendPacket) End Sub ''' ''' 获取指示灯数据 ''' ''' Private Function GetIndicatorLightData() As Byte() Dim btn1 As Byte = BtnState(BtnSwitch1) Dim btn2 As Byte = BtnState(BtnSwitch2) Dim btn3 As Byte = BtnState(BtnSwitch3) Dim btn4 As Byte = BtnState(BtnSwitch4) Dim btn5 As Byte = BtnState(BtnSwitch5) Dim btn6 As Byte = BtnState(BtnSwitch6) Dim btn7 As Byte = BtnState(BtnBacklight) Dim zero As Byte = &H0 Dim light1 As Byte = GetBit(btn1, btn2, btn3, btn4) Dim light2 As Byte = GetBit(btn5, btn6, btn7, zero) Dim light3 As Byte = GetBit(zero, zero, zero, zero) Dim data As New List(Of Byte) data.Add(zero) data.Add(light1) data.Add(light2) data.Add(light3) Return data.ToArray End Function Private Sub BtnSwitch1_Click(sender As Object, e As EventArgs) Handles BtnSwitch1.Click BtnChange(BtnSwitch1) BtnState(BtnSwitch1) Console.WriteLine($"按键1:{BtnState(BtnSwitch1)}") SetIndicatorLight() End Sub Private Sub BtnSwitch2_Click(sender As Object, e As EventArgs) Handles BtnSwitch2.Click BtnChange(BtnSwitch2) BtnState(BtnSwitch2) Console.WriteLine($"按键2:{BtnState(BtnSwitch2)}") SetIndicatorLight() End Sub Private Sub BtnSwitch3_Click(sender As Object, e As EventArgs) Handles BtnSwitch3.Click BtnChange(BtnSwitch3) BtnState(BtnSwitch3) Console.WriteLine($"按键3:{BtnState(BtnSwitch3)}") SetIndicatorLight() End Sub Private Sub BtnSwitch4_Click(sender As Object, e As EventArgs) Handles BtnSwitch4.Click BtnChange(BtnSwitch4) BtnState(BtnSwitch4) Console.WriteLine($"按键4:{BtnState(BtnSwitch4)}") SetIndicatorLight() End Sub Private Sub BtnSwitch5_Click(sender As Object, e As EventArgs) Handles BtnSwitch5.Click BtnChange(BtnSwitch5) BtnState(BtnSwitch5) Console.WriteLine($"按键5:{BtnState(BtnSwitch5)}") SetIndicatorLight() End Sub Private Sub BtnSwitch6_Click(sender As Object, e As EventArgs) Handles BtnSwitch6.Click BtnChange(BtnSwitch6) BtnState(BtnSwitch6) Console.WriteLine($"按键6:{BtnState(BtnSwitch6)}") SetIndicatorLight() End Sub Private Sub BtnBacklight_Click(sender As Object, e As EventArgs) Handles BtnBacklight.Click BtnChange(BtnBacklight) BtnState(BtnBacklight) Console.WriteLine($"背光灯:{BtnState(BtnBacklight)}") SetIndicatorLight() End Sub Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged If CheckBox1.Checked = True Then Label6.Enabled = False Label13.Enabled = False Label14.Enabled = False NumericUpDown1.Enabled = False ComboBox1.Enabled = False ComboBox2.Enabled = False BtnReadLigthInfo.Enabled = False BtnSetLocalControl.Enabled = False BtnSetSwitchLights.Enabled = False BtnSetGradientTime.Enabled = False BtnSetDelayTime.Enabled = False ElseIf CheckBox1.Checked = False Then Label6.Enabled = True Label13.Enabled = True Label14.Enabled = True NumericUpDown1.Enabled = True ComboBox1.Enabled = True ComboBox2.Enabled = True BtnReadLigthInfo.Enabled = True BtnSetLocalControl.Enabled = True BtnSetSwitchLights.Enabled = True BtnSetGradientTime.Enabled = True BtnSetDelayTime.Enabled = True End If End Sub #End Region #Region "无线语音 & RF_VC2006" ''' ''' 语音模块配置下发 ''' ''' ''' Private Sub BtnForwardingData_Click(sender As Object, e As EventArgs) Handles BtnForwardingData.Click If String.IsNullOrWhiteSpace(TxtForwardingData.Text) = True Then MsgBox($"请先输入语音要转发的数据!") Exit Sub End If _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" Dim address485 As Byte = $"&H{Hex(Nup485DialAddr.Value)}" Dim devType As Byte = RFDevType.无线语音 Dim devAddress As Byte = $"&H{Hex(_DevAddress)}" Dim cmd As Byte = &H6 Dim cmd1 As Byte = &H27 Dim data() As Byte = FrmRCU.CuttingSendData(TxtForwardingData.Text) Dim databuff As New List(Of Byte) databuff.Add(cmd1) databuff.AddRange(data) Dim sendPacket As Byte() = FillRFGatewayDataPackage(address485, devType, devAddress, cmd, databuff.ToArray) sendPacket = FillPacket(sendPacket) '组包 SendData(sendPacket) End Sub #End Region #Region "无线温控 & RF_KP_WKA8T" ''' ''' 初始化无线温控 ''' Private Sub InitTempControl() LblTempControlValue.ForeColor = Color.Gold LblDegree.ForeColor = Color.Gold BtnTempControlSwitch.ForeColor = Color.Green BtnTempControlSwitch.Text = $"开" LblTempControlHigh.ForeColor = Color.DimGray LblTempControlCentre.ForeColor = Color.DimGray LblTempControlLow.ForeColor = Color.DimGray LblTempControlAuto.ForeColor = Color.DimGray LblTempControlCold.ForeColor = Color.DimGray LblTempControlHot.ForeColor = Color.DimGray LblTempControlSupply.ForeColor = Color.DimGray BtnTempControlAdd.ForeColor = Color.Gray BtnTempControlMinus.ForeColor = Color.Gray BtnTempControlVelocity.ForeColor = Color.Gray BtnTempControlModel.ForeColor = Color.Gray BtnTempControlValve.ForeColor = Color.Gray BtnTempControlAdd.Enabled = False BtnTempControlMinus.Enabled = False BtnTempControlVelocity.Enabled = False BtnTempControlModel.Enabled = False BtnTempControlValve.Enabled = False End Sub ''' ''' 空调开关控制状态 ''' Private Sub TempControlControlState() If BtnTempControlSwitch.Text = "开" Then BtnTempControlSwitch.Text = "关" BtnTempControlSwitch.ForeColor = Color.Red BtnTempControlAdd.Enabled = True BtnTempControlMinus.Enabled = True BtnTempControlVelocity.Enabled = True BtnTempControlModel.Enabled = True BtnTempControlAdd.ForeColor = Color.Green BtnTempControlMinus.ForeColor = Color.Green BtnTempControlVelocity.ForeColor = Color.Green BtnTempControlModel.ForeColor = Color.Green LblTempControlHigh.ForeColor = Color.Green LblTempControlCentre.ForeColor = Color.Red LblTempControlLow.ForeColor = Color.Red LblTempControlAuto.ForeColor = Color.Red LblTempControlCold.ForeColor = Color.Green LblTempControlHot.ForeColor = Color.Red LblTempControlSupply.ForeColor = Color.Red ElseIf BtnTempControlSwitch.Text = "关" Then BtnTempControlSwitch.Text = "开" BtnTempControlSwitch.ForeColor = Color.Green BtnTempControlAdd.Enabled = False BtnTempControlMinus.Enabled = False BtnTempControlVelocity.Enabled = False BtnTempControlModel.Enabled = False LblTempControlHigh.ForeColor = Color.DimGray LblTempControlCentre.ForeColor = Color.DimGray LblTempControlLow.ForeColor = Color.DimGray LblTempControlAuto.ForeColor = Color.DimGray LblTempControlCold.ForeColor = Color.DimGray LblTempControlHot.ForeColor = Color.DimGray LblTempControlSupply.ForeColor = Color.DimGray End If End Sub ''' ''' 无线温控风速切换 ''' Private Sub TempControlVelocity() If LblTempControlHigh.ForeColor = Color.Green Then LblTempControlHigh.ForeColor = Color.Red LblTempControlCentre.ForeColor = Color.Green LblTempControlLow.ForeColor = Color.Red LblTempControlAuto.ForeColor = Color.Red ElseIf LblTempControlCentre.ForeColor = Color.Green Then LblTempControlHigh.ForeColor = Color.Red LblTempControlCentre.ForeColor = Color.Red LblTempControlLow.ForeColor = Color.Green LblTempControlAuto.ForeColor = Color.Red ElseIf LblTempControlLow.ForeColor = Color.Green Then LblTempControlHigh.ForeColor = Color.Red LblTempControlCentre.ForeColor = Color.Red LblTempControlLow.ForeColor = Color.Red LblTempControlAuto.ForeColor = Color.Green ElseIf LblTempControlAuto.ForeColor = Color.Green Then LblTempControlHigh.ForeColor = Color.Green LblTempControlCentre.ForeColor = Color.Red LblTempControlLow.ForeColor = Color.Red LblTempControlAuto.ForeColor = Color.Red End If End Sub ''' ''' 无线温控模式切换 ''' Private Sub TempControlModel() If LblTempControlCold.ForeColor = Color.Green Then LblTempControlCold.ForeColor = Color.Red LblTempControlHot.ForeColor = Color.Green LblTempControlSupply.ForeColor = Color.Red ElseIf LblTempControlHot.ForeColor = Color.Green Then LblTempControlCold.ForeColor = Color.Red LblTempControlHot.ForeColor = Color.Red LblTempControlSupply.ForeColor = Color.Green ElseIf LblTempControlSupply.ForeColor = Color.Green Then LblTempControlCold.ForeColor = Color.Green LblTempControlHot.ForeColor = Color.Red LblTempControlSupply.ForeColor = Color.Red End If End Sub ''' ''' 无线温控 ''' Private Sub TempControl() _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" Dim address485 As Byte = $"&H{Hex(Nup485DialAddr.Value)}" Dim devType As Byte = RFDevType.无线温控 Dim devAddress As Byte = $"&H{Hex(_DevAddress)}" Dim cmd As Byte = &H41 Dim databuff() As Byte = TempControlDataBit() Dim sendPacket As Byte() = FillRFGatewayDataPackage(address485, devType, devAddress, cmd, databuff) sendPacket = FillPacket(sendPacket) '组包 SendData(sendPacket) End Sub ''' ''' 获取温控数据位 ''' ''' Private Function TempControlDataBit() As Byte() Dim dataL As Byte = $"&H{Hex(LblTempControlValue.Text)}" Dim dataH As Byte = DataHighBit() Dim databuff(2) As Byte databuff(0) = &H0 databuff(1) = dataL databuff(2) = dataH Return databuff End Function ''' ''' 温控数据高位Bit ''' ''' Private Function DataHighBit() Dim valveBit As Byte = ValveData() Dim velocityBit As Byte = VelocityData() Dim modelBit As Byte = ModelData() Dim switchBit As Byte = SwitchData() Dim dataH As Byte = GetBit(valveBit, velocityBit, modelBit, switchBit) Return dataH End Function ''' ''' 获取阀门开关 ''' ''' Private Function ValveData() Dim valvesBit As Byte If BtnTempControlValve.Text = $"关阀" Then valvesBit = &H2 ElseIf BtnTempControlValve.Text = $"开阀" Then valvesBit = &H1 End If Return valvesBit End Function ''' ''' 获取风速数据 ''' ''' Private Function VelocityData() Dim velocityBit As Byte If LblTempControlHigh.ForeColor = Color.Green Then velocityBit = &H3 ElseIf LblTempControlCentre.ForeColor = Color.Green Then velocityBit = &H2 ElseIf LblTempControlLow.ForeColor = Color.Green Then velocityBit = &H1 ElseIf LblTempControlAuto.ForeColor = Color.Green Then velocityBit = &H0 End If Return velocityBit End Function ''' ''' 获取模式数据 ''' ''' Private Function ModelData() Dim modelBit As Byte If LblTempControlCold.ForeColor = Color.Green Then modelBit = &H1 ElseIf LblTempControlHot.ForeColor = Color.Green Then modelBit = &H2 ElseIf LblTempControlSupply.ForeColor = Color.Green Then modelBit = &H3 End If Return modelBit End Function ''' ''' 获取开关数据 ''' ''' Private Function SwitchData() Dim switchBit As Byte If BtnTempControlSwitch.Text = $"关" Then switchBit = &H1 ElseIf BtnTempControlSwitch.Text = $"开" Then switchBit = &H2 End If Return switchBit End Function ''' ''' 无线温控加温度 ''' ''' ''' Private Sub BtnTempControlAdd_Click(sender As Object, e As EventArgs) Handles BtnTempControlAdd.Click If LblTempControlValue.Text >= "16" AndAlso LblTempControlValue.Text <= "32" Then LblTempControlValue.Text = CStr(CInt(LblTempControlValue.Text) + 1) End If TempControl() End Sub ''' ''' 无线温控减温度 ''' ''' ''' Private Sub BtnTempControlMinus_Click(sender As Object, e As EventArgs) Handles BtnTempControlMinus.Click If LblTempControlValue.Text >= "16" AndAlso LblTempControlValue.Text <= "32" Then LblTempControlValue.Text = CStr(CInt(LblTempControlValue.Text) - 1) End If TempControl() End Sub ''' ''' 无线温控开关 ''' ''' ''' Private Sub BtnTempControlSwitch_Click(sender As Object, e As EventArgs) Handles BtnTempControlSwitch.Click If BtnTempControlSwitch.Text = "开" Then TempControlControlState() TempControl() ElseIf BtnTempControlSwitch.Text = "关" Then TempControl() TempControlControlState() End If End Sub ''' ''' 无线温控风速 ''' ''' ''' Private Sub BtnTempControlVelocity_Click(sender As Object, e As EventArgs) Handles BtnTempControlVelocity.Click TempControlVelocity() TempControl() End Sub ''' ''' 无线温控模式 ''' ''' ''' Private Sub BtnTempControlModel_Click(sender As Object, e As EventArgs) Handles BtnTempControlModel.Click TempControlModel() TempControl() End Sub ''' ''' 无线温控阀门 ''' ''' ''' Private Sub BtnTempControlValve_Click(sender As Object, e As EventArgs) Handles BtnTempControlValve.Click 'TempControlValve() TempControl() End Sub ''' ''' 设置温差 ''' ''' ''' Private Sub BtnSetTemperatureDiff_Click(sender As Object, e As EventArgs) Handles BtnSetTemperatureDiff.Click _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" Dim address485 As Byte = $"&H{Hex(Nup485DialAddr.Value)}" Dim devType As Byte = RFDevType.无线温控 Dim devAddress As Byte = $"&H{Hex(_DevAddress)}" Dim cmd As Byte = &H6 Dim databuff(2) As Byte databuff(0) = &H29 databuff(1) = &H1 databuff(2) = $"&H{Hex(NudTempDiffValue.Value)}" Dim sendPacket As Byte() = FillRFGatewayDataPackage(address485, devType, devAddress, cmd, databuff) sendPacket = FillPacket(sendPacket) '组包 SendData(sendPacket) End Sub ''' ''' 读取温控器设置 ''' ''' ''' Private Sub BtnReadThermostatSettings_Click(sender As Object, e As EventArgs) Handles BtnReadThermostatSettings.Click _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" Dim address485 As Byte = $"&H{Hex(Nup485DialAddr.Value)}" Dim devType As Byte = RFDevType.无线温控 Dim devAddress As Byte = $"&H{Hex(_DevAddress)}" Dim cmd As Byte = &H6 Dim databuff(1) As Byte databuff(0) = &H2A databuff(1) = &H0 Dim sendPacket As Byte() = FillRFGatewayDataPackage(address485, devType, devAddress, cmd, databuff) sendPacket = FillPacket(sendPacket) '组包 SendData(sendPacket) End Sub #End Region #Region "微信锁 & RF_RL1705" ''' ''' 是否设置 ''' Private Sub IsSet() CboIsSet.Checked = True BtnSetWeChat.Enabled = False End Sub ''' ''' 是否设置唤醒时间 ''' ''' ''' Private Sub CboIsSet_CheckedChanged(sender As Object, e As EventArgs) Handles CboIsSet.CheckedChanged If CboIsSet.Checked = True Then BtnSetWeChat.Enabled = False ElseIf CboIsSet.Checked = False Then BtnSetWeChat.Enabled = True End If End Sub ''' ''' 设置的唤醒时间 ''' Private _setTime() As String = {"2s", "4s", "8s", "16s", "32s"} Private Sub InitInfoWeChat() CboSetTime.Items.Clear() CboSetTime.Items.AddRange(_setTime) CboSetTime.SelectedIndex = 0 End Sub ''' ''' 微信锁设置唤醒时间命令 ''' ''' ''' Private Sub Button1_Click(sender As Object, e As EventArgs) Handles BtnSetWeChat.Click _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" Dim address485 As Byte = $"&H{Hex(Nup485DialAddr.Value)}" Dim devType As Byte = RFDevType.微信锁 Dim devAddress As Byte = $"&H{Hex(_DevAddress)}" Dim cmd As Byte = &H6 Dim databuff() As Byte = GetTime() Dim sendPacket As Byte() = FillRFGatewayDataPackage(address485, devType, devAddress, cmd, databuff) sendPacket = FillPacket(sendPacket) '组包 SendData(sendPacket) End Sub ''' ''' 获取唤醒时间 ''' ''' Private Function GetTime() As Byte() Dim databuff(1) As Byte databuff(0) = &H30 Select Case CboSetTime.SelectedIndex Case 0 databuff(1) = &H1 Case 1 databuff(1) = &H2 Case 2 databuff(1) = &H3 Case 3 databuff(1) = &H4 Case 4 databuff(1) = &H5 End Select Return databuff End Function ''' ''' 微信锁开锁控制命令 ''' ''' ''' Private Sub BtnOpenLock_Click(sender As Object, e As EventArgs) Handles BtnOpenLock.Click _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" Dim address485 As Byte = $"&H{Hex(Nup485DialAddr.Value)}" Dim devType As Byte = RFDevType.微信锁 Dim devAddress As Byte = $"&H{Hex(_DevAddress)}" Dim cmd As Byte = &H6 Dim databuff(1) As Byte databuff(0) = &H31 databuff(1) = &H1 Dim sendPacket As Byte() = FillRFGatewayDataPackage(address485, devType, devAddress, cmd, databuff) sendPacket = FillPacket(sendPacket) '组包 SendData(sendPacket) End Sub ''' ''' 微信锁状态读取命令 ''' ''' ''' Private Sub BtnReadLockState_Click(sender As Object, e As EventArgs) Handles BtnReadLockState.Click _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" Dim address485 As Byte = $"&H{Hex(Nup485DialAddr.Value)}" Dim devType As Byte = RFDevType.微信锁 Dim devAddress As Byte = $"&H{Hex(_DevAddress)}" Dim cmd As Byte = &H6 Dim databuff(1) As Byte databuff(0) = &H32 databuff(1) = &H1 Dim sendPacket As Byte() = FillRFGatewayDataPackage(address485, devType, devAddress, cmd, databuff) sendPacket = FillPacket(sendPacket) '组包 SendData(sendPacket) End Sub #End Region #Region "电动窗帘 & RF_EC2012" ''' ''' 窗帘开启 ''' ''' ''' Private Sub BtnCurtainStart_Click(sender As Object, e As EventArgs) Handles BtnCurtainStart.Click _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" BtnCurtainStart.ForeColor = Color.Green BtnCurtainStop.ForeColor = Color.Black BtnCurtainClose.ForeColor = Color.Black Dim data() As Byte = {&H55, &HAA, &HAA, &H55, &H30, &H22, &H2, &HA, &HA, &H0, &H0, &H0, &H1, &H1, &H0, &H1, &H1, &H1, &H0, &H0, &H0, &H0} CurtainSendData(data) End Sub ''' ''' 窗帘停止 ''' ''' ''' Private Sub BtnCurtainStop_Click(sender As Object, e As EventArgs) Handles BtnCurtainStop.Click _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" BtnCurtainStart.ForeColor = Color.Black BtnCurtainStop.ForeColor = Color.Green BtnCurtainClose.ForeColor = Color.Black Dim data() As Byte = {&H55, &HAA, &HAA, &H55, &H31, &H22, &H2, &HA, &HA, &H0, &H0, &H0, &H1, &H2, &H0, &H1, &H1, &H1, &H0, &H0, &H0, &H0} CurtainSendData(data) End Sub ''' ''' 窗帘关闭 ''' ''' ''' Private Sub BtnCurtainClose_Click(sender As Object, e As EventArgs) Handles BtnCurtainClose.Click _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" BtnCurtainStart.ForeColor = Color.Black BtnCurtainStop.ForeColor = Color.Black BtnCurtainClose.ForeColor = Color.Green Dim data() As Byte = {&H55, &HAA, &HAA, &H55, &H2F, &H22, &H2, &HA, &HA, &H0, &H0, &H0, &H1, &H0, &H0, &H1, &H1, &H1, &H0, &H0, &H0, &H0} CurtainSendData(data) End Sub ''' ''' 电动窗帘转发数据 ''' ''' ''' Private Sub BtnCurtainData_Click(sender As Object, e As EventArgs) Handles BtnCurtainData.Click If String.IsNullOrWhiteSpace(TxtCurtainData.Text) = True Then MsgBox($"请先输入电动窗帘要转发的数据!") Exit Sub End If _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" Dim data() As Byte = FrmRCU.CuttingSendData(TxtCurtainData.Text) CurtainSendData(data) End Sub ''' ''' 窗帘发送数据 ''' Private Sub CurtainSendData(data() As Byte) _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" Dim address485 As Byte = $"&H{Hex(Nup485DialAddr.Value)}" Dim devType As Byte = RFDevType.电动窗帘 Dim devAddress As Byte = $"&H{Hex(_DevAddress)}" Dim cmd As Byte = &H6 Dim cmd1 As Byte = $"&H{Hex(TextBox1.Text)}" Dim databuff As New List(Of Byte) databuff.Add(cmd1) databuff.AddRange(data) Dim sendPacket As Byte() = FillRFGatewayDataPackage(address485, devType, devAddress, cmd, databuff.ToArray) sendPacket = FillPacket(sendPacket) '组包 SendData(sendPacket) End Sub #End Region #Region "设备通讯测试" ''' ''' 一键测试 ''' ''' ''' Private Sub BtnAKeyTest_Click(sender As Object, e As EventArgs) Handles BtnAKeyTest.Click Dim devType As Byte Dim devAddress As Byte If GrdRFcfg.Rows > 1 Then AppendTipText($"开始一键通讯测试信息......{vbCrLf}", Color.Green) For i = 1 To GrdRFcfg.Rows - 1 devType = GetDevType(GrdRFcfg.Cell(i, DevColName.DevType).Text) devAddress = $"&H{Hex(GrdRFcfg.Cell(i, DevColName.DevAddr).Text)}" _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" Dim address485 As Byte = $"&H{Hex(Nup485DialAddr.Value)}" Dim cmd As Byte = &H6 Dim data(0) As Byte data(0) = &H6 Dim sendPacket As Byte() = FillRFGatewayDataPackage(address485, devType, devAddress, cmd, data) sendPacket = FillPacket(sendPacket) '组包 SendData(sendPacket) PauseWait(10000) Next Else MsgBox($"请先刷新设备列表!") End If End Sub ''' ''' 获取设备类型 ''' ''' ''' Private Function GetDevType(txt As String) As Byte Dim devType As Byte Select Case txt Case $"插卡取电" devType = &H5 Case $"开关面板" devType = &H7 Case $"无线语音" devType = &H8 Case $"无线温控" devType = &H9 Case $"微信锁" devType = &HA Case $"电动窗帘" devType = &HB End Select Return devType End Function ''' ''' 设备通讯测试_插卡取电 ''' ''' ''' Private Sub BtnCommTestInsertCard_Click(sender As Object, e As EventArgs) Handles BtnCommTestInsertCard.Click Dim devType As Byte = RFDevType.插卡取电 DevCommTest(devType) End Sub ''' ''' 设备通讯测试_开关面板 ''' ''' ''' Private Sub BtnCommTestSwitch_Click(sender As Object, e As EventArgs) Handles BtnCommTestSwitch.Click Dim devType As Byte = RFDevType.开关面板 DevCommTest(devType) End Sub ''' ''' 设备通讯测试_无线语音 ''' ''' ''' Private Sub BtnCommTestVoice_Click(sender As Object, e As EventArgs) Handles BtnCommTestVoice.Click Dim devType As Byte = RFDevType.无线语音 DevCommTest(devType) End Sub ''' ''' 设备通讯测试_无线温控 ''' ''' ''' Private Sub BtnCommTestTemp_Click(sender As Object, e As EventArgs) Handles BtnCommTestTemp.Click Dim devType As Byte = RFDevType.无线温控 DevCommTest(devType) End Sub ''' ''' 设备通讯测试_微信锁 ''' ''' ''' Private Sub BtnCommTestWeChat_Click(sender As Object, e As EventArgs) Handles BtnCommTestWeChat.Click Dim devType As Byte = RFDevType.微信锁 DevCommTest(devType) End Sub ''' ''' 网关通讯测试_电动窗帘 ''' ''' ''' Private Sub BtnCommTestCurtain_Click(sender As Object, e As EventArgs) Handles BtnCommTestCurtain.Click Dim devType As Byte = RFDevType.电动窗帘 DevCommTest(devType) End Sub ''' ''' 设备通讯测试 ''' ''' Private Sub DevCommTest(devType As Byte) _port485 = $"&H{Hex(FrmRCU.NudSerialAppPort.Value)}" _timeouts = $"&H{Hex(FrmRCU.NudTimeOut3.Value)}" Dim address485 As Byte = $"&H{Hex(Nup485DialAddr.Value)}" Dim devAddress As Byte = $"&H{Hex(_DevAddress)}" Dim cmd As Byte = &H6 Dim data(0) As Byte data(0) = &H6 Dim sendPacket As Byte() = FillRFGatewayDataPackage(address485, devType, devAddress, cmd, data) AppendTipText($"开始询问通讯测试信息......{vbCrLf}", Color.Green) sendPacket = FillPacket(sendPacket) '组包 SendData(sendPacket) End Sub ''' ''' 刷新通讯测试信息 ''' ''' ''' ''' Delegate Sub delegate_CommTest_Refresh(devType As String, devAddr As String, TestValue As String) ''' ''' 刷新通讯测试信息_委托 ''' ''' ''' ''' Public Sub RefreshCommTest(devType As String, devAddr As String, TestValue As String) If InvokeRequired = True Then Dim dev As New delegate_CommTest_Refresh(AddressOf RefreshCommTest) Me.Invoke(dev, New Object() {devType, devAddr, TestValue}) Else Dim devName As String = DeviceListInfo.GetDevName(devType, devAddr) Dim txtColor As Color = GetCommTestTextColor(TestValue) Dim txtValue As String = $"{TestValue}%" Select Case devType Case $"插卡取电" LblCommTestInsertCard.ForeColor = txtColor LblCommTestInsertCard.Text = $"通讯成功率 {TestValue}%" Case $"开关面板" LblCommTestSwitch.ForeColor = txtColor LblCommTestSwitch.Text = $"通讯成功率 {TestValue}%" Case $"无线语音" LblCommTestVoice.ForeColor = txtColor LblCommTestVoice.Text = $"通讯成功率 {TestValue}%" Case $"无线温控" LblCommTestTemp.ForeColor = txtColor LblCommTestTemp.Text = $"通讯成功率 {TestValue}%" Case $"微信锁" LblCommTestWeChat.ForeColor = txtColor LblCommTestWeChat.Text = $"通讯成功率 {TestValue}%" Case $"电动窗帘" LblCommTestCurtain.ForeColor = txtColor LblCommTestCurtain.Text = $"通讯成功率 {TestValue}%" Case Else Console.WriteLine($"未知设备:{TestValue} %") End Select Try For row As Integer = 1 To GrdRFcfg.Rows - 1 If GrdRFcfg.Cell(row, DevColName.DevType).Text = devType And GrdRFcfg.Cell(row, DevColName.DevAddr).Text = devAddr Then GrdRFcfg.Cell(row, DevColName.DevTest).ForeColor = txtColor GrdRFcfg.Cell(row, DevColName.DevTest).Text = txtValue End If Next Catch ex As Exception MsgBox($"测试失败!原因:{ex.Message}") End Try End If End Sub ''' ''' 获取通讯测试文本颜色 ''' ''' ''' Private Function GetCommTestTextColor(devName As String) As Color Dim txtColor As Color If devName >= $"80" Then txtColor = Color.Green ElseIf devName >= $"40" And devName < $"80" Then txtColor = Color.Yellow ElseIf devName < $"40" Then txtColor = Color.Red End If Return txtColor End Function #End Region #End Region #Region "添加记录" ''' ''' 添加记录 ''' ''' ''' Private Sub AppendTipText(recordString As String, col As Color) FrmRCU.AppendTipText(recordString, col) 'If InvokeRequired Then ' Invoke(New Action(Sub() ' FrmRCU.AppendTipText(recordString, col) ' End Sub)) 'Else ' FrmRCU.AppendTipText(recordString, col) 'End If End Sub Private Sub FrmRFFunction_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing My.Settings.CurtainsCMD = TextBox1.Text My.Settings.CurtainsData = TxtCurtainData.Text End Sub #End Region End Class