Browse Source

电源测试完成第1版

501776450 3 năm trước cách đây
mục cha
commit
a05d6d1733
100 tập tin đã thay đổi với 223226 bổ sung379 xóa
  1. BIN
      exe/AppLibs.pdb
  2. BIN
      exe/BouncyCastle.Crypto.dll
  3. BIN
      exe/DevExpress.XtraRichEdit.v18.1.dll
  4. BIN
      exe/VTOSRuntime.pdb
  5. 2 0
      exe/apps/DevicesApp/本地仪器.xml
  6. BIN
      exe/apps/PowerTestDemo/AppLibs.dll
  7. BIN
      exe/apps/PowerTestDemo/AppLibs.pdb
  8. BIN
      exe/apps/PowerTestDemo/DevComponents.DotNetBar.Design.dll
  9. BIN
      exe/apps/PowerTestDemo/DevComponents.DotNetBar.Layout.Design.dll
  10. BIN
      exe/apps/PowerTestDemo/DevComponents.DotNetBar.Layout.dll
  11. BIN
      exe/apps/PowerTestDemo/DevComponents.DotNetBar.SuperGrid.dll
  12. 25474 0
      exe/apps/PowerTestDemo/DevComponents.DotNetBar.SuperGrid.xml
  13. BIN
      exe/apps/PowerTestDemo/DevComponents.DotNetBar2.dll
  14. 81533 0
      exe/apps/PowerTestDemo/DevComponents.DotNetBar2.xml
  15. BIN
      exe/apps/PowerTestDemo/DevComponents.Instrumentation.dll
  16. 3228 0
      exe/apps/PowerTestDemo/DevComponents.Instrumentation.xml
  17. BIN
      exe/apps/PowerTestDemo/DevComponents.SuperGrid.Design.dll
  18. BIN
      exe/apps/PowerTestDemo/DevExpress.XtraRichEdit.v18.1.dll
  19. BIN
      exe/apps/PowerTestDemo/Microsoft.mshtml.dll
  20. BIN
      exe/apps/PowerTestDemo/PowerTestDemo.dll
  21. BIN
      exe/apps/PowerTestDemo/PowerTestDemo.pdb
  22. BIN
      exe/apps/PowerTestDemo/Spire.License.dll
  23. 107 0
      exe/apps/PowerTestDemo/Spire.License.xml
  24. BIN
      exe/apps/PowerTestDemo/Spire.Pdf.dll
  25. 43022 0
      exe/apps/PowerTestDemo/Spire.Pdf.xml
  26. BIN
      exe/apps/PowerTestDemo/Spire.XLS.dll
  27. 17577 0
      exe/apps/PowerTestDemo/Spire.XLS.xml
  28. BIN
      exe/apps/PowerTestDemo/TpsAppDemo.dll
  29. BIN
      exe/apps/PowerTestDemo/TpsAppDemo.pdb
  30. 8 0
      exe/apps/PowerTestDemo/bundle.config
  31. BIN
      exe/apps/PowerTestDemo/config/测试#常温测试#035变频模块.xlsx
  32. BIN
      exe/apps/PowerTestDemo/config/测试#常温测试#DC16MK.xlsx
  33. BIN
      exe/apps/PowerTestDemo/test.png
  34. 2969 0
      exe/logs/202105.log
  35. 440 0
      exe/logs/202106.log
  36. 20 299
      exe/logs/202107.log
  37. 2949 80
      exe/logs/202108.log
  38. BIN
      tps/TpsAppDemo/.vs/PowerTestDemo/v16/.suo
  39. 35 0
      tps/TpsAppDemo/Bundle.cs
  40. 906 0
      tps/TpsAppDemo/FrmMain.Designer.cs
  41. 473 0
      tps/TpsAppDemo/FrmMain.cs
  42. 123 0
      tps/TpsAppDemo/FrmMain.resx
  43. 786 0
      tps/TpsAppDemo/MainTps.cs
  44. 162 0
      tps/TpsAppDemo/PowerTestDemo.csproj
  45. 10 0
      tps/TpsAppDemo/PowerTestDemo.csproj.user
  46. 25 0
      tps/TpsAppDemo/PowerTestDemo.sln
  47. 36 0
      tps/TpsAppDemo/Properties/AssemblyInfo.cs
  48. 63 0
      tps/TpsAppDemo/Properties/Resources.Designer.cs
  49. 117 0
      tps/TpsAppDemo/Properties/Resources.resx
  50. 26 0
      tps/TpsAppDemo/Properties/Settings.Designer.cs
  51. 7 0
      tps/TpsAppDemo/Properties/Settings.settings
  52. 8 0
      tps/TpsAppDemo/bundle.config
  53. 14 0
      tps/TpsAppDemo/com/BaseModelStruct.cs
  54. 37 0
      tps/TpsAppDemo/com/DeviceNode.cs
  55. 33 0
      tps/TpsAppDemo/com/FileNode.cs
  56. 15 0
      tps/TpsAppDemo/com/MsgType.cs
  57. 14 0
      tps/TpsAppDemo/com/TestMessage.cs
  58. 64 0
      tps/TpsAppDemo/com/TestNode.cs
  59. 351 0
      tps/TpsAppDemo/com/TestParameters.cs
  60. BIN
      tps/TpsAppDemo/config/测试#常温测试#035变频模块.xlsx
  61. BIN
      tps/TpsAppDemo/config/测试#常温测试#DC16MK.xlsx
  62. 70 0
      tps/TpsAppDemo/models/BaseModel.cs
  63. 70 0
      tps/TpsAppDemo/models/InputCurrent.cs
  64. 68 0
      tps/TpsAppDemo/models/InputRipple.cs
  65. 68 0
      tps/TpsAppDemo/models/InputSurge.cs
  66. 70 0
      tps/TpsAppDemo/models/InputVoltage.cs
  67. 4 0
      tps/TpsAppDemo/obj/Debug/.NETFramework,Version=v4.5.2.AssemblyAttributes.cs
  68. BIN
      tps/TpsAppDemo/obj/Debug/DesignTimeResolveAssemblyReferences.cache
  69. BIN
      tps/TpsAppDemo/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
  70. BIN
      tps/TpsAppDemo/obj/Debug/PowerTestDemo.FrmMain.resources
  71. BIN
      tps/TpsAppDemo/obj/Debug/PowerTestDemo.Properties.Resources.resources
  72. BIN
      tps/TpsAppDemo/obj/Debug/PowerTestDemo.csproj.AssemblyReference.cache
  73. 0 0
      tps/TpsAppDemo/obj/Debug/PowerTestDemo.csproj.CopyComplete
  74. 1 0
      tps/TpsAppDemo/obj/Debug/PowerTestDemo.csproj.CoreCompileInputs.cache
  75. 21 0
      tps/TpsAppDemo/obj/Debug/PowerTestDemo.csproj.FileListAbsolute.txt
  76. BIN
      tps/TpsAppDemo/obj/Debug/PowerTestDemo.csproj.GenerateResource.cache
  77. BIN
      tps/TpsAppDemo/obj/Debug/PowerTestDemo.dll
  78. BIN
      tps/TpsAppDemo/obj/Debug/PowerTestDemo.pdb
  79. BIN
      tps/TpsAppDemo/obj/Debug/PowerTestDemo.views.FrmDevice.resources
  80. BIN
      tps/TpsAppDemo/obj/Debug/PowerTestDemo.views.FrmMsg.resources
  81. BIN
      tps/TpsAppDemo/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll
  82. BIN
      tps/TpsAppDemo/obj/Debug/TpsAppDemo.FrmMain.resources
  83. BIN
      tps/TpsAppDemo/obj/Debug/TpsAppDemo.Properties.Resources.resources
  84. BIN
      tps/TpsAppDemo/obj/Debug/TpsAppDemo.csproj.AssemblyReference.cache
  85. 0 0
      tps/TpsAppDemo/obj/Debug/TpsAppDemo.csproj.CopyComplete
  86. 1 0
      tps/TpsAppDemo/obj/Debug/TpsAppDemo.csproj.CoreCompileInputs.cache
  87. 14 0
      tps/TpsAppDemo/obj/Debug/TpsAppDemo.csproj.FileListAbsolute.txt
  88. BIN
      tps/TpsAppDemo/obj/Debug/TpsAppDemo.csproj.GenerateResource.cache
  89. BIN
      tps/TpsAppDemo/obj/Debug/TpsAppDemo.dll
  90. BIN
      tps/TpsAppDemo/obj/Debug/TpsAppDemo.pdb
  91. BIN
      tps/TpsAppDemo/obj/Debug/TpsAppDemo.views.FrmDevice.resources
  92. BIN
      tps/TpsAppDemo/obj/Debug/TpsAppDemo.views.FrmMsg.resources
  93. 4 0
      tps/TpsAppDemo/packages.config
  94. BIN
      tps/TpsAppDemo/packages/FreeSpire.XLS.10.10.0/.signature.p7s
  95. BIN
      tps/TpsAppDemo/packages/FreeSpire.XLS.10.10.0/FreeSpire.XLS.10.10.0.nupkg
  96. BIN
      tps/TpsAppDemo/packages/FreeSpire.XLS.10.10.0/lib/MonoAndroid/Spire.License.dll
  97. 107 0
      tps/TpsAppDemo/packages/FreeSpire.XLS.10.10.0/lib/MonoAndroid/Spire.License.xml
  98. BIN
      tps/TpsAppDemo/packages/FreeSpire.XLS.10.10.0/lib/MonoAndroid/Spire.Pdf.dll
  99. 42094 0
      tps/TpsAppDemo/packages/FreeSpire.XLS.10.10.0/lib/MonoAndroid/Spire.Pdf.xml
  100. 0 0
      tps/TpsAppDemo/packages/FreeSpire.XLS.10.10.0/lib/MonoAndroid/Spire.XLS.dll

BIN
exe/AppLibs.pdb


BIN
exe/BouncyCastle.Crypto.dll


BIN
exe/DevExpress.XtraRichEdit.v18.1.dll


BIN
exe/VTOSRuntime.pdb


+ 2 - 0
exe/apps/DevicesApp/本地仪器.xml

@@ -12,5 +12,7 @@
     <!--<DeviceInfo DeviceType="万用表" DeviceModel="KeysightM9182A" DeviceHandle="PXI19::10::INSTR" ClassType="DevicesApp.Devices.Multimeter" IsVirtual="false"/>-->
     <DeviceInfo DeviceType="信号源" DeviceModel="E4221B" DeviceHandle="GPIB0::34::INSTR" ClassType="DevicesApp.Devices.Visa" IsVirtual="true"/>
     <DeviceInfo DeviceType="频谱仪" DeviceModel="E4440A" DeviceHandle="GPIB0::29::INSTR" ClassType="DevicesApp.Devices.Visa" IsVirtual="true"/> 
+    <DeviceInfo DeviceType="示波器" DeviceModel="DSO-X 3024A" DeviceHandle="GPIB0::12::INSTR" ClassType="DevicesApp.Devices.Visa" IsVirtual="true"/>
+    <DeviceInfo DeviceType="电子负载" DeviceModel="IT8811" DeviceHandle="GPIB0::11::INSTR" ClassType="DevicesApp.Devices.Visa" IsVirtual="true"/> 
   </DeviceInfos>
 </LocalDevices>

BIN
exe/apps/PowerTestDemo/AppLibs.dll


BIN
exe/apps/PowerTestDemo/AppLibs.pdb


BIN
exe/apps/PowerTestDemo/DevComponents.DotNetBar.Design.dll


BIN
exe/apps/PowerTestDemo/DevComponents.DotNetBar.Layout.Design.dll


BIN
exe/apps/PowerTestDemo/DevComponents.DotNetBar.Layout.dll


BIN
exe/apps/PowerTestDemo/DevComponents.DotNetBar.SuperGrid.dll


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 25474 - 0
exe/apps/PowerTestDemo/DevComponents.DotNetBar.SuperGrid.xml


BIN
exe/apps/PowerTestDemo/DevComponents.DotNetBar2.dll


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 81533 - 0
exe/apps/PowerTestDemo/DevComponents.DotNetBar2.xml


BIN
exe/apps/PowerTestDemo/DevComponents.Instrumentation.dll


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 3228 - 0
exe/apps/PowerTestDemo/DevComponents.Instrumentation.xml


BIN
exe/apps/PowerTestDemo/DevComponents.SuperGrid.Design.dll


BIN
exe/apps/PowerTestDemo/DevExpress.XtraRichEdit.v18.1.dll


BIN
exe/apps/PowerTestDemo/Microsoft.mshtml.dll


BIN
exe/apps/PowerTestDemo/PowerTestDemo.dll


BIN
exe/apps/PowerTestDemo/PowerTestDemo.pdb


BIN
exe/apps/PowerTestDemo/Spire.License.dll


+ 107 - 0
exe/apps/PowerTestDemo/Spire.License.xml

@@ -0,0 +1,107 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>Spire.License</name>
+    </assembly>
+    <members>
+        <member name="P:Spire.License.BaseLicenseInfo.IsBindingSuccess">
+            <summary>
+            Gets a value indicating whether license is binding success.
+            </summary>
+            <value><c>true</c> if license is binding success; otherwise, <c>false</c>.</value>
+        </member>
+        <member name="P:Spire.License.LicenseInfo.OriginalVersion">
+            <summary>
+            If current license object is converted from a previouse version license object,
+            this field will be set to the version of the original license object.
+            Otherwise it's null.
+            </summary>
+        </member>
+        <member name="P:Spire.License.LicenseInfo.IsUpdateRightExpired">
+            <summary>
+            Indicates whether the lincese puchase date is during one year.
+            </summary>
+        </member>
+        <member name="M:Spire.License.LicenseProvider.SetLicenseFileFullPath(System.String)">
+            <summary>
+            Provides a license by a license file path, which will be used for loading license.
+            </summary>
+            <param name="licenseFileFullPath">License file full path.</param>
+        </member>
+        <member name="M:Spire.License.LicenseProvider.SetLicenseFileName(System.String)">
+            <summary>
+            Sets the license file name, which will be used for loading license.
+            </summary>
+            <param name="licenseFileName">License file name.</param>
+        </member>
+        <member name="M:Spire.License.LicenseProvider.GetLicenseFileName">
+            <summary>
+            Gets the current license file name.
+            </summary>
+            <returns>The license file name, the default license file name is [license.elic.xml].</returns>
+        </member>
+        <member name="M:Spire.License.LicenseProvider.SetLicenseFile(System.IO.FileInfo)">
+            <summary>
+            Provides a license by a license file object, which will be used for loading license.
+            </summary>
+            <param name="licenseFile">License file object.</param>
+        </member>
+        <member name="M:Spire.License.LicenseProvider.SetLicenseFileStream(System.IO.Stream)">
+            <summary>
+            Provides a license by a license stream, which will be used for loading license.
+            </summary>
+            <param name="licenseFileStream">License data stream.</param>
+        </member>
+        <member name="M:Spire.License.LicenseProvider.SetLicenseKey(System.String)">
+            <summary>
+            Provides a license by a license key, which will be used for loading license.
+            </summary>
+            <param name="key">The value of the Key attribute of the element License of you license xml file.</param>
+        </member>
+        <member name="M:Spire.License.LicenseProvider.SetLicenseKey(System.String,System.Boolean)">
+            <summary>    
+            Provides a license by a license key, which will be used for loading license.
+            </summary>
+            <param name="key">The value of the Key attribute of the element License of you license xml file.</param> 
+            <param name="bIsSerialization">The serialization to verify license key.</param>
+        </member>
+        <member name="M:Spire.License.LicenseProvider.ClearLicense">
+            <summary>
+            Clear all cached license.
+            </summary>
+        </member>
+        <member name="M:Spire.License.LicenseProvider.LoadLicense">
+            <summary>
+            Load the license provided by current setting to the license cache.
+            </summary>
+        </member>
+        <member name="M:Spire.License.LicenseProvider.LoadLicense(System.Type)">
+            <summary>
+            Load the license provided by current setting to the license cache.
+            </summary>
+            <param name="type">Runtime product type</param>
+        </member>
+        <member name="M:Spire.License.LicenseProvider.GetLicense(System.ComponentModel.LicenseContext,System.Type,System.Object,System.Boolean)">
+            <param name="context"></param>
+            <param name="type"></param>
+            <param name="instance"></param>
+            <param name="allowExceptions"></param>
+            <returns></returns>
+        </member>
+        <member name="P:Spire.License.V1_0.LicenseInfo.IsUpdateRightExpired">
+            <summary>
+            Indicates whether the lincese puchase date is during one year.
+            </summary>
+        </member>
+        <member name="P:Spire.License.V1_1.LicenseInfo.IsUpdateRightExpired">
+            <summary>
+            Indicates whether the lincese puchase date is during one year.
+            </summary>
+        </member>
+        <member name="P:Spire.License.V1_2.LicenseInfo.IsUpdateRightExpired">
+            <summary>
+            Indicates whether the lincese puchase date is during one year.
+            </summary>
+        </member>
+    </members>
+</doc>

BIN
exe/apps/PowerTestDemo/Spire.Pdf.dll


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 43022 - 0
exe/apps/PowerTestDemo/Spire.Pdf.xml


BIN
exe/apps/PowerTestDemo/Spire.XLS.dll


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 17577 - 0
exe/apps/PowerTestDemo/Spire.XLS.xml


BIN
exe/apps/PowerTestDemo/TpsAppDemo.dll


BIN
exe/apps/PowerTestDemo/TpsAppDemo.pdb


+ 8 - 0
exe/apps/PowerTestDemo/bundle.config

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+  <!--DevHostApp.dll 与bundle.config在同一个目录下-->
+  <Activator BundleName="测试程序1" Assembly="PowerTestDemo.dll" Type="PowerTestDemo.Bundle"/>
+  <Extension Point="MainPage">
+    <Node Name="电源测试程序" Page="测试项目" Group="测试项目" Text="电源测试" Type="PowerTestDemo.FrmMain" Image="test.png" IsLazyLoad="true" Order="2" />
+  </Extension>
+</configuration>

BIN
exe/apps/PowerTestDemo/config/测试#常温测试#035变频模块.xlsx


BIN
exe/apps/PowerTestDemo/config/测试#常温测试#DC16MK.xlsx


BIN
exe/apps/PowerTestDemo/test.png


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 2969 - 0
exe/logs/202105.log


+ 440 - 0
exe/logs/202106.log

