初始化

This commit is contained in:
2025-12-11 10:59:57 +08:00
commit 5bae5bc88c
309 changed files with 65739 additions and 0 deletions

BIN
RCU-10/.vs/RCU/v16/.suo Normal file

Binary file not shown.

25
RCU-10/RCU.sln Normal file
View File

@@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30104.148
MinimumVisualStudioVersion = 10.0.40219.1
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "RCU", "RCU\RCU.vbproj", "{DCDFB337-7F07-44F0-A269-2D23D487D50E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{DCDFB337-7F07-44F0-A269-2D23D487D50E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DCDFB337-7F07-44F0-A269-2D23D487D50E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DCDFB337-7F07-44F0-A269-2D23D487D50E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DCDFB337-7F07-44F0-A269-2D23D487D50E}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {CBD2CF25-83C9-4279-9883-21674530169A}
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,11 @@
Namespace ADODB
Friend Class Recordset
Friend Function Fields(v As String) As Object
Throw New NotImplementedException()
End Function
Friend Sub Close()
Throw New NotImplementedException()
End Sub
End Class
End Namespace

54
RCU-10/RCU/App.config Normal file
View File

@@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="RCU.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
<userSettings>
<RCU.My.MySettings>
<setting name="CBoLongIP" serializeAs="String">
<value>192.168.1.1</value>
</setting>
<setting name="NumRemotePort" serializeAs="String">
<value>1024</value>
</setting>
<setting name="NumLocalPort" serializeAs="String">
<value>5533</value>
</setting>
<setting name="CBoBaud" serializeAs="String">
<value>9600</value>
</setting>
<setting name="CBoMode" serializeAs="String">
<value>正常模式</value>
</setting>
<setting name="CboRFDevType" serializeAs="String">
<value>RS485透传模块</value>
</setting>
<setting name="CboCMD15Buad" serializeAs="String">
<value>9600</value>
</setting>
<setting name="rfcmd14Way" serializeAs="String">
<value>不控制</value>
</setting>
<setting name="CboRFCMD21ControlMode" serializeAs="String">
<value>向上渐变调光</value>
</setting>
<setting name="CboSerialBaud" serializeAs="String">
<value>9600</value>
</setting>
<setting name="CboSerialPort" serializeAs="String">
<value>COM1</value>
</setting>
<setting name="CurtainsCMD" serializeAs="String">
<value>27</value>
</setting>
<setting name="CurtainsData" serializeAs="String">
<value>0</value>
</setting>
</RCU.My.MySettings>
</userSettings>
</configuration>

View File

@@ -0,0 +1,2 @@
Namespace My
End Namespace

View File

@@ -0,0 +1,15 @@

Namespace Database.Base
''' <summary>
''' Contains the schema of a single DB column.
''' </summary>
Public Class ColumnSchema
Public ColumnName As String
Public ColumnType As String
Public Length As Integer
Public IsNullable As Boolean
Public DefaultValue As String
Public IsIdentity As Boolean
Public IsCaseSensitivity As Boolean? = Nothing
End Class
End NameSpace

View File

@@ -0,0 +1,297 @@
Imports System.Text
Namespace Database.Base
Public MustInherit Class CommandHelpers
Public Overridable Function Search(param As SearchParams) As String
Dim searchString As New StringBuilder
'基础查询
searchString.Append("Select")
searchString.Append(" ")
searchString.Append($"{String.Join(",", param.SearchColNames)}")
searchString.Append(" ")
searchString.Append("From")
searchString.Append(" ")
searchString.Append($"`{param.TableName}`")
'筛选条件
If param.SearchCondition IsNot Nothing Then
If param.SearchCondition.Count > 0 Then
searchString.Append(" ")
searchString.Append("Where")
For i As Integer = 0 To param.SearchCondition.Count - 1
If i > 0 Then
searchString.Append(" ")
searchString.Append(param.SearchCondition(i).LogicPrevious.ToString())
End If
searchString.Append(param.SearchCondition(i).ToString())
Next
End If
End If
'排序与排序方式
If param.OrderType <> SearchParams.OrderTypeEnum.None Then
searchString.Append($" Order By {param.OrderColName} {param.OrderType}")
End If
'返回结果行数
If param.Limit > -1 Then
searchString.Append($" Limit {param.Limit}")
End If
searchString.Append(";")
Return searchString.ToString()
End Function
Public Overridable Function SearchAll(tableName As String) As String
Return $"Select * FROM `{tableName}`;"
End Function
Public Overridable Function SearchAll(tableName As String, condition As String) As String
Return $"Select * FROM `{tableName}` WHERE {condition};"
End Function
Public Overridable Function Search(columnName As List(Of String), tableName As String) As String
Dim colNameString As New StringBuilder
For i As Integer = 0 To columnName.Count - 1
If i = 0 Then
colNameString.Append($"`{columnName(i)}`")
Else
colNameString.Append($",`{columnName(i)}`")
End If
Next
Return $"Select {colNameString} FROM `{tableName}`;"
End Function
Public Overridable Function Search(columnName As String, tableName As String) As String
Return $"Select {columnName} FROM `{tableName}`;"
End Function
Public Overridable Function Search(columnName As String, tableName As String, condition As String) As String
Return $"Select {columnName} FROM `{tableName}` WHERE {condition};"
End Function
Public Overridable Function Search(columnName As String, tableName As String, condition As String, limit As Integer) As String
Return $"Select {columnName} FROM `{tableName}` WHERE {condition} Limit {limit};"
End Function
Public Overridable Function SearchDistinct(columnName As String, tableName As String) As String
Return $"Select Distinct {columnName} FROM `{tableName}`;"
End Function
Public Overridable Function SearchDistinct(columnName As String, tableName As String, condition As String) As String
Return $"Select Distinct {columnName} FROM `{tableName}` WHERE {condition};"
End Function
Public Overridable Function SearchDescOrder(columnName As String, tableName As String, orderCol As String) As String
Return $"Select {columnName} FROM `{tableName}` Order By {orderCol} Desc;"
End Function
Public Overridable Function SearchDescOrder(columnName As String, tableName As String, orderCol As String, limit As Integer) As String
Return $"Select {columnName} FROM `{tableName}` Order By {orderCol} Desc Limit {limit};"
End Function
Public Overridable Function SearchDescOrder(columnName As String, ByVal tableName As String, ByVal condition As String, ByVal orderCol As String) As String
Return $"Select {columnName} FROM `{tableName}` WHERE {condition} Order By `{orderCol}` Desc;"
End Function
Public Overridable Function SearchDescOrder(columnName As String, ByVal tableName As String, ByVal condition As String, ByVal orderCol As String, limit As Integer) As String
Return $"Select {columnName} FROM `{tableName}` WHERE {condition} Order By `{orderCol}` Desc Limit {limit};"
End Function
Public Overridable Function SearchAscOrder(ByVal columnName As String, ByVal tableName As String, ByVal orderCol As String) As String
Return $"Select {columnName} FROM `{tableName}` Order By {orderCol} Asc;"
End Function
Public Overridable Function SearchAscOrder(ByVal columnName As String, ByVal tableName As String, ByVal condition As String, ByVal orderCol As String) As String
Return $"Select {columnName} FROM `{tableName}` WHERE {condition} Order By {orderCol} Asc;"
End Function
Public Overridable Function SearchNullTable(tableName As String) As String
Return $"Select * FROM `{tableName}` Where Limit 0;"
End Function
Public Overridable Function Insert(ByVal tableName As String, ByVal values As String) As String
Return $"Insert into `{tableName}` Values ( {values} );"
End Function
Public Overridable Function Insert(ByVal tableName As String, ByVal colNames As String, ByVal values As String) As String
Return $"Insert into `{tableName}` ({colNames}) Values ( {values} );"
End Function
Public Overridable Function Insert(tableName As String, dicNameValues As Dictionary(Of String, String)) As String
Dim colNames As New StringBuilder
Dim values As New StringBuilder
For Each keyValuePair As KeyValuePair(Of String, String) In dicNameValues
If colNames.Length = 0 Then
colNames.Append($"`{keyValuePair.Key}`")
values.Append($"'{keyValuePair.Value}'")
Else
colNames.Append($",`{keyValuePair.Key}`")
values.Append($",'{keyValuePair.Value}'")
End If
Next
Return Insert(tableName, colNames.ToString(), values.ToString())
End Function
Public Overridable Function InsertByParameters(tableName As String, dicNameValues As Dictionary(Of String, String)) As String
Dim colNames As New StringBuilder
Dim values As New StringBuilder
For Each keyValuePair As KeyValuePair(Of String, String) In dicNameValues
If colNames.Length = 0 Then
colNames.Append($"`{keyValuePair.Key}`")
values.Append($"{keyValuePair.Value}")
Else
colNames.Append($",`{keyValuePair.Key}`")
values.Append($",{keyValuePair.Value}")
End If
Next
Return Insert(tableName, colNames.ToString(), values.ToString())
End Function
Public Overridable Function AddCol(ByVal tableName As String, ByVal colName As String, ByVal colType As String, Optional isNull As Boolean = True) As String
Return $"Alter Table `{tableName}` Add `{colName}` {colType} {IIf(isNull, "Default Null", "Not Null")};"
End Function
Public Overridable Function AddCol(ByVal tableName As String, colParam As DatabaseData) As String
Dim sb As New StringBuilder
sb.Append($"Alter Table `{tableName}` ")
sb.Append("Add ")
sb.Append(colParam.ToAddColString())
Return sb.ToString()
End Function
Public Overridable Function AddCols(tableName As String, colList As List(Of DatabaseData)) As String
Dim sb As New StringBuilder
sb.Append($"Alter Table `{tableName}` ")
sb.Append("Add ")
sb.Append("( ")
sb.Append(colList(0).ToAddColString())
For i As Integer = 1 To colList.Count - 1
sb.Append($",{colList(i).ToAddColString()}")
Next
sb.Append(");")
Return sb.ToString()
End Function
Public Overridable Function Update(ByVal tableName As String, ByVal destStr As String, ByVal condition As String) As String
Return $"Update `{tableName}` Set {destStr} Where {condition};"
End Function
Public Overridable Function Update(ByVal tableName As String, dicNameValues As Dictionary(Of String, String), ByVal condition As String) As String
Dim destStr As New StringBuilder
For Each keyValuePair As KeyValuePair(Of String, String) In dicNameValues
If destStr.Length = 0 Then
destStr.Append($"`{keyValuePair.Key}` = '{keyValuePair.Value}'")
Else
destStr.Append($",`{keyValuePair.Key}` = '{keyValuePair.Value}'")
End If
Next
Return Update(tableName, destStr.ToString(), condition)
End Function
Public Overridable Function Update(ByVal tableName As String, names() As String, values() As String, condition As String) As String
Dim destStr As New StringBuilder
If names.Length <> values.Length Then
Throw New Exception("DBHelpers_Update:names.Length <> values.Length")
End If
For i As Integer = 0 To names.Length - 1
If i = 0 Then
destStr.Append($"{names(i)} = '{values(i)}'")
Else
destStr.Append($",{names(i)} = '{values(i)}'")
End If
Next
Return Update(tableName, destStr.ToString(), condition)
End Function
Public Overridable Function DeleteRows(ByVal tableName As String, ByVal condition As String) As String
Return $"Delete From `{tableName}` Where {condition};"
End Function
''' <summary>
''' 清空数据表
''' </summary>
''' <param name="tableName">数据表名</param>
''' <returns></returns>
Public Overridable Function DeleteTable(ByVal tableName As String) As String
Return $"Delete From `{tableName}`;"
End Function
Public Overridable Function DropCol(ByVal tableName As String, ByVal colName As String) As String
Return $"Alter Table `{tableName}` Drop Column `{colName}`;"
End Function
''' <summary>
''' 删除数据表
''' </summary>
''' <param name="tableName">数据表名</param>
''' <returns></returns>
Public Overridable Function DropTable(ByVal tableName As String) As String
Return $"Drop Table `{tableName}`;"
End Function
Public Overridable Function CreateTable(ByVal tableName As String, ByVal createStr As String) As String
Return $"Create Table `{tableName}` ( {createStr} );"
End Function
Public Overridable Function CreateTableWhenNotExists(tableName As String, createStr As String) As String
Return $"Create Table if not exists `{tableName}` ( {createStr} );"
End Function
Public Overridable Function CreateLikeTable(tableName As String, baseTableName As String) As String
Return $"create table `{tableName}` like `{baseTableName}`;"
End Function
Public Overridable Function CreateLikeTableNotExists(tableName As String, baseTableName As String) As String
Return $"create table if not exists `{tableName}` like `{baseTableName}`;"
End Function
''' <summary>
''' 创建表,同时复制基础表数据(不包含原表索引与主键)
''' 若想复制表结构加数据,则先复制表结构创建表,再拷贝数据
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="baseTableName">基础表名</param>
''' <returns></returns>
Public Overridable Function CreateCopyTable(tableName As String, baseTableName As String) As String
Return $"create table `{tableName}` as select * from `{baseTableName}`;"
End Function
''' <summary>
''' 不存在表时即创建表,同时复制基础表数据(不包含原表索引与主键)
''' 若想复制表结构加数据,则先复制表结构创建表,再拷贝数据
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="baseTableName">基础表名</param>
''' <returns></returns>
Public Overridable Function CreateCopyTableNotExists(tableName As String, baseTableName As String) As String
Return $"create table if not exists `{tableName}` as select * from `{baseTableName}`;"
End Function
''' <summary>
''' 复制基础表数据到新表中
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="baseTableName">基础表名</param>
''' <returns></returns>
Public Overridable Function InsertCopyTable(tableName As String, baseTableName As String) As String
Return $"insert into `{tableName}` select * from `{baseTableName}`;"
End Function
End Class
End Namespace

View File

@@ -0,0 +1,94 @@
Imports System.Text
Namespace Database.Base
Public Class DatabaseData
Enum TypeEnum
[Bit]
[Char]
[Date]
[DateTime]
[Double]
[Enum]
[Float]
[Int]
[IntUnsigned]
[Json]
[Text]
[Time]
Varchar
[Year]
End Enum
''' <summary>
''' 列名
''' </summary>
''' <returns></returns>
Public Property ColumnName() As String
''' <summary>
''' 当前值
''' </summary>
''' <returns></returns>
Public Property Value() As String
''' <summary>
''' 默认值
''' </summary>
''' <returns></returns>
Public Property DefaultValue() As String
''' <summary>
''' 数据类型
''' </summary>
''' <returns></returns>
Public Property DataType() As TypeEnum
''' <summary>
''' 数据类型长度
''' </summary>
''' <returns></returns>
Public Property DataTypeLength() As Integer
''' <summary>
''' 是否允许为空
''' </summary>
''' <returns></returns>
Public Property IsNull() As Boolean = True
''' <summary>
''' 是否自动增长
''' </summary>
''' <returns></returns>
Public Property IsAutoIncrement() As Boolean
''' <summary>
''' 是否为主键
''' </summary>
''' <returns></returns>
Public Property IsPrimaryKey() As Boolean
Public Function ToAddColString() As String
Dim sb As New StringBuilder
sb.Append($"`{ColumnName}`")
Select Case DataType
Case TypeEnum.Char, TypeEnum.Varchar
sb.Append($" {DataType}({DataTypeLength}) ")
Case TypeEnum.Int
sb.Append($" {DataType}")
If IsAutoIncrement Then sb.Append($" AUTO_INCREMENT")
Case Else
sb.Append($" {DataType}")
End Select
sb.Append(IIf(IsNull, " Default Null", " Not Null"))
If IsPrimaryKey Then
sb.Append($" PRIMARY KEY")
End If
Return sb.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,12 @@
Imports System.Collections.Generic
Namespace Database.Base
''' <summary>
''' Contains the entire database schema
''' </summary>
Public Class DatabaseSchema
Public Tables As List(Of TableSchema) = New List(Of TableSchema)()
Public Views As List(Of ViewSchema) = New List(Of ViewSchema)()
End Class
End NameSpace

View File

@@ -0,0 +1,11 @@

Namespace Database.Base
Public Class ForeignKeySchema
Public TableName As String
Public ColumnName As String
Public ForeignTableName As String
Public ForeignColumnName As String
Public CascadeOnDelete As Boolean
Public IsNullable As Boolean
End Class
End NameSpace

View File

@@ -0,0 +1,16 @@
Imports System.Collections.Generic
Namespace Database.Base
Public Class IndexSchema
Public IndexName As String
Public IsUnique As Boolean
Public Columns As List(Of IndexColumn)
End Class
Public Class IndexColumn
Public ColumnName As String
Public IsAscending As Boolean
End Class
End NameSpace

View File

@@ -0,0 +1,7 @@
Namespace Database.Base
Public Class InsertParams
Public Property TableName() As String
Public Property InsertKeyValue As Dictionary(Of String, String)
End Class
End Namespace

View File

@@ -0,0 +1,71 @@
Imports System.Text
Namespace Database.Base
Public Class SearchCondition
Enum ConditionType
LessThan
GreaterThen
EqualTo
LessThanOrEqualTo
GreaterThenOrEqualTo
End Enum
Enum LogicType
[And]
[Or]
[Not]
End Enum
''' <summary>
''' 判断列名
''' </summary>
''' <returns></returns>
Public Property ColName() As String
''' <summary>
''' 判断条件
''' </summary>
''' <returns></returns>
Public Property Condition() As ConditionType = ConditionType.EqualTo
''' <summary>
''' 判断值
''' </summary>
''' <returns></returns>
Public Property ColValue() As String
''' <summary>
''' 当前条件与上一个条件的逻辑关系
''' </summary>
''' <returns></returns>
Public Property LogicPrevious() As LogicType = LogicType.And
''' <summary>
''' 将当前条件转换为字符串,不支持将条件逻辑关系同时转换
''' </summary>
''' <returns></returns>
Public Overrides Function ToString() As String
Dim stringBuilder As New StringBuilder
stringBuilder.Append(" ")
stringBuilder.Append(ColName)
Select Case Condition
Case ConditionType.EqualTo
stringBuilder.Append("=")
Case ConditionType.LessThan
stringBuilder.Append("<")
Case ConditionType.LessThanOrEqualTo
stringBuilder.Append("<=")
Case ConditionType.GreaterThen
stringBuilder.Append(">")
Case ConditionType.GreaterThenOrEqualTo
stringBuilder.Append(">=")
End Select
stringBuilder.Append($"'{ColValue}'")
Return stringBuilder.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,46 @@
Namespace Database.Base
Public Class SearchParams
Enum OrderTypeEnum
None
Desc
Asc
End Enum
''' <summary>
''' 查询条件的表名
''' </summary>
''' <returns></returns>
Public Property TableName() As String
''' <summary>
''' 当IsSearchAllCols = False时,查询返回列名集合
''' </summary>
''' <returns></returns>
Public Property SearchColNames() As String()
''' <summary>
''' 查询的条件
''' </summary>
''' <returns></returns>
Public Property SearchCondition() As List(Of SearchCondition)
''' <summary>
''' 排序方式
''' </summary>
''' <returns></returns>
Public Property OrderType As OrderTypeEnum = OrderTypeEnum.None
''' <summary>
''' 但需要排序时排序列名
''' </summary>
''' <returns></returns>
Public Property OrderColName() As String
''' <summary>
''' 从返回结果提取指定行的内容
''' </summary>
''' <returns></returns>
Public Property Limit() As Integer = 0
End Class
End Namespace

View File

@@ -0,0 +1,14 @@
Imports System.Collections.Generic
Namespace Database.Base
Public Class TableSchema
Public TableName As String
Public TableSchemaName As String
Public Columns As List(Of ColumnSchema)
Public PrimaryKey As List(Of String)
Public ForeignKeys As List(Of ForeignKeySchema)
Public Indexes As List(Of IndexSchema)
End Class
End NameSpace

View File

@@ -0,0 +1,71 @@
Imports System.Collections.Generic
Imports System.Text
Namespace Database.Base
Public Module TriggerBuilder
Public Function GetForeignKeyTriggers(ByVal dt As TableSchema) As IList(Of TriggerSchema)
Dim result As IList(Of TriggerSchema) = New List(Of TriggerSchema)()
For Each fks As ForeignKeySchema In dt.ForeignKeys
result.Add(GenerateInsertTrigger(fks))
result.Add(GenerateUpdateTrigger(fks))
result.Add(GenerateDeleteTrigger(fks))
Next
Return result
End Function
Private Function MakeTriggerName(ByVal fks As ForeignKeySchema, ByVal prefix As String) As String
Return prefix & "_" & fks.TableName & "_" & fks.ColumnName & "_" & fks.ForeignTableName & "_" & fks.ForeignColumnName
End Function
Public Function GenerateInsertTrigger(ByVal fks As ForeignKeySchema) As TriggerSchema
Dim trigger As TriggerSchema = New TriggerSchema()
trigger.Name = MakeTriggerName(fks, "fki")
trigger.Type = TriggerType.Before
trigger.Event = TriggerEvent.Insert
trigger.Table = fks.TableName
Dim nullString As String = ""
If fks.IsNullable Then
nullString = " NEW." & fks.ColumnName & " IS NOT NULL AND"
End If
trigger.Body = "SELECT RAISE(ROLLBACK, 'insert on table " & fks.TableName & " violates foreign key constraint " & trigger.Name & "')" & " WHERE" & nullString & " (SELECT " & fks.ForeignColumnName & " FROM " & fks.ForeignTableName & " WHERE " & fks.ForeignColumnName & " = NEW." & fks.ColumnName & ") IS NULL; "
Return trigger
End Function
Public Function GenerateUpdateTrigger(ByVal fks As ForeignKeySchema) As TriggerSchema
Dim trigger As TriggerSchema = New TriggerSchema()
trigger.Name = MakeTriggerName(fks, "fku")
trigger.Type = TriggerType.Before
trigger.Event = TriggerEvent.Update
trigger.Table = fks.TableName
Dim triggerName As String = trigger.Name
Dim nullString As String = ""
If fks.IsNullable Then
nullString = " NEW." & fks.ColumnName & " IS NOT NULL AND"
End If
trigger.Body = "SELECT RAISE(ROLLBACK, 'update on table " & fks.TableName & " violates foreign key constraint " & triggerName & "')" & " WHERE" & nullString & " (SELECT " & fks.ForeignColumnName & " FROM " & fks.ForeignTableName & " WHERE " & fks.ForeignColumnName & " = NEW." & fks.ColumnName & ") IS NULL; "
Return trigger
End Function
Public Function GenerateDeleteTrigger(ByVal fks As ForeignKeySchema) As TriggerSchema
Dim trigger As TriggerSchema = New TriggerSchema()
trigger.Name = MakeTriggerName(fks, "fkd")
trigger.Type = TriggerType.Before
trigger.Event = TriggerEvent.Delete
trigger.Table = fks.ForeignTableName
Dim triggerName as String = trigger.Name
If Not fks.CascadeOnDelete Then
trigger.Body = "SELECT RAISE(ROLLBACK, 'delete on table " & fks.ForeignTableName & " violates foreign key constraint " & triggerName & "')" & " WHERE (SELECT " & fks.ColumnName & " FROM " & fks.TableName & " WHERE " & fks.ColumnName & " = OLD." & fks.ForeignColumnName & ") IS NOT NULL; "
Else
trigger.Body = "DELETE FROM [" & fks.TableName & "] WHERE " & fks.ColumnName & " = OLD." & fks.ForeignColumnName & "; "
End If
Return trigger
End Function
End Module
End NameSpace

View File

@@ -0,0 +1,20 @@
Namespace Database.Base
Public Enum TriggerEvent
Delete
Update
Insert
End Enum
Public Enum TriggerType
After
Before
End Enum
Public Class TriggerSchema
Public Name As String
Public [Event] As TriggerEvent
Public Type As TriggerType
Public Body As String
Public Table As String
End Class
End Namespace

View File

@@ -0,0 +1,17 @@

Namespace Database.Base
''' <summary>
''' Describes a single view schema
''' </summary>
Public Class ViewSchema
''' <summary>
''' Contains the view name
''' </summary>
Public ViewName As String
''' <summary>
''' Contains the view SQL statement
''' </summary>
Public ViewSql As String
End Class
End NameSpace

View File

