From adbeeccfcddddbba49718136a1ebb3429ab3b7ae Mon Sep 17 00:00:00 2001
From: lss <Lss@HanInfo>
Date: 星期三, 04 六月 2025 08:35:50 +0800
Subject: [PATCH] 电梯流程开发

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/AgvController.cs                                   |    1 
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/.vs/HH.WCS.JiaTong/v17/DocumentLayout.backup.json      |  807 ++--
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/netstandard1.3/NModbus.dll |    0 
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/core/WCSCore.cs                                        |   41 
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/wms/ContainerHelper.cs                                 |    2 
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages.config                                        |    1 
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/README.md                      |    1 
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/net46/NModbus.xml          | 2099 +++++++++++
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/netstandard1.3/NModbus.xml | 2046 +++++++++++
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/config/config.json                                     |   33 
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/device/ModbusHelper.cs                                 |  181 
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/process/TaskProcess.cs                                 |  247 
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/net46/NModbus.dll          |    0 
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs                                       |  219 
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/net6.0/NModbus.xml         | 2046 +++++++++++
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/device/PlcHelper.cs                                    |  117 
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/HH.WCS.JiaTong.csproj                                  |    3 
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/LICENSE.txt                    |   21 
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/.signature.p7s                 |    0 
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/device/TcpClient.cs                                    |    2 
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/net6.0/NModbus.dll         |    0 
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/netstandard2.0/NModbus.xml | 2046 +++++++++++
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/wms/LocationHelper.cs                                  |   37 
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/.vs/HH.WCS.JiaTong/v17/DocumentLayout.json             |  814 ++--
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/netstandard2.0/NModbus.dll |    0 
 25 files changed, 9,558 insertions(+), 1,206 deletions(-)

diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/.vs/HH.WCS.JiaTong/v17/DocumentLayout.backup.json b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/.vs/HH.WCS.JiaTong/v17/DocumentLayout.backup.json
index 9d460c5..3815fc5 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/.vs/HH.WCS.JiaTong/v17/DocumentLayout.backup.json
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/.vs/HH.WCS.JiaTong/v17/DocumentLayout.backup.json
@@ -3,20 +3,12 @@
   "WorkspaceRootPath": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\",
   "Documents": [
     {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\util\\settings.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:util\\settings.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|d:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\hh-0035_hefeiliaotongagv\\hh.wcs.mobox3\\hh.wcs.mobox3.jiatong\\wms\\locationhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:wms\\locationhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
       "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\apihelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:api\\apihelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\apimodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:api\\apimodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\wms\\containerhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:wms\\containerhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\wmscontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -27,32 +19,24 @@
       "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:api\\agvcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\config\\config.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:config\\config.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\moboxcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:api\\moboxcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\wcscore.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:core\\wcscore.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\mescontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:api\\mescontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\wcscore.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:core\\wcscore.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\apimodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:api\\apimodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\dispatch\\ndc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:dispatch\\ndc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\wms\\locationhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:wms\\locationhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\tcpclient.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:device\\tcpclient.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\s7helper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:device\\s7helper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\taskprocess.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:process\\taskprocess.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\deviceprocess.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -63,8 +47,64 @@
       "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:api\\likucontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\taskprocess.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:process\\taskprocess.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|d:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\hh-0035_hefeiliaotongagv\\hh.wcs.mobox3\\hh.wcs.mobox3.jiatong\\device\\modbushelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:device\\modbushelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\monitor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:core\\monitor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\wmscore.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:core\\wmscore.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\util\\settings.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:util\\settings.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\wcstask.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:models\\wcstask.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\s7helper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:device\\s7helper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\tcpclient.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:device\\tcpclient.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\plchelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:device\\plchelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\tcpserver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:device\\tcpserver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\util\\loghelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:util\\loghelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|d:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\hh-0035_hefeiliaotongagv\\hh.wcs.mobox3\\hh.wcs.mobox3.jiatong\\util\\sqlhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:util\\sqlhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|d:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\hh-0035_hefeiliaotongagv\\hh.wcs.mobox3\\hh.wcs.mobox3.jiatong\\util\\strhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:util\\strhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\config\\config.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:config\\config.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|d:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\hh-0035_hefeiliaotongagv\\hh.wcs.mobox3\\hh.wcs.mobox3.jiatong\\api\\moboxcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:api\\moboxcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\dispatch\\ndc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:dispatch\\ndc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\wms\\wcshelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -87,32 +127,12 @@
       "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\wcstask.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:models\\wcstask.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\wmscore.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:core\\wmscore.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
       "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\cntritemdetail.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:models\\cntritemdetail.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\wms\\containerhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:wms\\containerhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
       "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\httpmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:process\\httpmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\plchelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:device\\plchelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\monitor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:core\\monitor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\wmstask.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -121,14 +141,6 @@
     {
       "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\errorinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:models\\errorinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\util\\loghelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:util\\loghelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\tcpserver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:device\\tcpserver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\debugcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -142,7 +154,7 @@
       "DocumentGroups": [
         {
           "DockedWidth": 200,
-          "SelectedChildIndex": 13,
+          "SelectedChildIndex": 4,
           "Children": [
             {
               "$type": "Bookmark",
@@ -158,26 +170,65 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 2,
+              "DocumentIndex": 8,
+              "Title": "TaskProcess.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\TaskProcess.cs",
+              "RelativeDocumentMoniker": "process\\TaskProcess.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\TaskProcess.cs",
+              "RelativeToolTip": "process\\TaskProcess.cs",
+              "ViewState": "AgIAAAsBAAAAAAAAAAAowCQBAAAzAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-16T02:47:02.633Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 0,
               "Title": "ApiHelper.cs",
               "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\ApiHelper.cs",
               "RelativeDocumentMoniker": "api\\ApiHelper.cs",
               "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\ApiHelper.cs",
               "RelativeToolTip": "api\\ApiHelper.cs",
-              "ViewState": "AgIAAAcIAAAAAAAAAAAnwKYIAABaAAAAAAAAAA==",
+              "ViewState": "AgIAANkCAAAAAAAAAAAcwPACAAA9AAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-05-16T00:57:25.72Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 1,
+              "DocumentIndex": 3,
+              "Title": "AgvController.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\AgvController.cs",
+              "RelativeDocumentMoniker": "api\\AgvController.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\AgvController.cs",
+              "RelativeToolTip": "api\\AgvController.cs",
+              "ViewState": "AgIAABwAAAAAAAAAAAAAwDkAAAAtAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-27T00:37:58.83Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 5,
+              "Title": "MesController.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\MesController.cs",
+              "RelativeDocumentMoniker": "api\\MesController.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\MesController.cs",
+              "RelativeToolTip": "api\\MesController.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAABsAAAAvAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-15T08:45:16.362Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 7,
               "Title": "LocationHelper.cs",
               "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\wms\\LocationHelper.cs",
               "RelativeDocumentMoniker": "wms\\LocationHelper.cs",
               "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\wms\\LocationHelper.cs",
               "RelativeToolTip": "wms\\LocationHelper.cs",
-              "ViewState": "AgIAAOoAAAAAAAAAAAAhwAgBAAAOAAAAAAAAAA==",
+              "ViewState": "AgIAANEAAAAAAAAAAAAswNoAAAAeAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-05-16T02:43:35.272Z",
               "EditorCaption": ""
@@ -185,313 +236,71 @@
             {
               "$type": "Document",
               "DocumentIndex": 6,
-              "Title": "config.json",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\config\\config.json",
-              "RelativeDocumentMoniker": "config\\config.json",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\config\\config.json",
-              "RelativeToolTip": "config\\config.json",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAADsBAAAPAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
-              "WhenOpened": "2025-05-20T03:38:30.131Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 11,
-              "Title": "TcpClient.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\TcpClient.cs",
-              "RelativeDocumentMoniker": "device\\TcpClient.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\TcpClient.cs",
-              "RelativeToolTip": "device\\TcpClient.cs",
-              "ViewState": "AgIAACsAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-17T10:08:04.22Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 9,
-              "Title": "WCSCore.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\WCSCore.cs",
-              "RelativeDocumentMoniker": "core\\WCSCore.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\WCSCore.cs",
-              "RelativeToolTip": "core\\WCSCore.cs",
-              "ViewState": "AgIAACQAAAAAAAAAAADwvzkAAAAmAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-16T04:08:16.115Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 16,
-              "Title": "WCSHelper.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\wms\\WCSHelper.cs",
-              "RelativeDocumentMoniker": "wms\\WCSHelper.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\wms\\WCSHelper.cs",
-              "RelativeToolTip": "wms\\WCSHelper.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAABIAAAAdAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-16T02:38:08.426Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 4,
-              "Title": "WmsController.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\WmsController.cs",
-              "RelativeDocumentMoniker": "api\\WmsController.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\WmsController.cs",
-              "RelativeToolTip": "api\\WmsController.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAADwvxkAAAAuAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-16T06:27:02.597Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 7,
-              "Title": "MoboxController.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\MoboxController.cs",
-              "RelativeDocumentMoniker": "api\\MoboxController.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\MoboxController.cs",
-              "RelativeToolTip": "api\\MoboxController.cs",
-              "ViewState": "AgIAAFwAAAAAAAAAAAAuwG8AAAAlAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-16T06:32:03.117Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 5,
-              "Title": "AgvController.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\AgvController.cs",
-              "RelativeDocumentMoniker": "api\\AgvController.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\AgvController.cs",
-              "RelativeToolTip": "api\\AgvController.cs",
-              "ViewState": "AgIAACgAAAAAAAAAAAAawDgAAAAtAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-27T00:37:58.83Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 3,
               "Title": "ApiModel.cs",
               "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\ApiModel.cs",
               "RelativeDocumentMoniker": "api\\ApiModel.cs",
               "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\ApiModel.cs",
               "RelativeToolTip": "api\\ApiModel.cs",
-              "ViewState": "AgIAAHIDAAAAAAAAAAAlwLsDAAAcAAAAAAAAAA==",
+              "ViewState": "AgIAAOkBAAAAAAAAAIAxwEMCAAAWAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-05-19T01:50:59.162Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 0,
-              "Title": "Settings.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\util\\Settings.cs",
-              "RelativeDocumentMoniker": "util\\Settings.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\util\\Settings.cs",
-              "RelativeToolTip": "util\\Settings.cs",
-              "ViewState": "AgIAAEoAAAAAAAAAAAASwFwAAAAdAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-21T09:21:24.805Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 12,
-              "Title": "S7Helper.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\S7Helper.cs",
-              "RelativeDocumentMoniker": "device\\S7Helper.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\S7Helper.cs",
-              "RelativeToolTip": "device\\S7Helper.cs",
-              "ViewState": "AgIAADAAAAAAAAAAAAArwEwAAAARAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-16T06:16:10.644Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 13,
-              "Title": "DeviceProcess.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\DeviceProcess.cs",
-              "RelativeDocumentMoniker": "process\\DeviceProcess.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\DeviceProcess.cs",
-              "RelativeToolTip": "process\\DeviceProcess.cs",
-              "ViewState": "AgIAAKEAAAAAAAAAAAAWwK4AAAAzAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-16T02:36:49.555Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 8,
-              "Title": "MesController.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\MesController.cs",
-              "RelativeDocumentMoniker": "api\\MesController.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\MesController.cs",
-              "RelativeToolTip": "api\\MesController.cs",
-              "ViewState": "AgIAABEAAAAAAAAAAAAqwDwAAAAlAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-15T08:45:16.362Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 10,
-              "Title": "NDC.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\dispatch\\NDC.cs",
-              "RelativeDocumentMoniker": "dispatch\\NDC.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\dispatch\\NDC.cs",
-              "RelativeToolTip": "dispatch\\NDC.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAABUAAAAuAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-29T07:39:22.32Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 15,
-              "Title": "TaskProcess.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\TaskProcess.cs",
-              "RelativeDocumentMoniker": "process\\TaskProcess.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\TaskProcess.cs",
-              "RelativeToolTip": "process\\TaskProcess.cs",
-              "ViewState": "AgIAAGIDAAAAAAAAAADgv3YDAAA6AAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-16T02:47:02.633Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 14,
-              "Title": "LiKuController.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\LiKuController.cs",
-              "RelativeDocumentMoniker": "api\\LiKuController.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\LiKuController.cs",
-              "RelativeToolTip": "api\\LiKuController.cs",
-              "ViewState": "AgIAABEAAAAAAAAAAADwvycAAAA2AAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-15T08:45:06.1Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 17,
-              "Title": "configDesc.txt",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\config\\configDesc.txt",
-              "RelativeDocumentMoniker": "config\\configDesc.txt",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\config\\configDesc.txt",
-              "RelativeToolTip": "config\\configDesc.txt",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAAPAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003109|",
-              "WhenOpened": "2025-05-16T03:10:42.328Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 18,
-              "Title": "TN_Factory.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\TN_Factory.cs",
-              "RelativeDocumentMoniker": "models\\TN_Factory.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\TN_Factory.cs",
-              "RelativeToolTip": "models\\TN_Factory.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-27T01:18:07.43Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 19,
-              "Title": "SwaggerControllerDescProvider.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\App_Start\\SwaggerControllerDescProvider.cs",
-              "RelativeDocumentMoniker": "App_Start\\SwaggerControllerDescProvider.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\App_Start\\SwaggerControllerDescProvider.cs",
-              "RelativeToolTip": "App_Start\\SwaggerControllerDescProvider.cs",
-              "ViewState": "AgIAAAkAAAAAAAAAAADwvxUAAABVAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-23T08:50:04.309Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 20,
-              "Title": "Program.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\Program.cs",
-              "RelativeDocumentMoniker": "Program.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\Program.cs",
-              "RelativeToolTip": "Program.cs",
-              "ViewState": "AgIAAHEAAAAAAAAAAAAhwH0AAAAZAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-15T07:55:15.792Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 21,
-              "Title": "WCSTask.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\WCSTask.cs",
-              "RelativeDocumentMoniker": "models\\WCSTask.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\WCSTask.cs",
-              "RelativeToolTip": "models\\WCSTask.cs",
-              "ViewState": "AgIAACYAAAAAAAAAAAAnwDcAAAA1AAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-22T02:16:30.019Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 22,
-              "Title": "WMSCore.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\WMSCore.cs",
-              "RelativeDocumentMoniker": "core\\WMSCore.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\WMSCore.cs",
-              "RelativeToolTip": "core\\WMSCore.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-23T02:36:02.693Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 23,
-              "Title": "CntrItemDetail.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\CntrItemDetail.cs",
-              "RelativeDocumentMoniker": "models\\CntrItemDetail.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\CntrItemDetail.cs",
-              "RelativeToolTip": "models\\CntrItemDetail.cs",
-              "ViewState": "AgIAAA8AAAAAAAAAAAAlwDMAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-20T01:32:50.417Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 24,
+              "DocumentIndex": 1,
               "Title": "ContainerHelper.cs",
               "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\wms\\ContainerHelper.cs",
               "RelativeDocumentMoniker": "wms\\ContainerHelper.cs",
               "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\wms\\ContainerHelper.cs",
               "RelativeToolTip": "wms\\ContainerHelper.cs",
-              "ViewState": "AgIAAKwAAAAAAAAAAAAhwM4AAAAdAAAAAAAAAA==",
+              "ViewState": "AgIAAJwAAAAAAAAAAAArwLAAAAARAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-19T01:51:56.763Z"
+              "WhenOpened": "2025-05-19T01:51:56.763Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 25,
-              "Title": "HttpModel.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\HttpModel.cs",
-              "RelativeDocumentMoniker": "process\\HttpModel.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\HttpModel.cs",
-              "RelativeToolTip": "process\\HttpModel.cs",
-              "ViewState": "AgIAAP8AAAAAAAAAAIA8wBIBAAAaAAAAAAAAAA==",
+              "DocumentIndex": 4,
+              "Title": "WCSCore.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\WCSCore.cs",
+              "RelativeDocumentMoniker": "core\\WCSCore.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\WCSCore.cs",
+              "RelativeToolTip": "core\\WCSCore.cs",
+              "ViewState": "AgIAABcAAAAAAAAAAADwv04AAAAwAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-19T02:52:21.113Z"
+              "WhenOpened": "2025-05-16T04:08:16.115Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 26,
-              "Title": "PlcHelper.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\PlcHelper.cs",
-              "RelativeDocumentMoniker": "device\\PlcHelper.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\PlcHelper.cs",
-              "RelativeToolTip": "device\\PlcHelper.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+              "DocumentIndex": 2,
+              "Title": "WmsController.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\WmsController.cs",
+              "RelativeDocumentMoniker": "api\\WmsController.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\WmsController.cs",
+              "RelativeToolTip": "api\\WmsController.cs",
+              "ViewState": "AgIAAAQAAAAAAAAAAAAUwBkAAAAdAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-22T00:29:11.159Z"
+              "WhenOpened": "2025-05-16T06:27:02.597Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 27,
+              "DocumentIndex": 10,
+              "Title": "LiKuController.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\LiKuController.cs",
+              "RelativeDocumentMoniker": "api\\LiKuController.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\LiKuController.cs",
+              "RelativeToolTip": "api\\LiKuController.cs",
+              "ViewState": "AgIAAAkAAAAAAAAAAAAAABYAAAAvAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-15T08:45:06.1Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 12,
               "Title": "Monitor.cs",
               "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\Monitor.cs",
               "RelativeDocumentMoniker": "core\\Monitor.cs",
@@ -499,23 +308,129 @@
               "RelativeToolTip": "core\\Monitor.cs",
               "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-20T07:46:57.307Z"
+              "WhenOpened": "2025-05-20T07:46:57.307Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 28,
-              "Title": "WMSTask.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\WMSTask.cs",
-              "RelativeDocumentMoniker": "models\\WMSTask.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\WMSTask.cs",
-              "RelativeToolTip": "models\\WMSTask.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAoAAAAqAAAAAAAAAA==",
+              "DocumentIndex": 13,
+              "Title": "WMSCore.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\WMSCore.cs",
+              "RelativeDocumentMoniker": "core\\WMSCore.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\WMSCore.cs",
+              "RelativeToolTip": "core\\WMSCore.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-20T02:20:35.853Z"
+              "WhenOpened": "2025-05-23T02:36:02.693Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 30,
+              "DocumentIndex": 11,
+              "Title": "ModbusHelper.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\ModbusHelper.cs",
+              "RelativeDocumentMoniker": "device\\ModbusHelper.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\ModbusHelper.cs",
+              "RelativeToolTip": "device\\ModbusHelper.cs",
+              "ViewState": "AgIAAIsAAAAAAAAAAAAvwJ0AAAAdAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-06-03T02:53:27.594Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 9,
+              "Title": "DeviceProcess.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\DeviceProcess.cs",
+              "RelativeDocumentMoniker": "process\\DeviceProcess.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\DeviceProcess.cs",
+              "RelativeToolTip": "process\\DeviceProcess.cs",
+              "ViewState": "AgIAAJkAAAAAAAAAAAAuwK4AAAAzAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-16T02:36:49.555Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 14,
+              "Title": "Settings.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\util\\Settings.cs",
+              "RelativeDocumentMoniker": "util\\Settings.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\util\\Settings.cs",
+              "RelativeToolTip": "util\\Settings.cs",
+              "ViewState": "AgIAAAUAAAAAAAAAAAAewBIAAAAlAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-21T09:21:24.805Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 15,
+              "Title": "WCSTask.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\WCSTask.cs",
+              "RelativeDocumentMoniker": "models\\WCSTask.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\WCSTask.cs",
+              "RelativeToolTip": "models\\WCSTask.cs",
+              "ViewState": "AgIAAEgAAAAAAAAAAIA6wFkAAAATAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-22T02:16:30.019Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 16,
+              "Title": "S7Helper.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\S7Helper.cs",
+              "RelativeDocumentMoniker": "device\\S7Helper.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\S7Helper.cs",
+              "RelativeToolTip": "device\\S7Helper.cs",
+              "ViewState": "AgIAAEwAAAAAAAAAAAAAAGQAAAAdAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-16T06:16:10.644Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 17,
+              "Title": "TcpClient.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\TcpClient.cs",
+              "RelativeDocumentMoniker": "device\\TcpClient.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\TcpClient.cs",
+              "RelativeToolTip": "device\\TcpClient.cs",
+              "ViewState": "AgIAABQAAAAAAAAAAADwvwoAAAATAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-17T10:08:04.22Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 18,
+              "Title": "PlcHelper.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\PlcHelper.cs",
+              "RelativeDocumentMoniker": "device\\PlcHelper.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\PlcHelper.cs",
+              "RelativeToolTip": "device\\PlcHelper.cs",
+              "ViewState": "AgIAABoAAAAAAAAAAADgvycAAAAGAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-22T00:29:11.159Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 19,
+              "Title": "TcpServer.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\TcpServer.cs",
+              "RelativeDocumentMoniker": "device\\TcpServer.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\TcpServer.cs",
+              "RelativeToolTip": "device\\TcpServer.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-16T06:21:24.336Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 20,
               "Title": "LogHelper.cs",
               "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\util\\LogHelper.cs",
               "RelativeDocumentMoniker": "util\\LogHelper.cs",
@@ -523,11 +438,181 @@
               "RelativeToolTip": "util\\LogHelper.cs",
               "ViewState": "AgIAAEsAAAAAAAAAAAArwFoAAAAmAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-19T03:24:31.681Z"
+              "WhenOpened": "2025-05-19T03:24:31.681Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 21,
+              "Title": "SqlHelper.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\util\\SqlHelper.cs",
+              "RelativeDocumentMoniker": "util\\SqlHelper.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\util\\SqlHelper.cs",
+              "RelativeToolTip": "util\\SqlHelper.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-06-03T02:52:51.169Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 22,
+              "Title": "StrHelper.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\util\\StrHelper.cs",
+              "RelativeDocumentMoniker": "util\\StrHelper.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\util\\StrHelper.cs",
+              "RelativeToolTip": "util\\StrHelper.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-06-03T02:52:49.55Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 23,
+              "Title": "config.json",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\config\\config.json",
+              "RelativeDocumentMoniker": "config\\config.json",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\config\\config.json",
+              "RelativeToolTip": "config\\config.json",
+              "ViewState": "AgIAABUAAAAAAAAAAAAAACUAAAAaAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
+              "WhenOpened": "2025-05-20T03:38:30.131Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 24,
+              "Title": "MoboxController.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\MoboxController.cs",
+              "RelativeDocumentMoniker": "api\\MoboxController.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\MoboxController.cs",
+              "RelativeToolTip": "api\\MoboxController.cs",
+              "ViewState": "AgIAABkAAAAAAAAAAAAAwCQAAAAiAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-16T06:32:03.117Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 26,
+              "Title": "WCSHelper.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\wms\\WCSHelper.cs",
+              "RelativeDocumentMoniker": "wms\\WCSHelper.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\wms\\WCSHelper.cs",
+              "RelativeToolTip": "wms\\WCSHelper.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAABIAAAAdAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-16T02:38:08.426Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 25,
+              "Title": "NDC.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\dispatch\\NDC.cs",
+              "RelativeDocumentMoniker": "dispatch\\NDC.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\dispatch\\NDC.cs",
+              "RelativeToolTip": "dispatch\\NDC.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAABUAAAAuAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-29T07:39:22.32Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 27,
+              "Title": "configDesc.txt",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\config\\configDesc.txt",
+              "RelativeDocumentMoniker": "config\\configDesc.txt",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\config\\configDesc.txt",
+              "RelativeToolTip": "config\\configDesc.txt",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAAPAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003109|",
+              "WhenOpened": "2025-05-16T03:10:42.328Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 28,
+              "Title": "TN_Factory.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\TN_Factory.cs",
+              "RelativeDocumentMoniker": "models\\TN_Factory.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\TN_Factory.cs",
+              "RelativeToolTip": "models\\TN_Factory.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-27T01:18:07.43Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
               "DocumentIndex": 29,
+              "Title": "SwaggerControllerDescProvider.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\App_Start\\SwaggerControllerDescProvider.cs",
+              "RelativeDocumentMoniker": "App_Start\\SwaggerControllerDescProvider.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\App_Start\\SwaggerControllerDescProvider.cs",
+              "RelativeToolTip": "App_Start\\SwaggerControllerDescProvider.cs",
+              "ViewState": "AgIAAAkAAAAAAAAAAADwvxUAAABVAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-23T08:50:04.309Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 30,
+              "Title": "Program.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\Program.cs",
+              "RelativeDocumentMoniker": "Program.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\Program.cs",
+              "RelativeToolTip": "Program.cs",
+              "ViewState": "AgIAAHEAAAAAAAAAAAAhwH0AAAAZAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-15T07:55:15.792Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 31,
+              "Title": "CntrItemDetail.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\CntrItemDetail.cs",
+              "RelativeDocumentMoniker": "models\\CntrItemDetail.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\CntrItemDetail.cs",
+              "RelativeToolTip": "models\\CntrItemDetail.cs",
+              "ViewState": "AgIAAA8AAAAAAAAAAAAlwDMAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-20T01:32:50.417Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 32,
+              "Title": "HttpModel.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\HttpModel.cs",
+              "RelativeDocumentMoniker": "process\\HttpModel.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\HttpModel.cs",
+              "RelativeToolTip": "process\\HttpModel.cs",
+              "ViewState": "AgIAAP8AAAAAAAAAAIA8wBIBAAAaAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-19T02:52:21.113Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 33,
+              "Title": "WMSTask.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\WMSTask.cs",
+              "RelativeDocumentMoniker": "models\\WMSTask.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\WMSTask.cs",
+              "RelativeToolTip": "models\\WMSTask.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAoAAAAqAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-20T02:20:35.853Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 34,
               "Title": "ErrorInfo.cs",
               "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\ErrorInfo.cs",
               "RelativeDocumentMoniker": "models\\ErrorInfo.cs",
@@ -535,23 +620,12 @@
               "RelativeToolTip": "models\\ErrorInfo.cs",
               "ViewState": "AgIAAAAAAAAAAAAAAAAuwAoAAAAmAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-19T03:47:50.271Z"
+              "WhenOpened": "2025-05-19T03:47:50.271Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 31,
-              "Title": "TcpServer.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\TcpServer.cs",
-              "RelativeDocumentMoniker": "device\\TcpServer.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\TcpServer.cs",
-              "RelativeToolTip": "device\\TcpServer.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-16T06:21:24.336Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 32,
+              "DocumentIndex": 35,
               "Title": "DebugController.cs",
               "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\DebugController.cs",
               "RelativeDocumentMoniker": "api\\DebugController.cs",
@@ -559,7 +633,8 @@
               "RelativeToolTip": "api\\DebugController.cs",
               "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-15T09:13:46.377Z"
+              "WhenOpened": "2025-05-15T09:13:46.377Z",
+              "EditorCaption": ""
             }
           ]
         },
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/.vs/HH.WCS.JiaTong/v17/DocumentLayout.json b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/.vs/HH.WCS.JiaTong/v17/DocumentLayout.json
index 1ece9fa..e535cc1 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/.vs/HH.WCS.JiaTong/v17/DocumentLayout.json
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/.vs/HH.WCS.JiaTong/v17/DocumentLayout.json
@@ -7,52 +7,36 @@
       "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:api\\apihelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\wms\\containerhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:wms\\containerhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
       "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\wmscontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:api\\wmscontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\mescontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:api\\mescontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\config\\config.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:config\\config.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\util\\settings.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:util\\settings.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|d:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\hh-0035_hefeiliaotongagv\\hh.wcs.mobox3\\hh.wcs.mobox3.jiatong\\wms\\locationhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:wms\\locationhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\apimodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:api\\apimodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\agvcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:api\\agvcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\moboxcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:api\\moboxcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
       "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\wcscore.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:core\\wcscore.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\dispatch\\ndc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:dispatch\\ndc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\mescontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:api\\mescontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\tcpclient.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:device\\tcpclient.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\apimodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:api\\apimodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\s7helper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:device\\s7helper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\wms\\locationhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:wms\\locationhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\taskprocess.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:process\\taskprocess.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\deviceprocess.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -63,8 +47,64 @@
       "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:api\\likucontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\taskprocess.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:process\\taskprocess.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|d:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\hh-0035_hefeiliaotongagv\\hh.wcs.mobox3\\hh.wcs.mobox3.jiatong\\device\\modbushelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:device\\modbushelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\monitor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:core\\monitor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\wmscore.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:core\\wmscore.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\util\\settings.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:util\\settings.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\wcstask.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:models\\wcstask.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\s7helper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:device\\s7helper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\tcpclient.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:device\\tcpclient.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\plchelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:device\\plchelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\tcpserver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:device\\tcpserver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\util\\loghelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:util\\loghelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|d:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\hh-0035_hefeiliaotongagv\\hh.wcs.mobox3\\hh.wcs.mobox3.jiatong\\util\\sqlhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:util\\sqlhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|d:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\hh-0035_hefeiliaotongagv\\hh.wcs.mobox3\\hh.wcs.mobox3.jiatong\\util\\strhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:util\\strhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\config\\config.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:config\\config.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|d:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\hh-0035_hefeiliaotongagv\\hh.wcs.mobox3\\hh.wcs.mobox3.jiatong\\api\\moboxcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:api\\moboxcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\dispatch\\ndc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:dispatch\\ndc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\wms\\wcshelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -87,32 +127,12 @@
       "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\wcstask.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:models\\wcstask.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\wmscore.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:core\\wmscore.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
       "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\cntritemdetail.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:models\\cntritemdetail.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\wms\\containerhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:wms\\containerhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
       "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\httpmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:process\\httpmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\plchelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:device\\plchelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\monitor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:core\\monitor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\wmstask.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -121,14 +141,6 @@
     {
       "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\errorinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:models\\errorinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\util\\loghelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:util\\loghelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\tcpserver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|solutionrelative:device\\tcpserver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{EBE15A59-A43A-43BE-8B4B-A6EC42E11111}|HH.WCS.JiaTong.csproj|D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\debugcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -142,7 +154,7 @@
       "DocumentGroups": [
         {
           "DockedWidth": 200,
-          "SelectedChildIndex": 13,
+          "SelectedChildIndex": 4,
           "Children": [
             {
               "$type": "Bookmark",
@@ -158,129 +170,15 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 3,
-              "Title": "config.json",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\config\\config.json",
-              "RelativeDocumentMoniker": "config\\config.json",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\config\\config.json",
-              "RelativeToolTip": "config\\config.json",
-              "ViewState": "AgIAAAYAAAAAAAAAAAAAAGABAAADAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
-              "WhenOpened": "2025-05-20T03:38:30.131Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 11,
-              "Title": "TcpClient.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\TcpClient.cs",
-              "RelativeDocumentMoniker": "device\\TcpClient.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\TcpClient.cs",
-              "RelativeToolTip": "device\\TcpClient.cs",
-              "ViewState": "AgIAACsAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-17T10:08:04.22Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 9,
-              "Title": "WCSCore.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\WCSCore.cs",
-              "RelativeDocumentMoniker": "core\\WCSCore.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\WCSCore.cs",
-              "RelativeToolTip": "core\\WCSCore.cs",
-              "ViewState": "AgIAACQAAAAAAAAAAADwvzkAAAAmAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-16T04:08:16.115Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 16,
-              "Title": "WCSHelper.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\wms\\WCSHelper.cs",
-              "RelativeDocumentMoniker": "wms\\WCSHelper.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\wms\\WCSHelper.cs",
-              "RelativeToolTip": "wms\\WCSHelper.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAABIAAAAdAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-16T02:38:08.426Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 1,
-              "Title": "WmsController.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\WmsController.cs",
-              "RelativeDocumentMoniker": "api\\WmsController.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\WmsController.cs",
-              "RelativeToolTip": "api\\WmsController.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAADwvxkAAAAuAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-16T06:27:02.597Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
               "DocumentIndex": 8,
-              "Title": "MoboxController.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\MoboxController.cs",
-              "RelativeDocumentMoniker": "api\\MoboxController.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\MoboxController.cs",
-              "RelativeToolTip": "api\\MoboxController.cs",
-              "ViewState": "AgIAAFwAAAAAAAAAAAAuwG8AAAAlAAAAAAAAAA==",
+              "Title": "TaskProcess.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\TaskProcess.cs",
+              "RelativeDocumentMoniker": "process\\TaskProcess.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\TaskProcess.cs",
+              "RelativeToolTip": "process\\TaskProcess.cs",
+              "ViewState": "AgIAAAsBAAAAAAAAAAAowCQBAAAzAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-16T06:32:03.117Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 7,
-              "Title": "AgvController.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\AgvController.cs",
-              "RelativeDocumentMoniker": "api\\AgvController.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\AgvController.cs",
-              "RelativeToolTip": "api\\AgvController.cs",
-              "ViewState": "AgIAACgAAAAAAAAAAAAawDgAAAAtAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-27T00:37:58.83Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 6,
-              "Title": "ApiModel.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\ApiModel.cs",
-              "RelativeDocumentMoniker": "api\\ApiModel.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\ApiModel.cs",
-              "RelativeToolTip": "api\\ApiModel.cs",
-              "ViewState": "AgIAAHIDAAAAAAAAAAAlwLsDAAAcAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-19T01:50:59.162Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 4,
-              "Title": "Settings.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\util\\Settings.cs",
-              "RelativeDocumentMoniker": "util\\Settings.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\util\\Settings.cs",
-              "RelativeToolTip": "util\\Settings.cs",
-              "ViewState": "AgIAAB8AAAAAAAAAAAAEwDIAAAAdAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-21T09:21:24.805Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 2,
-              "Title": "MesController.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\MesController.cs",
-              "RelativeDocumentMoniker": "api\\MesController.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\MesController.cs",
-              "RelativeToolTip": "api\\MesController.cs",
-              "ViewState": "AgIAAIUAAAAAAAAAAAAAwIsAAAAQAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-15T08:45:16.362Z",
+              "WhenOpened": "2025-05-16T02:47:02.633Z",
               "EditorCaption": ""
             },
             {
@@ -291,208 +189,118 @@
               "RelativeDocumentMoniker": "api\\ApiHelper.cs",
               "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\ApiHelper.cs",
               "RelativeToolTip": "api\\ApiHelper.cs",
-              "ViewState": "AgIAAAsHAAAAAAAAAAAtwA8HAAANAAAAAAAAAA==",
+              "ViewState": "AgIAANwCAAAAAAAAAAAcwIwDAAAiAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-05-16T00:57:25.72Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
+              "DocumentIndex": 3,
+              "Title": "AgvController.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\AgvController.cs",
+              "RelativeDocumentMoniker": "api\\AgvController.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\AgvController.cs",
+              "RelativeToolTip": "api\\AgvController.cs",
+              "ViewState": "AgIAABwAAAAAAAAAAAAAwDkAAAAtAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-27T00:37:58.83Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
               "DocumentIndex": 5,
+              "Title": "MesController.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\MesController.cs",
+              "RelativeDocumentMoniker": "api\\MesController.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\MesController.cs",
+              "RelativeToolTip": "api\\MesController.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAABsAAAAvAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-15T08:45:16.362Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 7,
               "Title": "LocationHelper.cs",
               "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\wms\\LocationHelper.cs",
               "RelativeDocumentMoniker": "wms\\LocationHelper.cs",
               "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\wms\\LocationHelper.cs",
               "RelativeToolTip": "wms\\LocationHelper.cs",
-              "ViewState": "AgIAAOoAAAAAAAAAAAAhwAgBAAAOAAAAAAAAAA==",
+              "ViewState": "AgIAANEAAAAAAAAAAAAswNoAAAAeAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-05-16T02:43:35.272Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 12,
-              "Title": "S7Helper.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\S7Helper.cs",
-              "RelativeDocumentMoniker": "device\\S7Helper.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\S7Helper.cs",
-              "RelativeToolTip": "device\\S7Helper.cs",
-              "ViewState": "AgIAADAAAAAAAAAAAAArwEwAAAARAAAAAAAAAA==",
+              "DocumentIndex": 6,
+              "Title": "ApiModel.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\ApiModel.cs",
+              "RelativeDocumentMoniker": "api\\ApiModel.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\ApiModel.cs",
+              "RelativeToolTip": "api\\ApiModel.cs",
+              "ViewState": "AgIAAOkBAAAAAAAAAIAxwEMCAAAWAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-16T06:16:10.644Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 13,
-              "Title": "DeviceProcess.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\DeviceProcess.cs",
-              "RelativeDocumentMoniker": "process\\DeviceProcess.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\DeviceProcess.cs",
-              "RelativeToolTip": "process\\DeviceProcess.cs",
-              "ViewState": "AgIAAKEAAAAAAAAAAAAWwK4AAAAzAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-16T02:36:49.555Z",
+              "WhenOpened": "2025-05-19T01:50:59.162Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 10,
-              "Title": "NDC.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\dispatch\\NDC.cs",
-              "RelativeDocumentMoniker": "dispatch\\NDC.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\dispatch\\NDC.cs",
-              "RelativeToolTip": "dispatch\\NDC.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAABUAAAAuAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-29T07:39:22.32Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 15,
-              "Title": "TaskProcess.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\TaskProcess.cs",
-              "RelativeDocumentMoniker": "process\\TaskProcess.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\TaskProcess.cs",
-              "RelativeToolTip": "process\\TaskProcess.cs",
-              "ViewState": "AgIAAGIDAAAAAAAAAADgv3YDAAA6AAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-16T02:47:02.633Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 14,
-              "Title": "LiKuController.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\LiKuController.cs",
-              "RelativeDocumentMoniker": "api\\LiKuController.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\LiKuController.cs",
-              "RelativeToolTip": "api\\LiKuController.cs",
-              "ViewState": "AgIAABEAAAAAAAAAAADwvycAAAA2AAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-15T08:45:06.1Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 17,
-              "Title": "configDesc.txt",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\config\\configDesc.txt",
-              "RelativeDocumentMoniker": "config\\configDesc.txt",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\config\\configDesc.txt",
-              "RelativeToolTip": "config\\configDesc.txt",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAAPAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003109|",
-              "WhenOpened": "2025-05-16T03:10:42.328Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 18,
-              "Title": "TN_Factory.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\TN_Factory.cs",
-              "RelativeDocumentMoniker": "models\\TN_Factory.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\TN_Factory.cs",
-              "RelativeToolTip": "models\\TN_Factory.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-27T01:18:07.43Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 19,
-              "Title": "SwaggerControllerDescProvider.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\App_Start\\SwaggerControllerDescProvider.cs",
-              "RelativeDocumentMoniker": "App_Start\\SwaggerControllerDescProvider.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\App_Start\\SwaggerControllerDescProvider.cs",
-              "RelativeToolTip": "App_Start\\SwaggerControllerDescProvider.cs",
-              "ViewState": "AgIAAAkAAAAAAAAAAADwvxUAAABVAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-23T08:50:04.309Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 20,
-              "Title": "Program.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\Program.cs",
-              "RelativeDocumentMoniker": "Program.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\Program.cs",
-              "RelativeToolTip": "Program.cs",
-              "ViewState": "AgIAAHEAAAAAAAAAAAAhwH0AAAAZAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-15T07:55:15.792Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 21,
-              "Title": "WCSTask.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\WCSTask.cs",
-              "RelativeDocumentMoniker": "models\\WCSTask.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\WCSTask.cs",
-              "RelativeToolTip": "models\\WCSTask.cs",
-              "ViewState": "AgIAACYAAAAAAAAAAAAnwDcAAAA1AAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-22T02:16:30.019Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 22,
-              "Title": "WMSCore.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\WMSCore.cs",
-              "RelativeDocumentMoniker": "core\\WMSCore.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\WMSCore.cs",
-              "RelativeToolTip": "core\\WMSCore.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-23T02:36:02.693Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 23,
-              "Title": "CntrItemDetail.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\CntrItemDetail.cs",
-              "RelativeDocumentMoniker": "models\\CntrItemDetail.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\CntrItemDetail.cs",
-              "RelativeToolTip": "models\\CntrItemDetail.cs",
-              "ViewState": "AgIAAA8AAAAAAAAAAAAlwDMAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-20T01:32:50.417Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 24,
+              "DocumentIndex": 1,
               "Title": "ContainerHelper.cs",
               "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\wms\\ContainerHelper.cs",
               "RelativeDocumentMoniker": "wms\\ContainerHelper.cs",
               "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\wms\\ContainerHelper.cs",
               "RelativeToolTip": "wms\\ContainerHelper.cs",
-              "ViewState": "AgIAAKwAAAAAAAAAAAAhwM4AAAAdAAAAAAAAAA==",
+              "ViewState": "AgIAAJwAAAAAAAAAAAArwLAAAAARAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-19T01:51:56.763Z"
+              "WhenOpened": "2025-05-19T01:51:56.763Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 25,
-              "Title": "HttpModel.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\HttpModel.cs",
-              "RelativeDocumentMoniker": "process\\HttpModel.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\HttpModel.cs",
-              "RelativeToolTip": "process\\HttpModel.cs",
-              "ViewState": "AgIAAP8AAAAAAAAAAIA8wBIBAAAaAAAAAAAAAA==",
+              "DocumentIndex": 4,
+              "Title": "WCSCore.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\WCSCore.cs",
+              "RelativeDocumentMoniker": "core\\WCSCore.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\WCSCore.cs",
+              "RelativeToolTip": "core\\WCSCore.cs",
+              "ViewState": "AgIAABcAAAAAAAAAAADwv04AAAAwAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-19T02:52:21.113Z"
+              "WhenOpened": "2025-05-16T04:08:16.115Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 26,
-              "Title": "PlcHelper.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\PlcHelper.cs",
-              "RelativeDocumentMoniker": "device\\PlcHelper.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\PlcHelper.cs",
-              "RelativeToolTip": "device\\PlcHelper.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+              "DocumentIndex": 2,
+              "Title": "WmsController.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\WmsController.cs",
+              "RelativeDocumentMoniker": "api\\WmsController.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\WmsController.cs",
+              "RelativeToolTip": "api\\WmsController.cs",
+              "ViewState": "AgIAAAQAAAAAAAAAAAAUwBkAAAAdAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-22T00:29:11.159Z"
+              "WhenOpened": "2025-05-16T06:27:02.597Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 27,
+              "DocumentIndex": 10,
+              "Title": "LiKuController.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\LiKuController.cs",
+              "RelativeDocumentMoniker": "api\\LiKuController.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\LiKuController.cs",
+              "RelativeToolTip": "api\\LiKuController.cs",
+              "ViewState": "AgIAAAkAAAAAAAAAAAAAABYAAAAvAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-15T08:45:06.1Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 12,
               "Title": "Monitor.cs",
               "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\Monitor.cs",
               "RelativeDocumentMoniker": "core\\Monitor.cs",
@@ -500,23 +308,129 @@
               "RelativeToolTip": "core\\Monitor.cs",
               "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-20T07:46:57.307Z"
+              "WhenOpened": "2025-05-20T07:46:57.307Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 28,
-              "Title": "WMSTask.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\WMSTask.cs",
-              "RelativeDocumentMoniker": "models\\WMSTask.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\WMSTask.cs",
-              "RelativeToolTip": "models\\WMSTask.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAoAAAAqAAAAAAAAAA==",
+              "DocumentIndex": 13,
+              "Title": "WMSCore.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\WMSCore.cs",
+              "RelativeDocumentMoniker": "core\\WMSCore.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\core\\WMSCore.cs",
+              "RelativeToolTip": "core\\WMSCore.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-20T02:20:35.853Z"
+              "WhenOpened": "2025-05-23T02:36:02.693Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 30,
+              "DocumentIndex": 11,
+              "Title": "ModbusHelper.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\ModbusHelper.cs",
+              "RelativeDocumentMoniker": "device\\ModbusHelper.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\ModbusHelper.cs",
+              "RelativeToolTip": "device\\ModbusHelper.cs",
+              "ViewState": "AgIAAIsAAAAAAAAAAAAvwJ0AAAAdAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-06-03T02:53:27.594Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 9,
+              "Title": "DeviceProcess.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\DeviceProcess.cs",
+              "RelativeDocumentMoniker": "process\\DeviceProcess.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\DeviceProcess.cs",
+              "RelativeToolTip": "process\\DeviceProcess.cs",
+              "ViewState": "AgIAAJkAAAAAAAAAAAAuwK4AAAAzAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-16T02:36:49.555Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 14,
+              "Title": "Settings.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\util\\Settings.cs",
+              "RelativeDocumentMoniker": "util\\Settings.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\util\\Settings.cs",
+              "RelativeToolTip": "util\\Settings.cs",
+              "ViewState": "AgIAAAUAAAAAAAAAAAAewBIAAAAlAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-21T09:21:24.805Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 15,
+              "Title": "WCSTask.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\WCSTask.cs",
+              "RelativeDocumentMoniker": "models\\WCSTask.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\WCSTask.cs",
+              "RelativeToolTip": "models\\WCSTask.cs",
+              "ViewState": "AgIAAEgAAAAAAAAAAIA6wFkAAAATAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-22T02:16:30.019Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 16,
+              "Title": "S7Helper.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\S7Helper.cs",
+              "RelativeDocumentMoniker": "device\\S7Helper.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\S7Helper.cs",
+              "RelativeToolTip": "device\\S7Helper.cs",
+              "ViewState": "AgIAAEwAAAAAAAAAAAAAAGQAAAAdAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-16T06:16:10.644Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 17,
+              "Title": "TcpClient.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\TcpClient.cs",
+              "RelativeDocumentMoniker": "device\\TcpClient.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\TcpClient.cs",
+              "RelativeToolTip": "device\\TcpClient.cs",
+              "ViewState": "AgIAABQAAAAAAAAAAADwvwoAAAATAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-17T10:08:04.22Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 18,
+              "Title": "PlcHelper.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\PlcHelper.cs",
+              "RelativeDocumentMoniker": "device\\PlcHelper.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\PlcHelper.cs",
+              "RelativeToolTip": "device\\PlcHelper.cs",
+              "ViewState": "AgIAABoAAAAAAAAAAADgvycAAAAGAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-22T00:29:11.159Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 19,
+              "Title": "TcpServer.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\TcpServer.cs",
+              "RelativeDocumentMoniker": "device\\TcpServer.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\TcpServer.cs",
+              "RelativeToolTip": "device\\TcpServer.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-16T06:21:24.336Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 20,
               "Title": "LogHelper.cs",
               "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\util\\LogHelper.cs",
               "RelativeDocumentMoniker": "util\\LogHelper.cs",
@@ -524,11 +438,181 @@
               "RelativeToolTip": "util\\LogHelper.cs",
               "ViewState": "AgIAAEsAAAAAAAAAAAArwFoAAAAmAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-19T03:24:31.681Z"
+              "WhenOpened": "2025-05-19T03:24:31.681Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 21,
+              "Title": "SqlHelper.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\util\\SqlHelper.cs",
+              "RelativeDocumentMoniker": "util\\SqlHelper.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\util\\SqlHelper.cs",
+              "RelativeToolTip": "util\\SqlHelper.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-06-03T02:52:51.169Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 22,
+              "Title": "StrHelper.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\util\\StrHelper.cs",
+              "RelativeDocumentMoniker": "util\\StrHelper.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\util\\StrHelper.cs",
+              "RelativeToolTip": "util\\StrHelper.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-06-03T02:52:49.55Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 23,
+              "Title": "config.json",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\config\\config.json",
+              "RelativeDocumentMoniker": "config\\config.json",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\config\\config.json",
+              "RelativeToolTip": "config\\config.json",
+              "ViewState": "AgIAABUAAAAAAAAAAAAAACUAAAAaAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
+              "WhenOpened": "2025-05-20T03:38:30.131Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 24,
+              "Title": "MoboxController.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\MoboxController.cs",
+              "RelativeDocumentMoniker": "api\\MoboxController.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\MoboxController.cs",
+              "RelativeToolTip": "api\\MoboxController.cs",
+              "ViewState": "AgIAABkAAAAAAAAAAAAAwCQAAAAiAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-16T06:32:03.117Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 26,
+              "Title": "WCSHelper.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\wms\\WCSHelper.cs",
+              "RelativeDocumentMoniker": "wms\\WCSHelper.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\wms\\WCSHelper.cs",
+              "RelativeToolTip": "wms\\WCSHelper.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAABIAAAAdAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-16T02:38:08.426Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 25,
+              "Title": "NDC.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\dispatch\\NDC.cs",
+              "RelativeDocumentMoniker": "dispatch\\NDC.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\dispatch\\NDC.cs",
+              "RelativeToolTip": "dispatch\\NDC.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAABUAAAAuAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-29T07:39:22.32Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 27,
+              "Title": "configDesc.txt",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\config\\configDesc.txt",
+              "RelativeDocumentMoniker": "config\\configDesc.txt",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\config\\configDesc.txt",
+              "RelativeToolTip": "config\\configDesc.txt",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAAPAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003109|",
+              "WhenOpened": "2025-05-16T03:10:42.328Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 28,
+              "Title": "TN_Factory.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\TN_Factory.cs",
+              "RelativeDocumentMoniker": "models\\TN_Factory.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\TN_Factory.cs",
+              "RelativeToolTip": "models\\TN_Factory.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-27T01:18:07.43Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
               "DocumentIndex": 29,
+              "Title": "SwaggerControllerDescProvider.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\App_Start\\SwaggerControllerDescProvider.cs",
+              "RelativeDocumentMoniker": "App_Start\\SwaggerControllerDescProvider.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\App_Start\\SwaggerControllerDescProvider.cs",
+              "RelativeToolTip": "App_Start\\SwaggerControllerDescProvider.cs",
+              "ViewState": "AgIAAAkAAAAAAAAAAADwvxUAAABVAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-23T08:50:04.309Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 30,
+              "Title": "Program.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\Program.cs",
+              "RelativeDocumentMoniker": "Program.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\Program.cs",
+              "RelativeToolTip": "Program.cs",
+              "ViewState": "AgIAAHEAAAAAAAAAAAAhwH0AAAAZAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-15T07:55:15.792Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 31,
+              "Title": "CntrItemDetail.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\CntrItemDetail.cs",
+              "RelativeDocumentMoniker": "models\\CntrItemDetail.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\CntrItemDetail.cs",
+              "RelativeToolTip": "models\\CntrItemDetail.cs",
+              "ViewState": "AgIAAA8AAAAAAAAAAAAlwDMAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-20T01:32:50.417Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 32,
+              "Title": "HttpModel.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\HttpModel.cs",
+              "RelativeDocumentMoniker": "process\\HttpModel.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\process\\HttpModel.cs",
+              "RelativeToolTip": "process\\HttpModel.cs",
+              "ViewState": "AgIAAP8AAAAAAAAAAIA8wBIBAAAaAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-19T02:52:21.113Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 33,
+              "Title": "WMSTask.cs",
+              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\WMSTask.cs",
+              "RelativeDocumentMoniker": "models\\WMSTask.cs",
+              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\WMSTask.cs",
+              "RelativeToolTip": "models\\WMSTask.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAoAAAAqAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-05-20T02:20:35.853Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 34,
               "Title": "ErrorInfo.cs",
               "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\models\\ErrorInfo.cs",
               "RelativeDocumentMoniker": "models\\ErrorInfo.cs",
@@ -536,23 +620,12 @@
               "RelativeToolTip": "models\\ErrorInfo.cs",
               "ViewState": "AgIAAAAAAAAAAAAAAAAuwAoAAAAmAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-19T03:47:50.271Z"
+              "WhenOpened": "2025-05-19T03:47:50.271Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 31,
-              "Title": "TcpServer.cs",
-              "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\TcpServer.cs",
-              "RelativeDocumentMoniker": "device\\TcpServer.cs",
-              "ToolTip": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\device\\TcpServer.cs",
-              "RelativeToolTip": "device\\TcpServer.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-16T06:21:24.336Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 32,
+              "DocumentIndex": 35,
               "Title": "DebugController.cs",
               "DocumentMoniker": "D:\\01-\u6C49\u548C\u667A\u80FD\\007-\u5408\u80A5\u4F73\u901A\\HH-0035_HeFeiLiaoTongAGV\\HH.WCS.Mobox3\\HH.WCS.Mobox3.JiaTong\\api\\DebugController.cs",
               "RelativeDocumentMoniker": "api\\DebugController.cs",
@@ -560,7 +633,8 @@
               "RelativeToolTip": "api\\DebugController.cs",
               "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-05-15T09:13:46.377Z"
+              "WhenOpened": "2025-05-15T09:13:46.377Z",
+              "EditorCaption": ""
             }
           ]
         },
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/HH.WCS.JiaTong.csproj b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/HH.WCS.JiaTong.csproj
index a9c5e72..632bd39 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/HH.WCS.JiaTong.csproj
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/HH.WCS.JiaTong.csproj
@@ -62,6 +62,9 @@
     <Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
       <HintPath>..\packages\NLog.5.1.1\lib\net45\NLog.dll</HintPath>
     </Reference>
+    <Reference Include="NModbus, Version=3.0.81.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>packages\NModbus.3.0.81\lib\net46\NModbus.dll</HintPath>
+    </Reference>
     <Reference Include="Opc.UaFx.Client, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0220af0d33d50236, processorArchitecture=MSIL">
       <HintPath>..\packages\Opc.UaFx.Client.2.42.0\lib\net46\Opc.UaFx.Client.dll</HintPath>
     </Reference>
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/AgvController.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/AgvController.cs
index 44501ff..3f1db2e 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/AgvController.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/AgvController.cs
@@ -26,6 +26,7 @@
         //[Route("AGVCallbackState")]
         public ReturnResult AGVCallbackState(AgvTaskState model) {
             LogHelper.Info("AGVCallbackState Request锛� + JsonConvert.SerializeObject(model), "HosttoagvTask");
+
             WCSCore.OperateAgvTaskStatus(model);
             return new ReturnResult();
         }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs
index 2246125..cd60f55 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs
@@ -273,7 +273,7 @@
                             LogHelper.Info("鍒涘缓浠诲姟锛� + JsonConvert.SerializeObject(wcsTask), "CreateTask");
                             if (WCSHelper.CreateTask(wcsTask))
                             {
-                                LocationHelper.LockLoc(Start, 2);
+                                LocationHelper.LockLoc(End, 2);
 
                                 LogHelper.Info("鍒涘缓浠诲姟鎴愬姛");
                             }
@@ -281,61 +281,65 @@
                         else if (startArea.N_FLOOR != endArea.N_FLOOR)
                         {
                             //妤煎眰鐢垫鍒嗛厤
-                            var endloc1 = Settings.elevatorLoc.Find(a => a.Floor == startArea.N_FLOOR);
-                            var startloc1 = Settings.elevatorLoc.Find(a => a.Floor == endArea.N_FLOOR);
+                            var elevatorLoc = LocationHelper.GetElevatorLoc();
 
-                            //鍒涘缓wcs鍒嗘浠诲姟
-                            var wcsTask = new WCSTask
-                            {
-                                S_CODE = WCSHelper.GenerateTaskNo(),
-                                S_TYPE = "鐢垫1",
-                                S_EQ_NO = taskData.taskNum,
-                                S_START_LOC = Start,
-                                S_END_LOC = endloc1.Location[0],
-                                N_CNTR_COUNT = 1,
-                                S_START_WH = startloc.S_WH_CODE,
-                                S_START_AREA = startloc.S_AREA_CODE,
-                                S_END_WH = endloc.S_WH_CODE,
-                                S_END_AREA = endloc.S_AREA_CODE,
-                                N_SCHEDULE_TYPE = 1,
-                                S_CNTR_CODE = CntrCode,
-                                N_PRIORITY = taskData.priority,
-                                N_START_LAYER = 1,
-                                N_END_LAYER = 1,
-                                S_WMS_NO = taskData.wmsTaskNo,
-                                Z_TYPE = n_type,
-                                S_MES_NO = taskData.mesTaskNo
-                            };
-                            var wcsTask1 = new WCSTask
-                            {
-                                S_CODE = WCSHelper.GenerateTaskNo(),
-                                S_TYPE = "鐢垫2",
-                                S_EQ_NO = taskData.taskNum,
-                                S_START_LOC = startloc1.Location[0],
-                                S_END_LOC = End,
-                                N_CNTR_COUNT = 1,
-                                S_START_WH = startloc.S_WH_CODE,
-                                S_START_AREA = startloc.S_AREA_CODE,
-                                S_END_WH = endloc.S_WH_CODE,
-                                S_END_AREA = endloc.S_AREA_CODE,
-                                N_SCHEDULE_TYPE = 1,
-                                S_CNTR_CODE = CntrCode,
-                                N_PRIORITY = taskData.priority,
-                                S_WMS_NO = taskData.wmsTaskNo,
-                                N_START_LAYER = 1,
-                                N_END_LAYER = 1,
-                                Z_TYPE = n_type,
-                                S_MES_NO = taskData.mesTaskNo
+                            if (elevatorLoc != null)
+                            {  //鍒涘缓wcs鍒嗘浠诲姟
+                                var wcsTask = new WCSTask
+                                {
+                                    S_CODE = WCSHelper.GenerateTaskNo(),
+                                    S_TYPE = "鐢垫1",
+                                    S_EQ_NO = taskData.taskNum,
+                                    S_START_LOC = Start,
+                                    S_END_LOC = elevatorLoc.S_CODE,
+                                    N_CNTR_COUNT = 1,
+                                    S_START_WH = startloc.S_WH_CODE,
+                                    S_START_AREA = startloc.S_AREA_CODE,
+                                    S_END_WH = elevatorLoc.S_WH_CODE,
+                                    S_END_AREA = elevatorLoc.S_AREA_CODE,
+                                    N_SCHEDULE_TYPE = 1,
+                                    S_CNTR_CODE = CntrCode,
+                                    N_PRIORITY = taskData.priority,
+                                    N_START_LAYER = 1,
+                                    N_END_LAYER = 1,
+                                    S_WMS_NO = taskData.wmsTaskNo,
+                                    Z_TYPE = n_type,
+                                    S_MES_NO = taskData.mesTaskNo
+                                };
+                                var wcsTask1 = new WCSTask
+                                {
+                                    S_CODE = WCSHelper.GenerateTaskNo(),
+                                    S_TYPE = "鐢垫2",
+                                    S_EQ_NO = taskData.taskNum,
+                                    S_START_LOC = elevatorLoc.S_CODE,
+                                    S_END_LOC = End,
+                                    N_CNTR_COUNT = 1,
+                                    S_START_WH = elevatorLoc.S_WH_CODE,
+                                    S_START_AREA = elevatorLoc.S_AREA_CODE,
+                                    S_END_WH = endloc.S_WH_CODE,
+                                    S_END_AREA = endloc.S_AREA_CODE,
+                                    N_SCHEDULE_TYPE = 1,
+                                    S_CNTR_CODE = CntrCode,
+                                    N_PRIORITY = taskData.priority,
+                                    S_WMS_NO = taskData.wmsTaskNo,
+                                    N_START_LAYER = 1,
+                                    N_END_LAYER = 1,
+                                    Z_TYPE = n_type,
+                                    S_MES_NO = taskData.mesTaskNo
 
-                            };
+                                };
+                                LogHelper.Info("鍒涘缓浠诲姟锛� + JsonConvert.SerializeObject(wcsTask), "CreateTask");
+                                if (WCSHelper.CreateTask(wcsTask) && WCSHelper.CreateTask(wcsTask1))
+                                {
 
-                            LogHelper.Info("鍒涘缓浠诲姟锛� + JsonConvert.SerializeObject(wcsTask), "CreateTask");
-                            if (WCSHelper.CreateTask(wcsTask) && WCSHelper.CreateTask(wcsTask1))
-                            {
-
-                                LocationHelper.LockLoc(endloc.S_CODE, 1);
-                                LogHelper.Info("鍒涘缓浠诲姟鎴愬姛");
+                                    // LocationHelper.LockLoc(Start, 1);
+                                    LocationHelper.LockLoc(End, 2);
+                                    LogHelper.Info("鍒涘缓浠诲姟鎴愬姛");
+                                }
                             }
+
+
+
                         }
                     }
                     else
@@ -740,6 +744,18 @@
             string areacode = "";
             try
             {
+
+                #region 鍏ュ簱妫�煡鎵樼洏鐗╂枡琛ㄦ湁鏃犳暟鎹�+                var cntritem = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First();
+                if (cntritem == null)
+                {
+                    result.code = "1";
+                    result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}鏃犵粦瀹氱墿鏂欐暟鎹�;
+                    LogHelper.Info($"ItemBack锛歿result.msg}");
+                    AddErrorInfo("鎵樼洏缁戝畾鐗╂枡鏁版嵁涓虹┖", result.msg, Source);
+                    return result;
+                }
+                #endregion
 
                 #region 鍒ゆ柇鎵樼洏缁戝畾璐т綅鏄惁鍜屼笅鍙戠粦瀹氳捣鐐圭浉鍚�濡傛灉娌$粦瀹氭墭鐩樺垯缁戝畾鎵樼洏
                 var CntrLoc = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First();
@@ -1476,8 +1492,6 @@
 
             try
             {
-
-
                 #region 浣欐枡杩斿洖鏍规嵁鎵樼洏鎵惧嚭搴撲换鍔�                 //浣欐枡杩斿洖鏍规嵁鎵樼洏鎵惧嚭搴撲换鍔�                 //msts = WCSHelper.GetTaskBycntrcode(model.Rfid);
@@ -1515,10 +1529,11 @@
                     if (whcode != null)
                     {
                         //绮夋枡鐩存帴鍥炲簱锛屽叾浠栫墿鏂欓渶瑕佸幓瀵瑰簲鐨勬殏瀛樺尯
+                        #region 鏍规嵁鐗╂枡鍒ゆ柇鍥炲簱搴撳尯
                         if (model.PartNumber.StartsWith("4X"))
                         {
                             areacode = whcode.PMK;
-                            loc = StorageCompute(itemcode, areacode);
+                            //loc = StorageCompute(itemcode, areacode);
                             //if (loc == null)
                             //{
                             //    loc = emptyRow(areacode);
@@ -1564,49 +1579,41 @@
                                 AddErrorInfo("鐗╂枡缂栫爜鏍煎紡閿欒", result.msg, Source);
                                 return result;
                             }
-                            var EndLocs = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == areacode).ToList();
-                            if (EndLocs.Count > 0)
-                            {
-                                //loc =  EndLocs.Find(a => a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0);
-                                loc = FindEndcolByLocList(EndLocs);
-                                if (loc != null)
-                                {
-                                    End = loc.S_CODE;
-                                }
-                                else
-                                {
-                                    result.code = "1";
-                                    result.msg = $"缁堢偣搴撳尯锛歿areacode}鏃犲彲鐢ㄨ揣浣�;
-                                    AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
-                                    return result;
-                                }
 
-                            }
-                            else
-                            {
-                                result.code = "1";
-                                result.msg = $"鏍规嵁缁堢偣搴撳尯锛歿areacode},鏈壘鍒板搴旇揣浣�;
-                                AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
-                                return result;
-                            }
-                            //loc = StorageCompute(itemcode, areacode);
-                            //if (loc == null)
-                            //{
-                            //    loc = emptyRow(areacode);
-                            //}
+
                         }
+                        #endregion
+
+
+                        var EndLocs = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == areacode).ToList();
+                        //鏌ユ壘璐т綅搴撳尯
+                        if (EndLocs.Count > 0)
+                        {
+                            //loc =  EndLocs.Find(a => a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0);
+                            loc = FindEndcolByLocList(EndLocs);
+
+
+                        }
+                        else
+                        {
+                            result.code = "1";
+                            result.msg = $"鏍规嵁缁堢偣搴撳尯锛歿areacode},鏈壘鍒板搴旇揣浣�;
+                            AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
+                            return result;
+                        }
+
                         if (loc != null)
                         {
                             End = loc.S_CODE;
                         }
                         else
                         {
-
                             result.code = "1";
                             result.msg = $"搴撳尯:{areacode}鏃犲彲鐢ㄨ揣浣�;
                             AddErrorInfo("鏌ユ壘璐т綅澶辫触", result.msg, Source);
                             return result;
                         }
+
                     }
                     else
                     {
@@ -1968,18 +1975,19 @@
                     // var startArea = db.Queryable<Area>().Where(a => a.S_CODE.Trim() == startloc.S_AREA_CODE).First();
                     //var endArea = db.Queryable<Area>().Where(a => a.S_CODE.Trim() == endloc.S_AREA_CODE).First();
 
-                    string dtcode = "DT-01";
-                    //妤煎眰鐢垫鍒嗛厤
-                    var Diantiloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == dtcode).First();
-                    if (Diantiloc == null)
-                    {
-                        result.code = "1";
-                        result.msg = $"鍒涘缓浠诲姟澶辫触锛屾牴鎹揣浣嶇紪鐮�{dtcode}鏈壘鍒扮數姊揣浣�;
-                        AddErrorInfo("鏌ユ壘璐т綅澶辫触", result.msg, Source);
-                        return result;
-                    }
+                    //string dtcode = "DT-01";
+                    ////妤煎眰鐢垫鍒嗛厤
+                    //var Diantiloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == dtcode).First();
+                    //if (Diantiloc == null)
+                    //{
+                    //    result.code = "1";
+                    //    result.msg = $"鍒涘缓浠诲姟澶辫触锛屾牴鎹揣浣嶇紪鐮�{dtcode}鏈壘鍒扮數姊揣浣�;
+                    //    AddErrorInfo("鏌ユ壘璐т綅澶辫触", result.msg, Source);
+                    //    return result;
+                    //}
 
-                    //鏍规嵁鐢垫鏁伴噺鍒ゆ柇閫佸線鍝釜鐢垫 锛堝叿浣撶數姊祦绋嬫牴鎹幇鍦虹數姊暟閲忥級
+                    //鏍规嵁浠诲姟鏁伴噺鍒ゆ柇閫佸線鍝釜鐢垫 锛堝叿浣撶數姊祦绋嬫牴鎹幇鍦虹數姊暟閲忥級
+                    var elevatorLoc = LocationHelper.GetElevatorLoc();
 
                     //鍒涘缓wcs鍒嗘浠诲姟
                     var wcsTask = new WCSTask
@@ -1989,12 +1997,12 @@
                         S_TYPE = "鐢垫1",
                         S_EQ_NO = model.Data.task_no,
                         S_START_LOC = startloc.S_CODE,
-                        S_END_LOC = Diantiloc.S_CODE,
+                        S_END_LOC = elevatorLoc.S_CODE,
                         N_CNTR_COUNT = 1,
                         S_START_WH = startloc.S_WH_CODE,
                         S_START_AREA = startloc.S_AREA_CODE,
-                        S_END_WH = endloc.S_WH_CODE,
-                        S_END_AREA = endloc.S_AREA_CODE,
+                        S_END_WH = elevatorLoc.S_WH_CODE,
+                        S_END_AREA = elevatorLoc.S_AREA_CODE,
                         N_SCHEDULE_TYPE = 1,
                         S_CNTR_CODE = cntr.S_CNTR_CODE,
                         N_END_LAYER = 1,
@@ -2005,11 +2013,11 @@
                         S_CODE = WCSHelper.GenerateTaskNo(),
                         S_TYPE = "鐢垫2",
                         S_EQ_NO = model.Data.task_no,
-                        S_START_LOC = Diantiloc.S_CODE,
+                        S_START_LOC = elevatorLoc.S_CODE,
                         S_END_LOC = endloc.S_CODE,
                         N_CNTR_COUNT = 1,
-                        S_START_WH = startloc.S_WH_CODE,
-                        S_START_AREA = startloc.S_AREA_CODE,
+                        S_START_WH = elevatorLoc.S_WH_CODE,
+                        S_START_AREA = elevatorLoc.S_AREA_CODE,
                         S_END_WH = endloc.S_WH_CODE,
                         S_END_AREA = endloc.S_AREA_CODE,
                         N_SCHEDULE_TYPE = 1,
@@ -2117,7 +2125,6 @@
             return result;
         }
 
-
         /// <summary>
         /// 搴撲綅娓呯┖
         /// </summary>
@@ -2211,8 +2218,8 @@
             {
                 device.AgvQty = agvDeviceInfo.Count;
                 device.AgvErrorQty = agvDeviceInfo.FindAll(a => a.agvErrCode != "0" || a.agvErrCode != "0" || a.faildCode != "0").Count;
-                device.AgvChargeQty = agvDeviceInfo.FindAll(a =>  a.agvErrCode == "1").Count;
-                device.AgvRunQty = agvDeviceInfo.FindAll(a =>  a.agvErrCode == "1").Count;
+                device.AgvChargeQty = agvDeviceInfo.FindAll(a => a.agvErrCode == "1").Count;
+                device.AgvRunQty = agvDeviceInfo.FindAll(a => a.agvErrCode == "1").Count;
                 foreach (var agv in agvDeviceInfo)
                 {
                     string agvErrorInfo = GetAgvAlarmSendCodeTwo(agv.agvErrCode, agv.errCode2, agv.faildCode);
@@ -2546,7 +2553,7 @@
                         Location other = null;
                         //褰撳墠鎺掓病鏈夐攣骞朵笖鏈夌┖浣嶇疆
                         //鍏堟壘婊′綅锛岀劧鍚庡悗闈竴灞傝涔堟槸绌猴紝瑕佷箞涓嶅瓨鍦�-                        other = rowList.OrderByDescending(a => a.N_COL).Where(a => a.N_CURRENT_NUM == 0).FirstOrDefault();
+                        other = rowList.OrderBy(a => a.N_COL).Where(a => a.N_CURRENT_NUM == 0).FirstOrDefault();
                         //if (full == null)
                         //{
                         //    //娌℃湁婊′綅锛岄偅灏辨壘鏈�皬鐨勭┖浣�diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/config/config.json b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/config/config.json
index 0d7382e..d632ad1 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/config/config.json
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/config/config.json
@@ -32,6 +32,22 @@
       "TN_Location": "CMB17-DP-001",
       "deviceType": 1,
       "enable": 1
+    },
+    {
+      "address": "10.68.9.15",
+      "deviceName": "鐢垫1",
+      "deviceNo": [],
+      "TN_Location": "CMB17-DP-001",
+      "deviceType": 2,
+      "enable": 1
+    },
+    {
+      "address": "10.68.9.15",
+      "deviceName": "鐢垫2",
+      "deviceNo": [],
+      "TN_Location": "CMB17-DP-001",
+      "deviceType": 2,
+      "enable": 1
     }
   ],
   "DpjErrorInfo": [
@@ -130,23 +146,6 @@
     {
       "id": 4,
       "url": "http://192.168.1.39:5103/api/pei/add"
-    }
-  ],
-  "ElevatorLoc": [
-    {
-      "Floor": 1,
-      "Location": [ "111" ]
-
-    },
-    {
-      "Floor": 2,
-      "Location": [ "111" ]
-
-    },
-    {
-      "Floor": 3,
-      "Location": [ "333" ]
-
     }
   ],
   "AgvErrorCode1": [
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/core/WCSCore.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/core/WCSCore.cs
index 8c33a08..fc40140 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/core/WCSCore.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/core/WCSCore.cs
@@ -104,36 +104,33 @@
                             {
                                 LogHelper.Info($"浠诲姟鍥炴姤锛氫换鍔$被鍨嬮敊璇�);
                             }
+                            if (TN_Task.S_TYPE.Contains("鐢垫"))
+                            {
+                                if (TN_Task.S_TYPE == "鐢垫1")
+                                {
+                                    if (TN_Task.S_CODE == "1" || TN_Task.S_CODE == "3" || TN_Task.S_CODE == "4")
+                                    {
+                                        TaskProcess.Reportbackmobox(TN_Task.S_EQ_NO, TN_Task.S_CODE, model.state, url);
+                                    }
+                                }
+                                else if (TN_Task.S_TYPE == "鐢垫2")
+                                {
+                                    if (TN_Task.S_CODE == "5" || TN_Task.S_CODE == "6" || TN_Task.S_CODE == "2")
+                                    {
+                                        TaskProcess.Reportbackmobox(TN_Task.S_EQ_NO, TN_Task.S_CODE, model.state, url);
+                                    }
+                                }
+                            }
                             //鍘熸潗鏂欐帴鍙i渶瑕佸姞涓妕oken
-                            if (TN_Task.Z_TYPE == 4)
+                            else if (TN_Task.Z_TYPE == 4)
                             {
                                 Console.WriteLine($"鍘熸潗鏂欎换鍔″洖鎶TN_Task.S_EQ_NO}");
                                 var db = new SqlHelper<object>().GetInstance();
 
                                 var mstbyEqno = db.Queryable<WCSTask>().Where(a => a.S_EQ_NO.Trim() == TN_Task.S_EQ_NO).ToList();
                                 //鍒嗘。浠诲姟鍥炴姤,浠诲姟1鍙洖鎶� 3 4 浠诲姟2鍙洖鎶�5 6 2
-                                if (TN_Task.S_TYPE.Contains("鐢垫"))
-                                {
-                                    if (TN_Task.S_TYPE == "鐢垫1")
-                                    {
-                                        if (TN_Task.S_CODE == "1" || TN_Task.S_CODE == "3" || TN_Task.S_CODE == "4")
-                                        {
-                                            TaskProcess.Reportbackmobox(TN_Task.S_EQ_NO, TN_Task.S_CODE, model.state, url);
-                                        }
-                                    }
-                                    else if (TN_Task.S_TYPE == "鐢垫2")
-                                    {
-                                        if (TN_Task.S_CODE == "5" || TN_Task.S_CODE == "6" || TN_Task.S_CODE == "2")
-                                        {
-                                            TaskProcess.Reportbackmobox(TN_Task.S_EQ_NO, TN_Task.S_CODE, model.state, url);
-                                        }
-                                    }
-                                }
-                                else
-                                {
-                                    TaskProcess.Reportbackmobox(TN_Task.S_EQ_NO, TN_Task.S_CODE, model.state, url);
-                                }
 
+                                TaskProcess.Reportbackmobox(TN_Task.S_EQ_NO, TN_Task.S_CODE, model.state, url);
                             }
                             else
                             {
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/device/ModbusHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/device/ModbusHelper.cs
index bbeb583..408f263 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/device/ModbusHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/device/ModbusHelper.cs
@@ -1,5 +1,6 @@
 锘縰sing EasyModbus;
 using HH.WCS.JiaTong;
+using Newtonsoft.Json;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -23,14 +24,18 @@
         /// <param name="ip"></param>
         /// <param name="port"></param>
         /// <returns></returns>
-        internal static bool[] ReadCoils(int address, int qty, string ip, int port = 502) {
+        internal static bool[] ReadCoils(int address, int qty, string ip, int port = 502)
+        {
             bool[] res = new bool[0];
             var client = GetClient(ip, port);
-            if (client != null && client.Connected) {
-                try {
+            if (client != null && client.Connected)
+            {
+                try
+                {
                     res = client.ReadCoils(address, qty);
                 }
-                catch (Exception ex) {
+                catch (Exception ex)
+                {
                     //LogHelper.Error(ex.Message, ex);
                 }
             }
@@ -45,51 +50,25 @@
         /// <param name="ip"></param>
         /// <param name="port"></param>
         /// <returns></returns>
-        internal static bool[] ReadDiscreteInputs(int address, int qty, string ip, int port = 502) {
+        internal static bool[] ReadDiscreteInputs(int address, int qty, string ip, int port = 502)
+        {
             bool[] res = new bool[0];
             var client = GetClient(ip, port);
-            if (client != null && client.Connected) {
-                try {
+            if (client != null && client.Connected)
+            {
+                try
+                {
                     res = client.ReadDiscreteInputs(address, qty);
                 }
-                catch (Exception ex) {
+                catch (Exception ex)
+                {
                     //LogHelper.Error(ex.Message, ex);
                 }
             }
             return res;
 
         }
-        /// <summary>
-        /// 璇讳繚鎸佸瘎瀛樺櫒
-        /// </summary>
-        /// <param name="address"></param>
-        /// <param name="qty"></param>
-        /// <param name="ip"></param>
-        /// <param name="port"></param>
-        /// <returns></returns>
-        internal static int[] ReadHoldingRegisters(int address, int qty, string ip, int port = 502) {
-            int[] res = new int[0];
-            var client = GetClient(ip, port);
-            if (client != null && client.Connected) {
-                try {
-                    //涓�釜瀵勫瓨鍣ㄦ槸16浣嶏紝杩斿洖2涓猧nt绫诲瀷
-                    res = client.ReadHoldingRegisters(address, qty);
-                    if (res != null) {
-                        Console.WriteLine($"璇诲瘎瀛樺櫒{ip},address={address},qty={qty},length={res.Length},res={string.Join(",", res)}");
-                    }
-                    else {
-                        Console.WriteLine($"璇诲瘎瀛樺櫒{ip},address={address},qty={qty},澶辫触");
-                    }
-                }
-                catch (Exception ex) {
-                    Console.WriteLine("ReadHoldingRegisters:err=" + ex.Message);
-                }
-            }
-            else {
-                Console.WriteLine($"{ip}杩炴帴宸茬粡鏂紑");
-            }
-            return res;
-        }
+
         /// <summary>
         /// 璇昏緭鍏ュ瘎瀛樺櫒
         /// </summary>
@@ -98,14 +77,18 @@
         /// <param name="ip"></param>
         /// <param name="port"></param>
         /// <returns></returns>
-        internal static int[] ReadInputRegisters(int address, int qty, string ip, int port = 502) {
+        internal static int[] ReadInputRegisters(int address, int qty, string ip, int port = 502)
+        {
             int[] res = new int[0];
             var client = GetClient(ip, port);
-            if (client != null && client.Connected) {
-                try {
+            if (client != null && client.Connected)
+            {
+                try
+                {
                     res = client.ReadInputRegisters(address, qty);
                 }
-                catch (Exception ex) {
+                catch (Exception ex)
+                {
                     //LogHelper.Error(ex.Message, ex);
                 }
             }
@@ -119,15 +102,19 @@
         /// <param name="value"></param>
         /// <param name="ip"></param>
         /// <param name="port"></param>
-        internal static bool WriteSingleCoil(int address, bool value, string ip, int port = 502) {
+        internal static bool WriteSingleCoil(int address, bool value, string ip, int port = 502)
+        {
             var res = false;
             var client = GetClient(ip, port);
-            if (client != null && client.Connected) {
-                try {
+            if (client != null && client.Connected)
+            {
+                try
+                {
                     client.WriteSingleCoil(address, value);
                     res = true;
                 }
-                catch (Exception ex) {
+                catch (Exception ex)
+                {
                     //LogHelper.Error(ex.Message, ex);
                 }
             }
@@ -141,21 +128,26 @@
         /// <param name="values"></param>
         /// <param name="ip"></param>
         /// <param name="port"></param>
-        internal static bool WriteMultipleCoils(int address, bool[] values, string ip, int port = 502) {
+        internal static bool WriteMultipleCoils(int address, bool[] values, string ip, int port = 502)
+        {
             var res = false;
             var client = GetClient(ip, port);
-            if (client != null && client.Connected) {
-                try {
+            if (client != null && client.Connected)
+            {
+                try
+                {
                     client.WriteMultipleCoils(address, values);
                     res = true;
                 }
-                catch (Exception ex) {
+                catch (Exception ex)
+                {
                     //LogHelper.Error(ex.Message, ex);
                 }
             }
             return res;
 
         }
+
         /// <summary>
         /// 鍐欏崟涓瘎瀛樺櫒
         /// </summary>
@@ -163,20 +155,63 @@
         /// <param name="value"></param>
         /// <param name="ip"></param>
         /// <param name="port"></param>
-        internal static bool WriteSingleRegister(int address, int value, string ip, int port = 502) {
+        internal static bool WriteSingleRegister(int address, int value, string ip, int port = 502)
+        {
             var res = false;
             var client = GetClient(ip, port);
-            if (client != null && client.Connected) {
-                try {
+            if (client != null && client.Connected)
+            {
+                try
+                {
                     client.WriteSingleRegister(address, value);
                     res = true;
                     Console.WriteLine($"鍐欏瘎瀛樺櫒{ip},address={address},value={value},鎴愬姛");
 
                 }
-                catch (Exception ex) {
+                catch (Exception ex)
+                {
                     Console.WriteLine(ex.Message);
                     Console.WriteLine($"鍐欏瘎瀛樺櫒{ip},address={address},value={value},澶辫触");
                 }
+            }
+            return res;
+        }
+
+        /// <summary>
+        /// 璇讳繚鎸佸瘎瀛樺櫒
+        /// </summary>
+        /// <param name="address"></param>
+        /// <param name="qty"></param>
+        /// <param name="ip"></param>
+        /// <param name="port"></param>
+        /// <returns></returns>
+        internal static int[] ReadHoldingRegisters(int address, int qty, string ip, int port = 502)
+        {
+            int[] res = new int[0];
+            var client = GetClient(ip, port);
+            if (client != null && client.Connected)
+            {
+                try
+                {
+                    //涓�釜瀵勫瓨鍣ㄦ槸16浣嶏紝杩斿洖2涓猧nt绫诲瀷
+                    res = client.ReadHoldingRegisters(address, qty);
+                    if (res != null)
+                    {
+                        Console.WriteLine($"璇诲瘎瀛樺櫒{ip},address={address},qty={qty},length={res.Length},res={string.Join(",", res)}");
+                    }
+                    else
+                    {
+                        Console.WriteLine($"璇诲瘎瀛樺櫒{ip},address={address},qty={qty},澶辫触");
+                    }
+                }
+                catch (Exception ex)
+                {
+                    Console.WriteLine("ReadHoldingRegisters:err=" + ex.Message);
+                }
+            }
+            else
+            {
+                Console.WriteLine($"{ip}杩炴帴宸茬粡鏂紑");
             }
             return res;
         }
@@ -187,41 +222,53 @@
         /// <param name="values"></param>
         /// <param name="ip"></param>
         /// <param name="port"></param>
-        internal static bool WriteMultipleRegisters(int address, int[] values, string ip, int port = 502) {
+        internal static bool WriteMultipleRegisters(int address, int[] values, string ip, int port = 502)
+        {
             var res = false;
             var client = GetClient(ip, port);
-            if (client != null && client.Connected) {
-                try {
+            if (client != null && client.Connected)
+            {
+                try
+                {
                     client.WriteMultipleRegisters(address, values);
                     res = true;
                 }
-                catch (Exception ex) {
+                catch (Exception ex)
+                {
                     //LogHelper.Error(ex.Message, ex);
                 }
             }
             return res;
         }
-        private static ModbusClient GetClient(string ip, int port) {
+        private static ModbusClient GetClient(string ip, int port)
+        {
             ModbusClient client = null;
-            if (!clients.ContainsKey(ip)) {
+            if (!clients.ContainsKey(ip))
+            {
                 client = new ModbusClient(ip, port);
-                try {
+                try
+                {
                     client.Connect();
                     clients[ip] = client;
                 }
-                catch (Exception ex) {
+                catch (Exception ex)
+                {
                     //LogHelper.Error(ex.Message, ex);
                     Console.WriteLine($"杩炴帴plc澶辫触{ip},err=" + ex.Message);
                 }
             }
-            else {
+            else
+            {
                 client = clients[ip];
-                if (!clients[ip].Connected) {
-                    try {
+                if (!clients[ip].Connected)
+                {
+                    try
+                    {
                         clients[ip].Connect();
 
                     }
-                    catch (Exception ex) {
+                    catch (Exception ex)
+                    {
                         //LogHelper.Error(ex.Message, ex);
                         Console.WriteLine($"杩炴帴plc澶辫触{ip},err=" + ex.Message);
                     }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/device/PlcHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/device/PlcHelper.cs
index 8b9284b..6e951f0 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/device/PlcHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/device/PlcHelper.cs
@@ -7,6 +7,7 @@
 using System.Net.Sockets;
 using System.Text;
 using System.Threading.Tasks;
+using System.Threading;
 
 namespace HH.WCS.JiaTong.device
 {
@@ -36,40 +37,7 @@
             }
             return client;
         }
-        /// <summary>
-        /// 璇讳繚鎸佸瘎瀛樺櫒
-        /// </summary>
-        /// <param name="address"></param>
-        /// <param name="qty"></param>
-        /// <param name="ip"></param>
-        /// <param name="port"></param>
-        /// <returns></returns>
-        internal int[] ReadHoldingRegisters(int address, int qty, string ip, int port = 502)
-        {
-            int[] res = new int[0];
-            //   lock (ReadHoldingRegistersLock)
-            //  {
-            LogHelper.Info($"ReadHoldingRegisters:SendMsg:Addr:{address},Qty:{qty},Ip:{ip},Port:{port}", "ModBus");
-
-            var client = GetClient(ip, port);
-            if (client != null && client.Connected)
-            {
-                client.ConnectionTimeout = 5000;
-                try
-                {
-                    res = client.ReadHoldingRegisters(address, qty);
-                    client.Disconnect();
-                }
-                catch (Exception ex)
-                {
-                    //LogHelper.Error(ex.Message, ex);
-                    LogHelper.Info($"ReadHoldingRegisters锛欵rror:{ex.Message}");
-                }
-                // }
-                LogHelper.Info($"ReadHoldingRegisters:ReqMsg:{JsonConvert.SerializeObject(res)},Addr:{address},Ip:{ip},Port:{port}", "ModBus");
-            }
-            return res;
-        }
+      
         internal static void Receive(string ip, string msg)
         {
             //澶勭悊璁惧淇″彿
@@ -107,58 +75,9 @@
 
             return Encoding.ASCII.GetString(returnBytes);
         }
-        /// <summary>
-        /// 璇讳繚鎸佸瘎瀛樺櫒
-        /// </summary>
-        /// <param name="address"></param>
-        /// <param name="qty"></param>
-        /// <param name="ip"></param>
-        /// <param name="port"></param>
-        /// <returns></returns>
-        internal static bool[] ReadInputRegistersRtu2(int address, int qty, string ip, int port = 502)
-        {
-            //01 02 00 01 00 01 E8 0A 
-            List<bool> res = new List<bool>();
-            var hex = $"0102{address.ToString("X4")}{qty.ToString("X4")}";
-            hex = hex + BitConverter.ToString(PlcHelper.CRC16LH(PlcHelper.Hex2Bytes(hex))).Replace("-", "").Replace(" ", "");
-            LogHelper.Info($"鐢垫鐘舵�鍒ゆ柇锛歿hex} ip:{ip},port{port} ", "鐢垫");
-            var data = SendHexOnce(ip, port, hex);
-            if (!string.IsNullOrEmpty(data))
-            {
-                string fh = data.Substring(6, 2);
-                var xhw = Convert.ToString(Convert.ToInt32(fh, 16), 2);
-                if (xhw.Length == 3)
-                {
-                    xhw = '0' + xhw;
-                }
-                else if (xhw.Length == 2)
-                {
-                    xhw = '0' + '0' + xhw;
-                }
-                else if (xhw.Length == 1)
-                {
-                    xhw = '0' + '0' + '0' + xhw;
-                }
-                foreach (var item in xhw)
-                {
-                    if (true)
-                    {
-                        if (item == '1')
-                        {
-                            res.Add(true);
-                        }
-                        else
-                        {
-                            res.Add(false);
-                        }
-                    }
-                }
-            }
-            return res.ToArray();
-        }
 
 
-
+       
         internal static bool[] ReadInputRegistersRtu1(int address, int qty, string ip, int port = 502)
         {
             //01 02 00 01 00 01 E8 0A 
@@ -212,34 +131,7 @@
             return res.ToArray();
         }
 
-        /// <summary>
-        /// 鍐欏崟涓瘎瀛樺櫒
-        /// </summary>
-        /// <param name="address"></param>
-        /// <param name="value"></param>
-        /// <param name="ip"></param>
-        /// <param name="port"></param>
-        internal static bool WriteSingleRegisterRtuT(int address, int value, string ip, int port = 502)
-        {
-            //01 05 00 01 FF 00 DD FA
-            var code = value == 1 ? "FF" : "00";
-            var res = false;
-            var hex = $"0105{address.ToString("X4")}{code}00";
-
-            hex = hex + BitConverter.ToString(PlcHelper.CRC16LH(PlcHelper.Hex2Bytes(hex))).Replace("-", "").Replace(" ", "");
-            //hex = hex + BitConverter.ToString(PlcHelper.CRC16LH(PlcHelper.Hex2Bytes(hex))).Replace("-", "").Replace(" ", "");
-            var data = SendHexOnce(ip, port, hex);
-            LogHelper.Info($"鐢垫璇锋眰锛歿hex} ip:{ip},port{port} ", "鐢垫");
-            if (!string.IsNullOrEmpty(data))
-            {
-                if (data == hex)
-                {
-                    res = true;
-                }
-
-            }
-            return res;
-        }
+      
 
         private static string SendHexOnce(string ip, int port, string hex)
         {
@@ -268,6 +160,7 @@
             client = null;
             return res;
         }
+     
         #region 杩涘埗杞崲+CRC
         internal static bool CheckCRC(string hex)
         {
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/device/TcpClient.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/device/TcpClient.cs
index 67b77ed..75adb9e 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/device/TcpClient.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/device/TcpClient.cs
@@ -10,6 +10,7 @@
 namespace HH.WCS.JiaTong.device {
     internal class TcpClient
     {
+       
         /// <summary>
         /// 
         /// </summary>
@@ -64,6 +65,7 @@
             }
             return res.ToArray();
         }
+
         /// <summary>
         /// 鍐欏崟涓瘎瀛樺櫒
         /// </summary>
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages.config b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages.config
index 715c9a2..7e6bc08 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages.config
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages.config
@@ -21,6 +21,7 @@
   <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net461" />
   <package id="Newtonsoft.Json" version="13.0.3" targetFramework="net462" />
   <package id="NLog" version="5.1.1" targetFramework="net452" requireReinstallation="true" />
+  <package id="NModbus" version="3.0.81" targetFramework="net462" />
   <package id="Opc.UaFx.Client" version="2.42.0" targetFramework="net462" />
   <package id="Oracle.ManagedDataAccess" version="21.15.0" targetFramework="net462" />
   <package id="Owin" version="1.0" targetFramework="net461" />
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/.signature.p7s b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/.signature.p7s
new file mode 100644
index 0000000..98a1521
--- /dev/null
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/.signature.p7s
Binary files differ
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/LICENSE.txt b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/LICENSE.txt
new file mode 100644
index 0000000..e72c26a
--- /dev/null
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/LICENSE.txt
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2006 Scott Alexander, 2015 Dmitry Turin
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/README.md b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/README.md
new file mode 100644
index 0000000..bc49ef3
--- /dev/null
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/README.md
@@ -0,0 +1 @@
+# NModbus
\ No newline at end of file
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/net46/NModbus.dll b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/net46/NModbus.dll
new file mode 100644
index 0000000..865d730
--- /dev/null
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/net46/NModbus.dll
Binary files differ
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/net46/NModbus.xml b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/net46/NModbus.xml
new file mode 100644
index 0000000..0cd47a7
--- /dev/null
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/net46/NModbus.xml
@@ -0,0 +1,2099 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>NModbus</name>
+    </assembly>
+    <members>
+        <member name="T:NModbus.Data.DefaultPointSource`1">
+            <summary>
+            A simple implementation of the point source. All registers are 
+            </summary>
+            <typeparam name="TPoint"></typeparam>
+        </member>
+        <member name="T:NModbus.Data.DiscreteCollection">
+            <summary>
+                Collection of discrete values.
+            </summary>
+        </member>
+        <member name="F:NModbus.Data.DiscreteCollection.BitsPerByte">
+            <summary>
+                Number of bits per byte.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.DiscreteCollection.#ctor">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.DiscreteCollection" /> class.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.DiscreteCollection.#ctor(System.Boolean[])">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.DiscreteCollection" /> class.
+            </summary>
+            <param name="bits">Array for discrete collection.</param>
+        </member>
+        <member name="M:NModbus.Data.DiscreteCollection.#ctor(System.Byte[])">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.DiscreteCollection" /> class.
+            </summary>
+            <param name="bytes">Array for discrete collection.</param>
+        </member>
+        <member name="M:NModbus.Data.DiscreteCollection.#ctor(System.Collections.Generic.IList{System.Boolean})">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.DiscreteCollection" /> class.
+            </summary>
+            <param name="bits">List for discrete collection.</param>
+        </member>
+        <member name="M:NModbus.Data.DiscreteCollection.#ctor(System.Collections.Generic.List{System.Boolean})">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.DiscreteCollection" /> class.
+            </summary>
+            <param name="bits">List for discrete collection.</param>
+        </member>
+        <member name="P:NModbus.Data.DiscreteCollection.NetworkBytes">
+            <summary>
+                Gets the network bytes.
+            </summary>
+        </member>
+        <member name="P:NModbus.Data.DiscreteCollection.ByteCount">
+            <summary>
+                Gets the byte count.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.DiscreteCollection.ToString">
+            <summary>
+                Returns a <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </summary>
+            <returns>
+                A <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </returns>
+        </member>
+        <member name="P:NModbus.Data.FileRecordCollection.FileNumber">
+            <summary>
+            The Extended Memory file number
+            </summary>
+        </member>
+        <member name="P:NModbus.Data.FileRecordCollection.StartingAddress">
+            <summary>
+            The starting register address within the file.
+            </summary>
+        </member>
+        <member name="P:NModbus.Data.FileRecordCollection.DataBytes">
+            <summary>
+             The bytes written to the extended memory file.
+            </summary>
+        </member>
+        <member name="P:NModbus.Data.FileRecordCollection.ByteCount">
+            <summary>
+                Gets the byte count.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.FileRecordCollection.ToString">
+            <summary>
+                Returns a <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </summary>
+            <returns>
+                A <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </returns>
+        </member>
+        <member name="T:NModbus.Data.IModbusMessageDataCollection">
+            <summary>
+                Modbus message containing data.
+            </summary>
+        </member>
+        <member name="P:NModbus.Data.IModbusMessageDataCollection.NetworkBytes">
+            <summary>
+                Gets the network bytes.
+            </summary>
+        </member>
+        <member name="P:NModbus.Data.IModbusMessageDataCollection.ByteCount">
+            <summary>
+                Gets the byte count.
+            </summary>
+        </member>
+        <member name="T:NModbus.Data.PointSource`1">
+            <summary>
+            A simple implementation of the point source. Memory for all points is allocated the first time a point is accessed. 
+            This is useful for cases where many points are used.
+            </summary>
+            <typeparam name="T"></typeparam>
+        </member>
+        <member name="T:NModbus.Data.RegisterCollection">
+            <summary>
+                Collection of 16 bit registers.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.RegisterCollection.#ctor">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.RegisterCollection" /> class.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.RegisterCollection.#ctor(System.Byte[])">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.RegisterCollection" /> class.
+            </summary>
+            <param name="bytes">Array for register collection.</param>
+        </member>
+        <member name="M:NModbus.Data.RegisterCollection.#ctor(System.UInt16[])">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.RegisterCollection" /> class.
+            </summary>
+            <param name="registers">Array for register collection.</param>
+        </member>
+        <member name="M:NModbus.Data.RegisterCollection.#ctor(System.Collections.Generic.IList{System.UInt16})">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.RegisterCollection" /> class.
+            </summary>
+            <param name="registers">List for register collection.</param>
+        </member>
+        <member name="P:NModbus.Data.RegisterCollection.ByteCount">
+            <summary>
+                Gets the byte count.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.RegisterCollection.ToString">
+            <summary>
+                Returns a <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </summary>
+            <returns>
+                A <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </returns>
+        </member>
+        <member name="T:NModbus.Device.ConcurrentModbusMaster">
+            <summary>
+            Provides concurrency control across multiple Modbus readers/writers.
+            </summary>
+        </member>
+        <member name="T:NModbus.Device.ModbusDevice">
+            <summary>
+                Modbus device.
+            </summary>
+        </member>
+        <member name="P:NModbus.Device.ModbusDevice.Transport">
+            <summary>
+                Gets the Modbus Transport.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusDevice.Dispose">
+            <summary>
+                Releases unmanaged and - optionally - managed resources.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusDevice.Dispose(System.Boolean)">
+            <summary>
+                Releases unmanaged and - optionally - managed resources.
+            </summary>
+            <param name="disposing">
+                <c>true</c> to release both managed and unmanaged resources;
+                <c>false</c> to release only unmanaged resources.
+            </param>
+        </member>
+        <member name="T:NModbus.Device.ModbusFunctionServiceBase`1">
+            <summary>
+            Base class for 
+            </summary>
+            <typeparam name="TRequest">The type of request to handle.</typeparam>
+        </member>
+        <member name="T:NModbus.Device.ModbusIpMaster">
+            <summary>
+               Modbus IP master device.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.#ctor(NModbus.IModbusTransport)">
+            <summary>
+                Modbus IP master device.
+            </summary>
+            <param name="transport">Transport used by this master.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadCoils(System.UInt16,System.UInt16)">
+            <summary>
+               Reads from 1 to 2000 contiguous coils status.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of coils to read.</param>
+            <returns>Coils status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadCoilsAsync(System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads from 1 to 2000 contiguous coils status.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of coils to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadInputs(System.UInt16,System.UInt16)">
+            <summary>
+               Reads from 1 to 2000 contiguous discrete input status.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of discrete inputs to read.</param>
+            <returns>Discrete inputs status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadInputsAsync(System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads from 1 to 2000 contiguous discrete input status.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of discrete inputs to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadHoldingRegisters(System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of holding registers.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Holding registers status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadHoldingRegistersAsync(System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of holding registers.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadInputRegisters(System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of input registers.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Input registers status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadInputRegistersAsync(System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of input registers.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteSingleCoil(System.UInt16,System.Boolean)">
+            <summary>
+               Writes a single coil value.
+            </summary>
+            <param name="coilAddress">Address to write value to.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteSingleCoilAsync(System.UInt16,System.Boolean)">
+            <summary>
+               Asynchronously writes a single coil value.
+            </summary>
+            <param name="coilAddress">Address to write value to.</param>
+            <param name="value">Value to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteSingleRegister(System.UInt16,System.UInt16)">
+            <summary>
+                Write a single holding register.
+            </summary>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteSingleRegisterAsync(System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously writes a single holding register.
+            </summary>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteMultipleRegisters(System.UInt16,System.UInt16[])">
+            <summary>
+                Write a block of 1 to 123 contiguous registers.
+            </summary>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteMultipleRegistersAsync(System.UInt16,System.UInt16[])">
+            <summary>
+               Asynchronously writes a block of 1 to 123 contiguous registers.
+            </summary>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteMultipleCoils(System.UInt16,System.Boolean[])">
+            <summary>
+                Force each coil in a sequence of coils to a provided value.
+            </summary>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteMultipleCoilsAsync(System.UInt16,System.Boolean[])">
+            <summary>
+               Asynchronously writes a sequence of coils.
+            </summary>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+            <returns>A task that represents the asynchronous write operation</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadWriteMultipleRegisters(System.UInt16,System.UInt16,System.UInt16,System.UInt16[])">
+            <summary>
+                Performs a combination of one read operation and one write operation in a single MODBUS transaction.
+                The write operation is performed before the read.
+                Message uses default TCP slave id of 0.
+            </summary>
+            <param name="startReadAddress">Address to begin reading (Holding registers are addressed starting at 0).</param>
+            <param name="numberOfPointsToRead">Number of registers to read.</param>
+            <param name="startWriteAddress">Address to begin writing (Holding registers are addressed starting at 0).</param>
+            <param name="writeData">Register values to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadWriteMultipleRegistersAsync(System.UInt16,System.UInt16,System.UInt16,System.UInt16[])">
+            <summary>
+               Asynchronously performs a combination of one read operation and one write operation in a single Modbus transaction.
+               The write operation is performed before the read.
+            </summary>
+            <param name="startReadAddress">Address to begin reading (Holding registers are addressed starting at 0).</param>
+            <param name="numberOfPointsToRead">Number of registers to read.</param>
+            <param name="startWriteAddress">Address to begin writing (Holding registers are addressed starting at 0).</param>
+            <param name="writeData">Register values to write.</param>
+            <returns>A task that represents the asynchronous operation.</returns>
+        </member>
+        <member name="T:NModbus.Device.ModbusMaster">
+            <summary>
+                Modbus master device.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadCoils(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads from 1 to 2000 contiguous coils status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of coils to read.</param>
+            <returns>Coils status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadCoilsAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads from 1 to 2000 contiguous coils status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of coils to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadInputs(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads from 1 to 2000 contiguous discrete input status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of discrete inputs to read.</param>
+            <returns>Discrete inputs status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadInputsAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads from 1 to 2000 contiguous discrete input status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of discrete inputs to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of holding registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Holding registers status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadHoldingRegistersAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of holding registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadInputRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of input registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Input registers status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadInputRegistersAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of input registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteSingleCoil(System.Byte,System.UInt16,System.Boolean)">
+            <summary>
+               Writes a single coil value.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="coilAddress">Address to write value to.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteSingleCoilAsync(System.Byte,System.UInt16,System.Boolean)">
+            <summary>
+               Asynchronously writes a single coil value.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="coilAddress">Address to write value to.</param>
+            <param name="value">Value to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteSingleRegister(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Writes a single holding register.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteSingleRegisterAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously writes a single holding register.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteMultipleRegisters(System.Byte,System.UInt16,System.UInt16[])">
+            <summary>
+                Write a block of 1 to 123 contiguous 16 bit holding registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteMultipleRegistersAsync(System.Byte,System.UInt16,System.UInt16[])">
+            <summary>
+               Asynchronously writes a block of 1 to 123 contiguous registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteMultipleCoils(System.Byte,System.UInt16,System.Boolean[])">
+            <summary>
+               Writes a sequence of coils.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteMultipleCoilsAsync(System.Byte,System.UInt16,System.Boolean[])">
+            <summary>
+               Asynchronously writes a sequence of coils.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadWriteMultipleRegisters(System.Byte,System.UInt16,System.UInt16,System.UInt16,System.UInt16[])">
+            <summary>
+               Performs a combination of one read operation and one write operation in a single Modbus transaction.
+               The write operation is performed before the read.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startReadAddress">Address to begin reading (Holding registers are addressed starting at 0).</param>
+            <param name="numberOfPointsToRead">Number of registers to read.</param>
+            <param name="startWriteAddress">Address to begin writing (Holding registers are addressed starting at 0).</param>
+            <param name="writeData">Register values to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadWriteMultipleRegistersAsync(System.Byte,System.UInt16,System.UInt16,System.UInt16,System.UInt16[])">
+            <summary>
+               Asynchronously performs a combination of one read operation and one write operation in a single Modbus transaction.
+               The write operation is performed before the read.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startReadAddress">Address to begin reading (Holding registers are addressed starting at 0).</param>
+            <param name="numberOfPointsToRead">Number of registers to read.</param>
+            <param name="startWriteAddress">Address to begin writing (Holding registers are addressed starting at 0).</param>
+            <param name="writeData">Register values to write.</param>
+            <returns>A task that represents the asynchronous operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteFileRecord(System.Byte,System.UInt16,System.UInt16,System.Byte[])">
+            <summary>
+            Write a file record to the device.
+            </summary>
+            <param name="slaveAdress">Address of device to write values to</param>
+            <param name="fileNumber">The Extended Memory file number</param>
+            <param name="startingAddress">The starting register address within the file</param>
+            <param name="data">The data to be written</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ExecuteCustomMessage``1(NModbus.IModbusMessage)">
+            <summary>
+               Executes the custom message.
+            </summary>
+            <typeparam name="TResponse">The type of the response.</typeparam>
+            <param name="request">The request.</param>
+        </member>
+        <member name="T:NModbus.Device.ModbusMasterTcpConnection">
+            <summary>
+            Represents an incoming connection from a Modbus master. Contains the slave's logic to process the connection.
+            </summary>
+        </member>
+        <member name="E:NModbus.Device.ModbusMasterTcpConnection.ModbusMasterTcpConnectionClosed">
+            <summary>
+                Occurs when a Modbus master TCP connection is closed.
+            </summary>
+        </member>
+        <member name="T:NModbus.Device.ModbusSerialMaster">
+            <summary>
+                Modbus serial master device.
+            </summary>
+        </member>
+        <member name="P:NModbus.Device.ModbusSerialMaster.NModbus#IModbusSerialMaster#Transport">
+            <summary>
+                Gets the Modbus Transport.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusSerialMaster.ReturnQueryData(System.Byte,System.UInt16)">
+            <summary>
+                Serial Line only.
+                Diagnostic function which loops back the original data.
+                NModbus only supports looping back one ushort value, this is a limitation of the "Best Effort" implementation of
+                the RTU protocol.
+            </summary>
+            <param name="slaveAddress">Address of device to test.</param>
+            <param name="data">Data to return.</param>
+            <returns>Return true if slave device echoed data.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusSlaveNetwork.ListenAsync(System.Threading.CancellationToken)">
+            <summary>
+            Start slave listening for requests.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusSlaveNetwork.ApplyRequest(NModbus.IModbusMessage)">
+            <summary>
+            Apply the request.
+            </summary>
+            <param name="request"></param>
+        </member>
+        <member name="T:NModbus.Device.ModbusTcpSlaveNetwork">
+            <summary>
+                Modbus TCP slave device.
+            </summary>
+        </member>
+        <member name="P:NModbus.Device.ModbusTcpSlaveNetwork.Masters">
+            <summary>
+                Gets the Modbus TCP Masters connected to this Modbus TCP Slave.
+            </summary>
+        </member>
+        <member name="P:NModbus.Device.ModbusTcpSlaveNetwork.Server">
+            <summary>
+                Gets the server.
+            </summary>
+            <value>The server.</value>
+            <remarks>
+                This property is not thread safe, it should only be consumed within a lock.
+            </remarks>
+        </member>
+        <member name="M:NModbus.Device.ModbusTcpSlaveNetwork.ListenAsync(System.Threading.CancellationToken)">
+            <summary>
+                Start slave listening for requests.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusTcpSlaveNetwork.Dispose(System.Boolean)">
+            <summary>
+                Releases unmanaged and - optionally - managed resources
+            </summary>
+            <param name="disposing">
+                <c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only
+                unmanaged resources.
+            </param>
+            <remarks>Dispose is thread-safe.</remarks>
+        </member>
+        <member name="T:NModbus.Device.ModbusUdpSlaveNetwork">
+            <summary>
+                Modbus UDP slave device.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusUdpSlaveNetwork.ListenAsync(System.Threading.CancellationToken)">
+            <summary>
+                Start slave listening for requests.
+            </summary>
+        </member>
+        <member name="T:NModbus.Device.PointEventArgs">
+            <summary>
+            Modbus Slave request event args containing information on the message.
+            </summary>
+        </member>
+        <member name="M:NModbus.Extensions.CrcExtensions.DoesCrcMatch(System.Byte[])">
+            <summary>
+            Determines whether the crc stored in the message matches the calculated crc.
+            </summary>
+            <param name="message"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.CrcExtensions.GetCRC(System.Byte[])">
+            <summary>
+            Gets the CRC of the message
+            </summary>
+            <param name="message"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.DictionaryExtensions.GetValueOrDefault``2(System.Collections.Generic.IDictionary{``0,``1},``0)">
+            <summary>
+            Gets the specified value in the dictionary. If not found, returns default for TValue.
+            </summary>
+            <typeparam name="TKey"></typeparam>
+            <typeparam name="TValue"></typeparam>
+            <param name="dictionary"></param>
+            <param name="key"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.Extensions.Enron.EnronModbus">
+            <summary>
+                Utility extensions for the Enron Modbus dialect.
+            </summary>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.ReadInputRegisters32(NModbus.IModbusMaster,System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of input registers with 32 bit register size.
+            </summary>
+            <param name="master">The Modbus master.</param>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Input registers status.</returns>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.ReadHoldingRegisters32(NModbus.IModbusMaster,System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of holding registers.
+            </summary>
+            <param name="master">The Modbus master.</param>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Holding registers status.</returns>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.ReadInputRegisters32Async(NModbus.IModbusMaster,System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of input registers with 32 bit register size.
+            </summary>
+            <param name="master">The Modbus master.</param>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.ReadHoldingRegisters32Async(NModbus.IModbusMaster,System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of holding registers.
+            </summary>
+            <param name="master">The Modbus master.</param>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.WriteSingleRegister32(NModbus.IModbusMaster,System.Byte,System.UInt16,System.UInt32)">
+            <summary>
+                Write a single 16 bit holding register.
+            </summary>
+            <param name="master">The Modbus master.</param>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.WriteMultipleRegisters32(NModbus.IModbusMaster,System.Byte,System.UInt16,System.UInt32[])">
+            <summary>
+                Write a block of contiguous 32 bit holding registers.
+            </summary>
+            <param name="master">The Modbus master.</param>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.ConvertFrom32(System.UInt32[])">
+            <summary> Convert the 32 bit registers to two 16 bit values. </summary>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.ConvertTo32(System.UInt16[])">
+            <summary> Convert the double 16 bit registers to single 32 bit values. </summary>
+        </member>
+        <member name="T:NModbus.Extensions.Functions.Endian">
+            <summary>
+            Class containing functions to covert endian from network device to host this code is running on.
+            </summary>
+        </member>
+        <member name="M:NModbus.Extensions.Functions.Endian.BigEndian(System.Byte[])">
+            <summary>
+            Converts BigEndian source bytes to Endian format of system.
+            Source BE: 0x0A,0x0B,0x0C,0x0D. 
+            Target BE: 0x0A,0x0B,0x0C,0x0D.
+            Target LE: 0x0D,0x0C,0x0B,0x0A.
+            </summary>
+            <param name="sourceBytes">Byte array from device</param>
+            <returns>Bytes in Endian format for system</returns>
+        </member>
+        <member name="M:NModbus.Extensions.Functions.Endian.LittleEndian(System.Byte[])">
+            <summary>
+            Converts LittleEndian source bytes to Endian format of system. 
+            Source LE: 0x0D,0x0C,0x0B,0x0A. 
+            Target BE: 0x0A,0x0B,0x0C,0x0D.
+            Target LE: 0x0D,0x0C,0x0B,0x0A.
+            </summary>
+            <param name="sourceBytes">Byte array from device</param>
+            <returns>Bytes in Endian format for system</returns>
+        </member>
+        <member name="T:NModbus.Extensions.Functions.RegisterFunctions">
+            <summary>
+              This class provides some functions that can be used to read/write values of a set word size.
+            </summary>
+        </member>
+        <member name="T:NModbus.Extensions.ModbusMasterEnhanced">
+            <summary>
+            Utility Class to support Modbus 32/64bit devices. 
+            </summary>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.#ctor(NModbus.IModbusMaster,System.UInt32,System.Func{System.Byte[],System.Byte[]},System.Boolean)">
+            <summary>
+            Constructor with values to be used by all methods. 
+            Default is 32bit, LittleEndian, with wordswapping.
+            </summary>
+            <param name="master">The Modbus master</param>
+            <param name="wordSize">Wordsize used by device. 16/32/64 are valid.</param>
+            <param name="endian">The endian encoding of the device.</param>
+            <param name="wordSwapped">Should the ushort words mirrored then flattened to bytes.</param>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.ReadCharHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+            Reads registers and converts the result into a char array.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of chars to read.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.ReadUshortHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+            Reads registers and converts the result into a ushort array.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of ushorts to read.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.ReadShortHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+            Reads registers and converts the result into a short array.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of shots to read.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.ReadUintHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+            Reads registers and converts the result into a uint array.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of uints to read.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.ReadIntHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+            Reads registers and converts the result into a int array.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of ints to read.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.ReadFloatHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+            Reads registers and converts the result into a float array.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of floats to read.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.WriteCharHoldingRegisters(System.Byte,System.UInt16,System.Char[])">
+            <summary>
+                Write a char array to registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to start writting values at.</param>
+            <param name="data">Chars to write to device.</param>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.WriteUshortHoldingRegisters(System.Byte,System.UInt16,System.UInt16[])">
+            <summary>
+                Write a ushort array to registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to start writting values at.</param>
+            <param name="data">Ushorts to write to device.</param>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.WriteShortHoldingRegisters(System.Byte,System.UInt16,System.Int16[])">
+            <summary>
+                Write a short array to registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to start writting values at.</param>
+            <param name="data">Shorts to write to device.</param>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.WriteIntHoldingRegisters(System.Byte,System.UInt16,System.Int32[])">
+            <summary>
+                Write a int array to registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to start writting values at.</param>
+            <param name="data">Ints to write to device.</param>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.WriteUIntHoldingRegisters(System.Byte,System.UInt16,System.UInt32[])">
+            <summary>
+                Write a uint array to registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to start writting values at.</param>
+            <param name="data">Uints to write to device.</param>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.WriteFloatHoldingRegisters(System.Byte,System.UInt16,System.Single[])">
+            <summary>
+                Write a float array to registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to start writting values at.</param>
+            <param name="data">Floats to write to device.</param>
+        </member>
+        <member name="T:NModbus.FactoryExtensions">
+            <summary>
+            Extension methods for the IModbusFactory interface.
+            </summary>
+        </member>
+        <member name="M:NModbus.FactoryExtensions.CreateRtuMaster(NModbus.IModbusFactory,NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an RTU master.
+            </summary>
+            <param name="factory"></param>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.FactoryExtensions.CreateAsciiMaster(NModbus.IModbusFactory,NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an ASCII master.
+            </summary>
+            <param name="factory"></param>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.FactoryExtensions.CreateIpMaster(NModbus.IModbusFactory,NModbus.IO.IStreamResource)">
+            <summary>
+            Creates a TCP or UDP master.
+            </summary>
+            <param name="factory"></param>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.FactoryExtensions.CreateRtuSlaveNetwork(NModbus.IModbusFactory,NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an RTU slave network.
+            </summary>
+            <param name="factory"></param>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.FactoryExtensions.CreateAsciiSlaveNetwork(NModbus.IModbusFactory,NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an ASCII slave network.
+            </summary>
+            <param name="factory"></param>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.IModbusFactory">
+            <summary>
+            Container for modbus function services.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusFactory.GetFunctionService(System.Byte)">
+            <summary>
+            Get the service for a given function code.
+            </summary>
+            <param name="functionCode"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.GetAllFunctionServices">
+            <summary>
+            Gets all of the services.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateMaster(NModbus.IModbusSerialTransport)">
+            <summary>
+            Create an rtu master.
+            </summary>
+            <param name="transport"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateMaster(System.Net.Sockets.UdpClient)">
+            <summary>
+            Create a TCP master.
+            </summary>
+            <param name="client"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateMaster(System.Net.Sockets.TcpClient)">
+            <summary>
+            
+            </summary>
+            <param name="client"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateSlave(System.Byte,NModbus.ISlaveDataStore)">
+            <summary>
+            Creates a Modbus Slave.
+            </summary>
+            <param name="unitId">The address of this slave on the Modbus network.</param>
+            <param name="dataStore">Optionally specify a custom data store for the created slave.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateSlaveNetwork(NModbus.IModbusRtuTransport)">
+            <summary>
+            Creates a slave network based on the RTU transport.
+            </summary>
+            <param name="transport"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateSlaveNetwork(NModbus.IModbusAsciiTransport)">
+            <summary>
+            Creates an ascii slave network.
+            </summary>
+            <param name="transport">The ascii transport to base this on.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateSlaveNetwork(System.Net.Sockets.TcpListener)">
+            <summary>
+            Create a slave network based on TCP.
+            </summary>
+            <param name="tcpListener"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateSlaveNetwork(System.Net.Sockets.UdpClient)">
+            <summary>
+            Creates a UDP modbus slave network.
+            </summary>
+            <param name="client"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateRtuTransport(NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an RTU transpoort. 
+            </summary>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateAsciiTransport(NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an Ascii Transport.
+            </summary>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateIpTransport(NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an IP Transport
+            </summary>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.IModbusFunctionService">
+            <summary>
+            A Modbus slave message handler.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusFunctionService.FunctionCode">
+            <summary>
+            The function code that this handles
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusFunctionService.CreateRequest(System.Byte[])">
+            <summary>
+            Creates a message that wrapps the request frame.
+            </summary>
+            <param name="frame"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFunctionService.HandleSlaveRequest(NModbus.IModbusMessage,NModbus.ISlaveDataStore)">
+            <summary>
+            Handle a slave request.
+            </summary>
+            <param name="request"></param>
+            <param name="dataStore"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFunctionService.GetRtuRequestBytesToRead(System.Byte[])">
+            <summary>
+            Gets the number of bytes to read for a request
+            </summary>
+            <param name="frameStart"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFunctionService.GetRtuResponseBytesToRead(System.Byte[])">
+            <summary>
+            Gets the number of bytes to read for a response.
+            </summary>
+            <param name="frameStart"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.IModbusLogger">
+            <summary>
+            Simple logging target. Designed to be easily integrated into other logging frameworks.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusLogger.Log(NModbus.LoggingLevel,System.String)">
+            <summary>
+            Conditionally log a message
+            </summary>
+            <param name="level"></param>
+            <param name="message"></param>
+        </member>
+        <member name="M:NModbus.IModbusLogger.ShouldLog(NModbus.LoggingLevel)">
+            <summary>
+            True if this level should be logged, false otherwise.
+            </summary>
+            <param name="level"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.IModbusMaster">
+            <summary>
+                Modbus master device.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusMaster.Transport">
+            <summary>
+                Transport used by this master.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadCoils(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads from 1 to 2000 contiguous coils status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of coils to read.</param>
+            <returns>Coils status.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadCoilsAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads from 1 to 2000 contiguous coils status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of coils to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadInputs(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads from 1 to 2000 contiguous discrete input status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of discrete inputs to read.</param>
+            <returns>Discrete inputs status.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadInputsAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads from 1 to 2000 contiguous discrete input status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of discrete inputs to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of holding registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Holding registers status.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadHoldingRegistersAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of holding registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadInputRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of input registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Input registers status.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadInputRegistersAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of input registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteSingleCoil(System.Byte,System.UInt16,System.Boolean)">
+            <summary>
+               Writes a single coil value.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="coilAddress">Address to write value to.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteSingleCoilAsync(System.Byte,System.UInt16,System.Boolean)">
+            <summary>
+               Asynchronously writes a single coil value.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="coilAddress">Address to write value to.</param>
+            <param name="value">Value to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteSingleRegister(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Writes a single holding register.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteSingleRegisterAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously writes a single holding register.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteMultipleRegisters(System.Byte,System.UInt16,System.UInt16[])">
+            <summary>
+               Writes a block of 1 to 123 contiguous registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteMultipleRegistersAsync(System.Byte,System.UInt16,System.UInt16[])">
+            <summary>
+               Asynchronously writes a block of 1 to 123 contiguous registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteMultipleCoils(System.Byte,System.UInt16,System.Boolean[])">
+            <summary>
+               Writes a sequence of coils.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteMultipleCoilsAsync(System.Byte,System.UInt16,System.Boolean[])">
+            <summary>
+               Asynchronously writes a sequence of coils.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadWriteMultipleRegisters(System.Byte,System.UInt16,System.UInt16,System.UInt16,System.UInt16[])">
+            <summary>
+               Performs a combination of one read operation and one write operation in a single Modbus transaction.
+               The write operation is performed before the read.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startReadAddress">Address to begin reading (Holding registers are addressed starting at 0).</param>
+            <param name="numberOfPointsToRead">Number of registers to read.</param>
+            <param name="startWriteAddress">Address to begin writing (Holding registers are addressed starting at 0).</param>
+            <param name="writeData">Register values to write.</param>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadWriteMultipleRegistersAsync(System.Byte,System.UInt16,System.UInt16,System.UInt16,System.UInt16[])">
+            <summary>
+               Asynchronously performs a combination of one read operation and one write operation in a single Modbus transaction.
+               The write operation is performed before the read.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startReadAddress">Address to begin reading (Holding registers are addressed starting at 0).</param>
+            <param name="numberOfPointsToRead">Number of registers to read.</param>
+            <param name="startWriteAddress">Address to begin writing (Holding registers are addressed starting at 0).</param>
+            <param name="writeData">Register values to write.</param>
+            <returns>A task that represents the asynchronous operation</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteFileRecord(System.Byte,System.UInt16,System.UInt16,System.Byte[])">
+            <summary>
+            Write a file record to the device.
+            </summary>
+            <param name="slaveAdress">Address of device to write values to</param>
+            <param name="fileNumber">The Extended Memory file number</param>
+            <param name="startingAddress">The starting register address within the file</param>
+            <param name="data">The data to be written</param>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ExecuteCustomMessage``1(NModbus.IModbusMessage)">
+            <summary>
+               Executes the custom message.
+            </summary>
+            <typeparam name="TResponse">The type of the response.</typeparam>
+            <param name="request">The request.</param>
+        </member>
+        <member name="T:NModbus.IModbusMessage">
+            <summary>
+                A message built by the master (client) that initiates a Modbus transaction.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusMessage.FunctionCode">
+            <summary>
+                The function code tells the server what kind of action to perform.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusMessage.SlaveAddress">
+            <summary>
+                Address of the slave (server).
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusMessage.MessageFrame">
+            <summary>
+                Composition of the slave address and protocol data unit.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusMessage.ProtocolDataUnit">
+            <summary>
+                Composition of the function code and message data.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusMessage.TransactionId">
+            <summary>
+                A unique identifier assigned to a message when using the IP protocol.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusMessage.Initialize(System.Byte[])">
+            <summary>
+                Initializes a modbus message from the specified message frame.
+            </summary>
+            <param name="frame">Bytes of Modbus frame.</param>
+        </member>
+        <member name="T:NModbus.IModbusSerialMaster">
+            <summary>
+                Modbus Serial Master device.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusSerialMaster.Transport">
+            <summary>
+                Transport for used by this master.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusSerialMaster.ReturnQueryData(System.Byte,System.UInt16)">
+            <summary>
+                Serial Line only.
+                Diagnostic function which loops back the original data.
+                NModbus only supports looping back one ushort value, this is a
+                limitation of the "Best Effort" implementation of the RTU protocol.
+            </summary>
+            <param name="slaveAddress">Address of device to test.</param>
+            <param name="data">Data to return.</param>
+            <returns>Return true if slave device echoed data.</returns>
+        </member>
+        <member name="T:NModbus.IModbusSlave">
+            <summary>
+            A modbus slave.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusSlave.UnitId">
+            <summary>
+            Gets the unit id of this slave.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusSlave.DataStore">
+            <summary>
+            Gets the data store for this slave.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusSlave.ApplyRequest(NModbus.IModbusMessage)">
+            <summary>
+            Applies the request.
+            </summary>
+            <param name="request"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.IModbusSlaveNetwork">
+            <summary>
+            A network of slave devices on a single transport.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusSlaveNetwork.ListenAsync(System.Threading.CancellationToken)">
+            <summary>
+            Listen for incoming requests.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusSlaveNetwork.AddSlave(NModbus.IModbusSlave)">
+            <summary>
+            Add a slave to the network.
+            </summary>
+            <param name="slave"></param>
+        </member>
+        <member name="M:NModbus.IModbusSlaveNetwork.GetSlave(System.Byte)">
+            <summary>
+            Get a slave from the network.
+            </summary>
+            <param name="unitId">The slave address</param>
+            <returns>The specified slave, or null if one can't be found.</returns>
+        </member>
+        <member name="M:NModbus.IModbusSlaveNetwork.RemoveSlave(System.Byte)">
+            <summary>
+            Removes a slave from the network.
+            </summary>
+            <param name="unitId"></param>
+        </member>
+        <member name="T:NModbus.IModbusTcpSlaveNetwork">
+            <summary>
+                Modbus TCP slave device.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusTcpSlaveNetwork.Masters">
+            <summary>
+                Gets the Modbus TCP Masters connected to this Modbus TCP Slave.
+            </summary>
+        </member>
+        <member name="T:NModbus.IPointSource`1">
+            <summary>
+            Represents a memory map.
+            </summary>
+            <typeparam name="TPoint"></typeparam>
+        </member>
+        <member name="M:NModbus.IPointSource`1.ReadPoints(System.UInt16,System.UInt16)">
+            <summary>
+            Read a series of points.
+            </summary>
+            <param name="startAddress"></param>
+            <param name="numberOfPoints"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IPointSource`1.WritePoints(System.UInt16,`0[])">
+            <summary>
+            Write a series of points.
+            </summary>
+            <param name="startAddress"></param>
+            <param name="points"></param>
+        </member>
+        <member name="T:NModbus.ISlaveDataStore">
+            <summary>
+            Object simulation of a device memory map.
+            </summary>
+        </member>
+        <member name="P:NModbus.ISlaveDataStore.CoilDiscretes">
+            <summary>
+            Gets the descrete coils.
+            </summary>
+        </member>
+        <member name="P:NModbus.ISlaveDataStore.CoilInputs">
+            <summary>
+            Gets the discrete inputs.
+            </summary>
+        </member>
+        <member name="P:NModbus.ISlaveDataStore.HoldingRegisters">
+            <summary>
+            Gets the holding registers.
+            </summary>
+        </member>
+        <member name="P:NModbus.ISlaveDataStore.InputRegisters">
+            <summary>
+            Gets the input registers.
+            </summary>
+        </member>
+        <member name="T:NModbus.LoggingLevel">
+            <summary>
+            Following the guidelines from https://github.com/aspnet/Logging/wiki/Guidelines.
+            </summary>
+        </member>
+        <member name="F:NModbus.LoggingLevel.Trace">
+            <summary>
+            The most detailed log messages, may contain sensitive application data. These messages should be disabled by default and should never be enabled in a production environment.
+            </summary>
+        </member>
+        <member name="F:NModbus.LoggingLevel.Debug">
+            <summary>
+            Logs that are used for interactive investigation during development should use the Debug level. These logs should primarily contain information useful for debugging and have no long-term value. 
+            This is the default most verbose level of logging.
+            </summary>
+        </member>
+        <member name="F:NModbus.LoggingLevel.Information">
+            <summary>
+            Track the general flow of the application using logs at the Information level. These logs should have value in the long term.
+            </summary>
+        </member>
+        <member name="F:NModbus.LoggingLevel.Warning">
+            <summary>
+            Warnings should highlight an abnormal or unexpected event in the application flow. This event does not cause the application execution to stop, but can signify sub-optimal performance or a potential problem for the future. A common place to log a warning is from handled exceptions. 
+            </summary>
+        </member>
+        <member name="F:NModbus.LoggingLevel.Error">
+            <summary>
+            An error should be logged when the current flow of execution is stopped due to a failure. These should indicate a failure in the current activity, not an application-wide failure. These will mainly be unhandled exceptions and recoverable failures. 
+            </summary>
+        </member>
+        <member name="F:NModbus.LoggingLevel.Critical">
+            <summary>
+            A critical log should describe an unrecoverable application or system crash, or a catastrophic failure that requires immediate attention. 
+            </summary>
+        </member>
+        <member name="T:NModbus.InvalidModbusRequestException">
+            <summary>
+                An exception that provides the exception code that will be sent in response to an invalid Modbus request.
+            </summary>
+        </member>
+        <member name="M:NModbus.InvalidModbusRequestException.#ctor(System.Byte)">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.InvalidModbusRequestException" /> class with a specified Modbus exception code.
+            </summary>
+            <param name="exceptionCode">The Modbus exception code to provide to the slave.</param>
+        </member>
+        <member name="M:NModbus.InvalidModbusRequestException.#ctor(System.String,System.Byte)">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.InvalidModbusRequestException" /> class with a specified error message and Modbus exception code.
+            </summary>
+            <param name="message">The error message that explains the reason for the exception.</param>
+            <param name="exceptionCode">The Modbus exception code to provide to the slave.</param>
+        </member>
+        <member name="M:NModbus.InvalidModbusRequestException.#ctor(System.Byte,System.Exception)">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.InvalidModbusRequestException" /> class with a specified Modbus exception code and a reference to the inner exception that is the cause of this exception.
+            </summary>
+            <param name="exceptionCode">The Modbus exception code to provide to the slave.</param>
+            <param name="innerException">The exception that is the cause of the current exception. If the <paramref name="innerException" /> parameter is not a null reference, the current exception is raised in a catch block that handles the inner exception.</param>
+        </member>
+        <member name="M:NModbus.InvalidModbusRequestException.#ctor(System.String,System.Byte,System.Exception)">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.InvalidModbusRequestException" /> class with a specified Modbus exception code and a reference to the inner exception that is the cause of this exception.
+            </summary>
+            <param name="message">The error message that explains the reason for the exception.</param>
+            <param name="exceptionCode">The Modbus exception code to provide to the slave.</param>
+            <param name="innerException">The exception that is the cause of the current exception. If the <paramref name="innerException" /> parameter is not a null reference, the current exception is raised in a catch block that handles the inner exception.</param>
+        </member>
+        <member name="M:NModbus.InvalidModbusRequestException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.InvalidModbusRequestException" /> class with serialized data.
+            </summary>
+            <param name="info">The object that holds the serialized object data.</param>
+            <param name="context">The contextual information about the source or destination.</param>
+        </member>
+        <member name="P:NModbus.InvalidModbusRequestException.ExceptionCode">
+            <summary>
+                Gets the Modbus exception code to provide to the slave.
+            </summary>
+        </member>
+        <member name="M:NModbus.InvalidModbusRequestException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
+            <summary>Sets the <see cref="T:System.Runtime.Serialization.SerializationInfo" /> object with the Modbus exception code and additional exception information.</summary>
+            <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo" /> that holds the serialized object data about the exception being thrown.</param>
+            <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext" /> that contains contextual information about the source or destination.</param>
+        </member>
+        <member name="T:NModbus.IO.IStreamResource">
+            <summary>
+                Represents a serial resource.
+                Implementor - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.IStreamResource.InfiniteTimeout">
+            <summary>
+                Indicates that no timeout should occur.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.IStreamResource.ReadTimeout">
+            <summary>
+                Gets or sets the number of milliseconds before a timeout occurs when a read operation does not finish.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.IStreamResource.WriteTimeout">
+            <summary>
+                Gets or sets the number of milliseconds before a timeout occurs when a write operation does not finish.
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.IStreamResource.DiscardInBuffer">
+            <summary>
+                Purges the receive buffer.
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.IStreamResource.Read(System.Byte[],System.Int32,System.Int32)">
+            <summary>
+                Reads a number of bytes from the input buffer and writes those bytes into a byte array at the specified offset.
+            </summary>
+            <param name="buffer">The byte array to write the input to.</param>
+            <param name="offset">The offset in the buffer array to begin writing.</param>
+            <param name="count">The number of bytes to read.</param>
+            <returns>The number of bytes read.</returns>
+        </member>
+        <member name="M:NModbus.IO.IStreamResource.Write(System.Byte[],System.Int32,System.Int32)">
+            <summary>
+                Writes a specified number of bytes to the port from an output buffer, starting at the specified offset.
+            </summary>
+            <param name="buffer">The byte array that contains the data to write to the port.</param>
+            <param name="offset">The offset in the buffer array to begin writing.</param>
+            <param name="count">The number of bytes to write.</param>
+        </member>
+        <member name="T:NModbus.IO.ModbusAsciiTransport">
+            <summary>
+                Refined Abstraction - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.ModbusIpTransport">
+            <summary>
+                Transport for Internet protocols.
+                Refined Abstraction - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusIpTransport.GetNewTransactionId">
+            <summary>
+                Create a new transaction ID.
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.ModbusRtuTransport">
+            <summary>
+                Refined Abstraction - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.ModbusSerialTransport">
+            <summary>
+                Transport for Serial protocols.
+                Refined Abstraction - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusSerialTransport.CheckFrame">
+            <summary>
+            Gets or sets a value indicating whether LRC/CRC frame checking is performed on messages.
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.ModbusTransport">
+            <summary>
+            Modbus transport.
+            Abstraction - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusTransport.#ctor(NModbus.IModbusFactory,NModbus.IModbusLogger)">
+            <summary>
+                This constructor is called by the NullTransport.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.Retries">
+            <summary>
+                Number of times to retry sending message after encountering a failure such as an IOException,
+                TimeoutException, or a corrupt message.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.RetryOnOldResponseThreshold">
+            <summary>
+            If non-zero, this will cause a second reply to be read if the first is behind the sequence number of the
+            request by less than this number.  For example, set this to 3, and if when sending request 5, response 3 is
+            read, we will attempt to re-read responses.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.SlaveBusyUsesRetryCount">
+            <summary>
+            If set, Slave Busy exception causes retry count to be used.  If false, Slave Busy will cause infinite retries
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.WaitToRetryMilliseconds">
+            <summary>
+                Gets or sets the number of milliseconds the tranport will wait before retrying a message after receiving
+                an ACKNOWLEGE or SLAVE DEVICE BUSY slave exception response.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.ReadTimeout">
+            <summary>
+                Gets or sets the number of milliseconds before a timeout occurs when a read operation does not finish.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.WriteTimeout">
+            <summary>
+                Gets or sets the number of milliseconds before a timeout occurs when a write operation does not finish.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.StreamResource">
+            <summary>
+                Gets the stream resource.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.Logger">
+            <summary>
+            Gets the logger for this instance.
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusTransport.Dispose">
+            <summary>
+                Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusTransport.ShouldRetryResponse(NModbus.IModbusMessage,NModbus.IModbusMessage)">
+            <summary>
+                Check whether we need to attempt to read another response before processing it (e.g. response was from previous request)
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusTransport.OnShouldRetryResponse(NModbus.IModbusMessage,NModbus.IModbusMessage)">
+            <summary>
+                Provide hook to check whether receiving a response should be retried
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusTransport.OnValidateResponse(NModbus.IModbusMessage,NModbus.IModbusMessage)">
+            <summary>
+                Provide hook to do transport level message validation.
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusTransport.Dispose(System.Boolean)">
+            <summary>
+                Releases unmanaged and - optionally - managed resources
+            </summary>
+            <param name="disposing">
+                <c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only
+                unmanaged resources.
+            </param>
+        </member>
+        <member name="T:NModbus.IO.SocketAdapter">
+            <summary>
+                Concrete Implementor - http://en.wikipedia.org/wiki/Bridge_Pattern
+                This implementation is for sockets that Convert Rs485 to Ethernet.
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.TcpClientAdapter">
+            <summary>
+                Concrete Implementor - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.UdpClientAdapter">
+            <summary>
+                Concrete Implementor - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="T:NModbus.Logging.DebugModbusLogger">
+            <summary>
+            Writes using Debug.WriteLine().
+            </summary>
+        </member>
+        <member name="T:NModbus.Logging.ModbusLogger">
+            <summary>
+            Base class for Modbus loggers.
+            </summary>
+        </member>
+        <member name="M:NModbus.Logging.ModbusLogger.ShouldLog(NModbus.LoggingLevel)">
+            <summary>
+            Returns true if the level should be loggged, false otherwise.
+            </summary>
+            <param name="level"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Logging.ModbusLogger.Log(NModbus.LoggingLevel,System.String)">
+            <summary>
+            Log the specified message at the specified level.
+            </summary>
+            <param name="level"></param>
+            <param name="message"></param>
+        </member>
+        <member name="M:NModbus.Logging.ModbusLogger.LogCore(NModbus.LoggingLevel,System.String)">
+            <summary>
+            Override this method to implement logging behavior. This function will only be called if ShouldLog(level) is true.
+            </summary>
+            <param name="level"></param>
+            <param name="message"></param>
+        </member>
+        <member name="T:NModbus.Logging.NullModbusLogger">
+            <summary>
+            Empty logger.
+            </summary>
+        </member>
+        <member name="F:NModbus.Logging.NullModbusLogger.Instance">
+            <summary>
+            Singleton.
+            </summary>
+        </member>
+        <member name="M:NModbus.Logging.NullModbusLogger.Log(NModbus.LoggingLevel,System.String)">
+            <summary>
+            This won't do anything.
+            </summary>
+            <param name="level"></param>
+            <param name="message"></param>
+        </member>
+        <member name="M:NModbus.Logging.NullModbusLogger.ShouldLog(NModbus.LoggingLevel)">
+            <summary>
+            Always returnsa false
+            </summary>
+            <param name="level"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.Message.AbstractModbusMessage">
+            <summary>
+                Abstract Modbus message.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.AbstractModbusMessage.#ctor">
+            <summary>
+                Abstract Modbus message.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.AbstractModbusMessage.#ctor(System.Byte,System.Byte)">
+            <summary>
+                Abstract Modbus message.
+            </summary>
+        </member>
+        <member name="T:NModbus.Message.IModbusRequest">
+            <summary>
+                Methods specific to a modbus request message.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.IModbusRequest.ValidateResponse(NModbus.IModbusMessage)">
+            <summary>
+                Validate the specified response against the current request.
+            </summary>
+        </member>
+        <member name="T:NModbus.Message.ModbusMessageFactory">
+            <summary>
+            Modbus message factory.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.ModbusMessageFactory.CreateModbusMessage``1(System.Byte[])">
+            <summary>
+            Create a Modbus message.
+            </summary>
+            <typeparam name="T">Modbus message type.</typeparam>
+            <param name="frame">Bytes of Modbus frame.</param>
+            <returns>New Modbus message based on type and frame bytes.</returns>
+        </member>
+        <member name="T:NModbus.Message.ModbusMessageImpl">
+            <summary>
+                Class holding all implementation shared between two or more message types.
+                Interfaces expose subsets of type specific implementations.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.SlaveExceptionResponse.ToString">
+            <summary>
+                Returns a <see cref="T:System.String"></see> that represents the current <see cref="T:System.Object"></see>.
+            </summary>
+            <returns>
+                A <see cref="T:System.String"></see> that represents the current <see cref="T:System.Object"></see>.
+            </returns>
+        </member>
+        <member name="T:NModbus.Message.WriteMultipleCoilsRequest">
+            <summary>
+                Write Multiple Coils request.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.WriteMultipleCoilsRequest.#ctor">
+            <summary>
+                Write Multiple Coils request.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.WriteMultipleCoilsRequest.#ctor(System.Byte,System.UInt16,NModbus.Data.DiscreteCollection)">
+            <summary>
+                Write Multiple Coils request.
+            </summary>
+        </member>
+        <member name="T:NModbus.Modbus">
+            <summary>
+                Defines constants related to the Modbus protocol.
+            </summary>
+        </member>
+        <member name="F:NModbus.ModbusFactory.BuiltInFunctionServices">
+            <summary>
+            The "built-in" message handlers.
+            </summary>
+        </member>
+        <member name="M:NModbus.ModbusFactory.#ctor">
+            <summary>
+            Create a factory which uses the built in standard slave function handlers.
+            </summary>
+        </member>
+        <member name="M:NModbus.ModbusFactory.#ctor(System.Collections.Generic.IEnumerable{NModbus.IModbusFunctionService},System.Boolean,NModbus.IModbusLogger)">
+            <summary>
+            Create a factory which optionally uses the built in function services and allows custom services to be added.
+            </summary>
+            <param name="functionServices">User provided function services.</param>
+            <param name="includeBuiltIn">If true, the built in function services are included. Otherwise, all function services will come from the functionService parameter.</param>
+            <param name="logger">Logger</param>
+        </member>
+        <member name="T:NModbus.ModbusFunctionCodes">
+            <summary>
+            Supported function codes
+            </summary>
+        </member>
+        <member name="F:NModbus.ModbusIPPorts.Insecure">
+            <summary>
+            502: mbap/TCP
+            </summary>
+        </member>
+        <member name="F:NModbus.ModbusIPPorts.Secure">
+            <summary>
+            802: mbap/TLS/TCP
+            </summary>
+        </member>
+        <member name="T:NModbus.SlaveException">
+            <summary>
+                Represents slave errors that occur during communication.
+            </summary>
+        </member>
+        <member name="M:NModbus.SlaveException.#ctor">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.SlaveException" /> class.
+            </summary>
+        </member>
+        <member name="M:NModbus.SlaveException.#ctor(System.String)">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.SlaveException" /> class.
+            </summary>
+            <param name="message">The message.</param>
+        </member>
+        <member name="M:NModbus.SlaveException.#ctor(System.String,System.Exception)">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.SlaveException" /> class.
+            </summary>
+            <param name="message">The message.</param>
+            <param name="innerException">The inner exception.</param>
+        </member>
+        <member name="M:NModbus.SlaveException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.SlaveException" /> class.
+            </summary>
+            <param name="info">
+                The <see cref="T:System.Runtime.Serialization.SerializationInfo"></see> that holds the serialized
+                object data about the exception being thrown.
+            </param>
+            <param name="context">
+                The <see cref="T:System.Runtime.Serialization.StreamingContext"></see> that contains contextual
+                information about the source or destination.
+            </param>
+            <exception cref="T:System.Runtime.Serialization.SerializationException">
+                The class name is null or
+                <see cref="P:System.Exception.HResult"></see> is zero (0).
+            </exception>
+            <exception cref="T:System.ArgumentNullException">The info parameter is null. </exception>
+        </member>
+        <member name="P:NModbus.SlaveException.Message">
+            <summary>
+                Gets a message that describes the current exception.
+            </summary>
+            <value>
+                The error message that explains the reason for the exception, or an empty string.
+            </value>
+        </member>
+        <member name="P:NModbus.SlaveException.FunctionCode">
+            <summary>
+                Gets the response function code that caused the exception to occur, or 0.
+            </summary>
+            <value>The function code.</value>
+        </member>
+        <member name="P:NModbus.SlaveException.SlaveExceptionCode">
+            <summary>
+                Gets the slave exception code, or 0.
+            </summary>
+            <value>The slave exception code.</value>
+        </member>
+        <member name="P:NModbus.SlaveException.SlaveAddress">
+            <summary>
+                Gets the slave address, or 0.
+            </summary>
+            <value>The slave address.</value>
+        </member>
+        <member name="M:NModbus.SlaveException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
+            <summary>
+                When overridden in a derived class, sets the <see cref="T:System.Runtime.Serialization.SerializationInfo"></see>
+                with information about the exception.
+            </summary>
+            <param name="info">
+                The <see cref="T:System.Runtime.Serialization.SerializationInfo"></see> that holds the serialized
+                object data about the exception being thrown.
+            </param>
+            <param name="context">
+                The <see cref="T:System.Runtime.Serialization.StreamingContext"></see> that contains contextual
+                information about the source or destination.
+            </param>
+            <exception cref="T:System.ArgumentNullException">The info parameter is a null reference (Nothing in Visual Basic). </exception>
+            <PermissionSet>
+                <IPermission
+                    class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
+                    version="1" Read="*AllFiles*" PathDiscovery="*AllFiles*" />
+                <IPermission
+                    class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
+                    version="1" Flags="SerializationFormatter" />
+            </PermissionSet>
+        </member>
+        <member name="T:NModbus.SlaveExceptionCodes">
+            <summary>
+             Modbus slave exception codes
+            </summary>
+        </member>
+        <member name="F:NModbus.SlaveExceptionCodes.IllegalFunction">
+            <summary>
+            The function code received in the query is not an allowable action for the slave.  This may be because the function code is only applicable to newer devices, and was not implemented in the unit selected.  It could also indicate that the slave is in the wrong state to process a request of this type, for example because it is unconfigured and is being asked to return register values. If a Poll Program Complete command was issued, this code indicates that no program function preceded it.
+            </summary>
+        </member>
+        <member name="F:NModbus.SlaveExceptionCodes.IllegalDataAddress">
+            <summary>
+            The data address received in the query is not an allowable address for the slave. More specifically, the combination of reference number and transfer length is invalid. For a controller with 100 registers, a request with offset 96 and length 4 would succeed, a request with offset 96 and length 5 will generate exception 02.
+            </summary>
+        </member>
+        <member name="F:NModbus.SlaveExceptionCodes.IllegalDataValue">
+            <summary>
+            A value contained in the query data field is not an allowable value for the slave.  This indicates a fault in the structure of remainder of a complex request, such as that the implied length is incorrect. It specifically does NOT mean that a data item submitted for storage in a register has a value outside the expectation of the application program, since the MODBUS protocol is unaware of the significance of any particular value of any particular register.
+            </summary>
+        </member>
+        <member name="F:NModbus.SlaveExceptionCodes.SlaveDeviceFailure">
+            <summary>
+            An unrecoverable error occurred while the slave was attempting to perform the requested action.
+            </summary>
+        </member>
+        <member name="F:NModbus.SlaveExceptionCodes.Acknowledge">
+            <summary>
+            Specialized use in conjunction with programming commands.
+            
+            The slave has accepted the request and is processing it, but a long duration of time will be required to do so.T
+            his response is returned to prevent a timeout error from occurring in the master.The master can next issue a 
+            Poll Program Complete message to determine if processing is completed.
+            </summary>
+        </member>
+        <member name="F:NModbus.SlaveExceptionCodes.SlaveDeviceBusy">
+            <summary>
+            Specialized use in conjunction with programming commands.
+            The slave is engaged in processing a long-duration program command.The master should retransmit 
+            the message later when the slave is free.
+            </summary>
+        </member>
+        <member name="T:NModbus.Utility.DiscriminatedUnionOption">
+            <summary>
+                Possible options for DiscriminatedUnion type.
+            </summary>
+        </member>
+        <member name="F:NModbus.Utility.DiscriminatedUnionOption.A">
+            <summary>
+                Option A.
+            </summary>
+        </member>
+        <member name="F:NModbus.Utility.DiscriminatedUnionOption.B">
+            <summary>
+                Option B.
+            </summary>
+        </member>
+        <member name="T:NModbus.Utility.DiscriminatedUnion`2">
+            <summary>
+                A data type that can store one of two possible strongly typed options.
+            </summary>
+            <typeparam name="TA">The type of option A.</typeparam>
+            <typeparam name="TB">The type of option B.</typeparam>
+        </member>
+        <member name="P:NModbus.Utility.DiscriminatedUnion`2.A">
+            <summary>
+                Gets the value of option A.
+            </summary>
+        </member>
+        <member name="P:NModbus.Utility.DiscriminatedUnion`2.B">
+            <summary>
+                Gets the value of option B.
+            </summary>
+        </member>
+        <member name="P:NModbus.Utility.DiscriminatedUnion`2.Option">
+            <summary>
+                Gets the discriminated value option set for this instance.
+            </summary>
+        </member>
+        <member name="M:NModbus.Utility.DiscriminatedUnion`2.CreateA(`0)">
+            <summary>
+                Factory method for creating DiscriminatedUnion with option A set.
+            </summary>
+        </member>
+        <member name="M:NModbus.Utility.DiscriminatedUnion`2.CreateB(`1)">
+            <summary>
+                Factory method for creating DiscriminatedUnion with option B set.
+            </summary>
+        </member>
+        <member name="M:NModbus.Utility.DiscriminatedUnion`2.ToString">
+            <summary>
+                Returns a <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </summary>
+            <returns>
+                A <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </returns>
+        </member>
+        <member name="T:NModbus.Utility.ModbusUtility">
+            <summary>
+                Modbus utility methods.
+            </summary>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.GetDouble(System.UInt16,System.UInt16,System.UInt16,System.UInt16)">
+            <summary>
+                Converts four UInt16 values into a IEEE 64 floating point format.
+            </summary>
+            <param name="b3">Highest-order ushort value.</param>
+            <param name="b2">Second-to-highest-order ushort value.</param>
+            <param name="b1">Second-to-lowest-order ushort value.</param>
+            <param name="b0">Lowest-order ushort value.</param>
+            <returns>IEEE 64 floating point value.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.GetSingle(System.UInt16,System.UInt16)">
+            <summary>
+                Converts two UInt16 values into a IEEE 32 floating point format.
+            </summary>
+            <param name="highOrderValue">High order ushort value.</param>
+            <param name="lowOrderValue">Low order ushort value.</param>
+            <returns>IEEE 32 floating point value.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.GetUInt32(System.UInt16,System.UInt16)">
+            <summary>
+                Converts two UInt16 values into a UInt32.
+            </summary>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.GetAsciiBytes(System.Byte[])">
+            <summary>
+                Converts an array of bytes to an ASCII byte array.
+            </summary>
+            <param name="numbers">The byte array.</param>
+            <returns>An array of ASCII byte values.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.GetAsciiBytes(System.UInt16[])">
+            <summary>
+                Converts an array of UInt16 to an ASCII byte array.
+            </summary>
+            <param name="numbers">The ushort array.</param>
+            <returns>An array of ASCII byte values.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.NetworkBytesToHostUInt16(System.Byte[])">
+            <summary>
+                Converts a network order byte array to an array of UInt16 values in host order.
+            </summary>
+            <param name="networkBytes">The network order byte array.</param>
+            <returns>The host order ushort array.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.HexToBytes(System.String)">
+            <summary>
+                Converts a hex string to a byte array.
+            </summary>
+            <param name="hex">The hex string.</param>
+            <returns>Array of bytes.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.CalculateLrc(System.Byte[])">
+            <summary>
+                Calculate Longitudinal Redundancy Check.
+            </summary>
+            <param name="data">The data used in LRC.</param>
+            <returns>LRC value.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.CalculateCrc(System.Byte[])">
+            <summary>
+                Calculate Cyclical Redundancy Check.
+            </summary>
+            <param name="data">The data used in CRC.</param>
+            <returns>CRC value.</returns>
+        </member>
+    </members>
+</doc>
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/net6.0/NModbus.dll b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/net6.0/NModbus.dll
new file mode 100644
index 0000000..5d50242
--- /dev/null
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/net6.0/NModbus.dll
Binary files differ
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/net6.0/NModbus.xml b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/net6.0/NModbus.xml
new file mode 100644
index 0000000..aaf3ed7
--- /dev/null
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/net6.0/NModbus.xml
@@ -0,0 +1,2046 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>NModbus</name>
+    </assembly>
+    <members>
+        <member name="T:NModbus.Data.DefaultPointSource`1">
+            <summary>
+            A simple implementation of the point source. All registers are 
+            </summary>
+            <typeparam name="TPoint"></typeparam>
+        </member>
+        <member name="T:NModbus.Data.DiscreteCollection">
+            <summary>
+                Collection of discrete values.
+            </summary>
+        </member>
+        <member name="F:NModbus.Data.DiscreteCollection.BitsPerByte">
+            <summary>
+                Number of bits per byte.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.DiscreteCollection.#ctor">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.DiscreteCollection" /> class.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.DiscreteCollection.#ctor(System.Boolean[])">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.DiscreteCollection" /> class.
+            </summary>
+            <param name="bits">Array for discrete collection.</param>
+        </member>
+        <member name="M:NModbus.Data.DiscreteCollection.#ctor(System.Byte[])">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.DiscreteCollection" /> class.
+            </summary>
+            <param name="bytes">Array for discrete collection.</param>
+        </member>
+        <member name="M:NModbus.Data.DiscreteCollection.#ctor(System.Collections.Generic.IList{System.Boolean})">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.DiscreteCollection" /> class.
+            </summary>
+            <param name="bits">List for discrete collection.</param>
+        </member>
+        <member name="M:NModbus.Data.DiscreteCollection.#ctor(System.Collections.Generic.List{System.Boolean})">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.DiscreteCollection" /> class.
+            </summary>
+            <param name="bits">List for discrete collection.</param>
+        </member>
+        <member name="P:NModbus.Data.DiscreteCollection.NetworkBytes">
+            <summary>
+                Gets the network bytes.
+            </summary>
+        </member>
+        <member name="P:NModbus.Data.DiscreteCollection.ByteCount">
+            <summary>
+                Gets the byte count.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.DiscreteCollection.ToString">
+            <summary>
+                Returns a <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </summary>
+            <returns>
+                A <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </returns>
+        </member>
+        <member name="P:NModbus.Data.FileRecordCollection.FileNumber">
+            <summary>
+            The Extended Memory file number
+            </summary>
+        </member>
+        <member name="P:NModbus.Data.FileRecordCollection.StartingAddress">
+            <summary>
+            The starting register address within the file.
+            </summary>
+        </member>
+        <member name="P:NModbus.Data.FileRecordCollection.DataBytes">
+            <summary>
+             The bytes written to the extended memory file.
+            </summary>
+        </member>
+        <member name="P:NModbus.Data.FileRecordCollection.ByteCount">
+            <summary>
+                Gets the byte count.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.FileRecordCollection.ToString">
+            <summary>
+                Returns a <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </summary>
+            <returns>
+                A <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </returns>
+        </member>
+        <member name="T:NModbus.Data.IModbusMessageDataCollection">
+            <summary>
+                Modbus message containing data.
+            </summary>
+        </member>
+        <member name="P:NModbus.Data.IModbusMessageDataCollection.NetworkBytes">
+            <summary>
+                Gets the network bytes.
+            </summary>
+        </member>
+        <member name="P:NModbus.Data.IModbusMessageDataCollection.ByteCount">
+            <summary>
+                Gets the byte count.
+            </summary>
+        </member>
+        <member name="T:NModbus.Data.PointSource`1">
+            <summary>
+            A simple implementation of the point source. Memory for all points is allocated the first time a point is accessed. 
+            This is useful for cases where many points are used.
+            </summary>
+            <typeparam name="T"></typeparam>
+        </member>
+        <member name="T:NModbus.Data.RegisterCollection">
+            <summary>
+                Collection of 16 bit registers.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.RegisterCollection.#ctor">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.RegisterCollection" /> class.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.RegisterCollection.#ctor(System.Byte[])">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.RegisterCollection" /> class.
+            </summary>
+            <param name="bytes">Array for register collection.</param>
+        </member>
+        <member name="M:NModbus.Data.RegisterCollection.#ctor(System.UInt16[])">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.RegisterCollection" /> class.
+            </summary>
+            <param name="registers">Array for register collection.</param>
+        </member>
+        <member name="M:NModbus.Data.RegisterCollection.#ctor(System.Collections.Generic.IList{System.UInt16})">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.RegisterCollection" /> class.
+            </summary>
+            <param name="registers">List for register collection.</param>
+        </member>
+        <member name="P:NModbus.Data.RegisterCollection.ByteCount">
+            <summary>
+                Gets the byte count.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.RegisterCollection.ToString">
+            <summary>
+                Returns a <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </summary>
+            <returns>
+                A <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </returns>
+        </member>
+        <member name="T:NModbus.Device.ConcurrentModbusMaster">
+            <summary>
+            Provides concurrency control across multiple Modbus readers/writers.
+            </summary>
+        </member>
+        <member name="T:NModbus.Device.ModbusDevice">
+            <summary>
+                Modbus device.
+            </summary>
+        </member>
+        <member name="P:NModbus.Device.ModbusDevice.Transport">
+            <summary>
+                Gets the Modbus Transport.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusDevice.Dispose">
+            <summary>
+                Releases unmanaged and - optionally - managed resources.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusDevice.Dispose(System.Boolean)">
+            <summary>
+                Releases unmanaged and - optionally - managed resources.
+            </summary>
+            <param name="disposing">
+                <c>true</c> to release both managed and unmanaged resources;
+                <c>false</c> to release only unmanaged resources.
+            </param>
+        </member>
+        <member name="T:NModbus.Device.ModbusFunctionServiceBase`1">
+            <summary>
+            Base class for 
+            </summary>
+            <typeparam name="TRequest">The type of request to handle.</typeparam>
+        </member>
+        <member name="T:NModbus.Device.ModbusIpMaster">
+            <summary>
+               Modbus IP master device.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.#ctor(NModbus.IModbusTransport)">
+            <summary>
+                Modbus IP master device.
+            </summary>
+            <param name="transport">Transport used by this master.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadCoils(System.UInt16,System.UInt16)">
+            <summary>
+               Reads from 1 to 2000 contiguous coils status.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of coils to read.</param>
+            <returns>Coils status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadCoilsAsync(System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads from 1 to 2000 contiguous coils status.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of coils to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadInputs(System.UInt16,System.UInt16)">
+            <summary>
+               Reads from 1 to 2000 contiguous discrete input status.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of discrete inputs to read.</param>
+            <returns>Discrete inputs status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadInputsAsync(System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads from 1 to 2000 contiguous discrete input status.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of discrete inputs to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadHoldingRegisters(System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of holding registers.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Holding registers status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadHoldingRegistersAsync(System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of holding registers.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadInputRegisters(System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of input registers.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Input registers status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadInputRegistersAsync(System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of input registers.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteSingleCoil(System.UInt16,System.Boolean)">
+            <summary>
+               Writes a single coil value.
+            </summary>
+            <param name="coilAddress">Address to write value to.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteSingleCoilAsync(System.UInt16,System.Boolean)">
+            <summary>
+               Asynchronously writes a single coil value.
+            </summary>
+            <param name="coilAddress">Address to write value to.</param>
+            <param name="value">Value to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteSingleRegister(System.UInt16,System.UInt16)">
+            <summary>
+                Write a single holding register.
+            </summary>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteSingleRegisterAsync(System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously writes a single holding register.
+            </summary>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteMultipleRegisters(System.UInt16,System.UInt16[])">
+            <summary>
+                Write a block of 1 to 123 contiguous registers.
+            </summary>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteMultipleRegistersAsync(System.UInt16,System.UInt16[])">
+            <summary>
+               Asynchronously writes a block of 1 to 123 contiguous registers.
+            </summary>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteMultipleCoils(System.UInt16,System.Boolean[])">
+            <summary>
+                Force each coil in a sequence of coils to a provided value.
+            </summary>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteMultipleCoilsAsync(System.UInt16,System.Boolean[])">
+            <summary>
+               Asynchronously writes a sequence of coils.
+            </summary>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+            <returns>A task that represents the asynchronous write operation</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadWriteMultipleRegisters(System.UInt16,System.UInt16,System.UInt16,System.UInt16[])">
+            <summary>
+                Performs a combination of one read operation and one write operation in a single MODBUS transaction.
+                The write operation is performed before the read.
+                Message uses default TCP slave id of 0.
+            </summary>
+            <param name="startReadAddress">Address to begin reading (Holding registers are addressed starting at 0).</param>
+            <param name="numberOfPointsToRead">Number of registers to read.</param>
+            <param name="startWriteAddress">Address to begin writing (Holding registers are addressed starting at 0).</param>
+            <param name="writeData">Register values to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadWriteMultipleRegistersAsync(System.UInt16,System.UInt16,System.UInt16,System.UInt16[])">
+            <summary>
+               Asynchronously performs a combination of one read operation and one write operation in a single Modbus transaction.
+               The write operation is performed before the read.
+            </summary>
+            <param name="startReadAddress">Address to begin reading (Holding registers are addressed starting at 0).</param>
+            <param name="numberOfPointsToRead">Number of registers to read.</param>
+            <param name="startWriteAddress">Address to begin writing (Holding registers are addressed starting at 0).</param>
+            <param name="writeData">Register values to write.</param>
+            <returns>A task that represents the asynchronous operation.</returns>
+        </member>
+        <member name="T:NModbus.Device.ModbusMaster">
+            <summary>
+                Modbus master device.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadCoils(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads from 1 to 2000 contiguous coils status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of coils to read.</param>
+            <returns>Coils status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadCoilsAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads from 1 to 2000 contiguous coils status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of coils to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadInputs(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads from 1 to 2000 contiguous discrete input status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of discrete inputs to read.</param>
+            <returns>Discrete inputs status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadInputsAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads from 1 to 2000 contiguous discrete input status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of discrete inputs to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of holding registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Holding registers status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadHoldingRegistersAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of holding registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadInputRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of input registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Input registers status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadInputRegistersAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of input registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteSingleCoil(System.Byte,System.UInt16,System.Boolean)">
+            <summary>
+               Writes a single coil value.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="coilAddress">Address to write value to.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteSingleCoilAsync(System.Byte,System.UInt16,System.Boolean)">
+            <summary>
+               Asynchronously writes a single coil value.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="coilAddress">Address to write value to.</param>
+            <param name="value">Value to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteSingleRegister(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Writes a single holding register.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteSingleRegisterAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously writes a single holding register.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteMultipleRegisters(System.Byte,System.UInt16,System.UInt16[])">
+            <summary>
+                Write a block of 1 to 123 contiguous 16 bit holding registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteMultipleRegistersAsync(System.Byte,System.UInt16,System.UInt16[])">
+            <summary>
+               Asynchronously writes a block of 1 to 123 contiguous registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteMultipleCoils(System.Byte,System.UInt16,System.Boolean[])">
+            <summary>
+               Writes a sequence of coils.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteMultipleCoilsAsync(System.Byte,System.UInt16,System.Boolean[])">
+            <summary>
+               Asynchronously writes a sequence of coils.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadWriteMultipleRegisters(System.Byte,System.UInt16,System.UInt16,System.UInt16,System.UInt16[])">
+            <summary>
+               Performs a combination of one read operation and one write operation in a single Modbus transaction.
+               The write operation is performed before the read.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startReadAddress">Address to begin reading (Holding registers are addressed starting at 0).</param>
+            <param name="numberOfPointsToRead">Number of registers to read.</param>
+            <param name="startWriteAddress">Address to begin writing (Holding registers are addressed starting at 0).</param>
+            <param name="writeData">Register values to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadWriteMultipleRegistersAsync(System.Byte,System.UInt16,System.UInt16,System.UInt16,System.UInt16[])">
+            <summary>
+               Asynchronously performs a combination of one read operation and one write operation in a single Modbus transaction.
+               The write operation is performed before the read.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startReadAddress">Address to begin reading (Holding registers are addressed starting at 0).</param>
+            <param name="numberOfPointsToRead">Number of registers to read.</param>
+            <param name="startWriteAddress">Address to begin writing (Holding registers are addressed starting at 0).</param>
+            <param name="writeData">Register values to write.</param>
+            <returns>A task that represents the asynchronous operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteFileRecord(System.Byte,System.UInt16,System.UInt16,System.Byte[])">
+            <summary>
+            Write a file record to the device.
+            </summary>
+            <param name="slaveAdress">Address of device to write values to</param>
+            <param name="fileNumber">The Extended Memory file number</param>
+            <param name="startingAddress">The starting register address within the file</param>
+            <param name="data">The data to be written</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ExecuteCustomMessage``1(NModbus.IModbusMessage)">
+            <summary>
+               Executes the custom message.
+            </summary>
+            <typeparam name="TResponse">The type of the response.</typeparam>
+            <param name="request">The request.</param>
+        </member>
+        <member name="T:NModbus.Device.ModbusMasterTcpConnection">
+            <summary>
+            Represents an incoming connection from a Modbus master. Contains the slave's logic to process the connection.
+            </summary>
+        </member>
+        <member name="E:NModbus.Device.ModbusMasterTcpConnection.ModbusMasterTcpConnectionClosed">
+            <summary>
+                Occurs when a Modbus master TCP connection is closed.
+            </summary>
+        </member>
+        <member name="T:NModbus.Device.ModbusSerialMaster">
+            <summary>
+                Modbus serial master device.
+            </summary>
+        </member>
+        <member name="P:NModbus.Device.ModbusSerialMaster.NModbus#IModbusSerialMaster#Transport">
+            <summary>
+                Gets the Modbus Transport.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusSerialMaster.ReturnQueryData(System.Byte,System.UInt16)">
+            <summary>
+                Serial Line only.
+                Diagnostic function which loops back the original data.
+                NModbus only supports looping back one ushort value, this is a limitation of the "Best Effort" implementation of
+                the RTU protocol.
+            </summary>
+            <param name="slaveAddress">Address of device to test.</param>
+            <param name="data">Data to return.</param>
+            <returns>Return true if slave device echoed data.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusSlaveNetwork.ListenAsync(System.Threading.CancellationToken)">
+            <summary>
+            Start slave listening for requests.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusSlaveNetwork.ApplyRequest(NModbus.IModbusMessage)">
+            <summary>
+            Apply the request.
+            </summary>
+            <param name="request"></param>
+        </member>
+        <member name="T:NModbus.Device.ModbusTcpSlaveNetwork">
+            <summary>
+                Modbus TCP slave device.
+            </summary>
+        </member>
+        <member name="P:NModbus.Device.ModbusTcpSlaveNetwork.Masters">
+            <summary>
+                Gets the Modbus TCP Masters connected to this Modbus TCP Slave.
+            </summary>
+        </member>
+        <member name="P:NModbus.Device.ModbusTcpSlaveNetwork.Server">
+            <summary>
+                Gets the server.
+            </summary>
+            <value>The server.</value>
+            <remarks>
+                This property is not thread safe, it should only be consumed within a lock.
+            </remarks>
+        </member>
+        <member name="M:NModbus.Device.ModbusTcpSlaveNetwork.ListenAsync(System.Threading.CancellationToken)">
+            <summary>
+                Start slave listening for requests.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusTcpSlaveNetwork.Dispose(System.Boolean)">
+            <summary>
+                Releases unmanaged and - optionally - managed resources
+            </summary>
+            <param name="disposing">
+                <c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only
+                unmanaged resources.
+            </param>
+            <remarks>Dispose is thread-safe.</remarks>
+        </member>
+        <member name="T:NModbus.Device.ModbusUdpSlaveNetwork">
+            <summary>
+                Modbus UDP slave device.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusUdpSlaveNetwork.ListenAsync(System.Threading.CancellationToken)">
+            <summary>
+                Start slave listening for requests.
+            </summary>
+        </member>
+        <member name="T:NModbus.Device.PointEventArgs">
+            <summary>
+            Modbus Slave request event args containing information on the message.
+            </summary>
+        </member>
+        <member name="M:NModbus.Extensions.CrcExtensions.DoesCrcMatch(System.Byte[])">
+            <summary>
+            Determines whether the crc stored in the message matches the calculated crc.
+            </summary>
+            <param name="message"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.CrcExtensions.GetCRC(System.Byte[])">
+            <summary>
+            Gets the CRC of the message
+            </summary>
+            <param name="message"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.DictionaryExtensions.GetValueOrDefault``2(System.Collections.Generic.IDictionary{``0,``1},``0)">
+            <summary>
+            Gets the specified value in the dictionary. If not found, returns default for TValue.
+            </summary>
+            <typeparam name="TKey"></typeparam>
+            <typeparam name="TValue"></typeparam>
+            <param name="dictionary"></param>
+            <param name="key"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.Extensions.Enron.EnronModbus">
+            <summary>
+                Utility extensions for the Enron Modbus dialect.
+            </summary>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.ReadInputRegisters32(NModbus.IModbusMaster,System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of input registers with 32 bit register size.
+            </summary>
+            <param name="master">The Modbus master.</param>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Input registers status.</returns>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.ReadHoldingRegisters32(NModbus.IModbusMaster,System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of holding registers.
+            </summary>
+            <param name="master">The Modbus master.</param>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Holding registers status.</returns>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.ReadInputRegisters32Async(NModbus.IModbusMaster,System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of input registers with 32 bit register size.
+            </summary>
+            <param name="master">The Modbus master.</param>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.ReadHoldingRegisters32Async(NModbus.IModbusMaster,System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of holding registers.
+            </summary>
+            <param name="master">The Modbus master.</param>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.WriteSingleRegister32(NModbus.IModbusMaster,System.Byte,System.UInt16,System.UInt32)">
+            <summary>
+                Write a single 16 bit holding register.
+            </summary>
+            <param name="master">The Modbus master.</param>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.WriteMultipleRegisters32(NModbus.IModbusMaster,System.Byte,System.UInt16,System.UInt32[])">
+            <summary>
+                Write a block of contiguous 32 bit holding registers.
+            </summary>
+            <param name="master">The Modbus master.</param>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.ConvertFrom32(System.UInt32[])">
+            <summary> Convert the 32 bit registers to two 16 bit values. </summary>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.ConvertTo32(System.UInt16[])">
+            <summary> Convert the double 16 bit registers to single 32 bit values. </summary>
+        </member>
+        <member name="T:NModbus.Extensions.Functions.Endian">
+            <summary>
+            Class containing functions to covert endian from network device to host this code is running on.
+            </summary>
+        </member>
+        <member name="M:NModbus.Extensions.Functions.Endian.BigEndian(System.Byte[])">
+            <summary>
+            Converts BigEndian source bytes to Endian format of system.
+            Source BE: 0x0A,0x0B,0x0C,0x0D. 
+            Target BE: 0x0A,0x0B,0x0C,0x0D.
+            Target LE: 0x0D,0x0C,0x0B,0x0A.
+            </summary>
+            <param name="sourceBytes">Byte array from device</param>
+            <returns>Bytes in Endian format for system</returns>
+        </member>
+        <member name="M:NModbus.Extensions.Functions.Endian.LittleEndian(System.Byte[])">
+            <summary>
+            Converts LittleEndian source bytes to Endian format of system. 
+            Source LE: 0x0D,0x0C,0x0B,0x0A. 
+            Target BE: 0x0A,0x0B,0x0C,0x0D.
+            Target LE: 0x0D,0x0C,0x0B,0x0A.
+            </summary>
+            <param name="sourceBytes">Byte array from device</param>
+            <returns>Bytes in Endian format for system</returns>
+        </member>
+        <member name="T:NModbus.Extensions.Functions.RegisterFunctions">
+            <summary>
+              This class provides some functions that can be used to read/write values of a set word size.
+            </summary>
+        </member>
+        <member name="T:NModbus.Extensions.ModbusMasterEnhanced">
+            <summary>
+            Utility Class to support Modbus 32/64bit devices. 
+            </summary>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.#ctor(NModbus.IModbusMaster,System.UInt32,System.Func{System.Byte[],System.Byte[]},System.Boolean)">
+            <summary>
+            Constructor with values to be used by all methods. 
+            Default is 32bit, LittleEndian, with wordswapping.
+            </summary>
+            <param name="master">The Modbus master</param>
+            <param name="wordSize">Wordsize used by device. 16/32/64 are valid.</param>
+            <param name="endian">The endian encoding of the device.</param>
+            <param name="wordSwapped">Should the ushort words mirrored then flattened to bytes.</param>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.ReadCharHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+            Reads registers and converts the result into a char array.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of chars to read.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.ReadUshortHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+            Reads registers and converts the result into a ushort array.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of ushorts to read.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.ReadShortHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+            Reads registers and converts the result into a short array.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of shots to read.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.ReadUintHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+            Reads registers and converts the result into a uint array.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of uints to read.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.ReadIntHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+            Reads registers and converts the result into a int array.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of ints to read.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.ReadFloatHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+            Reads registers and converts the result into a float array.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of floats to read.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.WriteCharHoldingRegisters(System.Byte,System.UInt16,System.Char[])">
+            <summary>
+                Write a char array to registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to start writting values at.</param>
+            <param name="data">Chars to write to device.</param>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.WriteUshortHoldingRegisters(System.Byte,System.UInt16,System.UInt16[])">
+            <summary>
+                Write a ushort array to registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to start writting values at.</param>
+            <param name="data">Ushorts to write to device.</param>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.WriteShortHoldingRegisters(System.Byte,System.UInt16,System.Int16[])">
+            <summary>
+                Write a short array to registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to start writting values at.</param>
+            <param name="data">Shorts to write to device.</param>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.WriteIntHoldingRegisters(System.Byte,System.UInt16,System.Int32[])">
+            <summary>
+                Write a int array to registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to start writting values at.</param>
+            <param name="data">Ints to write to device.</param>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.WriteUIntHoldingRegisters(System.Byte,System.UInt16,System.UInt32[])">
+            <summary>
+                Write a uint array to registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to start writting values at.</param>
+            <param name="data">Uints to write to device.</param>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.WriteFloatHoldingRegisters(System.Byte,System.UInt16,System.Single[])">
+            <summary>
+                Write a float array to registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to start writting values at.</param>
+            <param name="data">Floats to write to device.</param>
+        </member>
+        <member name="T:NModbus.FactoryExtensions">
+            <summary>
+            Extension methods for the IModbusFactory interface.
+            </summary>
+        </member>
+        <member name="M:NModbus.FactoryExtensions.CreateRtuMaster(NModbus.IModbusFactory,NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an RTU master.
+            </summary>
+            <param name="factory"></param>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.FactoryExtensions.CreateAsciiMaster(NModbus.IModbusFactory,NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an ASCII master.
+            </summary>
+            <param name="factory"></param>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.FactoryExtensions.CreateIpMaster(NModbus.IModbusFactory,NModbus.IO.IStreamResource)">
+            <summary>
+            Creates a TCP or UDP master.
+            </summary>
+            <param name="factory"></param>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.FactoryExtensions.CreateRtuSlaveNetwork(NModbus.IModbusFactory,NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an RTU slave network.
+            </summary>
+            <param name="factory"></param>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.FactoryExtensions.CreateAsciiSlaveNetwork(NModbus.IModbusFactory,NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an ASCII slave network.
+            </summary>
+            <param name="factory"></param>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.IModbusFactory">
+            <summary>
+            Container for modbus function services.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusFactory.GetFunctionService(System.Byte)">
+            <summary>
+            Get the service for a given function code.
+            </summary>
+            <param name="functionCode"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.GetAllFunctionServices">
+            <summary>
+            Gets all of the services.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateMaster(NModbus.IModbusSerialTransport)">
+            <summary>
+            Create an rtu master.
+            </summary>
+            <param name="transport"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateMaster(System.Net.Sockets.UdpClient)">
+            <summary>
+            Create a TCP master.
+            </summary>
+            <param name="client"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateMaster(System.Net.Sockets.TcpClient)">
+            <summary>
+            
+            </summary>
+            <param name="client"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateSlave(System.Byte,NModbus.ISlaveDataStore)">
+            <summary>
+            Creates a Modbus Slave.
+            </summary>
+            <param name="unitId">The address of this slave on the Modbus network.</param>
+            <param name="dataStore">Optionally specify a custom data store for the created slave.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateSlaveNetwork(NModbus.IModbusRtuTransport)">
+            <summary>
+            Creates a slave network based on the RTU transport.
+            </summary>
+            <param name="transport"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateSlaveNetwork(NModbus.IModbusAsciiTransport)">
+            <summary>
+            Creates an ascii slave network.
+            </summary>
+            <param name="transport">The ascii transport to base this on.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateSlaveNetwork(System.Net.Sockets.TcpListener)">
+            <summary>
+            Create a slave network based on TCP.
+            </summary>
+            <param name="tcpListener"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateSlaveNetwork(System.Net.Sockets.UdpClient)">
+            <summary>
+            Creates a UDP modbus slave network.
+            </summary>
+            <param name="client"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateRtuTransport(NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an RTU transpoort. 
+            </summary>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateAsciiTransport(NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an Ascii Transport.
+            </summary>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateIpTransport(NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an IP Transport
+            </summary>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.IModbusFunctionService">
+            <summary>
+            A Modbus slave message handler.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusFunctionService.FunctionCode">
+            <summary>
+            The function code that this handles
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusFunctionService.CreateRequest(System.Byte[])">
+            <summary>
+            Creates a message that wrapps the request frame.
+            </summary>
+            <param name="frame"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFunctionService.HandleSlaveRequest(NModbus.IModbusMessage,NModbus.ISlaveDataStore)">
+            <summary>
+            Handle a slave request.
+            </summary>
+            <param name="request"></param>
+            <param name="dataStore"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFunctionService.GetRtuRequestBytesToRead(System.Byte[])">
+            <summary>
+            Gets the number of bytes to read for a request
+            </summary>
+            <param name="frameStart"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFunctionService.GetRtuResponseBytesToRead(System.Byte[])">
+            <summary>
+            Gets the number of bytes to read for a response.
+            </summary>
+            <param name="frameStart"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.IModbusLogger">
+            <summary>
+            Simple logging target. Designed to be easily integrated into other logging frameworks.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusLogger.Log(NModbus.LoggingLevel,System.String)">
+            <summary>
+            Conditionally log a message
+            </summary>
+            <param name="level"></param>
+            <param name="message"></param>
+        </member>
+        <member name="M:NModbus.IModbusLogger.ShouldLog(NModbus.LoggingLevel)">
+            <summary>
+            True if this level should be logged, false otherwise.
+            </summary>
+            <param name="level"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.IModbusMaster">
+            <summary>
+                Modbus master device.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusMaster.Transport">
+            <summary>
+                Transport used by this master.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadCoils(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads from 1 to 2000 contiguous coils status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of coils to read.</param>
+            <returns>Coils status.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadCoilsAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads from 1 to 2000 contiguous coils status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of coils to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadInputs(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads from 1 to 2000 contiguous discrete input status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of discrete inputs to read.</param>
+            <returns>Discrete inputs status.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadInputsAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads from 1 to 2000 contiguous discrete input status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of discrete inputs to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of holding registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Holding registers status.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadHoldingRegistersAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of holding registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadInputRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of input registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Input registers status.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadInputRegistersAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of input registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteSingleCoil(System.Byte,System.UInt16,System.Boolean)">
+            <summary>
+               Writes a single coil value.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="coilAddress">Address to write value to.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteSingleCoilAsync(System.Byte,System.UInt16,System.Boolean)">
+            <summary>
+               Asynchronously writes a single coil value.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="coilAddress">Address to write value to.</param>
+            <param name="value">Value to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteSingleRegister(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Writes a single holding register.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteSingleRegisterAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously writes a single holding register.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteMultipleRegisters(System.Byte,System.UInt16,System.UInt16[])">
+            <summary>
+               Writes a block of 1 to 123 contiguous registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteMultipleRegistersAsync(System.Byte,System.UInt16,System.UInt16[])">
+            <summary>
+               Asynchronously writes a block of 1 to 123 contiguous registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteMultipleCoils(System.Byte,System.UInt16,System.Boolean[])">
+            <summary>
+               Writes a sequence of coils.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteMultipleCoilsAsync(System.Byte,System.UInt16,System.Boolean[])">
+            <summary>
+               Asynchronously writes a sequence of coils.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadWriteMultipleRegisters(System.Byte,System.UInt16,System.UInt16,System.UInt16,System.UInt16[])">
+            <summary>
+               Performs a combination of one read operation and one write operation in a single Modbus transaction.
+               The write operation is performed before the read.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startReadAddress">Address to begin reading (Holding registers are addressed starting at 0).</param>
+            <param name="numberOfPointsToRead">Number of registers to read.</param>
+            <param name="startWriteAddress">Address to begin writing (Holding registers are addressed starting at 0).</param>
+            <param name="writeData">Register values to write.</param>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadWriteMultipleRegistersAsync(System.Byte,System.UInt16,System.UInt16,System.UInt16,System.UInt16[])">
+            <summary>
+               Asynchronously performs a combination of one read operation and one write operation in a single Modbus transaction.
+               The write operation is performed before the read.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startReadAddress">Address to begin reading (Holding registers are addressed starting at 0).</param>
+            <param name="numberOfPointsToRead">Number of registers to read.</param>
+            <param name="startWriteAddress">Address to begin writing (Holding registers are addressed starting at 0).</param>
+            <param name="writeData">Register values to write.</param>
+            <returns>A task that represents the asynchronous operation</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteFileRecord(System.Byte,System.UInt16,System.UInt16,System.Byte[])">
+            <summary>
+            Write a file record to the device.
+            </summary>
+            <param name="slaveAdress">Address of device to write values to</param>
+            <param name="fileNumber">The Extended Memory file number</param>
+            <param name="startingAddress">The starting register address within the file</param>
+            <param name="data">The data to be written</param>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ExecuteCustomMessage``1(NModbus.IModbusMessage)">
+            <summary>
+               Executes the custom message.
+            </summary>
+            <typeparam name="TResponse">The type of the response.</typeparam>
+            <param name="request">The request.</param>
+        </member>
+        <member name="T:NModbus.IModbusMessage">
+            <summary>
+                A message built by the master (client) that initiates a Modbus transaction.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusMessage.FunctionCode">
+            <summary>
+                The function code tells the server what kind of action to perform.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusMessage.SlaveAddress">
+            <summary>
+                Address of the slave (server).
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusMessage.MessageFrame">
+            <summary>
+                Composition of the slave address and protocol data unit.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusMessage.ProtocolDataUnit">
+            <summary>
+                Composition of the function code and message data.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusMessage.TransactionId">
+            <summary>
+                A unique identifier assigned to a message when using the IP protocol.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusMessage.Initialize(System.Byte[])">
+            <summary>
+                Initializes a modbus message from the specified message frame.
+            </summary>
+            <param name="frame">Bytes of Modbus frame.</param>
+        </member>
+        <member name="T:NModbus.IModbusSerialMaster">
+            <summary>
+                Modbus Serial Master device.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusSerialMaster.Transport">
+            <summary>
+                Transport for used by this master.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusSerialMaster.ReturnQueryData(System.Byte,System.UInt16)">
+            <summary>
+                Serial Line only.
+                Diagnostic function which loops back the original data.
+                NModbus only supports looping back one ushort value, this is a
+                limitation of the "Best Effort" implementation of the RTU protocol.
+            </summary>
+            <param name="slaveAddress">Address of device to test.</param>
+            <param name="data">Data to return.</param>
+            <returns>Return true if slave device echoed data.</returns>
+        </member>
+        <member name="T:NModbus.IModbusSlave">
+            <summary>
+            A modbus slave.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusSlave.UnitId">
+            <summary>
+            Gets the unit id of this slave.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusSlave.DataStore">
+            <summary>
+            Gets the data store for this slave.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusSlave.ApplyRequest(NModbus.IModbusMessage)">
+            <summary>
+            Applies the request.
+            </summary>
+            <param name="request"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.IModbusSlaveNetwork">
+            <summary>
+            A network of slave devices on a single transport.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusSlaveNetwork.ListenAsync(System.Threading.CancellationToken)">
+            <summary>
+            Listen for incoming requests.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusSlaveNetwork.AddSlave(NModbus.IModbusSlave)">
+            <summary>
+            Add a slave to the network.
+            </summary>
+            <param name="slave"></param>
+        </member>
+        <member name="M:NModbus.IModbusSlaveNetwork.GetSlave(System.Byte)">
+            <summary>
+            Get a slave from the network.
+            </summary>
+            <param name="unitId">The slave address</param>
+            <returns>The specified slave, or null if one can't be found.</returns>
+        </member>
+        <member name="M:NModbus.IModbusSlaveNetwork.RemoveSlave(System.Byte)">
+            <summary>
+            Removes a slave from the network.
+            </summary>
+            <param name="unitId"></param>
+        </member>
+        <member name="T:NModbus.IModbusTcpSlaveNetwork">
+            <summary>
+                Modbus TCP slave device.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusTcpSlaveNetwork.Masters">
+            <summary>
+                Gets the Modbus TCP Masters connected to this Modbus TCP Slave.
+            </summary>
+        </member>
+        <member name="T:NModbus.IPointSource`1">
+            <summary>
+            Represents a memory map.
+            </summary>
+            <typeparam name="TPoint"></typeparam>
+        </member>
+        <member name="M:NModbus.IPointSource`1.ReadPoints(System.UInt16,System.UInt16)">
+            <summary>
+            Read a series of points.
+            </summary>
+            <param name="startAddress"></param>
+            <param name="numberOfPoints"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IPointSource`1.WritePoints(System.UInt16,`0[])">
+            <summary>
+            Write a series of points.
+            </summary>
+            <param name="startAddress"></param>
+            <param name="points"></param>
+        </member>
+        <member name="T:NModbus.ISlaveDataStore">
+            <summary>
+            Object simulation of a device memory map.
+            </summary>
+        </member>
+        <member name="P:NModbus.ISlaveDataStore.CoilDiscretes">
+            <summary>
+            Gets the descrete coils.
+            </summary>
+        </member>
+        <member name="P:NModbus.ISlaveDataStore.CoilInputs">
+            <summary>
+            Gets the discrete inputs.
+            </summary>
+        </member>
+        <member name="P:NModbus.ISlaveDataStore.HoldingRegisters">
+            <summary>
+            Gets the holding registers.
+            </summary>
+        </member>
+        <member name="P:NModbus.ISlaveDataStore.InputRegisters">
+            <summary>
+            Gets the input registers.
+            </summary>
+        </member>
+        <member name="T:NModbus.LoggingLevel">
+            <summary>
+            Following the guidelines from https://github.com/aspnet/Logging/wiki/Guidelines.
+            </summary>
+        </member>
+        <member name="F:NModbus.LoggingLevel.Trace">
+            <summary>
+            The most detailed log messages, may contain sensitive application data. These messages should be disabled by default and should never be enabled in a production environment.
+            </summary>
+        </member>
+        <member name="F:NModbus.LoggingLevel.Debug">
+            <summary>
+            Logs that are used for interactive investigation during development should use the Debug level. These logs should primarily contain information useful for debugging and have no long-term value. 
+            This is the default most verbose level of logging.
+            </summary>
+        </member>
+        <member name="F:NModbus.LoggingLevel.Information">
+            <summary>
+            Track the general flow of the application using logs at the Information level. These logs should have value in the long term.
+            </summary>
+        </member>
+        <member name="F:NModbus.LoggingLevel.Warning">
+            <summary>
+            Warnings should highlight an abnormal or unexpected event in the application flow. This event does not cause the application execution to stop, but can signify sub-optimal performance or a potential problem for the future. A common place to log a warning is from handled exceptions. 
+            </summary>
+        </member>
+        <member name="F:NModbus.LoggingLevel.Error">
+            <summary>
+            An error should be logged when the current flow of execution is stopped due to a failure. These should indicate a failure in the current activity, not an application-wide failure. These will mainly be unhandled exceptions and recoverable failures. 
+            </summary>
+        </member>
+        <member name="F:NModbus.LoggingLevel.Critical">
+            <summary>
+            A critical log should describe an unrecoverable application or system crash, or a catastrophic failure that requires immediate attention. 
+            </summary>
+        </member>
+        <member name="T:NModbus.InvalidModbusRequestException">
+            <summary>
+                An exception that provides the exception code that will be sent in response to an invalid Modbus request.
+            </summary>
+        </member>
+        <member name="M:NModbus.InvalidModbusRequestException.#ctor(System.Byte)">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.InvalidModbusRequestException" /> class with a specified Modbus exception code.
+            </summary>
+            <param name="exceptionCode">The Modbus exception code to provide to the slave.</param>
+        </member>
+        <member name="M:NModbus.InvalidModbusRequestException.#ctor(System.String,System.Byte)">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.InvalidModbusRequestException" /> class with a specified error message and Modbus exception code.
+            </summary>
+            <param name="message">The error message that explains the reason for the exception.</param>
+            <param name="exceptionCode">The Modbus exception code to provide to the slave.</param>
+        </member>
+        <member name="M:NModbus.InvalidModbusRequestException.#ctor(System.Byte,System.Exception)">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.InvalidModbusRequestException" /> class with a specified Modbus exception code and a reference to the inner exception that is the cause of this exception.
+            </summary>
+            <param name="exceptionCode">The Modbus exception code to provide to the slave.</param>
+            <param name="innerException">The exception that is the cause of the current exception. If the <paramref name="innerException" /> parameter is not a null reference, the current exception is raised in a catch block that handles the inner exception.</param>
+        </member>
+        <member name="M:NModbus.InvalidModbusRequestException.#ctor(System.String,System.Byte,System.Exception)">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.InvalidModbusRequestException" /> class with a specified Modbus exception code and a reference to the inner exception that is the cause of this exception.
+            </summary>
+            <param name="message">The error message that explains the reason for the exception.</param>
+            <param name="exceptionCode">The Modbus exception code to provide to the slave.</param>
+            <param name="innerException">The exception that is the cause of the current exception. If the <paramref name="innerException" /> parameter is not a null reference, the current exception is raised in a catch block that handles the inner exception.</param>
+        </member>
+        <member name="P:NModbus.InvalidModbusRequestException.ExceptionCode">
+            <summary>
+                Gets the Modbus exception code to provide to the slave.
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.IStreamResource">
+            <summary>
+                Represents a serial resource.
+                Implementor - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.IStreamResource.InfiniteTimeout">
+            <summary>
+                Indicates that no timeout should occur.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.IStreamResource.ReadTimeout">
+            <summary>
+                Gets or sets the number of milliseconds before a timeout occurs when a read operation does not finish.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.IStreamResource.WriteTimeout">
+            <summary>
+                Gets or sets the number of milliseconds before a timeout occurs when a write operation does not finish.
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.IStreamResource.DiscardInBuffer">
+            <summary>
+                Purges the receive buffer.
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.IStreamResource.Read(System.Byte[],System.Int32,System.Int32)">
+            <summary>
+                Reads a number of bytes from the input buffer and writes those bytes into a byte array at the specified offset.
+            </summary>
+            <param name="buffer">The byte array to write the input to.</param>
+            <param name="offset">The offset in the buffer array to begin writing.</param>
+            <param name="count">The number of bytes to read.</param>
+            <returns>The number of bytes read.</returns>
+        </member>
+        <member name="M:NModbus.IO.IStreamResource.Write(System.Byte[],System.Int32,System.Int32)">
+            <summary>
+                Writes a specified number of bytes to the port from an output buffer, starting at the specified offset.
+            </summary>
+            <param name="buffer">The byte array that contains the data to write to the port.</param>
+            <param name="offset">The offset in the buffer array to begin writing.</param>
+            <param name="count">The number of bytes to write.</param>
+        </member>
+        <member name="T:NModbus.IO.ModbusAsciiTransport">
+            <summary>
+                Refined Abstraction - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.ModbusIpTransport">
+            <summary>
+                Transport for Internet protocols.
+                Refined Abstraction - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusIpTransport.GetNewTransactionId">
+            <summary>
+                Create a new transaction ID.
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.ModbusRtuTransport">
+            <summary>
+                Refined Abstraction - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.ModbusSerialTransport">
+            <summary>
+                Transport for Serial protocols.
+                Refined Abstraction - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusSerialTransport.CheckFrame">
+            <summary>
+            Gets or sets a value indicating whether LRC/CRC frame checking is performed on messages.
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.ModbusTransport">
+            <summary>
+            Modbus transport.
+            Abstraction - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusTransport.#ctor(NModbus.IModbusFactory,NModbus.IModbusLogger)">
+            <summary>
+                This constructor is called by the NullTransport.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.Retries">
+            <summary>
+                Number of times to retry sending message after encountering a failure such as an IOException,
+                TimeoutException, or a corrupt message.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.RetryOnOldResponseThreshold">
+            <summary>
+            If non-zero, this will cause a second reply to be read if the first is behind the sequence number of the
+            request by less than this number.  For example, set this to 3, and if when sending request 5, response 3 is
+            read, we will attempt to re-read responses.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.SlaveBusyUsesRetryCount">
+            <summary>
+            If set, Slave Busy exception causes retry count to be used.  If false, Slave Busy will cause infinite retries
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.WaitToRetryMilliseconds">
+            <summary>
+                Gets or sets the number of milliseconds the tranport will wait before retrying a message after receiving
+                an ACKNOWLEGE or SLAVE DEVICE BUSY slave exception response.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.ReadTimeout">
+            <summary>
+                Gets or sets the number of milliseconds before a timeout occurs when a read operation does not finish.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.WriteTimeout">
+            <summary>
+                Gets or sets the number of milliseconds before a timeout occurs when a write operation does not finish.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.StreamResource">
+            <summary>
+                Gets the stream resource.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.Logger">
+            <summary>
+            Gets the logger for this instance.
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusTransport.Dispose">
+            <summary>
+                Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusTransport.ShouldRetryResponse(NModbus.IModbusMessage,NModbus.IModbusMessage)">
+            <summary>
+                Check whether we need to attempt to read another response before processing it (e.g. response was from previous request)
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusTransport.OnShouldRetryResponse(NModbus.IModbusMessage,NModbus.IModbusMessage)">
+            <summary>
+                Provide hook to check whether receiving a response should be retried
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusTransport.OnValidateResponse(NModbus.IModbusMessage,NModbus.IModbusMessage)">
+            <summary>
+                Provide hook to do transport level message validation.
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusTransport.Dispose(System.Boolean)">
+            <summary>
+                Releases unmanaged and - optionally - managed resources
+            </summary>
+            <param name="disposing">
+                <c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only
+                unmanaged resources.
+            </param>
+        </member>
+        <member name="T:NModbus.IO.SocketAdapter">
+            <summary>
+                Concrete Implementor - http://en.wikipedia.org/wiki/Bridge_Pattern
+                This implementation is for sockets that Convert Rs485 to Ethernet.
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.TcpClientAdapter">
+            <summary>
+                Concrete Implementor - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.UdpClientAdapter">
+            <summary>
+                Concrete Implementor - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="T:NModbus.Logging.DebugModbusLogger">
+            <summary>
+            Writes using Debug.WriteLine().
+            </summary>
+        </member>
+        <member name="T:NModbus.Logging.ModbusLogger">
+            <summary>
+            Base class for Modbus loggers.
+            </summary>
+        </member>
+        <member name="M:NModbus.Logging.ModbusLogger.ShouldLog(NModbus.LoggingLevel)">
+            <summary>
+            Returns true if the level should be loggged, false otherwise.
+            </summary>
+            <param name="level"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Logging.ModbusLogger.Log(NModbus.LoggingLevel,System.String)">
+            <summary>
+            Log the specified message at the specified level.
+            </summary>
+            <param name="level"></param>
+            <param name="message"></param>
+        </member>
+        <member name="M:NModbus.Logging.ModbusLogger.LogCore(NModbus.LoggingLevel,System.String)">
+            <summary>
+            Override this method to implement logging behavior. This function will only be called if ShouldLog(level) is true.
+            </summary>
+            <param name="level"></param>
+            <param name="message"></param>
+        </member>
+        <member name="T:NModbus.Logging.NullModbusLogger">
+            <summary>
+            Empty logger.
+            </summary>
+        </member>
+        <member name="F:NModbus.Logging.NullModbusLogger.Instance">
+            <summary>
+            Singleton.
+            </summary>
+        </member>
+        <member name="M:NModbus.Logging.NullModbusLogger.Log(NModbus.LoggingLevel,System.String)">
+            <summary>
+            This won't do anything.
+            </summary>
+            <param name="level"></param>
+            <param name="message"></param>
+        </member>
+        <member name="M:NModbus.Logging.NullModbusLogger.ShouldLog(NModbus.LoggingLevel)">
+            <summary>
+            Always returnsa false
+            </summary>
+            <param name="level"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.Message.AbstractModbusMessage">
+            <summary>
+                Abstract Modbus message.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.AbstractModbusMessage.#ctor">
+            <summary>
+                Abstract Modbus message.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.AbstractModbusMessage.#ctor(System.Byte,System.Byte)">
+            <summary>
+                Abstract Modbus message.
+            </summary>
+        </member>
+        <member name="T:NModbus.Message.IModbusRequest">
+            <summary>
+                Methods specific to a modbus request message.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.IModbusRequest.ValidateResponse(NModbus.IModbusMessage)">
+            <summary>
+                Validate the specified response against the current request.
+            </summary>
+        </member>
+        <member name="T:NModbus.Message.ModbusMessageFactory">
+            <summary>
+            Modbus message factory.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.ModbusMessageFactory.CreateModbusMessage``1(System.Byte[])">
+            <summary>
+            Create a Modbus message.
+            </summary>
+            <typeparam name="T">Modbus message type.</typeparam>
+            <param name="frame">Bytes of Modbus frame.</param>
+            <returns>New Modbus message based on type and frame bytes.</returns>
+        </member>
+        <member name="T:NModbus.Message.ModbusMessageImpl">
+            <summary>
+                Class holding all implementation shared between two or more message types.
+                Interfaces expose subsets of type specific implementations.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.SlaveExceptionResponse.ToString">
+            <summary>
+                Returns a <see cref="T:System.String"></see> that represents the current <see cref="T:System.Object"></see>.
+            </summary>
+            <returns>
+                A <see cref="T:System.String"></see> that represents the current <see cref="T:System.Object"></see>.
+            </returns>
+        </member>
+        <member name="T:NModbus.Message.WriteMultipleCoilsRequest">
+            <summary>
+                Write Multiple Coils request.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.WriteMultipleCoilsRequest.#ctor">
+            <summary>
+                Write Multiple Coils request.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.WriteMultipleCoilsRequest.#ctor(System.Byte,System.UInt16,NModbus.Data.DiscreteCollection)">
+            <summary>
+                Write Multiple Coils request.
+            </summary>
+        </member>
+        <member name="T:NModbus.Modbus">
+            <summary>
+                Defines constants related to the Modbus protocol.
+            </summary>
+        </member>
+        <member name="F:NModbus.ModbusFactory.BuiltInFunctionServices">
+            <summary>
+            The "built-in" message handlers.
+            </summary>
+        </member>
+        <member name="M:NModbus.ModbusFactory.#ctor">
+            <summary>
+            Create a factory which uses the built in standard slave function handlers.
+            </summary>
+        </member>
+        <member name="M:NModbus.ModbusFactory.#ctor(System.Collections.Generic.IEnumerable{NModbus.IModbusFunctionService},System.Boolean,NModbus.IModbusLogger)">
+            <summary>
+            Create a factory which optionally uses the built in function services and allows custom services to be added.
+            </summary>
+            <param name="functionServices">User provided function services.</param>
+            <param name="includeBuiltIn">If true, the built in function services are included. Otherwise, all function services will come from the functionService parameter.</param>
+            <param name="logger">Logger</param>
+        </member>
+        <member name="T:NModbus.ModbusFunctionCodes">
+            <summary>
+            Supported function codes
+            </summary>
+        </member>
+        <member name="F:NModbus.ModbusIPPorts.Insecure">
+            <summary>
+            502: mbap/TCP
+            </summary>
+        </member>
+        <member name="F:NModbus.ModbusIPPorts.Secure">
+            <summary>
+            802: mbap/TLS/TCP
+            </summary>
+        </member>
+        <member name="T:NModbus.SlaveException">
+            <summary>
+                Represents slave errors that occur during communication.
+            </summary>
+        </member>
+        <member name="M:NModbus.SlaveException.#ctor">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.SlaveException" /> class.
+            </summary>
+        </member>
+        <member name="M:NModbus.SlaveException.#ctor(System.String)">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.SlaveException" /> class.
+            </summary>
+            <param name="message">The message.</param>
+        </member>
+        <member name="M:NModbus.SlaveException.#ctor(System.String,System.Exception)">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.SlaveException" /> class.
+            </summary>
+            <param name="message">The message.</param>
+            <param name="innerException">The inner exception.</param>
+        </member>
+        <member name="P:NModbus.SlaveException.Message">
+            <summary>
+                Gets a message that describes the current exception.
+            </summary>
+            <value>
+                The error message that explains the reason for the exception, or an empty string.
+            </value>
+        </member>
+        <member name="P:NModbus.SlaveException.FunctionCode">
+            <summary>
+                Gets the response function code that caused the exception to occur, or 0.
+            </summary>
+            <value>The function code.</value>
+        </member>
+        <member name="P:NModbus.SlaveException.SlaveExceptionCode">
+            <summary>
+                Gets the slave exception code, or 0.
+            </summary>
+            <value>The slave exception code.</value>
+        </member>
+        <member name="P:NModbus.SlaveException.SlaveAddress">
+            <summary>
+                Gets the slave address, or 0.
+            </summary>
+            <value>The slave address.</value>
+        </member>
+        <member name="T:NModbus.SlaveExceptionCodes">
+            <summary>
+             Modbus slave exception codes
+            </summary>
+        </member>
+        <member name="F:NModbus.SlaveExceptionCodes.IllegalFunction">
+            <summary>
+            The function code received in the query is not an allowable action for the slave.  This may be because the function code is only applicable to newer devices, and was not implemented in the unit selected.  It could also indicate that the slave is in the wrong state to process a request of this type, for example because it is unconfigured and is being asked to return register values. If a Poll Program Complete command was issued, this code indicates that no program function preceded it.
+            </summary>
+        </member>
+        <member name="F:NModbus.SlaveExceptionCodes.IllegalDataAddress">
+            <summary>
+            The data address received in the query is not an allowable address for the slave. More specifically, the combination of reference number and transfer length is invalid. For a controller with 100 registers, a request with offset 96 and length 4 would succeed, a request with offset 96 and length 5 will generate exception 02.
+            </summary>
+        </member>
+        <member name="F:NModbus.SlaveExceptionCodes.IllegalDataValue">
+            <summary>
+            A value contained in the query data field is not an allowable value for the slave.  This indicates a fault in the structure of remainder of a complex request, such as that the implied length is incorrect. It specifically does NOT mean that a data item submitted for storage in a register has a value outside the expectation of the application program, since the MODBUS protocol is unaware of the significance of any particular value of any particular register.
+            </summary>
+        </member>
+        <member name="F:NModbus.SlaveExceptionCodes.SlaveDeviceFailure">
+            <summary>
+            An unrecoverable error occurred while the slave was attempting to perform the requested action.
+            </summary>
+        </member>
+        <member name="F:NModbus.SlaveExceptionCodes.Acknowledge">
+            <summary>
+            Specialized use in conjunction with programming commands.
+            
+            The slave has accepted the request and is processing it, but a long duration of time will be required to do so.T
+            his response is returned to prevent a timeout error from occurring in the master.The master can next issue a 
+            Poll Program Complete message to determine if processing is completed.
+            </summary>
+        </member>
+        <member name="F:NModbus.SlaveExceptionCodes.SlaveDeviceBusy">
+            <summary>
+            Specialized use in conjunction with programming commands.
+            The slave is engaged in processing a long-duration program command.The master should retransmit 
+            the message later when the slave is free.
+            </summary>
+        </member>
+        <member name="T:NModbus.Utility.DiscriminatedUnionOption">
+            <summary>
+                Possible options for DiscriminatedUnion type.
+            </summary>
+        </member>
+        <member name="F:NModbus.Utility.DiscriminatedUnionOption.A">
+            <summary>
+                Option A.
+            </summary>
+        </member>
+        <member name="F:NModbus.Utility.DiscriminatedUnionOption.B">
+            <summary>
+                Option B.
+            </summary>
+        </member>
+        <member name="T:NModbus.Utility.DiscriminatedUnion`2">
+            <summary>
+                A data type that can store one of two possible strongly typed options.
+            </summary>
+            <typeparam name="TA">The type of option A.</typeparam>
+            <typeparam name="TB">The type of option B.</typeparam>
+        </member>
+        <member name="P:NModbus.Utility.DiscriminatedUnion`2.A">
+            <summary>
+                Gets the value of option A.
+            </summary>
+        </member>
+        <member name="P:NModbus.Utility.DiscriminatedUnion`2.B">
+            <summary>
+                Gets the value of option B.
+            </summary>
+        </member>
+        <member name="P:NModbus.Utility.DiscriminatedUnion`2.Option">
+            <summary>
+                Gets the discriminated value option set for this instance.
+            </summary>
+        </member>
+        <member name="M:NModbus.Utility.DiscriminatedUnion`2.CreateA(`0)">
+            <summary>
+                Factory method for creating DiscriminatedUnion with option A set.
+            </summary>
+        </member>
+        <member name="M:NModbus.Utility.DiscriminatedUnion`2.CreateB(`1)">
+            <summary>
+                Factory method for creating DiscriminatedUnion with option B set.
+            </summary>
+        </member>
+        <member name="M:NModbus.Utility.DiscriminatedUnion`2.ToString">
+            <summary>
+                Returns a <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </summary>
+            <returns>
+                A <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </returns>
+        </member>
+        <member name="T:NModbus.Utility.ModbusUtility">
+            <summary>
+                Modbus utility methods.
+            </summary>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.GetDouble(System.UInt16,System.UInt16,System.UInt16,System.UInt16)">
+            <summary>
+                Converts four UInt16 values into a IEEE 64 floating point format.
+            </summary>
+            <param name="b3">Highest-order ushort value.</param>
+            <param name="b2">Second-to-highest-order ushort value.</param>
+            <param name="b1">Second-to-lowest-order ushort value.</param>
+            <param name="b0">Lowest-order ushort value.</param>
+            <returns>IEEE 64 floating point value.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.GetSingle(System.UInt16,System.UInt16)">
+            <summary>
+                Converts two UInt16 values into a IEEE 32 floating point format.
+            </summary>
+            <param name="highOrderValue">High order ushort value.</param>
+            <param name="lowOrderValue">Low order ushort value.</param>
+            <returns>IEEE 32 floating point value.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.GetUInt32(System.UInt16,System.UInt16)">
+            <summary>
+                Converts two UInt16 values into a UInt32.
+            </summary>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.GetAsciiBytes(System.Byte[])">
+            <summary>
+                Converts an array of bytes to an ASCII byte array.
+            </summary>
+            <param name="numbers">The byte array.</param>
+            <returns>An array of ASCII byte values.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.GetAsciiBytes(System.UInt16[])">
+            <summary>
+                Converts an array of UInt16 to an ASCII byte array.
+            </summary>
+            <param name="numbers">The ushort array.</param>
+            <returns>An array of ASCII byte values.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.NetworkBytesToHostUInt16(System.Byte[])">
+            <summary>
+                Converts a network order byte array to an array of UInt16 values in host order.
+            </summary>
+            <param name="networkBytes">The network order byte array.</param>
+            <returns>The host order ushort array.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.HexToBytes(System.String)">
+            <summary>
+                Converts a hex string to a byte array.
+            </summary>
+            <param name="hex">The hex string.</param>
+            <returns>Array of bytes.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.CalculateLrc(System.Byte[])">
+            <summary>
+                Calculate Longitudinal Redundancy Check.
+            </summary>
+            <param name="data">The data used in LRC.</param>
+            <returns>LRC value.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.CalculateCrc(System.Byte[])">
+            <summary>
+                Calculate Cyclical Redundancy Check.
+            </summary>
+            <param name="data">The data used in CRC.</param>
+            <returns>CRC value.</returns>
+        </member>
+    </members>
+</doc>
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/netstandard1.3/NModbus.dll b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/netstandard1.3/NModbus.dll
new file mode 100644
index 0000000..a7caf45
--- /dev/null
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/netstandard1.3/NModbus.dll
Binary files differ
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/netstandard1.3/NModbus.xml b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/netstandard1.3/NModbus.xml
new file mode 100644
index 0000000..aaf3ed7
--- /dev/null
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/netstandard1.3/NModbus.xml
@@ -0,0 +1,2046 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>NModbus</name>
+    </assembly>
+    <members>
+        <member name="T:NModbus.Data.DefaultPointSource`1">
+            <summary>
+            A simple implementation of the point source. All registers are 
+            </summary>
+            <typeparam name="TPoint"></typeparam>
+        </member>
+        <member name="T:NModbus.Data.DiscreteCollection">
+            <summary>
+                Collection of discrete values.
+            </summary>
+        </member>
+        <member name="F:NModbus.Data.DiscreteCollection.BitsPerByte">
+            <summary>
+                Number of bits per byte.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.DiscreteCollection.#ctor">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.DiscreteCollection" /> class.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.DiscreteCollection.#ctor(System.Boolean[])">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.DiscreteCollection" /> class.
+            </summary>
+            <param name="bits">Array for discrete collection.</param>
+        </member>
+        <member name="M:NModbus.Data.DiscreteCollection.#ctor(System.Byte[])">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.DiscreteCollection" /> class.
+            </summary>
+            <param name="bytes">Array for discrete collection.</param>
+        </member>
+        <member name="M:NModbus.Data.DiscreteCollection.#ctor(System.Collections.Generic.IList{System.Boolean})">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.DiscreteCollection" /> class.
+            </summary>
+            <param name="bits">List for discrete collection.</param>
+        </member>
+        <member name="M:NModbus.Data.DiscreteCollection.#ctor(System.Collections.Generic.List{System.Boolean})">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.DiscreteCollection" /> class.
+            </summary>
+            <param name="bits">List for discrete collection.</param>
+        </member>
+        <member name="P:NModbus.Data.DiscreteCollection.NetworkBytes">
+            <summary>
+                Gets the network bytes.
+            </summary>
+        </member>
+        <member name="P:NModbus.Data.DiscreteCollection.ByteCount">
+            <summary>
+                Gets the byte count.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.DiscreteCollection.ToString">
+            <summary>
+                Returns a <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </summary>
+            <returns>
+                A <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </returns>
+        </member>
+        <member name="P:NModbus.Data.FileRecordCollection.FileNumber">
+            <summary>
+            The Extended Memory file number
+            </summary>
+        </member>
+        <member name="P:NModbus.Data.FileRecordCollection.StartingAddress">
+            <summary>
+            The starting register address within the file.
+            </summary>
+        </member>
+        <member name="P:NModbus.Data.FileRecordCollection.DataBytes">
+            <summary>
+             The bytes written to the extended memory file.
+            </summary>
+        </member>
+        <member name="P:NModbus.Data.FileRecordCollection.ByteCount">
+            <summary>
+                Gets the byte count.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.FileRecordCollection.ToString">
+            <summary>
+                Returns a <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </summary>
+            <returns>
+                A <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </returns>
+        </member>
+        <member name="T:NModbus.Data.IModbusMessageDataCollection">
+            <summary>
+                Modbus message containing data.
+            </summary>
+        </member>
+        <member name="P:NModbus.Data.IModbusMessageDataCollection.NetworkBytes">
+            <summary>
+                Gets the network bytes.
+            </summary>
+        </member>
+        <member name="P:NModbus.Data.IModbusMessageDataCollection.ByteCount">
+            <summary>
+                Gets the byte count.
+            </summary>
+        </member>
+        <member name="T:NModbus.Data.PointSource`1">
+            <summary>
+            A simple implementation of the point source. Memory for all points is allocated the first time a point is accessed. 
+            This is useful for cases where many points are used.
+            </summary>
+            <typeparam name="T"></typeparam>
+        </member>
+        <member name="T:NModbus.Data.RegisterCollection">
+            <summary>
+                Collection of 16 bit registers.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.RegisterCollection.#ctor">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.RegisterCollection" /> class.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.RegisterCollection.#ctor(System.Byte[])">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.RegisterCollection" /> class.
+            </summary>
+            <param name="bytes">Array for register collection.</param>
+        </member>
+        <member name="M:NModbus.Data.RegisterCollection.#ctor(System.UInt16[])">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.RegisterCollection" /> class.
+            </summary>
+            <param name="registers">Array for register collection.</param>
+        </member>
+        <member name="M:NModbus.Data.RegisterCollection.#ctor(System.Collections.Generic.IList{System.UInt16})">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.RegisterCollection" /> class.
+            </summary>
+            <param name="registers">List for register collection.</param>
+        </member>
+        <member name="P:NModbus.Data.RegisterCollection.ByteCount">
+            <summary>
+                Gets the byte count.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.RegisterCollection.ToString">
+            <summary>
+                Returns a <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </summary>
+            <returns>
+                A <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </returns>
+        </member>
+        <member name="T:NModbus.Device.ConcurrentModbusMaster">
+            <summary>
+            Provides concurrency control across multiple Modbus readers/writers.
+            </summary>
+        </member>
+        <member name="T:NModbus.Device.ModbusDevice">
+            <summary>
+                Modbus device.
+            </summary>
+        </member>
+        <member name="P:NModbus.Device.ModbusDevice.Transport">
+            <summary>
+                Gets the Modbus Transport.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusDevice.Dispose">
+            <summary>
+                Releases unmanaged and - optionally - managed resources.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusDevice.Dispose(System.Boolean)">
+            <summary>
+                Releases unmanaged and - optionally - managed resources.
+            </summary>
+            <param name="disposing">
+                <c>true</c> to release both managed and unmanaged resources;
+                <c>false</c> to release only unmanaged resources.
+            </param>
+        </member>
+        <member name="T:NModbus.Device.ModbusFunctionServiceBase`1">
+            <summary>
+            Base class for 
+            </summary>
+            <typeparam name="TRequest">The type of request to handle.</typeparam>
+        </member>
+        <member name="T:NModbus.Device.ModbusIpMaster">
+            <summary>
+               Modbus IP master device.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.#ctor(NModbus.IModbusTransport)">
+            <summary>
+                Modbus IP master device.
+            </summary>
+            <param name="transport">Transport used by this master.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadCoils(System.UInt16,System.UInt16)">
+            <summary>
+               Reads from 1 to 2000 contiguous coils status.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of coils to read.</param>
+            <returns>Coils status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadCoilsAsync(System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads from 1 to 2000 contiguous coils status.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of coils to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadInputs(System.UInt16,System.UInt16)">
+            <summary>
+               Reads from 1 to 2000 contiguous discrete input status.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of discrete inputs to read.</param>
+            <returns>Discrete inputs status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadInputsAsync(System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads from 1 to 2000 contiguous discrete input status.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of discrete inputs to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadHoldingRegisters(System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of holding registers.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Holding registers status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadHoldingRegistersAsync(System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of holding registers.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadInputRegisters(System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of input registers.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Input registers status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadInputRegistersAsync(System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of input registers.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteSingleCoil(System.UInt16,System.Boolean)">
+            <summary>
+               Writes a single coil value.
+            </summary>
+            <param name="coilAddress">Address to write value to.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteSingleCoilAsync(System.UInt16,System.Boolean)">
+            <summary>
+               Asynchronously writes a single coil value.
+            </summary>
+            <param name="coilAddress">Address to write value to.</param>
+            <param name="value">Value to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteSingleRegister(System.UInt16,System.UInt16)">
+            <summary>
+                Write a single holding register.
+            </summary>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteSingleRegisterAsync(System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously writes a single holding register.
+            </summary>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteMultipleRegisters(System.UInt16,System.UInt16[])">
+            <summary>
+                Write a block of 1 to 123 contiguous registers.
+            </summary>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteMultipleRegistersAsync(System.UInt16,System.UInt16[])">
+            <summary>
+               Asynchronously writes a block of 1 to 123 contiguous registers.
+            </summary>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteMultipleCoils(System.UInt16,System.Boolean[])">
+            <summary>
+                Force each coil in a sequence of coils to a provided value.
+            </summary>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteMultipleCoilsAsync(System.UInt16,System.Boolean[])">
+            <summary>
+               Asynchronously writes a sequence of coils.
+            </summary>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+            <returns>A task that represents the asynchronous write operation</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadWriteMultipleRegisters(System.UInt16,System.UInt16,System.UInt16,System.UInt16[])">
+            <summary>
+                Performs a combination of one read operation and one write operation in a single MODBUS transaction.
+                The write operation is performed before the read.
+                Message uses default TCP slave id of 0.
+            </summary>
+            <param name="startReadAddress">Address to begin reading (Holding registers are addressed starting at 0).</param>
+            <param name="numberOfPointsToRead">Number of registers to read.</param>
+            <param name="startWriteAddress">Address to begin writing (Holding registers are addressed starting at 0).</param>
+            <param name="writeData">Register values to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadWriteMultipleRegistersAsync(System.UInt16,System.UInt16,System.UInt16,System.UInt16[])">
+            <summary>
+               Asynchronously performs a combination of one read operation and one write operation in a single Modbus transaction.
+               The write operation is performed before the read.
+            </summary>
+            <param name="startReadAddress">Address to begin reading (Holding registers are addressed starting at 0).</param>
+            <param name="numberOfPointsToRead">Number of registers to read.</param>
+            <param name="startWriteAddress">Address to begin writing (Holding registers are addressed starting at 0).</param>
+            <param name="writeData">Register values to write.</param>
+            <returns>A task that represents the asynchronous operation.</returns>
+        </member>
+        <member name="T:NModbus.Device.ModbusMaster">
+            <summary>
+                Modbus master device.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadCoils(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads from 1 to 2000 contiguous coils status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of coils to read.</param>
+            <returns>Coils status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadCoilsAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads from 1 to 2000 contiguous coils status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of coils to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadInputs(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads from 1 to 2000 contiguous discrete input status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of discrete inputs to read.</param>
+            <returns>Discrete inputs status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadInputsAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads from 1 to 2000 contiguous discrete input status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of discrete inputs to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of holding registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Holding registers status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadHoldingRegistersAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of holding registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadInputRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of input registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Input registers status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadInputRegistersAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of input registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteSingleCoil(System.Byte,System.UInt16,System.Boolean)">
+            <summary>
+               Writes a single coil value.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="coilAddress">Address to write value to.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteSingleCoilAsync(System.Byte,System.UInt16,System.Boolean)">
+            <summary>
+               Asynchronously writes a single coil value.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="coilAddress">Address to write value to.</param>
+            <param name="value">Value to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteSingleRegister(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Writes a single holding register.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteSingleRegisterAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously writes a single holding register.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteMultipleRegisters(System.Byte,System.UInt16,System.UInt16[])">
+            <summary>
+                Write a block of 1 to 123 contiguous 16 bit holding registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteMultipleRegistersAsync(System.Byte,System.UInt16,System.UInt16[])">
+            <summary>
+               Asynchronously writes a block of 1 to 123 contiguous registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteMultipleCoils(System.Byte,System.UInt16,System.Boolean[])">
+            <summary>
+               Writes a sequence of coils.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteMultipleCoilsAsync(System.Byte,System.UInt16,System.Boolean[])">
+            <summary>
+               Asynchronously writes a sequence of coils.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadWriteMultipleRegisters(System.Byte,System.UInt16,System.UInt16,System.UInt16,System.UInt16[])">
+            <summary>
+               Performs a combination of one read operation and one write operation in a single Modbus transaction.
+               The write operation is performed before the read.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startReadAddress">Address to begin reading (Holding registers are addressed starting at 0).</param>
+            <param name="numberOfPointsToRead">Number of registers to read.</param>
+            <param name="startWriteAddress">Address to begin writing (Holding registers are addressed starting at 0).</param>
+            <param name="writeData">Register values to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadWriteMultipleRegistersAsync(System.Byte,System.UInt16,System.UInt16,System.UInt16,System.UInt16[])">
+            <summary>
+               Asynchronously performs a combination of one read operation and one write operation in a single Modbus transaction.
+               The write operation is performed before the read.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startReadAddress">Address to begin reading (Holding registers are addressed starting at 0).</param>
+            <param name="numberOfPointsToRead">Number of registers to read.</param>
+            <param name="startWriteAddress">Address to begin writing (Holding registers are addressed starting at 0).</param>
+            <param name="writeData">Register values to write.</param>
+            <returns>A task that represents the asynchronous operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteFileRecord(System.Byte,System.UInt16,System.UInt16,System.Byte[])">
+            <summary>
+            Write a file record to the device.
+            </summary>
+            <param name="slaveAdress">Address of device to write values to</param>
+            <param name="fileNumber">The Extended Memory file number</param>
+            <param name="startingAddress">The starting register address within the file</param>
+            <param name="data">The data to be written</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ExecuteCustomMessage``1(NModbus.IModbusMessage)">
+            <summary>
+               Executes the custom message.
+            </summary>
+            <typeparam name="TResponse">The type of the response.</typeparam>
+            <param name="request">The request.</param>
+        </member>
+        <member name="T:NModbus.Device.ModbusMasterTcpConnection">
+            <summary>
+            Represents an incoming connection from a Modbus master. Contains the slave's logic to process the connection.
+            </summary>
+        </member>
+        <member name="E:NModbus.Device.ModbusMasterTcpConnection.ModbusMasterTcpConnectionClosed">
+            <summary>
+                Occurs when a Modbus master TCP connection is closed.
+            </summary>
+        </member>
+        <member name="T:NModbus.Device.ModbusSerialMaster">
+            <summary>
+                Modbus serial master device.
+            </summary>
+        </member>
+        <member name="P:NModbus.Device.ModbusSerialMaster.NModbus#IModbusSerialMaster#Transport">
+            <summary>
+                Gets the Modbus Transport.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusSerialMaster.ReturnQueryData(System.Byte,System.UInt16)">
+            <summary>
+                Serial Line only.
+                Diagnostic function which loops back the original data.
+                NModbus only supports looping back one ushort value, this is a limitation of the "Best Effort" implementation of
+                the RTU protocol.
+            </summary>
+            <param name="slaveAddress">Address of device to test.</param>
+            <param name="data">Data to return.</param>
+            <returns>Return true if slave device echoed data.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusSlaveNetwork.ListenAsync(System.Threading.CancellationToken)">
+            <summary>
+            Start slave listening for requests.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusSlaveNetwork.ApplyRequest(NModbus.IModbusMessage)">
+            <summary>
+            Apply the request.
+            </summary>
+            <param name="request"></param>
+        </member>
+        <member name="T:NModbus.Device.ModbusTcpSlaveNetwork">
+            <summary>
+                Modbus TCP slave device.
+            </summary>
+        </member>
+        <member name="P:NModbus.Device.ModbusTcpSlaveNetwork.Masters">
+            <summary>
+                Gets the Modbus TCP Masters connected to this Modbus TCP Slave.
+            </summary>
+        </member>
+        <member name="P:NModbus.Device.ModbusTcpSlaveNetwork.Server">
+            <summary>
+                Gets the server.
+            </summary>
+            <value>The server.</value>
+            <remarks>
+                This property is not thread safe, it should only be consumed within a lock.
+            </remarks>
+        </member>
+        <member name="M:NModbus.Device.ModbusTcpSlaveNetwork.ListenAsync(System.Threading.CancellationToken)">
+            <summary>
+                Start slave listening for requests.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusTcpSlaveNetwork.Dispose(System.Boolean)">
+            <summary>
+                Releases unmanaged and - optionally - managed resources
+            </summary>
+            <param name="disposing">
+                <c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only
+                unmanaged resources.
+            </param>
+            <remarks>Dispose is thread-safe.</remarks>
+        </member>
+        <member name="T:NModbus.Device.ModbusUdpSlaveNetwork">
+            <summary>
+                Modbus UDP slave device.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusUdpSlaveNetwork.ListenAsync(System.Threading.CancellationToken)">
+            <summary>
+                Start slave listening for requests.
+            </summary>
+        </member>
+        <member name="T:NModbus.Device.PointEventArgs">
+            <summary>
+            Modbus Slave request event args containing information on the message.
+            </summary>
+        </member>
+        <member name="M:NModbus.Extensions.CrcExtensions.DoesCrcMatch(System.Byte[])">
+            <summary>
+            Determines whether the crc stored in the message matches the calculated crc.
+            </summary>
+            <param name="message"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.CrcExtensions.GetCRC(System.Byte[])">
+            <summary>
+            Gets the CRC of the message
+            </summary>
+            <param name="message"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.DictionaryExtensions.GetValueOrDefault``2(System.Collections.Generic.IDictionary{``0,``1},``0)">
+            <summary>
+            Gets the specified value in the dictionary. If not found, returns default for TValue.
+            </summary>
+            <typeparam name="TKey"></typeparam>
+            <typeparam name="TValue"></typeparam>
+            <param name="dictionary"></param>
+            <param name="key"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.Extensions.Enron.EnronModbus">
+            <summary>
+                Utility extensions for the Enron Modbus dialect.
+            </summary>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.ReadInputRegisters32(NModbus.IModbusMaster,System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of input registers with 32 bit register size.
+            </summary>
+            <param name="master">The Modbus master.</param>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Input registers status.</returns>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.ReadHoldingRegisters32(NModbus.IModbusMaster,System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of holding registers.
+            </summary>
+            <param name="master">The Modbus master.</param>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Holding registers status.</returns>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.ReadInputRegisters32Async(NModbus.IModbusMaster,System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of input registers with 32 bit register size.
+            </summary>
+            <param name="master">The Modbus master.</param>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.ReadHoldingRegisters32Async(NModbus.IModbusMaster,System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of holding registers.
+            </summary>
+            <param name="master">The Modbus master.</param>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.WriteSingleRegister32(NModbus.IModbusMaster,System.Byte,System.UInt16,System.UInt32)">
+            <summary>
+                Write a single 16 bit holding register.
+            </summary>
+            <param name="master">The Modbus master.</param>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.WriteMultipleRegisters32(NModbus.IModbusMaster,System.Byte,System.UInt16,System.UInt32[])">
+            <summary>
+                Write a block of contiguous 32 bit holding registers.
+            </summary>
+            <param name="master">The Modbus master.</param>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.ConvertFrom32(System.UInt32[])">
+            <summary> Convert the 32 bit registers to two 16 bit values. </summary>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.ConvertTo32(System.UInt16[])">
+            <summary> Convert the double 16 bit registers to single 32 bit values. </summary>
+        </member>
+        <member name="T:NModbus.Extensions.Functions.Endian">
+            <summary>
+            Class containing functions to covert endian from network device to host this code is running on.
+            </summary>
+        </member>
+        <member name="M:NModbus.Extensions.Functions.Endian.BigEndian(System.Byte[])">
+            <summary>
+            Converts BigEndian source bytes to Endian format of system.
+            Source BE: 0x0A,0x0B,0x0C,0x0D. 
+            Target BE: 0x0A,0x0B,0x0C,0x0D.
+            Target LE: 0x0D,0x0C,0x0B,0x0A.
+            </summary>
+            <param name="sourceBytes">Byte array from device</param>
+            <returns>Bytes in Endian format for system</returns>
+        </member>
+        <member name="M:NModbus.Extensions.Functions.Endian.LittleEndian(System.Byte[])">
+            <summary>
+            Converts LittleEndian source bytes to Endian format of system. 
+            Source LE: 0x0D,0x0C,0x0B,0x0A. 
+            Target BE: 0x0A,0x0B,0x0C,0x0D.
+            Target LE: 0x0D,0x0C,0x0B,0x0A.
+            </summary>
+            <param name="sourceBytes">Byte array from device</param>
+            <returns>Bytes in Endian format for system</returns>
+        </member>
+        <member name="T:NModbus.Extensions.Functions.RegisterFunctions">
+            <summary>
+              This class provides some functions that can be used to read/write values of a set word size.
+            </summary>
+        </member>
+        <member name="T:NModbus.Extensions.ModbusMasterEnhanced">
+            <summary>
+            Utility Class to support Modbus 32/64bit devices. 
+            </summary>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.#ctor(NModbus.IModbusMaster,System.UInt32,System.Func{System.Byte[],System.Byte[]},System.Boolean)">
+            <summary>
+            Constructor with values to be used by all methods. 
+            Default is 32bit, LittleEndian, with wordswapping.
+            </summary>
+            <param name="master">The Modbus master</param>
+            <param name="wordSize">Wordsize used by device. 16/32/64 are valid.</param>
+            <param name="endian">The endian encoding of the device.</param>
+            <param name="wordSwapped">Should the ushort words mirrored then flattened to bytes.</param>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.ReadCharHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+            Reads registers and converts the result into a char array.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of chars to read.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.ReadUshortHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+            Reads registers and converts the result into a ushort array.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of ushorts to read.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.ReadShortHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+            Reads registers and converts the result into a short array.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of shots to read.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.ReadUintHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+            Reads registers and converts the result into a uint array.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of uints to read.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.ReadIntHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+            Reads registers and converts the result into a int array.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of ints to read.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.ReadFloatHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+            Reads registers and converts the result into a float array.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of floats to read.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.WriteCharHoldingRegisters(System.Byte,System.UInt16,System.Char[])">
+            <summary>
+                Write a char array to registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to start writting values at.</param>
+            <param name="data">Chars to write to device.</param>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.WriteUshortHoldingRegisters(System.Byte,System.UInt16,System.UInt16[])">
+            <summary>
+                Write a ushort array to registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to start writting values at.</param>
+            <param name="data">Ushorts to write to device.</param>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.WriteShortHoldingRegisters(System.Byte,System.UInt16,System.Int16[])">
+            <summary>
+                Write a short array to registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to start writting values at.</param>
+            <param name="data">Shorts to write to device.</param>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.WriteIntHoldingRegisters(System.Byte,System.UInt16,System.Int32[])">
+            <summary>
+                Write a int array to registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to start writting values at.</param>
+            <param name="data">Ints to write to device.</param>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.WriteUIntHoldingRegisters(System.Byte,System.UInt16,System.UInt32[])">
+            <summary>
+                Write a uint array to registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to start writting values at.</param>
+            <param name="data">Uints to write to device.</param>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.WriteFloatHoldingRegisters(System.Byte,System.UInt16,System.Single[])">
+            <summary>
+                Write a float array to registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to start writting values at.</param>
+            <param name="data">Floats to write to device.</param>
+        </member>
+        <member name="T:NModbus.FactoryExtensions">
+            <summary>
+            Extension methods for the IModbusFactory interface.
+            </summary>
+        </member>
+        <member name="M:NModbus.FactoryExtensions.CreateRtuMaster(NModbus.IModbusFactory,NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an RTU master.
+            </summary>
+            <param name="factory"></param>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.FactoryExtensions.CreateAsciiMaster(NModbus.IModbusFactory,NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an ASCII master.
+            </summary>
+            <param name="factory"></param>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.FactoryExtensions.CreateIpMaster(NModbus.IModbusFactory,NModbus.IO.IStreamResource)">
+            <summary>
+            Creates a TCP or UDP master.
+            </summary>
+            <param name="factory"></param>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.FactoryExtensions.CreateRtuSlaveNetwork(NModbus.IModbusFactory,NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an RTU slave network.
+            </summary>
+            <param name="factory"></param>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.FactoryExtensions.CreateAsciiSlaveNetwork(NModbus.IModbusFactory,NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an ASCII slave network.
+            </summary>
+            <param name="factory"></param>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.IModbusFactory">
+            <summary>
+            Container for modbus function services.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusFactory.GetFunctionService(System.Byte)">
+            <summary>
+            Get the service for a given function code.
+            </summary>
+            <param name="functionCode"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.GetAllFunctionServices">
+            <summary>
+            Gets all of the services.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateMaster(NModbus.IModbusSerialTransport)">
+            <summary>
+            Create an rtu master.
+            </summary>
+            <param name="transport"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateMaster(System.Net.Sockets.UdpClient)">
+            <summary>
+            Create a TCP master.
+            </summary>
+            <param name="client"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateMaster(System.Net.Sockets.TcpClient)">
+            <summary>
+            
+            </summary>
+            <param name="client"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateSlave(System.Byte,NModbus.ISlaveDataStore)">
+            <summary>
+            Creates a Modbus Slave.
+            </summary>
+            <param name="unitId">The address of this slave on the Modbus network.</param>
+            <param name="dataStore">Optionally specify a custom data store for the created slave.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateSlaveNetwork(NModbus.IModbusRtuTransport)">
+            <summary>
+            Creates a slave network based on the RTU transport.
+            </summary>
+            <param name="transport"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateSlaveNetwork(NModbus.IModbusAsciiTransport)">
+            <summary>
+            Creates an ascii slave network.
+            </summary>
+            <param name="transport">The ascii transport to base this on.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateSlaveNetwork(System.Net.Sockets.TcpListener)">
+            <summary>
+            Create a slave network based on TCP.
+            </summary>
+            <param name="tcpListener"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateSlaveNetwork(System.Net.Sockets.UdpClient)">
+            <summary>
+            Creates a UDP modbus slave network.
+            </summary>
+            <param name="client"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateRtuTransport(NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an RTU transpoort. 
+            </summary>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateAsciiTransport(NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an Ascii Transport.
+            </summary>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateIpTransport(NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an IP Transport
+            </summary>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.IModbusFunctionService">
+            <summary>
+            A Modbus slave message handler.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusFunctionService.FunctionCode">
+            <summary>
+            The function code that this handles
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusFunctionService.CreateRequest(System.Byte[])">
+            <summary>
+            Creates a message that wrapps the request frame.
+            </summary>
+            <param name="frame"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFunctionService.HandleSlaveRequest(NModbus.IModbusMessage,NModbus.ISlaveDataStore)">
+            <summary>
+            Handle a slave request.
+            </summary>
+            <param name="request"></param>
+            <param name="dataStore"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFunctionService.GetRtuRequestBytesToRead(System.Byte[])">
+            <summary>
+            Gets the number of bytes to read for a request
+            </summary>
+            <param name="frameStart"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFunctionService.GetRtuResponseBytesToRead(System.Byte[])">
+            <summary>
+            Gets the number of bytes to read for a response.
+            </summary>
+            <param name="frameStart"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.IModbusLogger">
+            <summary>
+            Simple logging target. Designed to be easily integrated into other logging frameworks.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusLogger.Log(NModbus.LoggingLevel,System.String)">
+            <summary>
+            Conditionally log a message
+            </summary>
+            <param name="level"></param>
+            <param name="message"></param>
+        </member>
+        <member name="M:NModbus.IModbusLogger.ShouldLog(NModbus.LoggingLevel)">
+            <summary>
+            True if this level should be logged, false otherwise.
+            </summary>
+            <param name="level"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.IModbusMaster">
+            <summary>
+                Modbus master device.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusMaster.Transport">
+            <summary>
+                Transport used by this master.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadCoils(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads from 1 to 2000 contiguous coils status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of coils to read.</param>
+            <returns>Coils status.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadCoilsAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads from 1 to 2000 contiguous coils status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of coils to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadInputs(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads from 1 to 2000 contiguous discrete input status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of discrete inputs to read.</param>
+            <returns>Discrete inputs status.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadInputsAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads from 1 to 2000 contiguous discrete input status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of discrete inputs to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of holding registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Holding registers status.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadHoldingRegistersAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of holding registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadInputRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of input registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Input registers status.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadInputRegistersAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of input registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteSingleCoil(System.Byte,System.UInt16,System.Boolean)">
+            <summary>
+               Writes a single coil value.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="coilAddress">Address to write value to.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteSingleCoilAsync(System.Byte,System.UInt16,System.Boolean)">
+            <summary>
+               Asynchronously writes a single coil value.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="coilAddress">Address to write value to.</param>
+            <param name="value">Value to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteSingleRegister(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Writes a single holding register.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteSingleRegisterAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously writes a single holding register.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteMultipleRegisters(System.Byte,System.UInt16,System.UInt16[])">
+            <summary>
+               Writes a block of 1 to 123 contiguous registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteMultipleRegistersAsync(System.Byte,System.UInt16,System.UInt16[])">
+            <summary>
+               Asynchronously writes a block of 1 to 123 contiguous registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteMultipleCoils(System.Byte,System.UInt16,System.Boolean[])">
+            <summary>
+               Writes a sequence of coils.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteMultipleCoilsAsync(System.Byte,System.UInt16,System.Boolean[])">
+            <summary>
+               Asynchronously writes a sequence of coils.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadWriteMultipleRegisters(System.Byte,System.UInt16,System.UInt16,System.UInt16,System.UInt16[])">
+            <summary>
+               Performs a combination of one read operation and one write operation in a single Modbus transaction.
+               The write operation is performed before the read.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startReadAddress">Address to begin reading (Holding registers are addressed starting at 0).</param>
+            <param name="numberOfPointsToRead">Number of registers to read.</param>
+            <param name="startWriteAddress">Address to begin writing (Holding registers are addressed starting at 0).</param>
+            <param name="writeData">Register values to write.</param>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadWriteMultipleRegistersAsync(System.Byte,System.UInt16,System.UInt16,System.UInt16,System.UInt16[])">
+            <summary>
+               Asynchronously performs a combination of one read operation and one write operation in a single Modbus transaction.
+               The write operation is performed before the read.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startReadAddress">Address to begin reading (Holding registers are addressed starting at 0).</param>
+            <param name="numberOfPointsToRead">Number of registers to read.</param>
+            <param name="startWriteAddress">Address to begin writing (Holding registers are addressed starting at 0).</param>
+            <param name="writeData">Register values to write.</param>
+            <returns>A task that represents the asynchronous operation</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteFileRecord(System.Byte,System.UInt16,System.UInt16,System.Byte[])">
+            <summary>
+            Write a file record to the device.
+            </summary>
+            <param name="slaveAdress">Address of device to write values to</param>
+            <param name="fileNumber">The Extended Memory file number</param>
+            <param name="startingAddress">The starting register address within the file</param>
+            <param name="data">The data to be written</param>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ExecuteCustomMessage``1(NModbus.IModbusMessage)">
+            <summary>
+               Executes the custom message.
+            </summary>
+            <typeparam name="TResponse">The type of the response.</typeparam>
+            <param name="request">The request.</param>
+        </member>
+        <member name="T:NModbus.IModbusMessage">
+            <summary>
+                A message built by the master (client) that initiates a Modbus transaction.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusMessage.FunctionCode">
+            <summary>
+                The function code tells the server what kind of action to perform.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusMessage.SlaveAddress">
+            <summary>
+                Address of the slave (server).
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusMessage.MessageFrame">
+            <summary>
+                Composition of the slave address and protocol data unit.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusMessage.ProtocolDataUnit">
+            <summary>
+                Composition of the function code and message data.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusMessage.TransactionId">
+            <summary>
+                A unique identifier assigned to a message when using the IP protocol.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusMessage.Initialize(System.Byte[])">
+            <summary>
+                Initializes a modbus message from the specified message frame.
+            </summary>
+            <param name="frame">Bytes of Modbus frame.</param>
+        </member>
+        <member name="T:NModbus.IModbusSerialMaster">
+            <summary>
+                Modbus Serial Master device.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusSerialMaster.Transport">
+            <summary>
+                Transport for used by this master.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusSerialMaster.ReturnQueryData(System.Byte,System.UInt16)">
+            <summary>
+                Serial Line only.
+                Diagnostic function which loops back the original data.
+                NModbus only supports looping back one ushort value, this is a
+                limitation of the "Best Effort" implementation of the RTU protocol.
+            </summary>
+            <param name="slaveAddress">Address of device to test.</param>
+            <param name="data">Data to return.</param>
+            <returns>Return true if slave device echoed data.</returns>
+        </member>
+        <member name="T:NModbus.IModbusSlave">
+            <summary>
+            A modbus slave.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusSlave.UnitId">
+            <summary>
+            Gets the unit id of this slave.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusSlave.DataStore">
+            <summary>
+            Gets the data store for this slave.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusSlave.ApplyRequest(NModbus.IModbusMessage)">
+            <summary>
+            Applies the request.
+            </summary>
+            <param name="request"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.IModbusSlaveNetwork">
+            <summary>
+            A network of slave devices on a single transport.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusSlaveNetwork.ListenAsync(System.Threading.CancellationToken)">
+            <summary>
+            Listen for incoming requests.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusSlaveNetwork.AddSlave(NModbus.IModbusSlave)">
+            <summary>
+            Add a slave to the network.
+            </summary>
+            <param name="slave"></param>
+        </member>
+        <member name="M:NModbus.IModbusSlaveNetwork.GetSlave(System.Byte)">
+            <summary>
+            Get a slave from the network.
+            </summary>
+            <param name="unitId">The slave address</param>
+            <returns>The specified slave, or null if one can't be found.</returns>
+        </member>
+        <member name="M:NModbus.IModbusSlaveNetwork.RemoveSlave(System.Byte)">
+            <summary>
+            Removes a slave from the network.
+            </summary>
+            <param name="unitId"></param>
+        </member>
+        <member name="T:NModbus.IModbusTcpSlaveNetwork">
+            <summary>
+                Modbus TCP slave device.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusTcpSlaveNetwork.Masters">
+            <summary>
+                Gets the Modbus TCP Masters connected to this Modbus TCP Slave.
+            </summary>
+        </member>
+        <member name="T:NModbus.IPointSource`1">
+            <summary>
+            Represents a memory map.
+            </summary>
+            <typeparam name="TPoint"></typeparam>
+        </member>
+        <member name="M:NModbus.IPointSource`1.ReadPoints(System.UInt16,System.UInt16)">
+            <summary>
+            Read a series of points.
+            </summary>
+            <param name="startAddress"></param>
+            <param name="numberOfPoints"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IPointSource`1.WritePoints(System.UInt16,`0[])">
+            <summary>
+            Write a series of points.
+            </summary>
+            <param name="startAddress"></param>
+            <param name="points"></param>
+        </member>
+        <member name="T:NModbus.ISlaveDataStore">
+            <summary>
+            Object simulation of a device memory map.
+            </summary>
+        </member>
+        <member name="P:NModbus.ISlaveDataStore.CoilDiscretes">
+            <summary>
+            Gets the descrete coils.
+            </summary>
+        </member>
+        <member name="P:NModbus.ISlaveDataStore.CoilInputs">
+            <summary>
+            Gets the discrete inputs.
+            </summary>
+        </member>
+        <member name="P:NModbus.ISlaveDataStore.HoldingRegisters">
+            <summary>
+            Gets the holding registers.
+            </summary>
+        </member>
+        <member name="P:NModbus.ISlaveDataStore.InputRegisters">
+            <summary>
+            Gets the input registers.
+            </summary>
+        </member>
+        <member name="T:NModbus.LoggingLevel">
+            <summary>
+            Following the guidelines from https://github.com/aspnet/Logging/wiki/Guidelines.
+            </summary>
+        </member>
+        <member name="F:NModbus.LoggingLevel.Trace">
+            <summary>
+            The most detailed log messages, may contain sensitive application data. These messages should be disabled by default and should never be enabled in a production environment.
+            </summary>
+        </member>
+        <member name="F:NModbus.LoggingLevel.Debug">
+            <summary>
+            Logs that are used for interactive investigation during development should use the Debug level. These logs should primarily contain information useful for debugging and have no long-term value. 
+            This is the default most verbose level of logging.
+            </summary>
+        </member>
+        <member name="F:NModbus.LoggingLevel.Information">
+            <summary>
+            Track the general flow of the application using logs at the Information level. These logs should have value in the long term.
+            </summary>
+        </member>
+        <member name="F:NModbus.LoggingLevel.Warning">
+            <summary>
+            Warnings should highlight an abnormal or unexpected event in the application flow. This event does not cause the application execution to stop, but can signify sub-optimal performance or a potential problem for the future. A common place to log a warning is from handled exceptions. 
+            </summary>
+        </member>
+        <member name="F:NModbus.LoggingLevel.Error">
+            <summary>
+            An error should be logged when the current flow of execution is stopped due to a failure. These should indicate a failure in the current activity, not an application-wide failure. These will mainly be unhandled exceptions and recoverable failures. 
+            </summary>
+        </member>
+        <member name="F:NModbus.LoggingLevel.Critical">
+            <summary>
+            A critical log should describe an unrecoverable application or system crash, or a catastrophic failure that requires immediate attention. 
+            </summary>
+        </member>
+        <member name="T:NModbus.InvalidModbusRequestException">
+            <summary>
+                An exception that provides the exception code that will be sent in response to an invalid Modbus request.
+            </summary>
+        </member>
+        <member name="M:NModbus.InvalidModbusRequestException.#ctor(System.Byte)">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.InvalidModbusRequestException" /> class with a specified Modbus exception code.
+            </summary>
+            <param name="exceptionCode">The Modbus exception code to provide to the slave.</param>
+        </member>
+        <member name="M:NModbus.InvalidModbusRequestException.#ctor(System.String,System.Byte)">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.InvalidModbusRequestException" /> class with a specified error message and Modbus exception code.
+            </summary>
+            <param name="message">The error message that explains the reason for the exception.</param>
+            <param name="exceptionCode">The Modbus exception code to provide to the slave.</param>
+        </member>
+        <member name="M:NModbus.InvalidModbusRequestException.#ctor(System.Byte,System.Exception)">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.InvalidModbusRequestException" /> class with a specified Modbus exception code and a reference to the inner exception that is the cause of this exception.
+            </summary>
+            <param name="exceptionCode">The Modbus exception code to provide to the slave.</param>
+            <param name="innerException">The exception that is the cause of the current exception. If the <paramref name="innerException" /> parameter is not a null reference, the current exception is raised in a catch block that handles the inner exception.</param>
+        </member>
+        <member name="M:NModbus.InvalidModbusRequestException.#ctor(System.String,System.Byte,System.Exception)">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.InvalidModbusRequestException" /> class with a specified Modbus exception code and a reference to the inner exception that is the cause of this exception.
+            </summary>
+            <param name="message">The error message that explains the reason for the exception.</param>
+            <param name="exceptionCode">The Modbus exception code to provide to the slave.</param>
+            <param name="innerException">The exception that is the cause of the current exception. If the <paramref name="innerException" /> parameter is not a null reference, the current exception is raised in a catch block that handles the inner exception.</param>
+        </member>
+        <member name="P:NModbus.InvalidModbusRequestException.ExceptionCode">
+            <summary>
+                Gets the Modbus exception code to provide to the slave.
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.IStreamResource">
+            <summary>
+                Represents a serial resource.
+                Implementor - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.IStreamResource.InfiniteTimeout">
+            <summary>
+                Indicates that no timeout should occur.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.IStreamResource.ReadTimeout">
+            <summary>
+                Gets or sets the number of milliseconds before a timeout occurs when a read operation does not finish.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.IStreamResource.WriteTimeout">
+            <summary>
+                Gets or sets the number of milliseconds before a timeout occurs when a write operation does not finish.
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.IStreamResource.DiscardInBuffer">
+            <summary>
+                Purges the receive buffer.
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.IStreamResource.Read(System.Byte[],System.Int32,System.Int32)">
+            <summary>
+                Reads a number of bytes from the input buffer and writes those bytes into a byte array at the specified offset.
+            </summary>
+            <param name="buffer">The byte array to write the input to.</param>
+            <param name="offset">The offset in the buffer array to begin writing.</param>
+            <param name="count">The number of bytes to read.</param>
+            <returns>The number of bytes read.</returns>
+        </member>
+        <member name="M:NModbus.IO.IStreamResource.Write(System.Byte[],System.Int32,System.Int32)">
+            <summary>
+                Writes a specified number of bytes to the port from an output buffer, starting at the specified offset.
+            </summary>
+            <param name="buffer">The byte array that contains the data to write to the port.</param>
+            <param name="offset">The offset in the buffer array to begin writing.</param>
+            <param name="count">The number of bytes to write.</param>
+        </member>
+        <member name="T:NModbus.IO.ModbusAsciiTransport">
+            <summary>
+                Refined Abstraction - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.ModbusIpTransport">
+            <summary>
+                Transport for Internet protocols.
+                Refined Abstraction - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusIpTransport.GetNewTransactionId">
+            <summary>
+                Create a new transaction ID.
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.ModbusRtuTransport">
+            <summary>
+                Refined Abstraction - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.ModbusSerialTransport">
+            <summary>
+                Transport for Serial protocols.
+                Refined Abstraction - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusSerialTransport.CheckFrame">
+            <summary>
+            Gets or sets a value indicating whether LRC/CRC frame checking is performed on messages.
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.ModbusTransport">
+            <summary>
+            Modbus transport.
+            Abstraction - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusTransport.#ctor(NModbus.IModbusFactory,NModbus.IModbusLogger)">
+            <summary>
+                This constructor is called by the NullTransport.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.Retries">
+            <summary>
+                Number of times to retry sending message after encountering a failure such as an IOException,
+                TimeoutException, or a corrupt message.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.RetryOnOldResponseThreshold">
+            <summary>
+            If non-zero, this will cause a second reply to be read if the first is behind the sequence number of the
+            request by less than this number.  For example, set this to 3, and if when sending request 5, response 3 is
+            read, we will attempt to re-read responses.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.SlaveBusyUsesRetryCount">
+            <summary>
+            If set, Slave Busy exception causes retry count to be used.  If false, Slave Busy will cause infinite retries
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.WaitToRetryMilliseconds">
+            <summary>
+                Gets or sets the number of milliseconds the tranport will wait before retrying a message after receiving
+                an ACKNOWLEGE or SLAVE DEVICE BUSY slave exception response.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.ReadTimeout">
+            <summary>
+                Gets or sets the number of milliseconds before a timeout occurs when a read operation does not finish.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.WriteTimeout">
+            <summary>
+                Gets or sets the number of milliseconds before a timeout occurs when a write operation does not finish.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.StreamResource">
+            <summary>
+                Gets the stream resource.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.Logger">
+            <summary>
+            Gets the logger for this instance.
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusTransport.Dispose">
+            <summary>
+                Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusTransport.ShouldRetryResponse(NModbus.IModbusMessage,NModbus.IModbusMessage)">
+            <summary>
+                Check whether we need to attempt to read another response before processing it (e.g. response was from previous request)
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusTransport.OnShouldRetryResponse(NModbus.IModbusMessage,NModbus.IModbusMessage)">
+            <summary>
+                Provide hook to check whether receiving a response should be retried
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusTransport.OnValidateResponse(NModbus.IModbusMessage,NModbus.IModbusMessage)">
+            <summary>
+                Provide hook to do transport level message validation.
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusTransport.Dispose(System.Boolean)">
+            <summary>
+                Releases unmanaged and - optionally - managed resources
+            </summary>
+            <param name="disposing">
+                <c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only
+                unmanaged resources.
+            </param>
+        </member>
+        <member name="T:NModbus.IO.SocketAdapter">
+            <summary>
+                Concrete Implementor - http://en.wikipedia.org/wiki/Bridge_Pattern
+                This implementation is for sockets that Convert Rs485 to Ethernet.
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.TcpClientAdapter">
+            <summary>
+                Concrete Implementor - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.UdpClientAdapter">
+            <summary>
+                Concrete Implementor - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="T:NModbus.Logging.DebugModbusLogger">
+            <summary>
+            Writes using Debug.WriteLine().
+            </summary>
+        </member>
+        <member name="T:NModbus.Logging.ModbusLogger">
+            <summary>
+            Base class for Modbus loggers.
+            </summary>
+        </member>
+        <member name="M:NModbus.Logging.ModbusLogger.ShouldLog(NModbus.LoggingLevel)">
+            <summary>
+            Returns true if the level should be loggged, false otherwise.
+            </summary>
+            <param name="level"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Logging.ModbusLogger.Log(NModbus.LoggingLevel,System.String)">
+            <summary>
+            Log the specified message at the specified level.
+            </summary>
+            <param name="level"></param>
+            <param name="message"></param>
+        </member>
+        <member name="M:NModbus.Logging.ModbusLogger.LogCore(NModbus.LoggingLevel,System.String)">
+            <summary>
+            Override this method to implement logging behavior. This function will only be called if ShouldLog(level) is true.
+            </summary>
+            <param name="level"></param>
+            <param name="message"></param>
+        </member>
+        <member name="T:NModbus.Logging.NullModbusLogger">
+            <summary>
+            Empty logger.
+            </summary>
+        </member>
+        <member name="F:NModbus.Logging.NullModbusLogger.Instance">
+            <summary>
+            Singleton.
+            </summary>
+        </member>
+        <member name="M:NModbus.Logging.NullModbusLogger.Log(NModbus.LoggingLevel,System.String)">
+            <summary>
+            This won't do anything.
+            </summary>
+            <param name="level"></param>
+            <param name="message"></param>
+        </member>
+        <member name="M:NModbus.Logging.NullModbusLogger.ShouldLog(NModbus.LoggingLevel)">
+            <summary>
+            Always returnsa false
+            </summary>
+            <param name="level"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.Message.AbstractModbusMessage">
+            <summary>
+                Abstract Modbus message.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.AbstractModbusMessage.#ctor">
+            <summary>
+                Abstract Modbus message.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.AbstractModbusMessage.#ctor(System.Byte,System.Byte)">
+            <summary>
+                Abstract Modbus message.
+            </summary>
+        </member>
+        <member name="T:NModbus.Message.IModbusRequest">
+            <summary>
+                Methods specific to a modbus request message.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.IModbusRequest.ValidateResponse(NModbus.IModbusMessage)">
+            <summary>
+                Validate the specified response against the current request.
+            </summary>
+        </member>
+        <member name="T:NModbus.Message.ModbusMessageFactory">
+            <summary>
+            Modbus message factory.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.ModbusMessageFactory.CreateModbusMessage``1(System.Byte[])">
+            <summary>
+            Create a Modbus message.
+            </summary>
+            <typeparam name="T">Modbus message type.</typeparam>
+            <param name="frame">Bytes of Modbus frame.</param>
+            <returns>New Modbus message based on type and frame bytes.</returns>
+        </member>
+        <member name="T:NModbus.Message.ModbusMessageImpl">
+            <summary>
+                Class holding all implementation shared between two or more message types.
+                Interfaces expose subsets of type specific implementations.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.SlaveExceptionResponse.ToString">
+            <summary>
+                Returns a <see cref="T:System.String"></see> that represents the current <see cref="T:System.Object"></see>.
+            </summary>
+            <returns>
+                A <see cref="T:System.String"></see> that represents the current <see cref="T:System.Object"></see>.
+            </returns>
+        </member>
+        <member name="T:NModbus.Message.WriteMultipleCoilsRequest">
+            <summary>
+                Write Multiple Coils request.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.WriteMultipleCoilsRequest.#ctor">
+            <summary>
+                Write Multiple Coils request.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.WriteMultipleCoilsRequest.#ctor(System.Byte,System.UInt16,NModbus.Data.DiscreteCollection)">
+            <summary>
+                Write Multiple Coils request.
+            </summary>
+        </member>
+        <member name="T:NModbus.Modbus">
+            <summary>
+                Defines constants related to the Modbus protocol.
+            </summary>
+        </member>
+        <member name="F:NModbus.ModbusFactory.BuiltInFunctionServices">
+            <summary>
+            The "built-in" message handlers.
+            </summary>
+        </member>
+        <member name="M:NModbus.ModbusFactory.#ctor">
+            <summary>
+            Create a factory which uses the built in standard slave function handlers.
+            </summary>
+        </member>
+        <member name="M:NModbus.ModbusFactory.#ctor(System.Collections.Generic.IEnumerable{NModbus.IModbusFunctionService},System.Boolean,NModbus.IModbusLogger)">
+            <summary>
+            Create a factory which optionally uses the built in function services and allows custom services to be added.
+            </summary>
+            <param name="functionServices">User provided function services.</param>
+            <param name="includeBuiltIn">If true, the built in function services are included. Otherwise, all function services will come from the functionService parameter.</param>
+            <param name="logger">Logger</param>
+        </member>
+        <member name="T:NModbus.ModbusFunctionCodes">
+            <summary>
+            Supported function codes
+            </summary>
+        </member>
+        <member name="F:NModbus.ModbusIPPorts.Insecure">
+            <summary>
+            502: mbap/TCP
+            </summary>
+        </member>
+        <member name="F:NModbus.ModbusIPPorts.Secure">
+            <summary>
+            802: mbap/TLS/TCP
+            </summary>
+        </member>
+        <member name="T:NModbus.SlaveException">
+            <summary>
+                Represents slave errors that occur during communication.
+            </summary>
+        </member>
+        <member name="M:NModbus.SlaveException.#ctor">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.SlaveException" /> class.
+            </summary>
+        </member>
+        <member name="M:NModbus.SlaveException.#ctor(System.String)">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.SlaveException" /> class.
+            </summary>
+            <param name="message">The message.</param>
+        </member>
+        <member name="M:NModbus.SlaveException.#ctor(System.String,System.Exception)">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.SlaveException" /> class.
+            </summary>
+            <param name="message">The message.</param>
+            <param name="innerException">The inner exception.</param>
+        </member>
+        <member name="P:NModbus.SlaveException.Message">
+            <summary>
+                Gets a message that describes the current exception.
+            </summary>
+            <value>
+                The error message that explains the reason for the exception, or an empty string.
+            </value>
+        </member>
+        <member name="P:NModbus.SlaveException.FunctionCode">
+            <summary>
+                Gets the response function code that caused the exception to occur, or 0.
+            </summary>
+            <value>The function code.</value>
+        </member>
+        <member name="P:NModbus.SlaveException.SlaveExceptionCode">
+            <summary>
+                Gets the slave exception code, or 0.
+            </summary>
+            <value>The slave exception code.</value>
+        </member>
+        <member name="P:NModbus.SlaveException.SlaveAddress">
+            <summary>
+                Gets the slave address, or 0.
+            </summary>
+            <value>The slave address.</value>
+        </member>
+        <member name="T:NModbus.SlaveExceptionCodes">
+            <summary>
+             Modbus slave exception codes
+            </summary>
+        </member>
+        <member name="F:NModbus.SlaveExceptionCodes.IllegalFunction">
+            <summary>
+            The function code received in the query is not an allowable action for the slave.  This may be because the function code is only applicable to newer devices, and was not implemented in the unit selected.  It could also indicate that the slave is in the wrong state to process a request of this type, for example because it is unconfigured and is being asked to return register values. If a Poll Program Complete command was issued, this code indicates that no program function preceded it.
+            </summary>
+        </member>
+        <member name="F:NModbus.SlaveExceptionCodes.IllegalDataAddress">
+            <summary>
+            The data address received in the query is not an allowable address for the slave. More specifically, the combination of reference number and transfer length is invalid. For a controller with 100 registers, a request with offset 96 and length 4 would succeed, a request with offset 96 and length 5 will generate exception 02.
+            </summary>
+        </member>
+        <member name="F:NModbus.SlaveExceptionCodes.IllegalDataValue">
+            <summary>
+            A value contained in the query data field is not an allowable value for the slave.  This indicates a fault in the structure of remainder of a complex request, such as that the implied length is incorrect. It specifically does NOT mean that a data item submitted for storage in a register has a value outside the expectation of the application program, since the MODBUS protocol is unaware of the significance of any particular value of any particular register.
+            </summary>
+        </member>
+        <member name="F:NModbus.SlaveExceptionCodes.SlaveDeviceFailure">
+            <summary>
+            An unrecoverable error occurred while the slave was attempting to perform the requested action.
+            </summary>
+        </member>
+        <member name="F:NModbus.SlaveExceptionCodes.Acknowledge">
+            <summary>
+            Specialized use in conjunction with programming commands.
+            
+            The slave has accepted the request and is processing it, but a long duration of time will be required to do so.T
+            his response is returned to prevent a timeout error from occurring in the master.The master can next issue a 
+            Poll Program Complete message to determine if processing is completed.
+            </summary>
+        </member>
+        <member name="F:NModbus.SlaveExceptionCodes.SlaveDeviceBusy">
+            <summary>
+            Specialized use in conjunction with programming commands.
+            The slave is engaged in processing a long-duration program command.The master should retransmit 
+            the message later when the slave is free.
+            </summary>
+        </member>
+        <member name="T:NModbus.Utility.DiscriminatedUnionOption">
+            <summary>
+                Possible options for DiscriminatedUnion type.
+            </summary>
+        </member>
+        <member name="F:NModbus.Utility.DiscriminatedUnionOption.A">
+            <summary>
+                Option A.
+            </summary>
+        </member>
+        <member name="F:NModbus.Utility.DiscriminatedUnionOption.B">
+            <summary>
+                Option B.
+            </summary>
+        </member>
+        <member name="T:NModbus.Utility.DiscriminatedUnion`2">
+            <summary>
+                A data type that can store one of two possible strongly typed options.
+            </summary>
+            <typeparam name="TA">The type of option A.</typeparam>
+            <typeparam name="TB">The type of option B.</typeparam>
+        </member>
+        <member name="P:NModbus.Utility.DiscriminatedUnion`2.A">
+            <summary>
+                Gets the value of option A.
+            </summary>
+        </member>
+        <member name="P:NModbus.Utility.DiscriminatedUnion`2.B">
+            <summary>
+                Gets the value of option B.
+            </summary>
+        </member>
+        <member name="P:NModbus.Utility.DiscriminatedUnion`2.Option">
+            <summary>
+                Gets the discriminated value option set for this instance.
+            </summary>
+        </member>
+        <member name="M:NModbus.Utility.DiscriminatedUnion`2.CreateA(`0)">
+            <summary>
+                Factory method for creating DiscriminatedUnion with option A set.
+            </summary>
+        </member>
+        <member name="M:NModbus.Utility.DiscriminatedUnion`2.CreateB(`1)">
+            <summary>
+                Factory method for creating DiscriminatedUnion with option B set.
+            </summary>
+        </member>
+        <member name="M:NModbus.Utility.DiscriminatedUnion`2.ToString">
+            <summary>
+                Returns a <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </summary>
+            <returns>
+                A <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </returns>
+        </member>
+        <member name="T:NModbus.Utility.ModbusUtility">
+            <summary>
+                Modbus utility methods.
+            </summary>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.GetDouble(System.UInt16,System.UInt16,System.UInt16,System.UInt16)">
+            <summary>
+                Converts four UInt16 values into a IEEE 64 floating point format.
+            </summary>
+            <param name="b3">Highest-order ushort value.</param>
+            <param name="b2">Second-to-highest-order ushort value.</param>
+            <param name="b1">Second-to-lowest-order ushort value.</param>
+            <param name="b0">Lowest-order ushort value.</param>
+            <returns>IEEE 64 floating point value.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.GetSingle(System.UInt16,System.UInt16)">
+            <summary>
+                Converts two UInt16 values into a IEEE 32 floating point format.
+            </summary>
+            <param name="highOrderValue">High order ushort value.</param>
+            <param name="lowOrderValue">Low order ushort value.</param>
+            <returns>IEEE 32 floating point value.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.GetUInt32(System.UInt16,System.UInt16)">
+            <summary>
+                Converts two UInt16 values into a UInt32.
+            </summary>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.GetAsciiBytes(System.Byte[])">
+            <summary>
+                Converts an array of bytes to an ASCII byte array.
+            </summary>
+            <param name="numbers">The byte array.</param>
+            <returns>An array of ASCII byte values.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.GetAsciiBytes(System.UInt16[])">
+            <summary>
+                Converts an array of UInt16 to an ASCII byte array.
+            </summary>
+            <param name="numbers">The ushort array.</param>
+            <returns>An array of ASCII byte values.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.NetworkBytesToHostUInt16(System.Byte[])">
+            <summary>
+                Converts a network order byte array to an array of UInt16 values in host order.
+            </summary>
+            <param name="networkBytes">The network order byte array.</param>
+            <returns>The host order ushort array.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.HexToBytes(System.String)">
+            <summary>
+                Converts a hex string to a byte array.
+            </summary>
+            <param name="hex">The hex string.</param>
+            <returns>Array of bytes.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.CalculateLrc(System.Byte[])">
+            <summary>
+                Calculate Longitudinal Redundancy Check.
+            </summary>
+            <param name="data">The data used in LRC.</param>
+            <returns>LRC value.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.CalculateCrc(System.Byte[])">
+            <summary>
+                Calculate Cyclical Redundancy Check.
+            </summary>
+            <param name="data">The data used in CRC.</param>
+            <returns>CRC value.</returns>
+        </member>
+    </members>
+</doc>
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/netstandard2.0/NModbus.dll b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/netstandard2.0/NModbus.dll
new file mode 100644
index 0000000..01c44c2
--- /dev/null
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/netstandard2.0/NModbus.dll
Binary files differ
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/netstandard2.0/NModbus.xml b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/netstandard2.0/NModbus.xml
new file mode 100644
index 0000000..aaf3ed7
--- /dev/null
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/packages/NModbus.3.0.81/lib/netstandard2.0/NModbus.xml
@@ -0,0 +1,2046 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>NModbus</name>
+    </assembly>
+    <members>
+        <member name="T:NModbus.Data.DefaultPointSource`1">
+            <summary>
+            A simple implementation of the point source. All registers are 
+            </summary>
+            <typeparam name="TPoint"></typeparam>
+        </member>
+        <member name="T:NModbus.Data.DiscreteCollection">
+            <summary>
+                Collection of discrete values.
+            </summary>
+        </member>
+        <member name="F:NModbus.Data.DiscreteCollection.BitsPerByte">
+            <summary>
+                Number of bits per byte.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.DiscreteCollection.#ctor">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.DiscreteCollection" /> class.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.DiscreteCollection.#ctor(System.Boolean[])">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.DiscreteCollection" /> class.
+            </summary>
+            <param name="bits">Array for discrete collection.</param>
+        </member>
+        <member name="M:NModbus.Data.DiscreteCollection.#ctor(System.Byte[])">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.DiscreteCollection" /> class.
+            </summary>
+            <param name="bytes">Array for discrete collection.</param>
+        </member>
+        <member name="M:NModbus.Data.DiscreteCollection.#ctor(System.Collections.Generic.IList{System.Boolean})">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.DiscreteCollection" /> class.
+            </summary>
+            <param name="bits">List for discrete collection.</param>
+        </member>
+        <member name="M:NModbus.Data.DiscreteCollection.#ctor(System.Collections.Generic.List{System.Boolean})">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.DiscreteCollection" /> class.
+            </summary>
+            <param name="bits">List for discrete collection.</param>
+        </member>
+        <member name="P:NModbus.Data.DiscreteCollection.NetworkBytes">
+            <summary>
+                Gets the network bytes.
+            </summary>
+        </member>
+        <member name="P:NModbus.Data.DiscreteCollection.ByteCount">
+            <summary>
+                Gets the byte count.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.DiscreteCollection.ToString">
+            <summary>
+                Returns a <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </summary>
+            <returns>
+                A <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </returns>
+        </member>
+        <member name="P:NModbus.Data.FileRecordCollection.FileNumber">
+            <summary>
+            The Extended Memory file number
+            </summary>
+        </member>
+        <member name="P:NModbus.Data.FileRecordCollection.StartingAddress">
+            <summary>
+            The starting register address within the file.
+            </summary>
+        </member>
+        <member name="P:NModbus.Data.FileRecordCollection.DataBytes">
+            <summary>
+             The bytes written to the extended memory file.
+            </summary>
+        </member>
+        <member name="P:NModbus.Data.FileRecordCollection.ByteCount">
+            <summary>
+                Gets the byte count.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.FileRecordCollection.ToString">
+            <summary>
+                Returns a <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </summary>
+            <returns>
+                A <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </returns>
+        </member>
+        <member name="T:NModbus.Data.IModbusMessageDataCollection">
+            <summary>
+                Modbus message containing data.
+            </summary>
+        </member>
+        <member name="P:NModbus.Data.IModbusMessageDataCollection.NetworkBytes">
+            <summary>
+                Gets the network bytes.
+            </summary>
+        </member>
+        <member name="P:NModbus.Data.IModbusMessageDataCollection.ByteCount">
+            <summary>
+                Gets the byte count.
+            </summary>
+        </member>
+        <member name="T:NModbus.Data.PointSource`1">
+            <summary>
+            A simple implementation of the point source. Memory for all points is allocated the first time a point is accessed. 
+            This is useful for cases where many points are used.
+            </summary>
+            <typeparam name="T"></typeparam>
+        </member>
+        <member name="T:NModbus.Data.RegisterCollection">
+            <summary>
+                Collection of 16 bit registers.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.RegisterCollection.#ctor">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.RegisterCollection" /> class.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.RegisterCollection.#ctor(System.Byte[])">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.RegisterCollection" /> class.
+            </summary>
+            <param name="bytes">Array for register collection.</param>
+        </member>
+        <member name="M:NModbus.Data.RegisterCollection.#ctor(System.UInt16[])">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.RegisterCollection" /> class.
+            </summary>
+            <param name="registers">Array for register collection.</param>
+        </member>
+        <member name="M:NModbus.Data.RegisterCollection.#ctor(System.Collections.Generic.IList{System.UInt16})">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.Data.RegisterCollection" /> class.
+            </summary>
+            <param name="registers">List for register collection.</param>
+        </member>
+        <member name="P:NModbus.Data.RegisterCollection.ByteCount">
+            <summary>
+                Gets the byte count.
+            </summary>
+        </member>
+        <member name="M:NModbus.Data.RegisterCollection.ToString">
+            <summary>
+                Returns a <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </summary>
+            <returns>
+                A <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </returns>
+        </member>
+        <member name="T:NModbus.Device.ConcurrentModbusMaster">
+            <summary>
+            Provides concurrency control across multiple Modbus readers/writers.
+            </summary>
+        </member>
+        <member name="T:NModbus.Device.ModbusDevice">
+            <summary>
+                Modbus device.
+            </summary>
+        </member>
+        <member name="P:NModbus.Device.ModbusDevice.Transport">
+            <summary>
+                Gets the Modbus Transport.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusDevice.Dispose">
+            <summary>
+                Releases unmanaged and - optionally - managed resources.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusDevice.Dispose(System.Boolean)">
+            <summary>
+                Releases unmanaged and - optionally - managed resources.
+            </summary>
+            <param name="disposing">
+                <c>true</c> to release both managed and unmanaged resources;
+                <c>false</c> to release only unmanaged resources.
+            </param>
+        </member>
+        <member name="T:NModbus.Device.ModbusFunctionServiceBase`1">
+            <summary>
+            Base class for 
+            </summary>
+            <typeparam name="TRequest">The type of request to handle.</typeparam>
+        </member>
+        <member name="T:NModbus.Device.ModbusIpMaster">
+            <summary>
+               Modbus IP master device.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.#ctor(NModbus.IModbusTransport)">
+            <summary>
+                Modbus IP master device.
+            </summary>
+            <param name="transport">Transport used by this master.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadCoils(System.UInt16,System.UInt16)">
+            <summary>
+               Reads from 1 to 2000 contiguous coils status.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of coils to read.</param>
+            <returns>Coils status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadCoilsAsync(System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads from 1 to 2000 contiguous coils status.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of coils to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadInputs(System.UInt16,System.UInt16)">
+            <summary>
+               Reads from 1 to 2000 contiguous discrete input status.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of discrete inputs to read.</param>
+            <returns>Discrete inputs status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadInputsAsync(System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads from 1 to 2000 contiguous discrete input status.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of discrete inputs to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadHoldingRegisters(System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of holding registers.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Holding registers status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadHoldingRegistersAsync(System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of holding registers.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadInputRegisters(System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of input registers.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Input registers status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadInputRegistersAsync(System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of input registers.
+            </summary>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteSingleCoil(System.UInt16,System.Boolean)">
+            <summary>
+               Writes a single coil value.
+            </summary>
+            <param name="coilAddress">Address to write value to.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteSingleCoilAsync(System.UInt16,System.Boolean)">
+            <summary>
+               Asynchronously writes a single coil value.
+            </summary>
+            <param name="coilAddress">Address to write value to.</param>
+            <param name="value">Value to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteSingleRegister(System.UInt16,System.UInt16)">
+            <summary>
+                Write a single holding register.
+            </summary>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteSingleRegisterAsync(System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously writes a single holding register.
+            </summary>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteMultipleRegisters(System.UInt16,System.UInt16[])">
+            <summary>
+                Write a block of 1 to 123 contiguous registers.
+            </summary>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteMultipleRegistersAsync(System.UInt16,System.UInt16[])">
+            <summary>
+               Asynchronously writes a block of 1 to 123 contiguous registers.
+            </summary>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteMultipleCoils(System.UInt16,System.Boolean[])">
+            <summary>
+                Force each coil in a sequence of coils to a provided value.
+            </summary>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.WriteMultipleCoilsAsync(System.UInt16,System.Boolean[])">
+            <summary>
+               Asynchronously writes a sequence of coils.
+            </summary>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+            <returns>A task that represents the asynchronous write operation</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadWriteMultipleRegisters(System.UInt16,System.UInt16,System.UInt16,System.UInt16[])">
+            <summary>
+                Performs a combination of one read operation and one write operation in a single MODBUS transaction.
+                The write operation is performed before the read.
+                Message uses default TCP slave id of 0.
+            </summary>
+            <param name="startReadAddress">Address to begin reading (Holding registers are addressed starting at 0).</param>
+            <param name="numberOfPointsToRead">Number of registers to read.</param>
+            <param name="startWriteAddress">Address to begin writing (Holding registers are addressed starting at 0).</param>
+            <param name="writeData">Register values to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusIpMaster.ReadWriteMultipleRegistersAsync(System.UInt16,System.UInt16,System.UInt16,System.UInt16[])">
+            <summary>
+               Asynchronously performs a combination of one read operation and one write operation in a single Modbus transaction.
+               The write operation is performed before the read.
+            </summary>
+            <param name="startReadAddress">Address to begin reading (Holding registers are addressed starting at 0).</param>
+            <param name="numberOfPointsToRead">Number of registers to read.</param>
+            <param name="startWriteAddress">Address to begin writing (Holding registers are addressed starting at 0).</param>
+            <param name="writeData">Register values to write.</param>
+            <returns>A task that represents the asynchronous operation.</returns>
+        </member>
+        <member name="T:NModbus.Device.ModbusMaster">
+            <summary>
+                Modbus master device.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadCoils(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads from 1 to 2000 contiguous coils status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of coils to read.</param>
+            <returns>Coils status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadCoilsAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads from 1 to 2000 contiguous coils status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of coils to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadInputs(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads from 1 to 2000 contiguous discrete input status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of discrete inputs to read.</param>
+            <returns>Discrete inputs status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadInputsAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads from 1 to 2000 contiguous discrete input status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of discrete inputs to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of holding registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Holding registers status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadHoldingRegistersAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of holding registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadInputRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of input registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Input registers status.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadInputRegistersAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of input registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteSingleCoil(System.Byte,System.UInt16,System.Boolean)">
+            <summary>
+               Writes a single coil value.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="coilAddress">Address to write value to.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteSingleCoilAsync(System.Byte,System.UInt16,System.Boolean)">
+            <summary>
+               Asynchronously writes a single coil value.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="coilAddress">Address to write value to.</param>
+            <param name="value">Value to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteSingleRegister(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Writes a single holding register.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteSingleRegisterAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously writes a single holding register.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteMultipleRegisters(System.Byte,System.UInt16,System.UInt16[])">
+            <summary>
+                Write a block of 1 to 123 contiguous 16 bit holding registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteMultipleRegistersAsync(System.Byte,System.UInt16,System.UInt16[])">
+            <summary>
+               Asynchronously writes a block of 1 to 123 contiguous registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteMultipleCoils(System.Byte,System.UInt16,System.Boolean[])">
+            <summary>
+               Writes a sequence of coils.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteMultipleCoilsAsync(System.Byte,System.UInt16,System.Boolean[])">
+            <summary>
+               Asynchronously writes a sequence of coils.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadWriteMultipleRegisters(System.Byte,System.UInt16,System.UInt16,System.UInt16,System.UInt16[])">
+            <summary>
+               Performs a combination of one read operation and one write operation in a single Modbus transaction.
+               The write operation is performed before the read.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startReadAddress">Address to begin reading (Holding registers are addressed starting at 0).</param>
+            <param name="numberOfPointsToRead">Number of registers to read.</param>
+            <param name="startWriteAddress">Address to begin writing (Holding registers are addressed starting at 0).</param>
+            <param name="writeData">Register values to write.</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ReadWriteMultipleRegistersAsync(System.Byte,System.UInt16,System.UInt16,System.UInt16,System.UInt16[])">
+            <summary>
+               Asynchronously performs a combination of one read operation and one write operation in a single Modbus transaction.
+               The write operation is performed before the read.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startReadAddress">Address to begin reading (Holding registers are addressed starting at 0).</param>
+            <param name="numberOfPointsToRead">Number of registers to read.</param>
+            <param name="startWriteAddress">Address to begin writing (Holding registers are addressed starting at 0).</param>
+            <param name="writeData">Register values to write.</param>
+            <returns>A task that represents the asynchronous operation.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.WriteFileRecord(System.Byte,System.UInt16,System.UInt16,System.Byte[])">
+            <summary>
+            Write a file record to the device.
+            </summary>
+            <param name="slaveAdress">Address of device to write values to</param>
+            <param name="fileNumber">The Extended Memory file number</param>
+            <param name="startingAddress">The starting register address within the file</param>
+            <param name="data">The data to be written</param>
+        </member>
+        <member name="M:NModbus.Device.ModbusMaster.ExecuteCustomMessage``1(NModbus.IModbusMessage)">
+            <summary>
+               Executes the custom message.
+            </summary>
+            <typeparam name="TResponse">The type of the response.</typeparam>
+            <param name="request">The request.</param>
+        </member>
+        <member name="T:NModbus.Device.ModbusMasterTcpConnection">
+            <summary>
+            Represents an incoming connection from a Modbus master. Contains the slave's logic to process the connection.
+            </summary>
+        </member>
+        <member name="E:NModbus.Device.ModbusMasterTcpConnection.ModbusMasterTcpConnectionClosed">
+            <summary>
+                Occurs when a Modbus master TCP connection is closed.
+            </summary>
+        </member>
+        <member name="T:NModbus.Device.ModbusSerialMaster">
+            <summary>
+                Modbus serial master device.
+            </summary>
+        </member>
+        <member name="P:NModbus.Device.ModbusSerialMaster.NModbus#IModbusSerialMaster#Transport">
+            <summary>
+                Gets the Modbus Transport.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusSerialMaster.ReturnQueryData(System.Byte,System.UInt16)">
+            <summary>
+                Serial Line only.
+                Diagnostic function which loops back the original data.
+                NModbus only supports looping back one ushort value, this is a limitation of the "Best Effort" implementation of
+                the RTU protocol.
+            </summary>
+            <param name="slaveAddress">Address of device to test.</param>
+            <param name="data">Data to return.</param>
+            <returns>Return true if slave device echoed data.</returns>
+        </member>
+        <member name="M:NModbus.Device.ModbusSlaveNetwork.ListenAsync(System.Threading.CancellationToken)">
+            <summary>
+            Start slave listening for requests.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusSlaveNetwork.ApplyRequest(NModbus.IModbusMessage)">
+            <summary>
+            Apply the request.
+            </summary>
+            <param name="request"></param>
+        </member>
+        <member name="T:NModbus.Device.ModbusTcpSlaveNetwork">
+            <summary>
+                Modbus TCP slave device.
+            </summary>
+        </member>
+        <member name="P:NModbus.Device.ModbusTcpSlaveNetwork.Masters">
+            <summary>
+                Gets the Modbus TCP Masters connected to this Modbus TCP Slave.
+            </summary>
+        </member>
+        <member name="P:NModbus.Device.ModbusTcpSlaveNetwork.Server">
+            <summary>
+                Gets the server.
+            </summary>
+            <value>The server.</value>
+            <remarks>
+                This property is not thread safe, it should only be consumed within a lock.
+            </remarks>
+        </member>
+        <member name="M:NModbus.Device.ModbusTcpSlaveNetwork.ListenAsync(System.Threading.CancellationToken)">
+            <summary>
+                Start slave listening for requests.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusTcpSlaveNetwork.Dispose(System.Boolean)">
+            <summary>
+                Releases unmanaged and - optionally - managed resources
+            </summary>
+            <param name="disposing">
+                <c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only
+                unmanaged resources.
+            </param>
+            <remarks>Dispose is thread-safe.</remarks>
+        </member>
+        <member name="T:NModbus.Device.ModbusUdpSlaveNetwork">
+            <summary>
+                Modbus UDP slave device.
+            </summary>
+        </member>
+        <member name="M:NModbus.Device.ModbusUdpSlaveNetwork.ListenAsync(System.Threading.CancellationToken)">
+            <summary>
+                Start slave listening for requests.
+            </summary>
+        </member>
+        <member name="T:NModbus.Device.PointEventArgs">
+            <summary>
+            Modbus Slave request event args containing information on the message.
+            </summary>
+        </member>
+        <member name="M:NModbus.Extensions.CrcExtensions.DoesCrcMatch(System.Byte[])">
+            <summary>
+            Determines whether the crc stored in the message matches the calculated crc.
+            </summary>
+            <param name="message"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.CrcExtensions.GetCRC(System.Byte[])">
+            <summary>
+            Gets the CRC of the message
+            </summary>
+            <param name="message"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.DictionaryExtensions.GetValueOrDefault``2(System.Collections.Generic.IDictionary{``0,``1},``0)">
+            <summary>
+            Gets the specified value in the dictionary. If not found, returns default for TValue.
+            </summary>
+            <typeparam name="TKey"></typeparam>
+            <typeparam name="TValue"></typeparam>
+            <param name="dictionary"></param>
+            <param name="key"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.Extensions.Enron.EnronModbus">
+            <summary>
+                Utility extensions for the Enron Modbus dialect.
+            </summary>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.ReadInputRegisters32(NModbus.IModbusMaster,System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of input registers with 32 bit register size.
+            </summary>
+            <param name="master">The Modbus master.</param>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Input registers status.</returns>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.ReadHoldingRegisters32(NModbus.IModbusMaster,System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of holding registers.
+            </summary>
+            <param name="master">The Modbus master.</param>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Holding registers status.</returns>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.ReadInputRegisters32Async(NModbus.IModbusMaster,System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of input registers with 32 bit register size.
+            </summary>
+            <param name="master">The Modbus master.</param>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.ReadHoldingRegisters32Async(NModbus.IModbusMaster,System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of holding registers.
+            </summary>
+            <param name="master">The Modbus master.</param>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.WriteSingleRegister32(NModbus.IModbusMaster,System.Byte,System.UInt16,System.UInt32)">
+            <summary>
+                Write a single 16 bit holding register.
+            </summary>
+            <param name="master">The Modbus master.</param>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.WriteMultipleRegisters32(NModbus.IModbusMaster,System.Byte,System.UInt16,System.UInt32[])">
+            <summary>
+                Write a block of contiguous 32 bit holding registers.
+            </summary>
+            <param name="master">The Modbus master.</param>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.ConvertFrom32(System.UInt32[])">
+            <summary> Convert the 32 bit registers to two 16 bit values. </summary>
+        </member>
+        <member name="M:NModbus.Extensions.Enron.EnronModbus.ConvertTo32(System.UInt16[])">
+            <summary> Convert the double 16 bit registers to single 32 bit values. </summary>
+        </member>
+        <member name="T:NModbus.Extensions.Functions.Endian">
+            <summary>
+            Class containing functions to covert endian from network device to host this code is running on.
+            </summary>
+        </member>
+        <member name="M:NModbus.Extensions.Functions.Endian.BigEndian(System.Byte[])">
+            <summary>
+            Converts BigEndian source bytes to Endian format of system.
+            Source BE: 0x0A,0x0B,0x0C,0x0D. 
+            Target BE: 0x0A,0x0B,0x0C,0x0D.
+            Target LE: 0x0D,0x0C,0x0B,0x0A.
+            </summary>
+            <param name="sourceBytes">Byte array from device</param>
+            <returns>Bytes in Endian format for system</returns>
+        </member>
+        <member name="M:NModbus.Extensions.Functions.Endian.LittleEndian(System.Byte[])">
+            <summary>
+            Converts LittleEndian source bytes to Endian format of system. 
+            Source LE: 0x0D,0x0C,0x0B,0x0A. 
+            Target BE: 0x0A,0x0B,0x0C,0x0D.
+            Target LE: 0x0D,0x0C,0x0B,0x0A.
+            </summary>
+            <param name="sourceBytes">Byte array from device</param>
+            <returns>Bytes in Endian format for system</returns>
+        </member>
+        <member name="T:NModbus.Extensions.Functions.RegisterFunctions">
+            <summary>
+              This class provides some functions that can be used to read/write values of a set word size.
+            </summary>
+        </member>
+        <member name="T:NModbus.Extensions.ModbusMasterEnhanced">
+            <summary>
+            Utility Class to support Modbus 32/64bit devices. 
+            </summary>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.#ctor(NModbus.IModbusMaster,System.UInt32,System.Func{System.Byte[],System.Byte[]},System.Boolean)">
+            <summary>
+            Constructor with values to be used by all methods. 
+            Default is 32bit, LittleEndian, with wordswapping.
+            </summary>
+            <param name="master">The Modbus master</param>
+            <param name="wordSize">Wordsize used by device. 16/32/64 are valid.</param>
+            <param name="endian">The endian encoding of the device.</param>
+            <param name="wordSwapped">Should the ushort words mirrored then flattened to bytes.</param>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.ReadCharHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+            Reads registers and converts the result into a char array.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of chars to read.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.ReadUshortHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+            Reads registers and converts the result into a ushort array.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of ushorts to read.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.ReadShortHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+            Reads registers and converts the result into a short array.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of shots to read.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.ReadUintHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+            Reads registers and converts the result into a uint array.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of uints to read.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.ReadIntHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+            Reads registers and converts the result into a int array.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of ints to read.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.ReadFloatHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+            Reads registers and converts the result into a float array.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of floats to read.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.WriteCharHoldingRegisters(System.Byte,System.UInt16,System.Char[])">
+            <summary>
+                Write a char array to registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to start writting values at.</param>
+            <param name="data">Chars to write to device.</param>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.WriteUshortHoldingRegisters(System.Byte,System.UInt16,System.UInt16[])">
+            <summary>
+                Write a ushort array to registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to start writting values at.</param>
+            <param name="data">Ushorts to write to device.</param>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.WriteShortHoldingRegisters(System.Byte,System.UInt16,System.Int16[])">
+            <summary>
+                Write a short array to registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to start writting values at.</param>
+            <param name="data">Shorts to write to device.</param>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.WriteIntHoldingRegisters(System.Byte,System.UInt16,System.Int32[])">
+            <summary>
+                Write a int array to registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to start writting values at.</param>
+            <param name="data">Ints to write to device.</param>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.WriteUIntHoldingRegisters(System.Byte,System.UInt16,System.UInt32[])">
+            <summary>
+                Write a uint array to registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to start writting values at.</param>
+            <param name="data">Uints to write to device.</param>
+        </member>
+        <member name="M:NModbus.Extensions.ModbusMasterEnhanced.WriteFloatHoldingRegisters(System.Byte,System.UInt16,System.Single[])">
+            <summary>
+                Write a float array to registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to start writting values at.</param>
+            <param name="data">Floats to write to device.</param>
+        </member>
+        <member name="T:NModbus.FactoryExtensions">
+            <summary>
+            Extension methods for the IModbusFactory interface.
+            </summary>
+        </member>
+        <member name="M:NModbus.FactoryExtensions.CreateRtuMaster(NModbus.IModbusFactory,NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an RTU master.
+            </summary>
+            <param name="factory"></param>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.FactoryExtensions.CreateAsciiMaster(NModbus.IModbusFactory,NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an ASCII master.
+            </summary>
+            <param name="factory"></param>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.FactoryExtensions.CreateIpMaster(NModbus.IModbusFactory,NModbus.IO.IStreamResource)">
+            <summary>
+            Creates a TCP or UDP master.
+            </summary>
+            <param name="factory"></param>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.FactoryExtensions.CreateRtuSlaveNetwork(NModbus.IModbusFactory,NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an RTU slave network.
+            </summary>
+            <param name="factory"></param>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.FactoryExtensions.CreateAsciiSlaveNetwork(NModbus.IModbusFactory,NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an ASCII slave network.
+            </summary>
+            <param name="factory"></param>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.IModbusFactory">
+            <summary>
+            Container for modbus function services.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusFactory.GetFunctionService(System.Byte)">
+            <summary>
+            Get the service for a given function code.
+            </summary>
+            <param name="functionCode"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.GetAllFunctionServices">
+            <summary>
+            Gets all of the services.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateMaster(NModbus.IModbusSerialTransport)">
+            <summary>
+            Create an rtu master.
+            </summary>
+            <param name="transport"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateMaster(System.Net.Sockets.UdpClient)">
+            <summary>
+            Create a TCP master.
+            </summary>
+            <param name="client"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateMaster(System.Net.Sockets.TcpClient)">
+            <summary>
+            
+            </summary>
+            <param name="client"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateSlave(System.Byte,NModbus.ISlaveDataStore)">
+            <summary>
+            Creates a Modbus Slave.
+            </summary>
+            <param name="unitId">The address of this slave on the Modbus network.</param>
+            <param name="dataStore">Optionally specify a custom data store for the created slave.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateSlaveNetwork(NModbus.IModbusRtuTransport)">
+            <summary>
+            Creates a slave network based on the RTU transport.
+            </summary>
+            <param name="transport"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateSlaveNetwork(NModbus.IModbusAsciiTransport)">
+            <summary>
+            Creates an ascii slave network.
+            </summary>
+            <param name="transport">The ascii transport to base this on.</param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateSlaveNetwork(System.Net.Sockets.TcpListener)">
+            <summary>
+            Create a slave network based on TCP.
+            </summary>
+            <param name="tcpListener"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateSlaveNetwork(System.Net.Sockets.UdpClient)">
+            <summary>
+            Creates a UDP modbus slave network.
+            </summary>
+            <param name="client"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateRtuTransport(NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an RTU transpoort. 
+            </summary>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateAsciiTransport(NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an Ascii Transport.
+            </summary>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFactory.CreateIpTransport(NModbus.IO.IStreamResource)">
+            <summary>
+            Creates an IP Transport
+            </summary>
+            <param name="streamResource"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.IModbusFunctionService">
+            <summary>
+            A Modbus slave message handler.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusFunctionService.FunctionCode">
+            <summary>
+            The function code that this handles
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusFunctionService.CreateRequest(System.Byte[])">
+            <summary>
+            Creates a message that wrapps the request frame.
+            </summary>
+            <param name="frame"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFunctionService.HandleSlaveRequest(NModbus.IModbusMessage,NModbus.ISlaveDataStore)">
+            <summary>
+            Handle a slave request.
+            </summary>
+            <param name="request"></param>
+            <param name="dataStore"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFunctionService.GetRtuRequestBytesToRead(System.Byte[])">
+            <summary>
+            Gets the number of bytes to read for a request
+            </summary>
+            <param name="frameStart"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusFunctionService.GetRtuResponseBytesToRead(System.Byte[])">
+            <summary>
+            Gets the number of bytes to read for a response.
+            </summary>
+            <param name="frameStart"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.IModbusLogger">
+            <summary>
+            Simple logging target. Designed to be easily integrated into other logging frameworks.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusLogger.Log(NModbus.LoggingLevel,System.String)">
+            <summary>
+            Conditionally log a message
+            </summary>
+            <param name="level"></param>
+            <param name="message"></param>
+        </member>
+        <member name="M:NModbus.IModbusLogger.ShouldLog(NModbus.LoggingLevel)">
+            <summary>
+            True if this level should be logged, false otherwise.
+            </summary>
+            <param name="level"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.IModbusMaster">
+            <summary>
+                Modbus master device.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusMaster.Transport">
+            <summary>
+                Transport used by this master.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadCoils(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads from 1 to 2000 contiguous coils status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of coils to read.</param>
+            <returns>Coils status.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadCoilsAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads from 1 to 2000 contiguous coils status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of coils to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadInputs(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads from 1 to 2000 contiguous discrete input status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of discrete inputs to read.</param>
+            <returns>Discrete inputs status.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadInputsAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads from 1 to 2000 contiguous discrete input status.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of discrete inputs to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadHoldingRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of holding registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Holding registers status.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadHoldingRegistersAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of holding registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadInputRegisters(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Reads contiguous block of input registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>Input registers status.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadInputRegistersAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously reads contiguous block of input registers.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startAddress">Address to begin reading.</param>
+            <param name="numberOfPoints">Number of holding registers to read.</param>
+            <returns>A task that represents the asynchronous read operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteSingleCoil(System.Byte,System.UInt16,System.Boolean)">
+            <summary>
+               Writes a single coil value.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="coilAddress">Address to write value to.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteSingleCoilAsync(System.Byte,System.UInt16,System.Boolean)">
+            <summary>
+               Asynchronously writes a single coil value.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="coilAddress">Address to write value to.</param>
+            <param name="value">Value to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteSingleRegister(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Writes a single holding register.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteSingleRegisterAsync(System.Byte,System.UInt16,System.UInt16)">
+            <summary>
+               Asynchronously writes a single holding register.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="registerAddress">Address to write.</param>
+            <param name="value">Value to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteMultipleRegisters(System.Byte,System.UInt16,System.UInt16[])">
+            <summary>
+               Writes a block of 1 to 123 contiguous registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteMultipleRegistersAsync(System.Byte,System.UInt16,System.UInt16[])">
+            <summary>
+               Asynchronously writes a block of 1 to 123 contiguous registers.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteMultipleCoils(System.Byte,System.UInt16,System.Boolean[])">
+            <summary>
+               Writes a sequence of coils.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteMultipleCoilsAsync(System.Byte,System.UInt16,System.Boolean[])">
+            <summary>
+               Asynchronously writes a sequence of coils.
+            </summary>
+            <param name="slaveAddress">Address of the device to write to.</param>
+            <param name="startAddress">Address to begin writing values.</param>
+            <param name="data">Values to write.</param>
+            <returns>A task that represents the asynchronous write operation.</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadWriteMultipleRegisters(System.Byte,System.UInt16,System.UInt16,System.UInt16,System.UInt16[])">
+            <summary>
+               Performs a combination of one read operation and one write operation in a single Modbus transaction.
+               The write operation is performed before the read.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startReadAddress">Address to begin reading (Holding registers are addressed starting at 0).</param>
+            <param name="numberOfPointsToRead">Number of registers to read.</param>
+            <param name="startWriteAddress">Address to begin writing (Holding registers are addressed starting at 0).</param>
+            <param name="writeData">Register values to write.</param>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ReadWriteMultipleRegistersAsync(System.Byte,System.UInt16,System.UInt16,System.UInt16,System.UInt16[])">
+            <summary>
+               Asynchronously performs a combination of one read operation and one write operation in a single Modbus transaction.
+               The write operation is performed before the read.
+            </summary>
+            <param name="slaveAddress">Address of device to read values from.</param>
+            <param name="startReadAddress">Address to begin reading (Holding registers are addressed starting at 0).</param>
+            <param name="numberOfPointsToRead">Number of registers to read.</param>
+            <param name="startWriteAddress">Address to begin writing (Holding registers are addressed starting at 0).</param>
+            <param name="writeData">Register values to write.</param>
+            <returns>A task that represents the asynchronous operation</returns>
+        </member>
+        <member name="M:NModbus.IModbusMaster.WriteFileRecord(System.Byte,System.UInt16,System.UInt16,System.Byte[])">
+            <summary>
+            Write a file record to the device.
+            </summary>
+            <param name="slaveAdress">Address of device to write values to</param>
+            <param name="fileNumber">The Extended Memory file number</param>
+            <param name="startingAddress">The starting register address within the file</param>
+            <param name="data">The data to be written</param>
+        </member>
+        <member name="M:NModbus.IModbusMaster.ExecuteCustomMessage``1(NModbus.IModbusMessage)">
+            <summary>
+               Executes the custom message.
+            </summary>
+            <typeparam name="TResponse">The type of the response.</typeparam>
+            <param name="request">The request.</param>
+        </member>
+        <member name="T:NModbus.IModbusMessage">
+            <summary>
+                A message built by the master (client) that initiates a Modbus transaction.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusMessage.FunctionCode">
+            <summary>
+                The function code tells the server what kind of action to perform.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusMessage.SlaveAddress">
+            <summary>
+                Address of the slave (server).
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusMessage.MessageFrame">
+            <summary>
+                Composition of the slave address and protocol data unit.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusMessage.ProtocolDataUnit">
+            <summary>
+                Composition of the function code and message data.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusMessage.TransactionId">
+            <summary>
+                A unique identifier assigned to a message when using the IP protocol.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusMessage.Initialize(System.Byte[])">
+            <summary>
+                Initializes a modbus message from the specified message frame.
+            </summary>
+            <param name="frame">Bytes of Modbus frame.</param>
+        </member>
+        <member name="T:NModbus.IModbusSerialMaster">
+            <summary>
+                Modbus Serial Master device.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusSerialMaster.Transport">
+            <summary>
+                Transport for used by this master.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusSerialMaster.ReturnQueryData(System.Byte,System.UInt16)">
+            <summary>
+                Serial Line only.
+                Diagnostic function which loops back the original data.
+                NModbus only supports looping back one ushort value, this is a
+                limitation of the "Best Effort" implementation of the RTU protocol.
+            </summary>
+            <param name="slaveAddress">Address of device to test.</param>
+            <param name="data">Data to return.</param>
+            <returns>Return true if slave device echoed data.</returns>
+        </member>
+        <member name="T:NModbus.IModbusSlave">
+            <summary>
+            A modbus slave.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusSlave.UnitId">
+            <summary>
+            Gets the unit id of this slave.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusSlave.DataStore">
+            <summary>
+            Gets the data store for this slave.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusSlave.ApplyRequest(NModbus.IModbusMessage)">
+            <summary>
+            Applies the request.
+            </summary>
+            <param name="request"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.IModbusSlaveNetwork">
+            <summary>
+            A network of slave devices on a single transport.
+            </summary>
+        </member>
+        <member name="M:NModbus.IModbusSlaveNetwork.ListenAsync(System.Threading.CancellationToken)">
+            <summary>
+            Listen for incoming requests.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IModbusSlaveNetwork.AddSlave(NModbus.IModbusSlave)">
+            <summary>
+            Add a slave to the network.
+            </summary>
+            <param name="slave"></param>
+        </member>
+        <member name="M:NModbus.IModbusSlaveNetwork.GetSlave(System.Byte)">
+            <summary>
+            Get a slave from the network.
+            </summary>
+            <param name="unitId">The slave address</param>
+            <returns>The specified slave, or null if one can't be found.</returns>
+        </member>
+        <member name="M:NModbus.IModbusSlaveNetwork.RemoveSlave(System.Byte)">
+            <summary>
+            Removes a slave from the network.
+            </summary>
+            <param name="unitId"></param>
+        </member>
+        <member name="T:NModbus.IModbusTcpSlaveNetwork">
+            <summary>
+                Modbus TCP slave device.
+            </summary>
+        </member>
+        <member name="P:NModbus.IModbusTcpSlaveNetwork.Masters">
+            <summary>
+                Gets the Modbus TCP Masters connected to this Modbus TCP Slave.
+            </summary>
+        </member>
+        <member name="T:NModbus.IPointSource`1">
+            <summary>
+            Represents a memory map.
+            </summary>
+            <typeparam name="TPoint"></typeparam>
+        </member>
+        <member name="M:NModbus.IPointSource`1.ReadPoints(System.UInt16,System.UInt16)">
+            <summary>
+            Read a series of points.
+            </summary>
+            <param name="startAddress"></param>
+            <param name="numberOfPoints"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.IPointSource`1.WritePoints(System.UInt16,`0[])">
+            <summary>
+            Write a series of points.
+            </summary>
+            <param name="startAddress"></param>
+            <param name="points"></param>
+        </member>
+        <member name="T:NModbus.ISlaveDataStore">
+            <summary>
+            Object simulation of a device memory map.
+            </summary>
+        </member>
+        <member name="P:NModbus.ISlaveDataStore.CoilDiscretes">
+            <summary>
+            Gets the descrete coils.
+            </summary>
+        </member>
+        <member name="P:NModbus.ISlaveDataStore.CoilInputs">
+            <summary>
+            Gets the discrete inputs.
+            </summary>
+        </member>
+        <member name="P:NModbus.ISlaveDataStore.HoldingRegisters">
+            <summary>
+            Gets the holding registers.
+            </summary>
+        </member>
+        <member name="P:NModbus.ISlaveDataStore.InputRegisters">
+            <summary>
+            Gets the input registers.
+            </summary>
+        </member>
+        <member name="T:NModbus.LoggingLevel">
+            <summary>
+            Following the guidelines from https://github.com/aspnet/Logging/wiki/Guidelines.
+            </summary>
+        </member>
+        <member name="F:NModbus.LoggingLevel.Trace">
+            <summary>
+            The most detailed log messages, may contain sensitive application data. These messages should be disabled by default and should never be enabled in a production environment.
+            </summary>
+        </member>
+        <member name="F:NModbus.LoggingLevel.Debug">
+            <summary>
+            Logs that are used for interactive investigation during development should use the Debug level. These logs should primarily contain information useful for debugging and have no long-term value. 
+            This is the default most verbose level of logging.
+            </summary>
+        </member>
+        <member name="F:NModbus.LoggingLevel.Information">
+            <summary>
+            Track the general flow of the application using logs at the Information level. These logs should have value in the long term.
+            </summary>
+        </member>
+        <member name="F:NModbus.LoggingLevel.Warning">
+            <summary>
+            Warnings should highlight an abnormal or unexpected event in the application flow. This event does not cause the application execution to stop, but can signify sub-optimal performance or a potential problem for the future. A common place to log a warning is from handled exceptions. 
+            </summary>
+        </member>
+        <member name="F:NModbus.LoggingLevel.Error">
+            <summary>
+            An error should be logged when the current flow of execution is stopped due to a failure. These should indicate a failure in the current activity, not an application-wide failure. These will mainly be unhandled exceptions and recoverable failures. 
+            </summary>
+        </member>
+        <member name="F:NModbus.LoggingLevel.Critical">
+            <summary>
+            A critical log should describe an unrecoverable application or system crash, or a catastrophic failure that requires immediate attention. 
+            </summary>
+        </member>
+        <member name="T:NModbus.InvalidModbusRequestException">
+            <summary>
+                An exception that provides the exception code that will be sent in response to an invalid Modbus request.
+            </summary>
+        </member>
+        <member name="M:NModbus.InvalidModbusRequestException.#ctor(System.Byte)">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.InvalidModbusRequestException" /> class with a specified Modbus exception code.
+            </summary>
+            <param name="exceptionCode">The Modbus exception code to provide to the slave.</param>
+        </member>
+        <member name="M:NModbus.InvalidModbusRequestException.#ctor(System.String,System.Byte)">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.InvalidModbusRequestException" /> class with a specified error message and Modbus exception code.
+            </summary>
+            <param name="message">The error message that explains the reason for the exception.</param>
+            <param name="exceptionCode">The Modbus exception code to provide to the slave.</param>
+        </member>
+        <member name="M:NModbus.InvalidModbusRequestException.#ctor(System.Byte,System.Exception)">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.InvalidModbusRequestException" /> class with a specified Modbus exception code and a reference to the inner exception that is the cause of this exception.
+            </summary>
+            <param name="exceptionCode">The Modbus exception code to provide to the slave.</param>
+            <param name="innerException">The exception that is the cause of the current exception. If the <paramref name="innerException" /> parameter is not a null reference, the current exception is raised in a catch block that handles the inner exception.</param>
+        </member>
+        <member name="M:NModbus.InvalidModbusRequestException.#ctor(System.String,System.Byte,System.Exception)">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.InvalidModbusRequestException" /> class with a specified Modbus exception code and a reference to the inner exception that is the cause of this exception.
+            </summary>
+            <param name="message">The error message that explains the reason for the exception.</param>
+            <param name="exceptionCode">The Modbus exception code to provide to the slave.</param>
+            <param name="innerException">The exception that is the cause of the current exception. If the <paramref name="innerException" /> parameter is not a null reference, the current exception is raised in a catch block that handles the inner exception.</param>
+        </member>
+        <member name="P:NModbus.InvalidModbusRequestException.ExceptionCode">
+            <summary>
+                Gets the Modbus exception code to provide to the slave.
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.IStreamResource">
+            <summary>
+                Represents a serial resource.
+                Implementor - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.IStreamResource.InfiniteTimeout">
+            <summary>
+                Indicates that no timeout should occur.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.IStreamResource.ReadTimeout">
+            <summary>
+                Gets or sets the number of milliseconds before a timeout occurs when a read operation does not finish.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.IStreamResource.WriteTimeout">
+            <summary>
+                Gets or sets the number of milliseconds before a timeout occurs when a write operation does not finish.
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.IStreamResource.DiscardInBuffer">
+            <summary>
+                Purges the receive buffer.
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.IStreamResource.Read(System.Byte[],System.Int32,System.Int32)">
+            <summary>
+                Reads a number of bytes from the input buffer and writes those bytes into a byte array at the specified offset.
+            </summary>
+            <param name="buffer">The byte array to write the input to.</param>
+            <param name="offset">The offset in the buffer array to begin writing.</param>
+            <param name="count">The number of bytes to read.</param>
+            <returns>The number of bytes read.</returns>
+        </member>
+        <member name="M:NModbus.IO.IStreamResource.Write(System.Byte[],System.Int32,System.Int32)">
+            <summary>
+                Writes a specified number of bytes to the port from an output buffer, starting at the specified offset.
+            </summary>
+            <param name="buffer">The byte array that contains the data to write to the port.</param>
+            <param name="offset">The offset in the buffer array to begin writing.</param>
+            <param name="count">The number of bytes to write.</param>
+        </member>
+        <member name="T:NModbus.IO.ModbusAsciiTransport">
+            <summary>
+                Refined Abstraction - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.ModbusIpTransport">
+            <summary>
+                Transport for Internet protocols.
+                Refined Abstraction - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusIpTransport.GetNewTransactionId">
+            <summary>
+                Create a new transaction ID.
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.ModbusRtuTransport">
+            <summary>
+                Refined Abstraction - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.ModbusSerialTransport">
+            <summary>
+                Transport for Serial protocols.
+                Refined Abstraction - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusSerialTransport.CheckFrame">
+            <summary>
+            Gets or sets a value indicating whether LRC/CRC frame checking is performed on messages.
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.ModbusTransport">
+            <summary>
+            Modbus transport.
+            Abstraction - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusTransport.#ctor(NModbus.IModbusFactory,NModbus.IModbusLogger)">
+            <summary>
+                This constructor is called by the NullTransport.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.Retries">
+            <summary>
+                Number of times to retry sending message after encountering a failure such as an IOException,
+                TimeoutException, or a corrupt message.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.RetryOnOldResponseThreshold">
+            <summary>
+            If non-zero, this will cause a second reply to be read if the first is behind the sequence number of the
+            request by less than this number.  For example, set this to 3, and if when sending request 5, response 3 is
+            read, we will attempt to re-read responses.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.SlaveBusyUsesRetryCount">
+            <summary>
+            If set, Slave Busy exception causes retry count to be used.  If false, Slave Busy will cause infinite retries
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.WaitToRetryMilliseconds">
+            <summary>
+                Gets or sets the number of milliseconds the tranport will wait before retrying a message after receiving
+                an ACKNOWLEGE or SLAVE DEVICE BUSY slave exception response.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.ReadTimeout">
+            <summary>
+                Gets or sets the number of milliseconds before a timeout occurs when a read operation does not finish.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.WriteTimeout">
+            <summary>
+                Gets or sets the number of milliseconds before a timeout occurs when a write operation does not finish.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.StreamResource">
+            <summary>
+                Gets the stream resource.
+            </summary>
+        </member>
+        <member name="P:NModbus.IO.ModbusTransport.Logger">
+            <summary>
+            Gets the logger for this instance.
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusTransport.Dispose">
+            <summary>
+                Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusTransport.ShouldRetryResponse(NModbus.IModbusMessage,NModbus.IModbusMessage)">
+            <summary>
+                Check whether we need to attempt to read another response before processing it (e.g. response was from previous request)
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusTransport.OnShouldRetryResponse(NModbus.IModbusMessage,NModbus.IModbusMessage)">
+            <summary>
+                Provide hook to check whether receiving a response should be retried
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusTransport.OnValidateResponse(NModbus.IModbusMessage,NModbus.IModbusMessage)">
+            <summary>
+                Provide hook to do transport level message validation.
+            </summary>
+        </member>
+        <member name="M:NModbus.IO.ModbusTransport.Dispose(System.Boolean)">
+            <summary>
+                Releases unmanaged and - optionally - managed resources
+            </summary>
+            <param name="disposing">
+                <c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only
+                unmanaged resources.
+            </param>
+        </member>
+        <member name="T:NModbus.IO.SocketAdapter">
+            <summary>
+                Concrete Implementor - http://en.wikipedia.org/wiki/Bridge_Pattern
+                This implementation is for sockets that Convert Rs485 to Ethernet.
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.TcpClientAdapter">
+            <summary>
+                Concrete Implementor - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="T:NModbus.IO.UdpClientAdapter">
+            <summary>
+                Concrete Implementor - http://en.wikipedia.org/wiki/Bridge_Pattern
+            </summary>
+        </member>
+        <member name="T:NModbus.Logging.DebugModbusLogger">
+            <summary>
+            Writes using Debug.WriteLine().
+            </summary>
+        </member>
+        <member name="T:NModbus.Logging.ModbusLogger">
+            <summary>
+            Base class for Modbus loggers.
+            </summary>
+        </member>
+        <member name="M:NModbus.Logging.ModbusLogger.ShouldLog(NModbus.LoggingLevel)">
+            <summary>
+            Returns true if the level should be loggged, false otherwise.
+            </summary>
+            <param name="level"></param>
+            <returns></returns>
+        </member>
+        <member name="M:NModbus.Logging.ModbusLogger.Log(NModbus.LoggingLevel,System.String)">
+            <summary>
+            Log the specified message at the specified level.
+            </summary>
+            <param name="level"></param>
+            <param name="message"></param>
+        </member>
+        <member name="M:NModbus.Logging.ModbusLogger.LogCore(NModbus.LoggingLevel,System.String)">
+            <summary>
+            Override this method to implement logging behavior. This function will only be called if ShouldLog(level) is true.
+            </summary>
+            <param name="level"></param>
+            <param name="message"></param>
+        </member>
+        <member name="T:NModbus.Logging.NullModbusLogger">
+            <summary>
+            Empty logger.
+            </summary>
+        </member>
+        <member name="F:NModbus.Logging.NullModbusLogger.Instance">
+            <summary>
+            Singleton.
+            </summary>
+        </member>
+        <member name="M:NModbus.Logging.NullModbusLogger.Log(NModbus.LoggingLevel,System.String)">
+            <summary>
+            This won't do anything.
+            </summary>
+            <param name="level"></param>
+            <param name="message"></param>
+        </member>
+        <member name="M:NModbus.Logging.NullModbusLogger.ShouldLog(NModbus.LoggingLevel)">
+            <summary>
+            Always returnsa false
+            </summary>
+            <param name="level"></param>
+            <returns></returns>
+        </member>
+        <member name="T:NModbus.Message.AbstractModbusMessage">
+            <summary>
+                Abstract Modbus message.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.AbstractModbusMessage.#ctor">
+            <summary>
+                Abstract Modbus message.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.AbstractModbusMessage.#ctor(System.Byte,System.Byte)">
+            <summary>
+                Abstract Modbus message.
+            </summary>
+        </member>
+        <member name="T:NModbus.Message.IModbusRequest">
+            <summary>
+                Methods specific to a modbus request message.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.IModbusRequest.ValidateResponse(NModbus.IModbusMessage)">
+            <summary>
+                Validate the specified response against the current request.
+            </summary>
+        </member>
+        <member name="T:NModbus.Message.ModbusMessageFactory">
+            <summary>
+            Modbus message factory.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.ModbusMessageFactory.CreateModbusMessage``1(System.Byte[])">
+            <summary>
+            Create a Modbus message.
+            </summary>
+            <typeparam name="T">Modbus message type.</typeparam>
+            <param name="frame">Bytes of Modbus frame.</param>
+            <returns>New Modbus message based on type and frame bytes.</returns>
+        </member>
+        <member name="T:NModbus.Message.ModbusMessageImpl">
+            <summary>
+                Class holding all implementation shared between two or more message types.
+                Interfaces expose subsets of type specific implementations.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.SlaveExceptionResponse.ToString">
+            <summary>
+                Returns a <see cref="T:System.String"></see> that represents the current <see cref="T:System.Object"></see>.
+            </summary>
+            <returns>
+                A <see cref="T:System.String"></see> that represents the current <see cref="T:System.Object"></see>.
+            </returns>
+        </member>
+        <member name="T:NModbus.Message.WriteMultipleCoilsRequest">
+            <summary>
+                Write Multiple Coils request.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.WriteMultipleCoilsRequest.#ctor">
+            <summary>
+                Write Multiple Coils request.
+            </summary>
+        </member>
+        <member name="M:NModbus.Message.WriteMultipleCoilsRequest.#ctor(System.Byte,System.UInt16,NModbus.Data.DiscreteCollection)">
+            <summary>
+                Write Multiple Coils request.
+            </summary>
+        </member>
+        <member name="T:NModbus.Modbus">
+            <summary>
+                Defines constants related to the Modbus protocol.
+            </summary>
+        </member>
+        <member name="F:NModbus.ModbusFactory.BuiltInFunctionServices">
+            <summary>
+            The "built-in" message handlers.
+            </summary>
+        </member>
+        <member name="M:NModbus.ModbusFactory.#ctor">
+            <summary>
+            Create a factory which uses the built in standard slave function handlers.
+            </summary>
+        </member>
+        <member name="M:NModbus.ModbusFactory.#ctor(System.Collections.Generic.IEnumerable{NModbus.IModbusFunctionService},System.Boolean,NModbus.IModbusLogger)">
+            <summary>
+            Create a factory which optionally uses the built in function services and allows custom services to be added.
+            </summary>
+            <param name="functionServices">User provided function services.</param>
+            <param name="includeBuiltIn">If true, the built in function services are included. Otherwise, all function services will come from the functionService parameter.</param>
+            <param name="logger">Logger</param>
+        </member>
+        <member name="T:NModbus.ModbusFunctionCodes">
+            <summary>
+            Supported function codes
+            </summary>
+        </member>
+        <member name="F:NModbus.ModbusIPPorts.Insecure">
+            <summary>
+            502: mbap/TCP
+            </summary>
+        </member>
+        <member name="F:NModbus.ModbusIPPorts.Secure">
+            <summary>
+            802: mbap/TLS/TCP
+            </summary>
+        </member>
+        <member name="T:NModbus.SlaveException">
+            <summary>
+                Represents slave errors that occur during communication.
+            </summary>
+        </member>
+        <member name="M:NModbus.SlaveException.#ctor">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.SlaveException" /> class.
+            </summary>
+        </member>
+        <member name="M:NModbus.SlaveException.#ctor(System.String)">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.SlaveException" /> class.
+            </summary>
+            <param name="message">The message.</param>
+        </member>
+        <member name="M:NModbus.SlaveException.#ctor(System.String,System.Exception)">
+            <summary>
+                Initializes a new instance of the <see cref="T:NModbus.SlaveException" /> class.
+            </summary>
+            <param name="message">The message.</param>
+            <param name="innerException">The inner exception.</param>
+        </member>
+        <member name="P:NModbus.SlaveException.Message">
+            <summary>
+                Gets a message that describes the current exception.
+            </summary>
+            <value>
+                The error message that explains the reason for the exception, or an empty string.
+            </value>
+        </member>
+        <member name="P:NModbus.SlaveException.FunctionCode">
+            <summary>
+                Gets the response function code that caused the exception to occur, or 0.
+            </summary>
+            <value>The function code.</value>
+        </member>
+        <member name="P:NModbus.SlaveException.SlaveExceptionCode">
+            <summary>
+                Gets the slave exception code, or 0.
+            </summary>
+            <value>The slave exception code.</value>
+        </member>
+        <member name="P:NModbus.SlaveException.SlaveAddress">
+            <summary>
+                Gets the slave address, or 0.
+            </summary>
+            <value>The slave address.</value>
+        </member>
+        <member name="T:NModbus.SlaveExceptionCodes">
+            <summary>
+             Modbus slave exception codes
+            </summary>
+        </member>
+        <member name="F:NModbus.SlaveExceptionCodes.IllegalFunction">
+            <summary>
+            The function code received in the query is not an allowable action for the slave.  This may be because the function code is only applicable to newer devices, and was not implemented in the unit selected.  It could also indicate that the slave is in the wrong state to process a request of this type, for example because it is unconfigured and is being asked to return register values. If a Poll Program Complete command was issued, this code indicates that no program function preceded it.
+            </summary>
+        </member>
+        <member name="F:NModbus.SlaveExceptionCodes.IllegalDataAddress">
+            <summary>
+            The data address received in the query is not an allowable address for the slave. More specifically, the combination of reference number and transfer length is invalid. For a controller with 100 registers, a request with offset 96 and length 4 would succeed, a request with offset 96 and length 5 will generate exception 02.
+            </summary>
+        </member>
+        <member name="F:NModbus.SlaveExceptionCodes.IllegalDataValue">
+            <summary>
+            A value contained in the query data field is not an allowable value for the slave.  This indicates a fault in the structure of remainder of a complex request, such as that the implied length is incorrect. It specifically does NOT mean that a data item submitted for storage in a register has a value outside the expectation of the application program, since the MODBUS protocol is unaware of the significance of any particular value of any particular register.
+            </summary>
+        </member>
+        <member name="F:NModbus.SlaveExceptionCodes.SlaveDeviceFailure">
+            <summary>
+            An unrecoverable error occurred while the slave was attempting to perform the requested action.
+            </summary>
+        </member>
+        <member name="F:NModbus.SlaveExceptionCodes.Acknowledge">
+            <summary>
+            Specialized use in conjunction with programming commands.
+            
+            The slave has accepted the request and is processing it, but a long duration of time will be required to do so.T
+            his response is returned to prevent a timeout error from occurring in the master.The master can next issue a 
+            Poll Program Complete message to determine if processing is completed.
+            </summary>
+        </member>
+        <member name="F:NModbus.SlaveExceptionCodes.SlaveDeviceBusy">
+            <summary>
+            Specialized use in conjunction with programming commands.
+            The slave is engaged in processing a long-duration program command.The master should retransmit 
+            the message later when the slave is free.
+            </summary>
+        </member>
+        <member name="T:NModbus.Utility.DiscriminatedUnionOption">
+            <summary>
+                Possible options for DiscriminatedUnion type.
+            </summary>
+        </member>
+        <member name="F:NModbus.Utility.DiscriminatedUnionOption.A">
+            <summary>
+                Option A.
+            </summary>
+        </member>
+        <member name="F:NModbus.Utility.DiscriminatedUnionOption.B">
+            <summary>
+                Option B.
+            </summary>
+        </member>
+        <member name="T:NModbus.Utility.DiscriminatedUnion`2">
+            <summary>
+                A data type that can store one of two possible strongly typed options.
+            </summary>
+            <typeparam name="TA">The type of option A.</typeparam>
+            <typeparam name="TB">The type of option B.</typeparam>
+        </member>
+        <member name="P:NModbus.Utility.DiscriminatedUnion`2.A">
+            <summary>
+                Gets the value of option A.
+            </summary>
+        </member>
+        <member name="P:NModbus.Utility.DiscriminatedUnion`2.B">
+            <summary>
+                Gets the value of option B.
+            </summary>
+        </member>
+        <member name="P:NModbus.Utility.DiscriminatedUnion`2.Option">
+            <summary>
+                Gets the discriminated value option set for this instance.
+            </summary>
+        </member>
+        <member name="M:NModbus.Utility.DiscriminatedUnion`2.CreateA(`0)">
+            <summary>
+                Factory method for creating DiscriminatedUnion with option A set.
+            </summary>
+        </member>
+        <member name="M:NModbus.Utility.DiscriminatedUnion`2.CreateB(`1)">
+            <summary>
+                Factory method for creating DiscriminatedUnion with option B set.
+            </summary>
+        </member>
+        <member name="M:NModbus.Utility.DiscriminatedUnion`2.ToString">
+            <summary>
+                Returns a <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </summary>
+            <returns>
+                A <see cref="T:System.String" /> that represents the current <see cref="T:System.Object" />.
+            </returns>
+        </member>
+        <member name="T:NModbus.Utility.ModbusUtility">
+            <summary>
+                Modbus utility methods.
+            </summary>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.GetDouble(System.UInt16,System.UInt16,System.UInt16,System.UInt16)">
+            <summary>
+                Converts four UInt16 values into a IEEE 64 floating point format.
+            </summary>
+            <param name="b3">Highest-order ushort value.</param>
+            <param name="b2">Second-to-highest-order ushort value.</param>
+            <param name="b1">Second-to-lowest-order ushort value.</param>
+            <param name="b0">Lowest-order ushort value.</param>
+            <returns>IEEE 64 floating point value.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.GetSingle(System.UInt16,System.UInt16)">
+            <summary>
+                Converts two UInt16 values into a IEEE 32 floating point format.
+            </summary>
+            <param name="highOrderValue">High order ushort value.</param>
+            <param name="lowOrderValue">Low order ushort value.</param>
+            <returns>IEEE 32 floating point value.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.GetUInt32(System.UInt16,System.UInt16)">
+            <summary>
+                Converts two UInt16 values into a UInt32.
+            </summary>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.GetAsciiBytes(System.Byte[])">
+            <summary>
+                Converts an array of bytes to an ASCII byte array.
+            </summary>
+            <param name="numbers">The byte array.</param>
+            <returns>An array of ASCII byte values.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.GetAsciiBytes(System.UInt16[])">
+            <summary>
+                Converts an array of UInt16 to an ASCII byte array.
+            </summary>
+            <param name="numbers">The ushort array.</param>
+            <returns>An array of ASCII byte values.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.NetworkBytesToHostUInt16(System.Byte[])">
+            <summary>
+                Converts a network order byte array to an array of UInt16 values in host order.
+            </summary>
+            <param name="networkBytes">The network order byte array.</param>
+            <returns>The host order ushort array.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.HexToBytes(System.String)">
+            <summary>
+                Converts a hex string to a byte array.
+            </summary>
+            <param name="hex">The hex string.</param>
+            <returns>Array of bytes.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.CalculateLrc(System.Byte[])">
+            <summary>
+                Calculate Longitudinal Redundancy Check.
+            </summary>
+            <param name="data">The data used in LRC.</param>
+            <returns>LRC value.</returns>
+        </member>
+        <member name="M:NModbus.Utility.ModbusUtility.CalculateCrc(System.Byte[])">
+            <summary>
+                Calculate Cyclical Redundancy Check.
+            </summary>
+            <param name="data">The data used in CRC.</param>
+            <returns>CRC value.</returns>
+        </member>
+    </members>
+</doc>
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/process/TaskProcess.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/process/TaskProcess.cs
index c5c8430..566d1c4 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/process/TaskProcess.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/process/TaskProcess.cs
@@ -5,6 +5,7 @@
 using HH.WCS.JiaTong.LISTA.process;
 using HH.WCS.JiaTong.util;
 using HH.WCS.JiaTong.wms;
+using Microsoft.Owin.BuilderProperties;
 using Newtonsoft.Json;
 using SqlSugar;
 using System;
@@ -14,6 +15,7 @@
 using System.Linq;
 using System.Security.Cryptography;
 using System.Threading;
+using System.Threading.Tasks;
 using static HH.WCS.JiaTong.api.ApiModel;
 using static HH.WCS.JiaTong.LISTA.process.HttpModel;
 
@@ -111,7 +113,34 @@
                         //璇锋眰鍙栬揣锛�                         type = 1;
                         loc = TN_Task.S_START_LOC;
-                        if (TN_Task.Z_TYPE == 4)//鍘熸潗鏂欏簱鍥借嚜瀹夊叏浜や簰
+                        if (TN_Task.S_TYPE.Contains("鐢垫2"))
+                        {
+                            var device = Settings.deviceInfos.Where(a => a.TN_Location == TN_Task.S_START_LOC).FirstOrDefault();
+                            var EndLoc = LocationHelper.GetLocByLoc(TN_Task.S_END_LOC);
+                            if (device == null)
+                            {
+                                LogHelper.Info($"鏍规嵁浠诲姟璧风偣:{TN_Task.S_START_LOC},鏈壘鍒板搴旂數姊厤缃枃浠�);
+                            }
+                            if (EndLoc == null)
+                            {
+                                LogHelper.Info($"鏍规嵁浠诲姟缁堢偣:{TN_Task.S_END_LOC},鏈壘鍒板搴旇揣浣�);
+                            }
+                            var value = ModbusHelper.ReadHoldingRegisters(40005, 1, device.address, 1024);
+                            var value2 = ModbusHelper.ReadHoldingRegisters(40101, 1, device.address, 1024);
+                            if (value[0] == EndLoc.N_LAYER && value2[0] == 2)
+                            {
+                                NDCApi.ChangeOrderParam(TN_Task.S_CODE.Trim(), 6, "1");
+                            }
+                            else
+                            {
+                                ModbusHelper.WriteSingleRegister(40089, EndLoc.N_LAYER, device.address, 1024);
+                                ModbusHelper.WriteSingleRegister(40101, 2, device.address, 1024);
+                                ModbusHelper.WriteSingleRegister(40003, 2, device.address, 1024);
+                                ModbusHelper.WriteSingleRegister(40102, 1, device.address, 1024);
+                            }
+
+                        }
+                        else if (TN_Task.Z_TYPE == 4)//鍘熸潗鏂欏簱鍥借嚜瀹夊叏浜や簰
                         {
                             if (GZOperateReqByPost(url, TN_Task.S_EQ_NO, loc, type))
                             {
@@ -200,9 +229,37 @@
                         //璇锋眰鍗歌揣
                         type = 2;
                         loc = TN_Task.S_END_LOC;
-                        if (TN_Task.Z_TYPE == 4)//鍘熸潗鏂欏簱鍥借嚜瀹夊叏浜や簰
+                        if (TN_Task.S_TYPE.Contains("鐢垫1"))
                         {
-                            loc = TN_Task.S_END_LOC;
+                            var device = Settings.deviceInfos.Where(a => a.TN_Location == TN_Task.S_END_LOC).FirstOrDefault();
+                            var startloc = LocationHelper.GetLocByLoc(TN_Task.S_START_LOC);
+                            if (device == null)
+                            {
+                                LogHelper.Info($"鏍规嵁浠诲姟缁堢偣:{TN_Task.S_END_LOC},鏈壘鍒板搴旂數姊厤缃枃浠�);
+                            }
+                            if (startloc == null)
+                            {
+                                LogHelper.Info($"鏍规嵁浠诲姟璧风偣:{TN_Task.S_START_LOC},鏈壘鍒板搴旇揣浣�);
+                            }
+                            var value = ModbusHelper.ReadHoldingRegisters(40005, 1, device.address, 1024);
+                            var value2 = ModbusHelper.ReadHoldingRegisters(40101, 1, device.address, 1024);
+                            if (value[0] == startloc.N_LAYER && value2[0] == 2)
+                            {
+                                NDCApi.ChangeOrderParam(TN_Task.S_CODE.Trim(), 6, "1");
+                            }
+                            else
+                            {
+                                ModbusHelper.WriteSingleRegister(40101, 2, device.address, 1024);
+                                ModbusHelper.WriteSingleRegister(40003, 2, device.address, 1024);
+                                ModbusHelper.WriteSingleRegister(40089, startloc.N_LAYER, device.address, 1024);
+                                ModbusHelper.WriteSingleRegister(40102, 1, device.address, 1024);
+                            }
+
+                        }
+                        else if (TN_Task.Z_TYPE == 4)//鍘熸潗鏂欏簱鍥借嚜瀹夊叏浜や簰
+                        {
+
+                            // loc = TN_Task.S_END_LOC;
                             if (GZOperateReqByPost(url, TN_Task.S_EQ_NO, loc, type))
                             {
                                 // NDCHelper.ChangeParam(TN_Task.S_CODE.Trim(), 1103, 18);
@@ -220,7 +277,34 @@
                     if (model.state == 1104)
                     {
                         type = 4;
-                        if (TN_Task.Z_TYPE == 4)//鍘熸潗鏂欏簱鍥借嚜瀹夊叏浜や簰
+                        if (TN_Task.S_TYPE.Contains("鐢垫1"))
+                        {
+                            var db = new SqlHelper<object>().GetInstance();
+                            var device = Settings.deviceInfos.Where(a => a.TN_Location == TN_Task.S_END_LOC).FirstOrDefault();
+                            var mstbyEqno = db.Queryable<WCSTask>().Where(a => a.S_EQ_NO == TN_Task.S_EQ_NO && a.S_TYPE.Contains("鐢垫2")).First();
+                            if (mstbyEqno != null)
+                            {
+                                var Endloc = LocationHelper.GetLocByLoc(mstbyEqno.S_END_LOC);
+                                // var startloc = LocationHelper.GetLocByLoc(TN_Task.S_START_LOC);
+                                if (device == null)
+                                {
+                                    LogHelper.Info($"鏍规嵁浠诲姟缁堢偣:{TN_Task.S_END_LOC},鏈壘鍒板搴旂數姊厤缃枃浠�);
+                                }
+                                if (Endloc == null)
+                                {
+                                    LogHelper.Info($"鏍规嵁浠诲姟缁堢偣:{mstbyEqno.S_END_LOC},鏈壘鍒板搴旇揣浣�);
+                                }
+                                ModbusHelper.WriteSingleRegister(40089, Endloc.N_LAYER, device.address, 1024);
+                                ModbusHelper.WriteSingleRegister(40102, 1, device.address, 1024);
+
+                            }
+                            else
+                            {
+                                LogHelper.Info($"鏍规嵁浠诲姟鏉ユ簮锛歿TN_Task.S_EQ_NO}锛屾湭鎵惧埌鐢垫2浠诲姟");
+                            }
+
+                        }
+                        else if (TN_Task.Z_TYPE == 4)//鍘熸潗鏂欏簱鍥借嚜瀹夊叏浜や簰
                         {
                             loc = TN_Task.S_END_LOC;
                             if (GZOperateReqByPost(url, TN_Task.S_EQ_NO, loc, type))
@@ -431,145 +515,7 @@
         }
         private static object locLocker = new object();
 
-        /// <summary> 
-        /// 鍫嗗彔搴撳尯鍑哄叆搴撲换鍔$敵璇�-        /// </summary>
-        /// <param name="ls"></param>
-        /// <param name="cntrs"></param>
-        /// <param name="area"></param>
-        /// <param name="itemCode"></param>
-        /// <param name="itemBatch"></param>
-        /// <param name="taskType"></param>
-        /// <param name="insStock"></param>
-        /// <returns></returns>
-        internal static bool ApplyTN_Task(Location ls, ref List<string> cntrs, string area, string itemCode, string itemBatch, string taskType, bool insStock = true)
-        {
-            var result = false;
-            lock (locLocker)
-            {
-                try
-                {
-                    if (insStock)
-                    {
-                        Console.WriteLine($"MoboxHelperCreateTask: {area}-{itemCode}-{itemBatch}-{taskType}");
-                        var endTN_Location = GetLocation4In(area, itemCode, itemBatch, 3);
-                        if (endTN_Location != null)
-                        {
-                            var endLayer = endTN_Location.N_CURRENT_NUM == 0 ? 1 : 2;
-                            var taskNo = DateTime.Now.Ticks.ToString();
-                            result = TaskProcess.CreateTransport(ls.S_CODE, endTN_Location.S_CODE, taskType, cntrs, 1, endLayer, 3, 70);
-                        }
-                        else
-                        {
-                            Console.WriteLine($"MoboxHelperCreateTask: 鏈壘鍒扮粓鐐硅揣浣�);
-                        }
-                    }
-                    else
-                    {
-                        var startTN_Location = GetLocation4Out(area, itemCode, itemBatch, 3);
-                        if (startTN_Location != null)
-                        {
-                            var startLayer = startTN_Location.N_CURRENT_NUM <= 3 ? 1 : 2;
-                            var taskNo = DateTime.Now.Ticks.ToString();
-                            var carryCount = startTN_Location.N_CURRENT_NUM > 3 ? startTN_Location.N_CURRENT_NUM - 3 : startTN_Location.N_CURRENT_NUM;
-                            //鍑哄簱瑕佷粠璧风偣鑾峰彇鎵樼洏
-                            var cntrList = LocationHelper.GetLocCntr(startTN_Location.S_CODE);
-                            if (cntrList.Count == startTN_Location.N_CURRENT_NUM)
-                            {
-                                cntrs = cntrList.OrderByDescending(a => a.T_CREATE).Take(carryCount).Select(a => a.S_CNTR_CODE.Trim()).ToList();
-                                result = TaskProcess.CreateTransport(startTN_Location.S_CODE, ls.S_CODE, taskType, cntrs, startLayer, 1, carryCount, 65);
-                            }
-                            else
-                            {
-                                Console.WriteLine($"璧风偣鎵樼洏鏁伴噺鍜岃揣浣嶅鍣ㄨ〃涓嶇鍚堬紝璇锋鏌ャ�璐т綅琛ㄣ�鍜屻�璐т綅瀹瑰櫒琛ㄣ�");
-                            }
 
-                        }
-                    }
-                }
-                catch (Exception ex)
-                {
-
-                    Console.WriteLine("MoboxHelperCreateTask:" + ex.Message);
-                    LogHelper.Error("MoboxHelperCreateTask:" + ex.Message, ex);
-                }
-            }
-            return result;
-
-
-        }
-
-        private static Location GetLocation4Out(string area, string itemCode, string itemBatch, int v)
-        {
-            throw new NotImplementedException();
-        }
-
-        private static Location GetLocation4In(string area, string itemCode, string itemBatch, int v)
-        {
-            throw new NotImplementedException();
-        }
-
-        /// <summary>
-        /// 鏅�璐ф灦鍖虹殑鍑哄叆搴撶敵璇�-        /// </summary>
-        /// <param name="ls"></param>
-        /// <param name="cntrs"></param>
-        /// <param name="area"></param>
-        /// <param name="taskType"></param>
-        /// <param name="itemCode"></param>
-        /// <param name="insStock"></param>
-        /// <returns></returns>
-        internal static bool ApplyNormalTN_Task(Location ls, ref List<string> cntrs, string area, string taskType, string itemCode, bool insStock = true)
-        {
-            var result = false;
-            lock (locLocker)
-            {
-                try
-                {
-                    if (insStock)
-                    {
-                        Console.WriteLine($"MoboxHelperCreateTask: {area}-{taskType}");
-                        var endTN_Location = new Location();
-                        if (endTN_Location != null)
-                        {
-                            var taskNo = DateTime.Now.Ticks.ToString();
-                            result = TaskProcess.CreateTransport(ls.S_CODE, endTN_Location.S_CODE, taskType, cntrs, 70);
-                        }
-                        else
-                        {
-                            Console.WriteLine($"MoboxHelperCreateTask: 鏈壘鍒扮粓鐐硅揣浣�);
-                        }
-                    }
-                    else
-                    {
-                        var startTN_Location = new Location();
-                        if (startTN_Location != null)
-                        {
-                            //鍑哄簱瑕佷粠璧风偣鑾峰彇鎵樼洏
-                            var cntrList = LocationHelper.GetLocCntr(startTN_Location.S_CODE);
-                            if (cntrList.Count == startTN_Location.N_CURRENT_NUM)
-                            {
-                                result = TaskProcess.CreateTransport(startTN_Location.S_CODE, ls.S_CODE, taskType, new List<string> { cntrList[0].S_CNTR_CODE }, 65);
-                            }
-                            else
-                            {
-                                Console.WriteLine($"璧风偣鎵樼洏鏁伴噺鍜岃揣浣嶅鍣ㄨ〃涓嶇鍚堬紝璇锋鏌ャ�璐т綅琛ㄣ�鍜屻�璐т綅瀹瑰櫒琛ㄣ�");
-                            }
-
-                        }
-                    }
-                }
-                catch (Exception ex)
-                {
-
-                    Console.WriteLine("MoboxHelperCreateTask:" + ex.Message);
-                    LogHelper.Error("MoboxHelperCreateTask:" + ex.Message, ex);
-                }
-            }
-            return result;
-
-
-        }
         /// <summary>
         /// 鎺ㄩ�浠诲姟
         /// </summary>
@@ -624,6 +570,23 @@
                     WCSHelper.UpdateStatus(mst);//鏇存柊浠诲姟鐘舵�
                     result = true;
                     LogHelper.Info($"NDC鎺ㄩ�浠诲姟鎴愬姛 {mst.S_CODE}start= {mst.S_START_LOC} + end = {mst.S_END_LOC}");
+                    if (mst.S_TYPE.Contains("鐢垫1"))
+                    {
+                        var device = Settings.deviceInfos.Where(a => a.TN_Location == mst.S_END_LOC).FirstOrDefault();
+                        var loc = LocationHelper.GetLocByLoc(mst.S_START_LOC);
+                        if (device == null)
+                        {
+                            LogHelper.Info($"鏍规嵁浠诲姟缁堢偣:{mst.S_END_LOC},鏈壘鍒板搴旂數姊厤缃枃浠�);
+                        }
+                        if (loc == null)
+                        {
+                            LogHelper.Info($"鏍规嵁浠诲姟璧风偣:{mst.S_START_LOC},鏈壘鍒板搴旇揣浣�);
+                        }
+                        ModbusHelper.WriteSingleRegister(40089, loc.N_LAYER, device.address, 1024);
+                        ModbusHelper.WriteSingleRegister(40102, 1, device.address, 1024);
+
+
+                    }
                 }
                 else
                 {
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/wms/ContainerHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/wms/ContainerHelper.cs
index 10c4061..5494d4a 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/wms/ContainerHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/wms/ContainerHelper.cs
@@ -195,6 +195,7 @@
                     else
                     {
                         LogHelper.Info($"鎵樼洏{cntr}锛氭坊鍔犵墿鏂檣itemcode}缁戝畾鍏崇郴澶辫触");
+                        res = false;
                     }
 
                 }
@@ -215,6 +216,7 @@
                     else
                     {
                         LogHelper.Info($"鎵樼洏{cntr}锛氭洿鏂扮墿鏂檣itemcode}缁戝畾鍏崇郴澶辫触");
+                        res = false;
                     }
                 }
                 var con = db.Queryable<Container>().Where(a => a.S_CODE.Trim() == cntr).First();
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/wms/LocationHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/wms/LocationHelper.cs
index 1fbc2fc..ada1f10 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/wms/LocationHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/wms/LocationHelper.cs
@@ -3,6 +3,7 @@
 using NLog.Fluent;
 using SqlSugar;
 using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -262,7 +263,7 @@
                 }
                 LogHelper.Info($"GetLocByItemCode=>鏃犱綑鏂�鏌ユ壘鍏ㄩ儴{JsonConvert.SerializeObject(queryable.ToList())}");
 
-              
+
                 if (string.IsNullOrEmpty(lev))
                 {
                     locs = queryable.ToList();
@@ -299,6 +300,34 @@
             return loc;
         }
 
+        /// <summary>
+        /// 鍒嗛厤鐢垫璐т綅
+        /// </summary>
+        /// <returns></returns>
+        internal static Location GetElevatorLoc()
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            Location location = new Location();
+            //鏌ユ壘鍏ㄩ儴鐢垫锛屽垎閰嶄换鍔℃渶灏戠殑鐢垫
+            var devices = Settings.deviceInfos.Where(a => a.deviceType == 2 && a.enable == 1).ToList();
+            string[] state = new string[] { "鎵ц涓�, "寮�鍙栬揣", "鍙栬揣瀹屾垚" };
+            Dictionary<int, string> dics = new Dictionary<int, string>();
+            foreach (var deviceInfo in devices)
+            {
+                int mst = db.Queryable<WCSTask>().Where(a => a.S_TYPE.Contains("鐢垫") && state.Contains(a.S_B_STATE)).Count();
+                dics.Add(mst, deviceInfo.TN_Location);
+            }
+            if (dics.Count > 0)
+            {
+                var dic = dics.OrderBy(a => a.Key).First();
+                location = db.Queryable<Location>().Where(a => a.S_CODE == dic.Value).First();
+                if (location == null)
+                {
+                    LogHelper.Info($"鏍规嵁璐т綅缂栫爜:{dic.Value},鏈壘鍒板搴旇揣浣�);
+                }
+            }
+            return location;
+        }
         /// <summary>
         /// 鏍规嵁鐗╂枡缂栫爜锛屼粨搴撶紪鐮佽幏鍙栨墭鐩樻暟閲�         /// </summary>
@@ -478,15 +507,15 @@
         }
 
         /// <summary>
-        /// 鏍规嵁璐т綅闆嗗悎鑾峰彇 娌℃湁瀹瑰櫒 娌℃湁閿佺殑璐т綅
+        /// 鏍规嵁璐т綅鑾峰彇璐т綅淇℃伅
         /// </summary>
         /// <param name="loc"></param>
         /// <returns></returns>
-        internal static List<Location> GetLocListEmptyFree(List<string> loc)
+        internal static Location GetLocByLoc(string loc)
         {
             //1.0 鏌ヨ揣浣嶅鍣ㄨ〃
             var db = new SqlHelper<object>().GetInstance();
-            var list = db.Queryable<Location>().Where(a => loc.Contains(a.S_CODE) && a.N_CURRENT_NUM == 0 && a.S_LOCK_STATE.Trim() == "鏃�).ToList();
+            var list = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == loc).First();
             return list;
 
         }

--
Gitblit v1.9.1