@@ -0,0 +1,440 @@
+2021-06-10 18:34:23.6834 Info:                [source]:runtime,[msg]:Runtime 启动 
+2021-06-10 18:34:23.7064 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
+2021-06-10 18:34:23.8084 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
+2021-06-10 18:34:23.8204 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\TpsAppDemo\bundle.config" 
+2021-06-10 18:34:23.8314 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
+2021-06-10 18:34:23.8314 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
+2021-06-10 18:34:23.8314 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
+2021-06-10 18:34:23.8314 Info:                [source]:runtime,[msg]:插件"测试程序例子"启动成功 
+2021-06-10 18:34:23.8314 Info:                [source]:runtime,[msg]:Runtime 启动完成 
+2021-06-10 18:34:26.1530 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
+   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
+2021-06-10 18:34:26.1550 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
+2021-06-10 18:34:26.1550 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
+2021-06-10 18:38:13.6225 Info:                [source]:runtime,[msg]:AppHost 停止插件 
+2021-06-10 18:38:13.6225 Info:                [source]:runtime,[msg]:插件"数据管理"停止成功 
+2021-06-10 18:38:13.6225 Info:                [source]:runtime,[msg]:插件"资源管理器"停止成功 
+2021-06-10 18:38:13.6225 Info:                [source]:runtime,[msg]:插件"测试程序例子"停止成功 
+2021-06-10 18:38:13.6225 Info:                [source]:runtime,[msg]:Runtime 关闭 
+2021-06-10 18:39:08.1141 Info:                [source]:runtime,[msg]:Runtime 启动 
+2021-06-10 18:39:08.1481 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
+2021-06-10 18:39:08.2952 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
+2021-06-10 18:39:08.2952 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\TpsAppDemo\bundle.config" 
+2021-06-10 18:39:08.3202 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
+2021-06-10 18:39:08.3202 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
+2021-06-10 18:39:08.3202 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
+2021-06-10 18:39:08.3202 Info:                [source]:runtime,[msg]:插件"测试程序例子"启动成功 
+2021-06-10 18:39:08.3262 Info:                [source]:runtime,[msg]:Runtime 启动完成 
+2021-06-10 18:39:10.9656 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
+   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
+2021-06-10 18:39:10.9686 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
+2021-06-10 18:39:10.9686 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
+2021-06-10 18:40:28.6229 Info:                [source]:runtime,[msg]:AppHost 停止插件 
+2021-06-10 18:40:28.6229 Info:                [source]:runtime,[msg]:插件"数据管理"停止成功 
+2021-06-10 18:40:28.6229 Info:                [source]:runtime,[msg]:插件"资源管理器"停止成功 
+2021-06-10 18:40:28.6229 Info:                [source]:runtime,[msg]:插件"测试程序例子"停止成功 
+2021-06-10 18:40:28.6229 Info:                [source]:runtime,[msg]:Runtime 关闭 
+2021-06-10 21:16:07.3386 Info:                [source]:runtime,[msg]:Runtime 启动 
+2021-06-10 21:16:07.3526 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
+2021-06-10 21:16:07.4316 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
+2021-06-10 21:16:07.4416 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\TpsAppDemo\bundle.config" 
+2021-06-10 21:16:07.4767 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
+2021-06-10 21:16:07.4767 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
+2021-06-10 21:16:07.4767 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
+2021-06-10 21:16:07.4767 Info:                [source]:runtime,[msg]:插件"测试程序例子"启动成功 
+2021-06-10 21:16:07.4767 Info:                [source]:runtime,[msg]:Runtime 启动完成 
+2021-06-10 21:16:09.0999 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
+   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
+2021-06-10 21:16:09.0999 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
+2021-06-10 21:16:09.0999 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
+2021-06-10 21:16:13.7109 Error:                [source]:类:FrmMain,方法:BtnLoadTpsConfig_Click,[msg]:已添加了具有相同键的项。   在 System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
+   在 System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
+   在 System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
+   在 TpsAppDemo.com.TestParameters.Copy() 位置 D:\code\LabStudio\tps\TpsAppDemo\com\TestParameters.cs:行号 185
+   在 TpsAppDemo.MainTps.readTestNodes(Workbook workbook, Worksheet sheet, Int32 rowIndex) 位置 D:\code\LabStudio\tps\TpsAppDemo\MainTps.cs:行号 336
+   在 TpsAppDemo.MainTps.LoadConfigFile(String filePath) 位置 D:\code\LabStudio\tps\TpsAppDemo\MainTps.cs:行号 133
+   在 TpsAppDemo.FrmMain.BtnLoadTpsConfig_Click(Object sender, EventArgs e) 位置 D:\code\LabStudio\tps\TpsAppDemo\FrmMain.cs:行号 83 
+2021-06-10 21:17:40.0519 Info:                [source]:runtime,[msg]:Runtime 启动 
+2021-06-10 21:17:40.0669 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
+2021-06-10 21:17:40.1519 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
+2021-06-10 21:17:40.1619 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\TpsAppDemo\bundle.config" 
+2021-06-10 21:17:40.1749 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
+2021-06-10 21:17:40.1749 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
+2021-06-10 21:17:40.1749 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
+2021-06-10 21:17:40.1749 Info:                [source]:runtime,[msg]:插件"测试程序例子"启动成功 
+2021-06-10 21:17:40.1749 Info:                [source]:runtime,[msg]:Runtime 启动完成 
+2021-06-10 21:17:41.7056 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
+   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
+2021-06-10 21:17:41.7056 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
+2021-06-10 21:17:41.7056 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
+2021-06-10 21:17:48.8267 Error:                [source]:类:FrmMain,方法:BtnLoadTpsConfig_Click,[msg]:已添加了具有相同键的项。   在 System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
+   在 System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
+   在 System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
+   在 TpsAppDemo.com.TestParameters.Copy() 位置 D:\code\LabStudio\tps\TpsAppDemo\com\TestParameters.cs:行号 185
+   在 TpsAppDemo.MainTps.readTestNodes(Workbook workbook, Worksheet sheet, Int32 rowIndex) 位置 D:\code\LabStudio\tps\TpsAppDemo\MainTps.cs:行号 336
+   在 TpsAppDemo.MainTps.LoadConfigFile(String filePath) 位置 D:\code\LabStudio\tps\TpsAppDemo\MainTps.cs:行号 133
+   在 TpsAppDemo.FrmMain.BtnLoadTpsConfig_Click(Object sender, EventArgs e) 位置 D:\code\LabStudio\tps\TpsAppDemo\FrmMain.cs:行号 83 
+2021-06-10 21:20:38.2900 Info:                [source]:runtime,[msg]:Runtime 启动 
+2021-06-10 21:20:38.3040 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
+2021-06-10 21:20:38.3810 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
+2021-06-10 21:20:38.3940 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\TpsAppDemo\bundle.config" 
+2021-06-10 21:20:38.4150 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
+2021-06-10 21:20:38.4150 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
+2021-06-10 21:20:38.4150 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
+2021-06-10 21:20:38.4150 Info:                [source]:runtime,[msg]:插件"测试程序例子"启动成功 
+2021-06-10 21:20:38.4150 Info:                [source]:runtime,[msg]:Runtime 启动完成 
+2021-06-10 21:20:39.9659 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
+   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
+2021-06-10 21:20:39.9679 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
+2021-06-10 21:20:39.9679 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
+2021-06-10 21:21:22.6048 Error:                [source]:类:FrmMain,方法:BtnLoadTpsConfig_Click,[msg]:已添加了具有相同键的项。   在 System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
+   在 System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
+   在 System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
+   在 TpsAppDemo.com.TestParameters.Copy() 位置 D:\code\LabStudio\tps\TpsAppDemo\com\TestParameters.cs:行号 185
+   在 TpsAppDemo.MainTps.readTestNodes(Workbook workbook, Worksheet sheet, Int32 rowIndex) 位置 D:\code\LabStudio\tps\TpsAppDemo\MainTps.cs:行号 336
+   在 TpsAppDemo.MainTps.LoadConfigFile(String filePath) 位置 D:\code\LabStudio\tps\TpsAppDemo\MainTps.cs:行号 133
+   在 TpsAppDemo.FrmMain.BtnLoadTpsConfig_Click(Object sender, EventArgs e) 位置 D:\code\LabStudio\tps\TpsAppDemo\FrmMain.cs:行号 83 
+2021-06-10 21:22:06.0120 Info:                [source]:runtime,[msg]:Runtime 启动 
+2021-06-10 21:22:06.0260 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
+2021-06-10 21:22:06.1064 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
+2021-06-10 21:22:06.1164 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\TpsAppDemo\bundle.config" 
+2021-06-10 21:22:06.1302 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
+2021-06-10 21:22:06.1302 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
+2021-06-10 21:22:06.1302 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
+2021-06-10 21:22:06.1302 Info:                [source]:runtime,[msg]:插件"测试程序例子"启动成功 
+2021-06-10 21:22:06.1302 Info:                [source]:runtime,[msg]:Runtime 启动完成 
+2021-06-10 21:22:07.6724 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
+   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
+2021-06-10 21:22:07.6724 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
+2021-06-10 21:22:07.6724 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
+2021-06-10 21:24:19.2573 Info:                [source]:runtime,[msg]:Runtime 启动 
+2021-06-10 21:24:19.2713 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
+2021-06-10 21:24:19.3493 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
+2021-06-10 21:24:19.3593 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\TpsAppDemo\bundle.config" 
+2021-06-10 21:24:19.3783 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
+2021-06-10 21:24:19.3783 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
+2021-06-10 21:24:19.3783 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
+2021-06-10 21:24:19.3783 Info:                [source]:runtime,[msg]:插件"测试程序例子"启动成功 
+2021-06-10 21:24:19.3783 Info:                [source]:runtime,[msg]:Runtime 启动完成 
+2021-06-10 21:24:20.9397 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
+   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
+2021-06-10 21:24:20.9397 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
+2021-06-10 21:24:20.9397 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
+2021-06-10 21:24:35.7357 Error:                [source]:类:FrmMain,方法:BtnLoadTpsConfig_Click,[msg]:已添加了具有相同键的项。   在 System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
+   在 System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
+   在 System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
+   在 TpsAppDemo.com.TestParameters.Copy() 位置 D:\code\LabStudio\tps\TpsAppDemo\com\TestParameters.cs:行号 185
+   在 TpsAppDemo.MainTps.readTestNodes(Workbook workbook, Worksheet sheet, Int32 rowIndex) 位置 D:\code\LabStudio\tps\TpsAppDemo\MainTps.cs:行号 336
+   在 TpsAppDemo.MainTps.LoadConfigFile(String filePath) 位置 D:\code\LabStudio\tps\TpsAppDemo\MainTps.cs:行号 133
+   在 TpsAppDemo.FrmMain.BtnLoadTpsConfig_Click(Object sender, EventArgs e) 位置 D:\code\LabStudio\tps\TpsAppDemo\FrmMain.cs:行号 83 
+2021-06-10 21:26:23.7156 Info:                [source]:runtime,[msg]:Runtime 启动 
+2021-06-10 21:26:23.7296 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
+2021-06-10 21:26:23.8086 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
+2021-06-10 21:26:23.8187 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\TpsAppDemo\bundle.config" 
+2021-06-10 21:26:23.8337 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
+2021-06-10 21:26:23.8337 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
+2021-06-10 21:26:23.8337 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
+2021-06-10 21:26:23.8337 Info:                [source]:runtime,[msg]:插件"测试程序例子"启动成功 
+2021-06-10 21:26:23.8337 Info:                [source]:runtime,[msg]:Runtime 启动完成 
+2021-06-10 21:26:25.3530 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
+   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
+2021-06-10 21:26:25.3530 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
+2021-06-10 21:26:25.3530 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
+2021-06-10 21:27:08.6664 Error:                [source]:类:FrmMain,方法:BtnLoadTpsConfig_Click,[msg]:已添加了具有相同键的项。   在 System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
+   在 System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
+   在 System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
+   在 TpsAppDemo.com.TestParameters.Copy() 位置 D:\code\LabStudio\tps\TpsAppDemo\com\TestParameters.cs:行号 185
+   在 TpsAppDemo.MainTps.readTestNodes(Workbook workbook, Worksheet sheet, Int32 rowIndex) 位置 D:\code\LabStudio\tps\TpsAppDemo\MainTps.cs:行号 336
+   在 TpsAppDemo.MainTps.LoadConfigFile(String filePath) 位置 D:\code\LabStudio\tps\TpsAppDemo\MainTps.cs:行号 133
+   在 TpsAppDemo.FrmMain.BtnLoadTpsConfig_Click(Object sender, EventArgs e) 位置 D:\code\LabStudio\tps\TpsAppDemo\FrmMain.cs:行号 83 
+2021-06-10 21:28:52.8557 Info:                [source]:runtime,[msg]:Runtime 启动 
+2021-06-10 21:28:52.8697 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
+2021-06-10 21:28:52.9497 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
+2021-06-10 21:28:52.9607 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\TpsAppDemo\bundle.config" 
+2021-06-10 21:28:52.9827 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
+2021-06-10 21:28:52.9827 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
+2021-06-10 21:28:52.9827 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
+2021-06-10 21:28:52.9827 Info:                [source]:runtime,[msg]:插件"测试程序例子"启动成功 
+2021-06-10 21:28:52.9827 Info:                [source]:runtime,[msg]:Runtime 启动完成 
+2021-06-10 21:28:54.5122 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
+   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
+2021-06-10 21:28:54.5142 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
+2021-06-10 21:28:54.5142 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
+2021-06-10 21:38:44.3304 Info:                [source]:runtime,[msg]:Runtime 启动 
+2021-06-10 21:38:44.3444 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
+2021-06-10 21:38:44.4254 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
+2021-06-10 21:38:44.4394 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\TpsAppDemo\bundle.config" 
+2021-06-10 21:38:44.4574 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
+2021-06-10 21:38:44.4574 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
+2021-06-10 21:38:44.4574 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
+2021-06-10 21:38:44.4574 Info:                [source]:runtime,[msg]:插件"测试程序例子"启动成功 
+2021-06-10 21:38:44.4574 Info:                [source]:runtime,[msg]:Runtime 启动完成 
+2021-06-10 21:38:46.0049 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
+   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
+2021-06-10 21:38:46.0049 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
+2021-06-10 21:38:46.0049 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
+2021-06-10 21:40:26.5833 Info:                [source]:runtime,[msg]:Runtime 启动 
+2021-06-10 21:40:26.5963 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
+2021-06-10 21:40:26.6793 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
+2021-06-10 21:40:26.6903 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\TpsAppDemo\bundle.config" 
+2021-06-10 21:40:26.7023 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
+2021-06-10 21:40:26.7023 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
+2021-06-10 21:40:26.7023 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
+2021-06-10 21:40:26.7023 Info:                [source]:runtime,[msg]:插件"测试程序例子"启动成功 
+2021-06-10 21:40:26.7023 Info:                [source]:runtime,[msg]:Runtime 启动完成 
+2021-06-10 21:40:28.2737 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
+   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
+2021-06-10 21:40:28.2737 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
+2021-06-10 21:40:28.2737 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
+2021-06-10 21:43:42.9909 Info:                [source]:runtime,[msg]:Runtime 启动 
+2021-06-10 21:43:43.0059 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
+2021-06-10 21:43:43.0845 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
+2021-06-10 21:43:43.0955 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\TpsAppDemo\bundle.config" 
+2021-06-10 21:43:43.0955 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
+2021-06-10 21:43:43.1085 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
+2021-06-10 21:43:43.1085 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
+2021-06-10 21:43:43.1085 Info:                [source]:runtime,[msg]:插件"测试程序例子"启动成功 
+2021-06-10 21:43:43.1085 Info:                [source]:runtime,[msg]:Runtime 启动完成 
+2021-06-10 21:43:44.6639 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
+   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
+2021-06-10 21:43:44.6639 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
+2021-06-10 21:43:44.6639 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
+2021-06-10 21:44:26.9924 Info:                [source]:runtime,[msg]:Runtime 启动 
+2021-06-10 21:44:27.0064 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
+2021-06-10 21:44:27.0943 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
+2021-06-10 21:44:27.0943 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\TpsAppDemo\bundle.config" 
+2021-06-10 21:44:27.1143 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
+2021-06-10 21:44:27.1143 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
+2021-06-10 21:44:27.1143 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
+2021-06-10 21:44:27.1143 Info:                [source]:runtime,[msg]:插件"测试程序例子"启动成功 
+2021-06-10 21:44:27.1143 Info:                [source]:runtime,[msg]:Runtime 启动完成 
+2021-06-10 21:44:28.6010 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
+   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
+2021-06-10 21:44:28.6010 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
+2021-06-10 21:44:28.6010 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
+2021-06-10 21:45:39.6526 Info:                [source]:runtime,[msg]:AppHost 停止插件 
+2021-06-10 21:45:39.6526 Info:                [source]:runtime,[msg]:插件"数据管理"停止成功 
+2021-06-10 21:45:39.6526 Info:                [source]:runtime,[msg]:插件"资源管理器"停止成功 
+2021-06-10 21:45:39.6526 Info:                [source]:runtime,[msg]:插件"测试程序例子"停止成功 
+2021-06-10 21:45:39.6526 Info:                [source]:runtime,[msg]:Runtime 关闭 
+2021-06-10 21:46:04.6515 Info:                [source]:runtime,[msg]:Runtime 启动 
+2021-06-10 21:46:04.6665 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
+2021-06-10 21:46:04.7505 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
+2021-06-10 21:46:04.7765 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\TpsAppDemo\bundle.config" 
+2021-06-10 21:46:04.7935 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
+2021-06-10 21:46:04.7965 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
+2021-06-10 21:46:04.7965 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
+2021-06-10 21:46:04.7965 Info:                [source]:runtime,[msg]:插件"测试程序例子"启动成功 
+2021-06-10 21:46:04.7965 Info:                [source]:runtime,[msg]:Runtime 启动完成 
+2021-06-10 21:46:06.2495 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
+   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
+2021-06-10 21:46:06.2495 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
+2021-06-10 21:46:06.2495 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
+2021-06-10 21:46:38.1751 Info:                [source]:runtime,[msg]:AppHost 停止插件 
+2021-06-10 21:46:38.1751 Info:                [source]:runtime,[msg]:插件"数据管理"停止成功 
+2021-06-10 21:46:38.1751 Info:                [source]:runtime,[msg]:插件"资源管理器"停止成功 
+2021-06-10 21:46:38.1751 Info:                [source]:runtime,[msg]:插件"测试程序例子"停止成功 
+2021-06-10 21:46:38.1751 Info:                [source]:runtime,[msg]:Runtime 关闭 
+2021-06-11 09:52:39.0181 Info:                [source]:runtime,[msg]:Runtime 启动 
+2021-06-11 09:52:39.0331 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
+2021-06-11 09:52:39.1211 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
+2021-06-11 09:52:39.1331 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\TpsAppDemo\bundle.config" 
+2021-06-11 09:52:39.1802 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
+2021-06-11 09:52:39.1852 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
+2021-06-11 09:52:39.1852 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
+2021-06-11 09:52:39.1852 Info:                [source]:runtime,[msg]:插件"测试程序例子"启动成功 
+2021-06-11 09:52:39.1852 Info:                [source]:runtime,[msg]:Runtime 启动完成 
+2021-06-11 09:52:41.3397 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
+   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
+2021-06-11 09:52:41.3397 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
+2021-06-11 09:52:41.3417 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
+2021-06-11 09:59:06.4811 Info:                [source]:runtime,[msg]:AppHost 停止插件 
+2021-06-11 09:59:06.4821 Info:                [source]:runtime,[msg]:插件"数据管理"停止成功 
+2021-06-11 09:59:06.4821 Info:                [source]:runtime,[msg]:插件"资源管理器"停止成功 
+2021-06-11 09:59:06.4821 Info:                [source]:runtime,[msg]:插件"测试程序例子"停止成功 
+2021-06-11 09:59:06.4821 Info:                [source]:runtime,[msg]:Runtime 关闭 
+2021-06-11 10:01:26.5932 Info:                [source]:runtime,[msg]:Runtime 启动 
+2021-06-11 10:01:26.6152 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
+2021-06-11 10:01:26.7752 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
+2021-06-11 10:01:26.7932 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\TpsAppDemo\bundle.config" 
+2021-06-11 10:01:26.8142 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
+2021-06-11 10:01:26.8142 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
+2021-06-11 10:01:26.8142 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
+2021-06-11 10:01:26.8142 Info:                [source]:runtime,[msg]:插件"测试程序例子"启动成功 
+2021-06-11 10:01:26.8142 Info:                [source]:runtime,[msg]:Runtime 启动完成 
+2021-06-11 10:01:29.3861 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
+   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
+2021-06-11 10:01:29.3891 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
+2021-06-11 10:01:29.3891 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
+2021-06-11 10:03:57.6448 Info:                [source]:runtime,[msg]:AppHost 停止插件 
+2021-06-11 10:03:57.6448 Info:                [source]:runtime,[msg]:插件"数据管理"停止成功 
+2021-06-11 10:03:57.6448 Info:                [source]:runtime,[msg]:插件"资源管理器"停止成功 
+2021-06-11 10:03:57.6448 Info:                [source]:runtime,[msg]:插件"测试程序例子"停止成功 
+2021-06-11 10:03:57.6448 Info:                [source]:runtime,[msg]:Runtime 关闭 
+2021-06-11 10:04:05.5263 Info:                [source]:runtime,[msg]:Runtime 启动 
+2021-06-11 10:04:05.5613 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
+2021-06-11 10:04:05.7174 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
+2021-06-11 10:04:05.7413 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\TpsAppDemo\bundle.config" 
+2021-06-11 10:04:05.7634 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
+2021-06-11 10:04:05.7634 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
+2021-06-11 10:04:05.7634 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
+2021-06-11 10:04:05.7634 Info:                [source]:runtime,[msg]:插件"测试程序例子"启动成功 
+2021-06-11 10:04:05.7634 Info:                [source]:runtime,[msg]:Runtime 启动完成 
+2021-06-11 10:04:08.5659 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
+   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
+2021-06-11 10:04:08.5659 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
+2021-06-11 10:04:08.5659 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
+2021-06-11 10:04:37.6674 Info:                [source]:runtime,[msg]:AppHost 停止插件 
+2021-06-11 10:04:37.6674 Info:                [source]:runtime,[msg]:插件"数据管理"停止成功 
+2021-06-11 10:04:37.6694 Info:                [source]:runtime,[msg]:插件"资源管理器"停止成功 
+2021-06-11 10:04:37.6694 Info:                [source]:runtime,[msg]:插件"测试程序例子"停止成功 
+2021-06-11 10:04:37.6694 Info:                [source]:runtime,[msg]:Runtime 关闭 
+2021-06-11 10:24:34.9235 Info:                [source]:runtime,[msg]:Runtime 启动 
+2021-06-11 10:24:34.9535 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
+2021-06-11 10:24:35.1436 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
+2021-06-11 10:24:35.1616 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\TpsAppDemo\bundle.config" 
+2021-06-11 10:24:35.1836 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
+2021-06-11 10:24:35.1896 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
+2021-06-11 10:24:35.1896 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
+2021-06-11 10:24:35.1896 Info:                [source]:runtime,[msg]:插件"测试程序例子"启动成功 
+2021-06-11 10:24:35.1896 Info:                [source]:runtime,[msg]:Runtime 启动完成 
+2021-06-11 10:24:37.0450 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
+   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
+2021-06-11 10:24:37.0450 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
+2021-06-11 10:24:37.0450 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
+2021-06-11 10:24:51.4837 Info:                [source]:runtime,[msg]:AppHost 停止插件 
+2021-06-11 10:24:51.4837 Info:                [source]:runtime,[msg]:插件"数据管理"停止成功 
+2021-06-11 10:24:51.4837 Info:                [source]:runtime,[msg]:插件"资源管理器"停止成功 
+2021-06-11 10:24:51.4837 Info:                [source]:runtime,[msg]:插件"测试程序例子"停止成功 
+2021-06-11 10:24:51.4837 Info:                [source]:runtime,[msg]:Runtime 关闭 
+2021-06-11 10:25:10.6691 Info:                [source]:runtime,[msg]:Runtime 启动 
+2021-06-11 10:25:10.6921 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
+2021-06-11 10:25:10.8897 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
+2021-06-11 10:25:10.9047 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\TpsAppDemo\bundle.config" 
+2021-06-11 10:25:10.9247 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
+2021-06-11 10:25:10.9247 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
+2021-06-11 10:25:10.9247 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
+2021-06-11 10:25:10.9247 Info:                [source]:runtime,[msg]:插件"测试程序例子"启动成功 
+2021-06-11 10:25:10.9247 Info:                [source]:runtime,[msg]:Runtime 启动完成 
+2021-06-11 10:25:13.6108 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
+   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
+2021-06-11 10:25:13.6108 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
+2021-06-11 10:25:13.6108 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
+2021-06-11 10:27:18.9279 Info:                [source]:runtime,[msg]:Runtime 启动 
+2021-06-11 10:27:18.9659 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
+2021-06-11 10:27:19.1330 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
+2021-06-11 10:27:19.1490 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\TpsAppDemo\bundle.config" 
+2021-06-11 10:27:19.1650 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
+2021-06-11 10:27:19.1700 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
+2021-06-11 10:27:19.1700 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
+2021-06-11 10:27:19.1700 Info:                [source]:runtime,[msg]:插件"测试程序例子"启动成功 
+2021-06-11 10:27:19.1700 Info:                [source]:runtime,[msg]:Runtime 启动完成 
+2021-06-11 10:27:21.8605 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
+   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
+2021-06-11 10:27:21.8605 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
+2021-06-11 10:27:21.8605 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
+2021-06-11 10:31:58.8567 Info:                [source]:runtime,[msg]:Runtime 启动 
+2021-06-11 10:31:58.8788 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
+2021-06-11 10:31:59.0328 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
+2021-06-11 10:31:59.0519 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\TpsAppDemo\bundle.config" 
+2021-06-11 10:31:59.0828 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
+2021-06-11 10:31:59.0828 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
+2021-06-11 10:31:59.0828 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
+2021-06-11 10:31:59.0919 Info:                [source]:runtime,[msg]:插件"测试程序例子"启动成功 
+2021-06-11 10:31:59.0919 Info:                [source]:runtime,[msg]:Runtime 启动完成 
+2021-06-11 10:32:01.7012 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
+   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
+2021-06-11 10:32:01.7012 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
+2021-06-11 10:32:01.7012 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
+2021-06-11 10:34:27.4161 Info:                [source]:runtime,[msg]:Runtime 启动 
+2021-06-11 10:34:27.4441 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
+2021-06-11 10:34:27.6282 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
+2021-06-11 10:34:27.6581 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\TpsAppDemo\bundle.config" 
+2021-06-11 10:34:27.6742 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
+2021-06-11 10:34:27.6742 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
+2021-06-11 10:34:27.6742 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
+2021-06-11 10:34:27.6742 Info:                [source]:runtime,[msg]:插件"测试程序例子"启动成功 
+2021-06-11 10:34:27.6742 Info:                [source]:runtime,[msg]:Runtime 启动完成 
+2021-06-11 10:34:30.1891 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
+   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
+2021-06-11 10:34:30.1891 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
+2021-06-11 10:34:30.1891 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
+2021-06-11 10:35:25.8107 Info:                [source]:runtime,[msg]:Runtime 启动 
+2021-06-11 10:35:25.8407 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
+2021-06-11 10:35:26.0277 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
+2021-06-11 10:35:26.0437 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\TpsAppDemo\bundle.config" 
+2021-06-11 10:35:26.0627 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
+2021-06-11 10:35:26.0627 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
+2021-06-11 10:35:26.0627 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
+2021-06-11 10:35:26.0627 Info:                [source]:runtime,[msg]:插件"测试程序例子"启动成功 
+2021-06-11 10:35:26.0627 Info:                [source]:runtime,[msg]:Runtime 启动完成 
+2021-06-11 10:35:28.7702 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
+   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
+2021-06-11 10:35:28.7702 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
+2021-06-11 10:35:28.7702 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
+2021-06-11 10:37:28.2443 Info:                [source]:runtime,[msg]:Runtime 启动 
+2021-06-11 10:37:28.2684 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
+2021-06-11 10:37:28.4004 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
+2021-06-11 10:37:28.4144 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\TpsAppDemo\bundle.config" 
+2021-06-11 10:37:28.4518 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
+2021-06-11 10:37:28.4518 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
+2021-06-11 10:37:28.4518 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
+2021-06-11 10:37:28.4518 Info:                [source]:runtime,[msg]:插件"测试程序例子"启动成功 
+2021-06-11 10:37:28.4518 Info:                [source]:runtime,[msg]:Runtime 启动完成 
+2021-06-11 10:37:31.0722 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
+   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
+2021-06-11 10:37:31.0762 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
+2021-06-11 10:37:31.0762 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
+2021-06-11 10:39:35.5992 Info:                [source]:runtime,[msg]:AppHost 停止插件 
+2021-06-11 10:39:35.5992 Info:                [source]:runtime,[msg]:插件"数据管理"停止成功 
+2021-06-11 10:39:35.5992 Info:                [source]:runtime,[msg]:插件"资源管理器"停止成功 
+2021-06-11 10:39:35.5992 Info:                [source]:runtime,[msg]:插件"测试程序例子"停止成功 
+2021-06-11 10:39:35.5992 Info:                [source]:runtime,[msg]:Runtime 关闭 

+ 20 - 299
exe/logs/202107.log