@@ -0,0 +1,730 @@
Imports System.Text
''' <summary>
''' 数据库语句助手
''' 时间2020-12-21
''' 作者ML
''' 版本1.0
'''
''' 注意:添加一条数据库帮助语句时,需要考虑Mysql/Sqlite/Mssql等数据库是否支持命令,不支持则需要在对应帮助类中重写该帮助语句
''' 注意Sqlite数据库与大多数据库不相同,DB开头数据库语句大多不适用
'''
''' </summary>
Public MustInherit Class DbCmdHelper
Protected FiledSuffix As Char
Protected FiledPrefix As Char
Public Shared Function CreateCmdHelper(type As DbExecutor.DbTypeEnum) As DbCmdHelper
Select Case type
Case DbExecutor.DbTypeEnum.Mysql
Return New MysqlCmdHelper()
Case DbExecutor.DbTypeEnum.Mssql
Return New MssqlCmdHelper()
Case DbExecutor.DbTypeEnum.Sqlite
Return New SqliteCmdHelper()
Case Else
Throw New Exception($"CreateCmdHelper :Unknown Type {type}")
End Select
End Function
#Region "访问单数据库连接"
''' <summary>
''' 查询指定数据表符合条件的所有数据
''' </summary>
''' <param name="tableName">指定表名</param>
''' <param name="condition">查询条件,</param>
''' <returns></returns>
Public Overridable Function SearchAll(tableName As String, Optional condition As String = "") As String
If String.IsNullOrWhiteSpace(condition) Then
Return $"Select * FROM {FiledSuffix}{tableName}{FiledPrefix};"
Else
Return $"Select * FROM {FiledSuffix}{tableName}{FiledPrefix} WHERE {condition};"
End If
End Function
''' <summary>
''' 查询表符合条件的所有指定列的数据
''' </summary>
''' <param name="columnName">列名集合,需要返回多列时用','符号分隔列名</param>
''' <param name="tableName">表名</param>
''' <param name="condition">条件</param>
''' <returns></returns>
Public Overridable Function Search(columnName As String, tableName As String, Optional condition As String = "") As String
If String.IsNullOrWhiteSpace(condition) Then
Return $"Select {columnName} FROM {FiledSuffix}{tableName}{FiledPrefix};"
Else
Return $"Select {columnName} FROM {FiledSuffix}{tableName}{FiledPrefix} WHERE {condition};"
End If
End Function
''' <summary>
''' 查询表符合条件的所有指定列的数据
''' </summary>
''' <param name="columnName">表名</param>
''' <param name="tableName">条件</param>
''' <returns></returns>
Public Overridable Function Search(columnName As List(Of String), tableName As String, Optional condition As String = "") As String
Dim colNameString As New StringBuilder
For i As Integer = 0 To columnName.Count - 1
If i = 0 Then
colNameString.Append($"{FiledSuffix}{columnName(i)}{FiledPrefix}")
Else
colNameString.Append($",{FiledSuffix}{columnName(i)}{FiledPrefix}")
End If
Next
If String.IsNullOrWhiteSpace(condition) Then
Return $"Select {colNameString} FROM {FiledSuffix}{tableName}{FiledPrefix};"
Else
Return $"Select {colNameString} FROM {FiledSuffix}{tableName}{FiledPrefix} Where {condition};"
End If
End Function
Public Overridable Function SearchOrder(columnName As List(Of String), tableName As String, Optional orderString As String = "") As String
Dim colNameString As New StringBuilder
For i As Integer = 0 To columnName.Count - 1
If i = 0 Then
colNameString.Append($"{FiledSuffix}{columnName(i)}{FiledPrefix}")
Else
colNameString.Append($",{FiledSuffix}{columnName(i)}{FiledPrefix}")
End If
Next
If String.IsNullOrWhiteSpace(orderString) Then
Return $"Select {colNameString} FROM {FiledSuffix}{tableName}{FiledPrefix};"
Else
Return $"Select {colNameString} FROM {FiledSuffix}{tableName}{FiledPrefix} {orderString};"
End If
End Function
''' <summary>
''' 查询指定表包含的内容行数
''' </summary>
''' <param name="tableName">数据表名</param>
''' <param name="condition">查询条件</param>
''' <returns></returns>
Public Overridable Function SearchCount(tableName As String, Optional condition As String = "") As String
Return Search("count(*)", tableName, condition)
End Function
''' <summary>
''' 查询指定数据表的信息
''' </summary>
''' <param name="tableName">表名</param>
''' <returns></returns>
Public Overridable Function SearchTableInfo(tableName As String) As String
Return $"Select * from information_schema.tables where table_name = '{tableName}';"
End Function
''' <summary>
''' 查询指定数据表是否存在的信息,返回查询当前表在数据库中存在的数量
''' </summary>
''' <param name="tableName">表名</param>
''' <returns></returns>
Public Overridable Function SearchTableExists(tableName As String) As String
Return $"Select count(*) from information_schema.tables where table_name = '{tableName}';"
End Function
''' <summary>
''' 数据表插入一行数据
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="colNames">列名字符串</param>
''' <param name="values">列值字符串</param>
''' <returns></returns>
Public Overridable Function Insert(tableName As String, colNames As String, values As String) As String
Return $"Insert into {FiledSuffix}{tableName}{FiledPrefix} ({colNames}) Values ( {values} );"
End Function
''' <summary>
''' 数据表插入一行数据
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="dicNameValues">列名与列值键值对</param>
''' <returns></returns>
Public Overridable Function Insert(tableName As String, dicNameValues As Dictionary(Of String, String)) As String
Dim colNames As New StringBuilder
Dim values As New StringBuilder
For Each keyValuePair As KeyValuePair(Of String, String) In dicNameValues
If colNames.Length = 0 Then
colNames.Append($"{FiledSuffix}{keyValuePair.Key}{FiledPrefix}")
values.Append($"'{keyValuePair.Value}'")
Else
colNames.Append($",{FiledSuffix}{keyValuePair.Key}{FiledPrefix}")
values.Append($",'{keyValuePair.Value}'")
End If
Next
Return Insert(tableName, colNames.ToString(), values.ToString())
End Function
''' <summary>
''' 数据表插入一行,通过命令参数方式执行时使用
''' </summary>
''' <param name="tableName"></param>
''' <param name="dicNameValues"></param>
''' <returns></returns>
Public Overridable Function InsertParam(tableName As String, dicNameValues As Dictionary(Of String, String)) As String
Dim colNames As New StringBuilder
Dim values As New StringBuilder
For Each keyValuePair As KeyValuePair(Of String, String) In dicNameValues
If colNames.Length = 0 Then
colNames.Append($"{FiledSuffix}{keyValuePair.Key}{FiledPrefix}")
values.Append($"{keyValuePair.Value}")
Else
colNames.Append($",{FiledSuffix}{keyValuePair.Key}{FiledPrefix}")
values.Append($",{keyValuePair.Value}")
End If
Next
Return Insert(tableName, colNames.ToString(), values.ToString())
End Function
''' <summary>
''' 数据表插入一行,通过命令参数方式执行时使用,参数名由@{ColName}
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="colNames">字段列表</param>
''' <returns></returns>
Public Overridable Function InsertParam(tableName As String, colNames As List(Of String)) As String
Dim colNameString As New StringBuilder
Dim values As New StringBuilder
For Each colName As String In colNames
If colNameString.Length = 0 Then
colNameString.Append($"{FiledSuffix}{colName}{FiledPrefix}")
values.Append($"@{colName}")
Else
colNameString.Append($",{FiledSuffix}{colName}{FiledPrefix}")
values.Append($",@{colName}")
End If
Next
Return Insert(tableName, colNameString.ToString(), values.ToString())
End Function
''' <summary>
''' 更新指定表数据
''' </summary>
''' <param name="tableName">指定表名</param>
''' <param name="destStr">更新字符串</param>
''' <param name="condition"></param>
''' <returns></returns>
Public Overridable Function Update(tableName As String, destStr As String, condition As String) As String
Return $"Update {FiledSuffix}{tableName}{FiledPrefix} Set {destStr} Where {condition};"
End Function
''' <summary>
''' 更新指定表数据
''' </summary>
''' <param name="tableName">指定表名</param>
''' <param name="dicNameValues">更新列名与列值键值对</param>
''' <param name="condition">更新列索引条件</param>
''' <returns></returns>
Public Overridable Function Update(tableName As String, dicNameValues As Dictionary(Of String, String), condition As String) As String
Dim destStr As New StringBuilder
For Each keyValuePair As KeyValuePair(Of String, String) In dicNameValues
If destStr.Length = 0 Then
destStr.Append($"{FiledSuffix}{keyValuePair.Key}{FiledPrefix} = '{keyValuePair.Value}'")
Else
destStr.Append($",{FiledSuffix}{keyValuePair.Key}{FiledPrefix} = '{keyValuePair.Value}'")
End If
Next
Return Update(tableName, destStr.ToString(), condition)
End Function
''' <summary>
''' 更新指定数据库中指定表数据,参数名由@{ColName}
''' </summary>
''' <param name="tableName">指定表名</param>
''' <param name="colNames">更新列名的集合</param>
''' <param name="condition">更新列索引条件</param>
''' <returns></returns>
Public Overridable Function UpdateParam(tableName As String, colNames As List(Of String), condition As String) As String
Dim destStr As New StringBuilder
For Each colName As String In colNames
If destStr.Length = 0 Then
destStr.Append($"{FiledSuffix}{colName}{FiledPrefix} = @{colName}")
Else
destStr.Append($",{FiledSuffix}{colName}{FiledPrefix} = @{colName}")
End If
Next
Return Update(tableName, destStr.ToString(), condition)
End Function
''' <summary>
''' 指定数据表增加一列数据
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="colName">列名</param>
''' <param name="colType">列类型</param>
''' <param name="isNull">是否允许为空</param>
''' <returns></returns>
Public Overridable Function AddCol(tableName As String, colName As String, colType As String, Optional isNull As Boolean = True) As String
Return $"Alter Table {FiledSuffix}{tableName}{FiledPrefix} Add {FiledSuffix}{colName}{FiledPrefix} {colType} {IIf(isNull, "Default Null", "Not Null")};"
End Function
''' <summary>
''' 数据表删除一列数据
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="colName">需要删除的列名,仅一列</param>
''' <returns></returns>
Public Overridable Function DropCol(tableName As String, colName As String) As String
Return $"Alter Table {FiledSuffix}{tableName}{FiledPrefix} Drop Column {FiledSuffix}{colName}{FiledPrefix};"
End Function
''' <summary>
''' 删除指定表多行数据
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="condition">条件</param>
''' <returns></returns>
Public Overridable Function DeleteRows(tableName As String, condition As String) As String
Return $"Delete From {FiledSuffix}{tableName}{FiledPrefix} Where {condition};"
End Function
''' <summary>
''' 创建数据表
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="createStr">创建表的列信息字符串</param>
''' <returns></returns>
Public Overridable Function CreateTable(tableName As String, createStr As String) As String
Return $"Create Table {FiledSuffix}{tableName}{FiledPrefix} ( {createStr} );"
End Function
''' <summary>
''' 创建数据表,如果存在则不创建
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="createStr">创建表的列信息字符串</param>
''' <returns></returns>
Public Overridable Function CreateTableWhenNotExists(tableName As String, createStr As String) As String
Return $"Create Table if not exists {FiledSuffix}{tableName}{FiledPrefix} ( {createStr} );"
End Function
''' <summary>
''' 清空数据表,表依旧存在
''' </summary>
''' <param name="tableName">数据表名</param>
''' <returns></returns>
Public Overridable Function DeleteTable(tableName As String) As String
Return $"Delete From {FiledSuffix}{tableName}{FiledPrefix};"
End Function
''' <summary>
''' 删除数据表
''' </summary>
''' <param name="tableName">数据表名</param>
''' <returns></returns>
Public Overridable Function DropTable(tableName As String) As String
Return $"Drop Table {FiledSuffix}{tableName}{FiledPrefix};"
End Function
''' <summary>
''' 删除数据表
''' </summary>
''' <param name="tableName">数据表名</param>
''' <returns></returns>
Public Overridable Function DropTableWhenExists(tableName As String) As String
Return $"Drop Table If Exists {FiledSuffix}{tableName}{FiledPrefix};"
End Function
#End Region
#Region "访问多数据库连接"
''' <summary>
''' 查询指定数据库中指定数据表符合条件的所有指定列的数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="ColsName">列名集合,需要返回多列时用','符号分隔列名</param>
''' <param name="tableName">表名</param>
''' <param name="condition">条件</param>
''' <returns></returns>
Public Overridable Function DbSearch(dbName As String, colsName As String, tableName As String, Optional condition As String = "") As String
Dim cmdText As New StringBuilder
cmdText.Append($"Select {colsName} From ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"{FiledSuffix}{dbName}{FiledPrefix}.")
End If
cmdText.Append($"{FiledSuffix}{tableName}{FiledPrefix}")
If String.IsNullOrWhiteSpace(condition) = False Then
cmdText.Append($" WHERE {condition}")
End If
cmdText.Append($";")
Return cmdText.ToString()
End Function
''' <summary>
''' 查询指定数据库中指定数据表符合条件的所有指定列的去重数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="ColsName">列名集合,需要返回多列时用','符号分隔列名</param>
''' <param name="tableName">表名</param>
''' <param name="condition">条件</param>
''' <returns></returns>
Public Overridable Function DbDistinctSearch(dbName As String, colsName As String, tableName As String, Optional condition As String = "") As String
Dim cmdText As New StringBuilder
cmdText.Append($"Select Distinct {colsName} From ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"{FiledSuffix}{dbName}{FiledPrefix}.")
End If
cmdText.Append($"{FiledSuffix}{tableName}{FiledPrefix}")
If String.IsNullOrWhiteSpace(condition) = False Then
cmdText.Append($" WHERE {condition}")
End If
cmdText.Append($";")
Return cmdText.ToString()
End Function
''' <summary>
''' 查询指定数据库中指定数据表符合条件的所有指定列的数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="columnName">表名</param>
''' <param name="tableName">条件</param>
''' <returns></returns>
Public Overridable Function DbSearch(dbName As String, columnName As List(Of String), tableName As String, Optional condition As String = "") As String
Dim colNameString As New StringBuilder
For i As Integer = 0 To columnName.Count - 1
If i = 0 Then
colNameString.Append($"{FiledSuffix}{columnName(i)}{FiledPrefix}")
Else
colNameString.Append($",{FiledSuffix}{columnName(i)}{FiledPrefix}")
End If
Next
Return DbSearch(dbName, colNameString.ToString(), tableName, condition)
End Function
''' <summary>
''' 查询指定表包含的内容行数
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">数据表名</param>
''' <param name="condition">查询条件</param>
''' <returns></returns>
Public Overridable Function DbSearchCount(dbName As String, tableName As String, Optional condition As String = "") As String
Return DbSearch(dbName, "count(*)", tableName, condition)
End Function
''' <summary>
''' 查询指定数据库中指定数据表符合条件的所有数据
'''
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">数据表名</param>
''' <param name="condition">查询条件(可选)</param>
''' <returns></returns>
Public Overridable Function DbSearchAll(dbName As String, tableName As String, Optional condition As String = "") As String
Return DbSearch(dbName, "*", tableName, condition)
End Function
''' <summary>
''' 查询指定数据库中指定数据表的信息
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <returns></returns>
Public Overridable Function DbSearchTableInfo(dbName As String, tableName As String) As String
Return DbSearch("", "*", "information_schema.tables", "table_schema = '{dbName}' and table_name = '{tableName}'")
End Function
''' <summary>
''' 查询指定数据表是否存在的信息,返回查询当前表在指定数据库中存在的数量
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <returns></returns>
Public Overridable Function DbSearchTableExists(dbName As String, tableName As String) As String
Return DbSearch("", "count(*)", "information_schema.tables", "table_schema = '{dbName}' and table_name = '{tableName}'")
End Function
''' <summary>
''' 指定数据库中数据表插入一行数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <param name="colNames">列名字符串</param>
''' <param name="values">列值字符串</param>
''' <returns></returns>
Public Overridable Function DbInsert(dbName As String, tableName As String, colNames As String, values As String) As String
Dim cmdText As New StringBuilder
cmdText.Append($"Insert into ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"{FiledSuffix}{dbName}{FiledPrefix}.")
End If
cmdText.Append($"{FiledSuffix}{tableName}{FiledPrefix}")
cmdText.Append($" ({colNames}) Values ( {values} );")
Return cmdText.ToString()
End Function
''' <summary>
''' 指定数据库中数据表插入一行数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <param name="dicNameValues">列名与列值键值对</param>
''' <returns></returns>
Public Overridable Function DbInsert(dbName As String, tableName As String, dicNameValues As Dictionary(Of String, String)) As String
Dim colNames As New StringBuilder
Dim values As New StringBuilder
For Each keyValuePair As KeyValuePair(Of String, String) In dicNameValues
If colNames.Length = 0 Then
colNames.Append($"{FiledSuffix}{keyValuePair.Key}{FiledPrefix}")
values.Append($"'{keyValuePair.Value}'")
Else
colNames.Append($",{FiledSuffix}{keyValuePair.Key}{FiledPrefix}")
values.Append($",'{keyValuePair.Value}'")
End If
Next
Return DbInsert(dbName, tableName, colNames.ToString(), values.ToString())
End Function
''' <summary>
''' 指定数据库中数据表插入一行,通过命令参数方式执行时使用,参数名由@{ColName}
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName"></param>
''' <param name="colNames">需要插入列名的集合</param>
''' <returns></returns>
Public Overridable Function DbInsertParam(dbName As String, tableName As String, colNames As List(Of String)) As String
Dim colNameBuilder As New StringBuilder
Dim valueBuilder As New StringBuilder
For Each colName As String In colNames
If colNameBuilder.Length = 0 Then
colNameBuilder.Append($"{FiledSuffix}{colName}{FiledPrefix}")
valueBuilder.Append($"@{colName}")
Else
colNameBuilder.Append($",{FiledSuffix}{colName}{FiledPrefix}")
valueBuilder.Append($",@{colName}")
End If
Next
'insert into dbName.tablename (1,2,3) value (@1,@2,@3)
Return DbInsert(dbName, tableName, colNameBuilder.ToString(), valueBuilder.ToString())
End Function
''' <summary>
''' 更新指定数据库中指定表数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">指定表名</param>
''' <param name="destStr">更新字符串</param>
''' <param name="condition"></param>
''' <returns></returns>
Public Overridable Function DbUpdate(dbName As String, tableName As String, destStr As String, condition As String) As String
Dim cmdText As New StringBuilder
Dim tmpStrCmdText As String = ""
cmdText.Append($"Update ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"{FiledSuffix}{dbName}{FiledPrefix}.")
End If
cmdText.Append($"{FiledSuffix}{tableName}{FiledPrefix}")
cmdText.Append($" Set {destStr} Where {condition};")
tmpStrCmdText = cmdText.ToString()
Console.WriteLine("SQL_CMD = " & tmpStrCmdText)
Return tmpStrCmdText
End Function
''' <summary>
''' 更新指定数据库中指定表数据,参数名由@{ColName}
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">指定表名</param>
''' <param name="colNames">更新列名的集合</param>
''' <param name="condition">更新列索引条件</param>
''' <returns></returns>
Public Overridable Function DbUpdateParam(dbName As String, tableName As String, colNames As List(Of String), condition As String) As String
Dim destStr As New StringBuilder
For Each colName As String In colNames
If destStr.Length = 0 Then
destStr.Append($"{FiledSuffix}{colName}{FiledPrefix} = @{colName}")
Else
destStr.Append($",{FiledSuffix}{colName}{FiledPrefix} = @{colName}")
End If
Next
Return DbUpdate(dbName, tableName, destStr.ToString(), condition)
End Function
''' <summary>
''' 更新指定数据库中指定表数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">指定表名</param>
''' <param name="filedDictionary">更新列名与列值键值对</param>
''' <param name="condition">更新列索引条件</param>
''' <returns></returns>
Public Overridable Function DbUpdate(dbName As String, tableName As String, filedDictionary As Dictionary(Of String, String), condition As String) As String
Dim destStr As New StringBuilder
For Each filed As KeyValuePair(Of String, String) In filedDictionary
If destStr.Length = 0 Then
destStr.Append($"{FiledSuffix}{filed.Key}{FiledPrefix} = '{filed.Value}'")
Else
destStr.Append($",{FiledSuffix}{filed.Key}{FiledPrefix} = '{filed.Value}'")
End If
Next
Return DbUpdate(dbName, tableName, destStr.ToString(), condition)
End Function
''' <summary>
''' 指定数据库中指定数据表增加一列数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <param name="colName">列名</param>
''' <param name="colType">列类型</param>
''' <param name="isNull">是否允许为空</param>
''' <returns></returns>
Public Overridable Function DbAddCol(dbName As String, tableName As String, colName As String, colType As String, Optional isNull As Boolean = True) As String
Dim cmdText As New StringBuilder
cmdText.Append($"Alter Table ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"{FiledSuffix}{dbName}{FiledPrefix}.")
End If
cmdText.Append($"{FiledSuffix}{tableName}{FiledPrefix}")
cmdText.Append($" Add {FiledSuffix}{colName}{FiledPrefix} {colType} {IIf(isNull, "Default Null", "Not Null")};")
Return cmdText.ToString()
End Function
''' <summary>
''' 指定数据库中数据表删除一列数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <param name="colName">需要删除的列名,仅一列</param>
''' <returns></returns>
Public Overridable Function DbDropCol(dbName As String, tableName As String, colName As String) As String
Dim cmdText As New StringBuilder
cmdText.Append($"Alter Table ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"{FiledSuffix}{dbName}{FiledPrefix}.")
End If
cmdText.Append($"{FiledSuffix}{tableName}{FiledPrefix}")
cmdText.Append($" Drop Column {FiledSuffix}{colName}{FiledPrefix};")
Return cmdText.ToString()
End Function
''' <summary>
''' 指定数据库中指定表删除多行数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <param name="condition">条件</param>
''' <returns></returns>
Public Overridable Function DbDeleteRows(dbName As String, tableName As String, condition As String) As String
Dim cmdText As New StringBuilder
cmdText.Append($"Delete From ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"{FiledSuffix}{dbName}{FiledPrefix}.")
End If
cmdText.Append($"{FiledSuffix}{tableName}{FiledPrefix}")
cmdText.Append($" Where {condition};")
Return cmdText.ToString()
End Function
''' <summary>
''' 指定数据库中创建数据表
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <param name="createStr">创建表的列信息字符串</param>
''' <returns></returns>
Public Overridable Function DbCreateTable(dbName As String, tableName As String, createStr As String) As String
Dim cmdText As New StringBuilder
cmdText.Append($"Create Table ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"{FiledSuffix}{dbName}{FiledPrefix}.")
End If
cmdText.Append($"{FiledSuffix}{tableName}{FiledPrefix}")
cmdText.Append($" ( {createStr} );")
Return cmdText.ToString()
End Function
''' <summary>
''' 指定数据库中创建数据表,如果存在则不创建
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <param name="createStr">创建表的列信息字符串</param>
''' <returns></returns>
Public Overridable Function DbCreateTableWhenNotExists(dbName As String, tableName As String, createStr As String) As String
Dim cmdText As New StringBuilder
cmdText.Append($"Create Table if not exists ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"{FiledSuffix}{dbName}{FiledPrefix}.")
End If
cmdText.Append($"{FiledSuffix}{tableName}{FiledPrefix}")
cmdText.Append($" ( {createStr} );")
Return cmdText.ToString()
End Function
''' <summary>
''' 清空指定数据库中数据表,表依旧存在
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">数据表名</param>
''' <returns></returns>
Public Overridable Function DbDeleteTable(dbName As String, tableName As String) As String
Dim cmdText As New StringBuilder
cmdText.Append($"Delete From ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"{FiledSuffix}{dbName}{FiledPrefix}.")
End If
cmdText.Append($"{FiledSuffix}{tableName}{FiledPrefix}")
cmdText.Append($";")
Return cmdText.ToString()
End Function
''' <summary>
''' 删除指定数据库中数据表
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">数据表名</param>
''' <returns></returns>
Public Overridable Function DbDropTable(dbName As String, tableName As String) As String
Dim cmdText As New StringBuilder
cmdText.Append($"Drop Table ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"{FiledSuffix}{dbName}{FiledPrefix}.")
End If
cmdText.Append($"{FiledSuffix}{tableName}{FiledPrefix}")
cmdText.Append($";")
Return cmdText.ToString()
End Function
#End Region
End Class

View File

@@ -0,0 +1,377 @@
Imports System.Data.Common
Imports System.Data.SqlClient
Imports System.Data.SQLite
Imports MySql.Data.MySqlClient
''' <summary>
''' 数据库通用命令执行器
''' 时间2020-12-21
''' 作者ML
''' 版本1.0
''' </summary>
Public Class DbExecutor
Implements IDisposable
''' <summary>
''' 数据库类型,目前支持Mysql与Sqlite
''' </summary>
Enum DbTypeEnum
Mysql
Sqlite
Mssql
End Enum
Private ReadOnly _connectionString As String '数据库连接语句
Private ReadOnly _dbType As DbTypeEnum '数据库类型
Private _connection As DbConnection '数据库连接句柄
Private _command As DbCommand '数据库命令句柄
Private _dataAdapter As DbDataAdapter '数据库查询填充器句柄
Private _transaction As DbTransaction '数据库事务句柄
Private _commandHelper As DbCmdHelper '数据库语句填充助手
Sub New(type As DbTypeEnum, connectionString As String)
_dbType = type
_connectionString = connectionString
InitByDbType(_dbType)
End Sub
Private Sub InitByDbType(type As DbTypeEnum)
Select Case type
Case DbTypeEnum.Mysql
_connection = New MySqlConnection()
_command = _connection.CreateCommand()
_dataAdapter = New MySqlDataAdapter() With {.MissingSchemaAction = MissingSchemaAction.AddWithKey}
_commandHelper = New MysqlCmdHelper()
Case DbTypeEnum.Sqlite
_connection = New SqliteConnection()
_command = _connection.CreateCommand()
_dataAdapter = New SQLiteDataAdapter() With {.MissingSchemaAction = MissingSchemaAction.AddWithKey}
_commandHelper = New SqliteCmdHelper()
Case DbTypeEnum.Mssql
_connection = New SqlConnection()
_command = _connection.CreateCommand()
_dataAdapter = New SqlDataAdapter() With {.MissingSchemaAction = MissingSchemaAction.AddWithKey}
_commandHelper = New MssqlCmdHelper()
End Select
End Sub
Public ReadOnly Property DatabaseType() As DbTypeEnum
Get
Return _dbType
End Get
'Set(value As DbTypeEnum)
' _dbType = value
' '执行上一个数据库的关闭操作
' InitByDbType(_dbType)
'End Set
End Property
Public ReadOnly Property Connection() As DbConnection
Get
Return _connection
End Get
End Property
Public ReadOnly Property Command() As DbCommand
Get
Return _command
End Get
End Property
Public ReadOnly Property CmdHelper() As DbCmdHelper
Get
Return _commandHelper
End Get
End Property
''' <summary>
''' 打开数据库连接
''' </summary>
''' <returns></returns>
Public Function Open() As Boolean
If _connection Is Nothing Then Return False
If String.IsNullOrWhiteSpace(_connectionString) Then Return False
Try
_connection.ConnectionString = _connectionString
_connection.Open()
Catch ex As Exception
Throw
End Try
Return True
End Function
''' <summary>
''' 关闭数据库连接
''' </summary>
Public Sub Close()
If _connection Is Nothing Then Return
If _connection.State = ConnectionState.Closed Then Return
_connection.Close()
End Sub
''' <summary>
''' 创建当前连接的命令执行句柄
''' </summary>
''' <returns></returns>
Public Function CreateCommand() As DbCommand
Return _connection.CreateCommand()
End Function
''' <summary>
''' 运行非查询语句,返回执行该语句受到影响的行数
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <returns></returns>
Public Function ExecuteNonQuery(commandText As String) As Integer
Dim result As Integer
Try
_command.CommandText = commandText
result = _command.ExecuteNonQuery()
Catch ex As Exception
Throw
End Try
Return result
End Function
''' <summary>
''' 使用命令参数模式执行非查询语句,返回执行该语句受到影响的行数
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <param name="commandParams">执行的数据库命令参数</param>
''' <returns></returns>
Public Function ExecuteNonQuery(commandText As String, commandParams As DbParameterCollection) As Integer
Dim result As Integer
Try
_command.CommandText = commandText
_command.Parameters.Clear()
For Each param As DbParameter In commandParams
_command.Parameters.Add(param)
Next
result = _command.ExecuteNonQuery()
Catch ex As Exception
Throw
End Try
Return result
End Function
''' <summary>
''' 执行数据库语句,返回数据库读取流的句柄
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <returns></returns>
Public Function ExecuteReader(commandText As String) As DbDataReader
Dim result As DbDataReader
Try
_command.CommandText = commandText
result = _command.ExecuteReader()
Catch ex As Exception
Throw
End Try
Return result
End Function
''' <summary>
''' 使用命令参数模式执行数据库语句,返回数据库读取流的句柄
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <param name="commandParams">执行的数据库命令参数</param>
''' <returns></returns>
Public Function ExecuteReader(commandText As String, commandParams As DbParameterCollection) As DbDataReader
Dim result As DbDataReader
Try
_command.CommandText = commandText
_command.Parameters.Clear()
For Each param As DbParameter In commandParams
_command.Parameters.Add(param)
Next
result = _command.ExecuteReader()
Catch ex As Exception
Throw
End Try
Return result
End Function
''' <summary>
''' 执行数据库语句,返回查询结果的第一行第一列的内容
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <returns></returns>
Public Function ExecuteScalar(commandText As String) As Object
Dim result As Object
Try
_command.CommandText = commandText
result = _command.ExecuteScalar()
Catch ex As Exception
Throw
End Try
Return result
End Function
''' <summary>
''' 使用命令参数模式执行数据库语句,返回查询结果的第一行第一列的内容
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <param name="commandParams">执行的数据库命令参数</param>
''' <returns></returns>
Public Function ExecuteScalar(commandText As String, commandParams As DbParameterCollection) As Object
Dim result As Object
Try
_command.CommandText = commandText
_command.Parameters.Clear()
For Each param As DbParameter In commandParams
_command.Parameters.Add(param)
Next
result = _command.ExecuteScalar()
Catch ex As Exception
Throw
End Try
Return result
End Function
''' <summary>
''' 执行数据库语句,返回执行结果返回的数据表,常用于查询命令
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <returns></returns>
Public Function ExecuteDataTable(commandText As String, Optional withKey As Boolean = True) As DataTable
Dim dataTable As New DataTable
Try
_command.CommandText = commandText
If withKey Then
_dataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
Else
_dataAdapter.MissingSchemaAction = MissingSchemaAction.Add
End If
_dataAdapter.SelectCommand = _command
_dataAdapter.Fill(dataTable)
Catch ex As Exception
'Throw
End Try
Return dataTable
End Function
''' <summary>
''' 执行数据库语句,返回执行结果返回的数据表,常用于查询命令
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <param name="commandParams">执行的数据库命令参数</param>
''' <returns></returns>
Public Function ExecuteDataTable(commandText As String, commandParams As DbParameterCollection) As DataTable
Dim dataTable As New DataTable
Try
_command.CommandText = commandText
_command.Parameters.Clear()
For Each param As DbParameter In commandParams
_command.Parameters.Add(param)
Next
_dataAdapter.SelectCommand = _command
_dataAdapter.Fill(dataTable)
Catch ex As Exception
Throw
End Try
Return dataTable
End Function
''' <summary>
''' 开启事务
''' </summary>
''' <returns></returns>
Public Function BeginTransaction() As DbTransaction
_transaction = _connection.BeginTransaction()
Return _transaction
End Function
''' <summary>
''' 提交事务
''' </summary>
Public Sub CommitTransaction()
Try
_transaction.Commit()
Catch ex As Exception
Throw
End Try
End Sub
''' <summary>
''' 回滚事务
''' </summary>
Public Sub RollbackTransaction()
Try
_transaction.Rollback()
Catch ex As Exception
Throw
End Try
End Sub
''' <summary>
''' 创建数据参数
''' </summary>
''' <param name="type">参数数据类型</param>
''' <param name="ParameterName">参数名称</param>
''' <param name="value">参数值</param>
''' <returns></returns>
Public Function CreateDbParameter(type As DbType, parameterName As String, value As Object) As DbParameter
Dim dbParam As DbParameter = _command.CreateParameter()
dbParam.DbType = type
dbParam.ParameterName = parameterName
dbParam.Value = value
Return dbParam
End Function
''' <summary>
''' 添加数据参数
''' </summary>
''' <param name="type"></param>
''' <param name="parameterName"></param>
''' <param name="value"></param>
''' <returns></returns>
Public Function AddDbParameter(type As DbType, parameterName As String, value As Object) As DbParameter
Dim dbParam As DbParameter = _command.CreateParameter()
dbParam.DbType = type
dbParam.ParameterName = parameterName
dbParam.Value = value
_command.Parameters.Add(dbParam)
Return dbParam
End Function
''' <summary>
''' 清空数据
''' </summary>
Public Sub ClearDbParameter()
_command.Parameters.Clear()
End Sub
''' <summary>
''' 回收资源
''' </summary>
Public Sub Dispose() Implements IDisposable.Dispose
If _connection IsNot Nothing Then
If _connection.State = ConnectionState.Open Then
_connection.Close()
End If
_connection.Dispose()
End If
If _command IsNot Nothing Then _command.Dispose()
If _dataAdapter IsNot Nothing Then _dataAdapter.Dispose()
GC.Collect() '对所有缓存垃圾进行回收
End Sub
End Class

View File

@@ -0,0 +1,10 @@
Namespace Database.Mssql
Public Class MssqlCmdHelper
Inherits DbCmdHelper
Sub New()
FiledSuffix = "["c
FiledPrefix = "]"c
End Sub
End Class
End Namespace

View File

@@ -0,0 +1,8 @@
Public Class MssqlCmdHelper
Inherits DbCmdHelper
Sub New()
FiledSuffix = "["c
FiledPrefix = "]"c
End Sub
End Class

View File

@@ -0,0 +1,222 @@
Imports System.Text
Namespace Database.Mysql
Public Class DataParam
Enum DataTypeEnum
'###############################数值类型#############################
''' <summary>
''' 1 byte,小整数值
''' </summary>
Tinyint
''' <summary>
''' 2 bytes,大整数值
''' </summary>
Smallint
''' <summary>
''' 3 bytes,大整数值
''' </summary>
Mediumint
''' <summary>
''' 4 bytes,大整数值
''' </summary>
Int
''' <summary>
''' 4 bytes,大整数值
''' </summary>
[Integer]
''' <summary>
''' 8 bytes,极大整数值
''' </summary>
Bigint
''' <summary>
''' 4 bytes,单精度浮点数值
''' </summary>
Float
''' <summary>
''' 8 bytes,双精度浮点数值
''' </summary>
[Double]
'####################日期类型###############################
''' <summary>
''' 对DECIMAL(M,D) 如果M>D为M+2否则为D+2.小数值
''' </summary>
[Decimal]
''' <summary>
''' 3 bytes,日期值,YYYY-MM-DD
''' </summary>
[Date]
''' <summary>
''' 3 bytes,时间值或持续时间,HH:MM:SS
''' </summary>
Time
''' <summary>
''' 1 bytes,年份值,YYYY
''' </summary>
Year
''' <summary>
''' 8 bytes,混合日期和时间值,YYYY-MM-DD HH:MM:SS
''' </summary>
Datetime
''' <summary>
''' 4 bytes,混合日期和时间值,时间戳,YYYYMMDD HHMMSS
''' </summary>
Timestamp
'####################字符类型###############################
''' <summary>
''' 0-255 bytes,定长字符串
''' </summary>
[Char]
''' <summary>
''' 0-65535 bytes,变长字符串
''' </summary>
Varchar
''' <summary>
''' 0-255 bytes,不超过 255 个字符的二进制字符串
''' </summary>
Tinyblob
''' <summary>
''' 0-255 bytes,短文本字符串
''' </summary>
Tinytext
''' <summary>
''' 0-65 535 bytes,二进制形式的长文本数据
''' </summary>
Blob
''' <summary>
''' 0-65 535 bytes,长文本数据
''' </summary>
Text
''' <summary>
''' 0-16 777 215 bytes,二进制形式的中等长度文本数据
''' </summary>
Mediumblob
''' <summary>
''' 0-16 777 215 bytes,中等长度文本数据
''' </summary>
Mediumtext
''' <summary>
''' 0-4 294 967 295 bytes,二进制形式的极大文本数据
''' </summary>
Longblob
''' <summary>
''' 0-4 294 967 295 bytes,极大文本数据
''' </summary>
Longtext
End Enum
''' <summary>
''' 列名
''' </summary>
''' <returns></returns>
Public Property ColumnName() As String
''' <summary>
''' 当前值
''' </summary>
''' <returns></returns>
Public Property Value() As String
''' <summary>
''' 默认值
''' </summary>
''' <returns></returns>
Public Property DefaultValue() As String
''' <summary>
''' 数据类型
''' </summary>
''' <returns></returns>
Public Property DataType() As DataTypeEnum
''' <summary>
''' 数据类型长度
''' </summary>
''' <returns></returns>
Public Property DataTypeLength() As Integer
''' <summary>
''' 数据类型是否带符号
''' </summary>
''' <returns></returns>
Public Property IsUnsigned() As Boolean
''' <summary>
''' 是否允许为空
''' </summary>
''' <returns></returns>
Public Property IsNull() As Boolean = True
''' <summary>
''' 是否自动增长
''' </summary>
''' <returns></returns>
Public Property IsAutoIncrement() As Boolean
''' <summary>
''' 是否为主键
''' </summary>
''' <returns></returns>
Public Property IsPrimaryKey() As Boolean
Public Function ToAddColString() As String
Dim sb As New StringBuilder
sb.Append($"`{ColumnName}`")
Select Case DataType
Case DataTypeEnum.Varchar,DataTypeEnum.[Char]
sb.Append($" {DataType}({DataTypeLength}) ")
Case DataTypeEnum.Int
sb.Append($" {DataType}")
if IsUnsigned Then sb.Append($" Unsigned")
If IsAutoIncrement Then sb.Append($" AUTO_INCREMENT")
Case Else
sb.Append($" {DataType}")
End Select
sb.Append(IIf(IsNull, " Default Null", " Not Null"))
If IsPrimaryKey Then
sb.Append($" PRIMARY KEY")
End If
Return sb.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,13 @@
Imports System.Text
Namespace Database.Mysql
Public Class MysqlCmdHelper
Inherits DbCmdHelper
Sub New
FiledSuffix = "`"c
FiledPrefix = "`"c
End Sub
End Class
End Namespace

View File

@@ -0,0 +1,9 @@
Public Class MysqlCmdHelper
Inherits DbCmdHelper
Sub New()
FiledSuffix = "`"c
FiledPrefix = "`"c
End Sub
End Class

View File

@@ -0,0 +1,220 @@
Imports System.Text
Public Class MysqlDataParam
Enum DataTypeEnum
'###############################数值类型#############################
''' <summary>
''' 1 byte,小整数值
''' </summary>
Tinyint
''' <summary>
''' 2 bytes,大整数值
''' </summary>
Smallint
''' <summary>
''' 3 bytes,大整数值
''' </summary>
Mediumint
''' <summary>
''' 4 bytes,大整数值
''' </summary>
Int
''' <summary>
''' 4 bytes,大整数值
''' </summary>
[Integer]
''' <summary>
''' 8 bytes,极大整数值
''' </summary>
Bigint
''' <summary>
''' 4 bytes,单精度浮点数值
''' </summary>
Float
''' <summary>
''' 8 bytes,双精度浮点数值
''' </summary>
[Double]
'####################日期类型###############################
''' <summary>
''' 对DECIMAL(M,D) 如果M>D为M+2否则为D+2.小数值
''' </summary>
[Decimal]
''' <summary>
''' 3 bytes,日期值,YYYY-MM-DD
''' </summary>
[Date]
''' <summary>
''' 3 bytes,时间值或持续时间,HH:MM:SS
''' </summary>
Time
''' <summary>
''' 1 bytes,年份值,YYYY
''' </summary>
Year
''' <summary>
''' 8 bytes,混合日期和时间值,YYYY-MM-DD HH:MM:SS
''' </summary>
Datetime
''' <summary>
''' 4 bytes,混合日期和时间值,时间戳,YYYYMMDD HHMMSS
''' </summary>
Timestamp
'####################字符类型###############################
''' <summary>
''' 0-255 bytes,定长字符串
''' </summary>
[Char]
''' <summary>
''' 0-65535 bytes,变长字符串
''' </summary>
Varchar
''' <summary>
''' 0-255 bytes,不超过 255 个字符的二进制字符串
''' </summary>
Tinyblob
''' <summary>
''' 0-255 bytes,短文本字符串
''' </summary>
Tinytext
''' <summary>
''' 0-65 535 bytes,二进制形式的长文本数据
''' </summary>
Blob
''' <summary>
''' 0-65 535 bytes,长文本数据
''' </summary>
Text
''' <summary>
''' 0-16 777 215 bytes,二进制形式的中等长度文本数据
''' </summary>
Mediumblob
''' <summary>
''' 0-16 777 215 bytes,中等长度文本数据
''' </summary>
Mediumtext
''' <summary>
''' 0-4 294 967 295 bytes,二进制形式的极大文本数据
''' </summary>
Longblob
''' <summary>
''' 0-4 294 967 295 bytes,极大文本数据
''' </summary>
Longtext
End Enum
''' <summary>
''' 列名
''' </summary>
''' <returns></returns>
Public Property ColumnName() As String
''' <summary>
''' 当前值
''' </summary>
''' <returns></returns>
Public Property Value() As String
''' <summary>
''' 默认值
''' </summary>
''' <returns></returns>
Public Property DefaultValue() As String
''' <summary>
''' 数据类型
''' </summary>
''' <returns></returns>
Public Property DataType() As DataTypeEnum
''' <summary>
''' 数据类型长度
''' </summary>
''' <returns></returns>
Public Property DataTypeLength() As Integer
''' <summary>
''' 数据类型是否带符号
''' </summary>
''' <returns></returns>
Public Property IsUnsigned() As Boolean
''' <summary>
''' 是否允许为空
''' </summary>
''' <returns></returns>
Public Property IsNull() As Boolean = True
''' <summary>
''' 是否自动增长
''' </summary>
''' <returns></returns>
Public Property IsAutoIncrement() As Boolean
''' <summary>
''' 是否为主键
''' </summary>
''' <returns></returns>
Public Property IsPrimaryKey() As Boolean
Public Function ToAddColString() As String
Dim sb As New StringBuilder
sb.Append($"`{ColumnName}`")
Select Case DataType
Case DataTypeEnum.Varchar, DataTypeEnum.[Char]
sb.Append($" {DataType}({DataTypeLength}) ")
Case DataTypeEnum.Int
sb.Append($" {DataType}")
If IsUnsigned Then sb.Append($" Unsigned")
If IsAutoIncrement Then sb.Append($" AUTO_INCREMENT")
Case Else
sb.Append($" {DataType}")
End Select
sb.Append(IIf(IsNull, " Default Null", " Not Null"))
If IsPrimaryKey Then
sb.Append($" PRIMARY KEY")
End If
Return sb.ToString()
End Function
End Class

View File

@@ -0,0 +1,106 @@
Imports System.Text
Namespace Database.Sqlite
Public Class DataParam
Enum DataTypeEnum
Varchar
Nchar
Blob
Bit
Datetime
[Decimal]
Real
UniqueIdentifier
Int
[Integer]
TinyInt
[Single]
Nvarchar
SmallInt
SmallUint
Uint
UnsignedInteger
End Enum
''' <summary>
''' 列名
''' </summary>
''' <returns></returns>
Public Property ColumnName() As String
''' <summary>
''' 当前值
''' </summary>
''' <returns></returns>
Public Property Value() As String
''' <summary>
''' 默认值
''' </summary>
''' <returns></returns>
Public Property DefaultValue() As String
''' <summary>
''' 数据类型
''' </summary>
''' <returns></returns>
Public Property DataType() As DataTypeEnum
''' <summary>
''' 数据类型长度
''' </summary>
''' <returns></returns>
Public Property DataTypeLength() As Integer
''' <summary>
''' 是否允许为空
''' </summary>
''' <returns></returns>
Public Property IsNull() As Boolean = True
''' <summary>
''' 是否自动增长
''' </summary>
''' <returns></returns>
Public Property IsAutoIncrement() As Boolean
''' <summary>
''' 是否为主键
''' </summary>
''' <returns></returns>
Public Property IsPrimaryKey() As Boolean
''' <summary>
''' 是否为唯一值
''' </summary>
''' <returns></returns>
Public Property IsUnique() As Boolean
Public Function ToAddColString() As String
Dim sb As New StringBuilder
sb.Append($"`{ColumnName}`")
Select Case DataType
Case DataTypeEnum.Varchar, DataTypeEnum.Nchar, DataTypeEnum.Nvarchar
sb.Append($" {DataType}({DataTypeLength}) ")
Case DataTypeEnum.Int,DataTypeEnum.Integer
sb.Append($" {DataType}")
Case Else
sb.Append($" {DataType}")
End Select
If IsAutoIncrement Then sb.Append($" AUTOINCREMENT")
sb.Append(IIf(IsNull, " Default Null", " Not Null"))
If IsPrimaryKey Then
sb.Append($" PRIMARY KEY")
End If
Return sb.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,20 @@
Namespace Database.Sqlite
Public Class SqliteCmdHelper
Inherits DbCmdHelper
Sub New()
FiledSuffix = "["c
FiledPrefix = "]"c
End Sub
''' <summary>
''' 查询指定数据表的信息
''' </summary>
''' <param name="tableName"></param>
''' <returns></returns>
Public Overrides Function SearchTableInfo(tableName As String) As String
Return $"select * from sqlite_master where tbl_name = '{tableName}';"
End Function
End Class
End Namespace

View File

@@ -0,0 +1,19 @@

Public Class SqliteCmdHelper
Inherits DbCmdHelper
Sub New()
FiledSuffix = "["c
FiledPrefix = "]"c
End Sub
''' <summary>
''' 查询指定数据表的信息
''' </summary>
''' <param name="tableName"></param>
''' <returns></returns>
Public Overrides Function SearchTableInfo(tableName As String) As String
Return $"select * from sqlite_master where tbl_name = '{tableName}';"
End Function
End Class

View File

@@ -0,0 +1,105 @@
Imports System.Text
Public Class SqliteDataParam
Enum DataTypeEnum
Varchar
Nchar
Blob
Bit
Datetime
[Decimal]
Real
UniqueIdentifier
Int
[Integer]
TinyInt
[Single]
Nvarchar
SmallInt
SmallUint
Uint
UnsignedInteger
End Enum
''' <summary>
''' 列名
''' </summary>
''' <returns></returns>
Public Property ColumnName() As String
''' <summary>
''' 当前值
''' </summary>
''' <returns></returns>
Public Property Value() As String
''' <summary>
''' 默认值
''' </summary>
''' <returns></returns>
Public Property DefaultValue() As String
''' <summary>
''' 数据类型
''' </summary>
''' <returns></returns>
Public Property DataType() As DataTypeEnum
''' <summary>
''' 数据类型长度
''' </summary>
''' <returns></returns>
Public Property DataTypeLength() As Integer
''' <summary>
''' 是否允许为空
''' </summary>
''' <returns></returns>
Public Property IsNull() As Boolean = True
''' <summary>
''' 是否自动增长
''' </summary>
''' <returns></returns>
Public Property IsAutoIncrement() As Boolean
''' <summary>
''' 是否为主键
''' </summary>
''' <returns></returns>
Public Property IsPrimaryKey() As Boolean
''' <summary>
''' 是否为唯一值
''' </summary>
''' <returns></returns>
Public Property IsUnique() As Boolean
Public Function ToAddColString() As String
Dim sb As New StringBuilder
sb.Append($"`{ColumnName}`")
Select Case DataType
Case DataTypeEnum.Varchar, DataTypeEnum.Nchar, DataTypeEnum.Nvarchar
sb.Append($" {DataType}({DataTypeLength}) ")
Case DataTypeEnum.Int, DataTypeEnum.Integer
sb.Append($" {DataType}")
Case Else
sb.Append($" {DataType}")
End Select
If IsAutoIncrement Then sb.Append($" AUTOINCREMENT")
sb.Append(IIf(IsNull, " Default Null", " Not Null"))
If IsPrimaryKey Then
sb.Append($" PRIMARY KEY")
End If
Return sb.ToString()
End Function
End Class

View File

@@ -0,0 +1,114 @@
Public Class DeviceListInfo
''' <summary>
''' 设备类型
''' </summary>
Public Property DevType As String
''' <summary>
''' 设备地址
''' </summary>
Public Property DevAddr As String
''' <summary>
''' 设备状态
''' </summary>
Public Property DevState As String
''' <summary>
''' 设备名称
''' </summary>
Public Property DevName As String
''' <summary>
''' 设备控制计数
''' </summary>
Public Property DevControlCount As Integer
''' <summary>
''' 设备控制信息
''' </summary>
Public Property DevControlInfo As String
''' <summary>
''' 设备测试成功率
''' </summary>
Public Property DevTest As String
''' <summary>
''' 初始化
''' </summary>
Sub New()
DevType = ""
Me.DevAddr = ""
DevName = GetDevName(DevType, DevAddr)
DevState = $"未知"
DevControlCount = 0
DevControlInfo = ""
DevTest = ""
End Sub
''' <summary>
''' 初始化
''' </summary>
''' <param name="devType">设备类型</param>
''' <param name="devAddr">设备地址</param>
Sub New(devType As String, devAddr As String)
Me.DevType = devType
Me.DevAddr = devAddr
DevName = GetDevName(devType, devAddr)
DevState = $"未知"
DevControlCount = 0
DevControlInfo = ""
DevTest = ""
End Sub
''' <summary>
''' 初始化
''' </summary>
''' <param name="devType">设备类型</param>
''' <param name="devAddr">设备地址</param>
''' <param name="devState">设备状态</param>
Sub New(devType As String, devAddr As String, devState As String)
Me.DevType = devType
Me.DevAddr = devAddr
DevName = GetDevName(devType, devAddr)
Me.DevState = devState
DevControlCount = 0
DevControlInfo = ""
DevTest = ""
End Sub
''' <summary>
''' 获取设备名称
''' </summary>
''' <param name="devType">设备类型</param>
''' <param name="devAddr">设备地址</param>
''' <returns></returns>
Public Shared Function GetDevName(devType As String, devAddr As String) As String
Return $"{devType}_{devAddr}"
End Function
''' <summary>
''' 复位状态
''' </summary>
Public Sub ResetState()
DevState = $"未知"
End Sub
End Class

87
RCU-10/RCU/Dialog1.Designer.vb generated Normal file
View File

@@ -0,0 +1,87 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Dialog1
Inherits System.Windows.Forms.Form
'Form 重写 Dispose以清理组件列表。
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Windows 窗体设计器所必需的
Private components As System.ComponentModel.IContainer
'注意: 以下过程是 Windows 窗体设计器所必需的
'可以使用 Windows 窗体设计器修改它。
'不要使用代码编辑器修改它。
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel
Me.OK_Button = New System.Windows.Forms.Button
Me.Cancel_Button = New System.Windows.Forms.Button
Me.TableLayoutPanel1.SuspendLayout()
Me.SuspendLayout()
'
'TableLayoutPanel1
'
Me.TableLayoutPanel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.TableLayoutPanel1.ColumnCount = 2
Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0)
Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0)
Me.TableLayoutPanel1.Location = New System.Drawing.Point(277, 274)
Me.TableLayoutPanel1.Name = "TableLayoutPanel1"
Me.TableLayoutPanel1.RowCount = 1
Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
Me.TableLayoutPanel1.Size = New System.Drawing.Size(146, 29)
Me.TableLayoutPanel1.TabIndex = 0
'
'OK_Button
'
Me.OK_Button.Anchor = System.Windows.Forms.AnchorStyles.None
Me.OK_Button.Location = New System.Drawing.Point(3, 3)
Me.OK_Button.Name = "OK_Button"
Me.OK_Button.Size = New System.Drawing.Size(67, 23)
Me.OK_Button.TabIndex = 0
Me.OK_Button.Text = "确定"
'
'Cancel_Button
'
Me.Cancel_Button.Anchor = System.Windows.Forms.AnchorStyles.None
Me.Cancel_Button.Location = New System.Drawing.Point(76, 3)
Me.Cancel_Button.Name = "Cancel_Button"
Me.Cancel_Button.Size = New System.Drawing.Size(67, 23)
Me.Cancel_Button.TabIndex = 1
Me.Cancel_Button.Text = "取消"
'
'Dialog1
'
Me.AcceptButton = Me.OK_Button
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.CancelButton = Me.Cancel_Button
Me.ClientSize = New System.Drawing.Size(435, 315)
Me.Controls.Add(Me.TableLayoutPanel1)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "Dialog1"
Me.ShowInTaskbar = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent
Me.Text = "Dialog1"
Me.TableLayoutPanel1.ResumeLayout(False)
Me.ResumeLayout(False)
End Sub
Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel
Friend WithEvents OK_Button As System.Windows.Forms.Button
Friend WithEvents Cancel_Button As System.Windows.Forms.Button
End Class

15
RCU-10/RCU/Dialog1.vb Normal file
View File

@@ -0,0 +1,15 @@
Imports System.Windows.Forms
Public Class Dialog1
Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
Me.DialogResult = System.Windows.Forms.DialogResult.OK
Me.Close()
End Sub
Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click
Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.Close()
End Sub
End Class

296
RCU-10/RCU/Frm485Update.Designer.vb generated Normal file
View File

@@ -0,0 +1,296 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Frm485Update
Inherits System.Windows.Forms.Form
'Form 重写 Dispose以清理组件列表。
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Windows 窗体设计器所必需的
Private components As System.ComponentModel.IContainer
'注意: 以下过程是 Windows 窗体设计器所必需的
'可以使用 Windows 窗体设计器修改它。
'不要使用代码编辑器修改它。
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.StatusStrip1 = New System.Windows.Forms.StatusStrip()
Me.TSSLbl1 = New System.Windows.Forms.ToolStripStatusLabel()
Me.ToolStripStatusLabel1 = New System.Windows.Forms.ToolStripStatusLabel()
Me.TSPBar1 = New System.Windows.Forms.ToolStripProgressBar()
Me.SplitContainer1 = New System.Windows.Forms.SplitContainer()
Me.GroupBox1 = New System.Windows.Forms.GroupBox()
Me.ComboBox2 = New System.Windows.Forms.ComboBox()
Me.Label4 = New System.Windows.Forms.Label()
Me.Button1 = New System.Windows.Forms.Button()
Me.TextBox1 = New System.Windows.Forms.TextBox()
Me.BtnUpdateFile = New System.Windows.Forms.Button()
Me.BtnSelectFile = New System.Windows.Forms.Button()
Me.BtnSearch = New System.Windows.Forms.Button()
Me.Label3 = New System.Windows.Forms.Label()
Me.NumericUpDown2 = New System.Windows.Forms.NumericUpDown()
Me.Label2 = New System.Windows.Forms.Label()
Me.NumericUpDown1 = New System.Windows.Forms.NumericUpDown()
Me.Label1 = New System.Windows.Forms.Label()
Me.ComboBox1 = New System.Windows.Forms.ComboBox()
Me.GrdTypeInfo = New FlexCell.Grid()
Me.StatusStrip1.SuspendLayout
CType(Me.SplitContainer1,System.ComponentModel.ISupportInitialize).BeginInit
Me.SplitContainer1.Panel1.SuspendLayout
Me.SplitContainer1.Panel2.SuspendLayout
Me.SplitContainer1.SuspendLayout
Me.GroupBox1.SuspendLayout
CType(Me.NumericUpDown2,System.ComponentModel.ISupportInitialize).BeginInit
CType(Me.NumericUpDown1,System.ComponentModel.ISupportInitialize).BeginInit
Me.SuspendLayout
'
'StatusStrip1
'
Me.StatusStrip1.Font = New System.Drawing.Font("微软雅黑", 12!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134,Byte))
Me.StatusStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TSSLbl1, Me.ToolStripStatusLabel1, Me.TSPBar1})
Me.StatusStrip1.Location = New System.Drawing.Point(0, 456)
Me.StatusStrip1.Name = "StatusStrip1"
Me.StatusStrip1.Size = New System.Drawing.Size(404, 26)
Me.StatusStrip1.TabIndex = 0
Me.StatusStrip1.Text = "StatusStrip1"
'
'TSSLbl1
'
Me.TSSLbl1.Name = "TSSLbl1"
Me.TSSLbl1.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.TSSLbl1.Size = New System.Drawing.Size(187, 21)
Me.TSSLbl1.Spring = true
Me.TSSLbl1.Text = "等待解析"
Me.TSSLbl1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
'
'ToolStripStatusLabel1
'
Me.ToolStripStatusLabel1.Name = "ToolStripStatusLabel1"
Me.ToolStripStatusLabel1.Size = New System.Drawing.Size(20, 21)
Me.ToolStripStatusLabel1.Text = " "
'
'TSPBar1
'
Me.TSPBar1.Name = "TSPBar1"
Me.TSPBar1.Size = New System.Drawing.Size(180, 20)
'
'SplitContainer1
'
Me.SplitContainer1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
Me.SplitContainer1.Dock = System.Windows.Forms.DockStyle.Fill
Me.SplitContainer1.Location = New System.Drawing.Point(0, 0)
Me.SplitContainer1.Name = "SplitContainer1"
Me.SplitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal
'
'SplitContainer1.Panel1
'
Me.SplitContainer1.Panel1.Controls.Add(Me.GroupBox1)
'
'SplitContainer1.Panel2
'
Me.SplitContainer1.Panel2.Controls.Add(Me.GrdTypeInfo)
Me.SplitContainer1.Size = New System.Drawing.Size(404, 456)
Me.SplitContainer1.SplitterDistance = 224
Me.SplitContainer1.TabIndex = 1
'
'GroupBox1
'
Me.GroupBox1.Controls.Add(Me.ComboBox2)
Me.GroupBox1.Controls.Add(Me.Label4)
Me.GroupBox1.Controls.Add(Me.Button1)
Me.GroupBox1.Controls.Add(Me.TextBox1)
Me.GroupBox1.Controls.Add(Me.BtnUpdateFile)
Me.GroupBox1.Controls.Add(Me.BtnSelectFile)
Me.GroupBox1.Controls.Add(Me.BtnSearch)
Me.GroupBox1.Controls.Add(Me.Label3)
Me.GroupBox1.Controls.Add(Me.NumericUpDown2)
Me.GroupBox1.Controls.Add(Me.Label2)
Me.GroupBox1.Controls.Add(Me.NumericUpDown1)
Me.GroupBox1.Controls.Add(Me.Label1)
Me.GroupBox1.Controls.Add(Me.ComboBox1)
Me.GroupBox1.Dock = System.Windows.Forms.DockStyle.Fill
Me.GroupBox1.Location = New System.Drawing.Point(0, 0)
Me.GroupBox1.Name = "GroupBox1"
Me.GroupBox1.Size = New System.Drawing.Size(402, 222)
Me.GroupBox1.TabIndex = 0
Me.GroupBox1.TabStop = false
Me.GroupBox1.Text = "升级信息"
'
'ComboBox2
'
Me.ComboBox2.FormattingEnabled = true
Me.ComboBox2.Location = New System.Drawing.Point(95, 124)
Me.ComboBox2.Name = "ComboBox2"
Me.ComboBox2.Size = New System.Drawing.Size(85, 20)
Me.ComboBox2.TabIndex = 12
'
'Label4
'
Me.Label4.AutoSize = true
Me.Label4.Location = New System.Drawing.Point(12, 127)
Me.Label4.Name = "Label4"
Me.Label4.Size = New System.Drawing.Size(77, 12)
Me.Label4.TabIndex = 11
Me.Label4.Text = "单包字节数:"
'
'Button1
'
Me.Button1.ForeColor = System.Drawing.Color.Green
Me.Button1.Location = New System.Drawing.Point(206, 168)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(65, 29)
Me.Button1.TabIndex = 10
Me.Button1.Text = "测试"
Me.Button1.UseVisualStyleBackColor = true
'
'TextBox1
'
Me.TextBox1.Location = New System.Drawing.Point(14, 89)
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.Size = New System.Drawing.Size(257, 21)
Me.TextBox1.TabIndex = 9
'
'BtnUpdateFile
'
Me.BtnUpdateFile.ForeColor = System.Drawing.Color.Green
Me.BtnUpdateFile.Location = New System.Drawing.Point(292, 119)
Me.BtnUpdateFile.Name = "BtnUpdateFile"
Me.BtnUpdateFile.Size = New System.Drawing.Size(65, 29)
Me.BtnUpdateFile.TabIndex = 8
Me.BtnUpdateFile.Text = "开始升级"
Me.BtnUpdateFile.UseVisualStyleBackColor = true
'
'BtnSelectFile
'
Me.BtnSelectFile.Location = New System.Drawing.Point(292, 84)
Me.BtnSelectFile.Name = "BtnSelectFile"
Me.BtnSelectFile.Size = New System.Drawing.Size(65, 29)
Me.BtnSelectFile.TabIndex = 7
Me.BtnSelectFile.Text = "选择文件"
Me.BtnSelectFile.UseVisualStyleBackColor = true
'
'BtnSearch
'
Me.BtnSearch.Location = New System.Drawing.Point(292, 49)
Me.BtnSearch.Name = "BtnSearch"
Me.BtnSearch.Size = New System.Drawing.Size(65, 29)
Me.BtnSearch.TabIndex = 6
Me.BtnSearch.Text = "搜索"
Me.BtnSearch.UseVisualStyleBackColor = true
'
'Label3
'
Me.Label3.AutoSize = true
Me.Label3.Location = New System.Drawing.Point(153, 59)
Me.Label3.Name = "Label3"
Me.Label3.Size = New System.Drawing.Size(17, 12)
Me.Label3.TabIndex = 5
Me.Label3.Text = ""
'
'NumericUpDown2
'
Me.NumericUpDown2.Location = New System.Drawing.Point(176, 55)
Me.NumericUpDown2.Name = "NumericUpDown2"
Me.NumericUpDown2.Size = New System.Drawing.Size(64, 21)
Me.NumericUpDown2.TabIndex = 4
'
'Label2
'
Me.Label2.AutoSize = true
Me.Label2.Location = New System.Drawing.Point(12, 57)
Me.Label2.Name = "Label2"
Me.Label2.Size = New System.Drawing.Size(65, 12)
Me.Label2.TabIndex = 3
Me.Label2.Text = "搜索范围:"
'
'NumericUpDown1
'
Me.NumericUpDown1.Location = New System.Drawing.Point(83, 55)
Me.NumericUpDown1.Name = "NumericUpDown1"
Me.NumericUpDown1.Size = New System.Drawing.Size(64, 21)
Me.NumericUpDown1.TabIndex = 2
'
'Label1
'
Me.Label1.AutoSize = true
Me.Label1.Location = New System.Drawing.Point(12, 23)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(41, 12)
Me.Label1.TabIndex = 1
Me.Label1.Text = "设备:"
'
'ComboBox1
'
Me.ComboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.ComboBox1.FormattingEnabled = true
Me.ComboBox1.Location = New System.Drawing.Point(59, 20)
Me.ComboBox1.Name = "ComboBox1"
Me.ComboBox1.Size = New System.Drawing.Size(121, 20)
Me.ComboBox1.TabIndex = 0
'
'GrdTypeInfo
'
Me.GrdTypeInfo.CheckedImage = Nothing
Me.GrdTypeInfo.DefaultFont = New System.Drawing.Font("宋体", 9!)
Me.GrdTypeInfo.Dock = System.Windows.Forms.DockStyle.Fill
Me.GrdTypeInfo.Font = New System.Drawing.Font("宋体", 9!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134,Byte))
Me.GrdTypeInfo.GridColor = System.Drawing.Color.FromArgb(CType(CType(192,Byte),Integer), CType(CType(192,Byte),Integer), CType(CType(192,Byte),Integer))
Me.GrdTypeInfo.Location = New System.Drawing.Point(0, 0)
Me.GrdTypeInfo.Name = "GrdTypeInfo"
Me.GrdTypeInfo.Size = New System.Drawing.Size(402, 226)
Me.GrdTypeInfo.TabIndex = 0
Me.GrdTypeInfo.UncheckedImage = Nothing
'
'Frm485Update
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6!, 12!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(404, 482)
Me.Controls.Add(Me.SplitContainer1)
Me.Controls.Add(Me.StatusStrip1)
Me.Name = "Frm485Update"
Me.Text = "Frm485Update"
Me.StatusStrip1.ResumeLayout(false)
Me.StatusStrip1.PerformLayout
Me.SplitContainer1.Panel1.ResumeLayout(false)
Me.SplitContainer1.Panel2.ResumeLayout(false)
CType(Me.SplitContainer1,System.ComponentModel.ISupportInitialize).EndInit
Me.SplitContainer1.ResumeLayout(false)
Me.GroupBox1.ResumeLayout(false)
Me.GroupBox1.PerformLayout
CType(Me.NumericUpDown2,System.ComponentModel.ISupportInitialize).EndInit
CType(Me.NumericUpDown1,System.ComponentModel.ISupportInitialize).EndInit
Me.ResumeLayout(false)
Me.PerformLayout
End Sub
Friend WithEvents StatusStrip1 As StatusStrip
Friend WithEvents SplitContainer1 As SplitContainer
Friend WithEvents GrdTypeInfo As FlexCell.Grid
Friend WithEvents GroupBox1 As GroupBox
Friend WithEvents Label1 As Label
Friend WithEvents ComboBox1 As ComboBox
Friend WithEvents BtnUpdateFile As Button
Friend WithEvents BtnSelectFile As Button
Friend WithEvents BtnSearch As Button
Friend WithEvents Label3 As Label
Friend WithEvents NumericUpDown2 As NumericUpDown
Friend WithEvents Label2 As Label
Friend WithEvents NumericUpDown1 As NumericUpDown
Friend WithEvents TextBox1 As TextBox
Friend WithEvents TSSLbl1 As ToolStripStatusLabel
Friend WithEvents ToolStripStatusLabel1 As ToolStripStatusLabel
Friend WithEvents TSPBar1 As ToolStripProgressBar
Friend WithEvents Button1 As Button
Friend WithEvents ComboBox2 As ComboBox
Friend WithEvents Label4 As Label
End Class