@@ -1,299 +1,20 @@
-2021-07-29 17:01:06.1937 Info:                [source]:runtime,[msg]:Runtime 启动 
-2021-07-29 17:01:06.2067 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
-2021-07-29 17:01:06.2427 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
-2021-07-29 17:01:06.2456 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\Tps_LQ_Transmitter\bundle.config" 
-2021-07-29 17:01:06.2456 Error:                [source]:runtime,[msg]:Assembly"D:\code\LabStudio\exe\apps\Tps_LQ_Transmitter\TpsAppDemo.dll"未找到 
-2021-07-29 17:01:06.2456 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
-2021-07-29 17:01:06.2456 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
-2021-07-29 17:01:06.2456 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
-2021-07-29 17:01:06.2456 Info:                [source]:runtime,[msg]:Runtime 启动完成 
-2021-07-29 17:01:07.1965 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
-   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
-2021-07-29 17:01:07.1965 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
-2021-07-29 17:01:07.1965 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
-2021-07-29 17:01:08.4022 Info:                [source]:runtime,[msg]:AppHost 停止插件 
-2021-07-29 17:01:08.4022 Info:                [source]:runtime,[msg]:插件"数据管理"停止成功 
-2021-07-29 17:01:08.4022 Info:                [source]:runtime,[msg]:插件"资源管理器"停止成功 
-2021-07-29 17:01:08.4022 Info:                [source]:runtime,[msg]:Runtime 关闭 
-2021-07-29 17:16:25.9747 Info:                [source]:runtime,[msg]:Runtime 启动 
-2021-07-29 17:16:25.9866 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
-2021-07-29 17:16:26.0226 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
-2021-07-29 17:16:26.0256 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\Tps_LQ_Transmitter\bundle.config" 
-2021-07-29 17:16:26.0256 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
-2021-07-29 17:16:26.0256 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
-2021-07-29 17:16:26.0256 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
-2021-07-29 17:16:26.0256 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"启动成功 
-2021-07-29 17:16:26.0256 Info:                [source]:runtime,[msg]:Runtime 启动完成 
-2021-07-29 17:16:26.9820 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
-   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
-2021-07-29 17:16:26.9820 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
-2021-07-29 17:16:26.9820 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
-2021-07-29 17:16:37.6110 Info:                [source]:runtime,[msg]:AppHost 停止插件 
-2021-07-29 17:16:37.6110 Info:                [source]:runtime,[msg]:插件"数据管理"停止成功 
-2021-07-29 17:16:37.6110 Info:                [source]:runtime,[msg]:插件"资源管理器"停止成功 
-2021-07-29 17:16:37.6110 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"停止成功 
-2021-07-29 17:16:37.6110 Info:                [source]:runtime,[msg]:Runtime 关闭 
-2021-07-29 17:17:32.3767 Info:                [source]:runtime,[msg]:Runtime 启动 
-2021-07-29 17:17:32.3917 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
-2021-07-29 17:17:32.4578 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
-2021-07-29 17:17:32.4688 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\Tps_LQ_Transmitter\bundle.config" 
-2021-07-29 17:18:15.4874 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
-2021-07-29 17:18:15.4874 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
-2021-07-29 17:18:15.4874 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
-2021-07-29 17:19:04.7856 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"启动成功 
-2021-07-29 17:19:04.7856 Info:                [source]:runtime,[msg]:Runtime 启动完成 
-2021-07-29 17:19:05.8453 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
-   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
-2021-07-29 17:19:05.8453 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
-2021-07-29 17:19:05.8453 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
-2021-07-29 17:21:40.5172 Info:                [source]:runtime,[msg]:AppHost 停止插件 
-2021-07-29 17:21:40.5172 Info:                [source]:runtime,[msg]:插件"数据管理"停止成功 
-2021-07-29 17:21:40.5172 Info:                [source]:runtime,[msg]:插件"资源管理器"停止成功 
-2021-07-29 17:22:04.9868 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"停止成功 
-2021-07-29 17:22:04.9868 Info:                [source]:runtime,[msg]:Runtime 关闭 
-2021-07-29 17:22:23.3874 Info:                [source]:runtime,[msg]:Runtime 启动 
-2021-07-29 17:22:23.4004 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
-2021-07-29 17:22:23.4589 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
-2021-07-29 17:22:23.4682 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\Tps_LQ_Transmitter\bundle.config" 
-2021-07-29 17:22:27.1665 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
-2021-07-29 17:22:27.1665 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
-2021-07-29 17:22:27.1665 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
-2021-07-29 17:22:28.5702 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"启动成功 
-2021-07-29 17:22:28.5712 Info:                [source]:runtime,[msg]:Runtime 启动完成 
-2021-07-29 17:22:35.2913 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
-   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
-2021-07-29 17:22:35.2913 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
-2021-07-29 17:22:35.2913 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
-2021-07-29 17:23:45.6834 Info:                [source]:runtime,[msg]:AppHost 停止插件 
-2021-07-29 17:23:45.6834 Info:                [source]:runtime,[msg]:插件"数据管理"停止成功 
-2021-07-29 17:23:45.6834 Info:                [source]:runtime,[msg]:插件"资源管理器"停止成功 
-2021-07-29 17:23:48.9550 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"停止成功 
-2021-07-29 17:23:48.9550 Info:                [source]:runtime,[msg]:Runtime 关闭 
-2021-07-29 17:24:45.8032 Info:                [source]:runtime,[msg]:Runtime 启动 
-2021-07-29 17:24:45.8172 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
-2021-07-29 17:24:45.8752 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
-2021-07-29 17:24:45.8842 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\Tps_LQ_Transmitter\bundle.config" 
-2021-07-29 17:24:45.8842 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
-2021-07-29 17:24:45.9002 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
-2021-07-29 17:24:45.9002 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
-2021-07-29 17:24:45.9002 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"启动成功 
-2021-07-29 17:24:45.9002 Info:                [source]:runtime,[msg]:Runtime 启动完成 
-2021-07-29 17:24:47.0696 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
-   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
-2021-07-29 17:24:47.0696 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
-2021-07-29 17:24:47.0696 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
-2021-07-29 17:30:43.9909 Info:                [source]:runtime,[msg]:AppHost 停止插件 
-2021-07-29 17:30:43.9909 Info:                [source]:runtime,[msg]:插件"数据管理"停止成功 
-2021-07-29 17:30:43.9909 Info:                [source]:runtime,[msg]:插件"资源管理器"停止成功 
-2021-07-29 17:30:43.9909 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"停止成功 
-2021-07-29 17:30:43.9929 Info:                [source]:runtime,[msg]:Runtime 关闭 
-2021-07-29 17:31:02.8093 Info:                [source]:runtime,[msg]:Runtime 启动 
-2021-07-29 17:31:02.8233 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
-2021-07-29 17:31:02.8784 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
-2021-07-29 17:31:02.8874 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\Tps_LQ_Transmitter\bundle.config" 
-2021-07-29 17:31:02.8874 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
-2021-07-29 17:31:02.9004 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
-2021-07-29 17:31:02.9004 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
-2021-07-29 17:31:02.9004 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"启动成功 
-2021-07-29 17:31:02.9004 Info:                [source]:runtime,[msg]:Runtime 启动完成 
-2021-07-29 17:31:04.0576 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
-   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
-2021-07-29 17:31:04.0576 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
-2021-07-29 17:31:04.0576 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
-2021-07-29 17:31:54.7032 Info:                [source]:runtime,[msg]:AppHost 停止插件 
-2021-07-29 17:31:54.7032 Info:                [source]:runtime,[msg]:插件"数据管理"停止成功 
-2021-07-29 17:31:54.7032 Info:                [source]:runtime,[msg]:插件"资源管理器"停止成功 
-2021-07-29 17:31:54.7032 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"停止成功 
-2021-07-29 17:31:54.7032 Info:                [source]:runtime,[msg]:Runtime 关闭 
-2021-07-29 17:37:25.7893 Info:                [source]:runtime,[msg]:Runtime 启动 
-2021-07-29 17:37:25.8023 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
-2021-07-29 17:37:25.8587 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
-2021-07-29 17:37:25.8757 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\Tps_LQ_Transmitter\bundle.config" 
-2021-07-29 17:37:25.8857 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
-2021-07-29 17:37:25.8857 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
-2021-07-29 17:37:25.8857 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
-2021-07-29 17:37:25.8857 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"启动成功 
-2021-07-29 17:37:25.8857 Info:                [source]:runtime,[msg]:Runtime 启动完成 
-2021-07-29 17:37:27.0653 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
-   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
-2021-07-29 17:37:27.0653 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
-2021-07-29 17:37:27.0653 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
-2021-07-29 17:48:16.4114 Info:                [source]:runtime,[msg]:AppHost 停止插件 
-2021-07-29 17:48:16.4114 Info:                [source]:runtime,[msg]:插件"数据管理"停止成功 
-2021-07-29 17:48:16.4114 Info:                [source]:runtime,[msg]:插件"资源管理器"停止成功 
-2021-07-29 17:48:16.4114 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"停止成功 
-2021-07-29 17:48:16.4114 Info:                [source]:runtime,[msg]:Runtime 关闭 
-2021-07-29 18:16:26.6623 Info:                [source]:runtime,[msg]:Runtime 启动 
-2021-07-29 18:16:26.6763 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
-2021-07-29 18:16:26.7343 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
-2021-07-29 18:16:26.7453 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\Tps_LQ_Transmitter\bundle.config" 
-2021-07-29 18:16:26.7453 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
-2021-07-29 18:16:26.7453 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
-2021-07-29 18:16:26.7453 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
-2021-07-29 18:16:26.7453 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"启动成功 
-2021-07-29 18:16:26.7453 Info:                [source]:runtime,[msg]:Runtime 启动完成 
-2021-07-29 18:16:27.9366 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
-   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
-2021-07-29 18:16:27.9366 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
-2021-07-29 18:16:27.9366 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
-2021-07-29 18:16:45.5461 Info:                [source]:runtime,[msg]:AppHost 停止插件 
-2021-07-29 18:16:45.5461 Info:                [source]:runtime,[msg]:插件"数据管理"停止成功 
-2021-07-29 18:16:45.5461 Info:                [source]:runtime,[msg]:插件"资源管理器"停止成功 
-2021-07-29 18:16:45.5461 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"停止成功 
-2021-07-29 18:16:45.5461 Info:                [source]:runtime,[msg]:Runtime 关闭 
-2021-07-30 11:39:46.1426 Info:                [source]:runtime,[msg]:Runtime 启动 
-2021-07-30 11:39:46.1636 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
-2021-07-30 11:39:46.2437 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
-2021-07-30 11:39:46.2437 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\Tps_LQ_Transmitter\bundle.config" 
-2021-07-30 11:39:46.2696 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
-2021-07-30 11:39:46.2696 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
-2021-07-30 11:39:46.2696 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
-2021-07-30 11:39:46.2696 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"启动成功 
-2021-07-30 11:39:46.2696 Info:                [source]:runtime,[msg]:Runtime 启动完成 
-2021-07-30 11:39:47.8901 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
-   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
-2021-07-30 11:39:47.8901 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
-2021-07-30 11:39:47.8901 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
-2021-07-30 11:40:53.0812 Info:                [source]:runtime,[msg]:AppHost 停止插件 
-2021-07-30 11:40:53.0812 Info:                [source]:runtime,[msg]:插件"数据管理"停止成功 
-2021-07-30 11:40:53.0812 Info:                [source]:runtime,[msg]:插件"资源管理器"停止成功 
-2021-07-30 11:40:53.0812 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"停止成功 
-2021-07-30 11:40:53.0812 Info:                [source]:runtime,[msg]:Runtime 关闭 
-2021-07-30 11:43:16.6096 Info:                [source]:runtime,[msg]:Runtime 启动 
-2021-07-30 11:43:16.6306 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
-2021-07-30 11:43:16.7316 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
-2021-07-30 11:43:16.7436 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\Tps_LQ_Transmitter\bundle.config" 
-2021-07-30 11:43:16.7436 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
-2021-07-30 11:43:16.7587 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
-2021-07-30 11:43:16.7587 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
-2021-07-30 11:43:16.7587 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"启动成功 
-2021-07-30 11:43:16.7587 Info:                [source]:runtime,[msg]:Runtime 启动完成 
-2021-07-30 11:43:18.6147 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
-   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
-2021-07-30 11:43:18.6147 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
-2021-07-30 11:43:18.6147 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
-2021-07-30 11:44:08.3701 Info:                [source]:runtime,[msg]:AppHost 停止插件 
-2021-07-30 11:44:08.3701 Info:                [source]:runtime,[msg]:插件"数据管理"停止成功 
-2021-07-30 11:44:08.3701 Info:                [source]:runtime,[msg]:插件"资源管理器"停止成功 
-2021-07-30 11:44:08.3701 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"停止成功 
-2021-07-30 11:44:08.3701 Info:                [source]:runtime,[msg]:Runtime 关闭 
-2021-07-30 11:44:21.3156 Info:                [source]:runtime,[msg]:Runtime 启动 
-2021-07-30 11:44:21.3396 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
-2021-07-30 11:44:21.4331 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
-2021-07-30 11:44:21.4475 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\Tps_LQ_Transmitter\bundle.config" 
-2021-07-30 11:44:21.4645 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
-2021-07-30 11:44:21.4645 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
-2021-07-30 11:44:21.4645 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
-2021-07-30 11:44:21.4645 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"启动成功 
-2021-07-30 11:44:21.4645 Info:                [source]:runtime,[msg]:Runtime 启动完成 
-2021-07-30 11:44:23.0904 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
-   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
-2021-07-30 11:44:23.0904 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
-2021-07-30 11:44:23.0904 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
-2021-07-30 11:44:35.6233 Info:                [source]:runtime,[msg]:AppHost 停止插件 
-2021-07-30 11:44:35.6233 Info:                [source]:runtime,[msg]:插件"数据管理"停止成功 
-2021-07-30 11:44:35.6233 Info:                [source]:runtime,[msg]:插件"资源管理器"停止成功 
-2021-07-30 11:44:35.6233 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"停止成功 
-2021-07-30 11:44:35.6233 Info:                [source]:runtime,[msg]:Runtime 关闭 
-2021-07-30 11:45:02.7604 Info:                [source]:runtime,[msg]:Runtime 启动 
-2021-07-30 11:45:02.7824 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
-2021-07-30 11:45:02.8737 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
-2021-07-30 11:45:02.8897 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\Tps_LQ_Transmitter\bundle.config" 
-2021-07-30 11:45:02.9657 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
-2021-07-30 11:45:02.9657 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
-2021-07-30 11:45:02.9657 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
-2021-07-30 11:45:02.9657 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"启动成功 
-2021-07-30 11:45:02.9657 Info:                [source]:runtime,[msg]:Runtime 启动完成 
-2021-07-30 11:45:04.5681 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
-   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
-2021-07-30 11:45:04.5711 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
-2021-07-30 11:45:04.5711 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
-2021-07-30 11:45:16.3761 Info:                [source]:runtime,[msg]:AppHost 停止插件 
-2021-07-30 11:45:16.3761 Info:                [source]:runtime,[msg]:插件"数据管理"停止成功 
-2021-07-30 11:45:16.3761 Info:                [source]:runtime,[msg]:插件"资源管理器"停止成功 
-2021-07-30 11:45:16.3761 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"停止成功 
-2021-07-30 11:45:16.3761 Info:                [source]:runtime,[msg]:Runtime 关闭 
-2021-07-30 11:45:35.8984 Info:                [source]:runtime,[msg]:Runtime 启动 
-2021-07-30 11:45:35.9235 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
-2021-07-30 11:45:36.0140 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
-2021-07-30 11:45:36.0250 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\Tps_LQ_Transmitter\bundle.config" 
-2021-07-30 11:45:36.0250 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
-2021-07-30 11:45:36.0400 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
-2021-07-30 11:45:36.0400 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
-2021-07-30 11:45:36.0400 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"启动成功 
-2021-07-30 11:45:36.0400 Info:                [source]:runtime,[msg]:Runtime 启动完成 
-2021-07-30 11:45:37.6784 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
-   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
-2021-07-30 11:45:37.6814 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
-2021-07-30 11:45:37.6814 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
-2021-07-30 11:46:04.0994 Info:                [source]:runtime,[msg]:AppHost 停止插件 
-2021-07-30 11:46:04.0994 Info:                [source]:runtime,[msg]:插件"数据管理"停止成功 
-2021-07-30 11:46:04.1044 Info:                [source]:runtime,[msg]:插件"资源管理器"停止成功 
-2021-07-30 11:46:04.1044 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"停止成功 
-2021-07-30 11:46:04.1044 Info:                [source]:runtime,[msg]:Runtime 关闭 
-2021-07-30 12:02:56.8458 Info:                [source]:runtime,[msg]:Runtime 启动 
-2021-07-30 12:02:56.8668 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
-2021-07-30 12:02:56.9484 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
-2021-07-30 12:02:56.9484 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\Tps_LQ_Transmitter\bundle.config" 
-2021-07-30 12:02:57.0254 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
-2021-07-30 12:02:57.0254 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
-2021-07-30 12:02:57.0254 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
-2021-07-30 12:02:57.0254 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"启动成功 
-2021-07-30 12:02:57.0254 Info:                [source]:runtime,[msg]:Runtime 启动完成 
-2021-07-30 12:02:58.6229 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
-   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
-2021-07-30 12:02:58.6229 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
-2021-07-30 12:02:58.6229 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
-2021-07-30 12:14:55.7878 Info:                [source]:runtime,[msg]:AppHost 停止插件 
-2021-07-30 12:14:55.7878 Info:                [source]:runtime,[msg]:插件"数据管理"停止成功 
-2021-07-30 12:14:55.7899 Info:                [source]:runtime,[msg]:插件"资源管理器"停止成功 
-2021-07-30 12:14:55.7899 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"停止成功 
-2021-07-30 12:14:55.7899 Info:                [source]:runtime,[msg]:Runtime 关闭 
-2021-07-30 15:11:07.2911 Info:                [source]:runtime,[msg]:Runtime 启动 
-2021-07-30 15:11:07.3111 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DataApp\bundle.config" 
-2021-07-30 15:11:07.3722 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\DevicesApp\bundle.config" 
-2021-07-30 15:11:07.3722 Info:                [source]:runtime,[msg]:加载插件"D:\code\LabStudio\exe\apps\Tps_LQ_Transmitter\bundle.config" 
-2021-07-30 15:11:07.3722 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
-2021-07-30 15:11:07.3722 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
-2021-07-30 15:11:07.3842 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
-2021-07-30 15:11:07.3842 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"启动成功 
-2021-07-30 15:11:07.3842 Info:                [source]:runtime,[msg]:Runtime 启动完成 
-2021-07-30 15:11:08.9214 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
-   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
-   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
-2021-07-30 15:11:08.9214 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
-2021-07-30 15:11:08.9214 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
-2021-07-30 15:11:16.1401 Info:                [source]:runtime,[msg]:AppHost 停止插件 
-2021-07-30 15:11:16.1401 Info:                [source]:runtime,[msg]:插件"数据管理"停止成功 
-2021-07-30 15:11:16.1401 Info:                [source]:runtime,[msg]:插件"资源管理器"停止成功 
-2021-07-30 15:11:16.1401 Info:                [source]:runtime,[msg]:插件"林泉发射机测试"停止成功 
-2021-07-30 15:11:16.1401 Info:                [source]:runtime,[msg]:Runtime 关闭 
+2021-07-30 15:30:57.7031 Info:                [source]:runtime,[msg]:Runtime 启动 
+2021-07-30 15:30:57.7190 Info:                [source]:runtime,[msg]:加载插件"E:\PowerTestStudio\exe\apps\DataApp\bundle.config" 
+2021-07-30 15:30:57.7659 Info:                [source]:runtime,[msg]:加载插件"E:\PowerTestStudio\exe\apps\DevicesApp\bundle.config" 
+2021-07-30 15:30:57.7771 Info:                [source]:runtime,[msg]:加载插件"E:\PowerTestStudio\exe\apps\TpsAppDemo\bundle.config" 
+2021-07-30 15:30:57.7878 Info:                [source]:runtime,[msg]:AppHost 开始启动插件 
+2021-07-30 15:30:57.7878 Info:                [source]:runtime,[msg]:插件"数据管理"启动成功 
+2021-07-30 15:30:57.7878 Info:                [source]:runtime,[msg]:插件"资源管理器"启动成功 
+2021-07-30 15:30:57.7878 Info:                [source]:runtime,[msg]:插件"测试程序例子"启动成功 
+2021-07-30 15:30:57.7878 Info:                [source]:runtime,[msg]:Runtime 启动完成 
+2021-07-30 15:30:59.2814 Error:                [source]:Visa SearchDevices,[msg]:VISA设备搜索执行异常,   在 NationalInstruments.VisaNS.Internal.ErrorChecker.CheckStatusAndThrow(Int32 status, VisaHandle visaObject)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression, Int32 resourceNameBufferSize)
+   在 NationalInstruments.VisaNS.ResourceManager.FindResources(String expression)
+   在 DevicesApp.VisaBus.SearchDevices() 位置 D:\code\LabStudio\component\DevicesApp\VisaBus.cs:行号 22 
+2021-07-30 15:30:59.2814 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::34::INSTR。 
+2021-07-30 15:30:59.2814 Info:                [source]:资源管理器 LoadDevice,[msg]:初始化设备成功:GPIB0::29::INSTR。 
+2021-07-30 15:31:01.3419 Info:                [source]:runtime,[msg]:AppHost 停止插件 
+2021-07-30 15:31:01.3419 Info:                [source]:runtime,[msg]:插件"数据管理"停止成功 
+2021-07-30 15:31:01.3419 Info:                [source]:runtime,[msg]:插件"资源管理器"停止成功 
+2021-07-30 15:31:01.3419 Info:                [source]:runtime,[msg]:插件"测试程序例子"停止成功 
+2021-07-30 15:31:01.3419 Info:                [source]:runtime,[msg]:Runtime 关闭 

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 2949 - 80
exe/logs/202108.log


BIN
tps/TpsAppDemo/.vs/PowerTestDemo/v16/.suo


+ 35 - 0
tps/TpsAppDemo/Bundle.cs

@@ -0,0 +1,35 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using AppLibs.Host;
+
+namespace PowerTestDemo
+{
+    public class Bundle : BaseBundle
+    {
+        public static IBundle bundle;
+        public static IHost host;
+        public static AppLibs.Host.ILog log;
+
+        public Bundle()
+        {
+            this.releaseTime = "2021-5-19";
+            this.bundleName = "测试程序1";  //与配置文件<Bundle Name="软件管理模块">保持一致
+        }
+
+        public override bool Start(IHost host, IBundle bundle)
+        {
+            Bundle.bundle = bundle;
+            Bundle.host = host;
+            log = host.GetFirstOrDefaultService<AppLibs.Host.ILog>();
+
+            return base.Start(host, bundle);
+        }
+
+        public override bool Stop(IHost host, IBundle bundle)
+        {
+            return base.Stop(host, bundle);
+        }
+    }
+}

+ 906 - 0
tps/TpsAppDemo/FrmMain.Designer.cs

@@ -0,0 +1,906 @@
+namespace PowerTestDemo
+{
+    partial class FrmMain
+    {
+        /// <summary>
+        /// 必需的设计器变量。
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// 清理所有正在使用的资源。
+        /// </summary>
+        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows 窗体设计器生成的代码
+
+        /// <summary>
+        /// 设计器支持所需的方法 - 不要修改
+        /// 使用代码编辑器修改此方法的内容。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            DevComponents.DotNetBar.Layout.BorderPattern borderPattern1 = new DevComponents.DotNetBar.Layout.BorderPattern();
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
+            this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+            this.advTree1 = new DevComponents.AdvTree.AdvTree();
+            this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
+            this.tsmChannel = new System.Windows.Forms.ToolStripMenuItem();
+            this.tmsTestNode = new System.Windows.Forms.ToolStripMenuItem();
+            this.tsmUnSelecteAll = new System.Windows.Forms.ToolStripMenuItem();
+            this.tsmSelectAll = new System.Windows.Forms.ToolStripMenuItem();
+            this.node1 = new DevComponents.AdvTree.Node();
+            this.nodeConnector1 = new DevComponents.AdvTree.NodeConnector();
+            this.elementStyle1 = new DevComponents.DotNetBar.ElementStyle();
+            this.layoutControl1 = new DevComponents.DotNetBar.Layout.LayoutControl();
+            this.tbTestProject = new DevComponents.DotNetBar.Controls.TextBoxX();
+            this.tbPlace = new DevComponents.DotNetBar.Controls.TextBoxX();
+            this.tbSerial = new DevComponents.DotNetBar.Controls.TextBoxX();
+            this.tbTemp = new DevComponents.DotNetBar.Controls.TextBoxX();
+            this.tbRH = new DevComponents.DotNetBar.Controls.TextBoxX();
+            this.BtnLoadTpsConfig = new DevComponents.DotNetBar.ButtonX();
+            this.BtnMessage = new DevComponents.DotNetBar.ButtonX();
+            this.BtnDevice = new DevComponents.DotNetBar.ButtonX();
+            this.circularProgress1 = new DevComponents.DotNetBar.Controls.CircularProgress();
+            this.BtnStop = new DevComponents.DotNetBar.ButtonX();
+            this.BtnStart = new DevComponents.DotNetBar.ButtonX();
+            this.cbbProduct = new DevComponents.DotNetBar.Controls.ComboBoxEx();
+            this.tbTester = new DevComponents.DotNetBar.Controls.TextBoxX();
+            this.layoutGroup1 = new DevComponents.DotNetBar.Layout.LayoutGroup();
+            this.layoutControlItem1 = new DevComponents.DotNetBar.Layout.LayoutControlItem();
+            this.layoutControlItem2 = new DevComponents.DotNetBar.Layout.LayoutControlItem();
+            this.layoutControlItem3 = new DevComponents.DotNetBar.Layout.LayoutControlItem();
+            this.layoutControlItem6 = new DevComponents.DotNetBar.Layout.LayoutControlItem();
+            this.layoutControlItem7 = new DevComponents.DotNetBar.Layout.LayoutControlItem();
+            this.layoutControlItem5 = new DevComponents.DotNetBar.Layout.LayoutControlItem();
+            this.layoutControlItem4 = new DevComponents.DotNetBar.Layout.LayoutControlItem();
+            this.layoutControlItem12 = new DevComponents.DotNetBar.Layout.LayoutControlItem();
+            this.layoutGroup2 = new DevComponents.DotNetBar.Layout.LayoutGroup();
+            this.layoutControlItem8 = new DevComponents.DotNetBar.Layout.LayoutControlItem();
+            this.layoutSpacerItem1 = new DevComponents.DotNetBar.Layout.LayoutSpacerItem();
+            this.layoutControlItem9 = new DevComponents.DotNetBar.Layout.LayoutControlItem();
+            this.labRemainTime = new DevComponents.DotNetBar.Layout.LayoutControlItem();
+            this.layoutControlItem10 = new DevComponents.DotNetBar.Layout.LayoutControlItem();
+            this.layoutSpacerItem2 = new DevComponents.DotNetBar.Layout.LayoutSpacerItem();
+            this.layoutControlItem11 = new DevComponents.DotNetBar.Layout.LayoutControlItem();
+            this.panel1 = new System.Windows.Forms.Panel();
+            this.superTabControl1 = new DevComponents.DotNetBar.SuperTabControl();
+            this.superTabControlPanel1 = new DevComponents.DotNetBar.SuperTabControlPanel();
+            this.dgvTestData = new DevComponents.DotNetBar.Controls.DataGridViewX();
+            this.tabTestData = new DevComponents.DotNetBar.SuperTabItem();
+            this.superTabControlPanel2 = new DevComponents.DotNetBar.SuperTabControlPanel();
+            this.dgvManualData = new DevComponents.DotNetBar.Controls.DataGridViewX();
+            this.panelEx1 = new DevComponents.DotNetBar.PanelEx();
+            this.BtnLoadManualData = new DevComponents.DotNetBar.ButtonX();
+            this.BtnSaveManualData = new DevComponents.DotNetBar.ButtonX();
+            this.tabManualData = new DevComponents.DotNetBar.SuperTabItem();
+            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
+            this.splitContainer1.Panel1.SuspendLayout();
+            this.splitContainer1.Panel2.SuspendLayout();
+            this.splitContainer1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.advTree1)).BeginInit();
+            this.contextMenuStrip1.SuspendLayout();
+            this.layoutControl1.SuspendLayout();
+            this.panel1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.superTabControl1)).BeginInit();
+            this.superTabControl1.SuspendLayout();
+            this.superTabControlPanel1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.dgvTestData)).BeginInit();
+            this.superTabControlPanel2.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.dgvManualData)).BeginInit();
+            this.panelEx1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // splitContainer1
+            // 
+            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
+            this.splitContainer1.Location = new System.Drawing.Point(0, 0);
+            this.splitContainer1.Margin = new System.Windows.Forms.Padding(2);
+            this.splitContainer1.Name = "splitContainer1";
+            // 
+            // splitContainer1.Panel1
+            // 
+            this.splitContainer1.Panel1.Controls.Add(this.advTree1);
+            this.splitContainer1.Panel1.Controls.Add(this.layoutControl1);
+            // 
+            // splitContainer1.Panel2
+            // 
+            this.splitContainer1.Panel2.Controls.Add(this.panel1);
+            this.splitContainer1.Size = new System.Drawing.Size(864, 578);
+            this.splitContainer1.SplitterDistance = 325;
+            this.splitContainer1.SplitterWidth = 3;
+            this.splitContainer1.TabIndex = 0;
+            // 
+            // advTree1
+            // 
+            this.advTree1.AccessibleRole = System.Windows.Forms.AccessibleRole.Outline;
+            this.advTree1.BackColor = System.Drawing.SystemColors.Window;
+            // 
+            // 
+            // 
+            this.advTree1.BackgroundStyle.Class = "TreeBorderKey";
+            this.advTree1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.advTree1.ContextMenuStrip = this.contextMenuStrip1;
+            this.advTree1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.advTree1.DragDropEnabled = false;
+            this.advTree1.DragDropNodeCopyEnabled = false;
+            this.advTree1.Font = new System.Drawing.Font("微软雅黑", 10.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.advTree1.Location = new System.Drawing.Point(0, 290);
+            this.advTree1.Margin = new System.Windows.Forms.Padding(2);
+            this.advTree1.Name = "advTree1";
+            this.advTree1.Nodes.AddRange(new DevComponents.AdvTree.Node[] {
+            this.node1});
+            this.advTree1.NodesConnector = this.nodeConnector1;
+            this.advTree1.NodeStyle = this.elementStyle1;
+            this.advTree1.PathSeparator = ";";
+            this.advTree1.SelectionBoxStyle = DevComponents.AdvTree.eSelectionStyle.FullRowSelect;
+            this.advTree1.SelectionPerCell = true;
+            this.advTree1.Size = new System.Drawing.Size(325, 288);
+            this.advTree1.Styles.Add(this.elementStyle1);
+            this.advTree1.TabIndex = 1;
+            this.advTree1.Text = "advTree1";
+            this.advTree1.AfterCheck += new DevComponents.AdvTree.AdvTreeCellEventHandler(this.advTree1_AfterCheck);
+            this.advTree1.NodeDoubleClick += new DevComponents.AdvTree.TreeNodeMouseEventHandler(this.advTree1_NodeDoubleClick);
+            // 
+            // contextMenuStrip1
+            // 
+            this.contextMenuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20);
+            this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.tsmChannel,
+            this.tmsTestNode,
+            this.tsmUnSelecteAll,
+            this.tsmSelectAll});
+            this.contextMenuStrip1.Name = "contextMenuStrip1";
+            this.contextMenuStrip1.Size = new System.Drawing.Size(149, 92);
+            // 
+            // tsmChannel
+            // 
+            this.tsmChannel.Name = "tsmChannel";
+            this.tsmChannel.Size = new System.Drawing.Size(148, 22);
+            this.tsmChannel.Text = "按通道分类";
+            this.tsmChannel.Click += new System.EventHandler(this.tsmChannel_Click);
+            // 
+            // tmsTestNode
+            // 
+            this.tmsTestNode.Name = "tmsTestNode";
+            this.tmsTestNode.Size = new System.Drawing.Size(148, 22);
+            this.tmsTestNode.Text = "按指标分类";
+            this.tmsTestNode.Click += new System.EventHandler(this.tmsTestNode_Click);
+            // 
+            // tsmUnSelecteAll
+            // 
+            this.tsmUnSelecteAll.Name = "tsmUnSelecteAll";
+            this.tsmUnSelecteAll.Size = new System.Drawing.Size(148, 22);
+            this.tsmUnSelecteAll.Text = "全部取消选择";
+            this.tsmUnSelecteAll.Click += new System.EventHandler(this.tsmUnSelecteAll_Click);
+            // 
+            // tsmSelectAll
+            // 
+            this.tsmSelectAll.Name = "tsmSelectAll";
+            this.tsmSelectAll.Size = new System.Drawing.Size(148, 22);
+            this.tsmSelectAll.Text = "全部选择";
+            this.tsmSelectAll.Click += new System.EventHandler(this.tsmSelectAll_Click);
+            // 
+            // node1
+            // 
+            this.node1.Expanded = true;
+            this.node1.Name = "node1";
+            this.node1.Text = "node1";
+            // 
+            // nodeConnector1
+            // 
+            this.nodeConnector1.LineColor = System.Drawing.SystemColors.ControlText;
+            // 
+            // elementStyle1
+            // 
+            this.elementStyle1.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.elementStyle1.Name = "elementStyle1";
+            this.elementStyle1.TextColor = System.Drawing.SystemColors.ControlText;
+            // 
+            // layoutControl1
+            // 
+            this.layoutControl1.Controls.Add(this.tbTestProject);
+            this.layoutControl1.Controls.Add(this.tbPlace);
+            this.layoutControl1.Controls.Add(this.tbSerial);
+            this.layoutControl1.Controls.Add(this.tbTemp);
+            this.layoutControl1.Controls.Add(this.tbRH);
+            this.layoutControl1.Controls.Add(this.BtnLoadTpsConfig);
+            this.layoutControl1.Controls.Add(this.BtnMessage);
+            this.layoutControl1.Controls.Add(this.BtnDevice);
+            this.layoutControl1.Controls.Add(this.circularProgress1);
+            this.layoutControl1.Controls.Add(this.BtnStop);
+            this.layoutControl1.Controls.Add(this.BtnStart);
+            this.layoutControl1.Controls.Add(this.cbbProduct);
+            this.layoutControl1.Controls.Add(this.tbTester);
+            this.layoutControl1.Dock = System.Windows.Forms.DockStyle.Top;
+            this.layoutControl1.Location = new System.Drawing.Point(0, 0);
+            this.layoutControl1.Margin = new System.Windows.Forms.Padding(2);
+            this.layoutControl1.Name = "layoutControl1";
+            // 
+            // 
+            // 
+            this.layoutControl1.RootGroup.Items.AddRange(new DevComponents.DotNetBar.Layout.LayoutItemBase[] {
+            this.layoutGroup1,
+            this.layoutGroup2});
+            this.layoutControl1.Size = new System.Drawing.Size(325, 290);
+            this.layoutControl1.TabIndex = 0;
+            // 
+            // tbTestProject
+            // 
+            // 
+            // 
+            // 
+            this.tbTestProject.Border.Class = "TextBoxBorder";
+            this.tbTestProject.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.tbTestProject.Location = new System.Drawing.Point(66, 125);
+            this.tbTestProject.Margin = new System.Windows.Forms.Padding(0);
+            this.tbTestProject.Name = "tbTestProject";
+            this.tbTestProject.PreventEnterBeep = true;
+            this.tbTestProject.ReadOnly = true;
+            this.tbTestProject.Size = new System.Drawing.Size(253, 21);
+            this.tbTestProject.TabIndex = 5;
+            // 
+            // tbPlace
+            // 
+            // 
+            // 
+            // 
+            this.tbPlace.Border.Class = "TextBoxBorder";
+            this.tbPlace.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.tbPlace.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.tbPlace.Location = new System.Drawing.Point(66, 47);
+            this.tbPlace.Margin = new System.Windows.Forms.Padding(0);
+            this.tbPlace.Name = "tbPlace";
+            this.tbPlace.PreventEnterBeep = true;
+            this.tbPlace.Size = new System.Drawing.Size(253, 23);
+            this.tbPlace.TabIndex = 1;
+            this.tbPlace.Text = "盟升产线";
+            // 
+            // tbSerial
+            // 
+            // 
+            // 
+            // 
+            this.tbSerial.Border.Class = "TextBoxBorder";
+            this.tbSerial.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.tbSerial.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.tbSerial.Location = new System.Drawing.Point(66, 73);
+            this.tbSerial.Margin = new System.Windows.Forms.Padding(0);
+            this.tbSerial.Name = "tbSerial";
+            this.tbSerial.PreventEnterBeep = true;
+            this.tbSerial.Size = new System.Drawing.Size(253, 23);
+            this.tbSerial.TabIndex = 2;
+            // 
+            // tbTemp
+            // 
+            // 
+            // 
+            // 
+            this.tbTemp.Border.Class = "TextBoxBorder";
+            this.tbTemp.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.tbTemp.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.tbTemp.Location = new System.Drawing.Point(66, 99);
+            this.tbTemp.Margin = new System.Windows.Forms.Padding(0);
+            this.tbTemp.Name = "tbTemp";
+            this.tbTemp.PreventEnterBeep = true;
+            this.tbTemp.Size = new System.Drawing.Size(93, 23);
+            this.tbTemp.TabIndex = 3;
+            this.tbTemp.Text = "26℃";
+            // 
+            // tbRH
+            // 
+            // 
+            // 
+            // 
+            this.tbRH.Border.Class = "TextBoxBorder";
+            this.tbRH.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.tbRH.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.tbRH.Location = new System.Drawing.Point(225, 99);
+            this.tbRH.Margin = new System.Windows.Forms.Padding(0);
+            this.tbRH.Name = "tbRH";
+            this.tbRH.PreventEnterBeep = true;
+            this.tbRH.Size = new System.Drawing.Size(94, 23);
+            this.tbRH.TabIndex = 4;
+            this.tbRH.Text = "60%RH";
+            // 
+            // BtnLoadTpsConfig
+            // 
+            this.BtnLoadTpsConfig.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton;
+            this.BtnLoadTpsConfig.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
+            this.BtnLoadTpsConfig.Location = new System.Drawing.Point(6, 179);
+            this.BtnLoadTpsConfig.Margin = new System.Windows.Forms.Padding(0);
+            this.BtnLoadTpsConfig.Name = "BtnLoadTpsConfig";
+            this.BtnLoadTpsConfig.Size = new System.Drawing.Size(313, 18);
+            this.BtnLoadTpsConfig.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
+            this.BtnLoadTpsConfig.TabIndex = 7;
+            this.BtnLoadTpsConfig.Text = "加载产品";
+            this.BtnLoadTpsConfig.Click += new System.EventHandler(this.BtnLoadTpsConfig_Click);
+            // 
+            // BtnMessage
+            // 
+            this.BtnMessage.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton;
+            this.BtnMessage.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
+            this.BtnMessage.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.BtnMessage.Location = new System.Drawing.Point(190, 259);
+            this.BtnMessage.Margin = new System.Windows.Forms.Padding(0);
+            this.BtnMessage.Name = "BtnMessage";
+            this.BtnMessage.Size = new System.Drawing.Size(121, 18);
+            this.BtnMessage.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
+            this.BtnMessage.TabIndex = 15;
+            this.BtnMessage.Text = "消息";
+            this.BtnMessage.Click += new System.EventHandler(this.BtnMessage_Click);
+            // 
+            // BtnDevice
+            // 
+            this.BtnDevice.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton;
+            this.BtnDevice.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
+            this.BtnDevice.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.BtnDevice.Location = new System.Drawing.Point(6, 256);
+            this.BtnDevice.Margin = new System.Windows.Forms.Padding(0);
+            this.BtnDevice.Name = "BtnDevice";
+            this.BtnDevice.Size = new System.Drawing.Size(121, 24);
+            this.BtnDevice.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
+            this.BtnDevice.TabIndex = 13;
+            this.BtnDevice.Text = "设备";
+            this.BtnDevice.Click += new System.EventHandler(this.BtnDevice_Click);
+            // 
+            // circularProgress1
+            // 
+            // 
+            // 
+            // 
+            this.circularProgress1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.circularProgress1.Location = new System.Drawing.Point(116, 235);
+            this.circularProgress1.Margin = new System.Windows.Forms.Padding(0);
+            this.circularProgress1.Name = "circularProgress1";
+            this.circularProgress1.Size = new System.Drawing.Size(203, 18);
+            this.circularProgress1.Style = DevComponents.DotNetBar.eDotNetBarStyle.OfficeXP;
+            this.circularProgress1.TabIndex = 12;
+            // 
+            // BtnStop
+            // 
+            this.BtnStop.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton;
+            this.BtnStop.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
+            this.BtnStop.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.BtnStop.Location = new System.Drawing.Point(190, 211);
+            this.BtnStop.Margin = new System.Windows.Forms.Padding(0);
+            this.BtnStop.Name = "BtnStop";
+            this.BtnStop.Size = new System.Drawing.Size(121, 18);
+            this.BtnStop.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
+            this.BtnStop.TabIndex = 11;
+            this.BtnStop.Text = "停止测试";
+            this.BtnStop.Click += new System.EventHandler(this.BtnStop_Click);
+            // 
+            // BtnStart
+            // 
+            this.BtnStart.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton;
+            this.BtnStart.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
+            this.BtnStart.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.BtnStart.Location = new System.Drawing.Point(6, 211);
+            this.BtnStart.Margin = new System.Windows.Forms.Padding(0);
+            this.BtnStart.Name = "BtnStart";
+            this.BtnStart.Size = new System.Drawing.Size(121, 18);
+            this.BtnStart.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
+            this.BtnStart.TabIndex = 9;
+            this.BtnStart.Text = "开始测试";
+            this.BtnStart.Click += new System.EventHandler(this.BtnStart_Click);
+            // 
+            // cbbProduct
+            // 
+            this.cbbProduct.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.cbbProduct.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.cbbProduct.ItemHeight = 17;
+            this.cbbProduct.Location = new System.Drawing.Point(66, 151);
+            this.cbbProduct.Margin = new System.Windows.Forms.Padding(0);
+            this.cbbProduct.Name = "cbbProduct";
+            this.cbbProduct.Size = new System.Drawing.Size(253, 25);
+            this.cbbProduct.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
+            this.cbbProduct.TabIndex = 6;
+            // 
+            // tbTester
+            // 
+            // 
+            // 
+            // 
+            this.tbTester.Border.Class = "TextBoxBorder";
+            this.tbTester.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.tbTester.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.tbTester.Location = new System.Drawing.Point(66, 21);
+            this.tbTester.Margin = new System.Windows.Forms.Padding(0);
+            this.tbTester.Name = "tbTester";
+            this.tbTester.PreventEnterBeep = true;
+            this.tbTester.Size = new System.Drawing.Size(253, 23);
+            this.tbTester.TabIndex = 0;
+            this.tbTester.Text = "王杰";
+            // 
+            // layoutGroup1
+            // 
+            borderPattern1.Bottom = DevComponents.DotNetBar.Layout.LinePattern.Dot;
+            this.layoutGroup1.CaptionStyle.BorderPattern = borderPattern1;
+            this.layoutGroup1.CaptionStyle.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.layoutGroup1.CaptionStyle.TextColor = System.Drawing.Color.Navy;
+            this.layoutGroup1.Height = 208;
+            this.layoutGroup1.Items.AddRange(new DevComponents.DotNetBar.Layout.LayoutItemBase[] {
+            this.layoutControlItem1,
+            this.layoutControlItem2,
+            this.layoutControlItem3,
+            this.layoutControlItem6,
+            this.layoutControlItem7,
+            this.layoutControlItem5,
+            this.layoutControlItem4,
+            this.layoutControlItem12});
+            this.layoutGroup1.MinSize = new System.Drawing.Size(90, 25);
+            this.layoutGroup1.Name = "layoutGroup1";
+            this.layoutGroup1.Padding = new System.Windows.Forms.Padding(3);
+            this.layoutGroup1.Style.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.layoutGroup1.Text = "测试输入内容";
+            this.layoutGroup1.TextAlignment = DevComponents.DotNetBar.Layout.eTextAlignment.Left;
+            this.layoutGroup1.TextLineAlignment = DevComponents.DotNetBar.Layout.eTextLineAlignment.Top;
+            this.layoutGroup1.TextPosition = DevComponents.DotNetBar.Layout.eLayoutPosition.Top;
+            this.layoutGroup1.Width = 100;
+            this.layoutGroup1.WidthType = DevComponents.DotNetBar.Layout.eLayoutSizeType.Percent;
+            // 
+            // layoutControlItem1
+            // 
+            this.layoutControlItem1.Control = this.tbTester;
+            this.layoutControlItem1.Height = 26;
+            this.layoutControlItem1.MinSize = new System.Drawing.Size(90, 0);
+            this.layoutControlItem1.Name = "layoutControlItem1";
+            this.layoutControlItem1.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
+            this.layoutControlItem1.Style.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.layoutControlItem1.Text = "测试人员:";
+            this.layoutControlItem1.Width = 100;
+            this.layoutControlItem1.WidthType = DevComponents.DotNetBar.Layout.eLayoutSizeType.Percent;
+            // 
+            // layoutControlItem2
+            // 
+            this.layoutControlItem2.Control = this.tbPlace;
+            this.layoutControlItem2.Height = 26;
+            this.layoutControlItem2.MinSize = new System.Drawing.Size(90, 0);
+            this.layoutControlItem2.Name = "layoutControlItem2";
+            this.layoutControlItem2.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
+            this.layoutControlItem2.Style.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.layoutControlItem2.Text = "测试地点:";
+            this.layoutControlItem2.Width = 100;
+            this.layoutControlItem2.WidthType = DevComponents.DotNetBar.Layout.eLayoutSizeType.Percent;
+            // 
+            // layoutControlItem3
+            // 
+            this.layoutControlItem3.Control = this.tbSerial;
+            this.layoutControlItem3.Height = 26;
+            this.layoutControlItem3.MinSize = new System.Drawing.Size(90, 0);
+            this.layoutControlItem3.Name = "layoutControlItem3";
+            this.layoutControlItem3.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
+            this.layoutControlItem3.Style.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.layoutControlItem3.Text = "序列号:";
+            this.layoutControlItem3.Width = 100;
+            this.layoutControlItem3.WidthType = DevComponents.DotNetBar.Layout.eLayoutSizeType.Percent;
+            // 
+            // layoutControlItem6
+            // 
+            this.layoutControlItem6.Control = this.tbTemp;
+            this.layoutControlItem6.Height = 26;
+            this.layoutControlItem6.MinSize = new System.Drawing.Size(90, 0);
+            this.layoutControlItem6.Name = "layoutControlItem6";
+            this.layoutControlItem6.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
+            this.layoutControlItem6.Style.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.layoutControlItem6.Text = "环境温度:";
+            this.layoutControlItem6.Width = 50;
+            this.layoutControlItem6.WidthType = DevComponents.DotNetBar.Layout.eLayoutSizeType.Percent;
+            // 
+            // layoutControlItem7
+            // 
+            this.layoutControlItem7.Control = this.tbRH;
+            this.layoutControlItem7.Height = 26;
+            this.layoutControlItem7.MinSize = new System.Drawing.Size(90, 0);
+            this.layoutControlItem7.Name = "layoutControlItem7";
+            this.layoutControlItem7.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
+            this.layoutControlItem7.Style.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.layoutControlItem7.Text = "环境湿度:";
+            this.layoutControlItem7.Width = 50;
+            this.layoutControlItem7.WidthType = DevComponents.DotNetBar.Layout.eLayoutSizeType.Percent;
+            // 
+            // layoutControlItem5
+            // 
+            this.layoutControlItem5.Control = this.tbTestProject;
+            this.layoutControlItem5.Height = 26;
+            this.layoutControlItem5.MinSize = new System.Drawing.Size(90, 0);
+            this.layoutControlItem5.Name = "layoutControlItem5";
+            this.layoutControlItem5.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
+            this.layoutControlItem5.Style.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.layoutControlItem5.Text = "试验项目:";
+            this.layoutControlItem5.Width = 100;
+            this.layoutControlItem5.WidthType = DevComponents.DotNetBar.Layout.eLayoutSizeType.Percent;
+            // 
+            // layoutControlItem4
+            // 
+            this.layoutControlItem4.Control = this.cbbProduct;
+            this.layoutControlItem4.Height = 25;
+            this.layoutControlItem4.MinSize = new System.Drawing.Size(48, 14);
+            this.layoutControlItem4.Name = "layoutControlItem4";
+            this.layoutControlItem4.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
+            this.layoutControlItem4.Style.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.layoutControlItem4.Text = "测试产品:";
+            this.layoutControlItem4.Width = 100;
+            this.layoutControlItem4.WidthType = DevComponents.DotNetBar.Layout.eLayoutSizeType.Percent;
+            // 
+            // layoutControlItem12
+            // 
+            this.layoutControlItem12.Control = this.BtnLoadTpsConfig;
+            this.layoutControlItem12.Height = 24;
+            this.layoutControlItem12.MinSize = new System.Drawing.Size(24, 16);
+            this.layoutControlItem12.Name = "layoutControlItem12";
+            this.layoutControlItem12.Padding = new System.Windows.Forms.Padding(3);
+            this.layoutControlItem12.Width = 100;
+            this.layoutControlItem12.WidthType = DevComponents.DotNetBar.Layout.eLayoutSizeType.Percent;
+            // 
+            // layoutGroup2
+            // 
+            this.layoutGroup2.CaptionStyle.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.layoutGroup2.CaptionStyle.TextColor = System.Drawing.Color.Navy;
+            this.layoutGroup2.Height = 80;
+            this.layoutGroup2.Items.AddRange(new DevComponents.DotNetBar.Layout.LayoutItemBase[] {
+            this.layoutControlItem8,
+            this.layoutSpacerItem1,
+            this.layoutControlItem9,
+            this.labRemainTime,
+            this.layoutControlItem10,
+            this.layoutSpacerItem2,
+            this.layoutControlItem11});
+            this.layoutGroup2.MinSize = new System.Drawing.Size(90, 25);
+            this.layoutGroup2.Name = "layoutGroup2";
+            this.layoutGroup2.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
+            this.layoutGroup2.Text = "测试控制";
+            this.layoutGroup2.TextPosition = DevComponents.DotNetBar.Layout.eLayoutPosition.Top;
+            this.layoutGroup2.TextVisible = false;
+            this.layoutGroup2.Width = 100;
+            this.layoutGroup2.WidthType = DevComponents.DotNetBar.Layout.eLayoutSizeType.Percent;
+            // 
+            // layoutControlItem8
+            // 
+            this.layoutControlItem8.Control = this.BtnStart;
+            this.layoutControlItem8.Height = 24;
+            this.layoutControlItem8.MinSize = new System.Drawing.Size(24, 16);
+            this.layoutControlItem8.Name = "layoutControlItem8";
+            this.layoutControlItem8.Padding = new System.Windows.Forms.Padding(3);
+            this.layoutControlItem8.Width = 40;
+            this.layoutControlItem8.WidthType = DevComponents.DotNetBar.Layout.eLayoutSizeType.Percent;
+            // 
+            // layoutSpacerItem1
+            // 
+            this.layoutSpacerItem1.Height = 24;
+            this.layoutSpacerItem1.Name = "layoutSpacerItem1";
+            this.layoutSpacerItem1.Padding = new System.Windows.Forms.Padding(3);
+            this.layoutSpacerItem1.Width = 18;
+            this.layoutSpacerItem1.WidthType = DevComponents.DotNetBar.Layout.eLayoutSizeType.Percent;
+            // 
+            // layoutControlItem9
+            // 
+            this.layoutControlItem9.Control = this.BtnStop;
+            this.layoutControlItem9.Height = 24;
+            this.layoutControlItem9.MinSize = new System.Drawing.Size(24, 16);
+            this.layoutControlItem9.Name = "layoutControlItem9";
+            this.layoutControlItem9.Padding = new System.Windows.Forms.Padding(3);
+            this.layoutControlItem9.Width = 40;
+            this.layoutControlItem9.WidthType = DevComponents.DotNetBar.Layout.eLayoutSizeType.Percent;
+            // 
+            // labRemainTime
+            // 
+            this.labRemainTime.Control = this.circularProgress1;
+            this.labRemainTime.Height = 24;
+            this.labRemainTime.MinSize = new System.Drawing.Size(48, 14);
+            this.labRemainTime.Name = "labRemainTime";
+            this.labRemainTime.Padding = new System.Windows.Forms.Padding(3);
+            this.labRemainTime.Style.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.labRemainTime.Text = "剩余时间: 1分45秒";
+            this.labRemainTime.Width = 100;
+            this.labRemainTime.WidthType = DevComponents.DotNetBar.Layout.eLayoutSizeType.Percent;
+            // 
+            // layoutControlItem10
+            // 
+            this.layoutControlItem10.Control = this.BtnDevice;
+            this.layoutControlItem10.Height = 24;
+            this.layoutControlItem10.MinSize = new System.Drawing.Size(24, 16);
+            this.layoutControlItem10.Name = "layoutControlItem10";
+            this.layoutControlItem10.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
+            this.layoutControlItem10.Width = 40;
+            this.layoutControlItem10.WidthType = DevComponents.DotNetBar.Layout.eLayoutSizeType.Percent;
+            // 
+            // layoutSpacerItem2
+            // 
+            this.layoutSpacerItem2.Height = 24;
+            this.layoutSpacerItem2.Name = "layoutSpacerItem2";
+            this.layoutSpacerItem2.Padding = new System.Windows.Forms.Padding(3);
+            this.layoutSpacerItem2.Width = 18;
+            this.layoutSpacerItem2.WidthType = DevComponents.DotNetBar.Layout.eLayoutSizeType.Percent;
+            // 
+            // layoutControlItem11
+            // 
+            this.layoutControlItem11.Control = this.BtnMessage;
+            this.layoutControlItem11.Height = 24;
+            this.layoutControlItem11.MinSize = new System.Drawing.Size(24, 16);
+            this.layoutControlItem11.Name = "layoutControlItem11";
+            this.layoutControlItem11.Padding = new System.Windows.Forms.Padding(3);
+            this.layoutControlItem11.Width = 40;
+            this.layoutControlItem11.WidthType = DevComponents.DotNetBar.Layout.eLayoutSizeType.Percent;
+            // 
+            // panel1
+            // 
+            this.panel1.Controls.Add(this.superTabControl1);
+            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.panel1.Location = new System.Drawing.Point(0, 0);
+            this.panel1.Margin = new System.Windows.Forms.Padding(2);
+            this.panel1.Name = "panel1";
+            this.panel1.Size = new System.Drawing.Size(536, 578);
+            this.panel1.TabIndex = 0;
+            // 
+            // superTabControl1
+            // 
+            // 
+            // 
+            // 
+            // 
+            // 
+            // 
+            this.superTabControl1.ControlBox.CloseBox.Name = "";
+            // 
+            // 
+            // 
+            this.superTabControl1.ControlBox.MenuBox.Name = "";
+            this.superTabControl1.ControlBox.Name = "";
+            this.superTabControl1.ControlBox.SubItems.AddRange(new DevComponents.DotNetBar.BaseItem[] {
+            this.superTabControl1.ControlBox.MenuBox,
+            this.superTabControl1.ControlBox.CloseBox});
+            this.superTabControl1.Controls.Add(this.superTabControlPanel1);
+            this.superTabControl1.Controls.Add(this.superTabControlPanel2);
+            this.superTabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.superTabControl1.Location = new System.Drawing.Point(0, 0);
+            this.superTabControl1.Margin = new System.Windows.Forms.Padding(2);
+            this.superTabControl1.Name = "superTabControl1";
+            this.superTabControl1.ReorderTabsEnabled = true;
+            this.superTabControl1.SelectedTabFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Bold);
+            this.superTabControl1.SelectedTabIndex = 1;
+            this.superTabControl1.Size = new System.Drawing.Size(536, 578);
+            this.superTabControl1.TabFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.superTabControl1.TabIndex = 0;
+            this.superTabControl1.Tabs.AddRange(new DevComponents.DotNetBar.BaseItem[] {
+            this.tabTestData,
+            this.tabManualData});
+            this.superTabControl1.Text = "superTabControl1";
+            // 
+            // superTabControlPanel1
+            // 
+            this.superTabControlPanel1.Controls.Add(this.dgvTestData);
+            this.superTabControlPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.superTabControlPanel1.Location = new System.Drawing.Point(0, 28);
+            this.superTabControlPanel1.Margin = new System.Windows.Forms.Padding(2);
+            this.superTabControlPanel1.Name = "superTabControlPanel1";
+            this.superTabControlPanel1.Size = new System.Drawing.Size(536, 550);
+            this.superTabControlPanel1.TabIndex = 1;
+            this.superTabControlPanel1.TabItem = this.tabTestData;
+            // 
+            // dgvTestData
+            // 
+            this.dgvTestData.AllowUserToAddRows = false;
+            this.dgvTestData.AllowUserToDeleteRows = false;
+            this.dgvTestData.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
+            this.dgvTestData.BackgroundColor = System.Drawing.Color.Azure;
+            this.dgvTestData.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+            dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
+            dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Window;
+            dataGridViewCellStyle1.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.ControlText;
+            dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
+            dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.ControlText;
+            dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
+            this.dgvTestData.DefaultCellStyle = dataGridViewCellStyle1;
+            this.dgvTestData.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.dgvTestData.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(208)))), ((int)(((byte)(215)))), ((int)(((byte)(229)))));
+            this.dgvTestData.Location = new System.Drawing.Point(0, 0);
+            this.dgvTestData.Margin = new System.Windows.Forms.Padding(2);
+            this.dgvTestData.Name = "dgvTestData";
+            this.dgvTestData.ReadOnly = true;
+            this.dgvTestData.RowHeadersVisible = false;
+            this.dgvTestData.RowHeadersWidth = 51;
+            this.dgvTestData.RowTemplate.Height = 27;
+            this.dgvTestData.Size = new System.Drawing.Size(536, 550);
+            this.dgvTestData.TabIndex = 0;
+            this.dgvTestData.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvTestData_CellContentClick);
+            // 
+            // tabTestData
+            // 
+            this.tabTestData.AttachedControl = this.superTabControlPanel1;
+            this.tabTestData.GlobalItem = false;
+            this.tabTestData.Name = "tabTestData";
+            this.tabTestData.Text = "自动测试数据";
+            // 
+            // superTabControlPanel2
+            // 
+            this.superTabControlPanel2.Controls.Add(this.dgvManualData);
+            this.superTabControlPanel2.Controls.Add(this.panelEx1);
+            this.superTabControlPanel2.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.superTabControlPanel2.Location = new System.Drawing.Point(0, 28);
+            this.superTabControlPanel2.Margin = new System.Windows.Forms.Padding(2);
+            this.superTabControlPanel2.Name = "superTabControlPanel2";
+            this.superTabControlPanel2.Size = new System.Drawing.Size(536, 550);
+            this.superTabControlPanel2.TabIndex = 0;
+            this.superTabControlPanel2.TabItem = this.tabManualData;
+            // 
+            // dgvManualData
+            // 
+            this.dgvManualData.AllowUserToAddRows = false;
+            this.dgvManualData.AllowUserToDeleteRows = false;
+            this.dgvManualData.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;
+            this.dgvManualData.BackgroundColor = System.Drawing.Color.Azure;
+            this.dgvManualData.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+            dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
+            dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window;
+            dataGridViewCellStyle2.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText;
+            dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight;
+            dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.ControlText;
+            dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
+            this.dgvManualData.DefaultCellStyle = dataGridViewCellStyle2;
+            this.dgvManualData.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.dgvManualData.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(208)))), ((int)(((byte)(215)))), ((int)(((byte)(229)))));
+            this.dgvManualData.Location = new System.Drawing.Point(0, 54);
+            this.dgvManualData.Margin = new System.Windows.Forms.Padding(2);
+            this.dgvManualData.Name = "dgvManualData";
+            this.dgvManualData.ReadOnly = true;
+            this.dgvManualData.RowHeadersVisible = false;
+            this.dgvManualData.RowHeadersWidth = 51;
+            this.dgvManualData.RowTemplate.Height = 27;
+            this.dgvManualData.Size = new System.Drawing.Size(536, 496);
+            this.dgvManualData.TabIndex = 4;
+            // 
+            // panelEx1
+            // 
+            this.panelEx1.CanvasColor = System.Drawing.SystemColors.Control;
+            this.panelEx1.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
+            this.panelEx1.Controls.Add(this.BtnLoadManualData);
+            this.panelEx1.Controls.Add(this.BtnSaveManualData);
+            this.panelEx1.DisabledBackColor = System.Drawing.Color.Empty;
+            this.panelEx1.Dock = System.Windows.Forms.DockStyle.Top;
+            this.panelEx1.Location = new System.Drawing.Point(0, 0);
+            this.panelEx1.Margin = new System.Windows.Forms.Padding(2);
+            this.panelEx1.Name = "panelEx1";
+            this.panelEx1.Size = new System.Drawing.Size(536, 54);
+            this.panelEx1.Style.Alignment = System.Drawing.StringAlignment.Center;
+            this.panelEx1.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground;
+            this.panelEx1.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2;
+            this.panelEx1.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine;
+            this.panelEx1.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder;
+            this.panelEx1.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText;
+            this.panelEx1.Style.GradientAngle = 90;
+            this.panelEx1.TabIndex = 0;
+            // 
+            // BtnLoadManualData
+            // 
+            this.BtnLoadManualData.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton;
+            this.BtnLoadManualData.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
+            this.BtnLoadManualData.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.BtnLoadManualData.Location = new System.Drawing.Point(116, 12);
+            this.BtnLoadManualData.Margin = new System.Windows.Forms.Padding(2);
+            this.BtnLoadManualData.Name = "BtnLoadManualData";
+            this.BtnLoadManualData.Size = new System.Drawing.Size(74, 30);
+            this.BtnLoadManualData.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
+            this.BtnLoadManualData.TabIndex = 0;
+            this.BtnLoadManualData.Text = "加载手动数据";
+            // 
+            // BtnSaveManualData
+            // 
+            this.BtnSaveManualData.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton;
+            this.BtnSaveManualData.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
+            this.BtnSaveManualData.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.BtnSaveManualData.Location = new System.Drawing.Point(12, 12);
+            this.BtnSaveManualData.Margin = new System.Windows.Forms.Padding(2);
+            this.BtnSaveManualData.Name = "BtnSaveManualData";
+            this.BtnSaveManualData.Size = new System.Drawing.Size(74, 30);
+            this.BtnSaveManualData.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
+            this.BtnSaveManualData.TabIndex = 0;
+            this.BtnSaveManualData.Text = "保存手动数据";
+            // 
+            // tabManualData
+            // 
+            this.tabManualData.AttachedControl = this.superTabControlPanel2;
+            this.tabManualData.GlobalItem = false;
+            this.tabManualData.Name = "tabManualData";
+            this.tabManualData.Text = "手动测试数据";
+            // 
+            // FrmMain
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(864, 578);
+            this.Controls.Add(this.splitContainer1);
+            this.Margin = new System.Windows.Forms.Padding(2);
+            this.Name = "FrmMain";
+            this.Text = "测试程序界面";
+            this.Load += new System.EventHandler(this.FrmMain_Load);
+            this.splitContainer1.Panel1.ResumeLayout(false);
+            this.splitContainer1.Panel2.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
+            this.splitContainer1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.advTree1)).EndInit();
+            this.contextMenuStrip1.ResumeLayout(false);
+            this.layoutControl1.ResumeLayout(false);
+            this.panel1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.superTabControl1)).EndInit();
+            this.superTabControl1.ResumeLayout(false);
+            this.superTabControlPanel1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.dgvTestData)).EndInit();
+            this.superTabControlPanel2.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.dgvManualData)).EndInit();
+            this.panelEx1.ResumeLayout(false);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.SplitContainer splitContainer1;
+        private DevComponents.DotNetBar.Layout.LayoutControl layoutControl1;
+        private DevComponents.DotNetBar.Layout.LayoutGroup layoutGroup1;
+        private DevComponents.DotNetBar.Controls.TextBoxX tbRH;
+        private DevComponents.DotNetBar.Controls.TextBoxX tbTemp;
+        private DevComponents.DotNetBar.Controls.ComboBoxEx cbbProduct;
+        private DevComponents.DotNetBar.Controls.TextBoxX tbSerial;
+        private DevComponents.DotNetBar.Controls.TextBoxX tbPlace;
+        private DevComponents.DotNetBar.Controls.TextBoxX tbTester;
+        private DevComponents.DotNetBar.Layout.LayoutControlItem layoutControlItem1;
+        private DevComponents.DotNetBar.Layout.LayoutControlItem layoutControlItem2;
+        private DevComponents.DotNetBar.Layout.LayoutControlItem layoutControlItem3;
+        private DevComponents.DotNetBar.Layout.LayoutControlItem layoutControlItem6;
+        private DevComponents.DotNetBar.Layout.LayoutControlItem layoutControlItem7;
+        private DevComponents.DotNetBar.Layout.LayoutControlItem layoutControlItem4;
+        private DevComponents.DotNetBar.ButtonX BtnStop;
+        private DevComponents.DotNetBar.ButtonX BtnStart;
+        private DevComponents.DotNetBar.Layout.LayoutGroup layoutGroup2;
+        private DevComponents.DotNetBar.Layout.LayoutControlItem layoutControlItem8;
+        private DevComponents.DotNetBar.Layout.LayoutSpacerItem layoutSpacerItem1;
+        private DevComponents.DotNetBar.Layout.LayoutControlItem layoutControlItem9;
+        private DevComponents.DotNetBar.ButtonX BtnMessage;
+        private DevComponents.DotNetBar.ButtonX BtnDevice;
+        private DevComponents.DotNetBar.Controls.CircularProgress circularProgress1;
+        private DevComponents.DotNetBar.Layout.LayoutControlItem labRemainTime;
+        private DevComponents.DotNetBar.Layout.LayoutControlItem layoutControlItem10;
+        private DevComponents.DotNetBar.Layout.LayoutSpacerItem layoutSpacerItem2;
+        private DevComponents.DotNetBar.Layout.LayoutControlItem layoutControlItem11;
+        private DevComponents.AdvTree.Node node1;
+        private DevComponents.AdvTree.NodeConnector nodeConnector1;
+        private DevComponents.DotNetBar.ElementStyle elementStyle1;
+        private System.Windows.Forms.Panel panel1;
+        private DevComponents.DotNetBar.ButtonX BtnLoadTpsConfig;
+        private DevComponents.DotNetBar.Layout.LayoutControlItem layoutControlItem12;
+        private DevComponents.DotNetBar.Controls.TextBoxX tbTestProject;
+        private DevComponents.DotNetBar.Layout.LayoutControlItem layoutControlItem5;
+        private DevComponents.AdvTree.AdvTree advTree1;
+        private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
+        private System.Windows.Forms.ToolStripMenuItem tsmChannel;
+        private System.Windows.Forms.ToolStripMenuItem tmsTestNode;
+        private System.Windows.Forms.ToolStripMenuItem tsmUnSelecteAll;
+        private System.Windows.Forms.ToolStripMenuItem tsmSelectAll;
+        private DevComponents.DotNetBar.SuperTabControl superTabControl1;
+        private DevComponents.DotNetBar.SuperTabControlPanel superTabControlPanel1;
+        private DevComponents.DotNetBar.SuperTabItem tabTestData;
+        private DevComponents.DotNetBar.SuperTabControlPanel superTabControlPanel2;
+        private DevComponents.DotNetBar.SuperTabItem tabManualData;
+        private DevComponents.DotNetBar.Controls.DataGridViewX dgvManualData;
+        private DevComponents.DotNetBar.PanelEx panelEx1;
+        private DevComponents.DotNetBar.Controls.DataGridViewX dgvTestData;
+        private DevComponents.DotNetBar.ButtonX BtnLoadManualData;
+        private DevComponents.DotNetBar.ButtonX BtnSaveManualData;
+    }
+}
+