View File

@@ -0,0 +1,180 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="StatusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="StatusStrip1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="SplitContainer1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="GroupBox1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="ComboBox2.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label4.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Button1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TextBox1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnUpdateFile.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnSelectFile.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnSearch.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label3.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="NumericUpDown2.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label2.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="NumericUpDown1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="ComboBox1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="GrdTypeInfo.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>61</value>
</metadata>
</root>

1398
RCU-10/RCU/Frm485Update.vb Normal file

File diff suppressed because it is too large Load Diff

342
RCU-10/RCU/FrmC43Function.Designer.vb generated Normal file
View File

@@ -0,0 +1,342 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class FrmC43Function
Inherits System.Windows.Forms.Form
'Form 重写 Dispose以清理组件列表。
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Windows 窗体设计器所必需的
Private components As System.ComponentModel.IContainer
'注意: 以下过程是 Windows 窗体设计器所必需的
'可以使用 Windows 窗体设计器修改它。
'不要使用代码编辑器修改它。
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(FrmC43Function))
Me.GrpC43cfg = New System.Windows.Forms.GroupBox()
Me.TSC43Config = New System.Windows.Forms.ToolStrip()
Me.TsBtnC43cfgData = New System.Windows.Forms.ToolStripButton()
Me.ToolStripSeparator1 = New System.Windows.Forms.ToolStripSeparator()
Me.TsBtnAddRows = New System.Windows.Forms.ToolStripButton()
Me.ToolStripSeparator2 = New System.Windows.Forms.ToolStripSeparator()
Me.TsBtnDelete = New System.Windows.Forms.ToolStripButton()
Me.ToolStripSeparator3 = New System.Windows.Forms.ToolStripSeparator()
Me.TsBtnSave = New System.Windows.Forms.ToolStripButton()
Me.TsBtnRead = New System.Windows.Forms.ToolStripButton()
Me.GrdC43cfg = New FlexCell.Grid()
Me.GrpC43 = New System.Windows.Forms.GroupBox()
Me.NudInterval = New System.Windows.Forms.NumericUpDown()
Me.Label3 = New System.Windows.Forms.Label()
Me.BtnIssuesData = New System.Windows.Forms.Button()
Me.NudAddress = New System.Windows.Forms.NumericUpDown()
Me.Lbladdress = New System.Windows.Forms.Label()
Me.BtnReleaseUpgrade = New System.Windows.Forms.Button()
Me.NudC43Port = New System.Windows.Forms.NumericUpDown()
Me.BtnSearch = New System.Windows.Forms.Button()
Me.NudC43TimeOut = New System.Windows.Forms.NumericUpDown()
Me.Label6 = New System.Windows.Forms.Label()
Me.Label8 = New System.Windows.Forms.Label()
Me.OpenFileDialog1 = New System.Windows.Forms.OpenFileDialog()
Me.SaveFileDialog1 = New System.Windows.Forms.SaveFileDialog()
Me.BackgroundWorker1 = New System.ComponentModel.BackgroundWorker()
Me.BackgroundWorker2 = New System.ComponentModel.BackgroundWorker()
Me.GrpC43cfg.SuspendLayout()
Me.TSC43Config.SuspendLayout()
Me.GrpC43.SuspendLayout()
CType(Me.NudInterval, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.NudAddress, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.NudC43Port, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.NudC43TimeOut, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'GrpC43cfg
'
Me.GrpC43cfg.Controls.Add(Me.TSC43Config)
Me.GrpC43cfg.Controls.Add(Me.GrdC43cfg)
Me.GrpC43cfg.Dock = System.Windows.Forms.DockStyle.Bottom
Me.GrpC43cfg.Font = New System.Drawing.Font("幼圆", 10.5!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.GrpC43cfg.Location = New System.Drawing.Point(0, 158)
Me.GrpC43cfg.Name = "GrpC43cfg"
Me.GrpC43cfg.Size = New System.Drawing.Size(404, 324)
Me.GrpC43cfg.TabIndex = 5
Me.GrpC43cfg.TabStop = False
Me.GrpC43cfg.Text = "C43配置"
'
'TSC43Config
'
Me.TSC43Config.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TsBtnC43cfgData, Me.ToolStripSeparator1, Me.TsBtnAddRows, Me.ToolStripSeparator2, Me.TsBtnDelete, Me.ToolStripSeparator3, Me.TsBtnSave, Me.TsBtnRead})
Me.TSC43Config.Location = New System.Drawing.Point(3, 19)
Me.TSC43Config.Name = "TSC43Config"
Me.TSC43Config.Size = New System.Drawing.Size(398, 25)
Me.TSC43Config.TabIndex = 22
Me.TSC43Config.Text = "ToolStrip1"
'
'TsBtnC43cfgData
'
Me.TsBtnC43cfgData.Image = CType(resources.GetObject("TsBtnC43cfgData.Image"), System.Drawing.Image)
Me.TsBtnC43cfgData.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnC43cfgData.Name = "TsBtnC43cfgData"
Me.TsBtnC43cfgData.Size = New System.Drawing.Size(74, 22)
Me.TsBtnC43cfgData.Text = "C43配置"
'
'ToolStripSeparator1
'
Me.ToolStripSeparator1.Name = "ToolStripSeparator1"
Me.ToolStripSeparator1.Size = New System.Drawing.Size(6, 25)
'
'TsBtnAddRows
'
Me.TsBtnAddRows.Image = CType(resources.GetObject("TsBtnAddRows.Image"), System.Drawing.Image)
Me.TsBtnAddRows.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnAddRows.Name = "TsBtnAddRows"
Me.TsBtnAddRows.Size = New System.Drawing.Size(52, 22)
Me.TsBtnAddRows.Text = "增加"
'
'ToolStripSeparator2
'
Me.ToolStripSeparator2.Name = "ToolStripSeparator2"
Me.ToolStripSeparator2.Size = New System.Drawing.Size(6, 25)
'
'TsBtnDelete
'
Me.TsBtnDelete.Image = CType(resources.GetObject("TsBtnDelete.Image"), System.Drawing.Image)
Me.TsBtnDelete.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnDelete.Name = "TsBtnDelete"
Me.TsBtnDelete.Size = New System.Drawing.Size(52, 22)
Me.TsBtnDelete.Text = "删除"
'
'ToolStripSeparator3
'
Me.ToolStripSeparator3.Name = "ToolStripSeparator3"
Me.ToolStripSeparator3.Size = New System.Drawing.Size(6, 25)
'
'TsBtnSave
'
Me.TsBtnSave.Image = CType(resources.GetObject("TsBtnSave.Image"), System.Drawing.Image)
Me.TsBtnSave.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnSave.Name = "TsBtnSave"
Me.TsBtnSave.Size = New System.Drawing.Size(52, 22)
Me.TsBtnSave.Text = "保存"
'
'TsBtnRead
'
Me.TsBtnRead.Image = CType(resources.GetObject("TsBtnRead.Image"), System.Drawing.Image)
Me.TsBtnRead.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnRead.Name = "TsBtnRead"
Me.TsBtnRead.Size = New System.Drawing.Size(52, 22)
Me.TsBtnRead.Text = "读取"
'
'GrdC43cfg
'
Me.GrdC43cfg.BorderStyle = FlexCell.BorderStyleEnum.None
Me.GrdC43cfg.CheckedImage = Nothing
Me.GrdC43cfg.Cols = 5
Me.GrdC43cfg.DefaultFont = New System.Drawing.Font("宋体", 9.0!)
Me.GrdC43cfg.Dock = System.Windows.Forms.DockStyle.Bottom
Me.GrdC43cfg.Font = New System.Drawing.Font("幼圆", 10.5!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.GrdC43cfg.GridColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer))
Me.GrdC43cfg.Location = New System.Drawing.Point(3, 47)
Me.GrdC43cfg.Name = "GrdC43cfg"
Me.GrdC43cfg.Rows = 5
Me.GrdC43cfg.Size = New System.Drawing.Size(398, 274)
Me.GrdC43cfg.TabIndex = 19
Me.GrdC43cfg.UncheckedImage = Nothing
'
'GrpC43
'
Me.GrpC43.Controls.Add(Me.NudInterval)
Me.GrpC43.Controls.Add(Me.Label3)
Me.GrpC43.Controls.Add(Me.BtnIssuesData)
Me.GrpC43.Controls.Add(Me.NudAddress)
Me.GrpC43.Controls.Add(Me.Lbladdress)
Me.GrpC43.Controls.Add(Me.BtnReleaseUpgrade)
Me.GrpC43.Controls.Add(Me.NudC43Port)
Me.GrpC43.Controls.Add(Me.BtnSearch)
Me.GrpC43.Controls.Add(Me.NudC43TimeOut)
Me.GrpC43.Controls.Add(Me.Label6)
Me.GrpC43.Controls.Add(Me.Label8)
Me.GrpC43.Dock = System.Windows.Forms.DockStyle.Top
Me.GrpC43.Font = New System.Drawing.Font("幼圆", 10.5!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.GrpC43.Location = New System.Drawing.Point(0, 0)
Me.GrpC43.Name = "GrpC43"
Me.GrpC43.Size = New System.Drawing.Size(404, 117)
Me.GrpC43.TabIndex = 4
Me.GrpC43.TabStop = False
Me.GrpC43.Text = "C43"
'
'NudInterval
'
Me.NudInterval.Font = New System.Drawing.Font("幼圆", 10.5!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.NudInterval.Location = New System.Drawing.Point(190, 68)
Me.NudInterval.Maximum = New Decimal(New Integer() {10000, 0, 0, 0})
Me.NudInterval.Minimum = New Decimal(New Integer() {10, 0, 0, 0})
Me.NudInterval.Name = "NudInterval"
Me.NudInterval.Size = New System.Drawing.Size(64, 23)
Me.NudInterval.TabIndex = 19
Me.NudInterval.Value = New Decimal(New Integer() {200, 0, 0, 0})
'
'Label3
'
Me.Label3.AutoSize = True
Me.Label3.Font = New System.Drawing.Font("幼圆", 10.5!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.Label3.Location = New System.Drawing.Point(142, 70)
Me.Label3.Name = "Label3"
Me.Label3.Size = New System.Drawing.Size(42, 14)
Me.Label3.TabIndex = 18
Me.Label3.Text = "间隔:"
'
'BtnIssuesData
'
Me.BtnIssuesData.Font = New System.Drawing.Font("幼圆", 10.5!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.BtnIssuesData.Location = New System.Drawing.Point(271, 64)
Me.BtnIssuesData.Name = "BtnIssuesData"
Me.BtnIssuesData.Size = New System.Drawing.Size(57, 27)
Me.BtnIssuesData.TabIndex = 17
Me.BtnIssuesData.Text = "下发"
Me.BtnIssuesData.UseVisualStyleBackColor = True
'
'NudAddress
'
Me.NudAddress.Font = New System.Drawing.Font("幼圆", 10.5!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.NudAddress.Location = New System.Drawing.Point(62, 68)
Me.NudAddress.Maximum = New Decimal(New Integer() {2, 0, 0, 0})
Me.NudAddress.Name = "NudAddress"
Me.NudAddress.Size = New System.Drawing.Size(64, 23)
Me.NudAddress.TabIndex = 16
'
'Lbladdress
'
Me.Lbladdress.AutoSize = True
Me.Lbladdress.Font = New System.Drawing.Font("幼圆", 10.5!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.Lbladdress.Location = New System.Drawing.Point(14, 70)
Me.Lbladdress.Name = "Lbladdress"
Me.Lbladdress.Size = New System.Drawing.Size(42, 14)
Me.Lbladdress.TabIndex = 15
Me.Lbladdress.Text = "地址:"
'
'BtnReleaseUpgrade
'
Me.BtnReleaseUpgrade.Font = New System.Drawing.Font("幼圆", 10.5!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.BtnReleaseUpgrade.Location = New System.Drawing.Point(335, 22)
Me.BtnReleaseUpgrade.Name = "BtnReleaseUpgrade"
Me.BtnReleaseUpgrade.Size = New System.Drawing.Size(57, 27)
Me.BtnReleaseUpgrade.TabIndex = 14
Me.BtnReleaseUpgrade.Text = "发布"
Me.BtnReleaseUpgrade.UseVisualStyleBackColor = True
'
'NudC43Port
'
Me.NudC43Port.Font = New System.Drawing.Font("幼圆", 10.5!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.NudC43Port.Location = New System.Drawing.Point(62, 26)
Me.NudC43Port.Maximum = New Decimal(New Integer() {3, 0, 0, 0})
Me.NudC43Port.Minimum = New Decimal(New Integer() {1, 0, 0, 0})
Me.NudC43Port.Name = "NudC43Port"
Me.NudC43Port.Size = New System.Drawing.Size(64, 23)
Me.NudC43Port.TabIndex = 13
Me.NudC43Port.Value = New Decimal(New Integer() {1, 0, 0, 0})
'
'BtnSearch
'
Me.BtnSearch.Font = New System.Drawing.Font("幼圆", 10.5!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.BtnSearch.Location = New System.Drawing.Point(271, 22)
Me.BtnSearch.Name = "BtnSearch"
Me.BtnSearch.Size = New System.Drawing.Size(57, 27)
Me.BtnSearch.TabIndex = 1
Me.BtnSearch.Text = "搜索"
Me.BtnSearch.UseVisualStyleBackColor = True
'
'NudC43TimeOut
'
Me.NudC43TimeOut.Font = New System.Drawing.Font("幼圆", 10.5!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.NudC43TimeOut.Location = New System.Drawing.Point(190, 26)
Me.NudC43TimeOut.Maximum = New Decimal(New Integer() {1000, 0, 0, 0})
Me.NudC43TimeOut.Name = "NudC43TimeOut"
Me.NudC43TimeOut.Size = New System.Drawing.Size(64, 23)
Me.NudC43TimeOut.TabIndex = 7
Me.NudC43TimeOut.Value = New Decimal(New Integer() {10, 0, 0, 0})
'
'Label6
'
Me.Label6.AutoSize = True
Me.Label6.Font = New System.Drawing.Font("幼圆", 10.5!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.Label6.Location = New System.Drawing.Point(142, 28)
Me.Label6.Name = "Label6"
Me.Label6.Size = New System.Drawing.Size(42, 14)
Me.Label6.TabIndex = 6
Me.Label6.Text = "超时:"
'
'Label8
'
Me.Label8.AutoSize = True
Me.Label8.Font = New System.Drawing.Font("幼圆", 10.5!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.Label8.Location = New System.Drawing.Point(14, 28)
Me.Label8.Name = "Label8"
Me.Label8.Size = New System.Drawing.Size(42, 14)
Me.Label8.TabIndex = 2
Me.Label8.Text = "Port:"
'
'OpenFileDialog1
'
Me.OpenFileDialog1.FileName = "OpenFileDialog1"
'
'FrmC43Function
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 12.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(404, 482)
Me.Controls.Add(Me.GrpC43cfg)
Me.Controls.Add(Me.GrpC43)
Me.Name = "FrmC43Function"
Me.Text = "C43功能模块"
Me.GrpC43cfg.ResumeLayout(false)
Me.GrpC43cfg.PerformLayout
Me.TSC43Config.ResumeLayout(false)
Me.TSC43Config.PerformLayout
Me.GrpC43.ResumeLayout(false)
Me.GrpC43.PerformLayout
CType(Me.NudInterval,System.ComponentModel.ISupportInitialize).EndInit
CType(Me.NudAddress,System.ComponentModel.ISupportInitialize).EndInit
CType(Me.NudC43Port,System.ComponentModel.ISupportInitialize).EndInit
CType(Me.NudC43TimeOut,System.ComponentModel.ISupportInitialize).EndInit
Me.ResumeLayout(false)
End Sub
Friend WithEvents GrpC43cfg As GroupBox
Friend WithEvents TSC43Config As ToolStrip
Friend WithEvents TsBtnC43cfgData As ToolStripButton
Friend WithEvents ToolStripSeparator1 As ToolStripSeparator
Friend WithEvents TsBtnAddRows As ToolStripButton
Friend WithEvents ToolStripSeparator2 As ToolStripSeparator
Friend WithEvents TsBtnDelete As ToolStripButton
Friend WithEvents ToolStripSeparator3 As ToolStripSeparator
Friend WithEvents TsBtnSave As ToolStripButton
Friend WithEvents TsBtnRead As ToolStripButton
Friend WithEvents GrdC43cfg As FlexCell.Grid
Friend WithEvents GrpC43 As GroupBox
Friend WithEvents NudInterval As NumericUpDown
Friend WithEvents Label3 As Label
Friend WithEvents BtnIssuesData As Button
Friend WithEvents NudAddress As NumericUpDown
Friend WithEvents Lbladdress As Label
Friend WithEvents BtnReleaseUpgrade As Button
Friend WithEvents NudC43Port As NumericUpDown
Friend WithEvents BtnSearch As Button
Friend WithEvents NudC43TimeOut As NumericUpDown
Friend WithEvents Label6 As Label
Friend WithEvents Label8 As Label
Friend WithEvents OpenFileDialog1 As OpenFileDialog
Friend WithEvents SaveFileDialog1 As SaveFileDialog
Friend WithEvents BackgroundWorker1 As System.ComponentModel.BackgroundWorker
Friend WithEvents BackgroundWorker2 As System.ComponentModel.BackgroundWorker
End Class

View File

@@ -0,0 +1,211 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="TSC43Config.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="TsBtnC43cfgData.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
TgDQASA1MVpwzwAAAABJRU5ErkJggg==
</value>
</data>
<data name="TsBtnAddRows.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
TgDQASA1MVpwzwAAAABJRU5ErkJggg==
</value>
</data>
<data name="TsBtnDelete.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
TgDQASA1MVpwzwAAAABJRU5ErkJggg==
</value>
</data>
<data name="TsBtnSave.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
TgDQASA1MVpwzwAAAABJRU5ErkJggg==
</value>
</data>
<data name="TsBtnRead.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
TgDQASA1MVpwzwAAAABJRU5ErkJggg==
</value>
</data>
<metadata name="OpenFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>145, 17</value>
</metadata>
<metadata name="SaveFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>295, 17</value>
</metadata>
<metadata name="BackgroundWorker1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>440, 17</value>
</metadata>
<metadata name="BackgroundWorker2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>613, 17</value>
</metadata>
</root>

View File

@@ -0,0 +1,600 @@
Imports System.IO
Imports System.Threading
Public Class FrmC43Function
Implements IModuleForm
#Region "窗体"
''' <summary>
''' 窗体加载函数
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub FrmC43Function_Load(sender As Object, e As EventArgs) Handles Me.Load
C43ConfigData() 'C43配置
End Sub
''' <summary>
''' 显示窗体接口
''' </summary>
''' <param name="parentControl"></param>
Public Sub ShowForm(parentControl As Control) Implements IModuleForm.ShowForm
FormBorderStyle = FormBorderStyle.None '无边框
TopLevel = False
Dock = DockStyle.Fill '填满大小
Parent = parentControl '父容器
Show()
End Sub
''' <summary>
''' 发送函数
''' </summary>
''' <param name="sendPacket"></param>
Public Sub SendData(sendPacket() As Byte)
FrmRCU.SendData(sendPacket) '方法1
End Sub
#End Region
#Region "C43功能配置"
''' <summary>
''' 枚举表格列名信息
''' </summary>
Enum EnListed
SerialNumber '序号
IsSelected '是否选中
ButtonName '按键号
ButtonType '按键类型
DeviceType '设备类型
DeviceNumber '设备编号
CarryWayL '执行方式L
CarryWayH '执行方式H
SceneControlWay '场景执行方式
DelayToPerform '延时执行
Remark '备注
End Enum
''' <summary>
''' C43配置数据
''' </summary>
Private Sub C43ConfigData()
GrdC43cfg.DisplayRowNumber = True
GrdC43cfg.ExtendLastCol = True
GrdC43cfg.Cols = 11
GrdC43cfg.Rows = 2
With GrdC43cfg.Cell(0, EnListed.IsSelected)
.Text = "是否选中"
.BackColor = Color.LightGray
.ForeColor = Color.Blue
.Font = New Font("Arial", 8, FontStyle.Bold)
End With
With GrdC43cfg.Cell(0, EnListed.ButtonName)
.Text = "按键号"
.BackColor = Color.LightGray
.ForeColor = Color.Blue
.Font = New Font("Arial", 8, FontStyle.Bold)
End With
With GrdC43cfg.Cell(0, EnListed.ButtonType)
.Text = "按键类型"
.BackColor = Color.LightGray
.ForeColor = Color.Blue
.Font = New Font("Arial", 8, FontStyle.Bold)
End With
With GrdC43cfg.Cell(0, EnListed.DeviceType)
.Text = "设备类型"
.BackColor = Color.LightGray
.ForeColor = Color.Blue
.Font = New Font("Arial", 8, FontStyle.Bold)
End With
With GrdC43cfg.Cell(0, EnListed.DeviceNumber)
.Text = "设备编号"
.BackColor = Color.LightGray
.ForeColor = Color.Blue
.Font = New Font("Arial", 8, FontStyle.Bold)
End With
With GrdC43cfg.Cell(0, EnListed.CarryWayL)
.Text = "执行方式"
.BackColor = Color.LightGray
.ForeColor = Color.Blue
.Font = New Font("Arial", 8, FontStyle.Bold)
End With
With GrdC43cfg.Cell(0, EnListed.CarryWayH)
.Text = "执行内容"
.BackColor = Color.LightGray
.ForeColor = Color.Blue
.Font = New Font("Arial", 8, FontStyle.Bold)
End With
With GrdC43cfg.Cell(0, EnListed.SceneControlWay)
.Text = "场景控制方式"
.BackColor = Color.LightGray
.ForeColor = Color.Blue
.Font = New Font("Arial", 8, FontStyle.Bold)
End With
With GrdC43cfg.Cell(0, EnListed.DelayToPerform)
.Text = "延时执行"
.BackColor = Color.LightGray
.ForeColor = Color.Blue
.Font = New Font("Arial", 8, FontStyle.Bold)
End With
With GrdC43cfg.Cell(0, EnListed.Remark)
.Text = "备注"
.BackColor = Color.LightGray
.ForeColor = Color.Blue
.Font = New Font("Arial", 8, FontStyle.Bold)
End With
'是否选中
GrdC43cfg.Column(EnListed.IsSelected).CellType = FlexCell.CellTypeEnum.CheckBox
GrdC43cfg.Cell(1, EnListed.IsSelected).Text = $"1"
'按键号
GrdC43cfg.Column(EnListed.ButtonName).Alignment = FlexCell.AlignmentEnum.CenterCenter
GrdC43cfg.Column(EnListed.ButtonName).Mask = FlexCell.MaskEnum.Numeric
GrdC43cfg.Column(EnListed.ButtonName).DecimalLength = 0
'按键类型
GrdC43cfg.Column(EnListed.ButtonType).Alignment = FlexCell.AlignmentEnum.CenterCenter
GrdC43cfg.Column(EnListed.ButtonType).CellType = FlexCell.CellTypeEnum.ComboBox
With GrdC43cfg.ComboBox(EnListed.ButtonType).Items
.Clear()
.Add("点按") '默认点按
.Add("松开")
.Add("长按")
End With
'设备类型
GrdC43cfg.Column(EnListed.DeviceType).Alignment = FlexCell.AlignmentEnum.CenterCenter
GrdC43cfg.Column(EnListed.DeviceType).CellType = FlexCell.CellTypeEnum.ComboBox
With GrdC43cfg.ComboBox(EnListed.DeviceType).Items
.Clear()
.Add("场景")
.Add("本地继电器")
.Add("本地服务信息")
.Add("干节点窗帘")
.Add("空调")
.Add("LED扩展")
.Add("背景音乐")
.Add("监控")
End With
'设备编号
GrdC43cfg.Column(EnListed.DeviceNumber).Alignment = FlexCell.AlignmentEnum.CenterCenter
GrdC43cfg.Column(EnListed.DeviceNumber).Mask = FlexCell.MaskEnum.Numeric
GrdC43cfg.Column(EnListed.DeviceNumber).DecimalLength = 0
'执行方式
GrdC43cfg.Column(EnListed.CarryWayL).Alignment = FlexCell.AlignmentEnum.CenterCenter
'执行内容
GrdC43cfg.Column(EnListed.CarryWayH).Alignment = FlexCell.AlignmentEnum.CenterCenter
'场景控制方式
GrdC43cfg.Column(EnListed.SceneControlWay).Alignment = FlexCell.AlignmentEnum.CenterCenter
GrdC43cfg.Column(EnListed.SceneControlWay).CellType = FlexCell.CellTypeEnum.ComboBox
With GrdC43cfg.ComboBox(EnListed.SceneControlWay).Items
.Clear()
.Add("场景单控")
.Add("场景可关闭")
End With
'延时执行
GrdC43cfg.Column(EnListed.DelayToPerform).Alignment = FlexCell.AlignmentEnum.CenterCenter
GrdC43cfg.Column(EnListed.DelayToPerform).Mask = FlexCell.MaskEnum.Numeric
GrdC43cfg.Column(EnListed.DelayToPerform).DecimalLength = 0
'备注
GrdC43cfg.Column(EnListed.Remark).Alignment = FlexCell.AlignmentEnum.LeftCenter
End Sub
''' <summary>
''' C43搜索命令—按地址搜索
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub BtnSearch_Click(sender As Object, e As EventArgs) Handles BtnSearch.Click
_sendTick = 0 '标志位
'获取Set发送内容Data部分
_port485 = $"&H{Hex(NudC43Port.Value)}"
_timeouts = $"&H{Hex(NudC43TimeOut.Value)}"
'组包C43搜索命令
Dim C43Address As Byte = $"&H{Hex(NudAddress.Value)}"
Dim C43Data(4) As Byte
C43Data(0) = C43Address
C43Data(1) = &HA3
C43Data(2) = &H1
C43Data(3) = &H0
C43Data(4) = C43Address + &HA3 + &H1 + &H0 '和校验
'填充数据包
C43Data = FillPacket(C43Data)
'发送数据包
SendData(C43Data)
End Sub
''' <summary>
''' C43发布
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub BtnReleaseUpgrade_Click(sender As Object, e As EventArgs) Handles BtnReleaseUpgrade.Click
_sendTick = 0 '标志位
'获取Set发送内容Data部分
_port485 = $"&H{Hex(NudC43Port.Value)}"
_timeouts = $"&H{Hex(NudC43TimeOut.Value)}"
Dim C43Address As Byte = $"&H{Hex(NudAddress.Value)}" '获取发送数据部分
Dim C43dataList() As Byte = C43cfgDataTakeOut() '表格数据
Dim C43Head() As Byte = C43FirstBlockHeadData() '8个字节的版本号&全局变量
Dim C43crc16() As Byte = CheckSendData(C43Head, C43dataList) 'C43发布命令的CRC16校验
Dim blocks As Byte = GetBlocks(C43dataList) '求数据的块数
'和校验
Dim dataSumI As UInteger = C43Address + &HA6 + &H1 + &H1 + C43crc16(0) + C43crc16(1) + blocks
Dim data7Sum As Byte = dataSumI And &HFF
'组包C43发布命令
Dim C43Data(7) As Byte
C43Data(0) = C43Address
C43Data(1) = &HA6
C43Data(2) = &H1
C43Data(3) = &H1
C43Data(4) = C43crc16(0)
C43Data(5) = C43crc16(1)
C43Data(6) = blocks
C43Data(7) = data7Sum
'填充数据包
C43Data = FillPacket(C43Data)
'发送数据
SendData(C43Data)
End Sub
''' <summary>
''' C43第一包数据包头
''' </summary>
''' <returns></returns>
Private Function C43FirstBlockHeadData() As Byte()
Dim C43Head(7) As Byte
C43Head(0) = &H0 '配置版本号
C43Head(1) = &H0 '配置版本号
C43Head(2) = &H0 '配置版本号
C43Head(3) = &H0 '全局变量_背光时间
C43Head(4) = &H0 '备用
C43Head(5) = &H0 '备用
C43Head(6) = &H0 '备用
C43Head(7) = &H0 '备用
Return C43Head
End Function
''' <summary>
''' C43下发数据
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub BtnIssuesData_Click(sender As Object, e As EventArgs) Handles BtnIssuesData.Click
SendC43DataToRCU()
End Sub
''' <summary>
''' 下发C43数据到RCU
''' </summary>
Private Sub SendC43DataToRCU()
Dim sendPacket As Byte()
Dim serialAppPacket As Byte()
Dim C43Data As Byte()
Dim blockCount As Integer
_port485 = $"&H{Hex(NudC43Port.Value)}"
_timeouts = $"&H{Hex(NudC43TimeOut.Value)}"
C43Data = C43cfgDataTakeOut() '取表中数据
blockCount = GetBlocks(C43Data) '获取总发送块数
For blockIndex = 0 To blockCount - 1 '循环发送数据块
serialAppPacket = FillC43SendPacket(C43Data, blockIndex blockCount) '组C43透传数据包
sendPacket = FillPacket(serialAppPacket)
SendData(sendPacket)
Dim Interval As Integer = NudInterval.Value
Thread.Sleep(Interval) '发送间隔
Next
End Sub
''' <summary>
''' 取出C43配置数据
''' </summary>
''' <returns></returns>
Private Function C43cfgDataTakeOut() As Byte()
Dim C43DataList As New List(Of Byte)
For row = 1 To GrdC43cfg.Rows - 1
Dim dataOne As Byte
If GrdC43cfg.Cell(row, EnListed.ButtonName).Text = Nothing Then
GrdC43cfg.Cell(row, EnListed.ButtonName).Text = 1
dataOne = &H1
Else
dataOne = $"&H{Hex(GrdC43cfg.Cell(row, EnListed.ButtonName).Text)}"
End If
Dim dataTwo As Byte
If GrdC43cfg.Cell(row, EnListed.ButtonType).Text = Nothing Then
GrdC43cfg.Cell(row, EnListed.ButtonType).Text = "点按"
dataTwo = &H1
ElseIf GrdC43cfg.Cell(row, EnListed.ButtonType).Text = "点按" Then
dataTwo = &H1
ElseIf GrdC43cfg.Cell(row, EnListed.ButtonType).Text = "松开" Then
dataTwo = &H2
ElseIf GrdC43cfg.Cell(row, EnListed.ButtonType).Text = "长按" Then
dataTwo = &H3
End If
Dim dataThree As Byte
If GrdC43cfg.Cell(row, EnListed.DeviceType).Text = Nothing Then
GrdC43cfg.Cell(row, EnListed.DeviceType).Text = "场景"
dataThree = &H0
ElseIf GrdC43cfg.Cell(row, EnListed.DeviceType).Text = "场景" Then
dataThree = &H0
ElseIf GrdC43cfg.Cell(row, EnListed.DeviceType).Text = "本地继电器" Then
dataThree = &H1
ElseIf GrdC43cfg.Cell(row, EnListed.DeviceType).Text = "本地服务信息" Then
dataThree = &H4
ElseIf GrdC43cfg.Cell(row, EnListed.DeviceType).Text = "干节点窗帘" Then
dataThree = &H5
ElseIf GrdC43cfg.Cell(row, EnListed.DeviceType).Text = "空调" Then
dataThree = &H7
ElseIf GrdC43cfg.Cell(row, EnListed.DeviceType).Text = "LED扩展" Then
dataThree = &H10
ElseIf GrdC43cfg.Cell(row, EnListed.DeviceType).Text = "背景音乐" Then
dataThree = &H15
ElseIf GrdC43cfg.Cell(row, EnListed.DeviceType).Text = "监控" Then
dataThree = &H24
End If
Dim dataFour As Byte
If GrdC43cfg.Cell(row, EnListed.DeviceNumber).Text = Nothing Then
GrdC43cfg.Cell(row, EnListed.DeviceNumber).Text = 1
dataFour = &H1
Else
dataFour = $"&H{Hex(GrdC43cfg.Cell(row, EnListed.DeviceNumber).Text)}"
End If
Dim dataFive As Byte
If GrdC43cfg.Cell(row, EnListed.CarryWayL).Text = Nothing Then
GrdC43cfg.Cell(row, EnListed.CarryWayL).Text = 1
dataFive = &H1
Else
dataFive = $"&H{Hex(GrdC43cfg.Cell(row, EnListed.CarryWayL).Text)}"
End If
Dim dataSix As Byte
If GrdC43cfg.Cell(row, EnListed.CarryWayH).Text = Nothing Then
GrdC43cfg.Cell(row, EnListed.CarryWayH).Text = 0
dataSix = &H0
Else
dataSix = $"&H{Hex(GrdC43cfg.Cell(row, EnListed.CarryWayH).Text)}"
End If
Dim dataSeven As Byte
If GrdC43cfg.Cell(row, EnListed.SceneControlWay).Text = Nothing Then
GrdC43cfg.Cell(row, EnListed.SceneControlWay).Text = "场景单控"
dataSeven = &H1
ElseIf GrdC43cfg.Cell(row, EnListed.SceneControlWay).Text = "场景单控" Then
dataSeven = &H1
ElseIf GrdC43cfg.Cell(row, EnListed.SceneControlWay).Text = "场景可关闭" Then
dataSeven = &H2
End If
Dim dataEight As Byte
If GrdC43cfg.Cell(row, EnListed.DelayToPerform).Text = Nothing Then
GrdC43cfg.Cell(row, EnListed.DelayToPerform).Text = 0
dataEight = &H0
Else
dataEight = $"&H{Hex(GrdC43cfg.Cell(row, EnListed.DelayToPerform).Text)}"
End If
If GrdC43cfg.Cell(row, EnListed.IsSelected).BooleanValue = True Then
C43DataList.Add(dataOne)
C43DataList.Add(dataTwo)
C43DataList.Add(dataThree)
C43DataList.Add(dataFour)
C43DataList.Add(dataFive)
C43DataList.Add(dataSix)
C43DataList.Add(dataSeven)
C43DataList.Add(dataEight)
Else
Console.WriteLine("此行数据未选中!")
End If
Next
Return C43DataList.ToArray
End Function
''' <summary>
''' 填充C43发送数据包
''' </summary>
''' <param name="C43Data"></param>
''' <param name="blockIndex"></param>
''' <param name="blockCount"></param>
''' <returns></returns>
Private Function FillC43SendPacket(C43Data As Byte(), blockIndex As Integer blockCount As Integer) As Byte()
Dim dataList As New List(Of Byte)
dataList.AddRange(FillC43AddrData(blockIndex)) '地址4个字节
dataList.AddRange(FillC43SendPacketByBlock(C43Data, blockIndex blockCount)) '按块填充表格数据
dataList.Add(GetSumCheck(dataList.ToArray)) '求块数据和校验
Return dataList.ToArray
End Function
''' <summary>
''' 填充C43地址数据
''' </summary>
''' <param name="blockIndex"></param>
''' <returns></returns>
Private Function FillC43AddrData(blockIndex As Integer) As Byte()
Dim C43Address As Byte = $"&H{Hex(NudAddress.Value)}" '获取发送数据部分
Dim C43Data(3) As Byte
C43Data(0) = C43Address
C43Data(1) = &HA7
C43Data(2) = &H1
C43Data(3) = blockIndex
Return C43Data
End Function
''' <summary>
''' 按块填充C43表格数据
''' </summary>
''' <param name="C43Data"></param>
''' <param name="blockIndex"></param>
''' <param name="blockCount"></param>
''' <returns></returns>
Private Function FillC43SendPacketByBlock(C43Data As Byte(), blockIndex As Integer blockCount As Integer) As Byte()
Dim blockPacket As New List(Of Byte)
If blockIndex = 0 Then blockPacket.AddRange(C43FirstBlockHeadData) '第0块额外添加8个字节数据
If blockIndex = blockCount - 1 Then
For index = 128 * blockIndex To C43Data.Length - 1
blockPacket.Add(C43Data(index))
Next
Else
For index = 128 * blockIndex To 128 * (blockIndex + 1) - 1
blockPacket.Add(C43Data(index))
Next
End If
Return blockPacket.ToArray
End Function
''' <summary>
''' C43表格配置按键
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub TSBtnC43cfgData_Click(sender As Object, e As EventArgs) Handles TsBtnC43cfgData.Click
GrdC43cfg.Rows = 1 '清除表格数据
C43ConfigData()
End Sub
''' <summary>
''' 增加数据行
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub TSBtnAddRows_Click(sender As Object, e As EventArgs) Handles TsBtnAddRows.Click
GrdC43cfg.AddItem("")
GrdC43cfg.Cell(GrdC43cfg.Rows - 1, EnListed.IsSelected).Text = "1"
End Sub
''' <summary>
''' 删除数据行
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub TSBtnDelete_Click(sender As Object, e As EventArgs) Handles TsBtnDelete.Click
GrdC43cfg.Selection.DeleteByRow()
End Sub
''' <summary>
''' 保存C43数据
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub TSBtnSave_Click(sender As Object, e As EventArgs) Handles TsBtnSave.Click
Dim dirPath As String = Application.StartupPath & "/" & "C43Config"
If Directory.Exists(dirPath) = False Then Directory.CreateDirectory(dirPath)
SaveFileDialog1.InitialDirectory = dirPath
SaveFileConfig()
End Sub
''' <summary>
''' 保存文件配置
''' </summary>
Private Sub SaveFileConfig()
With SaveFileDialog1
.Filter = "保存为xml|*.xml"
.FileName = "C43"
.DefaultExt = "xml"
.AddExtension = True
End With
If SaveFileDialog1.ShowDialog() = DialogResult.OK Then
GrdC43cfg.ExportToXML(SaveFileDialog1.FileName)
End If
End Sub
''' <summary>
''' 读取数据
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub TSBtnRead_Click(sender As Object, e As EventArgs) Handles TsBtnRead.Click
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
GrdC43cfg.LoadFromXML(OpenFileDialog1.FileName)
End If
End Sub
'Private Function FillSerialAppPacket(serialAppPacket As Byte()) As Byte()
' '获取Set发送内容Data部分
' Dim serialCmd As Byte = &H3
' Dim port485 As Byte = $"&H{Hex(NudC43Port.Value)}"
' Dim timeOut As Byte = $"&H{Hex(NudC43TimeOut.Value)}"
' Dim dataLen As Integer = serialAppPacket.Length + 3
' Dim data(dataLen - 1) As Byte
' data(0) = serialCmd
' data(1) = port485
' data(2) = timeOut
' Array.Copy(serialAppPacket, 0, data, 3, serialAppPacket.Length)
' '获取发送数据Head部分和CRC16校验值部分
' Dim byteHead As Byte() = SendDataHead(data) '获取DataHaed
' Dim crc16 As Byte() = CheckSendData(byteHead, data) '获取Data检验值
' Return FillSendPacket(byteHead, data, crc16)
'End Function
#End Region
End Class

1283
RCU-10/RCU/FrmInfraredFunction.Designer.vb generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,129 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="CmsDataTable.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>167, 17</value>
</metadata>
<metadata name="OpenFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>25</value>
</metadata>
</root>

File diff suppressed because it is too large Load Diff

104
RCU-10/RCU/FrmPassword.Designer.vb generated Normal file
View File

@@ -0,0 +1,104 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class FrmPassword
Inherits System.Windows.Forms.Form
'Form 重写 Dispose以清理组件列表。
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Windows 窗体设计器所必需的
Private components As System.ComponentModel.IContainer
'注意: 以下过程是 Windows 窗体设计器所必需的
'可以使用 Windows 窗体设计器修改它。
'不要使用代码编辑器修改它。
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.Label1 = New System.Windows.Forms.Label()
Me.TboPassword = New System.Windows.Forms.TextBox()
Me.Label2 = New System.Windows.Forms.Label()
Me.BtnOK = New System.Windows.Forms.Button()
Me.BtnCancel = New System.Windows.Forms.Button()
Me.SuspendLayout
'
'Label1
'
Me.Label1.AutoSize = true
Me.Label1.Font = New System.Drawing.Font("新宋体", 15.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(134,Byte))
Me.Label1.Location = New System.Drawing.Point(12, 24)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(148, 21)
Me.Label1.TabIndex = 0
Me.Label1.Text = "请输入密码:"
'
'TboPassword
'
Me.TboPassword.Font = New System.Drawing.Font("宋体", 10.5!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134,Byte))
Me.TboPassword.Location = New System.Drawing.Point(88, 80)
Me.TboPassword.Name = "TboPassword"
Me.TboPassword.PasswordChar = Global.Microsoft.VisualBasic.ChrW(42)
Me.TboPassword.Size = New System.Drawing.Size(226, 23)
Me.TboPassword.TabIndex = 1
'
'Label2
'
Me.Label2.AutoSize = true
Me.Label2.Font = New System.Drawing.Font("新宋体", 10.5!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134,Byte))
Me.Label2.Location = New System.Drawing.Point(12, 83)
Me.Label2.Name = "Label2"
Me.Label2.Size = New System.Drawing.Size(70, 14)
Me.Label2.TabIndex = 2
Me.Label2.Text = "PassWord:"
'
'BtnOK
'
Me.BtnOK.Font = New System.Drawing.Font("宋体", 10.5!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134,Byte))
Me.BtnOK.Location = New System.Drawing.Point(137, 145)
Me.BtnOK.Name = "BtnOK"
Me.BtnOK.Size = New System.Drawing.Size(75, 32)
Me.BtnOK.TabIndex = 3
Me.BtnOK.Text = "确认"
Me.BtnOK.UseVisualStyleBackColor = true
'
'BtnCancel
'
Me.BtnCancel.Font = New System.Drawing.Font("宋体", 10.5!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134,Byte))
Me.BtnCancel.Location = New System.Drawing.Point(239, 145)
Me.BtnCancel.Name = "BtnCancel"
Me.BtnCancel.Size = New System.Drawing.Size(75, 32)
Me.BtnCancel.TabIndex = 4
Me.BtnCancel.Text = "取消"
Me.BtnCancel.UseVisualStyleBackColor = true
'
'FrmPassword
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6!, 12!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(332, 197)
Me.Controls.Add(Me.BtnCancel)
Me.Controls.Add(Me.BtnOK)
Me.Controls.Add(Me.Label2)
Me.Controls.Add(Me.TboPassword)
Me.Controls.Add(Me.Label1)
Me.Name = "FrmPassword"
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent
Me.Text = "提示"
Me.ResumeLayout(false)
Me.PerformLayout
End Sub
Friend WithEvents Label1 As Label
Friend WithEvents TboPassword As TextBox
Friend WithEvents Label2 As Label
Friend WithEvents BtnOK As Button
Friend WithEvents BtnCancel As Button
End Class

120
RCU-10/RCU/FrmPassword.resx Normal file
View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

69
RCU-10/RCU/FrmPassword.vb Normal file
View File

@@ -0,0 +1,69 @@
Public Class FrmPassword
''' <summary>
''' 密码
''' </summary>
Private _password As String = $"885533"
''' <summary>
''' 是否删除
''' </summary>
Public _isDel As Boolean
''' <summary>
''' 打开窗体
''' </summary>
Public Sub OpenFrmPass()
Show() 'Show为非阻塞式循环继续执行ShowDialog为阻塞式等待窗体完成后继续执行
End Sub
''' <summary>
''' 显示窗体
''' </summary>
Public Sub ShowMyDialog()
ShowDialog()
End Sub
''' <summary>
''' 确认
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub BtnOK_Click(sender As Object, e As EventArgs) Handles BtnOK.Click
DialogResult = DialogResult.OK
End Sub
''' <summary>
''' 取消
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub BtnCancel_Click(sender As Object, e As EventArgs) Handles BtnCancel.Click
DialogResult = DialogResult.Cancel
Close()
End Sub
''' <summary>
''' 是否删除
''' </summary>
''' <returns></returns>
Public Function IsDelete() As Boolean
If _password = TboPassword.Text Then
_isDel = True
Console.WriteLine($"是否删除 = " & _isDel)
Else
_isDel = False
Console.WriteLine($"是否删除 = " & _isDel)
Return False
End If
Return True
End Function
End Class

1433
RCU-10/RCU/FrmRCU.Designer.vb generated Normal file

File diff suppressed because it is too large Load Diff

726
RCU-10/RCU/FrmRCU.resx Normal file
View File

@@ -0,0 +1,726 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="RdoStatus.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>141, 14</value>
</metadata>
<metadata name="Panel1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnReset.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblLongPort2.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label12.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblLocalPort1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblLongPort.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblLocalPort.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblTXCount.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblTX.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblRXCount.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblRX.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblLongIP2.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblLongIP1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblLocalIp1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblLocalIp.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="SaveFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>233, 14</value>
</metadata>
<metadata name="OpenFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>378, 14</value>
</metadata>
<metadata name="FileSystemWatcher1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>528, 14</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>59</value>
</metadata>
<metadata name="SplContainer1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TabControl2.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="PageRecord.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="GrpNewsletter.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="RtxRecord.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnClear.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="PagePort1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="GrpPort1Data.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="RtxCountOne.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnPort1Clear.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblCount1RX.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblCountPort1TX.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblCount1TX.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblCountPort1RX.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="PagePort2.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="GrpPort2Data.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnPort2Clear.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="RtxCountTwo.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblCount2TX.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblCountPort2TX.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblCount2RX.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblCountPort2RX.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="PagePort3.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="GrpPort3Data.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="RtxCountThree.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnPort3Clear.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblCount3TX.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblCount3RX.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblCountPort3TX.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblCountPort3RX.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TabFunction.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="PageInfrastructure.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="GrpSerialAppMode.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="NudSerialAppPort.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnSend.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TxtSendSerialApp.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblSerialAppData.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="NudTimeOut3.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblTimeOut3.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblPort5.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="GrpReadMode.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="ChkShowHeartBeat.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="NudMonitoring.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="NudTimeOut2.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="NudSetPort.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblTimeOut2.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="CboMode.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblPort4.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="NudSerialPort.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnMonitoring.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="NudTimeOut1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblPort2.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblTimeOut1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnRead.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblMode.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnSet.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="CBoBaud.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblPort3.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblBaud.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="GrpBaseSet.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="RdoRadUdp.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="RdoPort.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="PnlUdp.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnNetworkConnect.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="NudRemotePort.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblPort1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="NudLocalPort.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblIP.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="CboLocalIp.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LbllongPort1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblLongIP.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="CboLongIP.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="PnlPort.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnSerialPortConnect.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label69.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="CboSerialPort.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label71.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="CboSerialBaud.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAA
AAD//P7//v77//35/f/u79r/u8l2/5yxN/+HpRH/hKUG/4SiC/+Eog3/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKIN/4SfEf+Gohb/mK86/7zH
fP/u8dD//vf8///6/P/+/uz//fz7//36+f/N15v/h6Qj/4CgEP+DoA//hKMK/4SkCP+Eogv/hKIM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Si
C/+Down/hKQI/4KjCv+BoBH/iaYj/83XmP/+9/v//vn8//z89//L1pj/hKER/4WpAv+Dowr/hKIM/4Si
DP+Eogz/hKMK/4SjC/+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Dowv/g6QI/4SkCf+EpAj/hKQG/4SmBv+CohH/ytWV//33/P/p687/h6Ye/4ao
A/+GnhH/haAQ/4SiDP+Eog3/hKIM/4SjCv+Eowv/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/g6IM/4OiDP+EoQ7/hKEO/4SiDP+FoA7/g6QH/4ak
H//q7sn/uMB3/4OkDP+EpQX/hZ8R/4WiC/+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKIN/4SjCf+BoQ//tcRv/5StLv+Cowr/hKEM/4WgDv+FpAf/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4ShDv+Eogv/gaMI/5KuL/+EpQ3/g6MN/4SgDf+Fogv/haMJ/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+EoQ3/hKIL/4OkCP+FpA7/gqIN/4Oh
D/+EpAj/haMI/4WgDv+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/g6ML/4Oi
C/+Dogv/hKIK/4SjDP+Dogz/hKML/4SjC/+Eogz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjCv+Eogr/g6MK/4KmBf+EoQ3/hqEM/4GnB/+FnhT/h6QI/3uj
Dv+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eog3/hKEN/4SiDP+Eowr/hKQI/4KlCv+Hogr/g6UF/4CkCf+HnxL/hKMM/4Sj
DP+Eowz/hKMM/4OjC/+Dowv/hKIM/4SiDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eogv/hJ8R/4WdFP+Howj/hqIJ/4mg
D/+YsDv/hKEQ/4ucFf+DpwX/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKIM/4ShDf+Eogz/hKMK/4SjCf+HoBH/g6IJ/5Gj
Qv+SsSX/haMJ/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/g6QJ/4Si
C/+IoA7/h6MH/4KiDP+mvV7/5fTb/7jPi/+Gpgn/iJ8O/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SiC/+Eogv/g6IL/4Sj
DP+Eowz/iaIL/4awJv/l7dT/obhD/4KjCf+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4OjCf+EpAf/h6QG/4ChEf+fu1//xO7Z/4bYpP+069T/t9GO/4OfGP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowr/hKMJ/4OiCv+Eogz/hKEN/5OqMv/I5M3/0dvy/6K2SP+Aogv/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKML/4SjCv+Dowv/g6MK/4OjC/+EoA//hKAO/4WjCv+lvVr/zO7X/3HVov9e2p3/e9+x/8Hp
2f+81Yb/haIT/4SjC/+EoQ3/g6QJ/4OjC/+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Si
DP+Eogz/hKIM/4SjC/+Eowv/g6QJ/4SjCf+Fowr/hKMM/5KtLP/b4cb/hoz5/7S99/+huEX/gaQH/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjC/+Fogr/hKAP/4OkB/+Eown/g6AP/4KkDP+rvFv/zu7Q/2zT
pv9T1pn/Ztig/3jhsP+B3LT/t+zR/7/Qjf+DphD/hqAP/4OgEP+BpQf/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eogz/hKEO/4SiDP+Eowv/hKMJ/4SkCf+IoQ3/iaQG/42tLf/V4NT/j5Hw/25y
9P+7vfX/nblF/4SiCv+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Dowv/g6EN/4WdFf+IoQz/h6QG/4Sk
Cf+sumH/0ezm/2TXof9c2ZH/W9OY/2jYoP914a7/dd6x/4jatf+66dX/u9eR/4mlDf+InBX/g6IN/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKIM/4SiDP+Eogz/hKML/4SjCv+HoAz/iaMK/4+s
L//V4NH/lI71/3Zv9/9ubfv/u7v3/525Rf+Eogn/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/g6ML/4Ol
Bf+Hogr/hqMH/4ChD/+nu1j/zvDR/2jWp/9X1Zr/VdWZ/1bVl/9r16D/duKt/3HhsP9637D/gOGt/7nr
0P/B15H/g6YL/4SgD/+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjC/+Eowr/hKML/4Sj
DP+Eowz/hKMJ/46qLf/X4dX/k4/2/3Bv+P9zbPv/bmv+/7u89/+duUT/hKEK/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4OiC/+Eogv/h6MI/4GhDf+cumD/yu/Y/3HWof9W2ZL/WNSa/1nVlv9Y05v/bdef/3zh
rf914q3/e+Cu/3PhrP+A46X/s+XW/8DYmv+EoBf/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowv/hKQI/4SjCf+Eowz/g6EN/4+rMv/Y49L/koz3/3Bs+v9xbvb/dGz6/25t+/+7vvT/nblD/4Sg
Df+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4WjCf+Eogv/g6QJ/4OkCP+EoA//g6AQ/4KlB/+rvVf/yu3Y/2nUqf9Y05v/X9WX/1TW
mP9a1Jn/W9WX/2rYoP984az/euGt/33grf944K3/deGw/4Lcsv+36ND/wNiX/4ehF/+Eowr/gqQJ/36l
Cf+Cog3/hKMM/4SjDP+Eowz/g6ML/4GkCv+HoQ3/haQJ/46pMf/X4sn/kpTs/3Ns+f9wbfr/dGz6/3Vs
+v9tbvr/ub71/5+5RP+DoQz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eogv/hJ8R/4WgDv+FpAf/haAO/4CjC/+suF7/zPHU/3HY
nP9c0KD/WdWZ/1nVmf9Z1Zn/WdWZ/1rVmf9n2qH/euKt/3zhrf984K7/feGr/3fhrf954LH/hdy0/7bp
zv/E25n/hakN/4idE/+CnxL/gqQJ/4SjDP+Eowz/hKMM/4OiDP+FoA//h6QH/5CtLv/Z4dL/lJHu/3Ny
8f9ya/r/c2v9/3Nt+f92bfn/bG38/7e+9/+guUT/gqIK/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/g6MJ/4WfEf+IoA//h6QG/4Wi
C/+pu1b/zuvg/2fUp/9S15b/YNaY/1nVmf9Z1Zn/WdWZ/1nVmf9a1Zn/Z9qh/3rirf984a3/fOCu/33h
rP944a3/dOGv/3jfsP+A3q3/r+fQ/8Xbnf+NpBX/i6EN/4SiDP+Eowz/g6IL/4SjDP+Fowv/iKQG/46s
Lf/U39H/k432/3Nr+v9ya/v/c2r+/3Nr/f9zbfj/dm35/2xt/P+3vvf/oLlE/4KiCv+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Ol
Bv+GpAf/h6QG/4ChEv+gvFX/0O7U/2fbnP9V1Jz/W9Sa/1LVmv9Z1Zn/WdWZ/1nVmf9Z1Zn/WdSZ/2jb
ov954a3/fOGt/3zgr/984a3/eeGt/3fhrf924a3/dOKt/33ko/+15tH/xdye/4enEv+Fowv/hKMM/4Oi
C/+Eowz/hKMM/46rLf/W3tH/k474/29t+v9vbvj/c2v9/3Nr/f9zbPz/c236/3Zt+v9sbfz/t773/6C5
RP+Cogr/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+EoA//hqEM/4OiCv+dulj/1eza/2TYo/9h15T/VtSb/1fUmv9e1Zb/WdWZ/1nV
mf9Z1Zn/WdWZ/1nUmf9o26L/eeGt/3zhrf974K//eeGt/3zhrf994az/feGr/3rer/934K7/gOKp/7Tn
0f/K3KT/iKQZ/4SjDP+Eowz/haQN/5OvJP/X39H/lo30/29t+/9tb/X/cm36/3Nt+P9zbvj/c235/3Ns
/P92bPr/bG38/7e+9/+guUT/gqIK/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/fKMO/4ijCv+quVb/xe/S/3fTqf9X1pj/W9SZ/1jV
mP9Y1Jr/WtWX/1nVmf9Z1Zn/WdWZ/1nVmf9f0Zz/Zduk/27jq/+F3bD/fd20/3jirP944qv/eeKr/3ni
q/964av/eeCt/3bhrf+A3bD/qevH/8Thn/+Mnx//g6MO/4KtJv/c383/jZDw/3Rw9f9ybP3/cm37/3Nt
+f9zbfn/c235/3Nt+f9zbPr/dWv6/2tt+v+4wPX/oLpC/4KiC/+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4qjCf+nuF3/ye7W/3HT
qv9P25H/WdWZ/1nVmf9Z1Zn/WdWZ/1nVmf9Z1Zn/WdWZ/1nVmf9Z1Zn/VNaW/2fdoP9046r/feGq/2rl
q/9636//et+v/3rfr/9636//fN+v/3zfsP9237L/et60/4Tctf+o49T/1eGn/6WtNP/S4sj/go34/3Jw
8v9ybPr/c2r+/3Ns+v9zbvj/c236/3Nt+v9zbfr/c236/3Vr+v9rbfr/uMD1/6C6Qv+Cogv/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+htUD/yO7P/2zPtP9Y2JL/U9Oe/1nVmf9Z1Zn/WdWZ/1nVmf9Z1Zn/WdWZ/1nVmf9Z1Zn/WdWZ/1/T
mf+c3r3/w+vf/8fq3/+979r/xPHU/8Tx1P/E8dT/xPHU/8bw1f/F79b/wPDW/7/w1f/B79X/uu7W/9vz
9P/n6PD/m433/2pw9/9zbPz/c2r+/3Jq/v9zbfr/c234/3Nt+v9zbfr/c236/3Nt+v91a/r/a236/7jA
9f+fuUH/g6IM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/rL5t/5njv/9T1pn/XtqM/13Npv9Z1Zn/WdWZ/1nVmf9Z1Zn/WdWZ/1nV
mf9Z1Zn/WdWZ/1nVmf9L1pr/h+LV/33P8v91y/j/e8z0/3XI/P91yPz/dcj8/3XI/P91yP3/dsf9/3XI
/P91yfv/dMr6/4LK8f+AzPD/d6Ds/3ts9v9+Z/z/c2z8/3Ns+/9zbPv/c2z7/3Ns+v9zbfr/c236/3Nt
+v9zbfr/dWv6/2tt+v+4wPX/n7lB/4OjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/7O/aP+f5bj/WNSc/13UmP9T15b/WdWZ/1nV
mf9Z1Zn/WdWZ/1nVmf9Z1Zn/WdWZ/1nVmf9Z1Zn/Y9WW/53g1P9dv/b/R738/069/f9Uvfr/VL36/1S9
+v9Uvfr/U737/1O9/P9Wvfv/V735/1a++P9Tuvz/VMD3/2CJ+/9wbvf/Z3H4/3Nt+P9zbvj/c235/3Ns
+/9zbPv/c236/3Nt+v9zbfr/c236/3Vs+v9sbfr/t8H1/565Qf+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+uxGL/n+TF/1nV
l/9T1Zr/WdWY/1nVmf9Z1Zn/WdWZ/1nVmf9Z1Zn/WdWZ/1nVmf9Z1Zn/WdWZ/1fVmP+e4tD/U7z9/1O/
9v9Su/7/U739/1O9/f9Tvf3/U739/1O9/f9Tvf3/U739/1O9/f9Tvf3/Ur77/1S8/f9ljvb/eWr8/29t
+v9zbfr/c236/3Nt+v9zbfr/c236/3Nt+v9zbfr/c236/3Nt+v90bfv/cG36/7XC9v+ZukH/hqIM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/rsRi/5/kxf9Z1Zf/U9Wa/1nVmP9Z1Zn/WdWZ/1nVmf9Z1Zn/WdWZ/1nVmf9Z1Zn/WdWZ/1nV
mf9X1Zj/n+PR/1K7/v9Tv/b/Urv+/1O9/f9Tvf3/U739/1O9/f9Tvf3/U739/1O9/f9Tvf3/U739/1K+
+/9UvP3/ZY72/3lq/P9vbfr/c236/3Nt+v9zbfr/c236/3Nt+v9zbfr/c236/3Nt+v9zbfr/dG37/3Bt
+v+1wvb/mbpB/4aiDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/67EYv+f5MX/WdWX/1PVmv9Z1Zj/WdWZ/1nVmf9Z1Zn/WdWZ/1nV
mf9Z1Zn/WdWZ/1nVmf9Z1Zn/V9WY/6Lm0/9Su/3/U7/2/1K7/v9Tvf3/U739/1O9/f9Tvf3/U739/1O9
/f9Tvf3/U739/1O9/f9Rvvv/U7z8/2SM9f95avz/b236/3Nt+v9zbfr/c236/3Nt+v9zbfr/c236/3Nt
+v9zbfr/c236/3Rt+v9wbfr/tsL2/5m6Qf+Gogz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+uxGL/n+TF/1nVl/9T1Zr/WdWY/1nV
mf9Z1Zn/WdWZ/1nVmf9Z1Zn/WdWZ/1nVmf9Z1Zn/WdWZ/1fVmP+i5tP/Urv9/1O/9v9Su/7/U739/1O9
/f9Tvf3/U739/1O9/f9Tvf3/U739/1O9/f9Tvf3/Ub77/1O8/P9kjPT/eWr8/29t+v9zbfr/c236/3Nt
+v9zbfr/c236/3Nt+v9zbfr/c236/3Nt+v90bfr/cG36/7bC9v+ZukH/hqIM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/rsRi/5/k
xf9Z1Zf/U9Wa/1nVmP9Z1Zn/WdWZ/1nVmf9Z1Zn/WdWZ/1nVmf9Z1Zn/WdWZ/1nVmf9Z1Jj/pebX/1S8
/P9TwPX/Ubz8/1O9/f9Tvf3/U739/1O9/f9Tvf3/U739/1O9/f9Tvf3/U739/1K++/9UvPz/Y4v0/3lq
/P9vbfr/c236/3Nt+v9zbfr/c236/3Nt+v9zbfr/c236/3Nt+v9zbfr/dG36/3Bt+v+1wvb/mbpB/4ai
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/67EYv+f5MX/WdWX/1PVmv9Z1Zj/WdWZ/1nVmf9Z1Zn/WdWZ/1nVmf9Z1Zn/WdWZ/1nV
mf9Z1Zn/W9SX/6jm2/9VvPv/U8D1/1G9+/9Tvf3/U739/1O9/f9Tvf3/U739/1O9/f9Tvf3/U739/1O9
/f9Svvv/VLz8/2KL9P95avz/b236/3Nt+v9zbfr/c236/3Nt+v9zbfr/c236/3Nt+v9zbfr/c236/3Rt
+v9wbfr/tcL2/5m6Qf+Gogz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+uxGL/n+TF/1nVl/9T1Zr/WdWY/1nVmf9Z1Zn/WdWZ/1nV
mf9Z1Zn/WdWZ/1nVmf9Z1Zn/WdWZ/1vUl/+q6Nz/VLz6/1PA9f9Rvfv/U739/1O9/f9Tvf3/U739/1O9
/f9Tvf3/U739/1O9/f9Tvf3/Ur77/1S8/P9iivP/eWr8/29t+v9zbfr/c236/3Nt+v9zbfr/c236/3Nt
+v9zbfr/c236/3Nt+v90bfr/cG36/7XC9v+ZukH/hqIM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/rsRi/5/kxf9Z1Zf/U9Wa/1nV
mP9Z1Zn/WdWZ/1nVmf9Z1Zn/WdWZ/1nVmf9Z1Zn/WdWZ/1nVmf9c1Zn/rOre/1W8+v9TwPX/Ub37/1O9
/f9Tvf3/U739/1O9/f9Tvf3/U739/1O9/f9Tvf3/U739/1G++/9UvPz/YYny/3lq/P9vbfr/c236/3Nt
+v9zbfr/c236/3Nt+v9zbfr/c236/3Nt+v9zbfr/dG36/3Bt+v+1wvb/mbpB/4aiDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/67E
Yv+f5MX/WdWX/1PVmv9Z1Zj/WdWZ/1nVmf9Z1Zn/WdWZ/1nVmf9Z1Zn/WdWZ/1nVmf9Z1Zn/W9SY/63r
4P9Uu/n/U8D1/1G9+/9Tvf3/U739/1O9/f9Tvf3/U739/1O9/f9Tvf3/U739/1O9/f9Rvvv/VLz8/2GJ
8v95avz/b236/3Nt+v9zbfr/c236/3Nt+v9zbfr/c236/3Nt+v9zbfr/c236/3Rt+v9wbfr/tcL2/5m6
Qf+Gogz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+uxGL/n+TF/1nVl/9T1Zr/WdWY/1nVmf9Z1Zn/WdWZ/1nVmf9X1Zn/VtWZ/1rU
mf9b1Jn/WtSZ/1/QoP+z7Nf/Wr73/0a8/P9XvPz/U739/1O9/f9Tvf3/U739/1O9/f9Tvf3/U739/1O9
/f9Tvf3/U776/1a7/f9ihvX/e2n9/3Ft+f9zbfr/c236/3Nt+v9zbfr/c236/3Nt+v9zbfr/c236/3Nt
+v9yb/f/bmv8/7+++P+cukD/hKIO/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/rsRi/5/kxf9Z1Zf/U9Wa/1nVmP9Z1Zn/WdWZ/1nV
mf9Z1Zn/WNWZ/1jVmf9W1Zn/VdWZ/1XVmf9Z1Zf/surg/1y6/P9KwvT/W7z5/1O9/f9Tvf3/U739/1O9
/f9Tvf3/U739/1O9/f9Tvf3/U739/1S++v9Wu/3/YoX1/3tp/f9xbfn/c236/3Nt+v9zbfr/c236/3Nt
+v9zbfr/c236/3Nt+v9zbfr/d2r9/2pu+v+1xfH/mbs+/4igEP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/67EYv+e48T/WdWY/1PV
mv9Z1Zj/WdWZ/1nVmf9Z1Zn/WdWZ/1rUmf9Z1Zn/U9aY/1HWmP9W1pn/WNOc/7Tp5/9cuP7/RML1/1G5
/P9Tvf3/U739/1O9/f9Tvf3/U739/1O9/f9Tvf3/U739/1O9/f9Tvvr/Vrv9/2KF9f97af3/cW35/3Nt
+v9zbfr/c236/3Nt+v9zbfr/c236/3Nt+v9zbfr/c236/3hs+f9sb/j/tr/5/5m0SP+JpQf/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+vxGP/nuPE/1nVmP9T1Zr/WdWY/1nVmf9Z1Zn/WdWZ/1nVmf9a1Jn/WNWZ/1PWmf9X1Jj/YtKY/43a
uP/m+N3/gMzx/069/P9Nuvz/U739/1O9/f9Tvf3/U739/1O9/f9Tvf3/U739/1O9/f9Tvf3/U735/1W6
/f9hhfX/e2n9/3Ft+f9zbfr/c236/3Nt+v9zbfr/c236/3Nt+v9zbfr/c236/3Nt+v9yb/b/g4vl/93f
5/+asDP/gqQJ/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/r8Rj/57jxP9Z1Zj/U9Wa/1nVmP9W1Zn/WNWZ/1nUmf9Z1Zn/WNOa/1rU
mv9W2Jb/W9Oc/43erf/K5MH/paxF/77ox/9+yfr/VsD2/1W8/f9Uvfz/ULv9/1C8/P9Tvvr/U739/1O9
/f9Tvf3/U739/1O9+f9Uu/3/ZYT1/3hq/f9ybfn/c236/3Nt+v9zbfr/c236/3Nr+v90avv/c2z6/3Jt
+f9wbPr/f3/4/9Dg5f+jtVL/i6UF/3+gEv+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/6/EY/+e48T/WdWY/1PVmv9Z1Zj/UtaZ/1jV
mf9b1Jn/V9WZ/1jUmf9Y15P/VdOa/4zesf/T6cL/haUs/4ClCP+RpSv/yeTK/4HO+P9Su/7/UL77/1O9
+f9Tvfr/Ub76/1O9/f9Tvf3/U739/1O9/f9Svvr/ULz9/2+B9P9ubP3/dm35/3Nt+v9zbfr/c236/3Nt
+v91afz/dm32/3Fv9f9waf3/gYXy/9Xd6v+atFX/hKIK/4egDf+DpQf/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+vxGP/nuPE/1nV
mP9T1Zr/WdWY/1nVmf9a1Zn/WdWZ/1bVmf9W2pD/VNWZ/4DdtP/V6Lz/jKwj/36pBP99nxT/iaMM/5aq
If/Y5cP/fc/3/0e8/v9UwPL/W8Dy/026/v9Tvf3/U739/1O9/f9Tvf3/Ur76/1C8/f9vgfT/bmz9/3Zt
+f9zbfr/c236/3Nt+v9zbfr/dGz6/3By8P9ocvP/gYD4/9Tf4/+ct0z/gqQK/4mlB/+GnxH/gaML/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/r8Rj/57jxP9Z1Zj/U9Wa/1nVmP9b1Jn/WdWZ/1jUmP9a1Jj/WNOb/4vcsv/T58X/hbEd/4ue
Ev+QmxT/f6MM/3+nBv+Fogv/iaYm/9rjvv99yPz/Rbn+/1HA+P9Vvfv/U739/1O9/f9Tvf3/U739/1K+
+v9Puv3/boD0/25s/f92bfn/c236/3Nt+v9zbfr/c236/3Nt+v9waf7/f4L2/9Hh4/+ctU7/hqAO/4ih
C/+Hnw//g6EN/4ClBv+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/6/EY/+e48T/WdWY/1PVmv9Z1Zj/VtWZ/1XVmf9Y1Zj/YtOY/43g
rv/Q58P/j6sl/4ihDf+CoQz/hp4Q/3+mBP+DpAr/h58T/3qlB/+NpiX/1eK+/4bP9f9Svvv/Wbz7/1O9
/f9Tvf3/U739/1O9/f9Svvr/T7r9/26A9P9ubP3/dm35/3Nt+v9zbfr/c236/3Nt+v9vbfr/gYLw/9fg
5f+ct03/gaQK/4WkCP+EoA7/gqIN/4ClB/+ApAn/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+sxGP/nOPF/1rWlv9U1Zn/WtSZ/1nR
nv9Z2JL/VtOc/4zdrv/R57v/jKol/4KkDf+LoA7/gqQL/3+lCP+BpAn/hqIL/4miDP+Dowz/fKMP/5Kl
IP/R5Lr/hs34/0+7/v9Yvvf/Vb/3/066/v9QwPf/U7/3/1G6/f9tf/T/bWz9/3Rt+P9xa/z/dWz5/3Zs
+f9wbfb/gIP0/9He6v+at0v/hqAR/4OlBf+Dpgb/g6MK/4KkCv+CpAn/g6IM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/rsNk/57i
xf9a1pX/U9aY/1nUmf9a2Y3/T9Oe/43erv/T6cH/iKwl/4OiC/+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKML/4GmBv9+oRL/l6Ik/9Diuv+Gzfr/ULv6/1S/9/9fu/n/ULz9/1G9+/9Tuv7/bX/0/2xt
/P90bfj/c2/1/3F16/9yaP3/g4Tw/87h4/+WtVr/f6MJ/4ehDf+Eogz/g6MK/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/7LDZP+h4sX/WdeV/1PXmf9a1Zr/VteT/4Lctf/Q7MD/kq4g/4ShDv+Eowz/g6IL/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjC/+GpQn/fqQK/42mAv+VoCP/0OO6/4nQ9/9JuP7/WL34/1K9
+/9RvPz/U7r+/21/9P9sbfz/dG33/3Zs+P9sbvj/fYD5/9Pf6f+auE7/gaMK/4elBv+InxD/g6IM/4Oj
C/+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+yw2T/n+LF/1fXlv9W1Zj/Y9CZ/4rbtf/a6Mf/hqwd/4Ci
DP+PnBb/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eog3/iZ0T/4OnA/9+owv/fJ8P/5Gk
Hf/V4rL/h8/6/028/f9Tw/T/Vb75/1O7/v9tf/T/bG38/3Rt9/90afz/g377/8/f5v+Zt0v/hKAP/4eg
Dv+HnxH/haEN/4SkBv+Dowr/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/r8Nk/5vjxf9W2Jb/WtSY/4Ld
q//Y5sL/hqwo/46fDv+IoA3/e6YJ/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/g6ML/32o
Bf+JnRT/hKMH/4GlB/97oRH/jqQf/9zgtf+H0Pz/Vbv9/1a8+/9Tu/7/bX/0/2xt/P9zbvj/fIPz/8/f
5v+btVX/haML/4enBP+Eown/g6IL/4OlBv+Fown/hKIM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/7TA
a/+Y5sH/SdiX/4vbsv/V5MT/kK0b/4OjC/+Eogz/hKIM/4OjC/+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4OjC/+Dowv/hKIM/4SjC/+Eowv/iJ8Q/4KgC/+Kph3/0uCw/4fS+f9Iw/L/X7f8/2t5
+f94avr/eoT1/9Pd7P+Zt0//hKEO/4ahDP+EpQf/g6ML/4OjC/+Dowv/hKIL/4SiDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+zxVr/md7M/4PctP/X673/gq8l/4WkDf+Dogv/g6IL/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4WlB/98pAr/f6EN/5Sj
Gv/M37H/ks/5/2e7+P9TgfP/fYPz/83g6P+auVL/f6UK/4ijCf+FoA//g6MK/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/sMFj/73p3v/K6MT/o6ki/3yiDv+Dogv/hKMM/4Oi
C/+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+HoA7/gaEN/3qoA/+EpQj/iqEg/8fhqv+my/n/cY/0/9Hf6v+it03/hKQI/4elBv+IoQz/haIK/4Ol
B/+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/63GWv/j6M3/i6wk/4qg
DP+GnhL/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hqAQ/4efD/+ApAn/eaIO/36jDP+KphT/ytqw/+Hp4v+ktlb/hqQH/4ah
DP+GnxH/haEN/4SkB/+EpAn/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eog3/hKIN/4SiDP+Eogv/hKML/4SjDP+Eowz/hKMM/4Sj
DP+Zsz3/l6sn/4SiDP95oRL/iKUI/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4GmCP+FoQ3/iZ0U/4WmBf+JoQz/haAO/4Sm
F/+etzL/hZ4R/32lCf+EpAj/g6IM/4OjCf+Eowr/haEN/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Dogz/g6IL/4SkCP+EpAj/hKIM/4ShDf+EoQ3/hKIL/4Sj
C/+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/g6ML/4SjCf+EpAj/hKIL/4Sj
Cf+EpAj/hKMJ/4SiC/+Eogz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
Cf+Eogv/g6AQ/4KfEf+FohD/g6MJ/4OkBv+Eogv/hKEO/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+EoQ//hKAQ/4KiDP+ApQv/lqwt/4OfEP+Dowj/hKIL/4ShDf+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKAP/4ShDP+BpAj/j64v/7nDc/+EoQr/h58P/4Sf
Ef+CqQf/hKEN/4ShDv+Eogz/hKML/4SjC/+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Dogz/gaIN/4OiDf+Eogv/hqMI/4agDf+Eowr/f6IK/7PD
cf/q7NL/h6Mg/4anA/+FnxH/g58R/4SiC/+Eogv/hKIL/4SiC/+Eogv/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/g6ML/4CjCv+Cogz/hKEO/4ag
D/+HnhL/hKgD/4SjHv/q7NX/+/v5/8jVmv+AoxH/g6cD/4WfD/+Down/g6QH/4SjCf+EoQ3/hKIM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Oi
DP+Cog7/gaMI/4KlBf+CpQb/hKUG/4WiEv/L1pb/+/n8//39+v/8/Pn/y9me/4WlIv+Bogz/gp4P/4Sj
Cv+EpAj/hKEN/4SiDf+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Dogz/gqAP/4KkCv+ApQj/fqMN/4inJP/N15r//vz4//7/+f/++/z//P76//r8
+v/t8Nb/vMh5/5yxNP+IpRL/hKMJ/4SiDP+Eogz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/hKMM/4Sj
DP+Eowz/hKMM/4SjDP+Eowz/hKMM/4SjDP+Eowz/g6MK/4KkBf+FphL/lq87/7vHf//t8dP//f33//7+
+////f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
</value>
</data>
<metadata name="BackgroundWorker1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>699, 14</value>
</metadata>
<metadata name="BackgroundWorker2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>872, 14</value>
</metadata>
<metadata name="SerialPort.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>25, 14</value>
</metadata>
<metadata name="CmsDataTable.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>1240, 14</value>
</metadata>
<metadata name="Timer2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>1045, 14</value>
</metadata>
<metadata name="ToolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>1137, 14</value>
</metadata>
<metadata name="Timer3.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>1377, 14</value>
</metadata>
</root>

3679
RCU-10/RCU/FrmRCU.vb Normal file

File diff suppressed because it is too large Load Diff

1536
RCU-10/RCU/FrmRFFunction.Designer.vb generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,456 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="TboNetworkAddress.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnPairing.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Nup485DialAddr.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="GboSetTime.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblCommTestWeChat.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnCommTestWeChat.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="CboIsSet.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnReadLockState.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnOpenLock.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnSetWeChat.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label4.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="CboSetTime.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="GroupBox1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblCommTestSwitch.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnCommTestSwitch.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="CheckBox1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnReadLigthInfo.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnSetLocalControl.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label14.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label13.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="ComboBox2.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="ComboBox1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnSetDelayTime.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnSetGradientTime.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label7.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnBacklight.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnSetSwitchLights.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label6.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="NumericUpDown1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label10.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label11.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label12.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label9.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label8.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label5.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnSwitch6.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnSwitch4.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnSwitch2.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnSwitch5.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnSwitch3.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnSwitch1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnReadRFDevList.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnReadRFWifi.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnSetRFWifi.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="GroupBox2.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnAKeyTest.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnClearList.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label2.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="GrdRFcfg.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="GroupBox3.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TabRFFunction.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TabFunctionRF.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label17.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="PageRFInsertCalorie.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="GboInsertCalorie.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblCommTestInsertCard.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnCommTestInsertCard.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label20.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="NudRFSector.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="CboInsertSet.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label30.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnRFInsertCalorie.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="PageRFSwitchPanel.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="PageRFWirelessVoice.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="GroupBox5.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblCommTestVoice.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnCommTestVoice.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnForwardingData.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TxtForwardingData.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblData.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="PageRFWirelessTempControl.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="GroupBox6.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblCommTestTemp.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnCommTestTemp.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Panel1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblTempControlAuto.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnTempControlValve.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblTempControlValue.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblDegree.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblTempControlHigh.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblTempControlCentre.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblTempControlLow.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblTempControlCold.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblTempControlHot.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblTempControlSupply.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnTempControlModel.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnTempControlAdd.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnTempControlVelocity.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnTempControlMinus.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnTempControlSwitch.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnReadThermostatSettings.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label22.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="NudTempDiffValue.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnSetTemperatureDiff.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="PageRFWeChatLock.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="PageRFElectricCurtains.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="GroupBox7.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LblCommTestCurtain.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnCommTestCurtain.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TextBox1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnCurtainClose.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnCurtainStop.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnCurtainStart.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BtnCurtainData.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TxtCurtainData.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label21.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="SplitContainer1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="SplitContainer2.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>85</value>
</metadata>
</root>

2377
RCU-10/RCU/FrmRFFunction.vb Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,9 @@
Public Interface IModuleForm
''' <summary>
''' 显示窗体接口
''' </summary>
''' <param name="parentControl"></param>
Sub ShowForm(parentControl As Control)
End Interface

129
RCU-10/RCU/LoginForm1.Designer.vb generated Normal file
View File

@@ -0,0 +1,129 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
<Global.System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1726")> _
Partial Class LoginForm1
Inherits System.Windows.Forms.Form
'Form 重写 Dispose以清理组件列表。
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
Friend WithEvents LogoPictureBox As System.Windows.Forms.PictureBox
Friend WithEvents UsernameLabel As System.Windows.Forms.Label
Friend WithEvents PasswordLabel As System.Windows.Forms.Label
Friend WithEvents UsernameTextBox As System.Windows.Forms.TextBox
Friend WithEvents PasswordTextBox As System.Windows.Forms.TextBox
Friend WithEvents OK As System.Windows.Forms.Button
Friend WithEvents Cancel As System.Windows.Forms.Button
'Windows 窗体设计器所必需的
Private components As System.ComponentModel.IContainer
'注意: 以下过程是 Windows 窗体设计器所必需的
'可以使用 Windows 窗体设计器修改它。
'不要使用代码编辑器修改它。
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(LoginForm1))
Me.LogoPictureBox = New System.Windows.Forms.PictureBox
Me.UsernameLabel = New System.Windows.Forms.Label
Me.PasswordLabel = New System.Windows.Forms.Label
Me.UsernameTextBox = New System.Windows.Forms.TextBox
Me.PasswordTextBox = New System.Windows.Forms.TextBox
Me.OK = New System.Windows.Forms.Button
Me.Cancel = New System.Windows.Forms.Button
CType(Me.LogoPictureBox, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'LogoPictureBox
'
Me.LogoPictureBox.Image = CType(resources.GetObject("LogoPictureBox.Image"), System.Drawing.Image)
Me.LogoPictureBox.Location = New System.Drawing.Point(0, 0)
Me.LogoPictureBox.Name = "LogoPictureBox"
Me.LogoPictureBox.Size = New System.Drawing.Size(165, 193)
Me.LogoPictureBox.TabIndex = 0
Me.LogoPictureBox.TabStop = False
'
'UsernameLabel
'
Me.UsernameLabel.Location = New System.Drawing.Point(172, 24)
Me.UsernameLabel.Name = "UsernameLabel"
Me.UsernameLabel.Size = New System.Drawing.Size(220, 23)
Me.UsernameLabel.TabIndex = 0
Me.UsernameLabel.Text = "用户名(&U)"
Me.UsernameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
'
'PasswordLabel
'
Me.PasswordLabel.Location = New System.Drawing.Point(172, 81)
Me.PasswordLabel.Name = "PasswordLabel"
Me.PasswordLabel.Size = New System.Drawing.Size(220, 23)
Me.PasswordLabel.TabIndex = 2
Me.PasswordLabel.Text = "密码(&P)"
Me.PasswordLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
'
'UsernameTextBox
'
Me.UsernameTextBox.Location = New System.Drawing.Point(174, 44)
Me.UsernameTextBox.Name = "UsernameTextBox"
Me.UsernameTextBox.Size = New System.Drawing.Size(220, 20)
Me.UsernameTextBox.TabIndex = 1
'
'PasswordTextBox
'
Me.PasswordTextBox.Location = New System.Drawing.Point(174, 101)
Me.PasswordTextBox.Name = "PasswordTextBox"
Me.PasswordTextBox.PasswordChar = Microsoft.VisualBasic.ChrW(42)
Me.PasswordTextBox.Size = New System.Drawing.Size(220, 20)
Me.PasswordTextBox.TabIndex = 3
'
'确定
'
Me.OK.Location = New System.Drawing.Point(197, 161)
Me.OK.Name = "OK"
Me.OK.Size = New System.Drawing.Size(94, 23)
Me.OK.TabIndex = 4
Me.OK.Text = "确定(&O)"
'
'取消
'
Me.Cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.Cancel.Location = New System.Drawing.Point(300, 161)
Me.Cancel.Name = "Cancel"
Me.Cancel.Size = New System.Drawing.Size(94, 23)
Me.Cancel.TabIndex = 5
Me.Cancel.Text = "取消(&C)"
'
'LoginForm1
'
Me.AcceptButton = Me.OK
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.CancelButton = Me.Cancel
Me.ClientSize = New System.Drawing.Size(401, 192)
Me.Controls.Add(Me.Cancel)
Me.Controls.Add(Me.OK)
Me.Controls.Add(Me.PasswordTextBox)
Me.Controls.Add(Me.UsernameTextBox)
Me.Controls.Add(Me.PasswordLabel)
Me.Controls.Add(Me.UsernameLabel)
Me.Controls.Add(Me.LogoPictureBox)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "LoginForm1"
Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent
Me.Text = "LoginForm1"
CType(Me.LogoPictureBox, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
End Class

790
RCU-10/RCU/LoginForm1.resx Normal file
View File

@@ -0,0 +1,790 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="LogoPictureBox.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Assembly</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LogoPictureBox.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
<metadata name="UsernameLabel.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Assembly</value>
</metadata>
<metadata name="PasswordLabel.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Assembly</value>
</metadata>
<metadata name="UsernameTextBox.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Assembly</value>
</metadata>
<metadata name="PasswordTextBox.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Assembly</value>
</metadata>
<metadata name="OK.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Assembly</value>
</metadata>
<metadata name="Cancel.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Assembly</value>
</metadata>
</root>

19
RCU-10/RCU/LoginForm1.vb Normal file
View File

@@ -0,0 +1,19 @@
Public Class LoginForm1
' TODO: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBA3AC>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><E1B9A9><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤
' (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://go.microsoft.com/fwlink/?LinkId=35339)<29><>
' <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɸ<EFBFBD><C9B8>ӵ<EFBFBD><D3B5><EFBFBD>ǰ<EFBFBD>̵߳<DFB3><CCB5><EFBFBD><EFBFBD><EFBFBD><E5A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ:
' My.User.CurrentPrincipal = CustomPrincipal
' <20><><EFBFBD><EFBFBD> CustomPrincipal <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4> IPrincipal ʵ<>֡<EFBFBD>
' <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>My.User <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CustomPrincipal <20><><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD>װ<EFBFBD>ı<EFBFBD>ʶ<EFBFBD><CAB6>Ϣ
' <20><><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
Me.Close()
End Sub
Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel.Click
Me.Close()
End Sub
End Class

View File

@@ -0,0 +1,38 @@
'------------------------------------------------------------------------------
' <auto-generated>
' 此代码由工具生成。
' 运行时版本:4.0.30319.42000
'
' 对此文件的更改可能会导致不正确的行为,并且如果
' 重新生成代码,这些更改将会丢失。
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
'注意:此文件是自动生成的;请勿直接进行修改。若要更改,
' 或者如果您在此文件中遇到生成错误,请转至项目设计器
' (转至“项目属性”或在解决方案资源管理器中双击“我的项目”节点)
' 然后在“应用程序”选项卡中进行更改。
'
Partial Friend Class MyApplication
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Public Sub New()
MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows)
Me.IsSingleInstance = false
Me.EnableVisualStyles = true
Me.SaveMySettingsOnExit = true
Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterAllFormsClose
End Sub
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Protected Overrides Sub OnCreateMainForm()
Me.MainForm = Global.RCU.FrmRCU
End Sub
End Class
End Namespace

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MySubMain>true</MySubMain>
<MainForm>FrmRCU</MainForm>
<SingleInstance>false</SingleInstance>
<ShutdownMode>1</ShutdownMode>
<EnableVisualStyles>true</EnableVisualStyles>
<AuthenticationMode>0</AuthenticationMode>
<SaveMySettingsOnExit>true</SaveMySettingsOnExit>
</MyApplicationData>

View File

@@ -0,0 +1,35 @@
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
' 有关程序集的一般信息由以下
' 控制。更改这些特性值可修改
' 与程序集关联的信息。
'查看程序集特性的值
<Assembly: AssemblyTitle("RCU")>
<Assembly: AssemblyDescription("2021年11月2号更改_ML")>
<Assembly: AssemblyCompany("Microsoft")>
<Assembly: AssemblyProduct("RCU-RS485-SerialApp Tools")>
<Assembly: AssemblyCopyright("Copyright © Microsoft 2020")>
<Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)>
'如果此项目向 COM 公开,则下列 GUID 用于 typelib 的 ID
<Assembly: Guid("8c6a5282-6dd0-4946-af7e-51fe009d7732")>
' 程序集的版本信息由下列四个值组成:
'
' 主版本
' 次版本
' 生成号
' 修订号
'
'可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
'通过使用 "*",如下所示:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("2.7.1.0")>
<Assembly: AssemblyFileVersion("2.7.1.0")>

View File

@@ -0,0 +1,72 @@
'------------------------------------------------------------------------------
' <auto-generated>
' 此代码由工具生成。
' 运行时版本:4.0.30319.42000
'
' 对此文件的更改可能会导致不正确的行为,并且如果
' 重新生成代码,这些更改将会丢失。
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Imports System
Namespace My.Resources
'此类是由 StronglyTypedResourceBuilder
'类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
'若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
'(以 /str 作为命令选项),或重新生成 VS 项目。
'''<summary>
''' 一个强类型的资源类,用于查找本地化的字符串等。
'''</summary>
<Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0"), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
Friend Module Resources
Private resourceMan As Global.System.Resources.ResourceManager
Private resourceCulture As Global.System.Globalization.CultureInfo
'''<summary>
''' 返回此类使用的缓存的 ResourceManager 实例。
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("RCU.Resources", GetType(Resources).Assembly)
resourceMan = temp
End If
Return resourceMan
End Get
End Property
'''<summary>
''' 重写当前线程的 CurrentUICulture 属性
''' 重写当前线程的 CurrentUICulture 属性。
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Property Culture() As Global.System.Globalization.CultureInfo
Get
Return resourceCulture
End Get
Set
resourceCulture = value
End Set
End Property
'''<summary>
''' 查找类似 的本地化字符串。
'''</summary>
Friend ReadOnly Property String1() As String
Get
Return ResourceManager.GetString("String1", resourceCulture)
End Get
End Property
End Module
End Namespace

View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="String1" xml:space="preserve">
<value />
</data>
</root>

229
RCU-10/RCU/My Project/Settings.Designer.vb generated Normal file
View File

@@ -0,0 +1,229 @@
'------------------------------------------------------------------------------
' <auto-generated>
' 此代码由工具生成。
' 运行时版本:4.0.30319.42000
'
' 对此文件的更改可能会导致不正确的行为,并且如果
' 重新生成代码,这些更改将会丢失。
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.8.1.0"), _
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase
Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings)
#Region "My.Settings 自动保存功能"
#If _MyType = "WindowsForms" Then
Private Shared addedHandler As Boolean
Private Shared addedHandlerLockObject As New Object
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Private Shared Sub AutoSaveSettings(sender As Global.System.Object, e As Global.System.EventArgs)
If My.Application.SaveMySettingsOnExit Then
My.Settings.Save()
End If
End Sub
#End If
#End Region
Public Shared ReadOnly Property [Default]() As MySettings
Get
#If _MyType = "WindowsForms" Then
If Not addedHandler Then
SyncLock addedHandlerLockObject
If Not addedHandler Then
AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
addedHandler = True
End If
End SyncLock
End If
#End If
Return defaultInstance
End Get
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("192.168.1.1")> _
Public Property CBoLongIP() As String
Get
Return CType(Me("CBoLongIP"),String)
End Get
Set
Me("CBoLongIP") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("1024")> _
Public Property NumRemotePort() As Integer
Get
Return CType(Me("NumRemotePort"),Integer)
End Get
Set
Me("NumRemotePort") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("5533")> _
Public Property NumLocalPort() As Integer
Get
Return CType(Me("NumLocalPort"),Integer)
End Get
Set
Me("NumLocalPort") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("9600")> _
Public Property CBoBaud() As String
Get
Return CType(Me("CBoBaud"),String)
End Get
Set
Me("CBoBaud") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("正常模式")> _
Public Property CBoMode() As String
Get
Return CType(Me("CBoMode"),String)
End Get
Set
Me("CBoMode") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("RS485透传模块")> _
Public Property CboRFDevType() As String
Get
Return CType(Me("CboRFDevType"),String)
End Get
Set
Me("CboRFDevType") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("9600")> _
Public Property CboCMD15Buad() As String
Get
Return CType(Me("CboCMD15Buad"),String)
End Get
Set
Me("CboCMD15Buad") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("不控制")> _
Public Property rfcmd14Way() As String
Get
Return CType(Me("rfcmd14Way"),String)
End Get
Set
Me("rfcmd14Way") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("向上渐变调光")> _
Public Property CboRFCMD21ControlMode() As String
Get
Return CType(Me("CboRFCMD21ControlMode"),String)
End Get
Set
Me("CboRFCMD21ControlMode") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("9600")> _
Public Property CboSerialBaud() As String
Get
Return CType(Me("CboSerialBaud"),String)
End Get
Set
Me("CboSerialBaud") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("COM1")> _
Public Property CboSerialPort() As String
Get
Return CType(Me("CboSerialPort"),String)
End Get
Set
Me("CboSerialPort") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("27")> _
Public Property CurtainsCMD() As String
Get
Return CType(Me("CurtainsCMD"),String)
End Get
Set
Me("CurtainsCMD") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("0")> _
Public Property CurtainsData() As String
Get
Return CType(Me("CurtainsData"),String)
End Get
Set
Me("CurtainsData") = value
End Set
End Property
End Class
End Namespace
Namespace My
<Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _
Friend Module MySettingsProperty
<Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _
Friend ReadOnly Property Settings() As Global.RCU.My.MySettings
Get
Return Global.RCU.My.MySettings.Default
End Get
End Property
End Module
End Namespace

View File

@@ -0,0 +1,45 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="My" GeneratedClassName="MySettings" UseMySettingsClassName="true">
<Profiles />
<Settings>
<Setting Name="CBoLongIP" Type="System.String" Scope="User">
<Value Profile="(Default)">192.168.1.1</Value>
</Setting>
<Setting Name="NumRemotePort" Type="System.Int32" Scope="User">
<Value Profile="(Default)">1024</Value>
</Setting>
<Setting Name="NumLocalPort" Type="System.Int32" Scope="User">
<Value Profile="(Default)">5533</Value>
</Setting>
<Setting Name="CBoBaud" Type="System.String" Scope="User">
<Value Profile="(Default)">9600</Value>
</Setting>
<Setting Name="CBoMode" Type="System.String" Scope="User">
<Value Profile="(Default)">正常模式</Value>
</Setting>
<Setting Name="CboRFDevType" Type="System.String" Scope="User">
<Value Profile="(Default)">RS485透传模块</Value>
</Setting>
<Setting Name="CboCMD15Buad" Type="System.String" Scope="User">
<Value Profile="(Default)">9600</Value>
</Setting>
<Setting Name="rfcmd14Way" Type="System.String" Scope="User">
<Value Profile="(Default)">不控制</Value>
</Setting>
<Setting Name="CboRFCMD21ControlMode" Type="System.String" Scope="User">
<Value Profile="(Default)">向上渐变调光</Value>
</Setting>
<Setting Name="CboSerialBaud" Type="System.String" Scope="User">
<Value Profile="(Default)">9600</Value>
</Setting>
<Setting Name="CboSerialPort" Type="System.String" Scope="User">
<Value Profile="(Default)">COM1</Value>
</Setting>
<Setting Name="CurtainsCMD" Type="System.String" Scope="User">
<Value Profile="(Default)">27</Value>
</Setting>
<Setting Name="CurtainsData" Type="System.String" Scope="User">
<Value Profile="(Default)">0</Value>
</Setting>
</Settings>
</SettingsFile>

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app" />
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC 清单选项
如果想要更改 Windows 用户帐户控制级别,请使用
以下节点之一替换 requestedExecutionLevel 节点。n
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
指定 requestedExecutionLevel 元素将禁用文件和注册表虚拟化。
如果你的应用程序需要此虚拟化来实现向后兼容性,则删除此
元素。
-->
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
<applicationRequestMinimum>
<PermissionSet Unrestricted="true" ID="Custom" SameSite="site" />
<defaultAssemblyRequest permissionSetReference="Custom" />
</applicationRequestMinimum>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- 设计此应用程序与其一起工作且已针对此应用程序进行测试的
Windows 版本的列表。取消评论适当的元素,
Windows 将自动选择最兼容的环境。 -->
<!-- Windows Vista -->
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
<!-- Windows 7 -->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->
<!-- Windows 8 -->
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->
<!-- Windows 8.1 -->
<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->
<!-- Windows 10 -->
<!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />-->
</application>
</compatibility>
<!-- 指示该应用程序可以感知 DPI 且 Windows 在 DPI 较高时将不会对其进行
自动缩放。Windows Presentation Foundation (WPF)应用程序自动感知 DPI无需
选择加入。选择加入此设置的 Windows 窗体应用程序(目标设定为 .NET Framework 4.6 )还应
在其 app.config 中将 "EnableWindowsFormsHighDpiAutoResizing" 设置设置为 "true"。-->
<!--
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
</application>
-->
<!-- 启用 Windows 公共控件和对话框的主题(Windows XP 和更高版本) -->
<!--
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
-->
</assembly>

BIN
RCU-10/RCU/MySql.Data.dll Normal file

Binary file not shown.

281
RCU-10/RCU/RCU.vbproj Normal file
View File

@@ -0,0 +1,281 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{DCDFB337-7F07-44F0-A269-2D23D487D50E}</ProjectGuid>
<OutputType>WinExe</OutputType>
<StartupObject>RCU.My.MyApplication</StartupObject>
<RootNamespace>RCU</RootNamespace>
<AssemblyName>RCU</AssemblyName>
<FileAlignment>512</FileAlignment>
<MyType>WindowsForms</MyType>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<IsWebBootstrapper>true</IsWebBootstrapper>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Web</InstallFrom>
<UpdateEnabled>true</UpdateEnabled>
<UpdateMode>Background</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>true</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<InstallUrl>http://auth.blv-oa.com/Apps/RCU/</InstallUrl>
<ProductName>RCU透传工具</ProductName>
<PublisherName>BY</PublisherName>
<MinimumRequiredVersion>2.6.0.1</MinimumRequiredVersion>
<CreateWebPageOnPublish>true</CreateWebPageOnPublish>
<WebPage>RCU.html</WebPage>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>2.7.1.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<CreateDesktopShortcut>true</CreateDesktopShortcut>
<PublishWizardCompleted>true</PublishWizardCompleted>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>bin\Debug\</OutputPath>
<DocumentationFile>RCU.xml</DocumentationFile>
<NoWarn>41999,42016,42017,42018,42019,42020,42021,42022,42032,42036</NoWarn>
<WarningsAsErrors>
</WarningsAsErrors>
<DefineConstants>IsAdmin = True</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<DefineDebug>false</DefineDebug>
<DefineTrace>true</DefineTrace>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DocumentationFile>RCU.xml</DocumentationFile>
<NoWarn>41999,42016,42017,42018,42019,42020,42021,42022,42032,42036</NoWarn>
<WarningsAsErrors>
</WarningsAsErrors>
</PropertyGroup>
<PropertyGroup>
<OptionExplicit>On</OptionExplicit>
</PropertyGroup>
<PropertyGroup>
<OptionCompare>Binary</OptionCompare>
</PropertyGroup>
<PropertyGroup>
<OptionStrict>Off</OptionStrict>
</PropertyGroup>
<PropertyGroup>
<OptionInfer>On</OptionInfer>
</PropertyGroup>
<PropertyGroup>
<ApplicationManifest>My Project\app.manifest</ApplicationManifest>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>favicon.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup>
<ManifestCertificateThumbprint>B560FC4505CF3B0A721E2873D03DF142AAD2E6C4</ManifestCertificateThumbprint>
</PropertyGroup>
<PropertyGroup>
<ManifestKeyFile>RCU_TemporaryKey.pfx</ManifestKeyFile>
</PropertyGroup>
<PropertyGroup>
<GenerateManifests>true</GenerateManifests>
</PropertyGroup>
<PropertyGroup>
<TargetZone>LocalIntranet</TargetZone>
</PropertyGroup>
<PropertyGroup>
<SignManifests>false</SignManifests>
</PropertyGroup>
<ItemGroup>
<Reference Include="FlexCell, Version=4.4.0.0, Culture=neutral, PublicKeyToken=6f86587eb70ee309, processorArchitecture=MSIL" />
<Reference Include="MySql.Data, Version=8.0.23.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>.\MySql.Data.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Data.SQLite, Version=1.0.112.1, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>.\System.Data.SQLite.dll</HintPath>
</Reference>
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Net.Http" />
</ItemGroup>
<ItemGroup>
<Import Include="Microsoft.VisualBasic" />
<Import Include="System" />
<Import Include="System.Collections" />
<Import Include="System.Collections.Generic" />
<Import Include="System.Data" />
<Import Include="System.Drawing" />
<Import Include="System.Diagnostics" />
<Import Include="System.Windows.Forms" />
<Import Include="System.Linq" />
<Import Include="System.Xml.Linq" />
<Import Include="System.Threading.Tasks" />
</ItemGroup>
<ItemGroup>
<Compile Include="ADODB\Recordset.vb" />
<Compile Include="ApplicationEvents.vb" />
<Compile Include="Database\Base\ColumnSchema.vb" />
<Compile Include="Database\Base\CommandHelpers.vb" />
<Compile Include="Database\Base\DatabaseData.vb" />
<Compile Include="Database\Base\DatabaseSchema.vb" />
<Compile Include="Database\Base\ForeignKeySchema.vb" />
<Compile Include="Database\Base\IndexSchema.vb" />
<Compile Include="Database\Base\InsertParams.vb" />
<Compile Include="Database\Base\SearchCondition.vb" />
<Compile Include="Database\Base\SearchParams.vb" />
<Compile Include="Database\Base\TableSchema.vb" />
<Compile Include="Database\Base\TriggerBuilder.vb" />
<Compile Include="Database\Base\TriggerSchema.vb" />
<Compile Include="Database\Base\ViewSchema.vb" />
<Compile Include="Database\DbCmdHelper.vb" />
<Compile Include="Database\DbExecutor.vb" />
<Compile Include="Database\MssqlCmdHelper.vb" />
<Compile Include="Database\Mssql\MssqlCmdHelper.vb" />
<Compile Include="Database\MysqlCmdHelper.vb" />
<Compile Include="Database\MysqlDataParam.vb" />
<Compile Include="Database\Mysql\DataParam.vb" />
<Compile Include="Database\Mysql\MysqlCmdHelper.vb" />
<Compile Include="Database\SqliteCmdHelper.vb" />
<Compile Include="Database\SqliteDataParam.vb" />
<Compile Include="Database\Sqlite\DataParam.vb" />
<Compile Include="Database\Sqlite\SqliteCmdHelper.vb" />
<Compile Include="DeviceListInfo.vb" />
<Compile Include="Frm485Update.Designer.vb">
<DependentUpon>Frm485Update.vb</DependentUpon>
</Compile>
<Compile Include="Frm485Update.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="FrmC43Function.Designer.vb">
<DependentUpon>FrmC43Function.vb</DependentUpon>
</Compile>
<Compile Include="FrmC43Function.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="FrmInfraredFunction.Designer.vb">
<DependentUpon>FrmInfraredFunction.vb</DependentUpon>
</Compile>
<Compile Include="FrmInfraredFunction.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="FrmPassword.Designer.vb">
<DependentUpon>FrmPassword.vb</DependentUpon>
</Compile>
<Compile Include="FrmPassword.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="FrmRCU.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="FrmRCU.Designer.vb">
<DependentUpon>FrmRCU.vb</DependentUpon>
<SubType>Form</SubType>
</Compile>
<Compile Include="FrmRFFunction.Designer.vb">
<DependentUpon>FrmRFFunction.vb</DependentUpon>
</Compile>
<Compile Include="FrmRFFunction.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="IModuleForm.vb" />
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Application.myapp</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<Compile Include="My Project\Resources.Designer.vb">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="My Project\Settings.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<Compile Include="RCUModule.vb" />
<Compile Include="UpdateDeviceInfo.vb" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Frm485Update.resx">
<DependentUpon>Frm485Update.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="FrmC43Function.resx">
<DependentUpon>FrmC43Function.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="FrmInfraredFunction.resx">
<DependentUpon>FrmInfraredFunction.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="FrmPassword.resx">
<DependentUpon>FrmPassword.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="FrmRCU.resx">
<DependentUpon>FrmRCU.vb</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="FrmRFFunction.resx">
<DependentUpon>FrmRFFunction.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="My Project\Resources.resx">
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
<CustomToolNamespace>My.Resources</CustomToolNamespace>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="My Project\app.manifest" />
<None Include="My Project\Application.myapp">
<Generator>MyApplicationCodeGenerator</Generator>
<LastGenOutput>Application.Designer.vb</LastGenOutput>
</None>
<None Include="My Project\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<CustomToolNamespace>My</CustomToolNamespace>
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
</None>
<None Include="App.config" />
<None Include="RCU_TemporaryKey.pfx" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.8">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.8 %28x86 和 x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<Content Include="favicon.ico" />
<Content Include="RCUVersion.txt" />
<Content Include="软件进度.txt" />
</ItemGroup>
<ItemGroup>
<Folder Include="Resources\" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
</Project>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PublishUrlHistory>publish\</PublishUrlHistory>
<InstallUrlHistory>http://auth.blv-oa.com/Apps/RCU/|http://blv-oa.com/Apps/RCU/|http://47.119.147.104:90/Apps/RCU/|http://47.119.147.104:90/Apps//|http://bl-oa.com/Apps/RCU/</InstallUrlHistory>
<SupportUrlHistory />
<UpdateUrlHistory />
<BootstrapperUrlHistory />
<ErrorReportUrlHistory />
<FallbackCulture>zh-CN</FallbackCulture>
<VerifyUploadedFiles>false</VerifyUploadedFiles>
</PropertyGroup>
<PropertyGroup>
<EnableSecurityDebugging>false</EnableSecurityDebugging>
</PropertyGroup>
</Project>

669
RCU-10/RCU/RCUModule.vb Normal file
View File

@@ -0,0 +1,669 @@
Imports System.Data.Common
Imports System.IO
Imports System.Security.Cryptography
Imports System.Text
Module RCUModule
#Region "数据库操作"
''' <summary>远程数据库类型</summary>
Public RemoteDbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql
''' <summary>远程数据库名</summary>
Public RemoteDbName As String = "blv_rcu_config"
Public FPrefix As Char = "`"
'Public FSuffix As Char = "'"
''' <summary>
''' 连接数据库字符串
''' </summary>
''' <returns></returns>
Public Function ConnSQLString() As String
'MSSQL连接方式
Dim remoteConn As New DbConnectionStringBuilder From {
{"Data Source", "47.119.147.104"},
{"Initial Catalog", "AuthorityDB"},
{"Integrated Security", "false"},
{"User ID", "sa"},
{"Password", "9S844fK3"}
}
Dim DbConnString As String = "Server=blv-cloud-db.mysql.rds.aliyuncs.com;Port=3307;Database=blv_rcu_config;Uid=blv_rcu;Pwd=fnadiaJDIJ7546;charset=utf8;"
Return DbConnString
Return remoteConn.ToString()
End Function
#End Region
#Region "功能全局变量"
''' <summary>
''' 是否处于网络接收状态
''' </summary>
Public _isReceiving As Boolean
''' <summary>
''' 是否通过UDP发送数据
''' </summary>
Public _isSendByUdp As Boolean
''' <summary>
''' 是否读取
''' </summary>
Public _isRead As Boolean
''' <summary>
''' 是否准备完成
''' </summary>
Public _isPrepare As Boolean
''' <summary>
''' 红外回复处理
''' </summary>
Public _InfraredReceProcessing As Boolean
''' <summary>
''' 红外烧录是否回复
''' </summary>
Public _isInfraredreply As Boolean
''' <summary>
''' 记录重发次数
''' </summary>
Public _resend As Integer = 0
''' <summary>
''' 配对设备列表设备总数
''' </summary>
Public _pairingDevCount As Integer = 0
''' <summary>
''' RF配对模式
''' </summary>
Public _pairingModel As Boolean
''' <summary>
''' 设备列表键值对
''' </summary>
Public _devList As New Dictionary(Of String, DeviceListInfo)
''' <summary>
''' 升级设备列表_键值对
''' </summary>
Public _upgradeDevList As New Dictionary(Of String, UpdateDeviceInfo)
''' <summary>
''' 点击计数
''' </summary>
Public _clickCount As Integer = 0
#End Region
#Region "数据组透传包"
''' <summary>
''' 透传数据包头
''' </summary>
Public _fixedHead As Byte() = {&HAA, &H55}
''' <summary>
''' 透传数据固定ID
''' </summary>
Public _fixeSystemId As Byte() = {&H54, &H33, &H53, &H41}
''' <summary>
''' 透传数据房间信息
''' </summary>
Public _fixeRoomInfo As Byte() = {&HFF, &HFF, &HFF, &HFF}
''' <summary>
''' 包头数据长度
''' </summary>
Public _dataHeadLength As UShort = 15
''' <summary>
''' 数据CRC校验长度
''' </summary>
Public _dataCRCLength As UShort = 2
''' <summary>
''' 透传命令
''' </summary>
Public _serialCmd As Byte = &H3
''' <summary>
''' 透传端口
''' </summary>
Public _port485 As Byte
''' <summary>
''' 透传超时
''' </summary>
Public _timeouts As Byte
''' <summary>
''' 发送次数标志位
''' </summary>
Public _sendTick As Short = 2 '标志位
''' <summary>
''' 填充发送数据包
''' </summary>
''' <param name="data"></param>
''' <returns></returns>
Public Function FillSendDataPacket(data As Byte()) As Byte()
Dim byteHead As Byte()
Dim crc16 As Byte()
Dim sendPacket As Byte()
byteHead = SendDataHead(data) '获取DataHaed
crc16 = CheckSendData(byteHead, data) '获取Data检验值
sendPacket = FillSendPacket(byteHead, data, crc16) '组合发送数据
Return sendPacket
End Function
''' <summary>
''' 填充发送包头数据
''' </summary>
''' <param name="data"></param>
''' <returns></returns>
Public Function SendDataHead(data As Byte()) As Byte()
Dim byteHead As Byte()
Dim packetLength As Short = _dataHeadLength + _dataCRCLength + data.Length
Dim cmdType As Byte = &H70
Dim frameNum As Short = 1
byteHead = FillSendPacketHead(packetLength, cmdType, frameNum)
Return byteHead
End Function
''' <summary>
''' 填充发送信息包头
''' </summary>
''' <param name="length"></param>
''' <param name="cmdType"></param>
''' <param name="frameNum"></param>
''' <returns></returns>
Public Function FillSendPacketHead(length As Short, cmdType As Byte, frameNum As Short) As Byte()
Dim dataHead As New List(Of Byte)
dataHead.AddRange(_fixedHead)
dataHead.AddRange(BitConverter.GetBytes(length))
dataHead.AddRange(_fixeSystemId)
dataHead.Add(cmdType)
dataHead.AddRange(BitConverter.GetBytes(frameNum))
dataHead.AddRange(_fixeRoomInfo)
Return dataHead.ToArray
End Function
''' <summary>
''' 填充发送校验数据
''' </summary>
''' <param name="byteHead"></param>
''' <param name="data"></param>
''' <returns></returns>
Public Function CheckSendData(byteHead As Byte(), data As Byte()) As Byte()
Dim crc16 As Byte()
Dim dataList As New List(Of Byte)
dataList.AddRange(byteHead)
dataList.AddRange(data)
crc16 = GetCRC16CheckSum(dataList.ToArray, dataList.Count)
Return crc16
End Function
''' <summary>
''' 填充发送数据包
''' </summary>
''' <param name="head">数据包头</param>
''' <param name="data">数据内容</param>
''' <param name="crc16">CRC16校验</param>
''' <returns></returns>
Public Function FillSendPacket(head() As Byte, data() As Byte, crc16() As Byte) As Byte()
Dim dataList As New List(Of Byte)
dataList.AddRange(head)
dataList.AddRange(data)
dataList.AddRange(crc16)
Return dataList.ToArray
End Function
''' <summary>
''' 填充透传函数
''' 填充透传函数的抽象实现
''' </summary>
''' <param name="dataBuff"></param>
''' <returns></returns>
Public Function FillPacket(dataBuff() As Byte) As Byte()
If _isReceiving = True Then
dataBuff = FillPacketRealize(dataBuff) '透传数据
End If
Return dataBuff
End Function
''' <summary>
''' 填充透传函数的具体实现
''' </summary>
''' <param name="dataBuff"></param>
''' <returns></returns>
Public Function FillPacketRealize(dataBuff() As Byte) As Byte()
Dim data() As Byte = PassthroughData(dataBuff)
Dim byteHead As Byte()
Dim crc16 As Byte()
Dim sendPacket As Byte()
byteHead = SendDataHead(data) '获取DataHaed
crc16 = CheckSendData(byteHead, data) '获取Data检验值
sendPacket = FillSendPacket(byteHead, data, crc16) '组合发送数据
Return sendPacket
End Function
''' <summary>
''' 透传数据CMD
''' </summary>
''' <param name="dataBuff">串口数据</param>
''' <returns></returns>
Public Function PassthroughData(dataBuff() As Byte)
Dim dataLen As Integer = dataBuff.Length + 3
Dim data(dataLen - 1) As Byte
data(0) = _serialCmd
data(1) = _port485
data(2) = _timeouts
Array.Copy(dataBuff, 0, data, 3, dataBuff.Length)
Return data.ToArray
End Function
#End Region
#Region "校验"
''' <summary>
''' CRC16校验
''' </summary>
''' <param name="dataBuff"></param>
''' <param name="length"></param>
''' <returns></returns>
Public Function GetCRC16CheckSum(dataBuff() As Byte, length As Integer) As Byte()
Dim crc16 As UInteger
Dim crcBytes() As Byte
crc16 = &HFFFF
For i = 0 To length - 1
crc16 = crc16 And &HFFFF
crc16 = crc16 Xor dataBuff(i)
For bit = 0 To 7
crc16 = IIf((crc16 And 1) = 0, crc16 >> 1, (crc16 >> 1) Xor &HA001)
Next
Next
crc16 = crc16 And &HFFFF
crcBytes = BitConverter.GetBytes(UShort.Parse(crc16))
Return crcBytes
End Function
''' <summary>
''' MD5值校验
''' </summary>
''' <param name="strSource">需要校验的字符串</param>
''' <param name="Code">加密模式</param>
''' <returns></returns>
Public Function MD5(ByVal strSource As String, ByVal Code As Short) As String
Dim dataToHash As Byte() = (New ASCIIEncoding).GetBytes(strSource)
Dim hashvalue As Byte() = CType(System.Security.Cryptography.CryptoConfig.CreateFromName("MD5"), System.Security.Cryptography.HashAlgorithm).ComputeHash(dataToHash)
Dim ATR As String = ""
Dim i As Integer
Select Case Code
Case 16 '选择16位字符的加密结果
For i = 4 To 11
ATR &= Hex(hashvalue(i)).PadLeft(2, "0").ToLower
Next
Case 32 '选择32位字符的加密结果
For i = 0 To 15
ATR &= Hex(hashvalue(i)).PadLeft(2, "0").ToLower
Next
Case Else 'Code错误时返回全部字符串即32位字符
For i = 0 To 15
ATR &= Hex(hashvalue(i)).PadLeft(2, "0").ToLower
Next
End Select
Return ATR
End Function
''' <summary>
''' MD5校验
''' </summary>
''' <param name="strSource">需要校验的字符串</param>
''' <returns></returns>
Public Function MD51(ByVal strSource As String) As Byte()
Dim dataToHash As Byte() = (New UTF8Encoding).GetBytes(UCase(strSource))
Dim hashvalue As Byte() = CType(System.Security.Cryptography.CryptoConfig.CreateFromName("MD5"), System.Security.Cryptography.HashAlgorithm).ComputeHash(dataToHash)
Return hashvalue
End Function
''' <summary>
''' 获取文件的MD5值
''' </summary>
''' <param name="filepath">文件路径</param>
''' <returns></returns>
Public Function GetFileMd5(filepath As String) As String
Dim md5Hasher As New MD5CryptoServiceProvider()
Dim data As Byte() = md5Hasher.ComputeHash(IO.File.ReadAllBytes(filepath))
Dim fileMd5 As New StringBuilder()
Dim i As Integer
For i = 0 To data.Length - 1
fileMd5.Append(data(i).ToString("X2"))
Next
Return fileMd5.ToString()
End Function
''' <summary>
''' 和校验
''' 求Byte数组的和校验
''' </summary>
''' <param name="dataPacket">Byte数组</param>
''' <returns></returns>
Public Function GetSumCheck(dataPacket As Byte()) As Byte
Dim sum As Integer
For idx = 0 To dataPacket.Length - 1
sum += dataPacket(idx)
sum = sum And &HFF
Next
Return sum
End Function
''' <summary>
''' 和校验
''' 求Byte数组的和校验
''' </summary>
''' <param name="dataPacket">Byte数组</param>
''' <returns></returns>
Public Function GetSumChecks(dataPacket As Byte(), ByRef len As Integer) As Byte
Dim sum As Integer
For idx = 0 To len - 1
sum += dataPacket(idx)
sum = sum And &HFF
Next
sum = (Not sum) And &HFF
Return sum
End Function
''' <summary>
''' 和校验取余数
''' 求Byte数组的和校验取余数
''' </summary>
''' <param name="dataPacket">Byte数组</param>
''' <returns></returns>
Public Function GetSumCheckMod(dataPacket As Byte()) As Byte
Dim sum As Integer
For idx = 0 To dataPacket.Length - 1
sum += dataPacket(idx)
sum = sum And &HFF
Next
Dim sumMod As Byte = &HFF - sum
Return sumMod
End Function
#End Region
#Region "功能模块"
''' <summary>
''' 红外下载文件夹
''' </summary>
Public _downFile As String = $"{Application.StartupPath}\DownFile"
''' <summary>
''' 检查网络连接
''' </summary>
Public Function CheckNetWorkConn() As Boolean
If FrmRCU._connectStatus = FrmRCU.EnConnectStatus.DisConnect Then
FrmRCU.AppendTipText("数据发送失败! 原因:未打开网络!!!" & vbCrLf, Color.Red)
Return False
End If
Return True
End Function
''' <summary>
''' 检测串口连接
''' </summary>
Public Function CheckSerialPortConn() As Boolean
If FrmRCU.SerialPort.IsOpen = False Then
FrmRCU.AppendTipText("数据发送失败! 原因:未打开串口!!!" & vbCrLf, Color.Red)
Return False
End If
Return True
End Function
''' <summary>
''' Byte数组转字符串
''' </summary>
''' <param name="databuff"></param>
''' <returns></returns>
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
''' <summary>
''' Int转2个字节Byte
''' 高字节在前,低字节在后
''' </summary>
''' <param name="i"></param>
''' <returns></returns>
Public Function IntToByteHB(ByVal i As Integer) As Byte()
Dim btemp() As Byte = {0, 0}
Dim b() As Byte = BitConverter.GetBytes(i)
btemp(0) = b(0)
btemp(1) = b(1)
Return btemp
End Function
''' <summary>
''' Int转2个字节Byte
''' 低字节在前,高字节在后
''' </summary>
''' <param name="i"></param>
''' <returns></returns>
Public Function IntToByteLB(ByVal i As Integer) As Byte()
Dim btemp() As Byte = {0, 0}
Dim b() As Byte = BitConverter.GetBytes(i)
btemp(0) = b(1)
btemp(1) = b(0)
Return btemp
End Function
''' <summary>
''' 分块函数
''' 计算Byte数组的块数
''' </summary>
''' <param name="databuff"></param>
''' <returns></returns>
Public Function GetBlocks(databuff As Byte()) As Integer
Dim blockCount As Integer = databuff.Length \ 128
If databuff.Length Mod 128 > 0 Then
blockCount += 1
End If
Return blockCount
End Function
''' <summary>
''' 延时N秒
''' </summary>
''' <param name="HowLong">时间值</param>
Public Sub PauseWait(ByVal HowLong As Long)
Dim tick As Long
tick = My.Computer.Clock.TickCount
Do
My.Application.DoEvents()
Loop Until tick + HowLong < My.Computer.Clock.TickCount
End Sub
''' <summary>
''' 读取Hex文件到Byte数组
''' </summary>
''' <param name="filePath"></param>
''' <returns></returns>
Public Function ReadFileToBytes(filePath) As Byte()
Dim result As New List(Of Byte)
Dim tmpString As String = File.ReadAllText(filePath)
Console.WriteLine($"Befor tmpString:{tmpString}")
tmpString = tmpString.Replace("0x", "").Replace(vbCrLf, "").Replace(" ", "").Replace(vbTab, "")
Console.WriteLine($"After tmpString:{tmpString}")
Dim tmpStringArray() As String = tmpString.Split(New Char() {","c}, StringSplitOptions.RemoveEmptyEntries)
Dim tmp As String = ""
For index = 0 To tmpStringArray.Length - 1
result.Add($"&H{tmpStringArray(index)}")
tmp &= tmpStringArray(index) & ""
Next
Console.WriteLine($"Befor tmp:{ByteToString(result.ToArray)}")
'Console.WriteLine($"After tmp:{tmp}")
Return result.ToArray
End Function
''' <summary>
''' 删除文件夹
''' </summary>
Public Sub DeleteFiles()
If Directory.Exists(_downFile) = False Then Exit Sub
Try
Directory.Delete(_downFile, True)
Catch ex As Exception
MsgBox($"Delete File Error:{ex.Message}")
End Try
End Sub
''' <summary>
''' 字符串转换Byte数组
''' 字符串为连续且不包含任意字符的字符串
''' </summary>
''' <param name="str"></param>
''' <returns></returns>
Public Function GetStringToDataByte(str As String) As Byte()
Dim dataList As New List(Of Byte)
For index As Integer = 0 To str.Length - 1 Step 2
dataList.Add($"&H{str.Substring(index, 2)}")
Next
Console.WriteLine($"字符串转换Byte数组 {ByteToString(dataList.ToArray)}")
Return dataList.ToArray
End Function
#End Region
#Region "未完善"
''' <summary>
''' 发送数据处理所发所见—16进制
''' </summary>
''' <returns></returns>
Private Function CMDParameterSendData()
Dim sourceData As String = String.Empty '显示框控件文本
Dim newData() As String '新的字符串数据—字符串数组
Dim newArraylen As Integer '新数组长度
newData = sourceData.Split(" ") '空格为分割的标志
Console.WriteLine("分几块数据:" & newData.Length)
newArraylen = newData.Length
Dim hexData(newArraylen - 1) As Byte
Dim tmpCnt As Integer = 0
Try
For i = 0 To newData.Length - 1
If newData(i) <> "" Then
hexData(tmpCnt) = $"&H{newData(i)}"
Console.WriteLine($"要发送的数据" & hexData(tmpCnt))
tmpCnt += 1
End If
Next
Catch ex As Exception
MsgBox("数据输入格式有误")
End Try
Return hexData
End Function
#End Region
End Module

78
RCU-10/RCU/RCUVersion.txt Normal file
View File

@@ -0,0 +1,78 @@

项目更新日志
2021年11月2日
增加DbExecutor与DbCmdHelper文件,数据库由Mysql迁移至Mssql
删除空调与电视查询语句部分Group by部分
2021年10月27日
服务器地址(Server):由 "uts-svr2.synology.me" 变更为 "uts-svr2.qicp.net"
2.5.6.30
新增设备列表通讯测试列
新增一键测试按键,测试成功率结果显示到设备列表中
新增通讯超时机制10秒内未收到RF数据切换设备列表下一个测试
2.4.6.25
新增清空设备列表按键
新增RF设备网关通讯测试
新增RF设备电动窗帘命令选项
配对时,设备列表优化
2.3.6.16
新增RF无线功能:
表格控制信息增加计数功能
2.2.6.10
剔除旧RF功能
新增RF无线功能
功能如下:
插卡取电
开关面板
无线温控
无线语音
微信锁
电动窗帘
2.1.6.4
RCU结构调整
主窗体保留(包含通讯模块)
C43功能模块保留优化
红外功能保留优化
RF功能模块待优化
Pad1809功能模块
A12DRV功能模块已剔除
新增主窗体IP地址和端口号记录
改善各模块窗体独立优化
1.4.2.5
新增红外功能模块
新增空调电视操作命令
新增数据库操作
新增空调下发功能
新增电视下发功能
1.3.5.0
新增RF功能模块
新增Pad1809功能模块
新增A12DRV功能模块
1.2.5.0
新增C43功能
C43配置文件下发
1.0.0.0
完成基本串口通讯网络通迅—UDP
完成透传通信,协议组包

Binary file not shown.

77
RCU-10/RCU/Resource1.Designer.vb generated Normal file
View File

@@ -0,0 +1,77 @@
'------------------------------------------------------------------------------
' <auto-generated>
' 此代码由工具生成。
' 运行时版本:4.0.30319.42000
'
' 对此文件的更改可能会导致不正确的行为,并且如果
' 重新生成代码,这些更改将会丢失。
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Imports System
Namespace My.Resources
'此类是由 StronglyTypedResourceBuilder
'类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
'若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
'(以 /str 作为命令选项),或重新生成 VS 项目。
'''<summary>
''' 一个强类型的资源类,用于查找本地化的字符串等。
'''</summary>
<Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0"), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _
Friend Class Resource1
Private Shared resourceMan As Global.System.Resources.ResourceManager
Private Shared resourceCulture As Global.System.Globalization.CultureInfo
<Global.System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")> _
Friend Sub New()
MyBase.New
End Sub
'''<summary>
''' 返回此类使用的缓存的 ResourceManager 实例。
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Shared ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("RCU.Resource1", GetType(Resource1).Assembly)
resourceMan = temp
End If
Return resourceMan
End Get
End Property
'''<summary>
''' 重写当前线程的 CurrentUICulture 属性
''' 重写当前线程的 CurrentUICulture 属性。
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Shared Property Culture() As Global.System.Globalization.CultureInfo
Get
Return resourceCulture
End Get
Set
resourceCulture = value
End Set
End Property
'''<summary>
''' 查找类似于 (图标) 的 System.Drawing.Icon 类型的本地化资源。
'''</summary>
Friend Shared ReadOnly Property SerialApp() As System.Drawing.Icon
Get
Dim obj As Object = ResourceManager.GetObject("SerialApp", resourceCulture)
Return CType(obj,System.Drawing.Icon)
End Get
End Property
End Class
End Namespace

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

BIN
RCU-10/RCU/UTS_Core.dll Normal file

Binary file not shown.

View File

@@ -0,0 +1,63 @@
Public Class UpdateDeviceInfo
''' <summary>
''' 设备地址
''' </summary>
Public Property DevAddress As String
''' <summary>
''' 设备分区
''' </summary>
Public Property DevPartition As String
''' <summary>
''' 设备名称
''' </summary>
''' <returns></returns>
Public Property DevName As String
''' <summary>
''' 更新结果
''' </summary>
''' <returns></returns>
Public Property DevResult As String
''' <summary>
''' 初始化
''' </summary>
Sub New()
DevAddress = $""
DevPartition = $""
DevName = $""
DevResult = $""
End Sub
''' <summary>
''' 初始化
''' </summary>
''' <param name="devAddr"></param>
''' <param name="devPartition"></param>
''' <param name="devName"></param>
Sub New(devAddr As String, devPartition As String, devName As String)
Me.DevAddress = devAddr
Me.DevPartition = devPartition
Me.DevName = devName
Me.DevResult = $"未升级"
End Sub
''' <summary>
''' 升级结果
''' </summary>
Public Sub UpgradeResult()
DevResult = $"未升级"
End Sub
End Class

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,94 @@
AA 55 13 00 54 33 53 41 71 01 00 E9 03 01 19 03 03 3E FB
AA 55 13 00 54 33 53 41 71 01 00 E9 03 01 19 03 03 3E FB
AA 55 13 00 54 33 53 41 70 01 00 E9 03 01 19 03 02 F2 AB
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
AA 55 1B 00 54 33 53 41 71 01 00 E9 03 01 19 01 01 A7 00 00 65 00 01 F2 00 04 6D
AA 55 14 00 54 33 53 41 71 01 00 E9 03 01 19 01 01 00 98 42
AA 55 14 00 54 33 53 41 71 01 00 E9 03 01 19 01 01 FE 19 C2
AA 55 14 00 54 33 53 41 71 01 00 E9 03 01 19 01 01 00 98 42
<EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
AA 55 1A 00 54 33 53 41 71 01 00 E9 03 01 19 01 01 A7 00 00 47 00 00 11 09 E9
<EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
AA 55 24 00 54 33 53 41 71 01 00 E9 03 01 19 01 01 A7 00 00 CD 00 0A F5 50 41 44 5F 31 38 30 39 43 43 21 AE
<EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
AA 55 29 00 54 33 53 41 71 01 00 E9 03 01 19 01 01 A7 00 00 D8 00 0F F6 50 61 64 43 6F 6E 66 69 67 5F 32 2E 78 6D 6C 33 81
<EFBFBD>л<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
AA 55 1B 00 54 33 53 41 71 01 00 E9 03 01 19 01 01 A7 00 00 67 00 01 F0 00 7C CD
<EFBFBD>л<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
AA 55 1B 00 54 33 53 41 71 01 00 E9 03 01 19 01 01 A7 00 00 66 00 01 F1 00 40 9D
<EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD>
AA 55 24 00 54 33 53 41 71 01 00 E9 03 01 19 01 01 A7 00 00 D9 00 0A F4 00 FF 00 14 09 04 0D 31 23 00 04 45
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD>
AA 55 1B 00 54 33 53 41 71 01 00 E9 03 01 19 01 01 A7 00 00 64 00 01 F3 00 38 3D

View File

@@ -0,0 +1,136 @@
<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>
1F 8B 08 00 00 00 00 00 02 03 ED 97 49 6F E3 36 14 80 73 1E 60 FE 83 7F 80 ED 72 5F 74 4B 32 2D 7A 48 66 8C 04 1D B4 27 43 B6 69 47 A8 24 1A 5A B2 F4 D0 DF 3E 8F 12 B5 D8 31 9D 5C 5A A0 45 08 03 06 EC EF AD 7C 7C 7C DC 26 A9 49 93 B2 9A 57 CF D5 C5 3F B4 10 2C C1 58 F3 0D EB F8 5B 22 C6 2F 30 95 44 30 CA 30 85 DF 31 C1 0C 5F 4C D0 C5 BF B0 EA B2 8A 8B C9 E4 A2 B0 F6 6C 02 DE FA FF 3F BA 2E 17 8B 9F A6 53 82 08 9A 21 39 43 64 82 48 44 59 44 F4 14 7F FE B4 B8 FC B2 C4 0A E9 EB EB 29 C7 5C 08 34 80 78 82 44 44 69 C4 C8 94 7C FE F4 8B CD AB 72 A4 07 A3 09 92 11 67 11 A3 4E CF B7 C5 E2 DB 7D 9C 97 B3 DB 79 55 6D A7 18 21 85 04 51 80 63 0D EC 0C 63 67 96 A1 88 20 ED CE AE 6C 65 67 77 66 57 A7 71 D1 8A 00 2E 85 13 00 DB 74 86 B9 33 8F 45 C4 85 13 58 C7 D9 AA 48 62 20 D7 40 62 2D 19 6A 75 23 50 0F 21 E1 08 E9 88 63 87 66 E5 CB 43 CB 69 C1 A4 A4 C2 83 A0 53 4F 10 38 CC 22 DC 80 77 A6 B4 75 B1 36 7D 54 A2 51 25 9C 9B 60 15 A2 BA BA F9 3E 5F 65 FB 29 21 58 2A E2 F4 A8 46 0F 9B 60 1A 61 14 51 EE F4 DC 43 79 55 A6 98 EF 92 ED 94 50 02 BE 79 7D 6C 46 21 4B 90 41 F8 28 47 AE E2 F5 9F BB C2 D6 F9 66 BE CF 77 90 25 25 30 EB E3 20 74 82 78 44 65 C4 DA 90 53 13 E7 4B BB DD 36 2C 51 84 9F 20 D9 88 CC 1B 90 0B 4A C3 A0 5D 97 0F F6 A9 05 09 3F 65 BB 71 74 5D 17 55 9C 0C D6 B1 6E C3 87 64 E3 19 52 13 48 36 6C 27 96 07 6C 6B 1F 53 45 70 88 7D B0 99 B9 4C 8A 06 A4 08 4A B0 E5 C8 0C 0B 57 4E 14 45 08 77 DC 10 BA 24 F2 84 A3 7A 00 5B CB 8A 0B 12 E2 D2 64 F7 50 5D DB D4 16 83 5A 72 52 2D 3B C6 7D 58 98 75 E5 1C C0 6F 92 7C F0 19 0E 00 E9 8B DF D1 D8 1D 25 4E 7A 7A 1C 1D 3A EB 75 1F 1E 3D 13 5E BD 36 F9 FA C5 6F C0 90 7E AC 9C 65 C6 3D 96 C5 D5 FA 61 B0 AC F5 61 02 44 04 C5 4A 9A 88 32 BB 31 8B C2 94 E5 10 11 C5 3A 14 FF 88 6E 7D 95 BD 13 27 E0 BA 4C D6 DE 01 2E 06 57 99 73 95 43 6F D2 3D 75 59 54 A3 8C BE AA 6B 0E A7 1E F5 F0 6D 5D 8D F2 4F 25 3F 28 42 E5 1C C0 E4 88 F6 7B CB B4 78 ED 2D 1F 54 7F 35 CF A3 0D 23 38 78 6E 46 B4 3F 8D 44 AB B3 F0 22 AE CB 51 A9 2B 46 DE 83 FB 8A D0 9C 9E A7 D3 F8 65 B4 DD 18 BD 83 6E 55 6B F4 96 EA C2 3C 26 B6 2E 47 69 41 F2 9D 12 3E 35 14 F1 90 40 6E 37 30 B1 D4 C5 6A 50 2F F4 A9 F2 E3 47 B4 57 8D 19 0A C1 B6 1E D5 14 97 22 54 A6 0D D7 AA A3 22 8C ED E3 D4 54 95 69 38 86 A4 40 A1 1A F5 E0 72 55 F9 A2 D3 8C 87 7C DC DB 27 33 34 2A 2C B9 0E 35 54 4F E6 DD 1D 11 EC 68 FB C2 EE 9A 13 EA EE 20 7F A0 18 15 27 F4 F2 03 7C 5B C0 C5 DF 26 55 F5 59 3D E0 9B CB 0A 66 A7 AC 6B 2A EC E0 4C C3 25 0E 4D A5 D9 D5 12 9A 94 B9 37 C5 E3 28 38 72 BA AD F0 57 7C D7 86 95 08 6E 6D B9 49 B2 CC 14 3E 3A A2 43 DD B2 4C 93 8D B9 82 BB B0 4D 04 61 4C 87 8E 7F 83 7A 8D 12 F3 90 C6 CA 64 FB 0E C3 E2 78 13 60 9E 40 7C C0 86 12 60 24 78 55 57 8F B7 EE D0 0C 79 42 4C 85 26 85 9E ED 72 44 CF B1 DF 6D 5A 67 E6 8B 7D 1A 0D 17 98 AB 50 52 0F 05 5A 0B 4C 32 1D 76 BC E5 7F DB 8F D4 4B F9 96 7A 87 7B E5 8A 90 B0 F2 E5 A6 1B 1F 84 D4 3C AC 75 2B 7CB9 01 7F 5B 50 61 11 6C 34 00 A6 66 DB 16 38 D5 5C 9D B0 DC 4E 95 00 76 DD 40 6A CA CE 60 85 BB B4 BD 65 72 F2 1A 6C 2C 3F 26 65 52 8D C6 11 8A 99 08 95 57 CF 76 7D 5F D3 20 DA 64 B3 BB B1 55 A8 AE 9F 92 1C 12 04 A3 D8 78 93 82 F3 CD 88 EE A7 21 11 6C 89 4F 69 9F 01 A2 85 3A BE E1 BB 86 F8 FB ED CD D1 7B 42 C3 EB 00 66 C0 E6 5D 12 6F AE 6D BE 4D 76 CB EB AF CB 3F E2 5F 4D 32 7F CE 52 77 06 55 D3 0C 07 21 E5 FA 0B 6B 9A E1 20 F4 F3 81 90 10 0A 26 7E 78 34 80 10 6E 1E 36 C8 75 AE 76 1F BA E9 DD 91 54 52 AF 1B E2 92 13 98 F0 59 D7 E0 46 D8 DF AE F6 3C C7 67 04 35 23 96 F0 DC F0 A0 5A 7A 11 20 85 20 A8 7F 63 B8 37 01 DC 0B F0 C6 38 7A 81 75 02 CB AB B8 34 6F 48 B9 EA 4E 6D BC 99 83 C8 7C F7 D7 B4 19 60 7A C7 21 93 58 42 88 8E DC 8E 9E FF 53 D4 53 90 3A EC 1E 81 FE FD 76 F1 B1 3E D6 C7 FA 58 1F EB FF B6 7E 00 2A 3C 27 AF 00 16 00 00
ԭMD5ֵ<EFBFBD><EFBFBD> 51 E8 4D FA C4 6D E2 FE 67 02 3F 1C 64 70 E6 3C
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>MD5ֵ<EFBFBD><EFBFBD> 6D F0 A9 E5 95 96 DC 50 4B 41 0C 1C 5B 3D 34 5A
ԭMD5ֵ<EFBFBD><EFBFBD> 72 BF 0A 4F 13 6A E4 33 ED DD 46 93 C9 D3 CB 41
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>MD5ֵ<EFBFBD><EFBFBD> 38 96 A5 13 51 19 F9 EF B1 C9 49 62 A5 A8 18 B8
ԭMD5ֵ<EFBFBD><EFBFBD> 93 89 B3 BB 34 82 77 B5 83 07 1F 21 71 08 1F B9
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>MD5ֵ<EFBFBD><EFBFBD> 37 4F 56 51 82 DE F0 CE 8B 20 85 AF 42 5A 24 1D
ԭMD5ֵ<EFBFBD><EFBFBD> 9D 61 FC CA D3 33 80 83 FC B3 A3 FA 94 EA A2 29
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>MD5ֵ<EFBFBD><EFBFBD> A2 62 7F D6 50 68 E0 10 C5 8A 3B EE BB 4F 74 81
ԭMD5ֵ<EFBFBD><EFBFBD> 7F D4 5A 12 A4 FC C0 78 AF 6F F6 F4 8A E0 08 CD
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>MD5ֵ<EFBFBD><EFBFBD> 7F D4 5A 12 A4 FC C0 78 AF 6F F6 F4 8A E0 08 CD
ԭMD5ֵ<EFBFBD><EFBFBD> C2 9C 01 88 50 FD A9 E4 DD B9 AC 91 9E 26 B1 D2
ԭMD5ֵ<EFBFBD><EFBFBD> E1 66 DA 0C 64 38 51 E0 8A 85 9C D1 CD 81 A7 32
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>MD5ֵ<EFBFBD><EFBFBD> 66 29 7B AD 97 5A C2 9B 07 83 AE D8 54 E5 88 F7
Md5ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ԭMD5ֵ<EFBFBD><EFBFBD> 16 19 BD 49 C0 6C 8A B7 9B F3 EE 82 B6 34 71 78
ԭMD5ֵ<EFBFBD><EFBFBD> 16 19 BD 49 C0 6C 8A B7 9B F3 EE 82 B6 34 71 78
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>MD5ֵ<EFBFBD><EFBFBD> 4A 78 A7 57 30 EE 87 5E 79 C9 A4 77 D2 6D DC 2D
Md5ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MD5: 2B 61 0B 07 8D 07 81 B3 52 50 D8 84 63 E5 53 04
ԭMD5ֵ<EFBFBD><EFBFBD> 16 19 BD 49 C0 6C 8A B7 9B F3 EE 82 B6 34 71 78
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>MD5ֵ<EFBFBD><EFBFBD> 16 19 BD 49 C0 6C 8A B7 9B F3 EE 82 B6 34 71 78
Md5ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ԭMD5ֵ<EFBFBD><EFBFBD> BC 42 10 22 F8 53 75 84 9B 27 94 DD 79 5A A5 4D
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>MD5ֵ<EFBFBD><EFBFBD> BC 42 10 22 F8 53 75 84 9B 27 94 DD 79 5A A5 4D
Md5ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
-------------------------------------------------------------
<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
ԭMD5ֵ<EFBFBD><EFBFBD> 16 19 BD 49 C0 6C 8A B7 9B F3 EE 82 B6 34 71 78
<EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD>
ԭMD5ֵ<EFBFBD><EFBFBD> 16 19 BD 49 C0 6C 8A B7 9B F3 EE 82 B6 34 71 78
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>MD5ֵ<EFBFBD><EFBFBD> 16 19 BD 49 C0 6C 8A B7 9B F3 EE 82 B6 34 71 78
Md5ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ԭMD5ֵ<EFBFBD><EFBFBD> 16 19 BD 49 C0 6C 8A B7 9B F3 EE 82 B6 34 71 78
<EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
ԭMD5ֵ<EFBFBD><EFBFBD> 16 19 BD 49 C0 6C 8A B7 9B F3 EE 82 B6 34 71 78
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>MD5ֵ<EFBFBD><EFBFBD> 16 19 BD 49 C0 6C 8A B7 9B F3 EE 82 B6 34 71 78
Md5ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly xsi:schemaLocation="urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd" manifestVersion="1.0" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns="urn:schemas-microsoft-com:asm.v2" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xrml="urn:mpeg:mpeg21:2003:01-REL-R-NS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:co.v1="urn:schemas-microsoft-com:clickonce.v1" xmlns:co.v2="urn:schemas-microsoft-com:clickonce.v2">
<assemblyIdentity name="RCU.application" version="2.7.1.0" publicKeyToken="0000000000000000" language="neutral" processorArchitecture="msil" xmlns="urn:schemas-microsoft-com:asm.v1" />
<description asmv2:publisher="BY" asmv2:product="RCU透传工具" xmlns="urn:schemas-microsoft-com:asm.v1" />
<deployment install="true" mapFileExtensions="true" minimumRequiredVersion="2.6.0.1" co.v1:createDesktopShortcut="true">
<subscription>
<update>
<expiration maximumAge="0" unit="days" />
</update>
</subscription>
<deploymentProvider codebase="http://auth.blv-oa.com/Apps/RCU/RCU.application" />
</deployment>
<compatibleFrameworks xmlns="urn:schemas-microsoft-com:clickonce.v2">
<framework targetVersion="4.8" profile="Full" supportedRuntime="4.0.30319" />
</compatibleFrameworks>
<dependency>
<dependentAssembly dependencyType="install" codebase="RCU.exe.manifest" size="14015">
<assemblyIdentity name="RCU.exe" version="2.7.1.0" publicKeyToken="0000000000000000" language="neutral" processorArchitecture="msil" type="win32" />
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>ZfXT0OrBBJCjcnXTnam2mqD8FZlosX4MHIdelY1pjTM=</dsig:DigestValue>
</hash>
</dependentAssembly>
</dependency>
</asmv1:assembly>

Binary file not shown.

View File

@@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="RCU.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
<userSettings>
<RCU.My.MySettings>
<setting name="CBoLongIP" serializeAs="String">
<value>192.168.1.1</value>
</setting>
<setting name="NumRemotePort" serializeAs="String">
<value>1024</value>
</setting>
<setting name="NumLocalPort" serializeAs="String">
<value>5533</value>
</setting>
<setting name="CBoBaud" serializeAs="String">
<value>9600</value>
</setting>
<setting name="CBoMode" serializeAs="String">
<value>正常模式</value>
</setting>
<setting name="CboRFDevType" serializeAs="String">
<value>RS485透传模块</value>
</setting>
<setting name="CboCMD15Buad" serializeAs="String">
<value>9600</value>
</setting>
<setting name="rfcmd14Way" serializeAs="String">
<value>不控制</value>
</setting>
<setting name="CboRFCMD21ControlMode" serializeAs="String">
<value>向上渐变调光</value>
</setting>
<setting name="CboSerialBaud" serializeAs="String">
<value>9600</value>
</setting>
<setting name="CboSerialPort" serializeAs="String">
<value>COM1</value>
</setting>
<setting name="CurtainsCMD" serializeAs="String">
<value>27</value>
</setting>
<setting name="CurtainsData" serializeAs="String">
<value>0</value>
</setting>
</RCU.My.MySettings>
</userSettings>
</configuration>

View File

@@ -0,0 +1,253 @@
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly xsi:schemaLocation="urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd" manifestVersion="1.0" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns="urn:schemas-microsoft-com:asm.v2" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:co.v1="urn:schemas-microsoft-com:clickonce.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:co.v2="urn:schemas-microsoft-com:clickonce.v2">
<asmv1:assemblyIdentity name="RCU.exe" version="2.7.1.0" publicKeyToken="0000000000000000" language="neutral" processorArchitecture="msil" type="win32" />
<description asmv2:iconFile="favicon.ico" xmlns="urn:schemas-microsoft-com:asm.v1" />
<application />
<entryPoint>
<assemblyIdentity name="RCU" version="2.7.1.0" language="neutral" processorArchitecture="msil" />
<commandLine file="RCU.exe" parameters="" />
</entryPoint>
<trustInfo>
<security>
<applicationRequestMinimum>
<PermissionSet version="1" class="System.Security.NamedPermissionSet" Name="LocalIntranet" Description="Default rights given to applications on the local intranet" Unrestricted="true" ID="Custom" SameSite="site" />
<defaultAssemblyRequest permissionSetReference="Custom" />
</applicationRequestMinimum>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC 清单选项
如果想要更改 Windows 用户帐户控制级别,请使用
以下节点之一替换 requestedExecutionLevel 节点。n
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
指定 requestedExecutionLevel 元素将禁用文件和注册表虚拟化。
如果你的应用程序需要此虚拟化来实现向后兼容性,则删除此
元素。
-->
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentOS>
<osVersionInfo>
<os majorVersion="5" minorVersion="1" buildNumber="2600" servicePackMajor="0" />
</osVersionInfo>
</dependentOS>
</dependency>
<dependency>
<dependentAssembly dependencyType="preRequisite" allowDelayedBinding="true">
<assemblyIdentity name="Microsoft.Windows.CommonLanguageRuntime" version="4.0.30319.0" />
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="FlexCell.dll" size="1281536">
<assemblyIdentity name="FlexCell" version="4.4.0.0" publicKeyToken="6F86587EB70EE309" language="neutral" processorArchitecture="msil" />
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>uySnK+Qtq8GhfD3x+OwtKqeuEjL0hPOpaUyAcasImxE=</dsig:DigestValue>
</hash>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="K4os.Compression.LZ4.dll" size="40448">
<assemblyIdentity name="K4os.Compression.LZ4" version="1.1.11.0" publicKeyToken="2186FA9121EF231D" language="neutral" processorArchitecture="msil" />
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>maq/9W5iHAvB1tB4HMmccQATRI7ypJR6pwLMB8BJyH8=</dsig:DigestValue>
</hash>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="K4os.Compression.LZ4.Streams.dll" size="17408">
<assemblyIdentity name="K4os.Compression.LZ4.Streams" version="1.1.11.0" publicKeyToken="2186FA9121EF231D" language="neutral" processorArchitecture="msil" />
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>O4CfIrEIaaP3Qe45hq32uyVqLIsf3q6VewnGQwCVMTw=</dsig:DigestValue>
</hash>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="K4os.Hash.xxHash.dll" size="12288">
<assemblyIdentity name="K4os.Hash.xxHash" version="1.0.6.0" publicKeyToken="32CD54395057CEC3" language="neutral" processorArchitecture="msil" />
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>9aZLrrB07kV0FlfTs978VgzjsIDiYMg48gknnKiP+Cw=</dsig:DigestValue>
</hash>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="MySql.Data.dll" size="1734656">
<assemblyIdentity name="MySql.Data" version="8.0.22.0" publicKeyToken="C5687FC88969C44D" language="neutral" processorArchitecture="msil" />
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>HKU+pC+wbfrI65vLoVACcjvkdiILo4JZ2on9emmAlxE=</dsig:DigestValue>
</hash>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="RCU.exe" size="366080">
<assemblyIdentity name="RCU" version="2.7.1.0" language="neutral" processorArchitecture="msil" />
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>GWBvU81EPZVjUdWQiSXKbseGWgvdyQ6YkqlhQDoYuJM=</dsig:DigestValue>
</hash>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="System.Buffers.dll" size="20864">
<assemblyIdentity name="System.Buffers" version="4.0.3.0" publicKeyToken="CC7B13FFCD2DDD51" language="neutral" processorArchitecture="msil" />
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>QjIAAQp2hHY0UUc6T7IG36B0/IJJZ2Yh752aE0F9Nk0=</dsig:DigestValue>
</hash>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="System.Data.SQLite.dll" size="364544">
<assemblyIdentity name="System.Data.SQLite" version="1.0.112.1" publicKeyToken="DB937BC2D44FF139" language="neutral" processorArchitecture="msil" />
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>Ga0YrQoSj2kGZ8cjnbr4limr5Dprs2W6wpW3KozCYxg=</dsig:DigestValue>
</hash>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="System.Memory.dll" size="141184">
<assemblyIdentity name="System.Memory" version="4.0.1.1" publicKeyToken="CC7B13FFCD2DDD51" language="neutral" processorArchitecture="msil" />
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>jnYxjosGaSq/fasRadJ9FVV/fwo002r2Rj7/D+ISE8c=</dsig:DigestValue>
</hash>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="System.Numerics.Vectors.dll" size="115856">
<assemblyIdentity name="System.Numerics.Vectors" version="4.1.4.0" publicKeyToken="B03F5F7F11D50A3A" language="neutral" processorArchitecture="msil" />
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>HT74aYKB589zcdFVSv71hys5+Wwm2nciEKM9oEG6EYM=</dsig:DigestValue>
</hash>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="System.Runtime.CompilerServices.Unsafe.dll" size="23088">
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" version="4.0.4.1" publicKeyToken="B03F5F7F11D50A3A" language="neutral" processorArchitecture="msil" />
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>1bW+Yuu+rrL5Lu7vL6SNh7LbM9BBxgnzUH7DQ2QwXMU=</dsig:DigestValue>
</hash>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="Ubiety.Dns.Core.dll" size="55808">
<assemblyIdentity name="Ubiety.Dns.Core" version="2.2.1.0" publicKeyToken="C5687FC88969C44D" language="neutral" processorArchitecture="msil" />
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>AZnuMl92VNQ74m4O+fXzc+nN9LZP1xsfoplS4lGNs4k=</dsig:DigestValue>
</hash>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="Zstandard.Net.dll" size="14848">
<assemblyIdentity name="Zstandard.Net" version="1.1.7.0" publicKeyToken="C5687FC88969C44D" language="neutral" processorArchitecture="msil" />
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>sA/9afOty8HFRcsW9gn/0C+2jmZyxz1PouftB0gA+nQ=</dsig:DigestValue>
</hash>
</dependentAssembly>
</dependency>
<file name="favicon.ico" size="16958">
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>1A28bOlpq6MNdl+BDcknTymDozvj+G2eWpKIpTmNQ9o=</dsig:DigestValue>
</hash>
</file>
<file name="RCU.exe.config" size="2426">
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>xr/YCiJG3ixGWEuv45iEFQo5G6aVUDDkboA4mjdzMss=</dsig:DigestValue>
</hash>
</file>
<file name="RCUVersion.txt" size="1823">
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>SYpX/IoxZAkWcSYE14rq4nS4ru5nCZ4uC8X20DeoTPU=</dsig:DigestValue>
</hash>
</file>
<file name="软件进度.txt" size="147">
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>LLUslMLW0ihK0lAI6iEZKrKZzpmSaTQ4lyawjKm0bEw=</dsig:DigestValue>
</hash>
</file>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- 设计此应用程序与其一起工作且已针对此应用程序进行测试的
Windows 版本的列表。取消评论适当的元素,
Windows 将自动选择最兼容的环境。 -->
<!-- Windows Vista -->
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
<!-- Windows 7 -->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->
<!-- Windows 8 -->
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->
<!-- Windows 8.1 -->
<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->
<!-- Windows 10 -->
<!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />-->
</application>
</compatibility>
</asmv1:assembly>

Binary file not shown.

4652
RCU-10/RCU/bin/Debug/RCU.xml Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More