+ 473 - 0
tps/TpsAppDemo/FrmMain.cs

@@ -0,0 +1,473 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using PowerTestDemo.com;
+using PowerTestDemo.views;
+
+namespace PowerTestDemo
+{
+    public partial class FrmMain : Form
+    {
+        /// <summary>
+        /// config目录下存在的测试配置文件信息
+        /// </summary>
+        IList<FileNode> FileNodes;
+        bool comFlag = false;
+
+        /// <summary>
+        /// 当前选择的测试配置文件信息
+        /// </summary>
+        FileNode currFileNode;
+
+        FrmMsg frmMsg;
+        FrmDevice frmDevice;
+
+        public FrmMain()
+        {
+            InitializeComponent();
+            frmMsg = new FrmMsg();
+            frmDevice = new FrmDevice();
+        }
+
+        private void FrmMain_Load(object sender, EventArgs e)
+        {
+            FileNodes = new BindingList<FileNode>();
+            cbbProduct.ValueMember = "TestProject";
+            cbbProduct.DisplayMember = "DisplayName";
+            cbbProduct.DataSource = FileNodes;
+
+            //加载配置文件信息
+            string folder = Path.Combine(Bundle.bundle.BundleDir, "config");
+            if(Directory.Exists(folder))
+            {
+                //文件名示例:测试#常温测试#035变频模块.xlsx
+                string[] files = Directory.GetFiles(folder, "测试#*.xlsx");
+                foreach (string file in files)
+                {
+                    FileNode node = new FileNode();
+                    node.FilePath = file;
+                    string fname = Path.GetFileNameWithoutExtension(file);
+                    fname = fname.Substring(fname.IndexOf('#') + 1);
+                    node.DisplayName = fname;
+                    node.TestProject = fname.Substring(0, fname.IndexOf('#'));
+                    node.ProductName = fname.Substring(fname.IndexOf('#') + 1);
+                    FileNodes.Add(node);
+                }
+            }
+
+            cbbProduct.Refresh();
+            comFlag = true;
+            superTabControl1.SelectedTabIndex = 0;
+        }
+
+        private void BtnLoadTpsConfig_Click(object sender, EventArgs e)
+        {
+            if (cbbProduct.SelectedIndex >= 0 && cbbProduct.SelectedItem != null)
+            {
+               //把试验项目显示到界面
+               FileNode fn = (FileNode)cbbProduct.SelectedItem;
+
+                //加载内容
+                if (fn.Tps == null)
+                {
+                    MainTps tps = new MainTps();
+                    try
+                    {
+                        if (tps.LoadConfigFile(fn.FilePath))
+                        {
+                            fn.Tps = tps;
+                        }
+                        else
+                        {
+                            ShowMessage(MsgType.Error, string.Format("加载配置文件失败,文件路径:{0}", fn.FilePath));
+                            return;
+                        }
+                    }
+                    catch(Exception ee)
+                    {
+                        ShowMessage(MsgType.Error, string.Format("加载配置文件出现异常:{0},详细请查看日志文件。", ee.Message));
+                        Bundle.log.WriteLog(AppLibs.Host.LogLevel.Error, "类:FrmMain,方法:BtnLoadTpsConfig_Click", ee.Message + ee.StackTrace);
+                    }
+                }
+
+                //初始化界面相关
+                ShowTps(fn);
+            }
+        }
+
+        List<TestMessage> tMsgs = new List<TestMessage>();
+        void ShowMessage(MsgType msgType , string msg)
+        {
+            if (msgType == MsgType.Error)
+            {
+                errorCount++;
+                this.Invoke(new Action(() => {
+                    BtnMessage.Text = "消息/错误:" + errorCount.ToString();
+                    BtnMessage.ForeColor = Color.Red;
+                }));
+            }
+            tMsgs.Add(new TestMessage() { type = msgType, message = msg });
+            frmMsg.ShowMsg(tMsgs);
+        }
+
+        /// <summary>
+        /// 清空消息
+        /// </summary>
+        void ClearMessage()
+        {
+            tMsgs.Clear();
+            frmMsg.ClearMsg();
+        }
+
+        void ShowTps(FileNode fn)
+        {
+            if (currFileNode != null && currFileNode.Tps!= null )
+            {
+                currFileNode.Tps.MessageEvent -= Tps_MessageEvent;
+                currFileNode.Tps.ManualTableCellChanged -= Tps_ManualTableCellChanged;
+                currFileNode.Tps.TestTableCellChanged -= Tps_TestTableCellChanged;
+            }
+
+            currFileNode = fn;
+            if(currFileNode.Tps != null)
+            {
+                currFileNode.Tps.MessageEvent += Tps_MessageEvent;
+                currFileNode.Tps.ManualTableCellChanged += Tps_ManualTableCellChanged;
+                currFileNode.Tps.TestTableCellChanged += Tps_TestTableCellChanged;
+            }
+
+            tbTestProject.Text = fn.TestProject;
+            displayTree(true);
+            //显示主界面
+            dgvTestData.DataSource = currFileNode.Tps.TestTable;
+            //设置列宽
+            // dgvTestData.Columns[0].Width = 120;
+           // dgvTestData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;
+            //for (int i = 0; i < dgvTestData.Columns.Count; i++)
+            //{
+            //    dgvTestData.Columns[i].Width = 120;
+            //}
+            //显示人工配置界面
+            dgvManualData.DataSource = currFileNode.Tps.ManualTable;
+
+            //显示仪器列表,把当前TPS使用的仪器和仪器检查界面绑定
+            frmDevice.ShowDevices(currFileNode.Tps.Devices);
+        }
+
+        private void Tps_TestTableCellChanged(int row, int cell, object value)
+        {
+            this.Invoke(new Action(() => {
+                currFileNode.Tps.TestTable.Rows[row][cell] = value;
+            }));
+        }
+
+        private void Tps_ManualTableCellChanged(int row, int cell, object value)
+        {
+            this.Invoke(new Action(() => {
+                currFileNode.Tps.ManualTable.Rows[row][cell] = value;
+            }));
+        }
+
+        int errorCount = 0;
+        private void Tps_MessageEvent(MsgType msgType, string msg)
+        {
+            ShowMessage(msgType, msg);
+        }
+
+        bool isOrderByChannel = true;
+        Task task;
+        private void BtnStart_Click(object sender, EventArgs e)
+        {
+            if (currFileNode == null)
+                return;
+
+            BtnLoadTpsConfig.Enabled = false;
+            BtnStart.Enabled = false;
+
+            currFileNode.Tps.Tester = tbTester.Text;
+            currFileNode.Tps.Place = tbPlace.Text;
+            currFileNode.Tps.Product = currFileNode.ProductName;
+            currFileNode.Tps.Serial = tbSerial.Text;
+            currFileNode.Tps.Temperature = tbTemp.Text;
+            currFileNode.Tps.Humidity = tbRH.Text;
+            currFileNode.Tps.TestProject = tbTestProject.Text;
+
+            ClearMessage();
+            //检查仪器,如果OK则开始测试
+            if(currFileNode.Tps.CheckDevices())
+            {
+                if(BtnDevice.ForeColor == Color.Red)
+                {
+                    BtnDevice.ForeColor = Color.Black;
+                }
+
+                StartTest();
+            }
+            else
+            {
+                //设备检查不通过,需要提醒用户确认
+                BtnDevice.ForeColor = Color.Red;
+                //显示仪器设置界面
+                if(MessageBox.Show("设备参数异常,是否继续测试?","警告",MessageBoxButtons.YesNo) == DialogResult.Yes)
+                {
+                    StartTest();
+                }
+
+                BtnLoadTpsConfig.Enabled = true;
+                BtnStart.Enabled = true;
+            }
+        }
+
+
+        void StartTest()
+        {
+            //开始测试的时候重置测试表格
+            currFileNode.Tps.ResetTestTable();
+            // currFileNode.Tps.ResetManualTable();
+            //dgvManualData.DataSource = null;
+            //dgvManualData.DataSource = currFileNode.Tps.ManualTable;
+
+            dgvTestData.DataSource = null;
+            dgvTestData.DataSource = currFileNode.Tps.TestTable;
+
+            task = new Task(new Action(() => {
+                //执行测试过程
+                currFileNode.Tps.Start(isOrderByChannel);
+
+                this.Invoke(new Action(() => {
+                    BtnLoadTpsConfig.Enabled = true;
+                    BtnStart.Enabled = true;
+                }));
+
+            }));
+            task.Start();
+        }
+
+        private void BtnStop_Click(object sender, EventArgs e)
+        {
+            currFileNode.Tps.Stop();
+            if(task != null && task.IsCompleted == false)
+            {
+                //等待任务退出
+                task.Wait();
+            }
+            BtnStart.Enabled = true;
+            BtnLoadTpsConfig.Enabled = true;
+        }
+
+        private void BtnDevice_Click(object sender, EventArgs e)
+        {
+            if(currFileNode != null)
+            {
+                //点开按钮前检查仪器状态,并根据状态来显示不同背景颜色
+                currFileNode.Tps.CheckDevices();
+            }
+            frmDevice.ShowDialog();
+        }
+
+        private void BtnMessage_Click(object sender, EventArgs e)
+        {
+            frmMsg.ShowDialog();
+            errorCount = 0;
+            BtnMessage.ForeColor = Color.Black;
+            BtnMessage.Text = "消息";
+        }
+
+        private void advTree1_NodeDoubleClick(object sender, DevComponents.AdvTree.TreeNodeMouseEventArgs e)
+        {
+            //打开注释,则启用各测试指标的各自界面,否则只用公共界面
+
+            //if(e.Node.Tag != null)
+            //{
+            //    TestNode node = (TestNode)e.Node.Tag;
+            //    //没有界面的就只清除显示
+            //    if (node.TestModel.UC == null)
+            //        panel1.Controls.Clear();
+
+            //    //相同的界面不做处理
+            //    if (panel1.Controls.Count > 0 && panel1.Controls[0] == node.TestModel.UC)
+            //        return;
+
+            //    panel1.Controls.Clear();
+            //    panel1.Controls.Add(node.TestModel.UC);
+            //    node.TestModel.UC.Dock = DockStyle.Fill;
+            //    node.TestModel.UC.Visible = true;
+            //}           
+        }
+
+        //树形控件按通道分类
+        private void tsmChannel_Click(object sender, EventArgs e)
+        {
+            displayTree(true);
+        }
+
+        //树形控件按指标分类
+        private void tmsTestNode_Click(object sender, EventArgs e)
+        {
+            displayTree(false);
+        }
+
+        bool treeCanSelect = true;
+        private void tsmSelectAll_Click(object sender, EventArgs e)
+        {
+            checkAllNode(true);
+        }
+
+        private void tsmUnSelecteAll_Click(object sender, EventArgs e)
+        {
+            checkAllNode(false);
+        }
+
+        //选或者反选所有节点
+        void checkAllNode(bool isChecked)
+        {
+            treeCanSelect = false;
+            foreach (DevComponents.AdvTree.Node node in advTree1.Nodes)
+            {
+                node.Checked = isChecked;
+                if (node.Nodes.Count > 0)
+                {
+                    foreach (DevComponents.AdvTree.Node child in node.Nodes)
+                    {
+                        child.Checked = isChecked;
+                    }
+                }
+            }
+            treeCanSelect = true;
+        }
+
+        /// <summary>
+        /// 显示测试指标的树结构
+        /// </summary>
+        /// <param name="isOrderByChannel">是否按通道来显示</param>
+        void displayTree(bool isOrderByChannel)
+        {
+            this.isOrderByChannel = isOrderByChannel;
+            advTree1.BeginUpdate();
+            treeCanSelect = false;
+            advTree1.Nodes.Clear();
+            IEnumerable<string> parents = null;
+            if(isOrderByChannel)
+            {
+                 parents = (from x in currFileNode.Tps.TestNodes select x.Channel).ToList().Distinct();
+            }
+            else
+            {
+                parents = (from x in currFileNode.Tps.TestNodes select x.Name).ToList().Distinct();
+            }
+
+            if (parents == null)
+                return;
+
+            List<TestNode> childs = null;
+            foreach (string chName in parents)
+            {
+                DevComponents.AdvTree.Node parent = new DevComponents.AdvTree.Node();
+                parent.Text = chName;
+                parent.CheckBoxVisible = true;
+                parent.Tag = null;
+                if (isOrderByChannel)
+                {
+                    childs = currFileNode.Tps.TestNodes.Where(x => x.Channel == chName).ToList();
+                }
+                else
+                {
+                    childs = currFileNode.Tps.TestNodes.Where(x => x.Name == chName).ToList();
+                }
+                
+                foreach (TestNode node in childs)
+                {
+                    DevComponents.AdvTree.Node treeNode = new DevComponents.AdvTree.Node();
+                    if (isOrderByChannel)
+                    {
+                        treeNode.Text = node.Name;
+                    }
+                    else
+                    {
+                        treeNode.Text = node.Channel;
+                    }
+
+                    treeNode.CheckBoxVisible = true;
+                    if (node.IsSelected)
+                    {
+                        treeNode.Checked = true;
+                        parent.Checked = true;
+                    }
+                    treeNode.Tag = node;
+                    parent.Nodes.Add(treeNode);
+                }
+                advTree1.Nodes.Add(parent);
+            }
+
+            //如果父节点只有一个,即只有一个通道,则不显示通道
+            if (advTree1.Nodes.Count == 1)
+            {
+                DevComponents.AdvTree.Node root = advTree1.Nodes[0];
+                advTree1.Nodes.Clear();
+                if (root.Nodes.Count == 1)
+                {
+                    advTree1.Nodes.Add(root.Nodes[0]);
+                }
+                else
+                {
+                    List<DevComponents.AdvTree.Node> listtemp = new List<DevComponents.AdvTree.Node>();
+                    foreach (DevComponents.AdvTree.Node item in root.Nodes)
+                    {
+                        listtemp.Add(item);
+                    }
+                    for (int i = 0; i < listtemp.Count; i++)
+                    {
+                        DevComponents.AdvTree.Node temp;
+                        try
+                        {
+                            temp = (DevComponents.AdvTree.Node)listtemp[i];
+                            advTree1.Nodes.Add(temp);
+                        }
+                        catch (Exception ex)
+                        {
+                        }
+                    }
+                }
+            }
+
+            treeCanSelect = true;
+            advTree1.EndUpdate();
+            advTree1.Refresh();
+            advTree1.ExpandAll();
+        }
+
+        /// <summary>
+        /// 父节点全选或者反选,子节点采用一致的动作
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void advTree1_AfterCheck(object sender, DevComponents.AdvTree.AdvTreeCellEventArgs e)
+        {
+            if(treeCanSelect && e.Cell.Parent.Tag == null)
+            {
+                //表明选到了顶层,把子节点的选中状态和当前一致
+                foreach (DevComponents.AdvTree.Node node in e.Cell.Parent.Nodes)
+                {
+                    node.Checked = e.Cell.Checked;
+                }
+            }
+            else if(e.Cell.Parent.Tag != null)
+            {
+                TestNode node = (TestNode)e.Cell.Parent.Tag;
+                node.IsSelected = e.Cell.Checked;
+            }
+        }
+
+        private void dgvTestData_CellContentClick(object sender, DataGridViewCellEventArgs e)
+        {
+
+        }
+    }
+}

+ 123 - 0
tps/TpsAppDemo/FrmMain.resx

@@ -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>
+  <metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>

+ 786 - 0
tps/TpsAppDemo/MainTps.cs

@@ -0,0 +1,786 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.ComponentModel;
+using PowerTestDemo.com;
+using System.IO;
+using PowerTestDemo.models;
+using System.Data;
+using AppLibs.Devices;
+
+namespace PowerTestDemo
+{
+    public delegate void DltShowMsg(MsgType msgType, string msg);
+    public delegate void DltCellValueChanged(int row, int cell, object value);
+    /// <summary>
+    /// 一个测试文件对应的测试项目
+    /// </summary>
+    public class MainTps
+    {
+        /// <summary>
+        /// 测试人员
+        /// </summary>
+        public string Tester { get; set; }
+        //测试地点
+        public string Place { get; set; }
+        //环境温度
+        public string Temperature { get; set; }
+        //当前测试的产品序列号
+        public string Serial { get; set; }
+        //环境湿度
+        public string Humidity { get; set; }
+        //待测产品
+        public string Product { get; set; }
+        //测试项目
+        public string TestProject { get; set; }
+        //配置文件路径
+        string FilePath;
+
+        /// <summary>
+        /// 设备节点,表示当前测试程序包含的试验设备,绑定到界面的设备列表中
+        /// </summary>
+        public IList<DeviceNode> Devices;
+
+        /// <summary>
+        /// 测试节点,表示当前测试程序含有的测试指标,绑定到界面的指标列表中
+        /// </summary>
+        public IList<TestNode> TestNodes;
+        /// <summary>
+        /// 手工输入表
+        /// </summary>
+        public DataTable ManualTable;
+        /// <summary>
+        /// 自动测试表
+        /// </summary>
+        public DataTable TestTable;
+        public event DltCellValueChanged ManualTableCellChanged;
+        public event DltCellValueChanged TestTableCellChanged;
+
+        DataTable InitTestTable,InitManualTable; //原始数据的界面,用于初始化或者重置
+        /// <summary>
+        /// 测试指标的结构
+        /// </summary>
+        List<BaseModelStruct> baseModelStructs;
+
+        public MainTps()
+        {
+            Devices = new BindingList<DeviceNode>();
+            TestNodes = new BindingList<TestNode>();
+
+            baseModelStructs = new List<BaseModelStruct>();
+            LoadBaseModelStructs();
+        }
+
+        #region 模板基础方法
+
+        /// <summary>
+        /// 加载配置文件
+        /// </summary>
+        /// <param name="filePath"></param>
+        /// <returns></returns>
+        public bool LoadConfigFile(string filePath)
+        {
+            bool ok = true;
+            if (File.Exists(filePath) == false)
+            {
+                ShowMessage(MsgType.Error, string.Format("找不到配置文件:{0}", filePath));
+                return false;
+            }
+
+            this.FilePath = filePath;
+            using (Spire.Xls.Workbook workbook = new Spire.Xls.Workbook())
+            {
+                workbook.LoadFromFile(filePath);
+                //处理Excel数据,更多请参考官方Demo
+                Spire.Xls.Worksheet sheet = workbook.Worksheets["自动测试项总表"];
+                if(sheet == null)
+                {
+                    ShowMessage(MsgType.Error, "文件中找不到‘自动测试项总表’");
+                    return false;
+                }
+
+                int blankRows = 0; //避免出错
+                int num = 0;
+                //默认最多两百行
+                while (num++ < 200)
+                {
+                    //索引从1开始
+                    string col1 = sheet.Range[num, 1].Value2 != null ? sheet.Range[num, 1].Value2.ToString():"";
+                    col1 = col1.Trim();
+                    if (string.IsNullOrEmpty(col1))
+                    {
+                        blankRows++;
+                        if(blankRows > 5)
+                        {
+                            //连续5个空行以上则退出
+                            break;
+                        }
+                    }
+                    else
+                    {
+                        blankRows = 0;
+                    }
+
+                    if (col1.Equals("设备配置表"))
+                    {
+                       ok &= readDevices(sheet,num);
+                        //解析行数跳过,实际上还得再加上
+                        num = num + this.Devices.Count+2;
+                    }
+                    else if (col1.Equals("测试指标配置表"))
+                    {
+                        ok &= readTestNodes(workbook,sheet,num);
+                        var items = (from p in TestNodes select p.Name).Distinct().ToArray();
+                        //解析行数跳过,实际上还得再加上
+                        num = num + items.Count() + 3;
+                    }
+                }
+
+
+                //加载人工测试项总表
+                sheet = workbook.Worksheets["人工测试项总表"];
+                if (sheet != null)
+                {
+                     blankRows = 0; //避免出错
+                     num = 0;
+                    //默认最多两百行
+                    while (num++ < 200)
+                    {
+                        //索引从1开始
+                        string col1 = sheet.Range[num, 1].Value2 != null ? sheet.Range[num, 1].Value2.ToString() : "";
+                        col1 = col1.Trim();
+                        if (string.IsNullOrEmpty(col1))
+                        {
+                            blankRows++;
+                            if (blankRows > 5)
+                            {
+                                //连续5个空行以上则退出
+                                break;
+                            }
+                        }
+                        else
+                        {
+                            blankRows = 0;
+                        }
+
+                        if (col1.Equals("人工测试项总表"))
+                        {
+                            this.ManualTable = readTable(sheet, num);
+                            if (this.ManualTable != null)
+                            {
+                                this.InitManualTable = this.ManualTable.Copy();
+                            }
+                        }
+                    }                        
+                }
+
+                //加载人工测试项总表
+                sheet = workbook.Worksheets["自动测试记录表"];
+                if (sheet != null)
+                {
+                    blankRows = 0; //避免出错
+                    num = 0;
+                    //默认最多两百行
+                    while (num++ < 200)
+                    {
+                        //索引从1开始
+                        string col1 = sheet.Range[num, 1].Value2 != null ? sheet.Range[num, 1].Value2.ToString() : "";
+                        col1 = col1.Trim();
+                        if (string.IsNullOrEmpty(col1))
+                        {
+                            blankRows++;
+                            if (blankRows > 5)
+                            {
+                                //连续5个空行以上则退出
+                                break;
+                            }
+                        }
+                        else
+                        {
+                            blankRows = 0;
+                        }
+
+                        if (col1.Equals("自动测试记录表"))
+                        {
+                            this.TestTable = readTable(sheet, num);
+                            if(this.TestTable != null)
+                            {
+                                this.InitTestTable = this.TestTable.Copy();
+                            }                           
+                        }
+                    }
+                }
+            }
+            return ok;
+        }
+
+        /// <summary>
+        /// 读设备配置表
+        /// </summary>
+        /// <param name="rowIndex">设备配置表的起始位置</param>
+        bool readDevices(Spire.Xls.Worksheet sheet, int rowIndex)
+        {
+            //检查表的格式正确
+            string col1 = sheet.Range[rowIndex + 1, 1].Value2 != null ? sheet.Range[rowIndex + 1, 1].Value2.ToString() : "";
+            string col2 = sheet.Range[rowIndex + 1, 2].Value2 != null ? sheet.Range[rowIndex + 1, 2].Value2.ToString() : "";
+            string col3 = sheet.Range[rowIndex + 1, 3].Value2 != null ? sheet.Range[rowIndex + 1, 3].Value2.ToString() : "";
+            string col4 = sheet.Range[rowIndex + 1, 4].Value2 != null ? sheet.Range[rowIndex + 1, 4].Value2.ToString() : "";
+            if (!(col1 == "设备名称" && col2 == "设备类型" && col3 == "设备型号" && col4 == "控制句柄"))
+            {
+                ShowMessage(MsgType.Error, "'设备配置表'行首标题位置和格式不正确");
+                return false;
+            }
+
+            int num = rowIndex + 1;
+            //默认最多100行
+            while (num++ < rowIndex + 100)
+            {
+                col1 = sheet.Range[num, 1].Value2 != null ? sheet.Range[num, 1].Value2.ToString() : "";
+                col2 = sheet.Range[num, 2].Value2 != null ? sheet.Range[num, 2].Value2.ToString() : "";
+                col3 = sheet.Range[num, 3].Value2 != null ? sheet.Range[num, 3].Value2.ToString() : "";
+                col4 = sheet.Range[num, 4].Value2 != null ? sheet.Range[num, 4].Value2.ToString() : "";
+                if (string.IsNullOrEmpty(col1) || string.IsNullOrEmpty(col2) || string.IsNullOrEmpty(col3))
+                {
+                    break;
+                }
+                DeviceNode dn = new DeviceNode();
+                dn.DeviceName = col1;
+                dn.DeviceType = col2;
+                dn.DeviceModel = col3;
+                dn.DeviceHandle = col4;
+                this.Devices.Add(dn);
+            }
+            return true;
+        }
+
+        /// <summary>
+        /// 读测试指标配置表
+        /// </summary>
+        /// <param name="rowIndex">测试指标配置表的起始位置</param>
+        bool readTestNodes(Spire.Xls.Workbook workbook,Spire.Xls.Worksheet sheet, int rowIndex)
+        {
+            List<TestNode> models = new List<TestNode>();
+            //检查表的格式正确
+            string col1 = sheet.Range[rowIndex + 2, 1].Value2 != null ? sheet.Range[rowIndex + 2, 1].Value2.ToString() : "";
+            string col2 = sheet.Range[rowIndex + 2, 2].Value2 != null ? sheet.Range[rowIndex + 2, 2].Value2.ToString() : "";
+            string col3 = sheet.Range[rowIndex + 2, 3].Value2 != null ? sheet.Range[rowIndex + 2, 3].Value2.ToString() : "";
+            string col4 = sheet.Range[rowIndex + 2, 4].Value2 != null ? sheet.Range[rowIndex + 2, 4].Value2.ToString() : "";
+            if (!(col1 == "测试指标" && col2 == "默认勾选" && col3 == "测试模板" && col4 == "测试顺序"))
+            {
+                ShowMessage(MsgType.Error, "'测试指标配置表'行首标题位置和格式不正确");
+                return false;
+            }
+
+            int num = rowIndex + 2;
+            //默认最多100行,先解析测试指标个数
+            while (num++ < rowIndex + 100)
+            {
+                col1 = sheet.Range[num, 1].Value2 != null ? sheet.Range[num, 1].Value2.ToString() : "";
+                col2 = sheet.Range[num, 2].Value2 != null ? sheet.Range[num, 2].Value2.ToString() : "";
+                col3 = sheet.Range[num, 3].Value2 != null ? sheet.Range[num, 3].Value2.ToString() : "";
+                col4 = sheet.Range[num, 4].Value2 != null ? sheet.Range[num, 4].Value2.ToString() : "";
+
+                if (string.IsNullOrEmpty(col1) || string.IsNullOrEmpty(col3))
+                {
+                    break;
+                }
+
+                TestNode tn = new TestNode();
+                tn.Name = col1;
+                if(col2 == "是")
+                {
+                    tn.IsSelected = true;
+                }
+                else
+                {
+                    tn.IsSelected = false;
+                }
+                tn.Template = col3;
+                int order = Int32.MaxValue;
+                if (Int32.TryParse(col4, out order))
+                    tn.Order = order;
+
+                models.Add(tn);
+            }
+
+            //再解析各通道的配置数据
+            int colIndex = 5; //通道数据从第5列开始
+            while(true)
+            {
+                col1 = sheet.Range[rowIndex + 3, colIndex].Value2 != null ? sheet.Range[rowIndex + 3, colIndex].Value2.ToString() : "";
+                col2 = sheet.Range[rowIndex + 3, colIndex + 1].Value2 != null ? sheet.Range[rowIndex + 3, colIndex + 1].Value2.ToString() : "";            
+                //有新通道数据则继续,否则退出
+                if (string.IsNullOrEmpty(col1) || string.IsNullOrEmpty(col2))
+                {
+                    break;
+                }
+
+                string channel = sheet.Range[rowIndex + 1, colIndex].Value2 != null ? sheet.Range[rowIndex + 1, colIndex].Value2.ToString() : "";
+                //按指标个数来解析通道数据
+                for (int i = 0; i < models.Count; i++)
+                {
+                    col1 = sheet.Range[rowIndex + 3 + i, colIndex].Value2 != null ? sheet.Range[rowIndex + 3 + i, colIndex].Value2.ToString() : "";
+                    col2 = sheet.Range[rowIndex + 3 + i, colIndex + 1].Value2 != null ? sheet.Range[rowIndex + 3 + i, colIndex + 1].Value2.ToString() : "";
+                    if (col2 != "启用")
+                        continue;
+
+                    TestNode newNode = models[i].Copy();
+                    newNode.Channel = channel; //通道名
+                    newNode.ParaConfigTable = col1; //测试配置表
+                    //复制已有参数表,或者从文件解析参数表
+                    TestNode preNode = TestNodes.FirstOrDefault(x => x.ParaConfigTable == col1);
+                    if(preNode != null)
+                    {
+                        //存在则复制,避免读文件费时间
+                        newNode.Parameters = preNode.Parameters.Copy();
+                    }
+                    else
+                    {
+                        //否则找到文件中对应的配置表
+                        Spire.Xls.Worksheet paraSheet = workbook.Worksheets[col1];
+                        if (paraSheet == null)
+                        {
+                            ShowMessage(MsgType.Error, "文件中找不到参数配置表:"+ col1);
+                            continue;
+                        }
+                        //解析参数配置表
+                        newNode.Parameters = readTestParameter(paraSheet);
+                    }
+
+                    //如果已经创建了同名的处理对象,则直接使用,否则则新建,采用单例模式
+                    //如果注释了下面的if,就是多例模式,即同名处理模块是不同的软件对象
+                    TestNode tn = this.TestNodes.FirstOrDefault(x => x.Template == newNode.Template);
+                    if(tn != null && tn.TestModel != null)
+                    {
+                        newNode.TestModel = tn.TestModel;
+                    }
+                    else
+                    {
+                        //根据测试指标的名称,创建BaseModel指标处理对象
+                        newNode.TestModel = CreateModel(newNode.Template);
+                    }
+                    
+                    this.TestNodes.Add(newNode);
+                }
+
+                colIndex += 2; //跳过2列
+            }
+            return true;
+        }
+
+        BaseModel CreateModel(string template)
+        {
+            //如果没有这个名字的软件模块,则返回null
+            BaseModelStruct bms = baseModelStructs.FirstOrDefault(x => x.ModelName == template);
+            if (bms == null)
+            {
+                ShowMessage(MsgType.Error, "找不到名称为:" + template +" 的测试指标模块。");
+                return null;
+            }
+
+            
+            BaseModel model = (BaseModel)Activator.CreateInstance(bms.type);
+            model.tps = this;
+            model.MessageEvent += ShowMessage;
+            return model;
+        }
+
+        void LoadBaseModelStructs()
+        {
+            try
+            {
+                Type[] types = this.GetType().Assembly.GetTypes();
+                foreach (var item in types)
+                {
+                    //排除接口本身
+                    if (item.Name != "BaseModel")
+                    {
+                        if (typeof(BaseModel).IsAssignableFrom(item))
+                        {
+                            BaseModel model = (BaseModel)Activator.CreateInstance(item);
+                            BaseModelStruct bms = new BaseModelStruct();
+                            bms.ModelName = model.TemplateName;
+                            bms.type = item;
+                            this.baseModelStructs.Add(bms);
+                            model = null;
+                        }
+                    }
+
+                }
+            }
+            catch(Exception e)
+            {
+                ShowMessage(MsgType.Error, "实例化BaseModel测试指标模块时出现错误,某个测试指标模块创建时发生错误,请检查代码!详细错误见程序日志文件!");
+                Bundle.log.WriteLog(AppLibs.Host.LogLevel.Error, "类:MainTps,方法:LoadBaseModelStructs", e.Message + e.StackTrace);
+            }
+           
+        }
+        /// <summary>
+        /// 读参数配置表
+        /// </summary>
+        /// <returns></returns>
+        TestParameters readTestParameter(Spire.Xls.Worksheet sheet)
+        {
+            TestParameters pars = new TestParameters();
+
+            int blankRows = 0; //避免出错
+            int num = 0;
+            //默认最多两百行
+            while (num++ < 200)
+            {
+                //索引从1开始
+                string col1 = sheet.Range[num, 1].Value2 != null ? sheet.Range[num, 1].Value2.ToString() : "";
+                col1 = col1.Trim();
+                if (string.IsNullOrEmpty(col1))
+                {
+                    blankRows++;
+                    if (blankRows > 5)
+                    {
+                        //连续5个空行以上则退出
+                        break;
+                    }
+                }
+                else
+                {
+                    blankRows = 0;
+                }
+
+                if (col1.Equals("参数表"))
+                {
+                    ///获取表中的参数
+                    List<ParameterNode> nodes = readParameters(sheet,num);
+                    foreach (var item in nodes)
+                    {
+                        if(pars.Parameters.ContainsKey(item.Name))
+                        {
+                            ShowMessage(MsgType.Error, string.Format("参数配置表:{0} 存在同名参数:{1},无法重复添加参数", sheet.Name, item.Name));
+                            continue;
+                        }
+                        pars.Parameters.Add(item.Name, item);
+                    }
+                    //解析行数跳过,实际上还得再加上
+                    num = num + nodes.Count +1;
+                }
+                else if (col1.Equals("测试显示表"))
+                {
+                    //获取表中的原始显示界面
+                    pars.InitialTable = readTable( sheet, num);
+                    //解析行数跳过,实际上还得再加上
+                    num = num + pars.InitialTable.Rows.Count  + 1;
+                }
+            }
+            return pars;
+        }
+
+        /// <summary>
+        /// 读参数表
+        /// </summary>
+        /// <param name="sheet"></param>
+        /// <returns></returns>
+        List<ParameterNode> readParameters(Spire.Xls.Worksheet sheet,int rowIndex)
+        {
+            List<ParameterNode> nodes = new List<ParameterNode>();
+            string col1 = sheet.Range[rowIndex + 1, 1].Value2 != null ? sheet.Range[rowIndex + 1, 1].Value2.ToString() : "";
+            string col2 = sheet.Range[rowIndex + 1, 2].Value2 != null ? sheet.Range[rowIndex + 1, 2].Value2.ToString() : "";
+            string col3 = sheet.Range[rowIndex + 1, 3].Value2 != null ? sheet.Range[rowIndex + 1, 3].Value2.ToString() : "";
+            string col4 = sheet.Range[rowIndex + 1, 4].Value2 != null ? sheet.Range[rowIndex + 1, 4].Value2.ToString() : "";
+            if (!(col1 == "名称" && col2 == "类型" && col3 == "值"))
+            {
+                ShowMessage(MsgType.Error, "'参数表'行首标题位置和格式不正确");
+                return nodes;
+            }
+
+            int num = rowIndex + 1;
+            //默认最多30行
+            while (num++ < rowIndex + 30)
+            {
+                col1 = sheet.Range[num, 1].Value2 != null ? sheet.Range[num, 1].Value2.ToString() : "";
+                col2 = sheet.Range[num, 2].Value2 != null ? sheet.Range[num, 2].Value2.ToString() : "";
+                col3 = sheet.Range[num, 3].Value2 != null ? sheet.Range[num, 3].Value2.ToString() : "";
+                col4 = sheet.Range[num, 4].Value2 != null ? sheet.Range[num, 4].Value2.ToString() : "";
+                if (string.IsNullOrEmpty(col1) || string.IsNullOrEmpty(col2) || string.IsNullOrEmpty(col3))
+                {
+                    break;
+                }
+                ParameterNode pn = new ParameterNode();
+                pn.Name = col1;
+                pn.Type = col2;
+                pn.StrValue = col3;
+                pn.Mark = col4;
+                nodes.Add(pn);
+            }
+            return nodes;
+        }
+
+        /// <summary>
+        /// 读表格,人工测试表和测试显示表
+        /// </summary>
+        /// <param name="sheet"></param>
+        /// <returns></returns>
+        DataTable readTable(Spire.Xls.Worksheet sheet, int rowIndex)
+        {
+            //先创建列,再创建行
+            DataTable dt = new DataTable();
+            int num = 0;
+            while (num++ < 100)
+            {
+                string col = sheet.Range[rowIndex + 1, num].Value2 != null ? sheet.Range[rowIndex + 1, num].Value2.ToString() : "";
+                if (string.IsNullOrEmpty(col))
+                    break;
+
+                dt.Columns.Add(col);
+            }
+            //再创建行
+            num = rowIndex + 1;
+            //默认最多200行
+            while (num++ < rowIndex + 200)
+            {
+                //首列无值就认为表格结束
+                string val = sheet.Range[num, 1].Value2 != null ? sheet.Range[num, 1].Value2.ToString() : "";
+                if (string.IsNullOrEmpty(val.Trim()))
+                    break;
+
+                DataRow dr = dt.NewRow();
+                dt.Rows.Add(dr);
+                for (int i = 0; i < dt.Columns.Count; i++)
+                {
+                    val = sheet.Range[num, i+1].Value2 != null ? sheet.Range[num, i+1].Value2.ToString() : "";
+                    dr[i] = val;
+                }
+               
+            }
+            return dt;
+        }
+
+        /// <summary>
+        /// 检查仪器是否正常配置
+        /// </summary>
+        /// <returns></returns>
+        public bool CheckDevices()
+        {
+            bool ok = true;
+            AppLibs.Devices.IDeviceHost devHost = Bundle.host.GetFirstOrDefaultService<AppLibs.Devices.IDeviceHost>();
+            foreach (DeviceNode device in this.Devices)
+            {
+                DeviceParameter dev = devHost.GetFirstOrDefaultDeviceID(device.DeviceHandle);
+
+                if (dev == null || !(device.DeviceType == dev.DeviceType && device.DeviceModel == dev.DeviceModel))
+                {
+                    device.State = false;
+                    ok = false;
+                }
+                else
+                {
+                    device.State = true;
+                    continue;
+                }
+            }
+            return ok;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="isOrderByChannel">按照指标分组还是按照通道分组</param>
+        public void Start(bool isOrderByChannel)
+        {
+            ShowMessage(MsgType.Info, string.Format("序列号:{0} 测试开始",Serial));
+            isStop = false;
+            //选择勾选项
+            List<TestNode> nodes = this.TestNodes.Where(x => x.IsSelected == true).ToList();
+            if(isOrderByChannel)
+            {
+                //按照通道分组
+                foreach (IGrouping<string, TestNode> group in nodes.GroupBy(x => x.Channel))
+                {
+                    //排序后执行
+                    foreach (TestNode testnode in group.OrderBy(a => a.Order))
+                    {
+                        if(isStop == false)
+                        {
+                            ShowMessage(MsgType.Info, string.Format("开始执行测试指标:{0}/{1}", testnode.Channel, testnode.Name));
+                            if(testnode.TestModel != null)
+                            {
+                                currModel = testnode.TestModel;
+                                testnode.TestModel.Start(testnode);
+                            }
+                            else
+                            {
+                                ShowMessage(MsgType.Error, string.Format("测试指标:{0}/{1} 没有实例化执行模块", testnode.Channel, testnode.Name));
+                            }
+                        }
+                        else
+                        {
+                            break;
+                        }
+                    }
+                }
+            }
+            else
+            {
+                //按照指标名称进行
+                foreach (IGrouping<string, TestNode> group in nodes.GroupBy(x => x.Name))
+                {
+                    //排序后执行
+                    foreach (TestNode testnode in group.OrderBy(a => a.Order))
+                    {
+                        if (isStop == false)
+                        {
+                            ShowMessage(MsgType.Info, string.Format("开始执行测试指标:{0}/{1}", testnode.Channel, testnode.Name));
+                            if (testnode.TestModel != null)
+                            {
+                                currModel = testnode.TestModel;
+                                testnode.TestModel.Start(testnode);
+                            }
+                            else
+                            {
+                                ShowMessage(MsgType.Error, string.Format("测试指标:{0}/{1} 没有实例化执行模块", testnode.Channel, testnode.Name));
+                            }
+                        }
+                        else
+                        {
+                            break;
+                        }
+                    }
+                }
+            }
+
+            //保存自动测试记录表
+            SaveTestTable();
+
+            ShowMessage(MsgType.Info, string.Format("序列号:{0} 测试完成", Serial));
+        }
+
+        bool isStop = false;
+        BaseModel currModel = null;
+        public void Stop()
+        {
+            isStop = true;
+            if(currModel!= null)
+            {
+                currModel.Stop();
+            }
+
+            ShowMessage(MsgType.Info, string.Format("序列号:{0} 测试中止", Serial));
+        }
+
+        public event DltShowMsg MessageEvent;
+        /// <summary>
+        /// 本对象显示消息,以及测试指标显示消息都经过这个方法
+        /// </summary>
+        /// <param name="msgType"></param>
+        /// <param name="msg"></param>
+        void ShowMessage(MsgType msgType, string msg)
+        {
+            if(MessageEvent != null)
+            {
+                MessageEvent(msgType, msg);
+            }
+        }
+
+        public void ResetTestTable()
+        {
+            if(this.InitTestTable != null)
+            {
+                TestTable = this.InitTestTable.Copy();
+            }
+        }
+
+        public void ResetManualTable()
+        {
+            if (this.InitManualTable != null)
+            {
+                ManualTable = this.InitManualTable.Copy();
+            }
+        }
+
+        public AppLibs.Devices.IVISA GetDevice(string name)
+        {
+            DeviceNode node = this.Devices.FirstOrDefault(x => x.DeviceName == name);
+            //不存在或者状态不对,都返回空
+            if(node == null || node.State == false)
+            {
+                return null;
+            }
+            else
+            {
+                AppLibs.Devices.IDeviceHost devHost = Bundle.host.GetFirstOrDefaultService<AppLibs.Devices.IDeviceHost>();
+                if (devHost == null)
+                    return null;
+
+                DeviceParameter dev = devHost.GetFirstOrDefaultDeviceID(node.DeviceHandle);
+                //要地址,名称,型号一致
+                if (dev == null || !(node.DeviceType == dev.DeviceType && node.DeviceModel == dev.DeviceModel))
+                {
+                    return null;
+                }
+                else
+                {
+                    return (IVISA)dev;
+                }
+            }
+        }
+
+        public void SetManualTableCellValue(int row, int col, object value)
+        {
+            if (ManualTableCellChanged != null)
+                ManualTableCellChanged(row, col, value);
+        }
+
+        public void SetTestTableCellValue(int row, int col, object value)
+        {
+            if (TestTableCellChanged != null)
+                TestTableCellChanged(row, col, value);
+        }
+
+        void SaveTestTable()
+        {
+            if(string.IsNullOrEmpty(Serial))
+            {
+                ShowMessage(MsgType.Info, "序列号为空,数据不保存");
+                return;
+            }
+
+            AppLibs.Function.IReportHost report = Bundle.host.GetFirstOrDefaultService<AppLibs.Function.IReportHost>();
+            if(report != null)
+            {
+                AppLibs.Models.TableInfo tableInfo = new AppLibs.Models.TableInfo();
+                tableInfo.data = TestTable;
+                tableInfo.table = new AppLibs.Models.Table();
+                tableInfo.table.Result = "合格";
+                tableInfo.table.Temperature = Temperature;
+                tableInfo.table.Tester = Tester;
+                tableInfo.table.Time = DateTime.Now;
+                tableInfo.table.Place = Place;
+                tableInfo.table.Serial = Serial;
+                tableInfo.table.Humidity = Humidity;
+                tableInfo.table.Type = TestProject;
+                tableInfo.table.ProductCode = Product;
+                tableInfo.table.ProductName = Product;
+                tableInfo.table.Name = TestProject + "#" + Product;
+                if (report.WriteAndReplaceTable(tableInfo))
+                {
+                    ShowMessage(MsgType.Info, "自动测试记录表保存成功");
+                }
+                else
+                {
+                    ShowMessage(MsgType.Info, "自动测试记录表保存失败");
+                }
+            }
+            else
+            {
+                ShowMessage(MsgType.Info, "软件未包含数据存储模块");
+            }
+           
+        }
+        #endregion
+
+        #region 二次修改的方法
+
+
+        #endregion
+
+    }
+}

+ 162 - 0
tps/TpsAppDemo/PowerTestDemo.csproj

@@ -0,0 +1,162 @@
+<?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>{88EB4F8A-70EC-4547-B7DB-1A796F5BC5A7}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <RootNamespace>PowerTestDemo</RootNamespace>
+    <AssemblyName>PowerTestDemo</AssemblyName>
+    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\exe\apps\PowerTestDemo\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <StartupObject />
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="AppLibs, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\runtime\AppLibs\bin\Debug\AppLibs.dll</HintPath>
+    </Reference>
+    <Reference Include="DevComponents.DotNetBar.Design">
+      <HintPath>..\..\exe\DevComponents.DotNetBar.Design.dll</HintPath>
+    </Reference>
+    <Reference Include="DevComponents.DotNetBar.Layout">
+      <HintPath>..\..\exe\DevComponents.DotNetBar.Layout.dll</HintPath>
+    </Reference>
+    <Reference Include="DevComponents.DotNetBar.Layout.Design">
+      <HintPath>..\..\exe\DevComponents.DotNetBar.Layout.Design.dll</HintPath>
+    </Reference>
+    <Reference Include="DevComponents.DotNetBar.SuperGrid">
+      <HintPath>..\..\exe\DevComponents.DotNetBar.SuperGrid.dll</HintPath>
+    </Reference>
+    <Reference Include="DevComponents.DotNetBar2">
+      <HintPath>..\..\exe\DevComponents.DotNetBar2.dll</HintPath>
+    </Reference>
+    <Reference Include="DevComponents.SuperGrid.Design">
+      <HintPath>..\..\exe\DevComponents.SuperGrid.Design.dll</HintPath>
+    </Reference>
+    <Reference Include="Spire.License, Version=1.3.8.40, Culture=neutral, PublicKeyToken=b1144360237c8b3f, processorArchitecture=MSIL">
+      <HintPath>packages\FreeSpire.XLS.10.10.0\lib\net40\Spire.License.dll</HintPath>
+    </Reference>
+    <Reference Include="Spire.Pdf, Version=6.10.0.0, Culture=neutral, PublicKeyToken=663f351905198cb3, processorArchitecture=MSIL">
+      <HintPath>packages\FreeSpire.XLS.10.10.0\lib\net40\Spire.Pdf.dll</HintPath>
+    </Reference>
+    <Reference Include="Spire.XLS, Version=10.10.1.0, Culture=neutral, PublicKeyToken=663f351905198cb3, processorArchitecture=MSIL">
+      <HintPath>packages\FreeSpire.XLS.10.10.0\lib\net40\Spire.XLS.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Bundle.cs" />
+    <Compile Include="com\BaseModelStruct.cs" />
+    <Compile Include="com\DeviceNode.cs" />
+    <Compile Include="com\FileNode.cs" />
+    <Compile Include="com\MsgType.cs" />
+    <Compile Include="com\TestMessage.cs" />
+    <Compile Include="com\TestNode.cs" />
+    <Compile Include="com\TestParameters.cs" />
+    <Compile Include="FrmMain.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="FrmMain.Designer.cs">
+      <DependentUpon>FrmMain.cs</DependentUpon>
+    </Compile>
+    <Compile Include="MainTps.cs" />
+    <Compile Include="models\InputCurrent.cs" />
+    <Compile Include="models\InputSurge.cs" />
+    <Compile Include="models\InputRipple.cs" />
+    <Compile Include="models\InputVoltage.cs" />
+    <Compile Include="models\BaseModel.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="views\FrmDevice.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="views\FrmDevice.Designer.cs">
+      <DependentUpon>FrmDevice.cs</DependentUpon>
+    </Compile>
+    <Compile Include="views\FrmMsg.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="views\FrmMsg.Designer.cs">
+      <DependentUpon>FrmMsg.cs</DependentUpon>
+    </Compile>
+    <EmbeddedResource Include="FrmMain.resx">
+      <DependentUpon>FrmMain.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+      <DesignTime>True</DesignTime>
+    </Compile>
+    <EmbeddedResource Include="views\FrmDevice.resx">
+      <DependentUpon>FrmDevice.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="views\FrmMsg.resx">
+      <DependentUpon>FrmMsg.cs</DependentUpon>
+    </EmbeddedResource>
+    <None Include="bundle.config">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
+    <None Include="config\测试#常温测试#035变频模块.xlsx">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="config\测试#常温测试#DC16MK.xlsx">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="packages.config" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="test.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+  </ItemGroup>
+  <ItemGroup />
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>

+ 10 - 0
tps/TpsAppDemo/PowerTestDemo.csproj.user

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <ProjectView>ProjectFiles</ProjectView>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
+    <StartAction>Program</StartAction>
+    <StartProgram>E:\PowerTestStudio\exe\JGWorks.exe</StartProgram>
+  </PropertyGroup>
+</Project>

+ 25 - 0
tps/TpsAppDemo/PowerTestDemo.sln

@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.30503.244
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PowerTestDemo", "PowerTestDemo.csproj", "{88EB4F8A-70EC-4547-B7DB-1A796F5BC5A7}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{88EB4F8A-70EC-4547-B7DB-1A796F5BC5A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{88EB4F8A-70EC-4547-B7DB-1A796F5BC5A7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{88EB4F8A-70EC-4547-B7DB-1A796F5BC5A7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{88EB4F8A-70EC-4547-B7DB-1A796F5BC5A7}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {EB6A6C57-2ED2-46BD-BE18-1D6020AA6E84}
+	EndGlobalSection
+EndGlobal

+ 36 - 0
tps/TpsAppDemo/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("PowerTestDemo")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("TpsAppDemo")]
+[assembly: AssemblyCopyright("Copyright ©  2021")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("88eb4f8a-70ec-4547-b7db-1a796f5bc5a7")]
+
+// 程序集的版本信息由下列四个值组成: 
+//
+//      主版本
+//      次版本
+//      生成号
+//      修订号
+//
+//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
+//通过使用 "*",如下所示:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 63 - 0
tps/TpsAppDemo/Properties/Resources.Designer.cs

@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     此代码由工具生成。
+//     运行时版本:4.0.30319.42000
+//
+//     对此文件的更改可能会导致不正确的行为,并且如果
+//     重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace PowerTestDemo.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   一个强类型的资源类,用于查找本地化的字符串等。
+    /// </summary>
+    // 此类是由 StronglyTypedResourceBuilder
+    // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
+    // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
+    // (以 /str 作为命令选项),或重新生成 VS 项目。
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   返回此类使用的缓存的 ResourceManager 实例。
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PowerTestDemo.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   重写当前线程的 CurrentUICulture 属性,对
+        ///   使用此强类型资源类的所有资源查找执行重写。
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}

+ 117 - 0
tps/TpsAppDemo/Properties/Resources.resx

@@ -0,0 +1,117 @@
+<?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>
+</root>

+ 26 - 0
tps/TpsAppDemo/Properties/Settings.Designer.cs

@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     此代码由工具生成。
+//     运行时版本:4.0.30319.42000
+//
+//     对此文件的更改可能会导致不正确的行为,并且如果
+//     重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace PowerTestDemo.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.10.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+    }
+}

+ 7 - 0
tps/TpsAppDemo/Properties/Settings.settings

@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>

+ 8 - 0
tps/TpsAppDemo/bundle.config

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+  <!--DevHostApp.dll 与bundle.config在同一个目录下-->
+  <Activator BundleName="测试程序1" Assembly="PowerTestDemo.dll" Type="PowerTestDemo.Bundle"/>
+  <Extension Point="MainPage">
+    <Node Name="电源测试程序" Page="测试项目" Group="测试项目" Text="电源测试" Type="PowerTestDemo.FrmMain" Image="test.png" IsLazyLoad="true" Order="2" />
+  </Extension>
+</configuration>

+ 14 - 0
tps/TpsAppDemo/com/BaseModelStruct.cs

@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PowerTestDemo.com
+{
+    public class BaseModelStruct
+    {
+        public string ModelName { get; set; }
+        public Type type { get; set; }
+    }
+}

+ 37 - 0
tps/TpsAppDemo/com/DeviceNode.cs

@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PowerTestDemo.com
+{
+    /// <summary>
+    /// 仪器配置信息
+    /// </summary>
+    public class DeviceNode
+    {
+        /// <summary>
+        /// 仪器名称
+        /// </summary>
+        public string DeviceName { get; set; }
+        /// <summary>
+        /// 仪器类型,比如信号源
+        /// </summary>
+        public string DeviceType { get; set; }
+        /// <summary>
+        /// 仪器型号
+        /// </summary>
+        public string DeviceModel { get; set; }
+        /// <summary>
+        /// 控制句柄
+        /// </summary>
+        public string DeviceHandle { get; set; }
+        public bool State { get; set; }
+        
+        public DeviceNode()
+        {
+            State = false;
+        }
+    }
+}

+ 33 - 0
tps/TpsAppDemo/com/FileNode.cs

@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PowerTestDemo.com
+{
+    public class FileNode
+    {
+        /// <summary>
+        /// 显示的内容
+        /// </summary>
+        public string DisplayName { get; set; }
+        /// <summary>
+        /// 测试项目 常温测试
+        /// </summary>
+        public string TestProject { get; set; }
+        /// <summary>
+        /// 产品名称
+        /// </summary>
+        public string ProductName { get; set; }
+        /// <summary>
+        /// 文件路径
+        /// </summary>
+        public string FilePath { get; set; }
+
+        /// <summary>
+        /// 当前文件对应的测试程序
+        /// </summary>
+        public MainTps Tps { get; set; }
+    }
+}

+ 15 - 0
tps/TpsAppDemo/com/MsgType.cs

@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PowerTestDemo.com
+{
+    public enum MsgType
+    {
+        Error,
+        Warning,
+        Info
+    }
+}

+ 14 - 0
tps/TpsAppDemo/com/TestMessage.cs

@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PowerTestDemo.com
+{
+    public class TestMessage
+    {
+        public MsgType type;
+        public string message;
+    }
+}

+ 64 - 0
tps/TpsAppDemo/com/TestNode.cs

@@ -0,0 +1,64 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using PowerTestDemo.models;
+
+namespace PowerTestDemo.com
+{
+    /// <summary>
+    /// 测试指标项 
+    /// </summary>
+    public class TestNode
+    {
+        /// <summary>
+        /// 通道号
+        /// </summary>
+        [DisplayName("产品通道")]
+        public string Channel { get; set; }
+        /// <summary>
+        /// 测试指标项
+        /// </summary>
+        [DisplayName("测试指标")]
+        public string Name { get; set; }
+        /// <summary>
+        /// 默认是否勾选
+        /// </summary>
+        public bool IsSelected { get; set; }
+        /// <summary>
+        /// 测试模板名称
+        /// </summary>
+        public string Template { get; set; }
+        /// <summary>
+        /// 测试顺序,从小到大
+        /// </summary>
+        public int Order { get; set; }
+        /// <summary>
+        /// workbook中 测试配置表的名字
+        /// </summary>
+        public string ParaConfigTable { get; set; }
+        /// <summary>
+        /// 测试项的参数配置表等信息
+        /// </summary>
+        public TestParameters Parameters { get; set; }
+
+        /// <summary>
+        /// 对应的可执行测试指标对象
+        /// </summary>
+        public BaseModel TestModel { get; set; }
+
+        public virtual TestNode Copy()
+        {
+            TestNode node = (TestNode)this.MemberwiseClone();
+            if(Parameters != null)
+            {
+                node.Parameters = Parameters.Copy();
+            }
+            node.TestModel = null;
+            return node;
+        }
+    }
+
+}

+ 351 - 0
tps/TpsAppDemo/com/TestParameters.cs

@@ -0,0 +1,351 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PowerTestDemo.com
+{
+    /// <summary>
+    /// 一个指标项的测试配置表的信息
+    /// </summary>
+    public class TestParameters
+    {
+        /// <summary>
+        /// 参数定义表
+        /// </summary>
+        public Dictionary<string, ParameterNode> Parameters;
+
+        /// <summary>
+        /// 原始测试表格,用于显示的表格
+        /// </summary>
+        public DataTable InitialTable;
+        /// <summary>
+        /// 执行完成后的测试结果表格,是initialTable的一个拷贝
+        /// </summary>
+        public DataTable TestTable;
+
+        public  TestParameters()
+        {
+            Parameters = new Dictionary<string, ParameterNode>();
+        }
+
+        public T GetParameter<T>(string name)
+        {
+            if (string.IsNullOrEmpty(name))
+                return default(T);
+
+            if (this.Parameters.ContainsKey(name) == false)
+                return default(T);
+
+            string val = this.Parameters[name].StrValue.Trim();
+            T t = default(T);
+            if (typeof(T) == typeof(int))
+            {
+                if (val.StartsWith("0x") == false)
+                {
+                    t = (T)(object)Convert.ToInt32(val);
+                }
+                else
+                {
+                    t = (T)(object)Convert.ToInt32(val, 16);
+                }
+            }
+            else if (typeof(T) == typeof(string))
+            {
+                t = (T)(object)val;
+            }
+            else if (typeof(T) == typeof(uint))
+            {
+                if (val.StartsWith("0x") == false)
+                {
+                    t = (T)(object)Convert.ToUInt32(val);
+                }
+                else
+                {
+                    t = (T)(object)Convert.ToUInt32(val, 16);
+                }
+            }
+            else if (typeof(T) == typeof(short))
+            {
+                if (val.StartsWith("0x") == false)
+                {
+                    t = (T)(object)Convert.ToInt16(val);
+                }
+                else
+                {
+                    t = (T)(object)Convert.ToInt16(val, 16);
+                }
+            }
+            else if (typeof(T) == typeof(ushort))
+            {
+                if (val.StartsWith("0x") == false)
+                {
+                    t = (T)(object)Convert.ToUInt16(val);
+                }
+                else
+                {
+                    t = (T)(object)Convert.ToUInt16(val, 16);
+                }
+            }
+            else if (typeof(T) == typeof(byte))
+            {
+                if (val.StartsWith("0x") == false)
+                {
+                    t = (T)(object)Convert.ToByte(val);
+                }
+                else
+                {
+                    t = (T)(object)Convert.ToByte(val, 16);
+                }
+            }
+            else if (typeof(T) == typeof(bool))
+            {
+                t = (T)(object)Convert.ToBoolean(val);
+            }
+            else if (typeof(T) == typeof(Int64))
+            {
+                if (val.StartsWith("0x") == false)
+                {
+                    t = (T)(object)Convert.ToInt64(val);
+                }
+                else
+                {
+                    t = (T)(object)Convert.ToInt64(val, 16);
+                }
+            }
+            else if (typeof(T) == typeof(UInt64))
+            {
+                if (val.StartsWith("0x") == false)
+                {
+                    t = (T)(object)Convert.ToUInt64(val);
+                }
+                else
+                {
+                    t = (T)(object)Convert.ToUInt64(val, 16);
+                }
+            }
+            else if (typeof(T) == typeof(double))
+            {
+                t = (T)(object)Convert.ToDouble(val);
+            }
+            return t;
+        }
+
+        public T[] GetParameterToArray<T>(string name)
+        {
+            if (string.IsNullOrEmpty(name))
+                return default(T[]);
+
+            if (this.Parameters.ContainsKey(name) == false)
+                return default(T[]);
+
+            //中英文逗号转换
+            string val = this.Parameters[name].StrValue.Replace(',', ',');
+            return StringToArray<T>(val, ',');
+        }
+
+        public ParameterNode GetParameter(string name)
+        {
+            if (string.IsNullOrEmpty(name))
+                return null;
+
+            if (this.Parameters.ContainsKey(name) == false)
+                return null;
+
+            return this.Parameters[name];
+        }
+
+        /// <summary>
+        /// 重置测试结果表
+        /// </summary>
+        public void ResetTestTable()
+        {
+            TestTable = null;
+            if(InitialTable != null)
+            {
+                TestTable = InitialTable.Copy();
+            }
+        }
+
+        /// <summary>
+        /// 复制一个测试指标配置表,避免重复读文件,这个文件要维护好
+        /// </summary>
+        /// <returns></returns>
+        public TestParameters Copy()
+        {
+            TestParameters newTp = new TestParameters();
+            newTp.InitialTable = this.InitialTable.Copy();
+            newTp.ResetTestTable();
+            foreach (var item in Parameters)
+            {
+                if (item.Value != null)
+                {
+                    newTp.Parameters.Add(item.Key, item.Value.Copy());
+                }
+                else
+                {
+                    newTp.Parameters.Add(item.Key,new ParameterNode());
+                }
+            }
+            return newTp;
+        }
+
+        T[] StringToArray<T>(string str, char SeparateChar)
+        {
+            if (str == null)
+                return default(T[]);
+
+            string[] strs = str.Split(SeparateChar);
+            if (strs == null || strs.Length <= 0)
+                return default(T[]);
+
+            T[] t = new T[strs.Length];
+
+            for (int i = 0; i < strs.Length; i++)
+            {
+                if (string.IsNullOrEmpty(strs[i]) == false)
+                    strs[i] = strs[i].ToLower().Trim();
+            }
+
+            if (typeof(T) == typeof(int))
+            {
+                for (int i = 0; i < strs.Length; i++)
+                {
+                    if (strs[i].StartsWith("0x") == false)
+                    {
+                        t[i] = (T)(object)Convert.ToInt32(strs[i]);
+                    }
+                    else
+                    {
+                        t[i] = (T)(object)Convert.ToInt32(strs[i], 16);
+                    }
+                }
+            }
+            else if (typeof(T) == typeof(string))
+            {
+                for (int i = 0; i < strs.Length; i++)
+                {
+                    t[i] = (T)(object)strs[i];
+                }
+            }
+            else if (typeof(T) == typeof(uint))
+            {
+                for (int i = 0; i < strs.Length; i++)
+                {
+                    if (strs[i].StartsWith("0x") == false)
+                    {
+                        t[i] = (T)(object)Convert.ToUInt32(strs[i], 16);
+                    }
+                    else
+                    {
+                        t[i] = (T)(object)Convert.ToUInt32(strs[i]);
+                    }
+                }
+            }
+            else if (typeof(T) == typeof(short))
+            {
+                for (int i = 0; i < strs.Length; i++)
+                {
+                    if (strs[i].StartsWith("0x") == false)
+                    {
+                        t[i] = (T)(object)Convert.ToInt16(strs[i], 16);
+                    }
+                    else
+                    {
+                        t[i] = (T)(object)Convert.ToInt16(strs[i]);
+                    }
+                }
+            }
+            else if (typeof(T) == typeof(ushort))
+            {
+                for (int i = 0; i < strs.Length; i++)
+                {
+                    if (strs[i].StartsWith("0x") == false)
+                    {
+                        t[i] = (T)(object)Convert.ToUInt16(strs[i], 16);
+                    }
+                    else
+                    {
+                        t[i] = (T)(object)Convert.ToUInt16(strs[i]);
+                    }
+                }
+            }
+            else if (typeof(T) == typeof(byte))
+            {
+                for (int i = 0; i < strs.Length; i++)
+                {
+                    if (strs[i].StartsWith("0x") == false)
+                    {
+                        t[i] = (T)(object)Convert.ToByte(strs[i], 16);
+                    }
+                    else
+                    {
+                        t[i] = (T)(object)Convert.ToByte(strs[i]);
+                    }
+                }
+            }
+            else if (typeof(T) == typeof(bool))
+            {
+                for (int i = 0; i < strs.Length; i++)
+                {
+                    t[i] = (T)(object)Convert.ToBoolean(strs[i]);
+                }
+            }
+            else if (typeof(T) == typeof(Int64))
+            {
+                for (int i = 0; i < strs.Length; i++)
+                {
+                    if (strs[i].StartsWith("0x") == false)
+                    {
+                        t[i] = (T)(object)Convert.ToInt64(strs[i], 16);
+                    }
+                    else
+                    {
+                        t[i] = (T)(object)Convert.ToInt64(strs[i]);
+                    }
+                }
+            }
+            else if (typeof(T) == typeof(UInt64))
+            {
+                for (int i = 0; i < strs.Length; i++)
+                {
+                    if (strs[i].StartsWith("0x") == false)
+                    {
+                        t[i] = (T)(object)Convert.ToUInt64(strs[i], 16);
+                    }
+                    else
+                    {
+                        t[i] = (T)(object)Convert.ToUInt64(strs[i]);
+                    }
+                }
+            }
+            else if (typeof(T) == typeof(double))
+            {
+                for (int i = 0; i < strs.Length; i++)
+                {
+                    t[i] = (T)(object)Convert.ToDouble(strs[i]);
+                }
+            }
+
+            return t;
+        }
+    }
+
+    /// <summary>
+    /// 参数内容定义
+    /// </summary>
+    public class ParameterNode
+    {
+        public string Name { get; set; }
+        public string Type { get; set; }
+        public string StrValue { get; set; }
+        public string Mark { get; set; }
+
+        public ParameterNode Copy()
+        {
+            return (ParameterNode)this.MemberwiseClone();
+        }
+    }
+}

BIN
tps/TpsAppDemo/config/测试#常温测试#035变频模块.xlsx


BIN
tps/TpsAppDemo/config/测试#常温测试#DC16MK.xlsx


+ 70 - 0
tps/TpsAppDemo/models/BaseModel.cs

@@ -0,0 +1,70 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using PowerTestDemo.com;
+
+namespace PowerTestDemo.models
+{
+    /// <summary>
+    /// 测试模板,对测试模板的基础类别
+    /// </summary>
+    public class BaseModel
+    {
+        /// <summary>
+        /// 测试模板名称,测试指标配置表中的模板名称源自这个参数
+        /// </summary>
+        public string TemplateName { get; protected set; }
+        public bool IsRuning { get; set; }
+
+        /// <summary>
+        /// 这个测试项对应的显示界面,也可能是一个界面有多个测试项共用,取决于顶层的控制
+        /// </summary>
+        public UserControl UC { get; set; }
+
+        /// <summary>
+        /// 主程序
+        /// </summary>
+        public MainTps tps { get; set; }
+
+        public virtual bool Run(TestNode parameters)
+        {
+
+            return false;
+        }
+
+        /// <summary>
+        /// 开始测试
+        /// </summary>
+        /// <returns></returns>
+        public virtual bool Start(TestNode parameters)
+        {
+            IsRuning = true;
+            bool ok = Run(parameters);
+            IsRuning = false;
+            return ok;
+           // return true;
+        }
+
+        /// <summary>
+        /// 停止测试
+        /// </summary>
+        /// <returns></returns>
+        public virtual bool Stop()
+        {
+            IsRuning = false;
+            return true;
+        }
+
+        public event DltShowMsg MessageEvent;
+        protected void ShowMessage(MsgType msgType, string msg)
+        {
+            if (MessageEvent != null)
+            {
+                MessageEvent(msgType, msg);
+            }
+        }
+    }
+}

+ 70 - 0
tps/TpsAppDemo/models/InputCurrent.cs

@@ -0,0 +1,70 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using PowerTestDemo.com;
+using AppLibs.Devices;
+
+namespace PowerTestDemo.models
+{
+    /// <summary>
+    /// 增益测试测试模板,继承自指标测试模板基类
+    /// </summary>
+    public class InputCurrent : BaseModel
+    {
+        /// <summary>
+        /// 测试模板名称,测试指标配置表中的模板名称源自这个参数
+        /// </summary>
+        public InputCurrent()
+        {
+            //首先要定义模板名称,excel 自动测试项总表中的指标测试模板的名称要和这个名称一致
+            TemplateName = "输入电流模板"; 
+        }
+
+        /// <summary>
+        /// 重写的Run方法,当执行到这个测试指标项时,Run会被调用
+        /// </summary>
+        /// <param name="parameters"></param>
+        /// <returns></returns>
+        public override bool Run(TestNode parameters)
+        {
+            //检查当前指标需要的仪器是否OK,
+            var sig = this.tps.GetDevice("信号源1");
+            var spe = this.tps.GetDevice("频谱仪");
+            if(sig == null || spe == null)
+            {
+                ShowMessage(MsgType.Error, string.Format("仪器不齐全,{0}/{1}无法运行",parameters.Channel,parameters.Name));
+                return false;
+            }
+
+            int[] values = parameters.Parameters.GetParameterToArray<int>("频率");
+            int delay  = parameters.Parameters.GetParameter<int>("通道延迟");
+
+            if (values == null)
+            {
+                ShowMessage(MsgType.Error, string.Format("配置文件中频率参数为空,{0}/{1}无法运行",parameters.Channel,parameters.Name));
+                return false;
+            }
+
+            sig.Write("设置频率", "2000");
+            
+            //开始测试
+            this.tps.SetTestTableCellValue(1, 4, values[0]);
+            this.tps.SetTestTableCellValue(1, 5, values[1]);
+            this.tps.SetTestTableCellValue(1, 6, values[2]);
+            tps.SetManualTableCellValue(1, 2, 111);
+
+            //当测试过程比较久时,要走合适的地方检测IsRuning
+            if (IsRuning == false)
+            {
+                //过程中如果IsRunning为false,表示按了停止测试按钮,要退出程序运行
+                return false;
+            }
+
+            return true;
+        }
+
+    }
+}

+ 68 - 0
tps/TpsAppDemo/models/InputRipple.cs

@@ -0,0 +1,68 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using PowerTestDemo.com;
+using AppLibs.Devices;
+
+namespace PowerTestDemo.models
+{
+    /// <summary>
+    /// 增益测试测试模板,继承自指标测试模板基类
+    /// </summary>
+    public class InputRipple : BaseModel
+    {
+        /// <summary>
+        /// 测试模板名称,测试指标配置表中的模板名称源自这个参数
+        /// </summary>
+        public InputRipple()
+        {
+            //首先要定义模板名称,excel 自动测试项总表中的指标测试模板的名称要和这个名称一致
+            TemplateName = "输入纹波模板"; 
+        }
+
+        /// <summary>
+        /// 重写的Run方法,当执行到这个测试指标项时,Run会被调用
+        /// </summary>
+        /// <param name="parameters"></param>
+        /// <returns></returns>
+        public override bool Run(TestNode parameters)
+        {
+            //检查当前指标需要的仪器是否OK,
+            var sig = this.tps.GetDevice("信号源1");
+            var spe = this.tps.GetDevice("频谱仪");
+            if(sig == null || spe == null)
+            {
+                ShowMessage(MsgType.Error, string.Format("仪器不齐全,{0}/{1}无法运行",parameters.Channel,parameters.Name));
+                return false;
+            }
+
+            int[] values = parameters.Parameters.GetParameterToArray<int>("频率");
+            int delay  = parameters.Parameters.GetParameter<int>("通道延迟");
+
+            if (values == null)
+            {
+                ShowMessage(MsgType.Error, string.Format("配置文件中频率参数为空,{0}/{1}无法运行",parameters.Channel,parameters.Name));
+                return false;
+            }
+
+            //开始测试
+            this.tps.SetTestTableCellValue(0, 4, values[0]);
+            this.tps.SetTestTableCellValue(0, 5, values[1]);
+            this.tps.SetTestTableCellValue(0, 6, values[2]);
+            tps.SetManualTableCellValue(0, 2, delay);
+
+            //当测试过程比较久时,要走合适的地方检测IsRuning
+            if (IsRuning == false)
+            {
+                //过程中如果IsRunning为false,表示按了停止测试按钮,要退出程序运行
+                return false;
+            }
+
+            return true;
+        }
+
+    }
+}

+ 68 - 0
tps/TpsAppDemo/models/InputSurge.cs

@@ -0,0 +1,68 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using PowerTestDemo.com;
+using AppLibs.Devices;
+
+namespace PowerTestDemo.models
+{
+    /// <summary>
+    /// 增益测试测试模板,继承自指标测试模板基类
+    /// </summary>
+    public class InputSurge : BaseModel
+    {
+        /// <summary>
+        /// 测试模板名称,测试指标配置表中的模板名称源自这个参数
+        /// </summary>
+        public InputSurge()
+        {
+            //首先要定义模板名称,excel 自动测试项总表中的指标测试模板的名称要和这个名称一致
+            TemplateName = "输入浪涌模板"; 
+        }
+
+        /// <summary>
+        /// 重写的Run方法,当执行到这个测试指标项时,Run会被调用
+        /// </summary>
+        /// <param name="parameters"></param>
+        /// <returns></returns>
+        public override bool Run(TestNode parameters)
+        {
+            //检查当前指标需要的仪器是否OK,
+            var sig = this.tps.GetDevice("信号源1");
+            var spe = this.tps.GetDevice("频谱仪");
+            if(sig == null || spe == null)
+            {
+                ShowMessage(MsgType.Error, string.Format("仪器不齐全,{0}/{1}无法运行",parameters.Channel,parameters.Name));
+                return false;
+            }
+
+            int[] values = parameters.Parameters.GetParameterToArray<int>("频率");
+            int delay  = parameters.Parameters.GetParameter<int>("通道延迟");
+
+            if (values == null)
+            {
+                ShowMessage(MsgType.Error, string.Format("配置文件中频率参数为空,{0}/{1}无法运行",parameters.Channel,parameters.Name));
+                return false;
+            }
+
+            //开始测试
+            this.tps.SetTestTableCellValue(0, 4, values[0]);
+            this.tps.SetTestTableCellValue(0, 5, values[1]);
+            this.tps.SetTestTableCellValue(0, 6, values[2]);
+            tps.SetManualTableCellValue(0, 2, delay);
+
+            //当测试过程比较久时,要走合适的地方检测IsRuning
+            if (IsRuning == false)
+            {
+                //过程中如果IsRunning为false,表示按了停止测试按钮,要退出程序运行
+                return false;
+            }
+
+            return true;
+        }
+
+    }
+}

+ 70 - 0
tps/TpsAppDemo/models/InputVoltage.cs

@@ -0,0 +1,70 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using PowerTestDemo.com;
+using AppLibs.Devices;
+
+namespace PowerTestDemo.models
+{
+    /// <summary>
+    /// 增益测试测试模板,继承自指标测试模板基类
+    /// </summary>
+    public class InputVoltage : BaseModel
+    {
+        /// <summary>
+        /// 测试模板名称,测试指标配置表中的模板名称源自这个参数
+        /// </summary>
+        public InputVoltage()
+        {
+            //首先要定义模板名称,excel 自动测试项总表中的指标测试模板的名称要和这个名称一致
+            TemplateName = "输入电压模板"; 
+        }
+
+        /// <summary>
+        /// 重写的Run方法,当执行到这个测试指标项时,Run会被调用
+        /// </summary>
+        /// <param name="parameters"></param>
+        /// <returns></returns>
+        public override bool Run(TestNode parameters)
+        {
+            //检查当前指标需要的仪器是否OK,
+            //var sig = this.tps.GetDevice("信号源1");
+            //var spe = this.tps.GetDevice("频谱仪");
+            //if(sig == null || spe == null)
+            //{
+            //    ShowMessage(MsgType.Error, string.Format("仪器不齐全,{0}/{1}无法运行",parameters.Channel,parameters.Name));
+            //    return false;
+            //}
+
+            int ch = parameters.Parameters.GetParameter<int>("板卡通道");
+            double[] ratedThreshold= parameters.Parameters.GetParameterToArray<double>("额定阈值");
+            double[] downThreshold = parameters.Parameters.GetParameterToArray<double>("下拉偏阈值");
+            double[] upThreshold = parameters.Parameters.GetParameterToArray<double>("上拉偏阈值");
+
+            if (ratedThreshold == null)
+            {
+                ShowMessage(MsgType.Error, string.Format("配置文件中频率参数为空,{0}/{1}无法运行",parameters.Channel,parameters.Name));
+                return false;
+            }
+
+            //开始测试
+            this.tps.SetTestTableCellValue(0, 4, ratedThreshold[0]);
+            this.tps.SetTestTableCellValue(0, 5, downThreshold[1]);
+            this.tps.SetTestTableCellValue(0, 6, upThreshold[0]);
+            tps.SetManualTableCellValue(0, 2, 1);
+
+            //当测试过程比较久时,要走合适的地方检测IsRuning
+            if (IsRuning == false)
+            {
+                //过程中如果IsRunning为false,表示按了停止测试按钮,要退出程序运行
+                return false;
+            }
+
+            return true;
+        }
+
+    }
+}

+ 4 - 0
tps/TpsAppDemo/obj/Debug/.NETFramework,Version=v4.5.2.AssemblyAttributes.cs

@@ -0,0 +1,4 @@
+// <autogenerated />
+using System;
+using System.Reflection;
+[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.5.2", FrameworkDisplayName = ".NET Framework 4.5.2")]

BIN
tps/TpsAppDemo/obj/Debug/DesignTimeResolveAssemblyReferences.cache


BIN
tps/TpsAppDemo/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache


BIN
tps/TpsAppDemo/obj/Debug/PowerTestDemo.FrmMain.resources


BIN
tps/TpsAppDemo/obj/Debug/PowerTestDemo.Properties.Resources.resources


BIN
tps/TpsAppDemo/obj/Debug/PowerTestDemo.csproj.AssemblyReference.cache


+ 0 - 0
tps/TpsAppDemo/obj/Debug/PowerTestDemo.csproj.CopyComplete


+ 1 - 0
tps/TpsAppDemo/obj/Debug/PowerTestDemo.csproj.CoreCompileInputs.cache

@@ -0,0 +1 @@
+07a568a9e76648861aba87fb0807aa9b2863f23b

+ 21 - 0
tps/TpsAppDemo/obj/Debug/PowerTestDemo.csproj.FileListAbsolute.txt

@@ -0,0 +1,21 @@
+E:\PowerTestStudio\exe\apps\TpsAppDemo\config\测试#常温测试#035变频模块.xlsx
+E:\PowerTestStudio\exe\apps\TpsAppDemo\test.png
+E:\PowerTestStudio\exe\apps\TpsAppDemo\bundle.config
+E:\PowerTestStudio\exe\apps\TpsAppDemo\PowerTestDemo.dll
+E:\PowerTestStudio\exe\apps\TpsAppDemo\PowerTestDemo.pdb
+E:\PowerTestStudio\tps\TpsAppDemo\obj\Debug\PowerTestDemo.FrmMain.resources
+E:\PowerTestStudio\tps\TpsAppDemo\obj\Debug\PowerTestDemo.Properties.Resources.resources
+E:\PowerTestStudio\tps\TpsAppDemo\obj\Debug\PowerTestDemo.views.FrmDevice.resources
+E:\PowerTestStudio\tps\TpsAppDemo\obj\Debug\PowerTestDemo.views.FrmMsg.resources
+E:\PowerTestStudio\tps\TpsAppDemo\obj\Debug\PowerTestDemo.csproj.GenerateResource.cache
+E:\PowerTestStudio\tps\TpsAppDemo\obj\Debug\PowerTestDemo.csproj.CoreCompileInputs.cache
+E:\PowerTestStudio\tps\TpsAppDemo\obj\Debug\PowerTestDemo.csproj.CopyComplete
+E:\PowerTestStudio\tps\TpsAppDemo\obj\Debug\PowerTestDemo.dll
+E:\PowerTestStudio\tps\TpsAppDemo\obj\Debug\PowerTestDemo.pdb
+E:\PowerTestStudio\exe\apps\PowerTestDemo\test.png
+E:\PowerTestStudio\exe\apps\PowerTestDemo\bundle.config
+E:\PowerTestStudio\exe\apps\PowerTestDemo\PowerTestDemo.dll
+E:\PowerTestStudio\exe\apps\PowerTestDemo\PowerTestDemo.pdb
+E:\PowerTestStudio\exe\apps\PowerTestDemo\config\测试#常温测试#DC16MK.xlsx
+E:\PowerTestStudio\exe\apps\PowerTestDemo\config\测试#常温测试#035变频模块.xlsx
+E:\PowerTestStudio\tps\TpsAppDemo\obj\Debug\PowerTestDemo.csproj.AssemblyReference.cache

BIN
tps/TpsAppDemo/obj/Debug/PowerTestDemo.csproj.GenerateResource.cache


BIN
tps/TpsAppDemo/obj/Debug/PowerTestDemo.dll


BIN
tps/TpsAppDemo/obj/Debug/PowerTestDemo.pdb


BIN
tps/TpsAppDemo/obj/Debug/PowerTestDemo.views.FrmDevice.resources


BIN
tps/TpsAppDemo/obj/Debug/PowerTestDemo.views.FrmMsg.resources


BIN
tps/TpsAppDemo/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll


BIN
tps/TpsAppDemo/obj/Debug/TpsAppDemo.FrmMain.resources


BIN
tps/TpsAppDemo/obj/Debug/TpsAppDemo.Properties.Resources.resources


BIN
tps/TpsAppDemo/obj/Debug/TpsAppDemo.csproj.AssemblyReference.cache


+ 0 - 0
tps/TpsAppDemo/obj/Debug/TpsAppDemo.csproj.CopyComplete


+ 1 - 0
tps/TpsAppDemo/obj/Debug/TpsAppDemo.csproj.CoreCompileInputs.cache

@@ -0,0 +1 @@
+9a456593e937472244582ea2fe153e08d9f20d49

+ 14 - 0
tps/TpsAppDemo/obj/Debug/TpsAppDemo.csproj.FileListAbsolute.txt

@@ -0,0 +1,14 @@
+D:\code\LabStudio\exe\apps\TpsAppDemo\config\测试#常温测试#035变频模块.xlsx
+D:\code\LabStudio\exe\apps\TpsAppDemo\test.png
+D:\code\LabStudio\exe\apps\TpsAppDemo\bundle.config
+D:\code\LabStudio\exe\apps\TpsAppDemo\TpsAppDemo.dll
+D:\code\LabStudio\exe\apps\TpsAppDemo\TpsAppDemo.pdb
+D:\code\LabStudio\tps\TpsAppDemo\obj\Debug\TpsAppDemo.FrmMain.resources
+D:\code\LabStudio\tps\TpsAppDemo\obj\Debug\TpsAppDemo.Properties.Resources.resources
+D:\code\LabStudio\tps\TpsAppDemo\obj\Debug\TpsAppDemo.csproj.GenerateResource.cache
+D:\code\LabStudio\tps\TpsAppDemo\obj\Debug\TpsAppDemo.csproj.CoreCompileInputs.cache
+D:\code\LabStudio\tps\TpsAppDemo\obj\Debug\TpsAppDemo.csproj.CopyComplete
+D:\code\LabStudio\tps\TpsAppDemo\obj\Debug\TpsAppDemo.dll
+D:\code\LabStudio\tps\TpsAppDemo\obj\Debug\TpsAppDemo.pdb
+D:\code\LabStudio\tps\TpsAppDemo\obj\Debug\TpsAppDemo.views.FrmDevice.resources
+D:\code\LabStudio\tps\TpsAppDemo\obj\Debug\TpsAppDemo.views.FrmMsg.resources

BIN
tps/TpsAppDemo/obj/Debug/TpsAppDemo.csproj.GenerateResource.cache


BIN
tps/TpsAppDemo/obj/Debug/TpsAppDemo.dll


BIN
tps/TpsAppDemo/obj/Debug/TpsAppDemo.pdb


BIN
tps/TpsAppDemo/obj/Debug/TpsAppDemo.views.FrmDevice.resources


BIN
tps/TpsAppDemo/obj/Debug/TpsAppDemo.views.FrmMsg.resources


+ 4 - 0
tps/TpsAppDemo/packages.config

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="FreeSpire.XLS" version="10.10.0" targetFramework="net452" />
+</packages>

BIN
tps/TpsAppDemo/packages/FreeSpire.XLS.10.10.0/.signature.p7s


BIN
tps/TpsAppDemo/packages/FreeSpire.XLS.10.10.0/FreeSpire.XLS.10.10.0.nupkg


BIN
tps/TpsAppDemo/packages/FreeSpire.XLS.10.10.0/lib/MonoAndroid/Spire.License.dll


+ 107 - 0
tps/TpsAppDemo/packages/FreeSpire.XLS.10.10.0/lib/MonoAndroid/Spire.License.xml

@@ -0,0 +1,107 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>Spire.License</name>
+    </assembly>
+    <members>
+        <member name="P:Spire.License.BaseLicenseInfo.IsBindingSuccess">
+            <summary>
+            Gets a value indicating whether license is binding success.
+            </summary>
+            <value><c>true</c> if license is binding success; otherwise, <c>false</c>.</value>
+        </member>
+        <member name="P:Spire.License.LicenseInfo.OriginalVersion">
+            <summary>
+            If current license object is converted from a previouse version license object,
+            this field will be set to the version of the original license object.
+            Otherwise it's null.
+            </summary>
+        </member>
+        <member name="P:Spire.License.LicenseInfo.IsUpdateRightExpired">
+            <summary>
+            Indicates whether the lincese puchase date is during one year.
+            </summary>
+        </member>
+        <member name="M:Spire.License.LicenseProvider.SetLicenseFileFullPath(System.String)">
+            <summary>
+            Provides a license by a license file path, which will be used for loading license.
+            </summary>
+            <param name="licenseFileFullPath">License file full path.</param>
+        </member>
+        <member name="M:Spire.License.LicenseProvider.SetLicenseFileName(System.String)">
+            <summary>
+            Sets the license file name, which will be used for loading license.
+            </summary>
+            <param name="licenseFileName">License file name.</param>
+        </member>
+        <member name="M:Spire.License.LicenseProvider.GetLicenseFileName">
+            <summary>
+            Gets the current license file name.
+            </summary>
+            <returns>The license file name, the default license file name is [license.elic.xml].</returns>
+        </member>
+        <member name="M:Spire.License.LicenseProvider.SetLicenseFile(System.IO.FileInfo)">
+            <summary>
+            Provides a license by a license file object, which will be used for loading license.
+            </summary>
+            <param name="licenseFile">License file object.</param>
+        </member>
+        <member name="M:Spire.License.LicenseProvider.SetLicenseFileStream(System.IO.Stream)">
+            <summary>
+            Provides a license by a license stream, which will be used for loading license.
+            </summary>
+            <param name="licenseFileStream">License data stream.</param>
+        </member>
+        <member name="M:Spire.License.LicenseProvider.SetLicenseKey(System.String)">
+            <summary>
+            Provides a license by a license key, which will be used for loading license.
+            </summary>
+            <param name="key">The value of the Key attribute of the element License of you license xml file.</param>
+        </member>
+        <member name="M:Spire.License.LicenseProvider.SetLicenseKey(System.String,System.Boolean)">
+            <summary>    
+            Provides a license by a license key, which will be used for loading license.
+            </summary>
+            <param name="key">The value of the Key attribute of the element License of you license xml file.</param> 
+            <param name="bIsSerialization">The serialization to verify license key.</param>
+        </member>
+        <member name="M:Spire.License.LicenseProvider.ClearLicense">
+            <summary>
+            Clear all cached license.
+            </summary>
+        </member>
+        <member name="M:Spire.License.LicenseProvider.LoadLicense">
+            <summary>
+            Load the license provided by current setting to the license cache.
+            </summary>
+        </member>
+        <member name="M:Spire.License.LicenseProvider.LoadLicense(System.Type)">
+            <summary>
+            Load the license provided by current setting to the license cache.
+            </summary>
+            <param name="type">Runtime product type</param>
+        </member>
+        <member name="M:Spire.License.LicenseProvider.GetLicense(System.ComponentModel.LicenseContext,System.Type,System.Object,System.Boolean)">
+            <param name="context"></param>
+            <param name="type"></param>
+            <param name="instance"></param>
+            <param name="allowExceptions"></param>
+            <returns></returns>
+        </member>
+        <member name="P:Spire.License.V1_1.LicenseInfo.IsUpdateRightExpired">
+            <summary>
+            Indicates whether the lincese puchase date is during one year.
+            </summary>
+        </member>
+        <member name="P:Spire.License.V1_2.LicenseInfo.IsUpdateRightExpired">
+            <summary>
+            Indicates whether the lincese puchase date is during one year.
+            </summary>
+        </member>
+        <member name="P:Spire.License.V1_0.LicenseInfo.IsUpdateRightExpired">
+            <summary>
+            Indicates whether the lincese puchase date is during one year.
+            </summary>
+        </member>
+    </members>
+</doc>

BIN
tps/TpsAppDemo/packages/FreeSpire.XLS.10.10.0/lib/MonoAndroid/Spire.Pdf.dll


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 42094 - 0
tps/TpsAppDemo/packages/FreeSpire.XLS.10.10.0/lib/MonoAndroid/Spire.Pdf.xml


+ 0 - 0
tps/TpsAppDemo/packages/FreeSpire.XLS.10.10.0/lib/MonoAndroid/Spire.XLS.dll


Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác