From 1fb5bbbd57fcc62e5dfb38a058a0aeca0118d643 Mon Sep 17 00:00:00 2001
From: cjs <2216046164@qq.com>
Date: 星期三, 28 五月 2025 09:28:40 +0800
Subject: [PATCH] ams

---
 ams/Hanhe.iWCS.IndonesiaGLMProtocol/ApiHelper.cs                                             |  822 +++
 ams/Hanhe.iWCS.IndonesiaGLMProtocol/Settings.cs                                              |  535 ++
 ams/Hanhe.iWCS.IndonesiaGLMProtocol/PLCControl.cs                                            | 3616 +++++++++++++++++
 ams/Hanhe.iWCS.IndonesiaGLMTCP/Properties/AssemblyInfo.cs                                    |   36 
 ams/Hanhe.iWCS.IndonesiaGLMProtocol/settings.xml                                             |  296 +
 ams/Hanhe.iWCS.IndonesiaGLMProtocol/packages.config                                          |   11 
 ams/Hanhe.iWCS.IndonesiaGLMProtocol/OITcpHelper.cs                                           |  513 ++
 ams/Hanhe.iWCS.IndonesiaGLMTCP/XmlHelper.cs                                                  |   39 
 ams/Hanhe.iWCS.IndonesiaGLMProtocol/TSHelper.cs                                              |  246 +
 ams/Hanhe.iWCS.IndonesiaGLMProtocol/XmlHelper.cs                                             |   39 
 ams/Hanhe.iWCS.IndonesiaGLMProtocol/ProtocolAnalysis.cs                                      |  828 +++
 ams/Hanhe.iWCS.IndonesiaGLMProtocol/MESHelper.cs                                             |  819 +++
 ams/Hanhe.iWCS.IndonesiaGLMProtocol/SqlHelper.cs                                             |  105 
 ams/Hanhe.iWCS.IndonesiaGLMTCP/WCSSession.cs                                                 |   69 
 ams/Hanhe.iWCS.IndonesiaGLMProtocol/.vs/Hanhe.iWCS.IndonesiaGLMProtocol.csproj.dtbcache.json |    1 
 ams/Hanhe.iWCS.IndonesiaGLMProtocol/ApiController.cs                                         |  203 
 ams/Hanhe.iWCS.IndonesiaGLMProtocol/app.config                                               |   28 
 ams/Hanhe.iWCS.IndonesiaGLMProtocol/Properties/AssemblyInfo.cs                               |   36 
 ams/Hanhe.iWCS.IndonesiaGLMProtocol/ERPService.cs                                            | 1184 +++++
 ams/Hanhe.iWCS.IndonesiaGLMProtocol/AMSHelper.cs                                             |  307 +
 ams/Hanhe.iWCS.IndonesiaGLMTCP/WCSServer.cs                                                  |  119 
 ams/Hanhe.iWCS.IndonesiaGLMProtocol/Test.cs                                                  |   57 
 ams/Hanhe.iWCS.IndonesiaGLMProtocol/Startup.cs                                               |   25 
 ams/Hanhe.iWCS.IndonesiaGLMProtocol/ProcessHelper.cs                                         | 1085 +++++
 ams/Hanhe.iWCS.IndonesiaGLMTCP/Hanhe.iWCS.IndonesiaGLMTCP.csproj                             |   84 
 ams/Hanhe.iWCS.IndonesiaGLMProtocol/readme.txt                                               |    7 
 ams/Hanhe.iWCS.IndonesiaGLMProtocol/Hanhe.iWCS.IndonesiaGLMProtocol.csproj                   |  155 
 ams/Hanhe.iWCS.IndonesiaGLMProtocol/WebApiHelper.cs                                          |   99 
 ams/Hanhe.iWCS.IndonesiaGLMTCP/.vs/Hanhe.iWCS.IndonesiaGLMTCP.csproj.dtbcache.json           |    1 
 ams/Hanhe.iWCS.IndonesiaGLMProtocol/EnentListen.cs                                           |  326 +
 ams/Hanhe.iWCS.IndonesiaGLMProtocol/WMSHelper.cs                                             |  805 +++
 ams/Hanhe.iWCS.IndonesiaGLMTCP/SessionInstance.cs                                            |  195 
 32 files changed, 12,691 insertions(+), 0 deletions(-)

diff --git a/ams/Hanhe.iWCS.IndonesiaGLMProtocol/.vs/Hanhe.iWCS.IndonesiaGLMProtocol.csproj.dtbcache.json b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/.vs/Hanhe.iWCS.IndonesiaGLMProtocol.csproj.dtbcache.json
new file mode 100644
index 0000000..6d8e684
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/.vs/Hanhe.iWCS.IndonesiaGLMProtocol.csproj.dtbcache.json
@@ -0,0 +1 @@
+{"RootPath":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\鍗板凹鏍兼灄缇嶾\Hanhe.iWCS.IndonesiaGLMProtocol","ProjectFileName":"Hanhe.iWCS.IndonesiaGLMProtocol.csproj","Configuration":"Debug|AnyCPU","FrameworkPath":"","Sources":[{"SourceFile":"ApiHelper.cs"},{"SourceFile":"AMSHelper.cs"},{"SourceFile":"ERPService.cs"},{"SourceFile":"MESHelper.cs"},{"SourceFile":"OITcpHelper.cs"},{"SourceFile":"Settings.cs"},{"SourceFile":"EnentListen.cs"},{"SourceFile":"ProcessHelper.cs"},{"SourceFile":"SqlHelper.cs"},{"SourceFile":"Test.cs"},{"SourceFile":"WMSHelper.cs"},{"SourceFile":"PLCControl.cs"},{"SourceFile":"Properties\\AssemblyInfo.cs"},{"SourceFile":"ProtocolAnalysis.cs"},{"SourceFile":"Startup.cs"},{"SourceFile":"TSHelper.cs"},{"SourceFile":"ApiController.cs"},{"SourceFile":"WebApiHelper.cs"},{"SourceFile":"XmlHelper.cs"},{"SourceFile":"obj\\Debug\\.NETFramework,Version=v4.5.1.AssemblyAttributes.cs"}],"References":[{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\AGVProvider\\Hanhe.iWCS.AGVWebService\\bin\\Debug\\Hanhe.iWCS.AGVWebService.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":true,"ProjectPath":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\AGVProvider\\Hanhe.iWCS.AGVWebService\\bin\\Debug\\Hanhe.iWCS.AGVWebService.dll"},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\Hanhe.iWCS.Business\\bin\\Debug\\Hanhe.iWCS.Business.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":true,"ProjectPath":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\Hanhe.iWCS.Business\\bin\\Debug\\Hanhe.iWCS.Business.dll"},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\姹夊拰鏅鸿兘浜屾寮�彂鍖匼\Hanhe.iWCS.Common.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\姹夊拰鏅鸿兘浜屾寮�彂鍖匼\Hanhe.iWCS.DeviceDriver.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\姹夊拰鏅鸿兘浜屾寮�彂鍖匼\Hanhe.iWCS.Event.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\姹夊拰鏅鸿兘浜屾寮�彂鍖匼\Hanhe.iWCS.Factroy.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\鍗板凹鏍兼灄缇嶾\Hanhe.iWCS.IndonesiaGLMTCP\\bin\\Debug\\Hanhe.iWCS.IndonesiaGLMTCP.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\姹夊拰鏅鸿兘浜屾寮�彂鍖匼\Hanhe.iWCS.Interface.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\姹夊拰鏅鸿兘浜屾寮�彂鍖匼\Hanhe.iWCS.MData.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\姹夊拰鏅鸿兘浜屾寮�彂鍖匼\Hanhe.iWCS.Model.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\packages\\log4net.2.0.5\\lib\\net45-full\\log4net.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\Microsoft.CSharp\\v4.0_4.0.0.0__b03f5f7f11d50a3a\\Microsoft.CSharp.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\packages\\Microsoft.Owin.4.1.1\\lib\\net45\\Microsoft.Owin.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\packages\\Microsoft.Owin.Host.HttpListener.4.1.1\\lib\\net45\\Microsoft.Owin.Host.HttpListener.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\packages\\Microsoft.Owin.Hosting.4.1.1\\lib\\net45\\Microsoft.Owin.Hosting.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\Microsoft.VisualBasic\\v4.0_10.0.0.0__b03f5f7f11d50a3a\\Microsoft.VisualBasic.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\packages\\MongoDB.Bson.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\packages\\MongoDB.Driver.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\WINDOWS\\Microsoft.NET\\Framework\\v4.0.30319\\mscorlib.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\packages\\MySql.Data.6.7.9\\lib\\net45\\MySql.Data.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\packages\\Newtonsoft.Json.6.0.4\\lib\\net45\\Newtonsoft.Json.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\packages\\Owin.1.0\\lib\\net40\\Owin.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\packages\\SqlSugar.5.0.1.7\\lib\\SqlSugar.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Configuration\\v4.0_4.0.0.0__b03f5f7f11d50a3a\\System.Configuration.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Core\\v4.0_4.0.0.0__b77a5c561934e089\\System.Core.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Data.DataSetExtensions\\v4.0_4.0.0.0__b77a5c561934e089\\System.Data.DataSetExtensions.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_64\\System.Data\\v4.0_4.0.0.0__b77a5c561934e089\\System.Data.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System\\v4.0_4.0.0.0__b77a5c561934e089\\System.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Net.Http\\v4.0_4.0.0.0__b03f5f7f11d50a3a\\System.Net.Http.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\packages\\Microsoft.AspNet.WebApi.Client.5.2.7\\lib\\net45\\System.Net.Http.Formatting.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_64\\System.Web\\v4.0_4.0.0.0__b03f5f7f11d50a3a\\System.Web.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\packages\\Microsoft.AspNet.WebApi.Core.5.2.7\\lib\\net45\\System.Web.Http.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\packages\\Microsoft.AspNet.WebApi.Owin.5.2.7\\lib\\net45\\System.Web.Http.Owin.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Xml\\v4.0_4.0.0.0__b77a5c561934e089\\System.Xml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Xml.Linq\\v4.0_4.0.0.0__b77a5c561934e089\\System.Xml.Linq.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""}],"Analyzers":[],"Outputs":[{"OutputItemFullPath":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\鍗板凹鏍兼灄缇嶾\Hanhe.iWCS.IndonesiaGLMProtocol\\bin\\Debug\\Hanhe.iWCS.IndonesiaGLMProtocol.dll","OutputItemRelativePath":"Hanhe.iWCS.IndonesiaGLMProtocol.dll"},{"OutputItemFullPath":"","OutputItemRelativePath":""}],"CopyToOutputEntries":[]}
\ No newline at end of file
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMProtocol/AMSHelper.cs b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/AMSHelper.cs
new file mode 100644
index 0000000..31c98b4
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/AMSHelper.cs
@@ -0,0 +1,307 @@
+锘縰sing Hanhe.iWCS.Business;
+using Hanhe.iWCS.Common;
+using Hanhe.iWCS.DeviceDriver;
+using Hanhe.iWCS.MData;
+using Hanhe.iWCS.Model;
+using MongoDB.Bson;
+using MongoDB.Driver;
+using MongoDB.Driver.Builders;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hanhe.iWCS.IndonesiaGLMProtocol
+{
+    public class AMSHelper
+    {
+
+        public static HHAmsExecuteResult CreateTask(string taskNo, string locationFrom, string locationTo, string type, int priorityNo, string batchNo = "",string timeStamp = "") {
+            var result = new HHAmsExecuteResult();
+            List<HHAmsTaskEntity> entities = new List<HHAmsTaskEntity>();
+            HHAmsTaskEntity entity = new HHAmsTaskEntity();
+            entity.batchNo = batchNo;
+            entity.taskNo = taskNo;
+            entity.businessType = type;
+            entity.locationFrom = locationFrom;
+            entity.locationTo = locationTo;
+            entity.priority = priorityNo;
+            entity.ext2 = timeStamp;
+            entity.deviceName = "AMS";
+            entity.sysName = "AMS";
+            entities.Add(entity);
+
+            result = AddTask(entities);
+
+            return result;
+        }
+        public static HHAmsExecuteResult AddTask(List<HHAmsTaskEntity> data) {
+            HardwareAccessObject hao = HardwareAccessHelper.Instance.GetEquipmentsHAO(Constants.WMS_DEVICE_TYPE_AMS);
+            string msg = "";
+            string feedback = "";
+
+            var param = JsonConvert.SerializeObject(data);
+            HHAmsExecuteResult amsResponse = new HHAmsExecuteResult() ;
+            if (hao != null) {
+                try {
+                    string webAPIUrl = hao._WebApiClientInstance.WebApiUrl.Replace("AmsInf", "HHAms") + "AddTask";
+                    //Console.WriteLine(webAPIUrl);
+                    feedback = new WebApiHelper().WebPost(webAPIUrl, param);
+                    if (!string.IsNullOrEmpty(feedback)) {
+                        amsResponse = JsonConvert.DeserializeObject<HHAmsExecuteResult>(feedback);
+                        //var res = feedback.Replace("{", "").Replace("}", "").Replace(":", "=").Replace(",", ";").Replace('"', ' ');
+                        if (amsResponse.success == true) {
+                            msg = "銆恆ms create task銆憇uccess锛�WebUrl=" + hao.WebUrl + "AmsInf/AddTask;param=" + param;
+                        }
+                        else {
+                            string errMsg = amsResponse.errMsg;
+                            msg = "銆恆ms create task銆慺ail锛乪rr=" + errMsg + ";WebUrl=" + webAPIUrl + ";param=" + param;
+                        }
+                    }
+                    else {
+                        string errMsg = "can't find the address";
+                        msg = "銆恆ms create task銆慺ail锛乪rr=" + errMsg + ";WebUrl=" + webAPIUrl + ";param=" + param;
+                    }   
+                }
+                catch (Exception e) {
+                    CMMLog.Error(string.Format("銆恆ms create task銆慺ail锛乪rr={0}", e.Message), e);
+                }
+            }
+            else {
+                msg = string.Format("ams create task fail锛宎ms workcenter not set锛�);
+            }
+            if (msg != "") {
+                CMMLog.Info(msg);
+            }
+            return amsResponse;
+
+            //{"Success":false,"ErrorCode":"1","FailList":[{"Agv_TaskNo":"sample string 5","Error_Code":"1","Err_Msg":"鏈厤缃浉鍏宠澶囩殑浜嬩欢瑙i噴锛�},{"Agv_TaskNo":"sample string 5","Error_Code":"1","Err_Msg":"鏈厤缃浉鍏宠澶囩殑浜嬩欢瑙i噴锛�},{"Agv_TaskNo":"sample string 5","Error_Code":"1","Err_Msg":"鏈厤缃浉鍏宠澶囩殑浜嬩欢瑙i噴锛�}]}
+        }
+
+        /// <summary>
+        /// 鍒涘缓浠诲姟
+        /// </summary>
+        /// <param name="jasonStr"></param>
+        /// <returns></returns>
+        private static bool CreateAMSTask(string jasonStr) {
+            bool bResult = false;
+            HardwareAccessObject AMSCreateHao = HardwareAccessHelper.Instance.GetEquipmentsHAO(Constants.WMS_DEVICE_TYPE_AMS);
+            if (AMSCreateHao != null) {
+                try {
+                    string webAPIUrl = AMSCreateHao._WebApiClientInstance.WebApiUrl.Replace("AmsInf", "HHAms");
+                    string amsReturnValue = AMSCreateHao._WebApiClientInstance.GetWebRequest(webAPIUrl + "AddTask", jasonStr, "application/json");
+                    var dynamicObject = JsonConvert.DeserializeObject<dynamic>(amsReturnValue);
+                    if (dynamicObject.success == "True" || dynamicObject.success == "true") {
+                        bResult = true;
+                        CMMLog.Info("AMS浠诲姟鍒涘缓鎴愬姛;璇锋眰鍙傛暟=" + jasonStr + "");
+                    }
+                    else {
+                        CMMLog.Info("AMS浠诲姟鍒涘缓澶辫触;璇锋眰鍙傛暟=" + jasonStr + "");
+                    }
+                }
+                catch (Exception ex) {
+                    CMMLog.Info("AMS浠诲姟鍒涘缓寮傚父;璇锋眰鍙傛暟=" + jasonStr + ";Exception=" + ex.Message);
+                }
+            }
+            return bResult;
+        }
+
+        /// <summary>
+        /// 鍙樻洿浠诲姟鐩殑鍦�+        /// </summary>
+        /// <param name="jasonStr"></param>
+        /// <returns></returns>
+        public static bool ChangeTaskTargetBit(string jasonStr) {
+            bool bResult = false;
+            HardwareAccessObject AMSCreateHao = HardwareAccessHelper.Instance.GetEquipmentsHAO(Constants.WMS_DEVICE_TYPE_AMS);
+            if (AMSCreateHao != null) {
+                try {
+                    string amsReturnValue = AMSCreateHao._WebApiClientInstance.GetWebRequest(AMSCreateHao._WebApiClientInstance.WebApiUrl + "ChangeTaskTargetBit", jasonStr, "application/json");
+                    var dynamicObject = JsonConvert.DeserializeObject<dynamic>(amsReturnValue);
+                    if (dynamicObject.Success == "True" || dynamicObject.Success == "true") {
+                        bResult = true;
+                        CMMLog.Info("AMS鍙樻洿浠诲姟鐩殑鍦版垚鍔�璇锋眰鍙傛暟=" + jasonStr + "");
+                    }
+                    else {
+                        CMMLog.Info("AMS鍙樻洿浠诲姟鐩殑鍦板け璐�璇锋眰鍙傛暟=" + jasonStr + "");
+                    }
+                }
+                catch (Exception ex) {
+                    CMMLog.Info("AMS鍙樻洿浠诲姟鐩殑鍦板紓甯�璇锋眰鍙傛暟=" + jasonStr + ";Exception=" + ex.Message);
+                }
+            }
+            return bResult;
+        }
+
+        /// <summary>
+        /// 鍙嶉AMS鐨勭姸鎬�+        /// </summary>
+        /// <param name="taskNo"></param>
+        /// <param name="orderNo"></param>
+        /// <param name="actionCode"></param>
+        public static void SetStatus(string taskNo, int orderNo, string actionCode, string forkliftNo, bool success = false) {
+            HardwareAccessObject AMSHao = HardwareAccessHelper.Instance.GetEquipmentsHAO(Constants.WMS_DEVICE_TYPE_AMS);
+            if (AMSHao != null) {
+                //           if (actionCode == "2")
+                //           {
+                //actionCode = "瀹屾垚";
+                //           }
+                string data = "{\"TaskNo\":\"" + taskNo + "\",\"OrderIndex\":\"" + orderNo + "\",\"TaskStatus\":\"" + actionCode + "\",\"ForkliftNo\":\"" + forkliftNo + "\",\"Success\":\"" + success + "\",\"ErrorMsg\":\"\"}";
+                CMMLog.Debug(data);
+                //string resultCode = AMSHao._WebApiClientInstance.GetWebRequest(AMSHao._WebApiClientInstance.WebApiUrl + "SetStatus?jsonData=" + data);
+                WebApiHelper api = new WebApiHelper();
+                api.WebPost(AMSHao._WebApiClientInstance.WebApiUrl + "SetStatus?jsonData=" + data, "");
+            }
+        }
+
+        /// <summary>
+        /// 娑堟伅浜や簰鏃ュ織
+        /// </summary>
+        /// <param name="taskNo"></param>
+        /// <param name="orderNo"></param>
+        /// <param name="cmd"></param>
+        /// <param name="statusText"></param>
+        /// <param name="success"></param>
+        /// <param name="errMsg"></param>
+        /// <param name="createUser"></param>
+        /// <param name="createUserName"></param>
+        public static void TaskTrackLogMessage(string taskNo, string orderNo, string cmd, string statusText, string remark = "") {
+            HardwareAccessObject AMSHao = HardwareAccessHelper.Instance.GetEquipmentsHAO(Constants.WMS_DEVICE_TYPE_AMS);
+            if (AMSHao != null) {
+                string data = "{\"CN_N_ORDER\":\"" + orderNo + "\",\"CN_S_CMD\":\"" + cmd + "\",\"CN_S_CREATOR\":\"wcs\",\"CN_S_CREATOR_NAME\":\"wcs\",\"CN_S_SUCCESS\":\"true\",\"CN_S_TASK_NO\":\"" + taskNo + "\",\"CN_S_TASK_STATUS\":\"" + statusText + "\",\"CN_S_ERROR\":\"" + remark + "\"}";
+                string resultCode = AMSHao._WebApiClientInstance.GetWebRequest(AMSHao._WebApiClientInstance.WebApiUrl + "TaskTrackLogMessage?jsonData=" + data);
+            }
+        }
+
+
+
+        public static void ChangeEndBitNew(TN_I_TASK_MST mstTask, out int agvBit) {
+            string newEndBitCode = mstTask.CN_S_END_BIT;
+            agvBit = StockInstance.Instance.GetAGVCodeForBitCode(newEndBitCode);
+            UpdateEndBit(mstTask, newEndBitCode, agvBit);
+        }
+        private static void UpdateEndBit(TN_I_TASK_MST mstTask, string newEndBitCode, int agvBit) {
+            var updateBuider = Update.Set("CN_S_END_BIT", newEndBitCode);//鏂扮洰鐨勫湴
+            updateBuider = updateBuider.Set("CN_N_END_AGV_BIT", agvBit);
+            MongoDBSingleton.Instance.Update<TN_I_TASK_DTL>(Query.EQ("CN_S_TASK_NO", mstTask.CN_S_TASK_NO), updateBuider, UpdateFlags.None);
+            var query = Query.EQ("_id", mstTask._id);
+            updateBuider = Update.Set("CN_S_END_BIT", newEndBitCode).Set("Ext3", "J2SSHB199");
+            updateBuider = updateBuider.Set("CN_S_END_AGVBIT", agvBit.ToString());
+            MongoDBSingleton.Instance.Update<TN_I_TASK_MST>(query, updateBuider, UpdateFlags.None);
+        }
+
+
+        public class HHAmsTaskEntity
+        {
+            //public List<TransportInfo> transportInfo { get; set; }
+            public string batchNo { get; set; }
+            public string businessType { get; set; }
+            public string sysName { get; set; }
+            public string deviceName { get; set; }
+            public string taskNo { get; set; }
+            public string locationFrom { get; set; }
+            public string locationTo { get; set; }
+            public int priority { get; set; }
+            public string ext1 { get; set; }
+            public string ext2 { get; set; }
+            public string ext3 { get; set; }
+            //public class TransportInfo {
+            //	/// <summary>
+            //	/// 鐗╂枡缂栫爜
+            //	/// </summary>
+            //	public string itemCode { get; set; }
+
+            //	/// <summary>
+            //	/// 鐗╂枡鎵╁睍缂栫爜
+            //	/// </summary>
+            //	public string itemPCode { get; set; }
+
+            //	/// <summary>
+            //	/// 鐗╂枡鍚嶇О
+            //	/// </summary>
+            //	public string itemName { get; set; }
+
+            //	/// <summary>
+            //	/// 鎵樼洏鐮�+            //	/// </summary>
+            //	public string trayCode { get; set; }
+
+            //	/// <summary>
+            //	/// 鐗╂枡閲嶉噺
+            //	/// </summary>
+            //	public string itemWeight { get; set; }
+
+            //	/// <summary>
+            //	/// 鐗╂枡鐗瑰緛
+            //	/// </summary>
+            //	public string itemFeatures { get; set; }
+            //}
+
+        }
+        public class HHAmsExecuteResult
+        {
+            public bool success { get; set; }
+            /// <summary>
+            /// 0:鎴愬姛 1锛氭暟鎹紓甯�2锛氬凡瀛樺湪浠诲姟 3锛氱▼搴忓紓甯�+            /// </summary>
+            public string errCode { get; set; }
+            public string errMsg { get; set; }
+
+            private List<HHAmsAddTaskResult> _failList = new List<HHAmsAddTaskResult>();
+            public List<HHAmsAddTaskResult> failList {
+                get { return _failList; }
+                set { _failList = value; }
+            }
+        }
+        public class HHAmsAddTaskResult
+        {
+            public string taskNo { get; set; }
+            public string errCode { get; set; }
+            public string errMsg { get; set; }
+        }
+        public class WMSResponseModel
+        {
+            //{"success":false,"errCode":null,"errMsg":"绠楁硶杩斿洖缁撴灉搴撳瓨涓嶈冻","okList":[],"failList":[{"index":0,"errCode":null,"errMsg":"绠楁硶杩斿洖缁撴灉搴撳瓨涓嶈冻"}],"tasks":[]}
+            public bool success { get; set; }
+            public string errMsg { get; set; }
+            public string errCode { get; set; }
+            //public OKInfo[] tasks { get; set; }
+            //public FailInfo[] failList { get; set; }
+            public OKInfo[] okList { get; set; }
+            public class FailInfo
+            {
+                public int index { get; set; }
+                public string errCode { get; set; }
+                public string errMsg { get; set; }
+            }
+
+            public class OKInfo
+            {
+                public string taskNo { get; set; }
+                public string startStock { get; set; }
+                public string startArea { get; set; }
+                public string startBit { get; set; }
+                public string endStock { get; set; }
+                public string endArea { get; set; }
+                public string endBit { get; set; }
+            }
+        }
+
+
+
+
+        internal static void UpdatePriority(string taskNo, int priority) {
+            //http://localhost:60116/api/AmsInf/UpdatePriority?taskNo=12312313&priority=2
+            HardwareAccessObject AMSHao = HardwareAccessHelper.Instance.GetEquipmentsHAO(Constants.WMS_DEVICE_TYPE_AMS);
+            if (AMSHao != null) {
+                string data = string.Format("taskNo={0}&priority={1}", taskNo, priority);
+                CMMLog.Debug(data);
+                //string resultCode = AMSHao._WebApiClientInstance.GetWebRequest(AMSHao._WebApiClientInstance.WebApiUrl + "UpdatePriority?" + data);
+                WebApiHelper api = new WebApiHelper();
+                api.WebPost(AMSHao._WebApiClientInstance.WebApiUrl + "UpdatePriority?" + data, "");
+            }
+        }
+    }
+}
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMProtocol/ApiController.cs b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/ApiController.cs
new file mode 100644
index 0000000..e961035
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/ApiController.cs
@@ -0,0 +1,203 @@
+锘縰sing Hanhe.iWCS.Common;
+using Newtonsoft.Json;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Web.Http;
+using static Hanhe.iWCS.IndonesiaGLMProtocol.ApiHelper;
+
+namespace Hanhe.iWCS.IndonesiaGLMProtocol
+{
+    [RoutePrefix("api")]
+    public class ApiController : System.Web.Http.ApiController
+    {
+		[HttpPost]
+		[Route("AddTask")]
+		public SimpleResult Post(AddTaskModel model) {
+			CMMLog.Debug("addTask Request锛� + JsonConvert.SerializeObject(model));
+			return ApiHelper.SendTask(model);
+		}
+
+		[HttpPost]
+		[Route("NgStopTask")]
+		public SimpleResult Ng(NgTaskModel model)
+		{
+			CMMLog.Debug("addTask Request锛� + JsonConvert.SerializeObject(model));
+			return ApiHelper.NgTask(model);
+		}
+
+		[HttpPost]
+		[Route("SecondResult")]
+		public SimpleResult SecondResult(secondResultCache model)
+		{
+			CMMLog.Debug("SecondResult Request锛� + JsonConvert.SerializeObject(model));
+            //Console.WriteLine("SecondResult Request锛� + JsonConvert.SerializeObject(model));
+			return ApiHelper.SecondResult(model);
+		}
+
+		/// <summary>
+		/// MES鎺ュ彛璋冪敤娴嬭瘯
+		/// </summary>
+		/// <param name="model"></param>
+		/// <returns></returns>
+		[HttpPost]
+		[Route("MESTest")]
+		public MESData MES(MESSendData model)
+		{
+			CMMLog.Debug("MESTask Request锛� + JsonConvert.SerializeObject(model));
+			return ApiHelper.MESTest(model);
+		}
+
+        /// <summary>
+        /// Json鏁版嵁杈撳叆杈撳嚭涓棿琛ㄦ祴璇�+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        [HttpPost]
+		[Route("Json")]
+		public JsonData Json(JsonData model)
+		{
+			CMMLog.Debug("MESTask Request锛� + JsonConvert.SerializeObject(model));
+			return ApiHelper.Json(model);
+		}
+
+        /// <summary>
+        /// 灏忚溅鐘舵�鏁版嵁
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Route("AgvState")]
+        public SimpleResult AgvState(AgvStateModel model)
+        {
+            CMMLog.Debug("AgvState Request锛� + JsonConvert.SerializeObject(model));
+            return ApiHelper.AgvState(model);
+        }
+
+
+        [HttpPost]
+        //[Authorize]//涓嶈鍚峊oken楠岃瘉
+        //[BasicAuthentication]//鍩烘湰韬唤楠岃瘉 Authorization       Basic admin:123
+        [Route("AGVDeviceReceive")]
+        public ReturnResult AGVDeviceReceive(List<AgvDeviceStatus> models)
+        {
+            ReturnResult result = new ReturnResult();
+            models.ForEach(a =>
+            {
+                //CMMLog.Info("AGVDeviceReceive Request锛� + JsonConvert.SerializeObject(a));
+                ApiHelper.AGVDeviceReceiveSet(a);
+            });
+
+            return result;
+        }
+
+        [HttpPost]
+        // SimpleResult
+        [Route("Item")]
+        public SimpleResult Item(ERPService.ERPItemTable itemTable)
+        {
+            CMMLog.Info($"Item Res:{JsonConvert.SerializeObject(itemTable)}");
+            SimpleResult result = new SimpleResult();
+            result = ERPService.Item(itemTable);
+            CMMLog.Info($"Item Req:{JsonConvert.SerializeObject(result)}");
+            return result;
+        }
+
+        [HttpPost]
+        // SimpleResult
+        [Route("Employee")]
+        public SimpleResult Employee(ERPService.ERPEmployeeTable itemTable)
+        {
+            CMMLog.Info($"Employee Res:{JsonConvert.SerializeObject(itemTable)}");
+            SimpleResult result = new SimpleResult();
+            result = ERPService.Employee(itemTable);
+            CMMLog.Info($"Employee Req:{JsonConvert.SerializeObject(result)}");
+            return result;
+        }
+
+        [HttpPost]
+        [Route("Test")]
+        public MESData Test()
+        {
+            CMMLog.Debug("MESTask Request锛�);
+            return new MESData { machineNo = "01" };
+        }
+
+        /// <summary>
+        /// 鎴愬搧鍑哄簱
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [Route("ItemOut")]
+        public SimpleResult ItemOut(ItemOutModel model)
+        {
+            CMMLog.Debug("ItemOut Request锛� + JsonConvert.SerializeObject(model));
+            return ApiHelper.ItemOut(model);
+        }
+
+        /// <summary>
+        /// 搴撲綅鐩告満鎺ュ彛
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [Route("CameraInfo")]
+        public SimpleResult CameraInfo(List<cameraModel> models)
+        {
+            SimpleResult result = new SimpleResult();
+            models.ForEach(a =>
+            {
+                CMMLog.Info("CameraInfo Request锛� + JsonConvert.SerializeObject(a));
+                ApiHelper.CameraInfo(a);
+            });
+            return result;
+        }
+
+        /// <summary>
+        /// 杈呮潗绌烘墭鍥炴敹
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [Route("FCKTIn")]
+        public SimpleResult FCKTIn(FCKTInModel models)
+        {
+            SimpleResult result = new SimpleResult();
+            CMMLog.Info($"FCKTIn Res:{JsonConvert.SerializeObject(models)}");
+            result = ApiHelper.FCKTIn(models);
+
+            return result;
+        }        
+        
+        /// <summary>
+        /// 鏌ヨ鐗╂枡淇℃伅
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet]
+        [Route("CheckItemInfo")]
+        public CheckItemInfoResult CheckItemInfo(string trayCode)
+        {
+            CheckItemInfoResult result = new CheckItemInfoResult();
+            CMMLog.Info($"CheckItemInfo 鎺ユ敹鏁版嵁:{JsonConvert.SerializeObject(trayCode)}");
+            result = ApiHelper.CheckItemInfo(trayCode);
+
+            return result;
+        }
+
+        /// <summary>
+        /// 浜哄伐涓婂彔鍖�+        /// </summary>
+        /// <returns></returns>
+        [HttpGet]
+        [Route("CheckTrayInfo")]
+        public SimpleResult CheckTrayInfo(string trayCode)
+        {
+            SimpleResult result = new SimpleResult();
+            CMMLog.Info($"CheckTrayInfo-:鎺ユ敹鏁版嵁锛歿trayCode}");
+            result = ApiHelper.CheckTrayInfo(trayCode);
+
+            return result;
+        }
+    }
+}
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMProtocol/ApiHelper.cs b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/ApiHelper.cs
new file mode 100644
index 0000000..a7b17de
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/ApiHelper.cs
@@ -0,0 +1,822 @@
+锘縰sing Hanhe.iWCS.Business;
+using Hanhe.iWCS.Common;
+using Hanhe.iWCS.MData;
+using Hanhe.iWCS.Model;
+using MongoDB.Bson;
+using MongoDB.Driver;
+using MongoDB.Driver.Builders;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using static Hanhe.iWCS.IndonesiaGLMProtocol.MESHelper;
+using static Hanhe.iWCS.IndonesiaGLMProtocol.PLCControl;
+
+namespace Hanhe.iWCS.IndonesiaGLMProtocol
+{
+    /// <summary>
+    /// ams鎺ュ彛杈呭姪绫�+    /// </summary>
+    public class ApiHelper
+    {
+        private static ICallTaskProcessing callTaskProcessing = new ICallTaskProcessing();
+        static ApiHelper()
+        {
+
+        }
+
+        internal static SimpleResult SendTask(AddTaskModel model)
+        {
+            SimpleResult result = new SimpleResult();
+            if (model.taskType == 1)
+            {
+                //PLan A.褰揥MS璋傾MS鐢熸垚绌烘墭鍑哄簱浠诲姟鏃讹紝鐩存帴鎷︽埅瀛樺叆涓棿琛紝寰呭埌绾跨▼寰幆璇诲彇鎺ㄩ�鐢垫涓�浠诲姟鏃讹紝浼樺厛鎺ㄩ�
+                //MongoDBSingleton.Instance.Insert<ElevatorTask>(new ElevatorTask { taskNo = DateTime.Now.ToString(), wmsTaskNo = DateTime.Now.ToString(), startBit = model.startBit, endBit = PLCControl.DeviceBit8(), wmsEndBit = model.endBit, startFloor = 1, endFloor = 3, sendFlag = 0, create = DateTime.Now.ToString() });
+
+                //Plan B.褰揥MS璋傾MS鐢熸垚绌烘墭鍑哄簱浠诲姟鏃讹紝鎺ュ彈骞跺垱寤虹┖鎵樺嚭搴撲换鍔★紝寰呭埌浠诲姟鎺ㄩ�鏃讹紝鏍规嵁浠诲姟绫诲瀷杩涜鎷︽埅
+                var r = AMSHelper.CreateTask(DateTime.Now.ToString(), model.startBit, model.endBit, "绌烘墭鍑哄簱", 1);
+                result.success = r.success;
+            }
+            else if (model.taskType == 2)
+            {
+                //1妤兼垚鍝佽揣鏋跺尯鍒�妤煎嚭搴撶紦瀛樹綅       --姝や换鍔¢渶瑕佹坊鍔犺櫄鎷熺粓鐐癸紝鏍规嵁1妤煎嚭搴撶紦瀛樹綅鐨勫箍鐢典俊鍙锋潵鍒嗛厤AGV涓�釜缁堢偣锛堝洓涓偣浣嶏紝绌虹殑鍒欏彲浠ュ叆锛�+                //WMS涓嶉渶瑕佷紶杈撶粓鐐癸紝缁堢偣鐢盇MS鏍规嵁鍏夌數PLC淇″彿锛屽垽鏂摢涓俊鍙锋槸绌虹殑锛屽啀閫氱煡AGV缁堢偣锛屽湪姝や箣鍓嶅厛浣跨敤铏氭嫙缁堢偣
+                var r = AMSHelper.CreateTask(DateTime.Now.ToString(), model.startBit, model.endBit, "鎴愬搧鍑哄簱", 1);
+                result.success = r.success;
+            }
+            else if (model.taskType == 3)
+            {
+                //PDA锛�妤肩┖鎵樼嚎杈瑰尯鍒�妤兼垚鍝佺┖鎵樹綅   鈥斺�搴旇鏈夎捣鐐瑰拰缁堢偣浣嶏紝鐩存帴鎺ㄩ�鈥斺�闇�弽棣圵MS浠诲姟鐘舵�
+                var r = AMSHelper.CreateTask(DateTime.Now.ToString(), model.startBit, model.endBit, "绌烘墭绾胯竟", 1);
+                result.success = r.success;
+            }
+            return result;
+        }
+        public class AddTaskModel
+        {
+            /// <summary>
+            /// 浠诲姟璧风偣
+            /// </summary>
+            public string startBit { get; set; }
+            /// <summary>
+            /// 浠诲姟缁堢偣
+            /// </summary>
+            public string endBit { get; set; }
+            /// <summary>
+            /// 浠诲姟绫诲埆    1.1妤兼垚鍝佺┖鎵樺尯鍒�妤艰ˉ缁欐垚鍝佺┖鎵樺尯
+            ///             2.1妤兼垚鍝佽揣鏋跺尯鍒�妤煎嚭搴撶紦瀛樹綅
+            ///             3.PDA锛�妤肩┖鎵樼嚎杈瑰尯鍒�妤兼垚鍝佺┖鎵樹綅
+            /// </summary>
+            public int taskType { get; set; }
+        }
+        public class SimpleResult
+        {
+            public bool success { get; set; }
+            public int errCode { get; set; }
+            public string errMsg { get; set; }
+        }
+
+        public class CheckItemInfoResult
+        {
+            public bool success { get; set; }
+            public int errCode { get; set; }
+            public string errMsg { get; set; }
+            /// <summary>
+            /// 鎵规鍙�+            /// </summary>
+            public string batchNo { get; set; }
+            /// <summary>
+            /// 琚嬪彿
+            /// </summary>
+            public string bagNo { get; set; }
+        }
+
+        #region   NG浠诲姟璁惧鐘舵�
+
+        internal static SimpleResult NgTask(NgTaskModel model)
+        {
+            SimpleResult result = new SimpleResult();
+            if (model.fcBit == 0)
+            {
+                var setus = MongoDBSingleton.Instance.FindOne<NgTaskModel>(Query.EQ("bzBit", model.bzBit), "NgTaskModel");
+                if (setus == null)
+                {
+                    MongoDBSingleton.Instance.Insert<NgTaskModel>(new NgTaskModel { fcBit = model.fcBit, fcSetus = model.fcSetus, bzBit = model.bzBit, bzSetus = model.bzSetus });
+                }
+                else
+                {
+                    var updateBuider = Update.Set("fcBit", model.fcBit).Set("fcSetus", model.fcSetus).Set("bzBit", model.bzBit).Set("bzSetus", model.bzSetus);
+                    MongoDBSingleton.Instance.Update<NgTaskModel>(Query.EQ("bzBit", model.bzBit), updateBuider, UpdateFlags.None);
+                }
+            }
+            else
+            {
+                var setus = MongoDBSingleton.Instance.FindOne<NgTaskModel>(Query.EQ("fcBit", model.fcBit), "NgTaskModel");
+                if (setus == null)
+                {
+                    //SecondWeighState
+                    MongoDBSingleton.Instance.Insert<NgTaskModel>(new NgTaskModel { fcBit = model.fcBit, fcSetus = model.fcSetus, bzBit = model.bzBit, bzSetus = model.bzSetus });
+                    MongoDBSingleton.Instance.Update<SecondWeighState>(Query.EQ("location", GetSecondWeighBit()), Update.Set("ng", 2), UpdateFlags.None);
+                }
+                else
+                {
+                    var updateBuider = Update.Set("fcBit", model.fcBit).Set("fcSetus", model.fcSetus).Set("bzBit", model.bzBit).Set("bzSetus", model.bzSetus);
+                    MongoDBSingleton.Instance.Update<NgTaskModel>(Query.EQ("fcBit", model.fcBit), updateBuider, UpdateFlags.None);
+                    MongoDBSingleton.Instance.Update<SecondWeighState>(Query.EQ("location", GetSecondWeighBit()), Update.Set("ng", model.fcSetus), UpdateFlags.None);
+                }
+            }
+
+            return result;
+        }
+
+        public class NgTaskModel
+        {
+            /// <summary>
+            /// 榛樿鎯呭喌涓嬪叏閮介兘浼�
+            /// </summary>
+            public ObjectId _id { get; set; }
+            /// <summary>
+            /// 澶嶇О骞冲彴鐐逛綅  澶嶇О骞冲彴鏈夐棶棰橈紝灏变紶鍊�
+            /// </summary>
+            public int fcBit { get; set; }
+            /// <summary>
+            /// 澶嶇О骞冲彴鐘舵�  澶嶇О骞冲彴鏈夐棶棰樼殑鎯呭喌涓嬶紝浼犲�2
+            /// </summary>
+            public int fcSetus { get; set; }
+            /// <summary>
+            /// 鍖呰鐐逛綅    鍖呰鏈烘湁闂锛屼紶鍖呰鏈烘暟瀛楃紪鍙凤紝渚嬪1~9
+            /// </summary>
+            public int bzBit { get; set; }
+            /// <summary>
+            /// 鍖呰鐘舵�    鍖呰鏈烘湁闂鐨勬儏鍐典笅锛屼紶鍊�
+            /// </summary>
+            public int bzSetus { get; set; }
+        }
+
+        #endregion
+
+        #region   MES鎺ュ彛妯℃嫙娴嬭瘯
+        internal static MESData MESTest(MESSendData model)
+        {
+            MESData result = new MESData();
+
+            var mesRequst = MongoDBSingleton.Instance.FindOne<MESReSult>(Query.EQ("machineNo", model.machineNo), "MESReSult");
+            if (mesRequst != null)
+            {
+                result.machineNo = mesRequst.machineNo;
+                result.lotNo = mesRequst.lotNo;
+                result.bagNo = mesRequst.bagNo;
+                result.productType = mesRequst.productType;
+                result.materialCode = mesRequst.materialCode;
+                result.overlappingLayers = mesRequst.overlappingLayers;
+            }
+            else
+            {
+                MongoDBSingleton.Instance.Insert<MESReSult>(new MESReSult { machineNo = "T1" });
+            }
+            return result;
+        }
+        public class MESSendData
+        {
+            /// <summary>
+            /// 鍖呰鏈哄彿
+            /// </summary>
+            public string machineNo { get; set; }
+        }
+        public class MESTaskData
+        {
+            /// <summary>
+            /// 鍖呰琛ョ┖鐐�+            /// </summary>
+            public string emptyPoint { get; set; }
+        }
+        public class MESReSult
+        {
+            public ObjectId _id { get; set; }
+            /// <summary>
+            /// mes杩斿洖鐨勫寘瑁呮満鍙凤紙T1锛孴2锛�.....锛孴9锛�+            /// </summary>
+            public string machineNo { get; set; }
+            /// <summary>
+            /// mes杩斿洖鐨勬垚鍝佹壒娆″彿
+            /// </summary>
+            public string lotNo { get; set; }
+            /// <summary>
+            /// mes杩斿洖鐨勮鍙�+            /// </summary>
+            public string bagNo { get; set; }
+            /// <summary>
+            /// mes杩斿洖鐨勪骇鍝佸瀷鍙�+            /// </summary>
+            public string productType { get; set; }
+            /// <summary>
+            /// mes杩斿洖鐨勭墿鏂欑紪鐮�+            /// </summary>
+            public string materialCode { get; set; }
+            /// <summary>
+            /// mes杩斿洖鐨勫彔鍖呭眰鏁� 锛堜緥1,2,3锛�浠h〃涓嶅彔鍖咃紝2浠h〃鍙�灞傦紝3浠h〃鍙�灞傦級
+            /// </summary>
+            public string overlappingLayers { get; set; }
+        }
+        public class MESData
+        {
+            /// <summary>
+            /// mes杩斿洖鐨勫寘瑁呮満鍙凤紙T1锛孴2锛�.....锛孴9锛�+            /// </summary>
+            public string machineNo { get; set; }
+            /// <summary>
+            /// mes杩斿洖鐨勬垚鍝佹壒娆″彿
+            /// </summary>
+            public string lotNo { get; set; }
+            /// <summary>
+            /// mes杩斿洖鐨勮鍙�+            /// </summary>
+            public string bagNo { get; set; }
+            /// <summary>
+            /// mes杩斿洖鐨勪骇鍝佸瀷鍙�+            /// </summary>
+            public string productType { get; set; }
+            /// <summary>
+            /// mes杩斿洖鐨勭墿鏂欑紪鐮�+            /// </summary>
+            public string materialCode { get; set; }
+            /// <summary>
+            /// mes杩斿洖鐨勫彔鍖呭眰鏁� 锛堜緥1,2,3锛�浠h〃涓嶅彔鍖咃紝2浠h〃鍙�灞傦紝3浠h〃鍙�灞傦級
+            /// </summary>
+            public string overlappingLayers { get; set; }
+        }
+        #endregion
+
+        #region   Json鏁版嵁鍐欏叆鍐欏嚭涓棿琛ㄦ祴璇�+        public static int[] machinedown = new int[16];
+        internal static JsonData Json(JsonData model)
+        {
+            JsonData result = new JsonData();
+
+
+
+            for (int i = 0; i <= 15; i++)
+            {
+                machinedown[i] = i;
+            }
+            var json = JsonConvert.SerializeObject(machinedown);
+
+            //Console.WriteLine("json鏁版嵁" + json);
+            var jsonMachine = MongoDBSingleton.Instance.FindOne<JsonDataMod>(Query.EQ("order", model.order), "JsonDataMod");
+            var arr = JsonConvert.DeserializeObject(jsonMachine.jsonOne);
+            //Console.WriteLine("var鏁版嵁" + arr);
+            if (jsonMachine != null)
+            {
+                result.jsonOne = jsonMachine.jsonOne;
+                result.jsonTwo = jsonMachine.jsonTwo;
+                result.jsonThree = jsonMachine.jsonThree;
+            }
+            else
+            {
+                MongoDBSingleton.Instance.Insert<JsonDataMod>(new JsonDataMod { order = model.order, jsonOne = json });
+            }
+            var arr1 = JsonConvert.DeserializeObject<List<int>>(jsonMachine.jsonOne);
+            //Console.WriteLine("鏁扮粍鏁版嵁锛� + arr1);
+            for (int i = 0; i <= 15; i++)
+            {
+                //Console.WriteLine($"寰幆鎵撳嵃鏁扮粍鍗曚釜鏁版嵁{arr1[i]}");
+            }
+
+            return result;
+        }
+        public class JsonData
+        {
+            public int order { get; set; }
+            public string jsonOne { get; set; }
+            public JsonConverter jsonTwo { get; set; }
+            public JsonData jsonThree { get; set; }
+        }
+        public class JsonDataMod
+        {
+            public ObjectId _id { get; set; }
+            public int order { get; set; }
+            public string jsonOne { get; set; }
+            public JsonConverter jsonTwo { get; set; }
+            public JsonData jsonThree { get; set; }
+        }
+        #endregion
+
+        public class AgvStateModel
+        {
+            /// <summary>
+            /// X鍧愭爣
+            /// </summary>
+            public int XCoordinates { get; set; }
+            /// <summary>
+            /// Y鍧愭爣
+            /// </summary>
+            public string YCoordinates { get; set; }
+            /// <summary>
+            /// 鏂瑰悜
+            /// </summary>
+            public int direction { get; set; }
+        }
+
+        public class cameraModel
+        {
+            /// <summary>
+            /// 鐐逛綅
+            /// </summary>
+            public string site { get; set; }
+            /// <summary>
+            /// 鐘舵�
+            /// </summary>
+            public int state { get; set; }
+        }
+
+        public class FCKTInModel
+        {
+            /// <summary>
+            /// 缁堢偣璐т綅
+            /// </summary>
+            public string end_loc { get; set; }
+        }
+
+        public class ItemOutModel
+        {
+            /// <summary>
+            /// 缁堢偣搴撳尯
+            /// </summary>
+            public string S_END_AREA { get; set; }
+        }
+
+
+        #region   鏁欑О娴佺▼锛屼汉宸DA杩斿洖澶嶇О骞冲彴锛屽寘瑁呮満澶嶇О淇℃伅
+
+        internal static SimpleResult SecondResult(secondResultCache model)
+        {
+            SimpleResult result = new SimpleResult();
+            var weigh = MongoDBSingleton.Instance.FindOne<secondResult>(Query.EQ("Bit", model.Bit), "secondResult");
+            if (weigh != null)
+            {
+                MongoDBSingleton.Instance.Update<secondResult>(Query.EQ("Bit", model.Bit), Update.Set("Bit", model.Bit).Set("Status", model.Status), UpdateFlags.None);
+                result.success = true;
+                CMMLog.Info($"杩斿洖鐘舵�鎺ュ彛璋冪敤鎴愬姛锛屽綋鍓嶇偣浣嶏細{model.Bit},鐐逛綅鐘舵�锛歿model.Status}");
+                //Console.WriteLine($"杩斿洖鐘舵�鎺ュ彛璋冪敤鎴愬姛锛屽綋鍓嶇偣浣嶏細{model.Bit},鐐逛綅鐘舵�锛歿model.Status}");
+            }
+            else
+            {
+                MongoDBSingleton.Instance.Insert<secondResult>(new secondResult { Bit = model.Bit, Status = model.Status });
+                result.success = true;
+                CMMLog.Info($"杩斿洖鐘舵�鎺ュ彛璋冪敤鎴愬姛锛屽綋鍓嶇偣浣嶏細{model.Bit},鐐逛綅鐘舵�锛歿model.Status}");
+                //Console.WriteLine($"杩斿洖鐘舵�鎺ュ彛璋冪敤鎴愬姛锛屽綋鍓嶇偣浣嶏細{model.Bit},鐐逛綅鐘舵�锛歿model.Status}");
+            }
+            if (model.Bit == GetSecondWeighBit())
+            {
+                int i = model.Status == "OK" ? 1 : 2;
+                MongoDBSingleton.Instance.Update<SecondWeighState>(Query.EQ("location", GetSecondWeighBit()), Update.Set("secondNg", i));
+            }
+            return result;
+        }
+
+        internal static SimpleResult AgvState(AgvStateModel model)
+        {
+            SimpleResult result = new SimpleResult();
+
+            return result;
+        }
+
+        /// <summary>
+        /// AGV鐘舵�澶勭悊
+        /// </summary>
+        /// <param name="a"></param>
+        internal static void AGVDeviceReceiveSet(AgvDeviceStatus a)
+        {
+            if (!string.IsNullOrEmpty(a.forkliftNo))
+            {
+                var agvStateInfo = MongoDBSingleton.Instance.FindOne<AGV_STATE>(Query.EQ("forkliftNo", a.forkliftNo), "AGV_STATE");
+                if (agvStateInfo != null)
+                {
+                    if (string.IsNullOrEmpty(a.xPos)) a.xPos = "0";
+                    if (string.IsNullOrEmpty(a.yPos)) a.yPos = "0";
+                    var query1 = Query.EQ("forkliftNo", a.forkliftNo);
+                    UpdateBuilder updateBuider = Update.Set("forkliftNo", a.forkliftNo).
+                            Set("errCode", a.errCode).Set("errCode2", a.errCode2).
+                            Set("faildCode", a.faildCode).Set("xPos", a.xPos).
+                            Set("yPos", a.yPos).Set("battery", a.battery).Set("goods_visible", a.goods_visible).
+                            Set("Degree", a.Degree);
+                    MongoDBSingleton.Instance.Update<AGV_STATE>(query1, updateBuider, UpdateFlags.None);
+                }
+                else
+                {
+                    MongoDBSingleton.Instance.Insert<AGV_STATE>(new AGV_STATE { forkliftNo = a.forkliftNo, errCode = a.errCode, errCode2 = a.errCode2, faildCode = a.faildCode, xPos = a.xPos, yPos = a.yPos, battery = a.battery, goods_visible = a.goods_visible, Degree = a.Degree });
+                }
+            }
+        }
+
+        /// <summary>
+        /// 鎴愬搧鍑哄簱
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        internal static SimpleResult ItemOut(ItemOutModel model)
+        {
+            //鎴愬搧鍑哄簱娴佺▼锛氫汉宸ad璋冪敤ams鎻愪緵鐨勬帴鍙o紝ams鏌ヨ搴撳尯绌虹殑璐т綅锛岀劧鍚庤皟鐢╳ms鎺ュ彛锛屽皢绌虹殑璐т綅鐨勬暟閲忎紶缁檞ms
+            SimpleResult result = new SimpleResult { success = false, errCode = -1 };
+
+            var areaList = MongoDBSingleton.Instance.Find<CPCKArea>(Query.EQ("S_AREA_CODE", model.S_END_AREA), "CPCKArea").ToList();
+            if (areaList.Count > 0)
+            {
+                for (int i = areaList.Count - 1; i >= 0; i--)
+                {
+                    if (areaList[i].N_CURRENT_NUM == areaList[i].N_CAPACITY)
+                    {
+                        areaList.Remove(areaList[i]);
+                    }
+                }
+            }
+            if (areaList.Count > 0)
+            {
+                CMMLog.Info($"鎴愬搧缂撳瓨鏋跺嚭搴撲换鍔★紝鏌ヨ鍒板彲鍏ュ簱鐨勮揣浣嶆暟閲忎负锛歿areaList.Count}");
+                //璋冪敤wms鎺ュ彛鐢熸垚鍑哄簱浠诲姟
+                foreach (var a in areaList)
+                {
+                    CMMLog.Info($"鎴愬搧缂撳瓨鏋跺嚭搴撲换鍔★紝褰撳墠璐т綅缂栫爜锛歿a.S_LOC_CODE}");
+                    bool req = WMSHelper.WMSOut(a.S_LOC_CODE, "");
+                    if (req)
+                    {
+                        result.success = true;
+                        result.errCode = 0;
+                        CMMLog.Debug($"璋冪敤WMS鑾峰彇鎴愬搧缂撳瓨鏋跺嚭搴撲换鍔℃垚鍔燂紒缁堢偣璐т綅缂栫爜锛歿a.S_LOC_CODE}");//鐜板湪浠诲姟鐢盬MS鑷繁涓嬪彂锛孉MS鍋氭嫤鎴鐞嗭紙鏌ヨext1閲岄潰瀵瑰簲鐨勪换鍔$被鍨嬶紝骞舵洿鏀逛换鍔$被鍨嬶級
+                    }
+                    else
+                    {
+                        CMMLog.Debug($"璋冪敤WMS鑾峰彇鎴愬搧缂撳瓨鏋跺嚭搴撲换鍔″け璐ワ紒缁堢偣璐т綅缂栫爜锛歿a.S_LOC_CODE}");
+                        result.errMsg = $"璋冪敤WMS鑾峰彇鎴愬搧缂撳瓨鏋跺嚭搴撲换鍔″け璐ワ紒缁堢偣璐т綅缂栫爜锛歿a.S_LOC_CODE}";
+                    }
+                }
+            }
+            else
+            {
+                result.errMsg = $"璇ュ簱鍖烘湭鎵惧埌鍙敤璐т綅锛屽簱鍖虹紪鐮侊細{model.S_END_AREA}";
+            }
+            return result;
+        }
+
+        internal static SimpleResult CameraInfo(cameraModel a)
+        {
+            SimpleResult result = new SimpleResult();
+
+            var cameraInfo = MongoDBSingleton.Instance.FindOne<CameraTable>(Query.EQ("site", a.site), "CameraTable");
+            if (cameraInfo != null)
+            {
+                if (cameraInfo.site == a.site && cameraInfo.state == a.state)
+                {
+                    cameraInfo.time += 1;
+                    MongoDBSingleton.Instance.Update<CameraTable>(Query.EQ("site", a.site), Update.Set("time", cameraInfo.time), UpdateFlags.None);
+                }
+                else
+                {
+                    MongoDBSingleton.Instance.Remove<CameraTable>(Query.EQ("site", a.site), RemoveFlags.Single);
+                }
+            }
+            else
+            {
+                if (a.state == 0)
+                {
+                    MongoDBSingleton.Instance.Insert<CameraTable>(new CameraTable
+                    {
+                        site = a.site,
+                        state = a.state,
+                        time = 1
+                    }, "CameraTable");
+                }
+            }
+
+            try
+            {
+                var cameraInfoList = MongoDBSingleton.Instance.FindAll<CameraTable>("CameraTable");
+                if (cameraInfoList.Count > 0)
+                {
+                    cameraInfoList.ForEach(it => {
+                        if (it.time > 0)
+                        {
+                            CMMLog.Info("CameraTable琛ㄥぇ浜�0娆$殑鏁版嵁锛� + JsonConvert.SerializeObject(cameraInfoList));
+
+                            //璋冪敤wms瑙g粦鎺ュ彛
+                            result.success = WMSHelper.WMSEmptyUnbind(it.site);
+
+                            if (result.success)
+                            {
+                                MongoDBSingleton.Instance.Remove<CameraTable>(Query.EQ("site", it.site), RemoveFlags.Single);
+                                result.errCode = 0;
+                            }
+                            CMMLog.Info($"鍙戣揣璐ф灦瑙g粦鎴愬姛锛岃揣浣嶅彿锛歿it.site}");
+
+                            //骞跺皢璐т綅绌烘弧缃负0
+                            var locInfo = MongoDBSingleton.Instance.FindOne<FCKTArea>(Query.EQ("S_LOC_CODE", it.site), "FCKTArea");
+                            if (locInfo == null)
+                            {
+                                FCKTArea area = new FCKTArea
+                                {
+                                    S_LOC_CODE = it.site,
+                                    N_CURRENT_NUM = 0,
+                                    N_CAPACITY = 1,
+                                };
+                                MongoDBSingleton.Instance.Insert(area);
+                            }
+                            else
+                            {
+                                if (locInfo.N_CURRENT_NUM > 0) locInfo.N_CURRENT_NUM = locInfo.N_CURRENT_NUM - 1;
+                                MongoDBSingleton.Instance.Update<FCKTArea>(Query.EQ("S_LOC_CODE", it.site), Update.Set("N_CURRENT_NUM", locInfo.N_CURRENT_NUM), UpdateFlags.None);
+
+                            }
+                        }
+                    });
+                }
+            }
+            catch (Exception ex)
+            {
+                CMMLog.Error(ex.Message, ex);
+            }
+            return result;
+        }
+
+        internal static SimpleResult FCKTIn(FCKTInModel models)
+        {
+            SimpleResult result = new SimpleResult { success = false, errCode = -1 };
+            var FCInfo = MongoDBSingleton.Instance.FindOne<FCKTArea>(Query.EQ("S_LOC_CODE", models.end_loc), "FCKTArea");
+            if (FCInfo != null)
+            {
+                if (FCInfo.N_CURRENT_NUM < FCInfo.N_CAPACITY)
+                {
+                    var taskInfo = MongoDBSingleton.Instance.FindOne<TN_I_TASK_MST>(Query.Or(Query.EQ("CN_S_END_BIT", models.end_loc), Query.EQ("CN_S_START_BIT", models.end_loc)), "TN_I_TASK_MST");
+                    if (taskInfo == null)
+                    {
+                        result.success = true;
+                        result.errCode = 0;
+                    }
+                    else
+                    {
+                        result.errMsg = $"璇ョ偣浣嶆湁鎵ц涓殑浠诲姟,浠诲姟鍙凤細{taskInfo.CN_S_TASK_NO}";
+                    }
+                }
+                else
+                {
+                    result.errMsg = $"褰撳墠璐т綅涓嶅彲鐢紝璐т綅鏁伴噺宸叉弧";
+                }
+            }
+            else
+            {
+                result.errMsg = $"褰撳墠璐т綅鏈淮鎶わ紝璐т綅缂栫爜锛歿models.end_loc}";
+            }
+            return result;
+        }
+
+        internal static CheckItemInfoResult CheckItemInfo(string trayCode)
+        {
+            CheckItemInfoResult result = new CheckItemInfoResult() { success = false, errCode = -1 };
+            var machine = MongoDBSingleton.Instance.FindOne<MachineInfoTwo>(Query.EQ("trayCode", trayCode), "MachineInfoTwo");
+            if (machine != null)
+            {
+                result.bagNo = machine.bagNo;
+                result.batchNo = machine.lotNo;
+                result.success = true;
+                result.errCode = 0;
+            }
+            else
+            {
+                result.errMsg = $"鏈湪琛ㄤ腑鏍规嵁鎵樼洏鍙锋煡璇㈠埌鏁版嵁锛屾墭鐩樺彿锛歿trayCode}";
+            }
+
+            return result;
+        }
+
+        internal static SimpleResult CheckTrayInfo(string trayCode)
+        {
+            SimpleResult result = new SimpleResult() { success = false, errCode = -1 };
+            var machineInfo = MongoDBSingleton.Instance.FindOne<MachineInfoTwo>(Query.EQ("trayCode", trayCode), "MachineInfoTwo");
+            if (machineInfo != null)
+            {
+                //鍐欏叆鏁版嵁
+                var plc = Settings.GetPlcInfo().Where(a => a.deviceType == "3").FirstOrDefault();
+                if (plc != null)
+                {
+                    var arr = JsonConvert.DeserializeObject<List<int>>(machineInfo.jsonData);
+                    int[] num = new int[94];
+                    num[0] = 1;
+                    num[1] = 0;
+                    num[2] = 0;
+                    for (int i = 3; i <= 93; i++) num[i] = arr[i - 3];
+
+                    CMMLog.Info($"send num:{JsonConvert.SerializeObject(num)}");
+
+                    var wirteall01 = OITcpHelper.RegisterWriteOutPutMulti(new OITcpHelper.RegisterWriteOutPutModelMulti
+                    {
+                        addr = plc.writeAddr + 7,
+                        host = plc.ip,
+                        port = plc.port,
+                        data = num
+                    });
+
+                    CMMLog.Debug($"鍐欏叆璁惧{plc.location}閫氶亾{plc.writeAddr + 10}閲岄潰鏁版嵁涓�{JsonConvert.SerializeObject(num)}.");
+
+                    MongoDBSingleton.Instance.Remove<MachineInfoTwo>(Query.EQ("trayCode", trayCode), RemoveFlags.None);
+
+                    var wirte = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                    {
+                        addr = plc.writeAddr,
+                        host = plc.ip,
+                        port = plc.port,
+                        data = 1
+                    });
+                    CMMLog.Debug($"鍐欏叆璁惧{plc.location}閫氶亾{plc.writeAddr}閲岄潰鏁版嵁涓�.");
+                    result.success = true;
+                    result.errCode = 0;
+                }
+                else
+                {
+                    result.errMsg = $"鍙犲寘鏈烘湭閰嶇疆";
+                }
+            }
+            else
+            {
+                result.errMsg = $"鏈湪琛ㄤ腑鏌ヨ鍒拌鎵樼洏鐮佹暟鎹紝鎵樼洏鐮侊細{trayCode}";
+            }
+            return result;
+        }
+
+        public class FCKTArea
+        {
+
+            public ObjectId _id { get; set; }
+            /// <summary>
+            /// 璐т綅缂栫爜
+            /// </summary>
+            public string S_LOC_CODE { get; set; }
+            /// <summary>
+            /// 褰撳墠鏁伴噺
+            /// </summary>
+            public int N_CURRENT_NUM { get; set; }
+            /// <summary>
+            /// 瀹归噺
+            /// </summary>
+            public int N_CAPACITY { get; set; }
+        }
+
+        public class CameraTable
+        {
+            public ObjectId _id { get; set; }
+            /// <summary>
+            /// 鐐逛綅
+            /// </summary>
+            public string site { get; set; }
+            /// <summary>
+            /// 鐘舵�
+            /// </summary>
+            public int state { get; set; }
+            /// <summary>
+            /// 鎺ユ敹鍒颁簡鏁版嵁娆℃暟
+            /// </summary>
+            public int time { get; set; }
+        }
+
+        /// <summary>
+        /// 鎴愬搧鍑哄簱搴撳尯
+        /// </summary>
+        public class CPCKArea
+        {
+            public ObjectId _id { get; set; }
+            /// <summary>
+            /// 搴撳尯缂栫爜
+            /// </summary>
+            public string S_AREA_CODE{ get; set; }
+            /// <summary>
+            /// 璐т綅缂栫爜
+            /// </summary>
+            public string S_LOC_CODE { get; set; }
+            /// <summary>
+            /// 璐т綅瀹归噺
+            /// </summary>
+            public int N_CAPACITY { get; set; }
+            /// <summary>
+            /// 褰撳墠鏁伴噺
+            /// </summary>
+            public int N_CURRENT_NUM { get; set; }
+        }
+
+
+        public class AGV_STATE
+        {
+            public ObjectId _id { get; set; }
+            public string forkliftNo { get; set; }
+            /// <summary>
+            /// 鍋滄鐘舵�鐮�+            /// </summary>
+            public string errCode { get; set; } = "";
+            /// <summary>
+            /// 鍋滄鐘舵�鐮�
+            /// </summary>
+            public string errCode2 { get; set; } = "";
+            /// <summary>
+            /// 澶辫触鐘舵�鐮�+            /// </summary>
+            public string faildCode { get; set; } = "";
+            /// <summary>
+            /// 杞﹁締X鍧愭爣锛圕M锛�+            /// </summary>
+            public string xPos { get; set; } = "0";
+            /// <summary>
+            /// 杞﹁締Y鍧愭爣锛圷锛�+            /// </summary>
+            public string yPos { get; set; } = "0";
+            /// <summary>
+            /// 鐢垫睜鐢甸噺
+            /// </summary>
+            public string battery { get; set; } = "";
+
+            public string detail { get; set; }
+            /// <summary>
+            /// 鏄惁鏈夎揣鐘舵�鐮�+            /// </summary>
+            public string goods_visible { get; set; } = "";
+            /// <summary>
+            /// 鏂瑰悜
+            /// </summary>
+            public string Degree { get; set; } = "";
+        }
+
+        public class secondResultCache
+        {
+            /// <summary>
+            /// 鏁欑О鐐逛綅
+            /// </summary>
+            public string Bit { get; set; }
+            /// <summary>
+            /// 鏁欑О鐐逛綅鐘舵�
+            /// </summary>
+            public string Status { get; set; }
+        }
+        public class secondResult
+        {
+            public ObjectId _id { get; set; }
+            /// <summary>
+            /// 鏁欑О鐐逛綅
+            /// </summary>
+            public string Bit { get; set; }
+            /// <summary>
+            /// 鏁欑О鐐逛綅鐘舵�
+            /// </summary>
+            public string Status { get; set; }
+        }
+
+        public class ReturnResult
+        {
+            public int ResultCode { get; set; }
+            public string ResultMsg { get; set; }
+        }
+
+        /// <summary>
+        /// hosttoagv涓婃姤杞﹁締鐘舵�锛堝弬鏁板湪hosttoagv鏈嶅姟閰嶇疆锛屽彲淇敼锛�+        /// </summary>
+        public class AgvDeviceStatus
+        {
+            public string infoType { get; set; }
+            public string inMapRoute { get; set; }
+            //public string detail { get; set; }
+            public string CumInfo { get; set; }
+            public string forkliftNo { get; set; }
+            /// <summary>
+            /// 鍋滄鐘舵�鐮�+            /// </summary>
+            public string errCode { get; set; } = "";
+            /// <summary>
+            /// 鍋滄鐘舵�鐮�
+            /// </summary>
+            public string errCode2 { get; set; } = "";
+            /// <summary>
+            /// 澶辫触鐘舵�鐮�+            /// </summary>
+            public string faildCode { get; set; } = "";
+            /// <summary>
+            /// 杞﹁締X鍧愭爣锛圕M锛�+            /// </summary>
+            public string xPos { get; set; } = "";
+            /// <summary>
+            /// 杞﹁締Y鍧愭爣锛圷锛�+            /// </summary>
+            public string yPos { get; set; } = "";
+            /// <summary>
+            /// 鐢垫睜鐢甸噺
+            /// </summary>
+            public string battery { get; set; } = "";
+            /// <summary>
+            /// 鏄惁鏈夎揣鐘舵�鐮�+            /// </summary>
+            public string goods_visible { get; set; } = "";
+            /// <summary>
+            /// 鏂瑰悜
+            /// </summary>
+            public string Degree { get; set; } = "";
+        }
+
+        #endregion
+
+
+    }
+}
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMProtocol/ERPService.cs b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/ERPService.cs
new file mode 100644
index 0000000..9e81886
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/ERPService.cs
@@ -0,0 +1,1184 @@
+锘縰sing Hanhe.iWCS.Business;
+using Hanhe.iWCS.Common;
+using Hanhe.iWCS.MData;
+using Hanhe.iWCS.Model;
+using MongoDB.Bson;
+using MongoDB.Driver;
+using MongoDB.Driver.Builders;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Net.Sockets;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using static Hanhe.iWCS.IndonesiaGLMProtocol.ApiHelper;
+using static Hanhe.iWCS.IndonesiaGLMProtocol.MESHelper;
+
+namespace Hanhe.iWCS.IndonesiaGLMProtocol
+{
+    public class ERPService
+    {
+        /*
+         * 鍙樻洿浼樺寲鎿嶄綔锛�+         * 
+         * 娉ㄩ噴鍐呭锛�+         *      PLCControl.SecondWeightInCache6 鏂规硶
+         * 
+         * **/
+
+
+        static WebApiHelper api = new WebApiHelper();
+
+        public const string ERPSwitch01 = "1";// ERP鍙樻洿娴佺▼寮�叧
+        public static List<string> SendERPTaskType = Settings.SendERPTaskType.Split(',').ToList();//鍥炴姤浠诲姟绫诲瀷
+        public static List<string> LoginInfo = Settings.LoginInfo.Split(',').ToList();// ERP鐧诲綍鎺ュ彛浼犺緭淇℃伅
+
+        /// <summary>
+        /// ERP鐗╂枡涓嬪彂鎺ュ彛
+        /// </summary>
+        /// <param name="itemTable"></param>
+        /// <returns></returns>
+        public static SimpleResult Item(ERPItemTable itemTable)
+        {
+            SimpleResult result = new SimpleResult { success = false };
+
+            // 鏌ヨ涓棿琛ㄦ槸鍚﹀瓨鍦ㄦ暟鎹紝濡傛灉瀛樺湪锛屽垯杩涜鏇存柊锛涘鏋滀笉瀛樺湪锛屽垯鑾峰彇褰撳墠銆愮墿鏂欏簭鍙枫�锛屽苟杩涜绱姞鎻掑叆鏁版嵁
+
+            var query = Query.EQ("item_code", itemTable.item_code);
+            var erpItemInfo = MongoDBSingleton.Instance.FindOne<ERPItemTable>(query, "ERPItemTable");
+            if (erpItemInfo != null)
+            {
+                var update = Update.Set("item_name", itemTable.item_name).Set("item_spec", itemTable.item_spec)
+                    .Set("item_uom", itemTable.item_uom).Set("dateTime", DateTime.Now);
+                MongoDBSingleton.Instance.Update<ERPItemTable>(query, update, "ERPItemTable", MongoDB.Driver.UpdateFlags.None);
+                result.success = true;
+            }
+            else
+            {
+                int itemNo = 1;
+                // 鑾峰彇鏈�ぇ搴忓彿鐨勬暟鎹�+                var maxErpItemInfoList = MongoDBSingleton.Instance.FindAll<ERPItemTable>("ERPItemTable");
+                if (maxErpItemInfoList.Count > 0)
+                {
+                    var maxErpItemInfo = maxErpItemInfoList.OrderByDescending(it => it.item_no).First();
+                    if (maxErpItemInfo != null) itemNo = maxErpItemInfo.item_no + 1;
+                }
+                MongoDBSingleton.Instance.Insert<ERPItemTable>(new ERPItemTable
+                {
+                    item_no = itemNo,
+                    item_code = itemTable.item_code,
+                    item_name = itemTable.item_name,
+                    item_spec = itemTable.item_spec,
+                    item_uom = itemTable.item_uom,
+                    dateTime = DateTime.Now
+                }, "ERPItemTable");
+
+                
+                result.success = true;
+            }
+            return result;
+        }
+
+        /// <summary>
+        /// ERP鍛樺伐淇℃伅涓嬪彂鎺ュ彛
+        /// </summary>
+        /// <param name="itemTable"></param>
+        /// <returns></returns>
+        public static SimpleResult Employee(ERPEmployeeTable itemTable)
+        {
+            SimpleResult result = new SimpleResult { success = false };
+
+            // 鏌ヨ涓棿琛ㄦ槸鍚﹀瓨鍦ㄦ暟鎹紝濡傛灉瀛樺湪锛屽垯杩涜鏇存柊锛涘鏋滀笉瀛樺湪锛屽垯鑾峰彇褰撳墠銆愮墿鏂欏簭鍙枫�锛屽苟杩涜绱姞鎻掑叆鏁版嵁
+            //var query = Query.EQ("employee_id", itemTable.employee_id);
+            //var erpItemInfo = MongoDBSingleton.Instance.FindOne<ERPEmployeeTable>(query, "ERPEmployeeTable");
+            //if (erpItemInfo != null)
+            //{
+            //    var update = Update.Set("employee_name", itemTable.employee_name).Set("dateTime", DateTime.Now);
+            //    MongoDBSingleton.Instance.Update<ERPEmployeeTable>(query, update, "ERPEmployeeTable", MongoDB.Driver.UpdateFlags.None);
+            //    result.success = true;
+            //}
+            //else
+            //{
+            //    int itemNo = 1;
+            //    // 鑾峰彇鏈�ぇ搴忓彿鐨勬暟鎹�+            //    var maxErpItemInfoList = MongoDBSingleton.Instance.FindAll<ERPEmployeeTable>("ERPEmployeeTable");
+            //    if (maxErpItemInfoList.Count > 0)
+            //    {
+            //        var maxErpItemInfo = maxErpItemInfoList.OrderByDescending(it => it.item_no).First();
+            //        if (maxErpItemInfo != null) itemNo = maxErpItemInfo.item_no + 1;
+            //    }
+            //    MongoDBSingleton.Instance.Insert<ERPEmployeeTable>(new ERPEmployeeTable
+            //    {
+            //        item_no = itemNo,
+            //        employee_id = itemTable.employee_id,
+            //        employee_name = itemTable.employee_name,
+            //        dateTime = DateTime.Now
+            //    }, "ERPEmployeeTable");
+            //
+            //    
+            //
+            //    result.success = true;
+            //}
+            return result;
+        }
+
+        /// <summary>
+        /// ERP鐗╂枡涓棿琛�+        /// </summary>
+        public class ERPItemTable
+        {
+            public ObjectId _id { get; set; }
+            /// <summary>
+            /// 鐗╂枡搴忓彿(鍞竴)
+            /// </summary>
+            public int item_no { get; set; }
+            /// <summary>
+            /// 鐗╂枡缂栫爜(鍞竴)
+            /// </summary>
+            public string item_code { get; set; }
+            /// <summary>
+            /// 鐗╂枡鍚嶇О
+            /// </summary>
+            public string item_name { get; set; }
+            /// <summary>
+            /// 瑙勬牸鍨嬪彿
+            /// </summary>
+            public string item_spec { get; set; }
+            /// <summary>
+            /// 鍗曚綅
+            /// </summary>
+            public string item_uom { get; set; }
+            /// <summary>
+            /// 鎿嶄綔鏃堕棿
+            /// </summary>
+            public DateTime dateTime { get; set; }
+        }
+
+        /// <summary>
+        /// ERP鍛樺伐淇℃伅涓棿琛�+        /// </summary>
+        public class ERPEmployeeTable
+        {
+            public ObjectId _id { get; set; }
+            /// <summary>
+            /// 鐗╂枡搴忓彿(鍞竴)
+            /// </summary>
+            public int item_no { get; set; }
+            /// <summary>
+            /// 鐗╂枡缂栫爜(鍞竴)
+            /// </summary>
+            public string item_code { get; set; }
+            /// <summary>
+            /// 鐗╂枡鍚嶇О
+            /// </summary>
+            public string item_name { get; set; }
+            /// <summary>
+            /// 鍛樺伐宸ュ彿
+            /// </summary>
+            public string employee_id { get; set; }
+            /// <summary>
+            /// 鎿嶄綔鏃堕棿
+            /// </summary>
+            public DateTime dateTime { get; set; }
+        }
+
+        public static void SendERPTaskInfo(TN_I_TASK_MST mst)
+        {
+            CMMLog.Info($"SendERPTaskInfo 鎻掑叆鏁版嵁 寮�锛屼换鍔″彿锛歿mst.CN_S_TASK_NO}");
+            var sendERPTaskInfo = MongoDBSingleton.Instance.Find<SendErpTaskInfoTable>(Query.EQ("isFinish", "N"));
+            if (sendERPTaskInfo.Count > 0)
+            {
+                SendErpTaskInfoTable x = sendERPTaskInfo.OrderBy(a => a.dateTime).FirstOrDefault();
+
+                CMMLog.Info($"SendERPTaskInfo 鎻掑叆鏁版嵁锛歿JsonConvert.SerializeObject(x)}");
+                MongoDBSingleton.Instance.Update<SendErpTaskInfoTable>(Query.EQ("_id", x._id), Update.Set("isFinish", "Y"), "SendErpTaskInfoTable", UpdateFlags.None);
+            }
+            else CMMLog.Error($"SendERPTaskInfo Error:褰撳墠涓棿琛ㄦ棤涓嬬嚎浠诲姟");
+        }
+        public class SendErpTaskInfoTable
+        {
+            public ObjectId _id { get; set; }
+            /// <summary>
+            /// 鏉″舰鐮�+            /// </summary>
+            public string barcode { get; set; }
+            /// <summary>
+            /// 鏉$爜瑙勫垯
+            /// </summary>
+            public string codeRules { get; set; }
+            /// <summary>
+            /// 鐗╂枡缂栫爜(鍞竴)
+            /// </summary>
+            public string materialCode { get; set; }
+            /// <summary>
+            /// 鍒涘缓缁勭粐
+            /// </summary>
+            public string createOrganization { get; set; }
+            /// <summary>
+            /// 浜у搧鎵规鍙�+            /// </summary>
+            public string batchNumber { get; set; }
+            /// <summary>
+            /// 璁¢噺鍗曚綅
+            /// </summary>
+            public string measurementUnit { get; set; }
+            /// <summary>
+            /// 鏁伴噺
+            /// </summary>
+            public int count { get; set; }
+            /// <summary>
+            /// 浠撳簱缂栫爜
+            /// </summary>
+            public string WarehouseCode { get; set; }
+            /// <summary>
+            /// 杞﹂棿缂栫爜
+            /// </summary>
+            public string workshopCode { get; set; }
+            /// <summary>
+            /// 涓氬姟鏃ユ湡
+            /// </summary>
+            public DateTime BusinessDate { get; set; }
+            /// <summary>
+            /// 鐢熶骇鏃ユ湡
+            /// </summary>
+            public DateTime FProductionDate { get; set; }
+            /// <summary>
+            /// 鏈夋晥鏈�+            /// </summary>
+            public DateTime FExpirationDate { get; set; }
+            /// <summary>
+            /// 鍛樺伐缂栧彿1
+            /// </summary>
+            public string employeeID1 { get; set; }
+            /// <summary>
+            /// 浜у搧闇�眰閲嶉噺1锛�2浣嶆暣鏁�+            /// </summary>
+            public int needWeight_1 { get; set; }
+            /// <summary>
+            /// 鍗曟墭瀹為檯閲嶉噺1锛�2浣嶆暣鏁�+            /// </summary>
+            public int realWeight_1 { get; set; }
+            /// <summary>
+            /// 鍙犳墭鍚庣殑瀹為檯閲嶉噺锛�2浣嶆暣鏁�+            /// </summary>
+            public int totalWeight { get; set; }
+            /// <summary>
+            /// 鏄惁鍏ュ簱瀹屾垚
+            /// </summary>
+            public string isFinish { get; set; } = "N";
+            public DateTime dateTime { get; set; }
+        }
+
+        /// <summary>
+        /// 鍏ュ簱浠诲姟瀹屾垚鍥炴姤ERP淇℃伅
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static void SendERPTaskCompleteFunc()
+        {
+            try
+            {
+                var db = new SqlHelper<object>().GetInstance();
+                var a = MongoDBSingleton.Instance.FindOne<SendErpTaskInfoTable>("SendErpTaskInfoTable");
+                if (a != null)
+                {
+                    // 鍏堟牴鎹换鍔℃壒娆″彿瀛楁鑾峰彇鏃堕棿鎴充腑闂磋〃-TimeCuoInfoCom 鏁版嵁锛屽苟杩涜鍚庣画璋冪敤锛屽鐞嗘垚鍔熷垹闄ゆ椂闂存埑涓棿琛�TimeCuoInfoCom 鏁版嵁
+                    #region 璁$畻鍗曟嵁缂栧彿
+                    //string FBillNO = "";
+                    //int num = 0;
+                    //string S_NUM = "";
+                    //string time = DateTime.Now.ToString("yyMMdd");
+                    //CMMLog.Info($"SendERPTaskCompleteFunc time锛歿time}");
+                    //var midInfo = db.Queryable<ADDMid>().Where(b => b.time == time).First();
+                    //if (midInfo != null)
+                    //{
+                    //    midInfo.num = midInfo.num + 1;
+                    //    num = midInfo.num;
+                    //    db.Updateable(midInfo).UpdateColumns(b => new { b.num }).ExecuteCommand();
+                    //}
+                    //else
+                    //{
+                    //    num = 1;
+                    //    midInfo = new ADDMid
+                    //    {
+                    //        time = DateTime.Now.ToString("yyMMdd"),
+                    //        num = 1
+                    //    };
+                    //    db.Insertable(midInfo).ExecuteCommand();
+                    //}
+                    //
+                    //CMMLog.Info($"SendERPTaskCompleteFunc num: {num}");
+                    //for (int i = num.ToString().Length + 1; i <= 4; i++)
+                    //{
+                    //    S_NUM = S_NUM + "0";
+                    //}
+                    //
+                    //FBillNO = "ARKD" + DateTime.Now.ToString("yyMMdd") + S_NUM + num.ToString();
+                    //CMMLog.Info($"SendERPTaskCompleteFunc: {FBillNO}");
+                    #endregion
+                
+                    //int n = 0; //琛屽彿
+                    //n = n + 1;
+                    CMMLog.Info($"SendERPTaskCompleteFunc:INSERT INTO T_JY_BARCODESync (FBarCode,FBarCodeRule,FMaterialNumber,FCreateOrgNumber,FLot,FUnit,FQty,FStockNumber,FDept,FBillDate,FProductionDate,FExpirationDate,F_JY_CZZ,FCreateTime,FOpStatus) VALUES ('{a.barcode}','{a.codeRules}','{a.materialCode}','02','{a.batchNumber}','{a.measurementUnit}','{a.count}','{a.WarehouseCode}','{a.workshopCode}','{a.BusinessDate}','{a.FProductionDate}','{a.FExpirationDate}','{a.employeeID1}','{a.dateTime}','0')");
+                    string sql = $"INSERT INTO T_JY_BARCODESync (FBarCode,FBarCodeRule,FMaterialNumber,FCreateOrgNumber,FLot,FUnit,FQty,FStockNumber,FDept,FBillDate,FProductionDate,FExpirationDate,F_JY_CZZ,FCreateTime,FOpStatus) VALUES ('{a.barcode}','{a.codeRules}','{a.materialCode}','02','{a.batchNumber}','{a.measurementUnit}','{a.count}','{a.WarehouseCode}','{a.workshopCode}','{a.BusinessDate}','{a.FProductionDate}','{a.FExpirationDate}','{a.employeeID1}','{a.dateTime}','0')";
+                    if(new SqlHelper<object>().ExecuteSql(sql, false))
+                    {
+                        //鎻掑叆鎴愬姛 娓呴櫎涓棿琛�+                        MongoDBSingleton.Instance.Remove<SendErpTaskInfoTable>(Query.EQ("_id", a._id), "SendErpTaskInfoTable", RemoveFlags.None);
+                        //MongoDBSingleton.Instance.Remove<TimeCuoInfoCom>(Query.EQ("timeStamp", int.Parse(a.timeStamp)), "TimeCuoInfoCom", RemoveFlags.None);
+                    }
+                    else
+                    {
+                        CMMLog.Info("鎻掑叆澶辫触 ------");
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                CMMLog.Info("SendERPTaskCompleteFunc err:" + ex.Message);
+            }
+        }
+
+        public class ADDMid
+        {
+            [SugarColumn(IsPrimaryKey = true)]
+            public string time { get; set; }
+            public int num { get; set; }
+        }
+
+        /// <summary>
+        /// ERP浜や簰鏂规硶:鎵撳寘涓嬬嚎浠诲姟鍒涘缓鍓�璋冪敤 鎵瑰彿涓绘。 鎺ュ彛
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static bool ERPApiFunc(string timeStamp)
+        {
+            bool result = false;
+            try
+            {
+                var model = MongoDBSingleton.Instance.FindOne<TimeCuoInfoCom>(Query.EQ("timeStamp", int.Parse(timeStamp)), "TimeCuoInfoCom");
+                if (model != null)
+                {
+                    string userToken = ERPGetLogin();
+                    if (!string.IsNullOrEmpty(userToken))
+                    {
+                        // 鎵撳寘涓嬬嚎浠诲姟鍒涘缓鍓�璋冪敤 鎵瑰彿涓绘。 鎺ュ彛
+                        result = ERPBatchInfo(userToken, model);
+                    }
+                    else CMMLog.Error($"ERPApiFunc Error:鏈幏鍙栧埌userToken.");
+                }
+                else CMMLog.Error($"ERPApiFunc Error:褰撳墠浠诲姟鏈幏鍙栧埌瀵瑰簲鐨勬椂闂存埑鏁版嵁銆傛椂闂存埑锛歿timeStamp}锛屾椂闂存埑琛細TimeCuoInfoCom");
+            }
+            catch(Exception ex)
+            {
+                CMMLog.Error($"ERPApiFun Error:{ex.Message}");
+            }
+            
+
+            
+            return result;
+        }
+
+        /// <summary>
+        /// ERP浜や簰鏂规硶:浠诲姟瀹屾垚璋冪敤 鏉$爜涓绘。 鎺ュ彛
+        /// </summary>
+        /// <param name="timeStamp"></param>
+        /// <returns></returns>
+        public static bool ERPApiFuncTwo(string timeStamp)
+        {
+            bool result = false;
+            try
+            {
+                var model = MongoDBSingleton.Instance.FindOne<TimeCuoInfoCom>(Query.EQ("timeStamp", int.Parse(timeStamp)), "TimeCuoInfoCom");
+                if (model != null)
+                {
+                    string userToken = ERPGetLogin();
+                    if (!string.IsNullOrEmpty(userToken))
+                    {
+                        // 浠诲姟瀹屾垚璋冪敤 鏉$爜涓绘。 鎺ュ彛
+                        result = ERPBarCodeInfo(userToken, model);
+                    }
+                    else CMMLog.Error($"ERPApiFuncTwo Error:鏈幏鍙栧埌userToken.");
+                }
+                else CMMLog.Error($"ERPApiFuncTwo Error:褰撳墠浠诲姟鏈幏鍙栧埌瀵瑰簲鐨勬椂闂存埑鏁版嵁銆傛椂闂存埑锛歿timeStamp}锛屾椂闂存埑琛細TimeCuoInfoCom");
+            }
+            catch (Exception ex)
+            {
+                CMMLog.Error($"ERPApiFuncTwo Error:{ex.Message}");
+            }
+
+            return result;
+        }
+
+        public static string CooKie = "";
+        /// <summary>
+        /// ERP鐧诲綍鎺ュ彛
+        /// </summary>
+        public static string ERPGetLogin()
+        {
+            // 鑾峰彇閰嶇疆鏂囦欢鏁版嵁
+            string userToken = "";
+            try
+            {
+                string res = JsonConvert.SerializeObject(new
+                {
+                    parameters = new ArrayList { LoginInfo[0], LoginInfo[1], LoginInfo[2], int.Parse(LoginInfo[3]) }
+                });
+                string feedback = "";
+                string url = Settings.GetThirdUrlList().Where(a => a.UrlNo == "1" && a.enable == 1).FirstOrDefault().Url;
+                CMMLog.Info($"ERPGetLogin Res:{res},url:{url}");
+                feedback = api.WebPost(url, res,"","GetCooKie");
+                CMMLog.Info($"ERPGetLogin Req:{feedback}");
+                if (!string.IsNullOrEmpty(feedback))
+                {
+                    var response = JsonConvert.DeserializeObject<ERPGetLoginResModel>(feedback);
+                    if (response.IsSuccessByAPI && !string.IsNullOrEmpty(CooKie)) userToken = CooKie;
+                    else CMMLog.Info($"ERPGetLogin:璋冪敤鎺ュ彛澶辫触锛岃幏鍙朇ookie澶辫触銆�);
+                }
+            }
+            catch (Exception ex)
+            {
+                CMMLog.Error($"WMSPost WmsInTask Error:{ex.Message}");
+            }
+            CMMLog.Info($"ERPGetLogin userToken:{userToken}");
+            return userToken;
+        }
+        public class ERPGetLoginResModel
+        {
+            public string Message { get; set; }
+            public string MessageCode { get; set; }
+            public int LoginResultType { get; set; }
+            public ERPGetLoginResContextModel Context { get; set; }
+            public class ERPGetLoginResContextModel
+            {
+                public string UserToken { get; set; }
+            }
+
+            /// <summary>
+            /// 鎺ュ彛璋冪敤鐘舵� 鎴愬姛-true 澶辫触-false
+            /// </summary>
+            public bool IsSuccessByAPI { get; set; }
+        }
+
+        /// <summary>
+        /// 鍙戦�ERP鎵瑰彿涓绘。鏁版嵁
+        /// </summary>
+        /// <returns></returns>
+        public static bool ERPBatchInfo(string userToken, TimeCuoInfoCom model)
+        {
+            bool result = false;
+
+            try
+            {
+                ERPBatchInfoModel sendInfo = new ERPBatchInfoModel();
+                sendInfo.Model.FCreateOrgId.FNumber = model.createOrganization;
+                sendInfo.Model.FMaterialID.FNumber = model.materialCode;
+                sendInfo.Model.FNumber = model.batchNumber;
+                sendInfo.Model.FProduceDeptID.FNumber = model.workshopCode;
+                sendInfo.Model.FInStockDate = model.BusinessDate;
+
+                string res = JsonConvert.SerializeObject(new
+                {
+                    parameters = new ArrayList { "BD_BatchMainFile", JsonConvert.SerializeObject(sendInfo) }
+                });
+                string feedback = "";
+                string url = Settings.GetThirdUrlList().Where(a => a.UrlNo == "3" && a.enable == 1).FirstOrDefault().Url;
+                CMMLog.Info($"ERPBatchInfo Res:{res},Cookie:{userToken},url:{url}");
+                feedback = api.WebPost(url, res, userToken);
+                CMMLog.Info($"ERPBatchInfo Req:{feedback}");
+                if (!string.IsNullOrEmpty(feedback))
+                {
+                    var response = JsonConvert.DeserializeObject<ERPResModel>(feedback);
+                    result = response.Result.ResponseStatus.IsSuccess;
+                }
+            }
+            catch (Exception ex)
+            {
+                CMMLog.Error($"ERPBatchInfo WmsInTask Error:{ex.Message}");
+            }
+
+
+            return result;
+        }
+        public class ERPBatchInfoModel
+        {
+            public string Creator { get; set; } = "";
+            public Array NeedUpDateFields { get; set; } = new Array[0];
+            public Array NeedReturnFields { get; set; } = new Array[0];
+            public string IsDeleteEntry { get; set; } = "true";
+            public string SubSystemId { get; set; } = "";
+            public string IsVerifyBaseDataField { get; set; } = "false";
+            public string IsEntryBatchFill { get; set; } = "true";
+            public string ValidateFlag { get; set; } = "true";
+            public string NumberSearch { get; set; } = "true";
+            public string InterationFlags { get; set; } = "";
+            public string IsAutoSubmitAndAudit { get; set; } = "false";
+            public ModelModel Model { get; set; } = new ModelModel();
+            public class ModelModel
+            {
+                public int FLOTID { get; set; } = 0;
+
+                public FCreateOrgIdModel FCreateOrgId { get; set; } = new FCreateOrgIdModel();
+                public class FCreateOrgIdModel
+                {
+                    /// <summary>
+                        /// 鍒涘缓缁勭粐
+                        /// </summary>
+                    public string FNumber { get; set; }
+                }
+                public FMaterialIDModel FMaterialID { get; set; } = new FMaterialIDModel();
+                public class FMaterialIDModel
+                {
+                    /// <summary>
+                        /// 鐗╂枡缂栫爜
+                        /// </summary>
+                    public string FNumber { get; set; }
+                }
+                /// <summary>
+                    /// 鎵瑰彿
+                    /// </summary>
+                public string FNumber { get; set; }
+                public FProduceDeptIDModel FProduceDeptID { get; set; } = new FProduceDeptIDModel();
+                public class FProduceDeptIDModel
+                {
+                    /// <summary>
+                        /// 杞﹂棿缂栫爜
+                        /// </summary>
+                    public string FNumber { get; set; }
+                }
+                /// <summary>
+                    /// 涓氬姟鏃ユ湡
+                    /// </summary>
+                public string FInStockDate { get; set; }
+            }
+        }
+
+        /// <summary>
+        /// 鍙戦�ERP鏉$爜涓绘。鏁版嵁
+        /// </summary>
+        /// <returns></returns>
+        public static bool ERPBarCodeInfo(string userToken, TimeCuoInfoCom model)
+        {
+            bool result = false;
+
+            try
+            {
+                ERPBarCodeInfoModel sendInfo = new ERPBarCodeInfoModel();
+
+                sendInfo.Model.FBarCode = model.barcode;
+                sendInfo.Model.FBarCodeRule.FNumber = model.codeRules;
+                sendInfo.Model.FMaterialID.FNumber = model.materialCode;
+                sendInfo.Model.F_JY_CZZ.FNumber = model.employeeId.ToString();
+                sendInfo.Model.FCreateOrgId.FNumber = model.createOrganization;
+                sendInfo.Model.FLot.FNumber = model.batchNumber;
+                sendInfo.Model.FUnitId.FNumber = model.measurementUnit;
+                sendInfo.Model.FQty = model.count;
+                sendInfo.Model.FStockId.FNumber = model.WarehouseCode;
+                sendInfo.Model.FDeptId.FNumber = model.workshopCode;
+                sendInfo.Model.FBillDate = model.BusinessDate;
+
+                string res = JsonConvert.SerializeObject(new
+                {
+                    parameters = new ArrayList { "BD_BarCodeMainFile", JsonConvert.SerializeObject(sendInfo) }
+                });
+                string feedback = "";
+                string url = Settings.GetThirdUrlList().Where(a => a.UrlNo == "2" && a.enable == 1).FirstOrDefault().Url;
+                CMMLog.Info($"ERPBarCodeInfo Res:{res},Cookie:{userToken},url:{url}");
+                feedback = api.WebPost(url, res, userToken);
+                CMMLog.Info($"ERPBarCodeInfo Req:{feedback}");
+                if (!string.IsNullOrEmpty(feedback))
+                {
+                    var response = JsonConvert.DeserializeObject<ERPResModel>(feedback);
+                    result = response.Result.ResponseStatus.IsSuccess;
+                }
+            }
+            catch (Exception ex)
+            {
+                CMMLog.Error($"ERPBarCodeInfo Error:{ex.Message}");
+            }
+
+
+            return result;
+        }
+        public class ERPBarCodeInfoModel
+        {
+            public string Creator { get; set; } = "";
+            public Array NeedUpDateFields { get; set; } = new Array[0];
+            public Array NeedReturnFields { get; set; } = new Array[0];
+            public string IsDeleteEntry { get; set; } = "true";
+            public string SubSystemId { get; set; } = "";
+            public string IsVerifyBaseDataField { get; set; } = "false";
+            public string IsEntryBatchFill { get; set; } = "true";
+            public string ValidateFlag { get; set; } = "true";
+            public string NumberSearch { get; set; } = "true";
+            public string InterationFlags { get; set; } = "";
+            public string IsAutoSubmitAndAudit { get; set; } = "false";
+            public ModelModel Model { get; set; } = new ModelModel();
+            public class ModelModel
+            {
+                public int FID { get; set; } = 0;
+                /// <summary>
+                    /// 鏉″舰鐮�+                    /// </summary>
+                public string FBarCode { get; set; }
+                public FBarCodeRuleModel FBarCodeRule { get; set; } = new FBarCodeRuleModel();
+                public class FBarCodeRuleModel
+                {
+                    /// <summary>
+                    /// 鏉$爜瑙勫垯
+                    /// </summary>
+                    public string FNumber { get; set; }
+                }
+                public FMaterialIDModel FMaterialID { get; set; } = new FMaterialIDModel();
+                public class FMaterialIDModel
+                {
+                    /// <summary>
+                        /// 鐗╂枡缂栫爜
+                        /// </summary>
+                    public string FNumber { get; set; }
+                }
+                public F_JY_CZZModel F_JY_CZZ { get; set; } = new F_JY_CZZModel();
+                public class F_JY_CZZModel
+                {
+                    /// <summary>
+                    /// 鍛樺伐缂栧彿
+                    /// </summary>
+                    public string FNumber { get; set; }
+                }
+                public FCreateOrgIdModel FCreateOrgId { get; set; } = new FCreateOrgIdModel();
+                public class FCreateOrgIdModel
+                {
+                    /// <summary>
+                        /// 鍒涘缓缁勭粐
+                        /// </summary>
+                    public string FNumber { get; set; }
+                }
+                public FLotModel FLot { get; set; } = new FLotModel();
+                public class FLotModel
+                {
+                    /// <summary>
+                    /// 鎵瑰彿
+                    /// </summary>
+                    public string FNumber { get; set; }
+                }
+                public FUnitIdModel FUnitId { get; set; } = new FUnitIdModel();
+                public class FUnitIdModel
+                {
+                    /// <summary>
+                    /// 璁¢噺鍗曚綅
+                    /// </summary>
+                    public string FNumber { get; set; }
+                }
+                /// <summary>
+                /// 鏁伴噺
+                /// </summary>
+                public int FQty { get; set; }
+                public FStockIdModel FStockId { get; set; } = new FStockIdModel();
+                public class FStockIdModel
+                {
+                    /// <summary>
+                    /// 浠撳簱缂栫爜
+                    /// </summary>
+                    public string FNumber { get; set; }
+                }
+                public FDeptIdModel FDeptId { get; set; } = new FDeptIdModel();
+                public class FDeptIdModel
+                {
+                    /// <summary>
+                    /// 杞﹂棿缂栫爜
+                    /// </summary>
+                    public string FNumber { get; set; }
+                }
+                /// <summary>
+                /// 涓氬姟鏃ユ湡
+                /// </summary>
+                public string FBillDate { get; set; }
+            }
+        }
+
+        public class ERPResModel
+        {
+            public ResultModel Result { get; set; }
+
+            public class ResultModel
+            {
+                public ResponseStatusModel ResponseStatus { get; set; }
+
+                public class ResponseStatusModel
+                {
+                    public bool IsSuccess { get; set; }
+                    public int MsgCode { get; set; }
+                }
+            }
+        }
+
+        public static void HandleItemInfo(string itemInfo,int startIndex, int endIndex , int[] num)
+        {
+            string data = itemInfo;// 瑕佸啓鍏ョ殑澶勭悊鍚庢暟鎹�+            string dataHeader = "";// 鏁版嵁澶村鐞�+            int dataCutCont = 0;// 鏁版嵁鎴彇寮�叧
+            if (itemInfo.Length % 2 != 0)
+            {
+                data = "0" + itemInfo;
+                dataHeader = "" + itemInfo.Substring(0, 1);
+            }
+            int maxLength = startIndex - 1 + (data.Length / 2);// data.Length / 2 鑷冲皯涓�1
+            for (int i = startIndex; i <= maxLength; i++)
+            {
+                num[i] = int.Parse(PLCControl.AsciiToTen(data.Substring(dataCutCont, 2)));
+                dataCutCont = dataCutCont + 2;
+            }
+            if (!string.IsNullOrEmpty(dataHeader)) num[startIndex] = int.Parse(PLCControl.AsciiToTen(dataHeader));
+            for (int i = maxLength + 1; i <= endIndex; i++) num[i] = 0;//灏嗗綋鍓嶅鐞嗗畬鏁版嵁鐨勫叾浠栨棤鏁版嵁鐨勯�閬撳叏閮ㄧ疆涓�0
+            CMMLog.Debug($"WriteItemInfo:鐗╂枡淇℃伅澶勭悊-1銆傚鐞嗘暟鎹細{itemInfo},澶勭悊鍚庢暟鎹細{JsonConvert.SerializeObject(num)}");
+        }
+
+        public static void HandleItemInfoChina(string itemInfo, int startIndex, int endIndex, int[] num)
+        {
+            string data = itemInfo;// 瑕佸啓鍏ョ殑澶勭悊鍚庢暟鎹�+            int dataCutCont = 0;// 鏁版嵁鎴彇寮�叧
+            int maxLength = startIndex - 1 + data.Length;// data.Length / 2 鑷冲皯涓�1
+            for (int i = startIndex; i <= maxLength; i++)
+            {
+                num[i] = Test.ConvertToAscii(char.Parse(data.Substring(dataCutCont, 1)));
+                dataCutCont = dataCutCont + 1;
+            }
+            for (int i = maxLength + 1; i <= endIndex; i++) num[i] = 0;//灏嗗綋鍓嶅鐞嗗畬鏁版嵁鐨勫叾浠栨棤鏁版嵁鐨勯�閬撳叏閮ㄧ疆涓�0
+            CMMLog.Debug($"WriteItemInfo:鐗╂枡淇℃伅澶勭悊-1銆傚鐞嗘暟鎹細{itemInfo},澶勭悊鍚庢暟鎹細{JsonConvert.SerializeObject(num)}");
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍛樺伐缂栫爜
+        /// </summary>
+        /// <returns></returns>
+        public static string GetEmployeeId(int readAddr,string ip,int port)
+        {
+            string employeeId = "";
+            var employeeIdAction = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+            {
+                addr = readAddr,
+                host = ip,
+                port = port,
+                dataNum = 2
+            });
+            employeeId = Convert.ToInt32(PLCControl.Completion(employeeIdAction.result[0]) + PLCControl.Completion(employeeIdAction.result[1]), 2).ToString();
+
+            return employeeId;
+        }
+
+
+        public static string packageCont = "1";// 鍖呰鏈哄绉癠I鍙樻洿鍔熻兘寮�叧  1-寮�惎 0-鍏抽棴
+
+        /// <summary>
+        /// 鎻掑叆鍖呰鏈轰俊鎭〃
+        /// </summary>
+        public static void packageInfo(string machineNo, string trayCode, string lotNo, string oneTrayWeight)
+        {
+            if (packageCont == "1")
+            {
+                try
+                {
+                    MongoDBSingleton.Instance.Insert<packageInfoModel>(new packageInfoModel
+                    {
+                        machineNo = machineNo,
+                        trayCode = trayCode,
+                        batchNo = lotNo,
+                        time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+                        weight = oneTrayWeight,
+                        CreateTime = DateTime.Now.AddHours(8)
+                    }, "packageInfoModel");
+                }
+                catch (Exception ex)
+                {
+                    CMMLog.Error($"packageInfo Error:{ex.Message}");
+                }
+            }
+
+        }
+
+        public static void updatePackageInfo(string machince, string trayCode, int[] result)
+        {
+            if (packageCont == "1")
+            {
+                try
+                {
+                    var queryList = MongoDBSingleton.Instance.Find<packageInfoModel>(Query.And(Query.EQ("machineNo", machince), Query.EQ("trayCode", trayCode), Query.EQ("weight2", "")), "packageInfoModel");
+                    if (queryList.Count > 0)
+                    {
+                        packageInfoModel query = queryList.OrderByDescending(a => a.time).First();
+                        if (query != null)
+                        {
+                            CMMLog.Debug($"updatePackageInfo:{query.machineNo},trayCode:{query.trayCode},weight:{query.weight}");
+                            //璇诲彇澶嶇О骞冲彴鐨勯噸閲�result[17]) + PLCControl.Completion(result[18]
+                            double x = (double)Convert.ToInt32(PLCControl.Completion(result[19]) + PLCControl.Completion(result[20]), 2) / 100;
+                            string weight = x.ToString();
+                            CMMLog.Debug($"updatePackageInfo:鍘熷澶嶇О閲嶉噺鏁版嵁锛歿result[19]},{result[20]};杞崲鍚庡绉伴噸閲忔暟鎹細{weight}");
+
+                            //閲嶉噺宸�
+                            //string weightDifference = (double.Parse(query.weight) - x).ToString();
+                            string weightDifference = Math.Round((double.Parse(query.weight) - x), 2).ToString();
+                            //CMMLog.Info($"weightDifference2:{weightDifference2}");
+
+                            //灏嗗绉板钩鍙伴噸閲忓啓鍏ヤ腑闂磋〃
+                            MongoDBSingleton.Instance.Update<packageInfoModel>(Query.And(Query.EQ("machineNo", machince), Query.EQ("time", query.time), Query.EQ("trayCode", query.trayCode), Query.EQ("weight2", "")), Update.Set("weight2", weight).Set("weightDifference", weightDifference), UpdateFlags.None);
+
+                        }
+                        else CMMLog.Debug($"鏁版嵁鏌ヨ澶辫触");
+                    }
+                    else CMMLog.Debug($"updatePackageInfo:packageInfoModel鏈壘鍒版暟鎹紝machineNo:{machince},trayCode:{trayCode}");
+                }
+                catch (Exception ex)
+                {
+                    CMMLog.Error($"updatePackageInfo Error:{ex.Message}");
+                }
+            }
+        }
+
+        public static void deletePackageInfo()
+        {
+            if (packageCont == "1")
+            {
+                try
+                {
+                    var request = MongoDBSingleton.Instance.FindAll<packageInfoModel>();
+                    if (request.Count > 0)
+                    {
+                        request.ForEach(a =>
+                        {
+                            if (DateTime.Now.Subtract(a.CreateTime).TotalDays > 7)
+                            {
+                                MongoDBSingleton.Instance.Remove<packageInfoModel>(Query.EQ("_id", a._id), "packageInfoModel", RemoveFlags.None);
+                            }
+                        });
+                    }
+                }
+                catch (Exception ex)
+                {
+                    CMMLog.Error($"deletePackageInfo Error:{ex.Message}");
+                }
+
+            }
+        }
+
+        internal static void insertMidTable()
+        {
+            try
+            {
+                var db = new SqlHelper<object>().GetInstance(false);
+                bool resul = false;
+
+                //CMMLog.Info($"鏌ヨ銆怲_JY_MATERIALSync銆戣〃锛屾煡璇㈡潯浠讹細a.FWorkShopNumber == BM000594 && a.FUseOrgNumber == 02");
+                var materInfo = db.Queryable<T_JY_MATERIALSync>().Where(a => a.FWorkShopNumber == "BM000594" && (a.FUseOrgNumber == "146" || a.FUseOrgNumber == "161" || a.FUseOrgNumber == "162" || a.FUseOrgNumber == "165" || a.FUseOrgNumber == "177")).ToList();
+                if (materInfo.Count > 0)
+                {
+                    var itemList = MongoDBSingleton.Instance.FindAll<ERPItemTable>();
+                    if (itemList.Count != materInfo.Count)
+                    {
+                        MongoDBSingleton.Instance.RemoveAll<ERPItemTable>("ERPItemTable");
+                    }
+
+                    foreach (var a in materInfo)
+                    {
+                        var itemInfo = MongoDBSingleton.Instance.FindOne<ERPItemTable>(Query.EQ("item_code", a.FNumber), "ERPItemTable");
+                        if (itemInfo == null)
+                        {
+                            CMMLog.Info($"涓棿琛ㄣ�ERPItemTable銆戞湭鏌ヨ鍒版暟鎹紝鐗╂枡缂栫爜锛歿a.FNumber}");
+                            int itemNo = 1;
+                            // 鑾峰彇鏈�ぇ搴忓彿鐨勬暟鎹�+                            var maxErpItemInfoList = MongoDBSingleton.Instance.FindAll<ERPItemTable>("ERPItemTable");
+                            if (maxErpItemInfoList.Count > 0)
+                            {
+                                var maxErpItemInfo = maxErpItemInfoList.OrderByDescending(it => it.item_no).First();
+                                if (maxErpItemInfo != null) itemNo = maxErpItemInfo.item_no + 1;
+                            }
+
+                            CMMLog.Info($"鑾峰彇鎻掑叆搴忓彿锛歿itemNo}");
+                            MongoDBSingleton.Instance.Insert<ERPItemTable>(new ERPItemTable
+                            {
+                                item_no = itemNo,
+                                item_code = a.FNumber,
+                                item_name = a.FName,
+                                item_spec = a.FSpecification,
+                                item_uom = a.FStoreUnit,
+                                dateTime = DateTime.Now
+                            }, "ERPItemTable");
+                            resul = true;
+                        }
+                        else
+                        {
+                            //鏌ヨ鏁版嵁鏄惁鐩稿悓
+                            if (itemInfo.item_name != a.FName || itemInfo.item_spec != a.FSpecification || itemInfo.item_uom != a.FStoreUnit)
+                            {
+                                var query = Query.EQ("item_code", a.FName);
+                                var update = Update.Set("item_name", a.FName).Set("item_spec", a.FSpecification)
+                                .Set("item_uom", a.FStoreUnit).Set("dateTime", DateTime.Now);
+                                MongoDBSingleton.Instance.Update<ERPItemTable>(query, update, "ERPItemTable", MongoDB.Driver.UpdateFlags.None);
+                                resul = true;
+                            }
+                        }
+                    }
+                }
+
+                var empInfo = db.Queryable<T_JY_EMPINFOSync>().Take(100).ToList();
+                if (empInfo.Count > 0)
+                {
+                    var empList = MongoDBSingleton.Instance.FindAll<ERPEmployeeTable>();
+                    if (empList.Count != empInfo.Count)
+                    {
+                        MongoDBSingleton.Instance.RemoveAll<ERPEmployeeTable>("ERPEmployeeTable");
+                    }
+                    foreach (var a in empInfo)
+                    {
+                        var erpEmpInfo = MongoDBSingleton.Instance.FindOne<ERPEmployeeTable>(Query.EQ("item_code", a.FNumber), "ERPEmployeeTable");
+                        if (erpEmpInfo == null)
+                        {
+                            CMMLog.Info($"涓棿琛ㄣ�ERPEmployeeTable銆戞湭鏌ヨ鍒版暟鎹紝鐗╂枡缂栫爜锛歿a.FNumber}");
+                            int itemNo = 1;
+                            // 鑾峰彇鏈�ぇ搴忓彿鐨勬暟鎹�+                            var maxErpEmpInfoList = MongoDBSingleton.Instance.FindAll<ERPEmployeeTable>("ERPEmployeeTable");
+                            if (maxErpEmpInfoList.Count > 0)
+                            {
+                                var maxErpEmpInfo = maxErpEmpInfoList.OrderByDescending(it => it.item_no).First();
+                                if (maxErpEmpInfo != null) itemNo = maxErpEmpInfo.item_no + 1;
+                            }
+
+                            CMMLog.Info($"鑾峰彇鎻掑叆搴忓彿锛歿itemNo}");
+                            MongoDBSingleton.Instance.Insert<ERPEmployeeTable>(new ERPEmployeeTable
+                            {
+                                item_no = itemNo,
+                                item_code = a.FNumber,
+                                item_name = a.FName,
+                                employee_id = a.FStaffNumber,
+                                dateTime = DateTime.Now
+                            }, "ERPEmployeeTable");
+
+                            resul = true;
+                        }
+                        else
+                        {
+                            if (erpEmpInfo.employee_id != a.FStaffNumber)
+                            {
+                                var query = Query.EQ("item_code", a.FNumber);
+                                var update = Update.Set("item_name", a.FName).Set("employee_id", a.FStaffNumber)
+                                .Set("dateTime", DateTime.Now);
+                                MongoDBSingleton.Instance.Update<ERPEmployeeTable>(query, update, "ERPEmployeeTable", MongoDB.Driver.UpdateFlags.None);
+
+                                resul = true;
+                            }
+                        }
+                    }
+                }
+
+                if (resul)
+                {
+                    if (!ERPService.WriteEmpAndItemInfoTwo())
+                    {
+                        //娓呯┖琛ㄦ暟鎹�+                        MongoDBSingleton.Instance.RemoveAll<ERPItemTable>("ERPItemTable");
+                        MongoDBSingleton.Instance.RemoveAll<ERPEmployeeTable>("ERPEmployeeTable");
+                    }
+                }
+            }
+            catch(Exception ex)
+            {
+                CMMLog.Info("insertMidTable err"+ex.Message);
+            }
+        }
+
+        internal static bool WriteEmpAndItemInfoTwo()
+        {
+            try
+            {
+                var plcList = Settings.GetPlcInfo().Where(a => a.deviceType == "1" && a.enable == 1).ToList();
+                if(plcList.Count > 0)
+                {
+                    foreach(var a in plcList)
+                    {
+                        string ip = a.ip;
+                        int port = a.plcPort;
+
+                        TcpClient client = new TcpClient(ip, port);
+
+                        CMMLog.Info($"WriteEmpAndItemInfoTwo 宸茶繛鎺ュ埌鏈嶅姟鍣�ip:{ip},port:{port}");
+                        NetworkStream stream = client.GetStream();
+                        List<byte> paddedData = new List<byte>();
+                        var encode = Encoding.GetEncoding("GB2312");
+                        int i = 0;
+                        while (i < 150)
+                        {
+                            if (i < 100)
+                            {
+                                //鍛樺伐缂栧彿
+                                var erpInfo = MongoDBSingleton.Instance.FindOne<ERPEmployeeTable>(Query.EQ("item_no", i + 1), "ERPEmployeeTable");
+                                if (erpInfo != null && !string.IsNullOrEmpty(erpInfo.employee_id))
+                                {
+                                    // 鍐呭瓨鍦板潃 0~4 鍗忚鍦板潃 1~5 璁¢噺鍗曚綅
+                                    byte[] data1 = encode.GetBytes(erpInfo.employee_id);
+                                    byte[] paddedData1 = new byte[10];
+
+                                    Array.Copy(data1, 0, paddedData1, 0, Math.Min(data1.Length, 10));
+
+                                    // 灏嗘暟缁勮浆鎹负鍒楄〃
+                                    paddedData.AddRange(paddedData1);
+                                }
+                                else
+                                {
+                                    paddedData.AddRange(new byte[10]);
+                                }
+                            }
+                            else
+                            {
+                                int itemNo = i - 99;
+                                //鐗╂枡淇℃伅
+                                var itemInfo = MongoDBSingleton.Instance.FindOne<ERPItemTable>(Query.EQ("item_no", itemNo), "ERPItemTable");
+                                if (itemInfo != null)
+                                {
+                                    // 灏嗘暟缁勮浆鎹负鍒楄〃
+                                    paddedData.AddRange(getBuff(itemInfo.item_spec, 20, 3));
+
+                                    paddedData.AddRange(getBuff(itemInfo.item_code, 30, 1));
+
+                                    paddedData.AddRange(getBuff(itemInfo.item_name, 40, 3));
+
+                                    paddedData.AddRange(getBuff(itemInfo.item_uom, 10, 1));
+                                }
+                                else
+                                {
+                                    paddedData.AddRange(new byte[100]);
+                                }
+                            }
+                            i++;
+                        }
+
+                        byte[] combinedArray = paddedData.ToArray();
+
+                        if (stream.CanWrite)
+                        {
+                            stream.Write(combinedArray, 0, combinedArray.Length);
+                            CMMLog.Info("WriteEmpAndItemInfoTwo锛� + JsonConvert.SerializeObject(combinedArray));
+                        }
+                        else
+                        {
+                            CMMLog.Info("WriteEmpAndItemInfoTwo锛氫笉鏀寔鍐欏叆鏁版嵁");
+                        }
+                        Thread.Sleep(1000);
+                    }
+                }
+                //CMMLog.Info($"WriteEmpAndItemInfoTwo {combinedArray.Length}");
+
+                //CMMLog.Info($"Received: {encode.GetString(combinedArray, 0, 6000)}");
+                return true;
+            }
+            catch (IOException ex)
+            {
+                // 澶勭悊鍐欏叆澶辫触鐨勬儏鍐�+                Console.WriteLine("WriteEmpAndItemInfoTwo err 鍐欏叆澶辫触: " + ex.Message);
+                return false;
+            }
+            catch (Exception ex)
+            {
+                CMMLog.Info("WriteEmpAndItemInfoTwo err:" + ex.Message);
+                return false;
+                //WriteEmpAndItemInfoTwo();
+            }
+        }
+
+        private static byte[] getBuff(string value, int bit, int result)
+        {
+            byte[] data1 = Encoding.GetEncoding("GB2312").GetBytes(value);
+            if (result == 2) data1 = Encoding.UTF8.GetBytes(value);
+            if (result == 3) data1 = Encoding.BigEndianUnicode.GetBytes(value);
+            byte[] paddedData1 = new byte[bit];
+            Array.Copy(data1, 0, paddedData1, 0, Math.Min(data1.Length, bit)); // 灏嗘暟鎹鍒跺埌6000瀛楄妭鐨勭紦鍐插尯涓�+            return paddedData1;
+        }
+
+        internal static void senderpTask(TimeCuoInfoCom time, string startBit)
+        {
+            try
+            {
+                //CMMLog.Info("鎻掑叆SendErpTaskInfoTable 琛�寮�:" + JsonConvert.SerializeObject(time));
+                var erpInfo = MongoDBSingleton.Instance.FindOne<SendErpTaskInfoTable>(Query.EQ("timeStamp", time.timeStamp.ToString()), "SendErpTaskInfoTable");
+                if (erpInfo == null)
+                {
+                    CMMLog.Info("鎻掑叆SendErpTaskInfoTable 琛�1");
+                    if(time.BusinessDate.Length == 8)
+                    {
+                        time.BusinessDate = time.BusinessDate.Substring(0, 4) + "-" + time.BusinessDate.Substring(4, 2) + "-" + time.BusinessDate.Substring(6);
+                    }
+
+                    MongoDBSingleton.Instance.Insert<SendErpTaskInfoTable>(new SendErpTaskInfoTable
+                    {
+                        barcode = time.barcode,
+                        codeRules = time.codeRules,
+                        materialCode = time.materialCode,
+                        createOrganization = time.createOrganization,
+                        batchNumber = time.batchNumber,
+                        measurementUnit = time.measurementUnit,
+                        count = time.count,
+                        WarehouseCode = time.WarehouseCode,
+                        workshopCode = time.workshopCode,
+                        BusinessDate = Convert.ToDateTime(time.BusinessDate).AddHours(8),
+                        FProductionDate = Convert.ToDateTime(time.BusinessDate).AddHours(8),
+                        FExpirationDate = Convert.ToDateTime(time.BusinessDate).AddHours(8).AddDays(365),
+                        employeeID1 = time.employeeId,
+                        dateTime = DateTime.Now.AddHours(8),
+                        //鍙樻洿娉ㄩ噴
+                    }, "SendErpTaskInfoTable");
+                }
+                
+                CMMLog.Info("鎻掑叆SendErpTaskInfoTable 琛�缁撴潫");
+            }
+            catch (Exception ex)
+            {
+
+                CMMLog.Info("鎻掑叆SendErpTaskInfoTable 琛�err:" + ex.Message);
+            }
+
+        }
+
+        public class packageInfoModel
+        {
+            public ObjectId _id { get; set; }
+            /// <summary>
+            /// 鍖呰鏈哄彿
+            /// </summary>
+            public string machineNo { get; set; } = "";
+            /// <summary>
+            /// 鎵樼洏鍙�+            /// </summary>
+            public string trayCode { get; set; } = "";
+            /// <summary>
+            /// 鎵规鍙�+            /// </summary>
+            public string batchNo { get; set; } = "";
+            /// <summary>
+            /// 涓嬫枡鏃堕棿
+            /// </summary>
+            public string time { get; set; } = "";
+            /// <summary>
+            /// 閲嶉噺
+            /// </summary>
+            public string weight { get; set; } = "";
+            /// <summary>
+            /// 澶嶇О閲嶉噺
+            /// </summary>
+            public string weight2 { get; set; } = "";
+            /// <summary>
+            /// 閲嶉噺宸�
+            /// </summary>
+            public string weightDifference { get; set; } = "";
+            /// <summary>
+            /// 鍒涘缓鏃堕棿
+            /// </summary>
+            public DateTime CreateTime { get; set; }
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMProtocol/EnentListen.cs b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/EnentListen.cs
new file mode 100644
index 0000000..dda102c
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/EnentListen.cs
@@ -0,0 +1,326 @@
+锘縰sing Hanhe.iWCS.Business;
+using Hanhe.iWCS.Common;
+using Hanhe.iWCS.Event;
+using Hanhe.iWCS.Interface;
+using Hanhe.iWCS.MData;
+using Hanhe.iWCS.Model;
+using MongoDB.Bson;
+using MongoDB.Driver;
+using MongoDB.Driver.Builders;
+using Newtonsoft.Json;
+using System;
+using System.Linq;
+using System.Threading;
+using static Hanhe.iWCS.IndonesiaGLMProtocol.PLCControl;
+using static Hanhe.iWCS.IndonesiaGLMProtocol.ProcessHelper;
+
+namespace Hanhe.iWCS.IndonesiaGLMProtocol
+{
+    /// <summary>
+    /// 浜嬩欢鐩戝惉澶勭悊鍜岃Е鍙戜簨浠跺洖璋�+    /// </summary>
+    public class EnentListen : IEnentListen
+    {
+        private EquipmentCommandEQBLL CommandEQBLL = new EquipmentCommandEQBLL();
+        private ICallTaskProcessing iCallTask = new ICallTaskProcessing();
+        static object locker = new object();
+
+        static object lock10018 = new object();
+        static EnentListen() {
+        }
+        /// <summary>
+        /// 浜嬩欢璁㈤槄
+        /// </summary>
+        /// <param name="currActionModel">褰撳墠鍔ㄤ綔妯″瀷</param>
+        /// <returns></returns>
+        public bool EnentSubscribe(TN_I_TASK_DTL_ACTION currActionModel) {
+            try {
+                EventDelegate eventDelegate = new EventDelegate();
+                eventDelegate.CurrActionModel = currActionModel;
+                //eventDelegate.iSleep = 3000;
+                eventDelegate.StartListening();
+
+                return true;
+            }
+            catch (Exception ex) {
+                throw new Exception(ex.Message);
+            }
+        }
+
+        private SortByDocument sortBy = new SortByDocument { { "createTime", 1 } };
+        /// <summary>
+        /// 浜嬩欢鐩戝惉澶勭悊
+        /// </summary>
+        /// <param name="currActionModel">褰撳墠鍔ㄤ綔妯″瀷</param>
+        /// <returns>true:鏉′欢鎴愮珛 false:鏉′欢涓嶆垚绔�/returns>
+        public bool MonitorProcess(TN_I_TASK_DTL_ACTION currActionModel) {
+            bool bResult = false;
+            string msg = string.Empty;
+            #region   澶勭悊浠诲姟鐘舵�
+            if (currActionModel.CN_N_ACTION_CODE == 1027)
+            {
+                var request = MongoDBSingleton.Instance.FindAll<Mongo_AGV_TASK_STATE>();
+
+                if (request.Count > 0)
+                {
+                    request.ForEach(a =>
+                    {
+                        try
+                        {
+                            CMMLog.Info($"杩涘叆workflowToDeviceDriver,CN_S_TASK_NO:{a.TaskNo},CN_N_ACTION_CODE:{a.State},CN_S_DEVICE_CODE:{a.ForkliftNo},Ext2:{a.LockNo},Ext3:{a.ExtData}");
+                            new ProtocolAnalysis().workflowToDeviceDriver(new TN_I_TASK_DTL_ACTION { CN_S_TASK_NO = a.TaskNo, CN_N_ACTION_CODE = a.State, CN_S_DEVICE_CODE = a.ForkliftNo, Ext2 = a.LockNo, Ext3 = a.ExtData });
+                            MongoDBSingleton.Instance.Remove<Mongo_AGV_TASK_STATE>(Query.EQ("_id", a._id), RemoveFlags.Single);
+                        }
+                        catch(Exception ex)
+                        {
+                            CMMLog.Error(ex.Message,ex);
+                        }
+                    });
+                }
+                Thread.Sleep(3000);
+            }
+            #endregion
+
+            #region   3妤艰澶囦换鍔�+            #region 10001-璇诲彇鍖呰绾夸俊鍙�3妤煎寘瑁呭彇鏂�-宸插畬鎴�寰呮祴璇�
+            if (currActionModel.CN_N_ACTION_CODE == 10001)
+            {
+                var list = Settings.GetPlcInfo().Where(a => a.enable == 1 && a.deviceType == "1").ToList();
+                if (list.Count > 0)
+                {
+                    list.ForEach(a =>
+                    {
+                        CMMLog.Debug($"褰撳墠鍖呰鏈哄彿锛歿a.location},褰撳墠鏃堕棿锛歿DateTime.Now},褰撳墠ip:{a.ip},褰撳墠绔彛锛歿a.port}");
+                        PLCControl.CheckPackingMachine(a);
+                    });
+                }
+                Thread.Sleep(3000);
+                
+            }
+            #endregion
+
+            #region   10002-璇诲彇鍙犲寘鏈轰俊鍙凤紙涓夋ゼ鍙屽眰缂撳瓨鏋跺叆鍙犵洏鏈烘祦绋嬶級-3妤肩紦瀛樻灦鍏ュ彔鎵�-宸插畬鎴�寰呮祴璇�
+            if (currActionModel.CN_N_ACTION_CODE == 10002)
+            {
+                var list = Settings.GetPlcInfo().Where(a => a.enable == 1 && a.deviceType == "3").ToList();
+                if (list.Count > 0)
+                {
+                    list.ForEach(a =>
+                    {
+                        PLCControl.CacheStackingMouth(a);
+                        Thread.Sleep(1000);
+                    });
+                }
+                Thread.Sleep(3000);
+            }
+            #endregion
+            
+            #region   10003-璇诲寘瑁呮満淇″彿锛堝寘瑁呮満琛ョ┖鎵樻祦绋嬶級-3妤煎寘瑁呰ˉ绌�-宸插畬鎴�寰呮祴璇�
+            if (currActionModel.CN_N_ACTION_CODE == 10003)
+            {
+                var list = Settings.GetPlcInfo().Where(a => a.enable == 1 && a.deviceType == "1").ToList();
+                if (list.Count > 0)
+                {
+                    list.ForEach(a =>
+                    {
+                        PLCControl.PickUpBlank(a);
+                        Thread.Sleep(1000);
+                    });
+                }
+                Thread.Sleep(3000);
+            }
+            #endregion
+            
+            #region 10004-鎵撳寘绾跨┖鎵樿ˉ鏂欒姹傦紙3妤兼媶鐩樻満琛ョ┖鎵橈級-3妤兼媶鐩樿ˉ绌�-宸插畬鎴�寰呮祴璇�
+            if (currActionModel.CN_N_ACTION_CODE == 10004)
+            {
+                var plc = Settings.GetPlcInfo().Where(a => a.enable == 1 && a.deviceType == "6").FirstOrDefault();
+                if (plc != null)
+                {
+                    if (PickUpEndFree(plc.location))
+                    {
+                        PLCControl.CheckPackingLineEmpty(plc);
+                    }
+                }
+                Thread.Sleep(3000);
+            }
+            #endregion
+            
+            #region 10005-鍙犵洏鏈烘弧鎵樹笅绾匡紙3妤煎彔鐩樹笅绾匡級-3妤煎彔鐩樹笅绾�-宸插畬鎴�寰呮祴璇�
+            if (currActionModel.CN_N_ACTION_CODE == 10005)
+            {
+                var plc = Settings.GetPlcInfo().Where(a => a.enable == 1 && a.deviceType == "15").FirstOrDefault();
+                if (plc != null)
+                {
+                    if (ProcessHelper.PickUpStartFree(plc.location))
+                    {
+                        PLCControl.StackingLineEmpty(plc);
+                    }
+                }
+                Thread.Sleep(3000);
+            }
+            #endregion
+            
+            #region 10006-鎵撳寘绾夸笅绾�3妤兼墦鍖呬笅绾�-宸插畬鎴�寰呮祴璇�
+            if (currActionModel.CN_N_ACTION_CODE == 10006)
+            {
+                var plc = Settings.GetPlcInfo().Where(a => a.enable == 1 && a.deviceType == "4").FirstOrDefault();
+                if (plc != null)
+                {
+                    if (CheckStartFree(plc.location))
+                    {
+                        PLCControl.CheckPackingLineFull1(plc);
+                    }
+                }
+            }
+            #endregion
+            
+            #region 10007-缂撳瓨浣嶅叆鍏ユ枡骞冲彴
+            if (currActionModel.CN_N_ACTION_CODE == 10007)
+            {
+                var plc = Settings.GetPlcInfo().Where(a => a.deviceType == "18" && a.enable == 1).ToList();
+                if(plc.Count > 0)
+                {
+                    foreach(var a in plc)
+                    {
+                        PLCControl.InInlet(a);
+                    }
+                }
+                Thread.Sleep(3000);
+            }
+            #endregion
+
+            #endregion
+
+            #region   2000-鍏呯數浠诲姟--鏃犻渶鏀瑰姩
+            if (currActionModel.CN_N_ACTION_CODE == 2000)
+            {
+                ProcessHelper.AGVBatteryTime();
+                //Thread.Sleep(500);
+            }
+            #endregion
+
+            #region   2001-鍖呰鏈哄啓鐢甸噺--宸插畬鎴�寰呮祴璇�
+            if (currActionModel.CN_N_ACTION_CODE == 2001)
+            {
+                PLCControl.WriteBattery();
+                Thread.Sleep(3000);
+            }
+            #endregion
+
+            #region   10010-浠诲姟鍔ㄤ綔绾跨▼
+
+            if (currActionModel.CN_N_ACTION_CODE == 10010)
+            {
+                lock (locker)
+                {
+                    var request = MongoDBSingleton.Instance.FindAll<ActionControlModel>();
+            
+                    if (request.Count > 0)
+                    {
+                        request.ForEach(a =>
+                        {
+                            try
+                            {
+                                CMMLog.Info("澶嶇О鍏ョ紦瀛樻灦浠诲姟锛屽綋鍓嶆暟鎹細"+ JsonConvert.SerializeObject(a));
+                                if (a.actionNo == "1") SecondWeightActionOne(a);
+                            }
+                            catch (Exception ex)
+                            {
+                                CMMLog.Error($"10010" + ex.Message, ex);
+                            }
+                        });
+                    }
+                }
+                
+                Thread.Sleep(3000);
+            }
+
+            #endregion
+
+            #region 10011-璁惧鍚堟牸鐜囪绠�+            if (currActionModel.CN_N_ACTION_CODE == 10011)
+            {
+                PLCControl.machine();
+            }
+            #endregion
+
+            #region 10012-鑽嗛棬鍙樻洿
+            if (currActionModel.CN_N_ACTION_CODE == 10012)
+            {
+                PLCControl.changeSignal();
+                Thread.Sleep(3000);
+            }
+            #endregion
+
+            #region 10013-鍒犻櫎鍙樻洿涓棿琛ㄦ椂闂村ぇ浜庝袱鍛ㄧ殑浠诲姟
+            if (currActionModel.CN_N_ACTION_CODE == 10013)
+            {
+                PLCControl.deleteTableTask();
+                Thread.Sleep(30000);
+            }
+            #endregion
+
+            #region 10015-鍏ュ簱瀹屾垚鍙嶉ERP
+            if (currActionModel.CN_N_ACTION_CODE == 10014)
+            {
+                ERPService.SendERPTaskCompleteFunc();
+            }
+            #endregion
+
+            #region 10016-鐪嬫澘鍐呭鍐欏叆閫氶亾
+            //if (currActionModel.CN_N_ACTION_CODE == 10015)
+            //{
+            //    PLCControl.writeQtt();
+            //    Thread.Sleep(300000);
+            //}
+            #endregion
+
+            #region 10017-ERP鍙樻洿鍔熻兘 灏嗙墿鏂欒〃鏁版嵁鎻掑叆涓棿琛�骞跺啓鍏lc
+            if (currActionModel.CN_N_ACTION_CODE == 10017)
+            {
+                lock (lock10018)
+                {
+                    ERPService.insertMidTable();
+                }
+            }
+            #endregion
+            return bResult;
+        }
+
+        /// <summary>
+        /// 瑙﹀彂鍥炶皟澶勭悊
+        /// </summary>
+        /// <param name="currActionModel">褰撳墠鍔ㄤ綔妯″瀷</param>
+        /// <returns></returns>
+        public bool EventCallbacks(TN_I_TASK_DTL_ACTION currActionModel) {
+            bool bResult = true;
+            //娴嬭瘯鐮佹娴�+            if (currActionModel.CN_N_ACTION_CODE == 99999) {
+            }
+            return bResult;
+        }
+
+        private DateTime GetTime(int hour, int min = 0,int second = 0) {
+            var now = DateTime.Today;
+            var dt = new DateTime(now.Year, now.Month, now.Day, hour, min, second);
+            //Console.WriteLine(dt.ToString());
+            return dt;
+        }
+        public class Mongo_AGV_TASK_STATE
+        {
+            public ObjectId _id { get; set; }
+            public int State { get; set; }
+            public string TaskNo { get; set; }
+            public string ForkliftNo { get; set; }
+            public string LockNo { get; set; }
+            /// <summary>
+            /// 鎵╁睍鍙傛暟 鍙帴鏀朵换浣曞彉閲忕洰鍓嶅搴攅xt3
+            /// </summary>
+            public string ExtData { get; set; }
+        }
+
+
+        
+    }
+}
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMProtocol/Hanhe.iWCS.IndonesiaGLMProtocol.csproj b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/Hanhe.iWCS.IndonesiaGLMProtocol.csproj
new file mode 100644
index 0000000..00a6c19
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/Hanhe.iWCS.IndonesiaGLMProtocol.csproj
@@ -0,0 +1,155 @@
+锘�?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{C7C3F63B-BC2A-4EF2-A87D-FA561F35AD36}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Hanhe.iWCS.IndonesiaGLMProtocol</RootNamespace>
+    <AssemblyName>Hanhe.iWCS.IndonesiaGLMProtocol</AssemblyName>
+    <TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Hanhe.iWCS.AGVWebService, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\姹夊拰鏅鸿兘浜屾寮�彂鍖匼Hanhe.iWCS.AGVWebService.dll</HintPath>
+    </Reference>
+    <Reference Include="Hanhe.iWCS.Common">
+      <HintPath>..\..\姹夊拰鏅鸿兘浜屾寮�彂鍖匼Hanhe.iWCS.Common.dll</HintPath>
+    </Reference>
+    <Reference Include="Hanhe.iWCS.DeviceDriver">
+      <HintPath>..\..\姹夊拰鏅鸿兘浜屾寮�彂鍖匼Hanhe.iWCS.DeviceDriver.dll</HintPath>
+    </Reference>
+    <Reference Include="Hanhe.iWCS.Event">
+      <HintPath>..\..\姹夊拰鏅鸿兘浜屾寮�彂鍖匼Hanhe.iWCS.Event.dll</HintPath>
+    </Reference>
+    <Reference Include="Hanhe.iWCS.Factroy">
+      <HintPath>..\..\姹夊拰鏅鸿兘浜屾寮�彂鍖匼Hanhe.iWCS.Factroy.dll</HintPath>
+    </Reference>
+    <Reference Include="Hanhe.iWCS.IndonesiaGLMTCP">
+      <HintPath>..\Hanhe.iWCS.IndonesiaGLMTCP\bin\Debug\Hanhe.iWCS.IndonesiaGLMTCP.dll</HintPath>
+    </Reference>
+    <Reference Include="Hanhe.iWCS.Interface">
+      <HintPath>..\..\姹夊拰鏅鸿兘浜屾寮�彂鍖匼Hanhe.iWCS.Interface.dll</HintPath>
+    </Reference>
+    <Reference Include="Hanhe.iWCS.MData">
+      <HintPath>..\..\姹夊拰鏅鸿兘浜屾寮�彂鍖匼Hanhe.iWCS.MData.dll</HintPath>
+    </Reference>
+    <Reference Include="Hanhe.iWCS.Model">
+      <HintPath>..\..\姹夊拰鏅鸿兘浜屾寮�彂鍖匼Hanhe.iWCS.Model.dll</HintPath>
+    </Reference>
+    <Reference Include="log4net, Version=1.2.11.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\packages\log4net.2.0.5\lib\net45-full\log4net.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Owin, Version=4.1.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\Microsoft.Owin.4.1.1\lib\net45\Microsoft.Owin.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Owin.Host.HttpListener">
+      <HintPath>..\..\packages\Microsoft.Owin.Host.HttpListener.4.1.1\lib\net45\Microsoft.Owin.Host.HttpListener.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Owin.Hosting, Version=4.1.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\Microsoft.Owin.Hosting.4.1.1\lib\net45\Microsoft.Owin.Hosting.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.VisualBasic" />
+    <Reference Include="MongoDB.Bson">
+      <HintPath>..\..\packages\MongoDB.Bson.dll</HintPath>
+    </Reference>
+    <Reference Include="MongoDB.Driver">
+      <HintPath>..\..\packages\MongoDB.Driver.dll</HintPath>
+    </Reference>
+    <Reference Include="MySql.Data, Version=6.7.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\MySql.Data.6.7.9\lib\net45\MySql.Data.dll</HintPath>
+    </Reference>
+    <Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\Newtonsoft.Json.6.0.4\lib\net45\Newtonsoft.Json.dll</HintPath>
+    </Reference>
+    <Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath>
+    </Reference>
+    <Reference Include="SqlSugar, Version=5.0.1.7, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\SqlSugar.5.0.1.7\lib\SqlSugar.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Net.Http.Formatting, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\Microsoft.AspNet.WebApi.Client.5.2.7\lib\net45\System.Net.Http.Formatting.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Web" />
+    <Reference Include="System.Web.Http, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\Microsoft.AspNet.WebApi.Core.5.2.7\lib\net45\System.Web.Http.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Web.Http.Owin">
+      <HintPath>..\..\packages\Microsoft.AspNet.WebApi.Owin.5.2.7\lib\net45\System.Web.Http.Owin.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ApiHelper.cs" />
+    <Compile Include="AMSHelper.cs" />
+    <Compile Include="ERPService.cs" />
+    <Compile Include="MESHelper.cs" />
+    <Compile Include="OITcpHelper.cs" />
+    <Compile Include="Settings.cs" />
+    <Compile Include="EnentListen.cs" />
+    <Compile Include="ProcessHelper.cs" />
+    <Compile Include="SqlHelper.cs" />
+    <Compile Include="Test.cs" />
+    <Compile Include="WMSHelper.cs" />
+    <Compile Include="PLCControl.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ProtocolAnalysis.cs" />
+    <Compile Include="Startup.cs" />
+    <Compile Include="TSHelper.cs" />
+    <Compile Include="ApiController.cs" />
+    <Compile Include="WebApiHelper.cs" />
+    <Compile Include="XmlHelper.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="readme.txt" />
+    <Content Include="settings.xml">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\Hanhe.iWCS.Business\Hanhe.iWCS.Business.csproj">
+      <Project>{733b341a-eddb-44e0-8749-6764aee699ed}</Project>
+      <Name>Hanhe.iWCS.Business</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config" />
+    <None Include="packages.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <WCFMetadata Include="Connected Services\" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMProtocol/MESHelper.cs b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/MESHelper.cs
new file mode 100644
index 0000000..976bb66
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/MESHelper.cs
@@ -0,0 +1,819 @@
+锘縰sing Hanhe.iWCS.Common;
+using Hanhe.iWCS.MData;
+using MongoDB.Bson;
+using MongoDB.Driver;
+using MongoDB.Driver.Builders;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hanhe.iWCS.IndonesiaGLMProtocol
+{
+    public class MESHelper
+    {
+        private static string mesurl = Settings.MESUrl;
+        private static string timeurl = Settings.TimeCuo;
+        private static WebApiHelper helper = new WebApiHelper();
+        /// <summary>
+        /// 鏃堕棿鎴虫暟鎹鏁�+        /// </summary>
+        public static int total;
+
+        /// <summary>
+        /// 鍖呰鏈轰笅绾夸换鍔¤皟鐢ㄧ殑MES鎺ュ彛鈥斺�GlmTonBagFillInfo
+        /// </summary>
+        /// <param name="device">璁惧鍙�/param>
+        /// <returns></returns>
+        internal static MachineInfoCache GetPackingMachineInfo(string location)
+        {
+
+            //mes 鍦板潃璇婚厤缃枃浠�+            MachineInfoCache result = new MachineInfoCache();
+            //闇�杩涗竴姝ョ‘璁ES鎺ュ彛浼犺緭鐨勬暟鎹�+            var param = new { machineNo = location };
+            CMMLog.Info($"鍚慚ES鍙戦�鏁版嵁{JsonConvert.SerializeObject(param)},鎺ュ彛鍦板潃涓猴細{mesurl}");
+            var res = helper.WebPost(mesurl, JsonConvert.SerializeObject(param));
+            if (!string.IsNullOrEmpty(res))
+            {
+                CMMLog.Info($"MES鑾峰彇鍒版暟鎹�{JsonConvert.DeserializeObject(res)}");
+                var req = JsonConvert.DeserializeObject<MachineInfoCache>(res);
+                if (req != null)
+                {
+                    if (location == req.machineNo)
+                    {
+                        CMMLog.Info($"杞崲鍚嶮ES鏁版嵁{req}");
+                        var machine = MongoDBSingleton.Instance.FindOne<MachineInfo>(Query.EQ("machineNo", req.machineNo), "MachineInfo");
+                        if (machine == null)
+                        {
+                            MongoDBSingleton.Instance.Insert<MachineInfo>(new MachineInfo
+                            {
+                                machineNo = req.machineNo,
+                                lotNo = req.lotNo,
+                                bagNo = req.bagNo,
+                                productType = req.productType,
+                                palletLayers = req.palletLayers,
+                                materialCode = req.materialCode,
+                                overlappingLayers = req.overlappingLayers
+                            });
+                        }
+                        else
+                        {
+                            CMMLog.Info($"褰撳墠<MachineInfo>涓棿琛ㄦ湁褰撳墠鍖呰鏈虹偣浣嶇殑淇℃伅瀛樺湪锛岃妫�煡MST涓昏〃鏄惁鏈変换鍔℃鍦ㄦ墽琛岋紒");
+                            Console.WriteLine($"褰撳墠<MachineInfo>涓棿琛ㄦ湁褰撳墠鍖呰鏈虹偣浣嶇殑淇℃伅瀛樺湪锛岃妫�煡MST涓昏〃鏄惁鏈変换鍔℃鍦ㄦ墽琛岋紒");
+                        }
+                        CMMLog.Info($"MES鎺ュ彛浼犺緭鏁版嵁淇℃伅锛歮achineNo:{req.machineNo},lotNo:{req.lotNo},bagNo:{req.bagNo},productType:{req.productType},materialCode:{req.materialCode},overlappingLayers:{req.overlappingLayers}");
+                        Console.WriteLine($"MES鎺ュ彛浼犺緭鏁版嵁淇℃伅锛歮achineNo:{req.machineNo},lotNo:{req.lotNo},bagNo:{req.bagNo},productType:{req.productType},materialCode:{req.materialCode},overlappingLayers:{req.overlappingLayers}");
+                        result = req;
+                    }
+                    else CMMLog.Info($"MES浼犺緭鐨勫寘瑁呮満鍙蜂笌褰撳墠鍖呰鏈哄彿涓嶇鍚堬細褰撳墠鍖呰鏈哄彿锛歿location},MES浼犺緭鐨勫寘瑁呮満鍙凤細{req.machineNo}");
+                }
+                else CMMLog.Info($"MES鎺ュ彛锛欽son杩斿洖鏁版嵁涓虹┖鍊硷紒鎺ュ彈鐨勬暟鎹负锛歿req}");
+            }
+            else CMMLog.Info($"MES鎺ュ彛锛氳繑鍥炴暟鎹负绌哄�锛佹帴鍙楃殑鏁版嵁涓猴細{res}");
+            return result;
+        }
+
+        /// <summary>
+        /// 3妤兼墦鍖呬笅绾垮彛鍒�妤兼垚鍝佽揣鏋跺彛鈥斺�璋冪敤鎵撳寘绾夸笅绾垮彛鎺ュ彈浼犺緭鐨勭収鐩告満鎺ュ彛鏁版嵁
+        /// </summary>
+        /// <param name="timeStamp">鏃堕棿鎴�/param>
+        /// <returns></returns>
+        internal static TimeChuoInfo TimeCuo(string timeStamp, ref string deviceNo)
+        {
+            //鏃堕棿鎴�鍦板潃璇婚厤缃枃浠�+            TimeChuoInfo result = new TimeChuoInfo();
+
+            var param = new { machineNo = timeStamp };
+            CMMLog.Info($"TimeCuo-01:SendMsg:{JsonConvert.SerializeObject(param)},url:{timeurl}");
+            //var res = helper.WebGet(timeurl, JsonConvert.SerializeObject(param));
+            var res = helper.WebGet(timeurl + "?timeStamp=" + timeStamp);
+            CMMLog.Info($"TimeCuo-02:ReqMsg:{JsonConvert.SerializeObject(res)},url:{timeurl}");
+            try
+            {
+                if (!string.IsNullOrEmpty(res))
+                {
+                    CMMLog.Info("time 02");
+                    var req = JsonConvert.DeserializeObject<TimeChuoInfo>(res);
+                    if (req != null)
+                    {
+                        CMMLog.Info("time 03");
+                        //req.info = TransUTF8(req.info);//MES浼犺緭鐨刄TF-8鏍煎紡鍙傛暟锛孋#榛樿UniCode鏍煎紡锛屽嚭鐜拌В鏋愰敊璇紝浣嗘槸姝ゅ瓧娈垫棤鎰忎箟锛岀湅鎯呭喌鏇存柊
+                        //var time = req.data[req.data.Count];
+                        var timeReq = req.data.Where(a => a.timeStamp == int.Parse(timeStamp)).FirstOrDefault();
+                        CMMLog.Info("闇�澶勭悊鐨勫弬鏁帮細" + JsonConvert.SerializeObject(timeReq));
+                        if (timeReq != null && req.count == 1)
+                        {
+                            CMMLog.Info("time 04");
+                            total = timeReq.totalCount;
+
+                            if (timeReq.batchNumber.Length % 2 == 0 && timeReq.batchNumber.Substring(0, 1) == "0")
+                                timeReq.batchNumber = timeReq.batchNumber.Substring(1, timeReq.batchNumber.Length - 1);
+                            if (timeReq.productModel.Length % 2 == 0 && timeReq.productModel.Substring(0, 1) == "0")
+                                timeReq.productModel = timeReq.batchNumber.Substring(1, timeReq.productModel.Length - 1);
+
+                            CMMLog.Info("time 05");
+                            var timeCuo = MongoDBSingleton.Instance.FindOne<TimeCuoInfoCom>(Query.EQ("packingMachineNumber", timeReq.packingMachineNumber_1), "TimeCuoInfoCom");
+                            if (timeCuo == null)
+                            {
+                                MongoDBSingleton.Instance.Insert<TimeCuoInfoCom>(new TimeCuoInfoCom
+                                {
+                                    isFold = timeReq.isFold,
+                                    packingMachineNumber = timeReq.packingMachineNumber_1,
+                                    employeeId = timeReq.employeeID1,
+                                    bagNumber = timeReq.bagNumber_1,
+                                    needWeight = timeReq.needWeight_1,
+                                    realWeight = timeReq.realWeight_1,
+
+                                    totalWeight = timeReq.totalWeight,
+                                    batchNumber = timeReq.batchNumber,
+                                    productModel = timeReq.productModel,
+                                    timeStamp = timeReq.timeStamp,
+                                    photoURL = timeReq.photoURL,
+
+                                    totalCount = timeReq.totalCount,
+                                    isNeedTray = timeReq.isNeedTray,
+                                    // ERP鍙樻洿-鐓х浉鏈烘柊澧炲瓧娈�+                                    materialCode = timeReq.materialCode,
+                                    materialName = timeReq.materialName,
+                                    measurementUnit = timeReq.measurementUnit,
+                                    createOrganization = timeReq.createOrganization,
+                                    count = timeReq.count,
+                                    WarehouseCode = timeReq.WarehouseCode,
+                                    workshopCode = timeReq.workshopCode,
+                                    BusinessDate = timeReq.BusinessDate,
+                                    barcode = timeReq.barcode,
+                                    codeRules = timeReq.codeRules,
+
+                                    
+                                    //employeeID2 = timeReq.employeeID2,
+                                    //employeeID3 = timeReq.employeeID3,
+                                    //employeeID4 = timeReq.employeeID4
+                                });
+                            }
+                            else
+                            {
+                                var query = Query.EQ("packingMachineNumber", timeReq.packingMachineNumber_1);
+                                UpdateBuilder update = Update.Set("isFold", timeReq.isFold).Set("totalWeight", timeReq.totalWeight)
+                                    .Set("employeeId", timeReq.employeeID1).Set("bagNumber", timeReq.bagNumber_1).Set("needWeight", timeReq.needWeight_1)
+                                    .Set("realWeight", timeReq.realWeight_1)
+                                    .Set("batchNumber", timeReq.batchNumber).Set("productModel", timeReq.productModel).Set("isNeedTray", timeReq.isNeedTray)
+                                    .Set("totalCount", timeReq.totalCount).Set("timeStamp", timeReq.timeStamp).Set("photoURL", timeReq.photoURL)
+                                    .Set("materialCode", timeReq.materialCode).Set("materialName", timeReq.materialName).Set("measurementUnit", timeReq.measurementUnit)
+                                    .Set("createOrganization", timeReq.createOrganization).Set("count", timeReq.count).Set("WarehouseCode", timeReq.WarehouseCode)
+                                    .Set("workshopCode", timeReq.workshopCode).Set("BusinessDate", timeReq.BusinessDate).Set("barcode", timeReq.barcode)
+                                    .Set("codeRules", timeReq.codeRules);
+                                MongoDBSingleton.Instance.Update<TimeCuoInfoCom>(query, update, UpdateFlags.None);
+                            }
+
+                            CMMLog.Info($"鑾峰彇鍒扮殑鏃堕棿鎴虫帴鍙f暟鎹細鍖呰鏈哄彿packingMachineNumber锛歿timeReq.packingMachineNumber_1},鍙犳墭鍚庣殑瀹為檯閲嶉噺totalWeight:{timeReq.totalWeight},浜у搧鎵规鍙穊atchNumber锛歿timeReq.batchNumber}" +
+                                $",浜у搧鍨嬪彿productModel锛歿timeReq.productModel},totalCount:{timeReq.totalCount},timeStamp:{timeReq.timeStamp},photoURL:{timeReq.photoURL}");
+                            #region   鍒ゆ柇鍙犲寘灞傛暟
+
+                            if (timeReq.isFold == 1 || timeReq.isFold == 2 || timeReq.isFold == 3)
+                            {
+                                var query = Query.EQ("packingMachineNumber", timeReq.packingMachineNumber_1);
+                                UpdateBuilder update = null;
+                                if (timeReq.isFold == 1) update = Update.Set("bagNumber", timeReq.bagNumber_1).Set("realWeight", (timeReq.realWeight_1 / 100).ToString().Trim());
+                                else if (timeReq.isFold == 2) update = Update.Set("bagNumber", timeReq.bagNumber_1 + "," + timeReq.bagNumber_2);
+                                else if (timeReq.isFold == 3) update = Update.Set("bagNumber", timeReq.bagNumber_1 + "," + timeReq.bagNumber_2 + "," + timeReq.bagNumber_3);
+
+                                if (update != null)
+                                    MongoDBSingleton.Instance.Update<TimeCuoInfoCom>(query, update, "TimeCuoInfoCom", UpdateFlags.None);
+                            }
+                            else CMMLog.Error($"isFold:{timeReq.isFold}");
+
+                            #region
+                            // if (timeReq.isFold == 1)
+                            //     MongoDBSingleton.Instance.Update<TimeCuoInfoCom>(Query.EQ("packingMachineNumber", timeReq.packingMachineNumber_1), Update.Set("bagNumber", timeReq.bagNumber_1).Set("realWeight", (timeReq.realWeight_1 / 100).ToString().Trim()), UpdateFlags.None);
+                            // else if (timeReq.isFold == 2)
+                            //     //MongoDBSingleton.Instance.Update<TimeCuoInfoCom>(Query.EQ("packingMachineNumber", timeReq.packingMachineNumber_1), Update.Set("bagNumber", timeReq.bagNumber_1 + "," + timeReq.bagNumber_2).Set("realWeight", (timeReq.realWeight_1 / 100).ToString().Trim()+","+ (timeReq.realWeight_2 / 100).ToString().Trim()), UpdateFlags.None);
+                            //     MongoDBSingleton.Instance.Update<TimeCuoInfoCom>(Query.EQ("packingMachineNumber", timeReq.packingMachineNumber_1), Update.Set("bagNumber", timeReq.bagNumber_1 + "," + timeReq.bagNumber_2), UpdateFlags.None);
+                            // else if (timeReq.isFold == 3)
+                            //     //MongoDBSingleton.Instance.Update<TimeCuoInfoCom>(Query.EQ("packingMachineNumber", timeReq.packingMachineNumber_1), Update.Set("bagNumber", timeReq.bagNumber_1 + "," + timeReq.bagNumber_2 + "," + timeReq.bagNumber_3).Set("realWeight", (timeReq.realWeight_1 / 100).ToString().Trim() + "," + (timeReq.realWeight_2 / 100).ToString().Trim()+","+ (timeReq.realWeight_3 / 100).ToString().Trim()), UpdateFlags.None);
+                            //     MongoDBSingleton.Instance.Update<TimeCuoInfoCom>(Query.EQ("packingMachineNumber", timeReq.packingMachineNumber_1), Update.Set("bagNumber", timeReq.bagNumber_1 + "," + timeReq.bagNumber_2 + "," + timeReq.bagNumber_3), UpdateFlags.None);
+                            // else CMMLog.Error($"isFold:{timeReq.isFold}");
+                            #endregion
+
+                            #endregion
+                            //鍒ゆ柇鏄惁鍙犲簳鎵�+                            deviceNo = timeReq.isNeedTray == 2 ? "7" : "10";
+                            result = req;
+                        }
+                        else result = null;
+                    }
+                    else result = null;
+                    CMMLog.Info($"code:{req.code},count:{req.count},info:{req.info},info:{req.msg},info:{req.status}");
+                }
+                CMMLog.Info("time over!");
+            }
+            catch (Exception ex)
+            {
+                CMMLog.Error($"TimeCuo Error:{ex.Message}");
+            }
+
+            return result;
+        }
+
+        public static string TransUTF8(string text)
+        {
+            //澹版槑瀛楃闆�  
+            System.Text.Encoding utf8, gb2312;
+            //utf8   
+            utf8 = System.Text.Encoding.GetEncoding("utf-8");
+            //gb2312   
+            gb2312 = System.Text.Encoding.GetEncoding("gb2312");
+            byte[] utf;
+            utf = gb2312.GetBytes(text);
+            utf = System.Text.Encoding.Convert(gb2312, utf8, utf);
+            //杩斿洖杞崲鍚庣殑瀛楃   
+            return utf8.GetString(utf);
+        }
+        /// <summary>
+        /// 瀛樻斁浠嶮ES鎺ュ彈鐨勬暟鎹拰璁惧閫氶亾閲岄潰璇诲彇鐨勬暟鎹紙鍖呮嫭杞崲鍚庣殑鏁版嵁锛�+        /// </summary>
+        public class MachineInfo
+        {
+            public ObjectId _id { get; set; }
+            /// <summary>
+            /// mes杩斿洖鐨勫寘瑁呮満鍙凤紙T1锛孴2锛�.....锛孴9锛�+            /// </summary>
+            public string machineNo { get; set; }
+            /// <summary>
+            /// mes杩斿洖鐨勬垚鍝佹壒娆″彿
+            /// </summary>
+            public string lotNo { get; set; } = "0";
+            /// <summary>
+            /// mes杩斿洖鐨勮鍙�+            /// </summary>
+            public string bagNo { get; set; } = "0";
+            /// <summary>
+            /// mes杩斿洖鐨勪骇鍝佸瀷鍙�+            /// </summary>
+            public string productType { get; set; } = "0";
+            /// <summary>
+            /// MES杩斿洖鐨勬槸鍚﹀彔搴曟墭锛�-涓嶅彔搴曟墭  2-鍙犲簳鎵橈級
+            /// </summary>
+            public string palletLayers { get; set; } = "0";
+            /// <summary>
+            /// mes杩斿洖鐨勭墿鏂欑紪鐮�+            /// </summary>
+            public string materialCode { get; set; } = "0";
+            /// <summary>
+            /// mes杩斿洖鐨勭墿鏂欏悕绉�+            /// </summary>
+            public string materialName { get; set; } = "0";
+            /// <summary>
+            /// mes杩斿洖鐨勮閲忓崟浣�+            /// </summary>
+            public string measurementUnit { get; set; } = "0";
+            /// <summary>
+            /// mes杩斿洖鐨勭粍缁囦唬鐮�+            /// </summary>
+            public string organizeCode { get; set; } = "0";
+            /// <summary>
+            /// mes杩斿洖鐨勫彔鍖呭眰鏁� 锛堜緥1,2,3锛�浠h〃涓嶅彔鍖咃紝2浠h〃鍙�灞傦紝3浠h〃鍙�灞傦級
+            /// </summary>
+            public string overlappingLayers { get; set; } = "0";
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁3鈥斺�鎵樼洏鐮�         
+            /// </summary>
+            public string trayCode { get; set; } = "0";
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁1鈥斺�鍖呰鏈哄彿        
+            /// </summary>
+            public string location { get; set; } = "0";
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁2鈥斺�浜у搧闇�眰閲嶉噺锛�2浣嶆暣鏁�+            /// </summary>
+            public string productWeight { get; set; } = "0";
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁2鈥斺�鍗曟嫋姣涢噸锛�2浣嶆暣鏁�+            /// </summary>
+            public string trayCodeWeight { get; set; } = "0";
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁2鈥斺�鍗曟墭鍑�噸锛�2浣嶆暣鏁�+            /// </summary>
+            public string oneTrayWeight { get; set; } = "0";
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁1鈥斺�鏄惁闇�鍙犳墭鐩橈細1:涓嶅彔鎵橈紱2锛氬彔鎵�+            /// </summary>
+            public int addTray { get; set; } = 0;
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁1鈥斺�鏄惁闇�鍙犲寘锛�锛氬彔鍖咃紝2锛氫笉鍙犲寘
+            /// </summary>
+            public int addState { get; set; } = 0;
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁1鈥斺�琚嬪彿(001,002,003鈥�99)
+            /// </summary>
+            public string packageCode { get; set; } = "0";
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁5鈥斺�鍛樺伐缂栧彿锛圙0200424锛夊瓧绗︿覆
+            /// </summary>
+            public string empNum { get; set; }
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁2鈥斺�鐢熶骇鏃ユ湡锛�2浣嶆暣鏁�+            /// </summary>
+            public string productTime { get; set; } = "0";
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁1鈥斺�澶嶇О鍙gО閲嶇粨鏋滐細1:OK,2:NG
+            /// </summary>
+            public int secondNg { get; set; } = 1;
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁鈥斺�鍏�1浣峴hort
+            /// </summary>
+            public int[] machinedown = new int[91];
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁鈥斺�鏁版嵁搴揓SON
+            /// </summary>
+            public string jsonData { get; set; } = "0";
+            public string occupy { get; set; } = "1";
+            public DateTime modify { get; set; }
+        }
+
+
+        public class MachineInfoTwo
+        {
+            public ObjectId _id { get; set; }
+            /// <summary>
+            /// mes杩斿洖鐨勫寘瑁呮満鍙凤紙T1锛孴2锛�.....锛孴9锛�+            /// </summary>
+            public string machineNo { get; set; }
+            /// <summary>
+            /// mes杩斿洖鐨勬垚鍝佹壒娆″彿
+            /// </summary>
+            public string lotNo { get; set; } = "0";
+            /// <summary>
+            /// mes杩斿洖鐨勮鍙�+            /// </summary>
+            public string bagNo { get; set; } = "0";
+            /// <summary>
+            /// mes杩斿洖鐨勪骇鍝佸瀷鍙�+            /// </summary>
+            public string productType { get; set; } = "0";
+            /// <summary>
+            /// MES杩斿洖鐨勬槸鍚﹀彔搴曟墭锛�-涓嶅彔搴曟墭  2-鍙犲簳鎵橈級
+            /// </summary>
+            public string palletLayers { get; set; } = "0";
+            /// <summary>
+            /// mes杩斿洖鐨勭墿鏂欑紪鐮�+            /// </summary>
+            public string materialCode { get; set; } = "0";
+            /// <summary>
+            /// mes杩斿洖鐨勭墿鏂欏悕绉�+            /// </summary>
+            public string materialName { get; set; } = "0";
+            /// <summary>
+            /// mes杩斿洖鐨勮閲忓崟浣�+            /// </summary>
+            public string measurementUnit { get; set; } = "0";
+            /// <summary>
+            /// mes杩斿洖鐨勭粍缁囦唬鐮�+            /// </summary>
+            public string organizeCode { get; set; } = "0";
+            /// <summary>
+            /// mes杩斿洖鐨勫彔鍖呭眰鏁� 锛堜緥1,2,3锛�浠h〃涓嶅彔鍖咃紝2浠h〃鍙�灞傦紝3浠h〃鍙�灞傦級
+            /// </summary>
+            public string overlappingLayers { get; set; } = "0";
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁3鈥斺�鎵樼洏鐮�         
+            /// </summary>
+            public string trayCode { get; set; } = "0";
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁1鈥斺�鍖呰鏈哄彿        
+            /// </summary>
+            public string location { get; set; } = "0";
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁2鈥斺�浜у搧闇�眰閲嶉噺锛�2浣嶆暣鏁�+            /// </summary>
+            public string productWeight { get; set; } = "0";
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁2鈥斺�鍗曟嫋姣涢噸锛�2浣嶆暣鏁�+            /// </summary>
+            public string trayCodeWeight { get; set; } = "0";
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁2鈥斺�鍗曟墭鍑�噸锛�2浣嶆暣鏁�+            /// </summary>
+            public string oneTrayWeight { get; set; } = "0";
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁1鈥斺�鏄惁闇�鍙犳墭鐩橈細1:涓嶅彔鎵橈紱2锛氬彔鎵�+            /// </summary>
+            public int addTray { get; set; } = 0;
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁1鈥斺�鏄惁闇�鍙犲寘锛�锛氬彔鍖咃紝2锛氫笉鍙犲寘
+            /// </summary>
+            public int addState { get; set; } = 0;
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁1鈥斺�琚嬪彿(001,002,003鈥�99)
+            /// </summary>
+            public string packageCode { get; set; } = "0";
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁5鈥斺�鍛樺伐缂栧彿锛圙0200424锛夊瓧绗︿覆
+            /// </summary>
+            public string empNum { get; set; }
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁2鈥斺�鐢熶骇鏃ユ湡锛�2浣嶆暣鏁�+            /// </summary>
+            public string productTime { get; set; } = "0";
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁1鈥斺�澶嶇О鍙gО閲嶇粨鏋滐細1:OK,2:NG
+            /// </summary>
+            public int secondNg { get; set; } = 1;
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁2鈥斺�澶嶇О姣涢噸锛�2浣嶆暣鏁�+            /// </summary>
+            public string oneTrayWeightFC { get; set; } = "0,0";
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁鈥斺�鍏�1浣峴hort
+            /// </summary>
+            public int[] machinedown = new int[91];
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁鈥斺�鏁版嵁搴揓SON
+            /// </summary>
+            public string jsonData { get; set; } = "0";
+            public string occupy { get; set; } = "1";
+            public DateTime modify { get; set; }
+        }
+
+        public class MachineInfoCache
+        {
+            /// <summary>
+            /// mes杩斿洖鐨勫寘瑁呮満鍙凤紙T1锛孴2锛�.....锛孴9锛�+            /// </summary>
+            public string machineNo { get; set; }
+            /// <summary>
+            /// mes杩斿洖鐨勬垚鍝佹壒娆″彿
+            /// </summary>
+            public string lotNo { get; set; }
+            /// <summary>
+            /// mes杩斿洖鐨勮鍙�+            /// </summary>
+            public string bagNo { get; set; }
+            /// <summary>
+            /// mes杩斿洖鐨勪骇鍝佸瀷鍙�+            /// </summary>
+            public string productType { get; set; }
+            /// <summary>
+            /// mes杩斿洖鐨勬槸鍚﹀彔搴曟墭淇″彿
+            /// </summary>
+            public string palletLayers { get; set; }
+            /// <summary>
+            /// mes杩斿洖鐨勭墿鏂欑紪鐮�+            /// </summary>
+            public string materialCode { get; set; }
+            /// <summary>
+            /// mes杩斿洖鐨勫彔鍖呭眰鏁� 锛堜緥1,2,3锛�浠h〃涓嶅彔鍖咃紝2浠h〃鍙�灞傦紝3浠h〃鍙�灞傦級
+            /// </summary>
+            public string overlappingLayers { get; set; }
+        }
+
+        /// <summary>
+        /// 鏃堕棿鎴斥�鈥旇皟鐢ㄧ収鐩告満璁惧鑾峰彇鐨勮繑鍥炰俊鎭�+        /// </summary>
+        public class TimeChuoInfo
+        {
+            public int code { get; set; }
+            public int count { get; set; }
+            public string info { get; set; }
+            public string msg { get; set; }
+            public int status { get; set; }
+            public List<TimeCuoInfo> data { get; set; }
+            public class TimeCuoInfo
+            {
+                public string bagNumber_1 { get; set; }
+                public string bagNumber_2 { get; set; }
+                public string bagNumber_3 { get; set; }
+                public string batchNumber { get; set; }
+                public int isFold { get; set; }
+                public string master { get; set; }
+                public int needWeight_1 { get; set; }
+                public int needWeight_2 { get; set; }
+                public int needWeight_3 { get; set; }
+                public string newComeInFlag { get; set; }
+                public int packingMachineNumber_1 { get; set; }
+                public int packingMachineNumber_2 { get; set; }
+                public int packingMachineNumber_3 { get; set; }
+                public string photoFlag { get; set; }
+                public string photoURL { get; set; }
+                public string printFlag { get; set; }
+                public string printMsg { get; set; }
+                public string productModel { get; set; }
+                public int realWeight_1 { get; set; }
+                public int realWeight_2 { get; set; }
+                public int realWeight_3 { get; set; }
+                public int timeStamp { get; set; }
+                public int totalCount { get; set; }
+                public int totalWeight { get; set; }
+
+
+
+                /// <summary>
+                /// 鍛樺伐缂栧彿1
+                /// </summary>
+                public string employeeID1 { get; set; }
+                /// <summary>
+                /// 鍛樺伐缂栧彿2
+                /// </summary>
+                public string employeeID2 { get; set; }
+                /// <summary>
+                /// 鍛樺伐缂栧彿3
+                /// </summary>
+                public string employeeID3 { get; set; }
+                /// <summary>
+                /// 鍛樺伐缂栧彿4
+                /// </summary>
+                public string employeeID4 { get; set; }
+                /// <summary>
+                /// 鏄惁鍙犲簳鎵�ERP鍙樻洿鍔熻兘涔嬪悗涓嶅啀浣跨敤姝ゅ瓧娈�
+                /// </summary>
+                public int isNeedTray { get; set; }
+
+                /// <summary>
+                /// 鐗╂枡缂栫爜
+                /// </summary>
+                public string materialCode { get; set; } = "1";
+                /// <summary>
+                /// 鐗╂枡鍚嶇О
+                /// </summary>
+                public string materialName { get; set; }
+                /// <summary>
+                /// 璁¢噺鍗曚綅
+                /// </summary>
+                public string measurementUnit { get; set; }
+                /// <summary>
+                /// 鍒涘缓缁勭粐
+                /// </summary>
+                public string createOrganization { get; set; }
+                /// <summary>
+                /// 鏁伴噺
+                /// </summary>
+                public int count { get; set; }
+                /// <summary>
+                /// 浠撳簱缂栫爜
+                /// </summary>
+                public string WarehouseCode { get; set; }
+                /// <summary>
+                /// 杞﹂棿缂栫爜
+                /// </summary>
+                public string workshopCode { get; set; }
+                /// <summary>
+                /// 涓氬姟鏃ユ湡
+                /// </summary>
+                public string BusinessDate { get; set; }
+                /// <summary>
+                /// 鏉″舰鐮�+                /// </summary>
+                public string barcode { get; set; }
+                /// <summary>
+                /// 鏉$爜瑙勫垯
+                /// </summary>
+                public string codeRules { get; set; }
+
+            }
+        }
+        public class TimeCuoInfoCom
+        {
+            public ObjectId _id { get; set; }
+            /// <summary>
+            /// 鏄惁鍙犲寘锛�锛�锛�锛�+            /// </summary>
+            public int isFold { get; set; }
+            /// <summary>
+            /// 鍖呰鏈哄彿
+            /// </summary>
+            public int packingMachineNumber { get; set; }
+            /// <summary>
+            /// 琚嬪彿(001,002,003鈥�99)1
+            /// </summary>
+            public string bagNumber { get; set; }
+            /// <summary>
+            /// 浜у搧闇�眰閲嶉噺1锛�2浣嶆暣鏁�+            /// </summary>
+            public int needWeight { get; set; }
+            /// <summary>
+            /// 鍗曟墭瀹為檯閲嶉噺1锛�2浣嶆暣鏁�+            /// </summary>
+            public int realWeight { get; set; }
+            /// <summary>
+            /// 鍙犳墭鍚庣殑瀹為檯閲嶉噺锛�2浣嶆暣鏁�+            /// </summary>
+            public int totalWeight { get; set; }
+            /// <summary>
+            /// 浜у搧鎵规鍙�+            /// </summary>
+            public string batchNumber { get; set; }
+            /// <summary>
+            /// 浜у搧鍨嬪彿
+            /// </summary>
+            public string productModel { get; set; }
+            /// <summary>
+            /// 鏄惁鍙犲簳鎵橈紙1-涓嶅彔搴曟墭    2-鍙犲簳鎵橈級
+            /// </summary>
+            public int isNeedTray { get; set; }
+            /// <summary>
+            /// 璁℃暟(鍙湪鏁版嵁搴�
+            /// </summary>
+            public int totalCount { get; set; }
+            /// <summary>
+            /// 鏃堕棿鎴�+            /// </summary>
+            public int timeStamp { get; set; }
+            /// <summary>
+            /// 鐓х墖url
+            /// </summary>
+            public string photoURL { get; set; }
+
+
+
+            /// <summary>
+            /// 鐗╂枡缂栫爜
+            /// </summary>
+            public string materialCode { get; set; }
+            /// <summary>
+            /// 鐗╂枡鍚嶇О
+            /// </summary>
+            public string materialName { get; set; }
+            /// <summary>
+            /// 璁¢噺鍗曚綅
+            /// </summary>
+            public string measurementUnit { get; set; }
+            /// <summary>
+            /// 鍒涘缓缁勭粐
+            /// </summary>
+            public string createOrganization { get; set; }
+            /// <summary>
+            /// 鏁伴噺
+            /// </summary>
+            public int count { get; set; }
+            /// <summary>
+            /// 浠撳簱缂栫爜
+            /// </summary>
+            public string WarehouseCode { get; set; }
+            /// <summary>
+            /// 杞﹂棿缂栫爜
+            /// </summary>
+            public string workshopCode { get; set; }
+            /// <summary>
+            /// 涓氬姟鏃ユ湡
+            /// </summary>
+            public string BusinessDate { get; set; }
+            /// <summary>
+            /// 鏉″舰鐮�+            /// </summary>
+            public string barcode { get; set; }
+            /// <summary>
+            /// 鏉$爜瑙勫垯
+            /// </summary>
+            public string codeRules { get; set; }
+
+
+            /// <summary>
+            /// 鍛樺伐缂栧彿
+            /// </summary>
+            public string employeeId { get; set; }
+            /// <summary>
+            /// 鍛樺伐缂栧彿2
+            /// </summary>
+            public string employeeID2 { get; set; }
+            /// <summary>
+            /// 鍛樺伐缂栧彿3
+            /// </summary>
+            public string employeeID3 { get; set; }
+            /// <summary>
+            /// 鍛樺伐缂栧彿4
+            /// </summary>
+            public string employeeID4 { get; set; }
+        }
+
+        /// <summary>
+        /// 鐗╂枡琛�+        /// </summary>
+        public class T_JY_MATERIALSync
+        {
+            /// <summary>
+            /// 娴佹按鍙�+            /// </summary>
+            public int FID { get; set; }
+            /// <summary>
+            /// 鍚嶇О
+            /// </summary>
+            public string FName { get; set; }
+            /// <summary>
+            /// 缂栫爜
+            /// </summary>
+            public string FNumber { get; set; }
+            /// <summary>
+            /// 瑙勬牸鍨嬪彿
+            /// </summary>
+            public string FSpecification { get; set; }
+            /// <summary>
+            /// 浣跨敤缁勭粐缂栫爜
+            /// </summary>
+            public string FUseOrgNumber { get; set; }
+            /// <summary>
+            /// 杞﹂棿鍚嶇О
+            /// </summary>
+            public string FWorkShopNumber { get; set; }
+            /// <summary>
+            /// 淇濊川鏈�+            /// </summary>
+            public int FExpPeriod { get; set; }
+            /// <summary>
+            /// 淇濊川鏈熷崟浣�+            /// </summary>
+            public string FExpUnit { get; set; }
+            /// <summary>
+            /// 搴撳瓨鍗曚綅
+            /// </summary>
+            public string FStoreUnit { get; set; }
+            /// <summary>
+            /// 鐗╂枡鍒嗙粍鍚嶇О
+            /// </summary>
+            public string FMaterialGroupName { get; set; }
+            /// <summary>
+            /// 鐗╂枡鍒嗙粍缂栫爜
+            /// </summary>
+            public string FMaterialGroupNumber { get; set; }
+        }
+
+        /// <summary>
+        /// 鍛樺伐琛�+        /// </summary>
+        public class T_JY_EMPINFOSync
+        {
+            /// <summary>
+            /// 娴佹按鍙�+            /// </summary>
+            public int FID { get; set; }
+            /// <summary>
+            /// 缂栫爜
+            /// </summary>
+            public string FNumber { get; set; }
+            /// <summary>
+            /// 鍚嶇О
+            /// </summary>
+            public string FName { get; set; }
+            /// <summary>
+            /// 鍛樺伐缂栧彿
+            /// </summary>
+            public string FStaffNumber { get; set; }
+        }
+
+        /// <summary>
+        /// 鏉$爜琛�+        /// </summary>
+        public class T_JY_BARCODESync
+        {
+            /// <summary>
+            /// 娴佹按鍙�+            /// </summary>
+            public int FID { get; set; }
+            /// <summary>
+            /// 鏉″舰鐮�+            /// </summary>
+            public string FBarCode { get; set; }
+            /// <summary>
+            /// 鏉$爜瑙勫垯
+            /// </summary>
+            public string FBarCodeRule { get; set; }
+            /// <summary>
+            /// 鐗╂枡缂栫爜
+            /// </summary>
+            public string FMaterialNumber { get; set; }
+            /// <summary>
+            /// 鍒涘缓缁勭粐
+            /// </summary>
+            public string FCreateOrgNumber { get; set; }
+            /// <summary>
+            /// 鎵瑰彿涓绘。
+            /// </summary>
+            public string FLot { get; set; }
+            /// <summary>
+            /// 璁¢噺鍗曚綅
+            /// </summary>
+            public string FUnit { get; set; }
+            /// <summary>
+            /// 鏁伴噺(閲嶉噺)
+            /// </summary>
+            public float FQty { get; set; }
+            /// <summary>
+            /// 浠撳簱缂栫爜
+            /// </summary>
+            public string FStockNumber { get; set; }
+            /// <summary>
+            /// 閮ㄩ棬缂栫爜
+            /// </summary>
+            public string FDept { get; set; }
+            /// <summary>
+            /// 涓氬姟鏃ユ湡
+            /// </summary>
+            public DateTime FBillDate { get; set; }
+            /// <summary>
+            /// 鎿嶄綔浜虹紪鐮�+            /// </summary>
+            public string F_JY_CZZ { get; set; }
+        }
+    }
+}
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMProtocol/OITcpHelper.cs b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/OITcpHelper.cs
new file mode 100644
index 0000000..077f76a
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/OITcpHelper.cs
@@ -0,0 +1,513 @@
+锘縰sing Hanhe.iWCS.Common;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace Hanhe.iWCS.IndonesiaGLMProtocol
+{
+    public class OITcpHelper
+    {
+        private static string url = Settings.OITcpSeverUrl;
+        private static string token = "";
+        private static WebApiHelper apiHelper = new WebApiHelper();
+        public static string readip = "";
+        public static string writeip = "";
+        public static string writeAllIP = "";
+
+
+        #region 1.	涓浆璇锋眰鎿嶄綔
+        /// <summary>
+        /// 1.1.	璇锋眰 json鍐呭
+        /// </summary>
+        public static void JsonTransit() {
+            var req = JsonConvert.SerializeObject(new JsonTransitData());
+            var feedback = apiHelper.WebPost($"{url}/api/transit/json?access_token={token}", req);
+            if (feedback != "") {
+                var result = JsonConvert.DeserializeObject<JsonTransitResult>(feedback);
+            }
+        }
+        /// <summary>
+        /// 1.2.	璇锋眰 ascii鍐呭
+        /// </summary>
+        public static StrTransitResult AsciiTransit(StrTransitData model) {
+            StrTransitResult result = null;
+            var req = JsonConvert.SerializeObject(model);
+            var feedback = apiHelper.WebPost($"{url}/api/transit/ascii?access_token={token}", req);
+            if (feedback != "") {
+                result = JsonConvert.DeserializeObject<StrTransitResult>(feedback);
+            }
+            return result;
+        }
+        /// <summary>
+        /// 1.3.	璇锋眰 hex鍐呭
+        /// </summary>
+        public static void HexTransit() {
+            var req = JsonConvert.SerializeObject(new StrTransitData());
+            var feedback = apiHelper.WebPost($"{url}/api/transit/hex?access_token={token}", req);
+            if (feedback != "") {
+                var result = JsonConvert.DeserializeObject<StrTransitResult>(feedback);
+            }
+        }
+        public class BaseTransitData
+        {
+            public string host { get; set; }
+            public int port { get; set; }
+            public int timeout { get; set; }
+
+        }
+        public class JsonTransitData : BaseTransitData
+        {
+            public object data { get; set; }
+        }
+        public class JsonTransitResult : BaseResponseModel
+        {
+            public object result { get; set; }
+        }
+        public class StrTransitData : BaseTransitData
+        {
+            public string data { get; set; }
+        }
+        public class StrTransitResult : BaseResponseModel
+        {
+            public string result { get; set; }
+        }
+        #endregion
+
+        #region 2.	Modbus澶勭悊鎿嶄綔
+        #region 2.1.	璇诲彇杈撳嚭绾垮湀鐘舵� 01 鍔熻兘
+        /// <summary>
+        /// 2.1.	璇诲彇杈撳嚭绾垮湀鐘舵� 01 鍔熻兘
+        /// </summary>
+        public static RelayReadOutResult RelayReadOutPut(RelayReadOutPutModel model) {
+            RelayReadOutResult result = null;
+            var req = JsonConvert.SerializeObject(model);
+            var feedback = apiHelper.WebPost($"{url}/api/modbus/relay/readoutput?access_token={token}", req);
+            //Console.WriteLine($"璇诲彇杈撳嚭绾垮湀鐘舵� modbus/relay/readoutput req={req} res={feedback}");
+            CMMLog.Info($"璇诲彇杈撳嚭绾垮湀鐘舵� modbus/relay/readoutput req={req} res={feedback}");
+            if (feedback != "") {
+                result = JsonConvert.DeserializeObject<RelayReadOutResult>(feedback);
+            }
+            return result;
+        }
+        public class RelayReadOutPutModel : BaseRequestModel
+        {
+            public int bitNum { get; set; }
+            //public object tcpModel { get; set; }
+            //public int msgNo { get; set; }
+        }
+        public class RelayReadOutResult : BaseResponseModel
+        {
+            public int[] result { get; set; }
+        }
+        #endregion
+
+        #region 2.2.	璇诲彇杈撳叆绂绘暎閲�02 鍔熻兘
+        /// <summary>
+        /// 2.2.	璇诲彇杈撳叆绂绘暎閲�02 鍔熻兘
+        /// </summary>
+        public static void RelayReadInPut(BaseRequestModel model) {
+            var req = JsonConvert.SerializeObject(model);
+            var feedback = apiHelper.WebPost($"{url}/api/modbus/relay/readinput?access_token={token}", req);
+            if (feedback != "") {
+                var result = JsonConvert.DeserializeObject<RelayReadInPutResult>(feedback);
+            }
+        }
+        public class RelayReadInPutResult : BaseRequestModel
+        {
+            public int result { get; set; }
+        }
+        #endregion
+
+        #region 2.3.	璇诲彇杈撳嚭瀵勫瓨鍣ㄦ暟鎹�03 鍔熻兘
+        /// <summary>
+        /// 2.3.	璇诲彇杈撳嚭瀵勫瓨鍣ㄦ暟鎹�03 鍔熻兘
+        /// </summary>
+        public static RegisterReadOutPutResult RegisterReadOutPut(RegisterReadOutPutModel model) {
+            RegisterReadOutPutResult result = null;
+            //Settings.PlcInfo pmInfo = Settings.GetPlcInfo().Where(a => a.ip == model.host).FirstOrDefault();
+            //model.port = pmInfo.port;
+            var req = JsonConvert.SerializeObject(model);
+            #region   鎷︽埅鐩稿悓IP寤惰繜涓�鍙戦�
+            if (model.host == readip)
+            {
+                DateTime dateTime = DateTime.Now;
+                int z = 1;
+                while (z == 1)
+                {
+                    if (DateTime.Now.Subtract(dateTime).TotalSeconds > 2)
+                    {
+                        z = 2;
+                        readip = model.host;
+                    }
+                }
+            }
+            else
+            {
+                readip = model.host;
+            }
+            #endregion
+            CMMLog.Debug($"璇诲彇杈撳嚭瀵勫瓨鍣ㄦ暟鎹�3鍔熻兘:IP:{readip},URL锛歿url}/api/modbus/register/readoutput?access_token={token},鍐欏叆鏁版嵁锛歿req}");
+            var feedback = apiHelper.WebPost($"{url}/api/modbus/register/readoutput?access_token={token}", req);
+            if (feedback != "") {
+                result = JsonConvert.DeserializeObject<RegisterReadOutPutResult>(feedback);
+                CMMLog.Debug($"杩斿洖鍊�ip:{readip}" + JsonConvert.SerializeObject(result));
+            }
+            else
+            {
+                CMMLog.Error($"璇诲彇杈撳嚭瀵勫瓨鍣ㄦ暟鎹�3鍔熻兘锛欼P:{readip},杩斿洖鍊糵eedback涓虹┖锛佽繑鍥炲�锛歿feedback}");
+            }
+            try
+            {
+                if (result != null)
+                {
+                    if (result.errCode == 0)
+                    {
+                        var packNo = Settings.GetPlcInfo().Where(a => a.ip == model.host && a.deviceType == "1").FirstOrDefault();
+                        if (packNo != null)
+                        {
+                            CMMLog.Debug($"璇诲彇杈撳嚭瀵勫瓨鍣ㄦ暟鎹�03 鍔熻兘MODBUS鍙傛暟:IP:{readip},鍖呰鏈哄彿锛歿packNo.location},閫氶亾鍦板潃涓簕model.addr},绔彛涓簕model.port},杩斿洖鍊納result.result[0]}");
+                            //Console.WriteLine($"璇诲彇杈撳嚭瀵勫瓨鍣ㄦ暟鎹�03 鍔熻兘MODBUS鍙傛暟:IP:{readip},鍖呰鏈哄彿锛歿packNo.location},閫氶亾鍦板潃涓簕model.addr},绔彛涓簕model.port},杩斿洖鍊納result.result[0]}");
+                        }
+                        else
+                        {
+                            packNo = Settings.GetPlcInfo().Where(a => a.ip == model.host && a.deviceType == "22").FirstOrDefault();
+                            if (packNo != null)
+                            {
+                                CMMLog.Debug($"璇诲彇杈撳嚭瀵勫瓨鍣ㄦ暟鎹�03 鍔熻兘MODBUS鍙傛暟:IP:{readip},鍖呰鏈哄彿锛歿packNo.location},閫氶亾鍦板潃涓簕model.addr},绔彛涓簕model.port},杩斿洖鍊納result.result[0]}");
+                                //Console.WriteLine($"璇诲彇杈撳嚭瀵勫瓨鍣ㄦ暟鎹�03 鍔熻兘MODBUS鍙傛暟:IP:{readip},鍖呰鏈哄彿锛歿packNo.location},閫氶亾鍦板潃涓簕model.addr},绔彛涓簕model.port},杩斿洖鍊納result.result[0]}");
+                            }
+                        }
+                    }
+                    else if (result.errCode == 1025)
+                    {
+                        var packNo = Settings.GetPlcInfo().Where(a => a.ip == model.host && a.deviceType == "1").FirstOrDefault();
+                        if (packNo != null)
+                        {
+                            CMMLog.Debug($"銆�025寮傚父銆戣鍙栬緭鍑哄瘎瀛樺櫒鏁版嵁 03 鍔熻兘MODBUS鍙傛暟:IP:{readip},鍖呰鏈哄彿锛歿packNo.location}锛岄�閬撳湴鍧�负{model.addr},绔彛涓簕model.port},鍙戦�鍊納req}");
+                            //Console.WriteLine($"銆�025寮傚父銆戣鍙栬緭鍑哄瘎瀛樺櫒鏁版嵁 03 鍔熻兘MODBUS鍙傛暟:閫氶亾鍦板潃涓簕model.addr},绔彛涓簕model.port},鍙戦�鍊納req}");
+                        }
+                    }
+                }
+                else
+                {
+                    CMMLog.Debug($"璇诲彇杈撳嚭瀵勫瓨鍣ㄦ暟鎹�03 鍔熻兘MODBUS鍙傛暟涓虹┖:IP:{readip},閫氶亾鍦板潃涓簕model.addr},绔彛涓簕model.port},鍙戦�鍊納req}");
+                    //Console.WriteLine($"璇诲彇杈撳嚭瀵勫瓨鍣ㄦ暟鎹�03 鍔熻兘MODBUS鍙傛暟涓虹┖:IP:{readip},閫氶亾鍦板潃涓簕model.addr},绔彛涓簕model.port},鍙戦�鍊納req}");
+                }
+                #region   閲嶅彂鏈哄埗
+                //else if(result.errCode == 1125)
+                //{
+                //    int err = 0;
+                //    while (err == 0)
+                //    {
+                //        var req1 = JsonConvert.SerializeObject(model);
+                //        DateTime dateTime1 = DateTime.Now;
+                //        if (DateTime.Now.Subtract(dateTime1).TotalSeconds > 1)
+                //        {
+                //            var feedbackReset = apiHelper.WebPost($"{url}/api/modbus/register/readoutput?access_token={token}", req1);
+                //            CMMLog.Debug($"閲嶆柊璇诲彇杈撳嚭瀵勫瓨鍣�3鍔熻兘杈撳叆鏁版嵁:req:{req1},ip:{readip}");
+                //            CMMLog.Debug($"閲嶆柊璇诲彇杈撳嚭瀵勫瓨鍣ㄦ暟鎹�3鍔熻兘璇锋眰URL:readUrl:{url}/api/modbus/register/readoutput?access_token={token}");
+                //            if (feedbackReset != "")
+                //            {
+                //                result = JsonConvert.DeserializeObject<RegisterReadOutPutResult>(feedbackReset);
+                //                if(result.errCode == 0)
+                //                {
+                //                    err = 1;
+                //                    CMMLog.Debug($"璇诲彇杈撳嚭瀵勫瓨鍣ㄦ暟鎹�03 鍔熻兘MODBUS鍙傛暟:閫氶亾鍦板潃涓簕model.addr},绔彛涓簕model.port},鍙戦�鍊納req},杩斿洖鍊納result.result[0]}");
+                //                    Console.WriteLine($"璇诲彇杈撳嚭瀵勫瓨鍣ㄦ暟鎹�03 鍔熻兘MODBUS鍙傛暟:閫氶亾鍦板潃涓簕model.addr},绔彛涓簕model.port},鍙戦�鍊納req},杩斿洖鍊納result.result[0]}");
+                //                    readip = model.host;
+                //                }
+                //            }
+                //        }
+                //    }
+                //}
+                #endregion
+            }
+            catch (Exception ex)
+            {
+                CMMLog.Error($"璇诲彇杈撳嚭瀵勫瓨鍣ㄦ暟鎹�3鍔熻兘鎶涘嚭寮傚父,IP:{readip},閫氶亾涓�{model.addr},璇诲彇鏁伴噺涓猴細{model.dataNum},寮傚父淇℃伅锛歿ex.Message}");
+            }
+            //CMMLog.Debug($"璇诲彇杈撳嚭瀵勫瓨鍣ㄦ暟鎹�3鍔熻兘杩斿洖缁撴灉:{feedback}");
+            //Console.WriteLine($"璇诲彇杈撳嚭瀵勫瓨鍣ㄦ暟鎹�3鍔熻兘杩斿洖缁撴灉:{feedback}");
+            
+            return result;
+        }
+        public class RegisterReadOutPutModel : BaseRequestModel
+        {
+
+            public int dataNum { get; set; }
+            //public int msgNo { get; set; }
+        }
+        public class RegisterReadOutPutResult : BaseResponseModel
+        {
+            public int[] result { get; set; }
+        }
+        #endregion
+
+        #region  2.4.	璇诲彇杈撳叆瀵勫瓨鍣ㄦ暟鎹�04 鍔熻兘
+        /// <summary>
+        /// 2.4.	璇诲彇杈撳叆瀵勫瓨鍣ㄦ暟鎹�04 鍔熻兘
+        /// </summary>
+        public static RegisterReadOutPutResult RegisterReadInPut(RegisterReadOutPutModel model) {
+            RegisterReadOutPutResult result = null;
+            var req = JsonConvert.SerializeObject(model);
+            var feedback = apiHelper.WebPost($"{url}/api/modbus/register/readinput?access_token={token}", req);
+            if (feedback != "") {
+                result = JsonConvert.DeserializeObject<RegisterReadOutPutResult>(feedback);
+            }
+            //CMMLog.Debug($"璇诲彇杈撳叆瀵勫瓨鍣ㄦ暟鎹�04 鍔熻兘MODBUS鍙傛暟杩斿洖鍊间负锛歿result},鍙戦�鍊納req}");
+            ////Console.WriteLine($"璇诲彇杈撳叆瀵勫瓨鍣ㄦ暟鎹�04 鍔熻兘MODBUS鍙傛暟杩斿洖鍊间负锛歿result},鍙戦�鍊納req}");
+            return result;
+        }
+       
+        #endregion
+
+        #region 2.5.	鍐欏崟涓緭鍑虹嚎鍦�05 鍔熻兘
+        /// <summary>
+        /// 2.5.	鍐欏崟涓緭鍑虹嚎鍦�05 鍔熻兘
+        /// </summary>
+        public static BaseResponseModel RelayWriteOutPut(RelayWriteOutPutModel model) {
+            BaseResponseModel result = null;
+            var req = JsonConvert.SerializeObject(model);
+            var feedback = apiHelper.WebPost($"{url}/api/modbus/relay/writeoutput?access_token={token}", req);
+            //Console.WriteLine($"鍐欏崟涓緭鍑虹嚎鍦�modbus/relay/writeoutput req={req} res={feedback}");
+            CMMLog.Info($"鍐欏崟涓緭鍑虹嚎鍦�modbus/relay/writeoutput req={req} res={feedback}");
+            if (feedback != "") {
+                result = JsonConvert.DeserializeObject<BaseResponseModel>(feedback);
+            }
+            return result;
+        }
+        public class RelayWriteOutPutModel : BaseRequestModel
+        {
+            public bool status { get; set; }
+        }
+        #endregion
+
+        #region 2.6.	鍐欏崟涓緭鍑哄瘎瀛樺櫒 06 鍔熻兘
+        public static BaseResponseModel RegisterWriteOutPut(RegisterWriteOutPutModel model) {
+            BaseResponseModel result = null;
+            //Settings.PlcInfo pmInfo = Settings.GetPlcInfo().Where(a => a.ip == model.host).FirstOrDefault();
+            //model.port = pmInfo.port;
+            var req = JsonConvert.SerializeObject(model);
+            #region   鎷︽埅鐩稿悓IP寤惰繜涓�鍙戦�
+            if (model.host == readip)
+            {
+                DateTime dateTime = DateTime.Now;
+                int z = 1;
+                while (z == 1)
+                {
+                    if (DateTime.Now.Subtract(dateTime).TotalSeconds > 1)
+                    {
+                        z = 2;
+                        readip = model.host;
+                    }
+                }
+            }
+            else
+            {
+                readip = model.host;
+            }
+            #endregion
+            CMMLog.Debug($"鍐欏崟涓緭鍑哄瘎瀛樺櫒06鍔熻兘鍐欏叆鍊硷細IP:{readip},URL锛歿url}/api/modbus/register/writeoutput?access_token={token},鍐欏叆鏁版嵁锛歿req}");
+            var feedback = apiHelper.WebPost($"{url}/api/modbus/register/writeoutput?access_token={token}", req);
+            if (feedback != "") result = JsonConvert.DeserializeObject<BaseResponseModel>(feedback);
+            else CMMLog.Error($"鍐欏崟涓緭鍑哄瘎瀛樺櫒06鍔熻兘鍐欏叆鍊硷細寮傚父锛欼P:{readip},杩斿洖鍊糵eedback涓虹┖锛佽繑鍥炲�锛歿feedback}");
+            try
+            {
+                if (result != null && result.errCode == 0)
+                {
+                    CMMLog.Debug($"鍐欏崟涓緭鍑哄瘎瀛樺櫒 06 鍔熻兘MODBUS鍙傛暟锛欼P:{readip},閫氶亾鍦板潃涓簕model.addr},绔彛涓猴細{model.port},閿欒鐮侊細{result.errCode},杩斿洖淇℃伅锛歿result.errMsg}");
+                    ////Console.WriteLine($"鍐欏崟涓緭鍑哄瘎瀛樺櫒 06 鍔熻兘MODBUS鍙傛暟锛氶�閬撳湴鍧�负{model.addr},绔彛涓猴細{model.port},閿欒鐮侊細{result.errCode},杩斿洖淇℃伅锛歿result.errMsg}");
+                }
+                else if (result.errCode == 1025)
+                {
+                    var packNo = Settings.GetPlcInfo().Where(a => a.ip == model.host && a.deviceType == "1").FirstOrDefault();
+                    if (packNo != null)
+                    {
+                        CMMLog.Error($"銆�025寮傚父銆戣鍙栬緭鍑哄瘎瀛樺櫒鏁版嵁 03 鍔熻兘MODBUS鍙傛暟:IP:{readip},褰撳墠鍖呰鏈哄彿锛歿packNo.location},閫氶亾鍦板潃涓簕model.addr},绔彛涓簕model.port},鍙戦�鍊納req}");
+                        ////Console.WriteLine($"銆�025寮傚父銆戣鍙栬緭鍑哄瘎瀛樺櫒鏁版嵁 03 鍔熻兘MODBUS鍙傛暟:褰撳墠鍖呰鏈哄彿锛歿packNo.location}閫氶亾鍦板潃涓簕model.addr},绔彛涓簕model.port},鍙戦�鍊納req}");
+                    }
+                }
+                else if (result.errCode == 1125 || result.errCode != 0)
+                {
+                    DateTime dateTime = DateTime.Now;
+                    int err = 3;
+                    int num = 0;
+
+                    while (err > 0)
+                    {
+                        if(DateTime.Now.Subtract(dateTime).TotalMilliseconds >= 300)
+                        {
+                            var feedbackReset = apiHelper.WebPost($"{url}/api/modbus/register/writeoutput?access_token={token}", req);
+                            CMMLog.Debug($"銆�125寮傚父銆戦噸鏂拌鍙栧啓鍏ュ瘎瀛樺櫒鏁版嵁06:IP:{readip},鍐欏叆鏁版嵁锛歿req}锛孶rl:{url}/api/modbus/register/readoutput?access_token={token}");
+                            if (feedbackReset != "")
+                            {
+                                result = JsonConvert.DeserializeObject<RegisterReadOutPutResult>(feedbackReset);
+                                if (result.errCode == 0)
+                                {
+                                    err = err - 1;
+                                    num = num + 1;
+                                    CMMLog.Debug($"銆�125寮傚父銆戝啓鍗曚釜杈撳嚭瀵勫瓨鍣�06 鍔熻兘MODBUS鍙傛暟:IP:{readip},閫氶亾鍦板潃涓簕model.addr},绔彛涓簕model.port},鍙戦�鍊納req},閿欒鐮侊細{result.errCode},杩斿洖淇℃伅锛歿result.errMsg}");
+                                    readip = model.host;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                CMMLog.Error($"鍐欏崟涓緭鍑哄瘎瀛樺櫒06鍔熻兘鍔熻兘鎶涘嚭寮傚父:IP:{readip},閫氶亾涓�{model.addr},鍐欏叆鍊间负锛歿model.data},寮傚父淇℃伅锛歿ex.Message}");
+            }
+            return result;
+        }
+        public class RegisterWriteOutPutModel : BaseRequestModel
+        {
+            public int data { get; set; }
+        }
+        #endregion
+
+        #region 2.7.	鍐欏涓緭鍑虹嚎鍦�15 鍔熻兘
+        public static void RelayWriteOutPutMulti() {
+            var req = JsonConvert.SerializeObject(new RelayWriteOutPutModelMulti());
+            var feedback = apiHelper.WebPost($"{url}/api/modbus/relay/writeoutputmulti?access_token={token}", req);
+            if (feedback != "") {
+                var result = JsonConvert.DeserializeObject<BaseResponseModel>(feedback);
+            }
+        }
+        public class RelayWriteOutPutModelMulti : BaseRequestModel
+        {
+            public int bitNum { get; set; }
+            public int[] data { get; set; }
+        }
+        #endregion
+
+        #region 2.8.	鍐欏涓緭鍑哄瘎瀛樺櫒 16 鍔熻兘
+        public static void RegisterWriteOutPutMulti() {
+            var req = JsonConvert.SerializeObject(new RegisterWriteOutPutModelMulti());
+            var feedback = apiHelper.WebPost($"{url}/api/modbus/register/writeoutputmulti?access_token={token}", req);
+            if (feedback != "") {
+                var result = JsonConvert.DeserializeObject<BaseResponseModel>(feedback);
+            }
+        }
+        public static BaseResponseModel RegisterWriteOutPutMulti(RegisterWriteOutPutModelMulti model)
+        {
+            BaseResponseModel result = null;
+            //Settings.PlcInfo pmInfo = Settings.GetPlcInfo().Where(a => a.ip == model.host).FirstOrDefault();
+            //model.port = pmInfo.port;
+            var req = JsonConvert.SerializeObject(model);
+            #region   鎷︽埅鐩稿悓IP寤惰繜涓�鍙戦�
+            if (model.host == readip)
+            {
+                DateTime dateTime = DateTime.Now;
+                int z = 1;
+                while (z == 1)
+                {
+                    if (DateTime.Now.Subtract(dateTime).TotalSeconds > 1)
+                    {
+                        z = 2;
+                        readip = model.host;
+                    }
+                }
+                readip = model.host;
+            }
+            else
+            {
+                readip = model.host;
+            }
+            #endregion
+            CMMLog.Debug($"鍐欏涓緭鍑哄瘎瀛樺櫒16鍔熻兘锛欼P:{readip},URL:{url}/api/modbus/register/writeoutputmulti?access_token={token},鍐欏叆鏁版嵁锛歿req}");
+            var feedback = apiHelper.WebPost($"{url}/api/modbus/register/writeoutputmulti?access_token={token}", req);
+            if (feedback != "")
+            {
+                result = JsonConvert.DeserializeObject<BaseResponseModel>(feedback);
+            }
+            else
+            {
+                CMMLog.Error($"鍐欏涓緭鍑哄瘎瀛樺櫒16鍔熻兘锛氬紓甯革細IP:{readip},杩斿洖鍊糵eedback涓虹┖锛�);
+            }
+            try
+            {
+                if (result != null && result.errCode == 0)
+                {
+                    CMMLog.Debug($"鍐欏涓緭鍑哄瘎瀛樺櫒16鍔熻兘锛欼P:{readip},閫氶亾鍦板潃涓簕model.addr},绔彛涓簕model.port},鍙戦�鍊納req},閿欒鐮侊細{result.errCode},閿欒淇℃伅锛歿result.errMsg}");
+                    ////Console.WriteLine($"鍐欏涓緭鍑哄瘎瀛樺櫒 16 鍔熻兘MODBUS鍙傛暟,閫氶亾鍦板潃涓簕model.addr},绔彛涓簕model.port},鍙戦�鍊納req},杩斿洖鍊納result.errCode},{result.errMsg}");
+                }
+                else if (result.errCode == 1025)
+                {
+                    var packNo = Settings.GetPlcInfo().Where(a => a.ip == model.host && a.deviceType == "1").FirstOrDefault();
+                    if (packNo != null)
+                    {
+                        CMMLog.Error($"銆�025寮傚父銆戝啓澶氫釜杈撳嚭瀵勫瓨鍣�6鍔熻兘:IP:{readip},鍖呰鏈哄彿锛歿packNo.location}锛岄�閬撳湴鍧�负{model.addr},绔彛涓簕model.port},鍙戦�鍊納req}");
+                        ////Console.WriteLine($"銆�025寮傚父銆戣鍙栬緭鍑哄瘎瀛樺櫒鏁版嵁 03 鍔熻兘MODBUS鍙傛暟:閫氶亾鍦板潃涓簕model.addr},绔彛涓簕model.port},鍙戦�鍊納req}");
+                    }
+                }
+                #region   閲嶅彂鏈哄埗
+                //else if (result.errCode == 1125)
+                //{
+                //    int err = 0;
+                //    while (err == 0)
+                //    {
+                //        var req1 = JsonConvert.SerializeObject(model);
+                //        DateTime dateTime1 = DateTime.Now;
+                //        if (DateTime.Now.Subtract(dateTime1).TotalSeconds > 1)
+                //        {
+                //            var feedbackReset = apiHelper.WebPost($"{url}/api/modbus/register/writeoutputmulti?access_token={token}", req);
+                //            CMMLog.Debug($"閲嶆柊璇诲彇鍐欏叆澶氫釜瀵勫瓨鍣�6鍔熻兘杈撳叆鏁版嵁:req:{req1},ip:{readip}");
+                //            CMMLog.Debug($"閲嶆柊璇诲彇鍐欏叆澶氫釜瀵勫瓨鍣ㄦ暟鎹�6鍔熻兘璇锋眰URL:readUrl:{url}/api/modbus/register/readoutput?access_token={token}");
+                //            if (feedbackReset != "")
+                //            {
+                //                result = JsonConvert.DeserializeObject<RegisterReadOutPutResult>(feedbackReset);
+                //                if (result.errCode == 0)
+                //                {
+                //                    err = 1;
+                //                    CMMLog.Debug($"鍐欏涓緭鍑哄瘎瀛樺櫒 16 鍔熻兘MODBUS鍙傛暟,閫氶亾鍦板潃涓簕model.addr},绔彛涓簕model.port},鍙戦�鍊納req},杩斿洖鍊納result.errCode},{result.errMsg}");
+                //                    //Console.WriteLine($"鍐欏涓緭鍑哄瘎瀛樺櫒 16 鍔熻兘MODBUS鍙傛暟,閫氶亾鍦板潃涓簕model.addr},绔彛涓簕model.port},鍙戦�鍊納req},杩斿洖鍊納result.errCode},{result.errMsg}");
+                //                    readip = model.host;
+                //                }
+                //            }
+                //        }
+                //    }
+                //}
+                #endregion
+            }
+            catch (Exception ex)
+            {
+                CMMLog.Error($"鍐欏涓緭鍑哄瘎瀛樺櫒16鍔熻兘:寮傚父锛欼P:{readip},閫氶亾涓�{model.addr},鍐欏叆鍊间负锛歿model.data}锛屽紓甯镐俊鎭細{ex.Message}");
+            }
+            //CMMLog.Debug($"鍐欏涓緭鍑哄瘎瀛樺櫒16鍔熻兘:{feedback}");
+            ////Console.WriteLine($"鍐欏涓緭鍑哄瘎瀛樺櫒16鍔熻兘:{feedback}");
+            return result;
+        }
+        public class RegisterWriteOutPutModelMulti : BaseRequestModel
+        {
+            public int[] data { get; set; }
+        }
+        #endregion
+
+        #endregion
+
+
+        public class ReadInPutResult : BaseResponseModel
+        {
+            public int result { get; set; }
+        }
+        public class BaseResponseModel
+        {
+            public int errCode { get; set; }
+            public string errMsg { get; set; }
+        }
+        public class BaseRequestModel
+        {
+            public string host { get; set; }
+            public int port { get; set; } = 502;
+            public int timeout { get; set; } = 1000;
+            public int deviceNo { get; set; } = 1;
+            public int addr { get; set; }
+            public object tcpModel { get; set; } = new { msgNo = 1 };
+        }
+    }
+}
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMProtocol/PLCControl.cs b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/PLCControl.cs
new file mode 100644
index 0000000..d1b6bfd
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/PLCControl.cs
@@ -0,0 +1,3616 @@
+锘�+using Hanhe.iWCS.Business;
+using Hanhe.iWCS.Common;
+using Hanhe.iWCS.Interface;
+using Hanhe.iWCS.Model;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Linq;
+using MongoDB.Bson;
+using Hanhe.iWCS.MData;
+using Newtonsoft.Json;
+using MongoDB.Driver.Builders;
+using static Hanhe.iWCS.IndonesiaGLMProtocol.MESHelper;
+using MongoDB.Driver;
+using static Hanhe.iWCS.IndonesiaGLMProtocol.ProcessHelper;
+using static Hanhe.iWCS.IndonesiaGLMProtocol.ApiHelper;
+using System.Threading;
+using Hanhe.iWCS.Model.AMS;
+using Hanhe.iWCS.IndonesiaGLMTCP;
+using static Hanhe.iWCS.IndonesiaGLMProtocol.ProtocolAnalysis;
+using System.Threading.Tasks;
+using static System.Runtime.CompilerServices.RuntimeHelpers;
+using static Hanhe.iWCS.IndonesiaGLMProtocol.AMSHelper;
+using System.Collections;
+using log4net.Config;
+using System.Text.RegularExpressions;
+using static Hanhe.iWCS.IndonesiaGLMProtocol.ERPService;
+using System.Globalization;
+using System.Security.Cryptography;
+
+namespace Hanhe.iWCS.IndonesiaGLMProtocol
+{
+    public class PLCControl : IPLCControl
+    {
+        private EquipmentCommandEQBLL commandBLL = new EquipmentCommandEQBLL();
+
+        /// <summary>
+        /// PLC 鏁版嵁鍙戦�
+        /// </summary>
+        /// <param name="command"></param>
+        /// <returns></returns>
+        public void SendMessage(EquipmentCommandEQ command)
+        {
+            bool sended = SessionInstance.Instance.PLCSend(command.EquipmentIP, int.Parse(command.EquipmentPort), command.CommandText);
+            if (sended)
+            {
+                //CMMLog.Info("璁惧鎸囦护鍙戦�鎴愬姛;EquipmentCode=" + command.EquipmentCode + "-鎸囦护=" + command.CommandText);
+                commandBLL.UpdateCommandEQStatus(command._id, Constants.COMMANDEQ_STATUS_SENDED, command.SendCount);
+            }
+            else
+            {
+                //CMMLog.Info("璁惧鎸囦护鍙戦�澶辫触;EquipmentCode=" + command.EquipmentCode + "-鎸囦护=" + command.CommandText);
+                commandBLL.UpdateCommandEQStatus(command._id, Constants.COMMANDEQ_STATUS_SEND_ERRORS, command.SendCount);
+            }
+        }
+
+        /// <summary>
+        /// 澶勭悊鍏夌數淇℃伅
+        /// </summary>
+        /// <param name="data"></param>
+        public static void Analysis(string data) {
+            //3f 00 01 00 00 00 24 24
+        }
+
+        #region   绾�妤艰澶囦换鍔�+
+        #region   3妤煎寘瑁呮満鍙栨枡鑷冲绉板钩鍙版祦绋嬧�鈥旀棤闇�洖鎶MS浠诲姟鐘舵�鈥斺�3妤煎寘瑁呭彇鏂欌�鈥斿凡瀹屾垚锛堝緟娴嬭瘯锛屾椂闂存埑澶勭悊锛�+
+        #region   鏀跺埌鍖呰鏈轰笅鏂欎俊鍙�锛屽紑濮嬪垽鏂绉板钩鍙版槸鍚︽弧瓒虫潯浠讹紝閫夋嫨鎬т笅鍙戜换鍔�+
+        /// <summary>
+        /// 3妤煎寘瑁呮満鍙栨枡鑷冲绉板钩鍙版祦绋嬧�鈥斾换鍔″紑濮嬪墠锛屽垽鏂寘瑁呮満鏈夋病鏈変笅绾夸俊鍙凤紝骞跺垽鏂綋鍓嶅绉板钩鍙版槸鍚G浠ュ強鏈夋病鏈変换鍔″湪杩涜涓�+        /// </summary>
+        /// <param name="a"></param>
+        internal static void CheckPackingMachine(Settings.PlcInfo pmInfo)
+        {
+            //var count = MongoDBSingleton.Instance.FindOne<>//occupy
+            var count = MongoDBSingleton.Instance.FindOne<MachineInfo>(Query.And(Query.EQ("occupy", "1"),Query.EQ("machineNo", pmInfo.location)), "MachineInfo");
+
+            //妫�煡鍖呰鏈洪�閬�鏄惁鏈変笅鏂欎俊鍙凤紝濡傛灉鏈夌敓鎴愪笅鏂欎换鍔°�绾跨▼寰幆璇诲彇锛屾棤闇�缃惊鐜�鈥斺�閫氶亾0鍙傛暟涓�
+            if (count == null)
+            {
+                if (PickUpStartFree(pmInfo.location) && PickUpEndFree(pmInfo.location))
+                {
+                    try
+                    {
+                        var result = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                        {
+                            dataNum = 1,
+                            addr = pmInfo.readAddr,
+                            host = pmInfo.ip,
+                            port = pmInfo.port
+                        });
+                        if (result != null && result.errCode == 0)
+                        {
+                            CMMLog.Debug($"鍖呰涓嬬嚎娴佺▼-{pmInfo.location}锛氳鍙栧寘瑁呮満{pmInfo.device}閫氶亾鍙蜂负锛歿pmInfo.readAddr}鐨勫�涓猴細{result.result[0]}");
+                            if (result != null && result.errCode == 0 && result.result.Count() > 0)
+                            {
+                                //1锛氬彇鏂�+                                if (result.result[0] == 1 || result.result[0] == 5)
+                                {
+                                    var FCBit = Settings.GetPlcInfo().Where(a => a.deviceType == "2" && a.enable == 1).ToList();
+                                    if(FCBit.Count > 0)
+                                    {
+                                        foreach(var a in FCBit)
+                                        {
+                                            string PlcBit02 = a.location;
+                                            CMMLog.Debug($"澶嶇О鐐逛綅锛歿PlcBit02}");
+                                            //鍖呰涓嬬嚎浠诲姟锛岀粓鐐逛负澶嶇О浣嶇疆锛堣繖閲屽垽鏂寘瑁呮満璧风偣锛屽绉拌捣鐐圭粓鐐瑰潎鏃犱换鍔★紝鍒欐帹閫佷换鍔★級
+                                            if (ProcessHelper.PickUpStartFree(pmInfo.location) && ProcessHelper.CheckEndFree(PlcBit02) && ProcessHelper.PickUpStartFree(PlcBit02))
+                                            {
+                                                //鍒ゆ柇澶嶇О浣嶇疆锛屾病鏈夎揣骞朵笖涓嶄负NG(ng鍙傛暟0锛�锛�鈥斺�0锛屼笉纭畾锛堝寘瑁呮満鍒氬紑濮嬪伐浣滄椂锛�锛宱k 2锛宯g)
+                                                var state = GetSecondWeighState(pmInfo.location, PlcBit02);
+                                                CMMLog.Debug($"鍖呰涓嬬嚎娴佺▼锛氬垽鏂绉颁綅缃┖婊$姸鎬佷负:{state.full},ng鐘舵�涓猴細{state.ng}");
+                                                if (state.full == 0)
+                                                {
+                                                    if (Settings.mesOpen == "0")
+                                                    {
+                                                        //鍙互鐢熸垚浠诲姟锛岃皟mes鎺ュ彛鑾峰彇鐢熶骇淇℃伅       2022.7.28   鍙樻洿  MES鍙兘闇�1~2骞存墠鑳戒笂绾匡紝鍏堟妸MES鍔熻兘娉ㄩ攢
+                                                        var info = MESHelper.GetPackingMachineInfo(pmInfo.location);
+                                                        if (info != null)
+                                                        {
+                                                            CMMLog.Debug($"鍖呰涓嬬嚎娴佺▼锛氳幏鍙朚ES涔嬪悗杩涘叆info鍒ゆ柇锛�);
+                                                            //Console.WriteLine($"鍖呰涓嬬嚎娴佺▼锛氳幏鍙朚ES涔嬪悗杩涘叆info鍒ゆ柇锛�);
+                                                            var trayCode = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                                                            {
+                                                                addr = pmInfo.readAddr + 10,
+                                                                dataNum = 80,//鏁版嵁涓暟瑕佸鍔�      addr浠ュ強dataNum鐨勫叿浣撴暟鎹负16涓�    鐜�0涓弬鏁�+                                                                host = pmInfo.ip,
+                                                                port = pmInfo.port
+                                                            });
+                                                            if (trayCode.errCode == 0 && trayCode.result.Length == 80)
+                                                            {
+                                                                //鑾峰彇鎵樼洏鐮佺瓑淇℃伅  璇诲彇閫氶亾 10銆�1銆�2鐨勬暟鎹綔涓烘墭鐩樼爜   璇诲彇鍏跺畠閫氶亾 閲嶉噺 鍙犲寘绛変俊鎭�鎵�湁鏁版嵁瀛樺叆MachineInfo琛�+                                                                GetMachineData(trayCode.result);
+                                                                var tray = MongoDBSingleton.Instance.FindOne<MachineInfo>(Query.EQ("machineNo", pmInfo.location), "MachineInfo");
+                                                                if (tray != null && tray.addState == 0)
+                                                                {
+                                                                    MongoDBSingleton.Instance.Remove<MachineInfo>(Query.EQ("machineNo", tray.machineNo), RemoveFlags.Single);
+                                                                    CMMLog.Debug("鍖呰涓嬬嚎浠诲姟锛屽彔鎵樺眰鏁颁负0锛屼笉鐢熸垚浠诲姟");
+                                                                }
+                                                                else if (tray != null)
+                                                                {
+                                                                    if (tray.trayCode != "0" && tray.trayCode != "" && tray.trayCode != null)
+                                                                    {
+                                                                        //AMSHelper.CreateTask(DateTime.Now.Ticks.ToString(), pmInfo.location, GetSecondWeighBit(), "3妤煎寘瑁呭彇鏂�, 1, JsonConvert.SerializeObject(info));
+                                                                        int i = 1;
+                                                                        while (i == 1)
+                                                                        {
+                                                                            var amsResult = AMSHelper.CreateTask(DateTime.Now.Ticks.ToString(), pmInfo.location, PlcBit02, "3妤煎寘瑁呭彇鏂�, 0, tray.trayCode);
+                                                                            if (amsResult.success)
+                                                                            {
+                                                                                i = 2;
+                                                                                CMMLog.Debug($"鍖呰涓嬬嚎娴佺▼锛欰MS璋冪敤API鎴愬姛锛�);
+                                                                                //璁板綍鍖呰闂翠笅鏂欎俊鎭�+                                                                                MongoDBSingleton.Instance.Insert<packageInfoModel>(new packageInfoModel { machineNo = tray.machineNo, trayCode = tray.trayCode, time = DateTime.Now.ToString("yyyy-MM-dd"), weight = tray.oneTrayWeight });
+                                                                                break;
+                                                                            }
+                                                                            else CMMLog.Debug($"鍖呰涓嬬嚎娴佺▼锛欰MS璋冪敤API澶辫触锛屽紑濮嬮噸鏂拌皟鐢紒");
+                                                                        }
+                                                                        CMMLog.Debug($"鍖呰涓嬬嚎娴佺▼锛氭帴鍙楀苟璇诲彇鍖呰鏈洪�閬撻噷闈㈢殑鐗╂枡淇℃伅锛屽苟灏嗗叾鍐欏叆MachineInfo涓棿琛ㄤ腑锛佹帴鏀跺埌鐨勪俊鎭細{JsonConvert.SerializeObject(trayCode.result)}");
+                                                                    }
+                                                                }
+                                                                else
+                                                                {
+                                                                    CMMLog.Debug($"鍖呰涓嬬嚎娴佺▼锛歵ray==null!");
+                                                                    //Console.WriteLine($"鍖呰涓嬬嚎娴佺▼锛歵ray==null!");
+                                                                }
+                                                            }
+                                                            else
+                                                            {
+                                                                CMMLog.Debug($"鍖呰涓嬬嚎娴佺▼锛�妤煎寘瑁呰嚦澶嶇О鑾峰彇MODBUS鍊奸敊璇紒trayCode.errCode:{trayCode.errCode},trayCode.result.Length:{trayCode.result.Length}");
+                                                                //Console.WriteLine($"鍖呰涓嬬嚎娴佺▼锛�妤煎寘瑁呰嚦澶嶇О鑾峰彇MODBUS鍊奸敊璇紒trayCode.errCode:{trayCode.errCode},trayCode.result.Length:{trayCode.result.Length}");
+                                                            }
+                                                        }
+                                                        else CMMLog.Debug($"鍖呰涓嬬嚎娴佺▼锛歁ES鎺ュ彛鏁版嵁杩斿洖绌哄�锛丮ES鎺ュ彛鏁版嵁:{info}");
+                                                    }
+                                                    else if (Settings.mesOpen == "1")
+                                                    {
+                                                        //鍙互鐢熸垚浠诲姟锛岃皟mes鎺ュ彛鑾峰彇鐢熶骇淇℃伅       2022.7.28   鍙樻洿  MES鍙兘闇�1~2骞存墠鑳戒笂绾匡紝鍏堟妸MES鍔熻兘娉ㄩ攢
+                                                        CMMLog.Debug($"鍖呰涓嬬嚎娴佺▼-{pmInfo.location}锛氳幏鍙朚ES涔嬪悗杩涘叆info鍒ゆ柇锛�);
+                                                        var trayCode = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                                                        {
+                                                            addr = pmInfo.readAddr + 10,
+                                                            dataNum = 91,////ERP鍙樻洿锛�0  鍘熷厛锛�0
+                                                            host = pmInfo.ip,
+                                                            port = pmInfo.port
+                                                        });
+                                                        if (trayCode.errCode == 0 && trayCode.result.Length == 91)
+                                                        {
+                                                            //鑾峰彇鎵樼洏鐮佺瓑淇℃伅  璇诲彇閫氶亾 11銆�2銆�3鐨勬暟鎹綔涓烘墭鐩樼爜   璇诲彇鍏跺畠閫氶亾 閲嶉噺 鍙犲寘绛変俊鎭�鎵�湁鏁版嵁瀛樺叆MachineInfo琛�+                                                            GetMachineData(trayCode.result, false);
+                                                            var tray = MongoDBSingleton.Instance.FindOne<MachineInfo>(Query.EQ("machineNo", pmInfo.location), "MachineInfo");
+                                                            if (tray != null)
+                                                            {
+                                                                if (tray.addState == 0)
+                                                                {
+                                                                    MongoDBSingleton.Instance.Remove<MachineInfo>(Query.EQ("machineNo", pmInfo.location), "MachineInfo", RemoveFlags.None);
+                                                                    //if (ERPService.ERPSwitch01 == "0") MongoDBSingleton.Instance.Remove<MachineInfoTwo>(Query.EQ("machineNo", pmInfo.location), "MachineInfoTwo", RemoveFlags.None);
+                                                                    CMMLog.Debug($"鍖呰涓嬬嚎娴佺▼-{pmInfo.location}锛氬彔鎵樺眰鏁颁负0锛屼笉鍏佽鐢熸垚浠诲姟");
+                                                                }
+                                                                else if (tray.trayCode != "0" && !string.IsNullOrEmpty(tray.trayCode))
+                                                                {
+                                                                    CMMLog.Info($"鐗╂枡缂栫爜锛歿tray.materialCode}锛屾壒娆″彿锛歿tray.lotNo}");
+                                                                    if(result.result[0] == 1)
+                                                                    {
+                                                                        string timeStamp = ProcessHelper.GetTimeStamp(31, 1, 1);
+                                                                        HHAmsExecuteResult req = AMSHelper.CreateTask(DateTime.Now.Ticks.ToString(), pmInfo.location, PlcBit02, "PackagingMachineMaterialHandling", 0, tray.trayCode, timeStamp);
+
+                                                                        //璁板綍鍖呰闂翠笅鏂欎俊鎭�+                                                                        if (req.success)
+                                                                        {
+                                                                            string Weight = (decimal.Parse(tray.oneTrayWeight) / 100).ToString("F2");
+                                                                            MongoDBSingleton.Instance.Insert<packageInfoModel>(new packageInfoModel { machineNo = tray.machineNo, trayCode = tray.trayCode, batchNo = tray.lotNo, time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), weight = Weight });
+                                                                        }
+                                                                        break;
+                                                                    }
+                                                                    else
+                                                                    {
+                                                                        var writeRes0 = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                                                                        {
+                                                                            host = pmInfo.ip,
+                                                                            addr = pmInfo.writeAddr,
+                                                                            data = 5,//鍘熷厛鏄�,鍗曚釜鍐欏叆
+                                                                            port = pmInfo.port
+                                                                        });
+
+                                                                        //浜哄伐妯″紡锛屾棤闇�敓鎴愪换鍔�+                                                                        //鍒犻櫎machineInfo琛ㄤ腑鐨勬暟鎹�+                                                                        MongoDBSingleton.Instance.Remove<MachineInfo>(Query.And(Query.EQ("machineNo", pmInfo.location),Query.EQ("trayCode", tray.trayCode)), "MachineInfo", RemoveFlags.None);
+
+                                                                        //璁板綍鍖呰闂翠笅鏂欎俊鎭�+                                                                        string Weight = (decimal.Parse(tray.oneTrayWeight) / 100).ToString("F2");
+                                                                        MongoDBSingleton.Instance.Insert<packageInfoModel>(new packageInfoModel { machineNo = tray.machineNo, trayCode = tray.trayCode, batchNo = tray.lotNo, time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), weight = Weight });
+                                                                        break;
+                                                                    }
+
+                                                                    //鍖呰鍙栨枡鍗歌揣瀹屾垚锛岃澶囩敓浜ф暟閲忓姞涓�+                                                                    //鍒ゆ柇鏄惁鏈夊綋澶╃殑鏁版嵁锛屽鏋滄病鏈夛紝鍒欑敓鎴愭暟鎹�+                                                                    #region
+                                                                    var proInfo = MongoDBSingleton.Instance.FindOne<ProductList>(Query.And(Query.EQ("Date", DateTime.Now.ToString("yyyy-MM-dd")), Query.EQ("machine", tray.machineNo)), "ProductList");
+                                                                    if (proInfo != null)
+                                                                    {
+                                                                        proInfo.total = proInfo.total + 1;
+                                                                        proInfo.percentOfPass = Math.Round(((proInfo.qualifiedQuantity / proInfo.total) * 100), 2);
+                                                                        MongoDBSingleton.Instance.Update<ProductList>(Query.And(Query.EQ("Date", DateTime.Now.ToString("yyyy-MM-dd")), Query.EQ("machine", tray.machineNo)), Update.Set("total", proInfo.total).Set("percentOfPass", proInfo.percentOfPass), UpdateFlags.None);
+                                                                    }
+                                                                    else
+                                                                    {
+                                                                        ProductList machine = new ProductList
+                                                                        {
+                                                                            Date = DateTime.Now.ToString("yyyy-MM-dd"),
+                                                                            machine = tray.machineNo,
+                                                                            total = 1,
+                                                                            qualifiedQuantity = 0,
+                                                                            percentOfPass = 0,
+                                                                            overallPassRate = 0
+                                                                        };
+                                                                        MongoDBSingleton.Instance.Insert(machine);
+                                                                    }
+                                                                    #endregion
+                                                                }
+                                                            }
+                                                            else CMMLog.Debug($"鍖呰涓嬬嚎娴佺▼-{pmInfo.location}锛歵ray==null!");
+                                                        }
+                                                        else CMMLog.Debug($"鍖呰涓嬬嚎娴佺▼-{pmInfo.location}锛�妤煎寘瑁呰嚦澶嶇О鑾峰彇MODBUS鍊奸敊璇紒trayCode.errCode:{trayCode.errCode},trayCode.result.Length:{trayCode.result.Length}");
+                                                    }
+                                                }
+                                                else
+                                                {
+                                                    var task = MongoDBSingleton.Instance.FindOne<TN_I_TASK_MST>(Query.Or(Query.EQ("CN_S_START_BIT", PlcBit02), Query.EQ("CN_S_END_BIT", PlcBit02)), "TN_I_TASK_MST");
+                                                    if (task != null) CMMLog.Debug($"鍖呰涓嬬嚎娴佺▼-{pmInfo.location}锛氭鏌ュ绉颁腑闂磋〃鏄惁涓虹┖锛屼笉涓虹┖鍒欐鏌ュ叾鏁版嵁full浠ュ強ng鏄惁涓�鍜�锛佷换鍔″彿涓猴細{task.CN_S_TASK_NO}");
+                                                    else CMMLog.Debug($"鍖呰涓嬬嚎娴佺▼-{pmInfo.location}锛氭鏌ュ绉颁腑闂磋〃鏄惁涓虹┖锛屼笉涓虹┖鍒欐鏌ュ叾鏁版嵁full浠ュ強ng鏄惁涓�鍜�锛�);
+                                                }
+                                            }
+                                            else
+                                            {
+                                                var taskNo = MongoDBSingleton.Instance.FindOne<TN_I_TASK_MST>(Query.EQ("CN_S_START_BIT", pmInfo.location), "TN_I_TASK_MST");
+                                                var taskNo1 = MongoDBSingleton.Instance.FindOne<TN_I_TASK_MST>(Query.Or(Query.EQ("CN_S_START_BIT", PlcBit02), Query.EQ("CN_S_END_BIT", PlcBit02)), "TN_I_TASK_MST");
+                                                string task = "", startbit = "", endbit = "";
+                                                if (taskNo != null)
+                                                {
+                                                    task = taskNo.CN_S_TASK_NO;
+                                                    startbit = taskNo.CN_S_START_BIT;
+                                                    endbit = taskNo.CN_S_END_BIT;
+                                                }
+                                                else if (taskNo1 != null)
+                                                {
+                                                    task = taskNo1.CN_S_TASK_NO;
+                                                    startbit = taskNo1.CN_S_START_BIT;
+                                                    endbit = taskNo1.CN_S_END_BIT;
+                                                }
+                                                CMMLog.Debug($"鍖呰鏈鸿捣鐐规垨鑰呭绉拌捣鐐圭粓鐐规湁浠诲姟鍦ㄦ墽琛屼腑锛佷换鍔″彿锛歿task}锛岃捣鐐癸細{startbit},缁堢偣锛歿endbit}");
+                                            }
+                                        }
+                                    }
+                                }
+                                else CMMLog.Debug($"鍖呰涓嬬嚎娴佺▼-{pmInfo.location}锛氬寘瑁呮満閫氶亾0閲岄潰鐨勬暟鎹笉涓�锛乺esult涓猴細{JsonConvert.SerializeObject(result)}");
+                            }
+                            else CMMLog.Debug($"鍖呰涓嬬嚎娴佺▼-{pmInfo.location}锛氭湭璇诲彇鍒板寘瑁呮満閫氶亾0閲岄潰鐨勬暟鎹紒锛侊紒result:{JsonConvert.SerializeObject(result)}");
+                        }
+                        else CMMLog.Debug($"鍖呰涓嬬嚎娴佺▼-{pmInfo.location}锛氭湭璇诲彇鍒板寘瑁呮満閫氶亾0閲岄潰鐨勬暟鎹紒锛侊紒result:{JsonConvert.SerializeObject(result)}");
+                    }
+                    catch (Exception ex)
+                    {
+                        CMMLog.Debug($"鍖呰涓嬬嚎娴佺▼-{pmInfo.location}:" + ex.Message);
+                    }
+                }
+                else CMMLog.Debug($"褰撳墠鍖呰鏈鸿捣鐐圭粓鐐规湁浠诲姟姝e湪鎵ц锛岃纭褰撳墠鍖呰鏈虹殑浠诲姟鏄惁鍙栬揣鍗歌揣瀹屾垚锛佸寘瑁呮満璐т綅缂栫爜锛歿pmInfo.location}");
+            }
+            else CMMLog.Debug($"褰撳墠machineInfo涓棿琛ㄥ凡瀛樺湪鏁版嵁锛歿JsonConvert.SerializeObject(count)}");
+        }
+
+        #endregion
+
+        #region   鍖呰鏈篗ODBUS浜や簰锛堝紑濮嬪彇鏂欙紝鍙栨枡瀹屾垚锛�+
+        /// 灏忚溅璇锋眰杩涙枡	1	AMS鍐欙紝PLC璇�1-璇锋眰杩涘叆锛�-鍒颁綅鍚庯紝璇锋眰鎺ラ┏婊氬姩锛�-鍙栬揣瀹屾垚锛�-绂诲紑瀹夊叏闂ㄥ锛屾竻闆堕�閬�+        /// 璁惧鍏佽鍑烘枡	1	PLC鍐欙紝AMS璇�1-XXXXXXXX锛�-鍏佽杩涘叆锛�-鎺ラ┏婊氬姩锛岄�鍑虹墿鏂� 锛�-缁撴潫锛�-瀹夊叏闂ㄥ叧闂�+
+        /// <summary>
+        /// 灏忚溅鍒拌揪鍖呰鏈哄畨鍏ㄩ棬鍙h姹傝繘鍏�+        /// 鍒ゆ柇鏄惁鏄敼閬撳悗 澶嶇Г鍏ョ紦瀛樻灦浠诲姟
+        /// </summary>
+        /// <param name="ips"></param>
+        internal static void PickUpFullDoorUnload(string ip, string taskNo, string deviceType)
+        {
+            if(deviceType != "2")
+            {
+                var plc = Settings.GetPlcInfo().Where(a => a.ip == ip).FirstOrDefault();
+                //ASM鍐欏叆閫氶亾0灏忚溅鍔ㄤ綔锛�-鍙栨枡
+                int[] num = new int[2] { 1, 1 };
+                var writeRes0 = OITcpHelper.RegisterWriteOutPutMulti(new OITcpHelper.RegisterWriteOutPutModelMulti
+                {
+                    host = ip,
+                    addr = plc.writeAddr,
+                    data = num,//鍘熷厛鏄�,鍗曚釜鍐欏叆
+                    port = plc.port
+                });
+                if (writeRes0.errCode == 0)
+                {
+                    //灏忚溅璇锋眰杩涘叆瀹夊叏闂ㄤ氦浜�+                    //灏忚溅璇锋眰杩涙枡锛屽苟涓旀煡璇㈣澶囨槸鍚﹀厑璁窤GV杩涘叆
+                    //璇诲湴鍧�璁惧鏄惁  2-鍙互杩涘叆
+                    var readRes = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                    {
+                        dataNum = 1,
+                        host = ip,
+                        addr = plc.readAddr + 1,
+                        port = plc.port
+                    });
+                    CMMLog.Debug($"璇诲彇璁惧{plc.location}閫氶亾{plc.readAddr + 1}閲岄潰鏁版嵁涓簕readRes.result[0]}.");
+                    //Console.WriteLine($"璇诲彇璁惧{plc.location}閫氶亾{plc.readAddr + 1}閲岄潰鏁版嵁涓簕readRes.result[0]}.");
+                    if (readRes != null && readRes.errCode == 0)
+                    {
+                        if (readRes.result[0] == 2)
+                        {
+                            //璁惧鍏佽杩涘叆锛屾敼鍙傛暟閫氱煡AGV
+                            WorkFlowAction.TrackLog(taskNo, 10, 1012, "success");
+                            TSHelper.GoToAGV(taskNo, 10, 1);
+                        }
+                    }
+                    else CMMLog.Debug($"鍖呰涓嬬嚎锛�012锛宺eadRes锛歿readRes},readRes.errCode:{readRes.errCode}");
+                }
+            }
+            else
+            {
+                PLCControl.SecondWeightInCache1012(ip, taskNo);//浜屾湡锛氱洿鎺ユ敼鍙傛暟
+            }
+            
+        }
+        /// <summary>
+        /// 灏忚溅璇锋眰鍙栬揣
+        /// </summary>
+        /// <param name="ip"></param>
+        /// <param name="taskNo"></param>
+        internal static void PickUpFullUnload(string ip , string taskNo, int port)
+        {
+            var plc = Settings.GetPlcInfo().Where(a => a.ip == ip && a.port == port).FirstOrDefault();
+            if (ip != "")
+            {
+                //灏忚溅璇锋眰鍑烘枡锛屽苟涓旀煡璇㈣澶囨槸鍚﹀厑璁窤GV杩涘叆
+                //璇诲湴鍧�璁惧鏄惁  2-鍏佽杩涙枡  淇濋櫓璧疯锛屽彲浠ヤ笉璇�+                var readRes = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                {
+                    dataNum = 1,
+                    host = ip,
+                    addr = plc.readAddr + 1,
+                    port = plc.port
+                });
+                CMMLog.Debug($"璇诲彇璁惧{plc.location}閫氶亾{plc.readAddr + 1}閲岄潰鏁版嵁涓簕readRes.result[0]}.");
+                //Console.WriteLine($"璇诲彇璁惧{plc.location}閫氶亾{plc.readAddr + 1}閲岄潰鏁版嵁涓簕readRes.result[0]}.");
+                if (readRes != null && readRes.errCode == 0)
+                {
+                    if (readRes.result[0] == 2)
+                    {
+                        //TSHelper.GoToAGV(taskNo, 10, 2);//鍘熷厛鍏堟敼AGV鍙傛暟
+                        var writeRes1 = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                        {
+                            host = ip,
+                            addr = plc.writeAddr + 1,
+                            data = 2,
+                            port = plc.port
+                        });
+                        if(writeRes1.errCode == 0) TSHelper.GoToAGV(taskNo, 10, 2);
+                        CMMLog.Debug($"鍐欏叆璁惧{plc.location}閫氶亾{plc.writeAddr + 1}閲岄潰鏁版嵁涓�.");
+                        //Console.WriteLine($"鍐欏叆璁惧{plc.location}閫氶亾{plc.writeAddr + 1}閲岄潰鏁版嵁涓�.");
+                    }
+                }
+                else CMMLog.Debug($"鍖呰涓嬬嚎锛�112锛宺eadRes={readRes}");
+            }
+            else CMMLog.Debug($"鍖呰涓嬬嚎锛�112锛宨p=null!");
+        }
+        /// <summary>
+        /// 灏忚溅鍙栬揣瀹屾垚--浜屾湡鍗忚鏃犳鎸囦护鍔ㄤ綔
+        /// </summary>
+        /// <param name="ip"></param>
+        /// <param name="taskNo"></param>
+        internal static void PickUpFullComplete(string ip, string taskNo)
+        {
+            var plc = Settings.GetPlcInfo().Where(a => a.ip == ip).FirstOrDefault();
+            if (ip != "")
+            {
+                //灏忚溅璇锋眰鍑烘枡锛屽苟涓旀煡璇㈣澶囨槸鍚﹀厑璁窤GV杩涘叆
+                //璇诲湴鍧�璁惧鏄惁  2-鍏佽杩涙枡
+                var readRes = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                {
+                    dataNum = 1,
+                    host = ip,
+                    addr = plc.readAddr+1,
+                    port = plc.port
+                });
+                CMMLog.Debug($"璇诲彇璁惧{plc.location}閫氶亾{plc.readAddr + 1}閲岄潰鏁版嵁涓簕readRes.result[0]}.");
+                //Console.WriteLine($"璇诲彇璁惧{plc.location}閫氶亾{plc.readAddr + 1}閲岄潰鏁版嵁涓簕readRes.result[0]}.");
+                DateTime dateTime = DateTime.Now;
+                if (readRes != null && readRes.errCode == 0)
+                {
+                    if (readRes.result[0] == 3)
+                    {
+                        var writeRes1 = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                        {
+                            host = ip,
+                            addr = plc.writeAddr+1,
+                            data = 3,
+                            port = plc.port
+                        });
+                        CMMLog.Debug($"鍐欏叆璁惧{plc.location}閫氶亾{plc.writeAddr + 1}閲岄潰鏁版嵁涓�.");
+                        //Console.WriteLine($"鍐欏叆璁惧{plc.location}閫氶亾{plc.writeAddr + 1}閲岄潰鏁版嵁涓�.");
+                    }
+                    else if(readRes.result[0] == 4)
+                    {
+                        WorkFlowAction.TrackLog(taskNo, 10, 1212, "success");
+                        TSHelper.GoToAGV(taskNo, 10, 5);
+                    }
+                }
+                else CMMLog.Debug($"鍖呰涓嬬嚎锛�212锛宺eadRes={readRes}!");
+            }
+            else CMMLog.Debug($"鍖呰涓嬬嚎锛�212锛宨p=null!");
+        }
+        /// <summary>
+        /// 灏忚溅鍗歌揣瀹屾垚绂诲紑瀹夊叏闂ㄥ悗閫氱煡鍖呰鏈�+        /// </summary>
+        /// <param name="ips"></param>
+        /// <param name="taskNo"></param>
+        internal static void PickUpFullDoorComplete(string ip, string taskNo, string deviceType)
+        {
+            if(deviceType == "1")
+            {
+                var plc = Settings.GetPlcInfo().Where(a => a.ip == ip).FirstOrDefault();
+                if (plc != null)
+                {
+                    //鍐欏叆鍖呰鏈�-瀹夊叏闂ㄥ叧闂ㄦ寚浠�+                    var writeRes = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                    {
+                        host = ip,
+                        addr = plc.writeAddr + 1,
+                        data = 3,
+                        port = plc.port
+                    });
+                    CMMLog.Debug($"鍐欏叆璁惧{plc.location}閫氶亾{plc.writeAddr + 1}閲岄潰鏁版嵁涓�.");
+                    //Console.WriteLine($"鍐欏叆璁惧{plc.location}閫氶亾{plc.writeAddr + 1}閲岄潰鏁版嵁涓�.");
+                }
+                else CMMLog.Debug($"鍖呰涓嬬嚎锛�锛宨p=null!");
+            }
+            else
+            {
+                PLCControl.SecondWeightInCache4(deviceType,taskNo);
+            }
+            
+        }
+        #endregion
+
+        #region   澶嶇О骞冲彴浜や簰
+
+        ///灏忚溅璇锋眰杩涙枡       1       AMS鍐欙紝PLC璇�      1-璇锋眰杩涘叆锛�-灏忚溅杩涙枡锛岃緭閫佹墭鐩橈紱3-XXXXXXX
+        ///璁惧鍏佽鍑烘枡       1       PLC鍐欙紝AMS璇�      1-XXXXXXXX锛�-鍏佽杩涙枡锛屽紑濮嬫粴鍔紱3-涓婃枡瀹屾垚
+        ///澶嶇О骞冲彴灏忚溅鍔ㄤ綔锛�   1锛氫笂鏂欏绉帮紱2锛氫笂鐮濈爜鏁欑О锛�锛氬彇澶嶇ОNG鎵樼洏锛�锛氬彇鐮濈爜鍒板寘瑁呮満
+
+        /// <summary>
+        ///澶嶇О骞冲彴瀹夊叏璇锋眰杩涘叆鈥斺�鍥犱负鐜板満闇�眰锛屾墍浠ラ澶栧鍔犱竴涓被浼煎畨鍏ㄩ棬鐨勪氦浜掞紝鐩存帴鏀瑰弬鏁板氨琛�+        /// </summary>
+        internal static void SecondWeightSafe(string ip,string taskNo, int port)
+        {
+            var plc = Settings.GetPlcInfo().Where(a => a.ip == ip && a.port == port).FirstOrDefault();
+            //ASM鍐欏叆灏忚溅鍔ㄤ綔锛�锛氫笂鏂欏绉帮紱2锛氫笂鐮濈爜鏁欑О锛�锛氬彇澶嶇ОNG鎵樼洏锛�锛氬彇鐮濈爜鍒板寘瑁呮満
+            int[] num = new int[2] { 1, 1 };
+            var writeRes0 = OITcpHelper.RegisterWriteOutPutMulti(new OITcpHelper.RegisterWriteOutPutModelMulti
+            {
+                host = ip,
+                addr = plc.writeAddr,
+                data = num,//鍘熷厛鏄�,鍗曚釜鍐欏叆
+                port = plc.port
+            });
+            CMMLog.Debug($"鍐欏叆璁惧{plc.location}閫氶亾{plc.writeAddr}閲岄潰鏁版嵁涓�.");
+            //Console.WriteLine($"鍐欏叆璁惧{plc.location}閫氶亾{plc.writeAddr}閲岄潰鏁版嵁涓�.");
+            ///灏忚溅鍜屽绉颁綅瀵规帴
+            //灏忚溅璇锋眰杩涙枡锛屽苟涓旀煡璇㈣澶囨槸鍚﹀厑璁窤GV杩涘叆
+            var readRes = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+            {
+                dataNum = 1,
+                host = plc.ip,
+                addr = plc.readAddr + 1,
+                port = plc.port
+            });
+            CMMLog.Debug($"璇诲彇璁惧{plc.location}閫氶亾{plc.readAddr + 1}閲岄潰鏁版嵁涓簕readRes.result[0]}.");
+            //Console.WriteLine($"璇诲彇璁惧{plc.location}閫氶亾{plc.readAddr + 1}閲岄潰鏁版嵁涓簕readRes.result[0]}.");
+            if (readRes != null && readRes.errCode == 0)
+            {
+                if(readRes.result[0] == 2)
+                {
+                    WorkFlowAction.TrackLog(taskNo, 10, 1013, "success");
+                    TSHelper.GoToAGV(taskNo, 10, 3);
+                }
+            }
+            //灏嗘暟鎹啓鍏ラ�閬�+        }
+
+        public static int SecondRelax = 0;
+        /// <summary>
+        /// 璇锋眰杩涘叆澶嶇О鍙栬揣
+        /// </summary>
+        /// <param name="ip"></param>
+        /// <param name="taskNo"></param>
+        internal static void SecondWeightInCache1012(string ip, string taskNo)
+        {
+            var plc = Settings.GetPlcInfo().Where(a => a.ip == ip).FirstOrDefault();
+            if (ip != null)
+            {
+                CMMLog.Info($"ip:{ip}");
+                ///灏忚溅鍜屽绉颁綅瀵规帴
+                if (ip != "")
+                {
+                    //灏忚溅璇锋眰杩涙枡锛屽苟涓旀煡璇㈣澶囨槸鍚﹀厑璁窤GV杩涘叆
+                    WorkFlowAction.TrackLog(taskNo, 10, 1012, "success");
+                    TSHelper.GoToAGV(taskNo, 10, 1);
+                    SecondRelax = 0;
+                }
+                else CMMLog.Info($"澶嶇О鍏ョ紦瀛樻灦锛�012锛宨p=null!");
+            }
+            else CMMLog.Info($"鍦板潃{ip}鐨勮澶囨湭閰嶇疆");
+        }
+        /// <summary>
+        /// 澶嶇О鍗歌揣
+        /// </summary>
+        /// <param name="ip"></param>
+        /// <param name="taskNo"></param> 
+        internal static void CheckUpReqUnload(Settings.PlcInfo plc, string taskNo)
+        {
+            ///灏忚溅鍜屽绉颁綅瀵规帴
+            if (plc != null)
+            {
+                //璁惧鍏佽杩涘叆锛屾敼鍙傛暟閫氱煡AGV
+                //WorkFlowAction.TrackLog(taskNo, 10, 1113, "success");
+                //TSHelper.GoToAGV(taskNo, 10, 4);
+                //CMMLog.Debug($"鏀笰GV鍙傛暟锛�0锛�");
+                //鍒ゆ柇浠诲姟璧风偣锛屾壘鍒拌捣鐐瑰寘瑁呮満璁惧鍙凤紝鍦ㄤ腑闂磋〃MachineInfo涓煡鎵句笂涓�彴璁惧锛堝寘瑁呮満锛夌殑鏁版嵁锛岄�杩噈odbus閫氶亾浼犲叆锛堟暟鎹渶瑕佽浆鎹紝ASCII杞�6short锛屽彲鑳借繕闇�鏁版嵁鎷嗗垎锛�+                var taskInfo = MongoDBSingleton.Instance.FindOne<TN_I_TASK_MST>(Query.EQ("CN_S_TASK_NO",taskNo), "TN_I_TASK_MST");
+                var machine = MongoDBSingleton.Instance.FindOne<MachineInfo>(Query.EQ("trayCode", taskInfo.CN_S_BATCH_NO), "MachineInfo");
+                if (machine != null)
+                {
+                    CMMLog.Debug("杩涘叆machine鍒ゆ柇");
+                    //鍚戝绉板嵏璐у绉帮紝骞跺皢浠庡寘瑁呮満鑾峰彇鍒扮殑鏁版嵁鍐欏叆閫氶亾涓�+                    #region   澶氫釜鏁版嵁鍐欏叆MODBUS
+
+                    var arr = JsonConvert.DeserializeObject<List<int>>(machine.jsonData);
+                    int[] num = new int[91];
+                    for(int i = 0; i <= 90; i++) num[i] = arr[i];
+
+                    CMMLog.Debug($"num:{JsonConvert.SerializeObject(num)}");
+                    //Console.WriteLine(num);
+                    var wirteall = OITcpHelper.RegisterWriteOutPutMulti(new OITcpHelper.RegisterWriteOutPutModelMulti
+                    {
+                        addr = plc.writeAddr + 10,
+                        host = plc.ip,
+                        data = num,
+                        port = plc.port
+                    });
+                    //var writeRes1 = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                    //{
+                    //    host = plc.ip,
+                    //    addr = plc.writeAddr + 1,
+                    //    data = 2,
+                    //    port = plc.port
+                    //});
+                    //CMMLog.Debug($"鍐欏叆璁惧{plc.location}閫氶亾{plc.writeAddr + 1}閲岄潰鏁版嵁涓�.");
+                    //Console.WriteLine($"鍐欏叆璁惧{plc.location}閫氶亾{plc.writeAddr + 1}閲岄潰鏁版嵁涓�.");
+                    #endregion
+                }
+                else CMMLog.Debug($"machine鍒ゆ柇閿欒锛屼负null!");
+            }
+            else CMMLog.Debug($"鍖呰涓嬬嚎锛�113锛宨p=null!");
+        }
+        /// <summary>
+        /// 澶嶇О鍗歌揣瀹屾垚
+        /// </summary>
+        /// <param name="ip"></param>
+        /// <param name="cN_S_TASK_NO"></param>
+        /// <returns></returns>
+        internal static void CheckUpUnloadComplete(string ip, string cN_S_TASK_NO,string machineNo, int port)
+        {
+            var plc = Settings.GetPlcInfo().Where(a => a.ip == ip && a.port == port).FirstOrDefault();
+
+            int[] num = new int[1] { 2 };
+            var writeRes0 = OITcpHelper.RegisterWriteOutPutMulti(new OITcpHelper.RegisterWriteOutPutModelMulti
+            {
+                host = ip,
+                addr = plc.writeAddr + 1,
+                data = num,//鍘熷厛鏄�,鍗曚釜鍐欏叆
+                port = plc.port
+            });
+
+            var tray = MongoDBSingleton.Instance.FindOne<TN_I_TASK_MST>(Query.EQ("CN_S_TASK_NO", cN_S_TASK_NO), "TN_I_TASK_MST");
+
+            var query = Query.And(Query.EQ("actionNo", "1"), Query.EQ("ext1", ip), Query.EQ("ext2", tray.CN_S_BATCH_NO));
+            var ActionControlInfo = MongoDBSingleton.Instance.FindOne<ActionControlModel>(query, "ActionControlModel");
+            if (ActionControlInfo == null)
+            {
+                MongoDBSingleton.Instance.Insert<ActionControlModel>(new ActionControlModel
+                {
+                    actionNo = "1",
+                    ext1 = ip,
+                    ext2 = tray.CN_S_BATCH_NO,
+                    ext3 = plc.port,
+                    machince = machineNo
+                }, "ActionControlModel");
+            }
+        }
+
+        /// <summary>
+        /// 鍙栬揣瀹屾垚锛岀寮�绉帮紝澶嶄綅閫氶亾锛屽苟璇诲彇璁惧閫氶亾鏁版嵁
+        /// </summary>
+        /// <param name="ip"></param>
+        /// <param name="taskNo"></param>
+        internal static void SecondWeightInCache4(string ip, string taskNo)
+        {
+            CMMLog.Info("绂诲紑澶嶇О骞冲彴锛屼换鍔″鐞嗗紑濮�);
+            var plc = Settings.GetPlcInfo().Where(a => a.deviceType == ip).FirstOrDefault();
+
+            var trayCodeTask = MongoDBSingleton.Instance.FindOne<TN_I_TASK_MST>(Query.EQ("CN_S_TASK_NO", taskNo), "TN_I_TASK_MST");
+            if (trayCodeTask != null)
+            {
+                string trayCodeNo = trayCodeTask.CN_S_BATCH_NO;
+                if (trayCodeNo != "")
+                {
+                    //var status = MongoDBSingleton.Instance.FindOne<SecondWeighState>(Query.EQ("location", GetSecondWeighBit()), "SecondWeighState");
+                    //UpdateBuilder update = Update.Set("full", 0);
+                    //if (status.ng != 2)
+                    //{
+                    //    update = Update.Set("ng", 0).Set("full", 0);
+                    //}
+                    UpdateBuilder update = Update.Set("full", 0).Set("ng", 0);
+                    CMMLog.Info($"寮�鏇存敼澶嶇О鐘舵�涓棿琛ㄧ姸鎬侊細full:0");
+                    CMMLog.Info($"涓夋ゼ鍙屽眰缂撳瓨鏋跺嵏璐т氦浜掞細trayCode:{trayCodeTask.CN_S_BATCH_NO}");
+                    if (MongoDBSingleton.Instance.Remove<MachineInfo>(Query.EQ("trayCode", trayCodeTask.CN_S_BATCH_NO), "MachineInfo", RemoveFlags.Single))
+                    {
+                        CMMLog.Info($"鍒犻櫎涓棿琛∕achineInfo鐨勬暟鎹垚鍔燂紝tray:{trayCodeTask.CN_S_BATCH_NO}");
+                    }
+                    else
+                    {
+                        CMMLog.Info($"鍒犻櫎涓棿琛∕achineInfo鐨勬暟鎹け璐ワ紝tray:{trayCodeTask.CN_S_BATCH_NO}");
+
+                    }
+                    if (ERPService.ERPSwitch01 == "0") MongoDBSingleton.Instance.Remove<MachineInfoTwo>(Query.EQ("trayCode", trayCodeTask.CN_S_BATCH_NO), "MachineInfoTwo", RemoveFlags.Single);
+                    //MongoDBSingleton.Instance.Update<TN_I_TASK_MST>(Query.EQ("CN_S_TASK_NO", taskNo), Update.Set("CN_S_BATCH_NO", trayCodeNo), UpdateFlags.None);
+                    MongoDBSingleton.Instance.Update<SecondWeighState>(Query.EQ("location", plc.location), update, "SecondWeighState", UpdateFlags.None);
+                }
+            }
+            if (plc != null)
+            {
+                var writeRes1 = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                {
+                    host = plc.ip,
+                    addr = plc.writeAddr + 3,
+                    data = 1,
+                    port = plc.port
+                });
+                CMMLog.Info($"銆愮紦瀛樻灦鍏ュ绉般�鍐欏叆閫氶亾{plc.writeAddr + 3}鐨勪俊鍙蜂负[1]");
+
+            }
+        }
+        /// <summary>
+        /// 澶嶇О骞冲彴瀹夊叏閫�嚭锛堝凡閫�嚭锛�-浜屾湡鏃犻渶鎵ц姝ゆ寚浠ゅ姩浣�+        /// </summary>
+        /// <param name="ip"></param>
+        /// <param name="cN_S_TASK_NO"></param>
+        /// <returns></returns>
+        internal static bool SecondWeightSafeComplete(string ip, string cN_S_TASK_NO)
+        {
+            var plc = Settings.GetPlcInfo().Where(a => a.ip == ip).FirstOrDefault();
+            bool result = true;
+            if(ip != "")
+            {
+                //var wirte = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                //{
+                //    addr = plc.writeAddr,
+                //    data = 0,
+                //    host = ip,
+                //    port = plc.port
+                //});
+                //CMMLog.Debug($"鍐欏叆璁惧{plc.location}閫氶亾{plc.writeAddr}閲岄潰鏁版嵁涓�.");
+                ////Console.WriteLine($"鍐欏叆璁惧{plc.location}閫氶亾{plc.writeAddr}閲岄潰鏁版嵁涓�.");
+                //var wirte1 = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                //{
+                //    addr = plc.writeAddr + 1,
+                //    data = 0,
+                //    host = ip,
+                //    port = plc.port
+                //});
+                //CMMLog.Debug($"鍐欏叆璁惧{plc.location}閫氶亾{plc.writeAddr + 1}閲岄潰鏁版嵁涓�.");
+                ////Console.WriteLine($"鍐欏叆璁惧{plc.location}閫氶亾{plc.writeAddr + 1}閲岄潰鏁版嵁涓�.");
+                result = true;
+            }
+            else
+            {
+                CMMLog.Debug($"鍖呰涓嬬嚎锛�锛宨p=null!");
+            }
+            return result;
+        }
+
+        internal static void SecondWeightActionOne(ActionControlModel model)
+        {
+            var plc = Settings.GetPlcInfo().Where(a => a.ip == model.ext1 && a.port == model.ext3).FirstOrDefault();
+
+            if (plc != null)
+            {
+                bool req = false;
+                var result = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                {
+                    dataNum = 28,
+                    addr = plc.readAddr + 1,
+                    host = plc.ip,
+                    port = plc.port
+                });
+                CMMLog.Info("SecondWeightActionOne----" + JsonConvert.SerializeObject(result) + $"{result.result.Length}");
+                if(result.result.Length > 0)
+                {
+                    CMMLog.Debug($"璇诲彇璁惧{plc.location},ip:{plc.ip}閫氶亾{plc.readAddr + 1}閲岄潰鏁版嵁涓簕result.result[2]}.");
+                    MongoDBSingleton.Instance.Update<MachineInfo>(Query.EQ("trayCode", model.ext2), Update.Set("secondNg", result.result[2]), UpdateFlags.None);
+                    //鑾峰彇浠庡绉板钩鍙拌鍑虹殑 鏃堕棿鎴筹紝骞惰浆鎹㈠鐞嗕负 string 瀛楃涓�+                    string timeStamp = Convert.ToInt32(Completion(result.result[25]) + Completion(result.result[26]), 2).ToString();
+                    string wmstaskno = "";
+                    string traycode = "";
+                    CMMLog.Info($"SecondWeightActionOne:readData:{JsonConvert.SerializeObject(result.result)},timeStamp:{timeStamp}");
+
+                    if (result.result[0] == 3)
+                    {
+                        int[] num = new int[1] { 0 };
+                        var writeRes0 = OITcpHelper.RegisterWriteOutPutMulti(new OITcpHelper.RegisterWriteOutPutModelMulti
+                        {
+                            host = plc.ip,
+                            addr = plc.writeAddr + 1,
+                            data = num,//鍘熷厛鏄�,鍗曚釜鍐欏叆
+                            port = plc.port
+                        });
+                    }
+
+                    if (result.result[0] == 3 && result.result[2] == 1)
+                    {
+                        CMMLog.Debug($"鍑嗗鐢熸垚澶嶇О鍏ョ紦瀛樻灦浠诲姟锛屽紑濮嬬‘瀹氭墭鐩樺彿:{model.ext2}");
+
+                        //鏇存柊澶嶇О骞冲彴鐨勬暟鎹埌涓棿琛�+                        var trayCode = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                        {
+                            addr = plc.readAddr + 8,
+                            dataNum = 12,//鏁版嵁涓暟瑕佸鍔�+                            host = plc.ip,
+                            port = plc.port
+                        });
+                        if (trayCode.errCode == 0 && trayCode.result.Length == 12)
+                        {
+                            //鑾峰彇澶嶇ОOK鏁版嵁瀛樺叆MachineInfo琛�+                            GetOKWeight(trayCode.result, model.ext2);
+                        }
+                        else
+                        {
+                            CMMLog.Debug($"澶嶇ОOK娴佺▼锛氳鍙栧绉板钩鍙伴噸閲忛敊璇紒trayCode.errCode:{trayCode.errCode},trayCode.result.Length:{trayCode.result.Length}");
+                            //Console.WriteLine($"澶嶇ОOK娴佺▼锛氳鍙栧绉板钩鍙伴噸閲忛敊璇紒trayCode.errCode:{trayCode.errCode},trayCode.result.Length:{trayCode.result.Length}");
+                        }
+                        //req = WMSHelper.WMSIn(plc.location, model.ext2, ref wmstaskno, ref traycode, timeStamp);
+                        req = WMSHelper.WMSIn(plc.location, model.ext2, ref wmstaskno, ref traycode);
+
+                        //ERPService.updatePackageInfo(model.machince, model.ext2, result.result);
+
+                        if (req)
+                        {
+                            var queryList = MongoDBSingleton.Instance.Find<packageInfoModel>(Query.And(Query.EQ("machineNo", model.machince), Query.EQ("trayCode", model.ext2), Query.EQ("weight2", "")), "packageInfoModel");
+                            if (queryList.Count > 0)
+                            {
+                                packageInfoModel query = queryList.OrderByDescending(a => a.time).First();
+                                if (query != null)
+                                {
+                                    CMMLog.Debug($"machine:{query.machineNo},trayCode:{query.trayCode},weight:{query.weight}");
+                                    //璇诲彇澶嶇О骞冲彴鐨勯噸閲�+                                    double x = (double)Convert.ToInt32(Completion(result.result[0]) + Completion(result.result[1]), 2) / 100;
+                                    //double x = (double)Convert.ToInt32(Completion(result[8]) + Completion(result[9]), 2) / 100;
+                                    string weight = x.ToString();
+                                    CMMLog.Debug($"璇诲彇璁惧{plc.location},ip:{plc.ip}閫氶亾{plc.readAddr + 8}閲岄潰鏁版嵁涓簕result.result[0]}.");
+                                    CMMLog.Debug($"璇诲彇璁惧{plc.location},ip:{plc.ip}閫氶亾{plc.readAddr + 9}閲岄潰鏁版嵁涓簕result.result[1]}.");
+                                    CMMLog.Debug($"weight:{weight}");
+
+                                    //閲嶉噺宸�
+                                    string weightDifference = Math.Round((double.Parse(query.weight) - x), 2).ToString();
+
+                                    //灏嗗绉板钩鍙伴噸閲忓啓鍏ヤ腑闂磋〃
+                                    MongoDBSingleton.Instance.Update<packageInfoModel>(Query.And(Query.EQ("machineNo", model.machince), Query.EQ("time", query.time), Query.EQ("trayCode", query.trayCode), Query.EQ("weight2", "")), Update.Set("weight2", weight).Set("weightDifference", weightDifference), UpdateFlags.None);
+
+                                }
+                                else CMMLog.Debug($"鏁版嵁鏌ヨ澶辫触");
+                            }
+                            else CMMLog.Debug($"packageInfoModel鏈壘鍒版暟鎹紝machineNo:{model.machince},trayCode:{model.ext2}");
+
+                            var wirte = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                            {
+                                addr = plc.writeAddr + 3,
+                                host = plc.ip,
+                                port = plc.port,
+                                data = 1
+                            });
+
+                            CMMLog.Debug($"澶嶇О浠诲姟浠诲姟鐢熸垚瀹屾垚锛宨p:{plc.ip},绔彛:{plc.port},鍐欏叆閫氶亾{plc.writeAddr + 3} 鐨勫�涓�");
+
+                            //澶嶇О鍚堟牸锛屾洿鏂拌〃鏁版嵁
+                            var proInfo = MongoDBSingleton.Instance.FindOne<ProductList>(Query.And(Query.EQ("Date", DateTime.Now.ToString("yyyy-MM-dd")), Query.EQ("machine", model.machince)), "ProductList");
+                            if (proInfo != null)
+                            {
+                                proInfo.qualifiedQuantity = proInfo.qualifiedQuantity + 1;
+                                proInfo.percentOfPass = Math.Round(((proInfo.qualifiedQuantity / proInfo.total) * 100), 2);
+                                MongoDBSingleton.Instance.Update<ProductList>(Query.And(Query.EQ("Date", DateTime.Now.ToString("yyyy-MM-dd")), Query.EQ("machine", model.machince)), Update.Set("percentOfPass", proInfo.percentOfPass).Set("qualifiedQuantity", proInfo.qualifiedQuantity), UpdateFlags.None);
+                            }
+                        }
+
+                    }
+                    if (result.result[2] == 2)
+                    {
+                        CMMLog.Debug($"鍑嗗鐢熸垚澶嶇О鍏ョ紦瀛樻灦NG浠诲姟锛屽紑濮嬬‘瀹氭墭鐩樺彿:{model.ext2}");
+
+                        //澶嶇О骞冲彴澶嶇О璐х墿NG鈥斺�杩涘叆NG澶嶇О娴佺▼  璋冪敤WMS鎺ュ彛鍒嗛厤璐ф灦搴撲綅
+                        //TSHelper.GoToAGV(cN_S_TASK_NO, 10, 6);
+                        req = WMSHelper.WMSIn(plc.location, model.ext2, ref wmstaskno, ref traycode, timeStamp);
+                        //req = WMSHelper.WMSIn(plc.location, model.ext2, ref wmstaskno, ref traycode);
+                        if (req)
+                        {
+                            var wirte = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                            {
+                                addr = plc.writeAddr + 3,
+                                host = plc.ip,
+                                port = plc.port,
+                                data = 1
+                            });
+                            CMMLog.Debug($"澶嶇О鍏ョ紦瀛樻灦NG娴佺▼锛歐MS鐢熸垚浠诲姟鎴愬姛锛�);
+
+                            //鏇存柊澶嶇О骞冲彴鐨勬暟鎹埌涓棿琛�+                            var trayCode = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                            {
+                                addr = plc.readAddr + 8,
+                                dataNum = 2,//鏁版嵁涓暟瑕佸鍔�+                                host = plc.ip,
+                                port = plc.port
+                            });
+                            if (trayCode.errCode == 0 && trayCode.result.Length == 2)
+                            {
+                                var queryList = MongoDBSingleton.Instance.Find<packageInfoModel>(Query.And(Query.EQ("machineNo", model.machince), Query.EQ("trayCode", model.ext2), Query.EQ("weight2", "")), "packageInfoModel");
+                                if (queryList.Count > 0)
+                                {
+                                    packageInfoModel query = queryList.OrderByDescending(a => a.time).First();
+                                    if (query != null)
+                                    {
+                                        CMMLog.Debug($"machine:{query.machineNo},trayCode:{query.trayCode},weight:{query.weight}");
+                                        //璇诲彇澶嶇О骞冲彴鐨勯噸閲�+                                        double x = (double)Convert.ToInt32(Completion(trayCode.result[0]) + Completion(trayCode.result[1]), 2) / 100;
+                                        //double x = (double)Convert.ToInt32(Completion(result[8]) + Completion(result[9]), 2) / 100;
+                                        string weight = x.ToString();
+                                        CMMLog.Debug($"璇诲彇璁惧{plc.location},ip:{plc.ip}閫氶亾{plc.readAddr + 8}閲岄潰鏁版嵁涓簕trayCode.result[0]}.");
+                                        CMMLog.Debug($"璇诲彇璁惧{plc.location},ip:{plc.ip}閫氶亾{plc.readAddr + 9}閲岄潰鏁版嵁涓簕trayCode.result[1]}.");
+                                        CMMLog.Debug($"weight:{weight}");
+
+                                        //閲嶉噺宸�
+                                        string weightDifference = Math.Round((double.Parse(query.weight) - x), 2).ToString();
+
+                                        //灏嗗绉板钩鍙伴噸閲忓啓鍏ヤ腑闂磋〃
+                                        MongoDBSingleton.Instance.Update<packageInfoModel>(Query.And(Query.EQ("machineNo", model.machince), Query.EQ("time", query.time), Query.EQ("trayCode", query.trayCode), Query.EQ("weight2", "")), Update.Set("weight2", weight).Set("weightDifference", weightDifference), UpdateFlags.None);
+                                    }
+                                    else CMMLog.Debug($"鏁版嵁鏌ヨ澶辫触");
+                                }
+                                else CMMLog.Debug($"packageInfoModel鏈壘鍒版暟鎹紝machineNo:{model.machince},trayCode:{model.ext2}");
+                            }
+                        }
+                        else CMMLog.Debug($"澶嶇О鍏ョ紦瀛樻灦NG娴佺▼锛歐MS鐢熸垚浠诲姟澶辫触锛�);
+                    }
+                    string PlcBit02 = Settings.GetPlcInfo().Where(a => a.deviceType == "2").FirstOrDefault().location;
+                    UpdateBuilder update = Update.Set("ng", result.result[2]);
+                    if (MongoDBSingleton.Instance.Update<SecondWeighState>(Query.EQ("location", PlcBit02), update, "SecondWeighState", UpdateFlags.None))
+                    {
+                        CMMLog.Debug($"涓棿琛⊿econdWeighState鏁版嵁鎻掑叆鎴愬姛锛宭ocation锛歿PlcBit02}");
+                    }
+                    if (req)
+                    {
+                        if (MongoDBSingleton.Instance.Remove<ActionControlModel>(Query.EQ("_id", model._id), "ActionControlModel", RemoveFlags.Single))
+                        {
+                            CMMLog.Debug($"涓棿琛ˋctionControlModel鏁版嵁鍒犻櫎鎴愬姛锛宨d:{model._id}");
+                        }
+                    }
+                }
+            }
+            else CMMLog.Debug($"澶嶇О骞冲彴鏈厤缃紝ip锛歿model.ext1}锛岀鍙o細{model.ext3}");
+        }
+
+        
+        private static void GetOKWeight(int[] result, string ItemCode)
+        {
+            var info = MongoDBSingleton.Instance.FindOne<MachineInfo>(Query.EQ("trayCode", ItemCode), "MachineInfo");
+            if (info != null)
+            {
+                CMMLog.Info($"浠庡寘瑁呮満鑾峰彇鐨勭墿鏂欓噸閲忥細{info.oneTrayWeight}");
+                var newWeight = Convert.ToInt32(Completion(result[10]) + Completion(result[11]), 2).ToString();
+                //鏇存柊鏁版嵁
+                CMMLog.Info($"浠庡绉板钩鍙拌幏鍙栫殑鐗╂枡閲嶉噺锛歿newWeight}");
+
+                UpdateBuilder update = Update.Set("oneTrayWeight", newWeight);
+                MongoDBSingleton.Instance.Update<MachineInfo>(Query.EQ("trayCode", ItemCode), update, "MachineInfo", UpdateFlags.None);
+
+                //MongoDBSingleton.Instance.Update<MachineInfo>(Query.EQ("trayCode", ItemCode), Update.Set("oneTrayWeight", info.oneTrayWeight), "MachineInfo", UpdateFlags.None);
+                CMMLog.Info("澶嶇ОOK鐨勯噸閲忔洿鏂板埌涓棿琛∕achineInfo");
+            }
+
+            var infoTwo = MongoDBSingleton.Instance.FindOne<MachineInfoTwo>(Query.EQ("trayCode", ItemCode), "MachineInfo");
+            if (infoTwo != null)
+            {
+                //var newWeight = (Convert.ToInt32(Completion(result[0]) + Completion(result[1]), 2) / 100).ToString();
+                var newWeight = result[0] + "," + result[1];
+                //鏇存柊鏁版嵁
+                CMMLog.Info($"浠庡绉板钩鍙拌幏鍙栫殑鐗╂枡閲嶉噺锛歿newWeight}");
+
+                UpdateBuilder update = Update.Set("oneTrayWeightFC", newWeight);
+                MongoDBSingleton.Instance.Update<MachineInfoTwo>(Query.EQ("trayCode", ItemCode), update, "MachineInfoTwo", UpdateFlags.None);
+
+                CMMLog.Info("澶嶇О姣涢噸鏇存柊鍒颁腑闂磋〃MachineInfoTwo");
+            }
+        }
+
+
+        #endregion
+
+        #endregion
+
+        #region   3妤煎弻灞傜紦瀛樿揣鏋跺埌涓夋ゼ鍙犳墭鍙b�鈥旈渶鍥炴姤WMS浠诲姟鐘舵�鈥斺�3妤肩紦瀛樻灦鍏ュ彔鎵樷�鈥斿崐瀹屾垚锛堝緟娴嬭瘯锛�+
+        /// <summary>
+        /// 鍒ゆ柇涓夋ゼ鍙犳墭鍙f槸鍚︽湁鍏佽涓婃枡璇锋眰锛堥�閬�鍙傛暟1锛夛紝鏈夊氨璋僕MS鐢熸垚缂撳瓨鏋跺埌鍙犳墭鍙d换鍔�+        /// </summary>
+        /// <param name="pmInfo"></param>
+        internal static void CacheStackingMouth(Settings.PlcInfo pmInfo)
+        {
+            //闇�璁剧疆鏃堕棿寤惰繜
+            try
+            {
+                //璇诲彇閫氶亾1閲岄潰鍙傛暟鏄惁涓�锛屽垽鏂彔鐩樻満鏄惁闇�涓婃枡
+                var result = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                {
+                    dataNum = 1,
+                    addr = pmInfo.readAddr + 1,
+                    host = pmInfo.ip,
+                    port = pmInfo.port
+                });
+                if (result != null && result.errCode == 0)
+                {
+                    //鍙傛暟1琛ㄧず鍙犳墭鐐圭敵璇峰叆鏂�+                    if (result.result[0] == 1)
+                    {
+                        //var tasks = MongoDBSingleton.Instance.Find<TN_I_TASK_MST>(Query.EQ("CN_S_END_BIT", pmInfo.location), "TN_I_TASK_MST");
+                        var tasks = MongoDBSingleton.Instance.Find<elevatorTask>(Query.EQ("S_END_LOC", pmInfo.location), "elevatorTask");
+                        //鍒ゆ柇涓�笅褰撳墠鍙犳墭鐐规槸鍚︽湁浠诲姟鍗犵敤
+                        if (ProcessHelper.CheckEndFree(pmInfo.location) && tasks.Count == 0)
+                        {
+                            //鍙互鐢熸垚浠诲姟锛岃皟WMS鎺ュ彛鑾峰彇浠诲姟淇℃伅
+                            bool req = WMSHelper.WMSOut(pmInfo.location, "");
+                            if (req) CMMLog.Debug($"璋冪敤WMS鑾峰彇纰熺洏鍑哄簱鐢熸垚浠诲姟鎴愬姛锛�);//鐜板湪浠诲姟鐢盬MS鑷繁涓嬪彂锛孉MS鍋氭嫤鎴鐞嗭紙鏌ヨext1閲岄潰瀵瑰簲鐨勪换鍔$被鍨嬶紝骞舵洿鏀逛换鍔$被鍨嬶級
+                            else CMMLog.Debug($"璋冪敤WMS鑾峰彇纰熺洏鍑哄簱鐢熸垚浠诲姟澶辫触锛�);
+                        }
+                        else CMMLog.Debug($"妫�煡褰撳墠鍙犳墭鐐规槸鍚︽湁浠诲姟鍗犵敤锛屾垨鑰卐levatorTask琛ㄤ腑鏈夌紦瀛樻灦鍏ュ彔鐩樻満鐨勪换鍔★紒");
+                    }
+                }
+                else CMMLog.Debug($"缂撳瓨鍏ュ彔鐩樻満锛屽垱寤轰换鍔★紝result={result.errMsg}");
+            }
+            catch (Exception ex)
+            {
+                CMMLog.Error(ex.Message, ex);
+            }
+        }
+
+        #region   涓夋ゼ鍙犳墭鏈轰氦浜�+
+        /// <summary>
+        /// 璇锋眰杩涘叆涓夋ゼ鍙犳墭鏈�+        /// </summary>
+        /// <param name="ip"></param>
+        /// <param name="taskNo"></param>
+        internal static void CacheStackingMouth1013(string ip,string taskNo, string CN_S_END_BIT)
+        {
+            CMMLog.Info("銆愮數姊紑闂ㄣ�鍙犵洏鏈轰换鍔¤姹傝繘鍏ョ數姊紝淇″彿1013");
+            var plc = Settings.GetPlcInfo().Where(a => a.deviceType == ip).FirstOrDefault();
+            if(plc != null)
+            {
+                var readres = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                {
+                    dataNum = 1,
+                    addr = plc.readAddr + 1,
+                    host = plc.ip,
+                    port = plc.port
+                });
+                CMMLog.Info($"銆愮數姊紑闂ㄣ�璇诲彇閫氶亾{plc.readAddr + 1}鐨勪俊鍙蜂负[{JsonConvert.SerializeObject(readres)}]");
+                if (readres.result[0] != 2)
+                {
+                    var wirte = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                    {
+                        addr = plc.writeAddr + 1,
+                        host = plc.ip,
+                        port = plc.port,
+                        data = 1
+                    });
+                    CMMLog.Info($"銆愮數姊紑闂ㄣ�鍐欏叆閫氶亾{plc.writeAddr + 1}鐨勪俊鍙蜂负[1]");
+                }
+                else
+                {
+                    TSHelper.GoToAGV(taskNo, 10, 3);
+                    var wirte = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                    {
+                        addr = plc.writeAddr + 1,
+                        host = plc.ip,
+                        port = plc.port,
+                        data = 2
+                    });
+                    CMMLog.Info($"銆愮數姊紑闂ㄣ�鍐欏叆閫氶亾{plc.writeAddr + 1}鐨勪俊鍙蜂负[2]");
+                }
+            }
+            else CMMLog.Debug($"缂撳瓨鍏ュ彔鐩樻満锛�013锛宲lc=null!");
+        }
+
+        /// <summary>
+        /// 涓夋ゼ鍙犳墭鏈烘壂鐮�+        /// </summary>
+        /// <param name="ip"></param>
+        /// <param name="taskNo"></param>
+        internal static void CacheStackingMouth1313(string dev, TN_I_TASK_MST mst)
+        {
+            CMMLog.Info($"銆愬彔鍖呭叆鍙c�浠诲姟娴佺▼澶勭悊寮�------------");
+            var plc = Settings.GetPlcInfo().Where(a => a.deviceType == dev).FirstOrDefault();
+            if(plc != null)
+            {
+                var readres = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                {
+                    dataNum = 2,
+                    addr = plc.readAddr + 1,
+                    host = plc.ip,
+                    port = plc.port
+                });
+                if(readres != null)
+                {
+                    var eleInfo = MongoDBSingleton.Instance.FindOne<elevatorTask>(Query.And(Query.EQ("S_DT_LOC", mst.CN_S_START_BIT),Query.EQ("S_USE", "1")), "elevatorTask");
+                    if(eleInfo != null)
+                    {
+                        var taskInfo = eleInfo.task_mst;
+                        CMMLog.Info($"銆愬彔鍖呭叆鍙c�璇诲彇閫氶亾{plc.readAddr + 1}鐨勪俊鍙蜂负[{readres.result[0]}],鏀跺埌閫氶亾{plc.readAddr + 2}鐨勪俊鍙蜂负[{readres.result[1]}]");
+                        if (readres.result[0] == 3)
+                        {
+                            if (readres.result[1] == 1)
+                            {
+                                CMMLog.Info($"璇荤爜淇℃伅姣斿缁撴灉锛氭潯鐮佷笌浼犻�鐨勬暟鎹竴鑷�);
+                                //璇荤爜淇℃伅姣斿缁撴灉锛歄K           璇诲埌閫氶亾2鍙傛暟涓�鏃�灏忚溅灏嗘墭鐩樻斁缃湪鍙犵洏鏈轰笂锛堟敼鍙傛暟10涓�锛�+                                var wirte = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                                {
+                                    addr = plc.writeAddr + 1,
+                                    host = plc.ip,
+                                    data = 3,//4
+                                    port = plc.port
+                                });
+                                CMMLog.Info($"銆愬彔鍖呭叆鍙c�鍐欏叆閫氶亾{plc.writeAddr + 1}鐨勪俊鍙蜂负{3}锛岃繑鍥炲�锛歿wirte.errCode}");
+                                if (wirte.errCode == 0)
+                                {
+                                    //骞跺垹闄MSInfo涓棿琛ㄤ腑瀵瑰簲鎵樼洏鍙风殑鏁版嵁锛堜篃鍙湪灏忚溅绂诲紑鍙犵洏鏈轰箣鍚庡垹闄わ紝鏆傚畾閫氶亾2鍙傛暟1锛�+                                    CMMLog.Info($"璇荤爜淇℃伅姣斿缁撴灉锛歄K ,骞跺垹闄MSInfo涓棿琛ㄤ腑瀵瑰簲鎵樼洏鍙风殑鏁版嵁");
+                                    MongoDBSingleton.Instance.Remove<WMSInfo>(Query.EQ("trayCode", taskInfo.CN_S_BATCH_NO), RemoveFlags.Single);
+                                    TSHelper.GoToAGV(mst.CN_S_TASK_NO, 10, 7);
+                                }
+                                //閫氶亾鍐欏叆4锛宱k娴佺▼鍙互鐩存帴鍐欙紝ng娴佺▼闇�绛夊埌灏忚溅鍙栬揣瀹屼箣鍚庡啓鍏ワ紙娉細璇ユ祦绋嬫祴璇曢�杩囷紝鏆傛椂鍙互涓嶆敼锛岀幇鍦哄嚭鐜伴棶棰樺湪鏇存敼锛�+                                PLCControl.CacheStackingMouth6(plc);
+                            }
+                            else if (readres.result[1] == 2)
+                            {
+                                CMMLog.Info($"璇荤爜淇℃伅姣斿缁撴灉锛氭潯鐮佷笌浼犻�鐨勬暟鎹笉涓�嚧");
+                                //浜屾湡--璋冪敤 WMS 鏀归亾鎺ュ彛 鑾峰彇 鐩爣鐐逛綅锛屽苟 鏇存敼 AGV 绔欑偣
+                                string ChangeBit = WMSHelper.WmsUpdateWay(taskInfo.CN_S_SOURCE_NO, plc.Extend);
+                                if (!string.IsNullOrEmpty(ChangeBit))
+                                {
+                                    CMMLog.Info($"璧风偣锛歿taskInfo.CN_S_END_BIT}");
+                                    CMMLog.Info($"缁堢偣锛歿ChangeBit}");
+                                    int[] parms = { StockInstance.Instance.GetAGVCodeForBitCode(taskInfo.CN_S_END_BIT), StockInstance.Instance.GetAGVCodeForBitCode(ChangeBit) };
+                                    //TSHelper.ChangeParam(taskNo, 1, StockInstance.Instance.GetAGVCodeForBitCode(taskInfo.CN_S_END_BIT));
+                                    //TSHelper.ChangeParam(taskNo, 2, StockInstance.Instance.GetAGVCodeForBitCode(ChangeBit));
+                                    TSHelper.ChangeParam(mst.CN_S_TASK_NO, 1, parms);
+                                    TSHelper.GoToAGV(mst.CN_S_TASK_NO, 3, 1);
+                                    TSHelper.GoToAGV(mst.CN_S_TASK_NO, 10, 8);
+
+                                    MongoDBSingleton.Instance.Update<TN_I_TASK_MST>(Query.EQ("CN_S_TASK_NO", mst.CN_S_TASK_NO), Update.Set("CN_S_END_BIT", ChangeBit).Set("CN_S_START_BIT", taskInfo.CN_S_END_BIT), "TN_I_TASK_MST", UpdateFlags.None);
+
+                                    MongoDBSingleton.Instance.Remove<WMSInfo>(Query.EQ("trayCode", taskInfo.CN_S_BATCH_NO), RemoveFlags.Single);
+
+                                }
+                                else CMMLog.Debug($"璋冪敤WMS鏀归亾鎺ュ彛锛屾湭鑾峰彇鍒板彲鐢ㄧ偣浣嶃�");
+                                //Console.WriteLine($"璇荤爜淇℃伅姣斿缁撴灉锛氭潯鐮佷笌浼犻�鐨勬暟鎹笉涓�嚧");
+                            }
+                        }
+                    }
+
+                    
+                }
+            }
+            CMMLog.Info($"銆愬彔鍖呭叆鍙c�浠诲姟娴佺▼澶勭悊缁撴潫------------");
+        }
+
+        /// <summary>
+        /// 鍗歌揣绂诲紑涓夋ゼ鍙犳墭鏈�-浜屾湡锛氶渶瑕佸拰TS瀵规帴锛岃灏忚溅 鍗歌揣瀹屾垚绛夊埌 灏忚溅绂诲紑涔嬪悗鍐嶅彂閫�+        /// </summary>
+        /// <param name="ip"></param>
+        internal static bool CacheStackingMouth6(Settings.PlcInfo plc)
+        {
+            bool result = false;
+            var wirte = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+            {
+                addr = plc.writeAddr + 1,
+                data = 4,
+                host = plc.ip,
+                port = plc.port
+            });
+            if (wirte.errCode == 0) result = true;
+            return result;
+        }
+        #endregion
+
+        #endregion
+
+        #region   3妤煎寘瑁呮満绌烘墭琛ョ粰3妤煎寘瑁呮満娴佺▼鈥斺�鏃犻渶鍥炴姤WMS浠诲姟鐘舵�鈥斺�3妤煎寘瑁呰ˉ绌衡�鈥斿凡瀹屾垚(寰呮祴璇�
+
+        /// <summary>
+        /// 3妤煎寘瑁呮満琛ョ┖鎵樻祦绋嬧�鈥斾换鍔″紑濮嬪墠锛屽垽鏂寘瑁呮満鏈夋病鏈変笅绾夸俊鍙凤紝骞跺垽鏂綋鍓嶅寘瑁呮満瀵瑰簲鐨勫湴鍫嗕綅鏄惁鏈変换鍔″崰鐢�+        /// </summary>
+        /// <param name="pmInfo"></param>
+        internal static void PickUpBlank(Settings.PlcInfo pmInfo)
+        {            /* 鍖呰琛ョ┖娴佺▼锛�+             * 鍏堝垽鏂寘瑁呮満鏄惁鏈変换鍔″崰鐢紝鑻ユ棤浠诲姟鍗犵敤鍒欏垽鏂槸鍚﹂渶瑕佽ˉ绌烘墭
+             * 鍒ゆ柇璧风偣鏄惁鏈変换鍔″崰鐢�+             * **/
+
+            //鍖呰琛ョ┖缂洪櫡锛屽悓鏃朵細鏈変袱涓┖鎵樼偣琛ヤ竴涓寘瑁呮満
+
+            try
+            {
+                if (ProcessHelper.PickUpEndFree(pmInfo.location))
+                {
+                    //璇诲彇杈撳叆瀵勫瓨鍣ㄨ繕鏄緭鍑哄瘎瀛樺櫒寰呭畾,璇诲彇閫氶亾0鐨勬暟鎹�+                    var result = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                    {
+                        dataNum = 1,
+                        addr = pmInfo.readAddr,
+                        host = pmInfo.ip,
+                        port = pmInfo.port
+                    });
+
+                    CMMLog.Info($"鍖呰鏈鸿ˉ绌烘墭娴佺▼锛氬寘瑁呮満鍙凤細{pmInfo.location},鍒ゆ柇鍖呰鏈洪�閬搟pmInfo.readAddr}鍊间负{JsonConvert.SerializeObject(result)},ip:{pmInfo.ip}");
+                    if (result.result.Count() > 0)
+                    {
+                        if (result != null && result.errCode == 0)
+                        {
+                            //1锛氬彇鏂欙紱3锛氫汉宸ュ彨绌烘墭鐩�+                            if (result.result[0] == 3)
+                            {
+                                //鍖呰绾胯ˉ绌烘祦绋�+                                //鍒ゆ柇绌烘墭缂撳瓨鐐癸紙5 瀵�2锛夋槸鍚︽湁绌烘墭锛屾湁绌烘墭鍒ゆ柇鏄惁鏈変换鍔★紝鏈変换鍔″垯鍒ゆ柇鍙︿竴涓偣浣�+                                var locInfo = Settings.GetAGVLocationList().Where(b => b.machineLoc.Contains(pmInfo.location) && b.Enabel == 1).First();
+                                if (locInfo != null)
+                                {
+                                    CMMLog.Info($"鍖呰鏈虹偣浣嶏細{pmInfo.location}");
+                                    foreach (var a in locInfo.ddLoc)
+                                    {
+                                        if (ProcessHelper.PickUpEndFree(pmInfo.location) && ProcessHelper.PickUpStartFree(a))
+                                        {
+                                            var empInfo = MongoDBSingleton.Instance.FindOne<BZEmptyPoint>(Query.EQ("Bit", a), "BZEmptyPoint");
+                                            if (empInfo != null && empInfo.Quantity > 0)
+                                            {
+                                                CMMLog.Info($"鍖呰绾胯ˉ绌轰换鍔★紝鍖呰鏈虹偣浣嶏細{pmInfo.location}锛屽懆杞墭鐩樹綅锛歿a}锛屽懆杞墭鐩樹綅鏁伴噺锛歿empInfo.Quantity}");
+                                                HHAmsExecuteResult amsResult = AMSHelper.CreateTask(DateTime.Now.Ticks.ToString(), a, pmInfo.location, "PackagingMachineFillsEmptyPallet", 0, "");
+                                                if (amsResult.success)
+                                                {
+                                                    CMMLog.Info($"鍖呰绾胯ˉ绌轰换鍔$敓鎴愭垚鍔�);
+                                                    break;
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                                else
+                                {
+                                    CMMLog.Info("閰嶇疆鏂囦欢鏈厤缃寘瑁呮満绌烘墭缂撳瓨鐐�);
+                                }
+                            }
+                        }
+                        else
+                        {
+                            CMMLog.Info($"err  鍖呰鏈洪�閬搟pmInfo.readAddr}  ip:{pmInfo.ip}");
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                CMMLog.Error(ex.Message, ex);
+            }
+        }
+
+        static object PickUpBlankCompleteLock = new object();
+
+        /// <summary>
+        /// 鍖呰琛ョ┖浠诲姟瀹屾垚--澶嶄綅 鏀跺埌涓婄┖淇″彿 涓�0
+        /// </summary>
+        /// <param name="PlcBitCache01"></param>
+        internal static void PickUpBlankComplete(string PlcBitCache01,string Extend = "")
+        {
+            lock (PickUpBlankCompleteLock)
+            {
+                CMMLog.Info("鍖呰绾胯ˉ绌烘祦绋嬩换鍔″鐞�);
+                try
+                {
+                    if (Extend != "")
+                    {
+                        CMMLog.Info($"褰撳墠鍛ㄨ浆鎵樼洏浣�{Extend}");
+                        int addr = 0;
+                        int qun = 0;
+                        //淇敼涓棿琛ㄧ殑鍊硷紝鑻ヤ腑闂磋〃鐨勬暟閲忎负0锛屽垯璋冪敤瑙g粦鏂规硶
+                        var bzEmp = MongoDBSingleton.Instance.FindOne<BZEmptyPoint>(Query.EQ("Bit", Extend), "BZEmptyPoint");
+                        if (bzEmp != null)
+                        {
+                            CMMLog.Info($"褰撳墠璐т綅鐨勬暟閲�{bzEmp.Quantity}");
+                            if (bzEmp.Quantity == 1)
+                            {
+                                CMMLog.Info($"璋冪敤瑙g粦鎺ュ彛");
+                                //瑙g粦
+                                if (WMSHelper.WMSEmptyUnbind(Extend))
+                                {
+                                    //鍒犻櫎涓棿琛ㄦ暟鎹�+                                    MongoDBSingleton.Instance.Remove<BZEmptyPoint>(Query.EQ("Bit", Extend), RemoveFlags.Single);
+                                }
+                            }
+                            else
+                            {
+                                var quantity = bzEmp.Quantity - 1;
+                                var updateBuider = Update.Set("Quantity", quantity);
+                                MongoDBSingleton.Instance.Update<BZEmptyPoint>(Query.EQ("Bit", Extend), updateBuider, UpdateFlags.None);
+                                CMMLog.Info($"鍑忓幓褰撳墠鍛ㄨ浆鎵樼洏浣嶆暟閲忎箣鍚庯紝鏁伴噺涓猴細{quantity}");
+                                qun = quantity;
+                            }
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    CMMLog.Error($"PickUpBlankComplete Error:" + ex.Message);
+                }
+            }
+        }
+
+        #endregion
+
+        #region   3妤艰ˉ缁欐垚鍝佺┖鎵樺尯鍒�妤兼媶鐩樻満娴佺▼鈥斺�闇�洖鎶MS浠诲姟鐘舵�鈥斺�3妤兼媶鐩樿ˉ绌衡�鈥斿凡瀹屾垚(寰呮祴璇�
+
+        /// <summary>
+        /// 绾跨▼寰幆鏌ヨ鎷嗙洏鏈烘槸鍚﹂渶瑕佽ˉ绌烘墭
+        /// </summary>
+        /// <param name="plc"></param>
+        internal static void CheckPackingLineEmpty(Settings.PlcInfo plc)
+        {
+            //璇籶lc淇″彿锛岀湅鏈夋病鏈夊彨鏂欒姹傦紝鍒ゆ柇鏄惁宸茬粡鏈変换鍔�+            //娌℃湁浠诲姟锛岃皟WMS鐢熸垚绌烘墭琛ュ厖浠诲姟
+            try
+            {
+                //RegisterReadInPut 璇诲彇杈撳叆瀵勫瓨鍣ㄨ繕鏄緭鍑哄瘎瀛樺櫒寰呭畾,璇诲彇閫氶亾1鐨勬暟鎹�+                var result = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                {
+                    dataNum = 1,
+                    addr = plc.readAddr+1,
+                    host = plc.ip,
+                    port = plc.port
+                });
+                if (result != null && result.errCode == 0)
+                {
+                    //1.琛ョ┖鎵樼洏
+                    if (result.result[0] == 1)
+                    {
+                        //鍒ゆ柇3妤兼媶鐩樻満锛堣ˉ绌烘墭鐩樼偣浣嶏級缁堢偣鏄惁鏈変换鍔″崰鐢紝娌℃湁鍒欑敓鎴愪换鍔�+                        if (ProcessHelper.CheckEndFree(plc.location))
+                        {
+                            string wmstaskno = "";
+                            string traycode = "";
+                            bool req = WMSHelper.WMSEmptyOut(plc.location, "", ref wmstaskno, ref traycode);
+                            if (req) CMMLog.Debug($"璋冪敤WMS鑾峰彇涓夋ゼ鎷嗙洏鏈虹敓鎴愪换鍔℃垚鍔燂紒");
+                            else CMMLog.Debug($"璋冪敤WMS鑾峰彇涓夋ゼ鎷嗙洏鏈虹敓鎴愪换鍔″け璐ワ紒");
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                CMMLog.Error(ex.Message, ex);
+            }
+        }
+
+        #region   鎷嗙洏鏈轰氦浜�+
+        /// 灏忚溅璇锋眰鍑烘枡	1	AMS鍐欙紝PLC璇�1-璇锋眰鍑烘枡锛�-鍑烘枡杩涜涓紱3-鍔ㄤ綔瀹屾垚
+        /// 璁惧鍏佽杩涙枡	1	PLC鍐欙紝AMS璇�1-鍏佽杩涙枡锛�-杩涙枡杩涜涓紱3-鍔ㄤ綔瀹屾垚
+        /// <summary>
+        /// 鍚戞媶鐩樻満璇锋眰鍗歌揣
+        /// </summary>
+        /// <param name="ips"></param>
+        internal static void DiscRemoverReqUnload(string ip, string taskNo)
+        {
+            var plc = Settings.GetPlcInfo().Where(a => a.deviceType == ip).FirstOrDefault();
+            if (plc != null)
+            {
+                var wirte = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                {
+                    addr = plc.writeAddr + 1,
+                    host = plc.ip,
+                    port = plc.port,
+                    data = 1
+                });
+                CMMLog.Info($"鍐檣plc.ip}鍙栭�閬搟plc.writeAddr + 1}鐨勬暟鎹负1");
+                var readRes = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                {
+                    dataNum = 1,
+                    host = plc.ip,
+                    port = plc.port,
+                    addr = plc.readAddr + 1
+                });
+                CMMLog.Info($"璇粄plc.ip}鍙栭�閬搟plc.readAddr + 1}鐨勬暟鎹负{JsonConvert.SerializeObject(readRes)}");
+                if (readRes != null && readRes.errCode == 0)
+                {
+                    if (readRes.result[0] == 0 || readRes.result[0] == 1)
+                    {
+                        //涓嶅厑璁歌繘鏂欙紝ams鍐欏叆璇锋眰鍑烘枡
+                        var writeRes = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                        {
+                            host = plc.ip,
+                            port = plc.port,
+                            addr = plc.writeAddr + 1,
+                            data = 1
+                        });
+                    }
+                    else if (readRes.result[0] == 2)
+                    {
+                        //璁惧鍏佽杩涙枡
+                        //鏀瑰弬鏁伴�鐭gv
+                        if (TSHelper.GoToAGV(taskNo, 10, 3))
+                        {
+                            WorkFlowAction.TrackLog(taskNo, 10, 1013, "success");
+                            //鏀规垚鍑烘枡杩涜涓�+                            CMMLog.Debug("涓夋ゼ鎷嗙洏鏈猴細灏忚溅姝e湪鍗哥┖鐩樹腑锛�);
+                            var writeRes = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                            {
+                                host = plc.ip,
+                                port = plc.port,
+                                addr = plc.writeAddr + 1,
+                                data = 2
+                            });
+                        }
+                        else CMMLog.Debug($"涓夋ゼ鎷嗙洏琛ョ┖锛�013锛孴S,10,3,false锛�);
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// 灏忚溅鍗歌揣瀹屾垚绂诲紑閫氱煡鎷嗙洏鏈�+        /// </summary>
+        /// <param name="ips"></param>
+        /// <param name="taskNo"></param>
+        internal static bool DiscRemoverUnloadComplete(string ip, string taskNo)
+        {
+            var result = false;
+            var plc = Settings.GetPlcInfo().Where(a => a.deviceType == ip).FirstOrDefault();
+            if (plc != null)
+            {
+                //1.0 璇诲湴鍧�璁惧鏄惁鍔ㄤ綔瀹屾垚
+                //var readRes = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                //{
+                //    dataNum = 1,
+                //    host = plc.ip,
+                //    port = plc.port,
+                //    addr = plc.readAddr + 1
+                //});
+                //CMMLog.Info($"璇粄plc.ip}鍙栭�閬搟plc.readAddr + 1}鐨勬暟鎹负{readRes.result[0]}");
+                //if (readRes != null && readRes.errCode == 0)
+                //{
+                    //if (readRes.result[0] == 2)
+                    //{
+                        var writeRes = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                        {
+                            host = plc.ip,
+                            port = plc.port,
+                            addr = plc.writeAddr + 1,
+                            data = 3
+                        });
+                        CMMLog.Info($"鍐欏叆{plc.ip}閫氶亾{plc.writeAddr + 1}鐨勬暟鎹负{3}");
+                        result = true;
+                        CMMLog.Debug("璇诲彇璁惧銆愬弬鏁颁笉涓�銆戯紝AMS璁剧疆灏忚溅銆愬姩浣滃畬鎴愩�锛岀瓑寰呰澶囥�鍙傛暟涓�銆戞椂鍐嶆敼鍙傛暟閫氱煡agv");
+                    //}
+                //}
+            }
+            else CMMLog.Info($"deviceType:{ip},鏈壘鍒�);
+            return result;
+        }
+
+        #endregion
+
+        #endregion
+
+        #region   3妤煎彔鐩樻満婊℃墭涓嬬嚎鍏ュ簱娴佺▼鈥斺�闇�洖鎶MS浠诲姟鐘舵�鈥斺�3妤煎彔鐩樹笅绾�-宸插畬鎴�寰呮祴璇�
+
+        /// <summary>
+        /// 绾跨▼寰幆鏌ヨ鍙犵洏鏈烘槸鍚﹂渶瑕佷笅婊℃墭
+        /// </summary>
+        /// <param name="plc"></param>
+        internal static void StackingLineEmpty(Settings.PlcInfo plc)
+        {
+            //璇籶lc淇″彿锛岀湅鏈夋病鏈夊彨鏂欒姹傦紝鍒ゆ柇鏄惁宸茬粡鏈変换鍔�+            //娌℃湁浠诲姟锛岃皟WMS鐢熸垚绌烘墭琛ュ厖浠诲姟
+            try
+            {
+                //RegisterReadInPut 璇诲彇杈撳叆瀵勫瓨鍣ㄨ繕鏄緭鍑哄瘎瀛樺櫒寰呭畾,璇诲彇閫氶亾1鐨勬暟鎹�+                var result = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                {
+                    dataNum = 1,
+                    addr = plc.readAddr + 1,
+                    host = plc.ip,
+                    port = plc.port
+                });
+                if (result != null && result.errCode == 0)
+                {
+                    //1.婊℃墭涓嬬嚎
+                    if (result.result[0] == 1)
+                    {
+                        //鍒ゆ柇3妤煎彔鐩樿捣鐐规槸鍚︽湁浠诲姟鍗犵敤锛屾病鏈夊垯鐢熸垚浠诲姟
+                        if (ProcessHelper.CheckStartFree(plc.location))
+                        {
+                            string wmstaskno = "";
+                            string traycode = "";
+                            bool req = WMSHelper.WMSIn(plc.location, "", ref wmstaskno, ref traycode);
+                            if (req) CMMLog.Debug($"璋冪敤WMS鑾峰彇涓夋ゼ鍙犵洏鏈虹敓鎴愪换鍔℃垚鍔燂紒");
+                            else CMMLog.Debug($"璋冪敤WMS鑾峰彇涓夋ゼ鍙犵洏鏈虹敓鎴愪换鍔″け璐ワ紒");
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                CMMLog.Error(ex.Message, ex);
+            }
+        }
+
+        #region   鍙犵洏鏈轰氦浜�+
+        /// 灏忚溅璇锋眰鍑烘枡	1	AMS鍐欙紝PLC璇�1-璇锋眰鍑烘枡锛�-鍑烘枡杩涜涓紱3-鍔ㄤ綔瀹屾垚
+        /// 璁惧鍏佽杩涙枡	1	PLC鍐欙紝AMS璇�1-鍏佽杩涙枡锛�-杩涙枡杩涜涓紱3-鍔ㄤ綔瀹屾垚
+        /// <summary>
+        /// 鍚戝彔鐩樻満璇锋眰鍙栬揣
+        /// </summary>
+        /// <param name="ips"></param>
+        internal static void StackingReqUnload(string ip, string taskNo)
+        {
+            var plc = Settings.GetPlcInfo().Where(a => a.deviceType == ip).FirstOrDefault();
+            if (plc != null)
+            {
+                var wirte = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                {
+                    addr = plc.writeAddr + 1,
+                    host = plc.ip,
+                    port = plc.port,
+                    data = 1
+                });
+                CMMLog.Debug($"鍐欏叆閫氶亾鍙蜂负锛歿plc.writeAddr + 1},鐨勬暟鎹负锛�");
+                var readRes = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                {
+                    dataNum = 1,
+                    host = plc.ip,
+                    port = plc.port,
+                    addr = plc.readAddr + 1
+                });
+                CMMLog.Debug($"璇诲彇閫氶亾鍙蜂负锛歿plc.readAddr + 1},鐨勬暟鎹负锛歿JsonConvert.SerializeObject(readRes)}");
+                if (readRes != null && readRes.errCode == 0)
+                {
+                    if (readRes.result[0] == 0 || readRes.result[0] == 1)
+                    {
+                        //涓嶅厑璁歌繘鏂欙紝ams鍐欏叆璇锋眰鍑烘枡
+                        var writeRes = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                        {
+                            host = plc.ip,
+                            port = plc.port,
+                            addr = plc.writeAddr + 1,
+                            data = 1
+                        });
+                    }
+                    else if (readRes.result[0] == 2)
+                    {
+                        //璁惧鍏佽杩涙枡
+                        //鏀瑰弬鏁伴�鐭gv
+                        if (TSHelper.GoToAGV(taskNo, 10, 1))
+                        {
+                            WorkFlowAction.TrackLog(taskNo, 10, 1013, "success");
+                            //鏀规垚鍑烘枡杩涜涓�+                            CMMLog.Debug("涓夋ゼ鍙犵洏鏈猴細灏忚溅姝e湪鍙栨墭鐩樹腑锛�);
+                            var writeRes = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                            {
+                                host = plc.ip,
+                                port = plc.port,
+                                addr = plc.writeAddr + 1,
+                                data = 2
+                            });
+                            CMMLog.Debug($"鍐欏叆閫氶亾鍙蜂负锛歿plc.writeAddr + 1},鐨勬暟鎹负锛�");
+                        }
+                        else CMMLog.Debug($"涓夋ゼ鍙犵洏鏈猴紝1013锛孴S,10,3,false锛�);
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// 灏忚溅鍙栬揣瀹屾垚绂诲紑閫氱煡鍙犵洏鏈�+        /// </summary>
+        /// <param name="ips"></param>
+        /// <param name="taskNo"></param>
+        internal static bool StackingComplete(string ip, string taskNo)
+        {
+            var result = false;
+            var plc = Settings.GetPlcInfo().Where(a => a.deviceType == ip).FirstOrDefault();
+            if (plc != null)
+            {
+                //1.0 璇诲湴鍧�璁惧鏄惁鍔ㄤ綔瀹屾垚
+                var writeRes = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                {
+                    host = plc.ip,
+                    port = plc.port,
+                    addr = plc.writeAddr + 1,
+                    data = 3
+                });
+                result = true;
+                CMMLog.Debug("璇诲彇璁惧銆愬弬鏁颁笉涓�銆戯紝AMS璁剧疆灏忚溅銆愬姩浣滃畬鎴愩�锛岀瓑寰呰澶囥�鍙傛暟涓�銆戞椂鍐嶆敼鍙傛暟閫氱煡agv");
+            }
+            return result;
+        }
+
+        #endregion
+
+        #endregion
+
+        #region 鍖呰绾胯ˉ绌轰换鍔�+        internal static void PackingLine(string ip, string taskNo)
+        {
+            var plc = Settings.GetPlcInfo().Where(a => a.ip == ip).FirstOrDefault();
+            //ASM鍐欏叆灏忚溅鍔ㄤ綔锛�锛氫笂鏂欏绉帮紱2锛氫笂鐮濈爜鏁欑О锛�锛氬彇澶嶇ОNG鎵樼洏锛�锛氬彇鐮濈爜鍒板寘瑁呮満
+            int[] num = new int[1] { 1 };
+            var writeRes0 = OITcpHelper.RegisterWriteOutPutMulti(new OITcpHelper.RegisterWriteOutPutModelMulti
+            {
+                host = ip,
+                addr = plc.writeAddr + 2,
+                data = num,//鍘熷厛鏄�,鍗曚釜鍐欏叆
+                port = plc.port
+            });
+            CMMLog.Debug($"鍐欏叆璁惧{plc.location}閫氶亾{plc.writeAddr + 2}閲岄潰鏁版嵁涓�.");
+
+            writeRes0 = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+            {
+                host = ip,
+                addr = plc.writeAddr,
+                data = 3,//鍘熷厛鏄�,鍗曚釜鍐欏叆
+                port = plc.port
+            });
+            CMMLog.Debug($"鍐欏叆璁惧{plc.location}閫氶亾{plc.writeAddr + 2}閲岄潰鏁版嵁涓�.");
+            //Console.WriteLine($"鍐欏叆璁惧{plc.location}閫氶亾{plc.writeAddr + 2}閲岄潰鏁版嵁涓�.");
+            ///灏忚溅鍜屽绉颁綅瀵规帴
+            //灏忚溅璇锋眰杩涙枡锛屽苟涓旀煡璇㈣澶囨槸鍚﹀厑璁窤GV杩涘叆
+            var readRes = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+            {
+                dataNum = 1,
+                host = plc.ip,
+                addr = plc.readAddr + 2,
+                port = plc.port
+            });
+            CMMLog.Debug($"璇诲彇璁惧{plc.location}閫氶亾{plc.readAddr + 2}閲岄潰鏁版嵁涓簕readRes.result[0]}.");
+            //Console.WriteLine($"璇诲彇璁惧{plc.location}閫氶亾{plc.readAddr + 2}閲岄潰鏁版嵁涓簕readRes.result[0]}.");
+            if (readRes != null && readRes.errCode == 0)
+            {
+                if (readRes.result[0] == 2)
+                {
+                    var writeRes = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                    {
+                        host = ip,
+                        addr = plc.writeAddr + 2,
+                        data = 2,
+                        port = plc.port
+                    });
+                    CMMLog.Debug($"鍐欏叆璁惧{plc.location}閫氶亾{plc.writeAddr + 2}閲岄潰鏁版嵁涓�.");
+                    //Console.WriteLine($"鍐欏叆璁惧{plc.location}閫氶亾{plc.writeAddr + 2}閲岄潰鏁版嵁涓�.");
+
+                    WorkFlowAction.TrackLog(taskNo, 10, 1013, "success");
+                    TSHelper.GoToAGV(taskNo, 10, 3);
+                }
+            }
+        }
+        #endregion
+
+        #endregion
+
+        #region   璺ㄦゼ灞備换鍔�+
+        #region   璐х墿鍏ュ簱娴佺▼鈥斺�婊℃墭鍏ュ簱
+
+        #region   鏀跺埌鎵撳寘鏈轰笅绾夸俊鍙凤紝鍒ゆ柇鏉′欢鏄惁鍏佽锛岄�鎷╂�涓嬪彂浠诲姟
+        internal static void CheckPackingLineFull1(Settings.PlcInfo plc)
+        {
+            //璇籶lc淇″彿锛岀湅鏈夋病鏈変笅绾胯姹傦紝鍒ゆ柇鏄惁宸茬粡鏈変换鍔�+            //娌℃湁浠诲姟锛岀户缁璸lc锛屽寘瑁呬笅绾跨殑鐗╂枡淇″彿
+            //妫�煡鎵撳寘鏈洪�閬�鏄惁鏈夊嚭鏂欎换鍔′俊鍙凤紝濡傛灉鏈夌敓鎴愬彇鏂欎换鍔°�
+            if (CheckStartFree(plc.location))
+            {
+                try
+                {
+                    var result = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                    {
+                        dataNum = 1,
+                        addr = plc.readAddr + 1,
+                        host = plc.ip,
+                        port = plc.port
+                    }); 
+                    CMMLog.Debug($"鎵撳寘涓嬬嚎娴佺▼锛氳鍙栭�閬撳彿涓猴細{plc.readAddr + 1},ip:{plc.ip},绔彛锛歿plc.port}");
+                    CMMLog.Debug($"鍊间负锛歿result.result[0]}");
+                    if (result != null && result.errCode == 0)
+                    {
+                        if (result.result[0] == 1)
+                        {
+                            //鑾峰彇MODBUS閫氶亾閲岄潰瀛樻斁鐨勬椂闂存埑
+                            var resultTime = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                            {
+                                addr = plc.readAddr + 10,
+                                host = plc.ip,
+                                port = plc.port,
+                                dataNum = 2
+                            });
+                            if (resultTime.errCode == 0)
+                            {
+                                string wmstaskno = "";
+                                string timeCuoData = (resultTime.result[0] * 65536 + resultTime.result[1]).ToString();
+                                //CMMLog.Info($"鑾峰彇鍒扮殑MODBUS鏃堕棿鎴筹細{timeCuoData},鍦板潃锛歿plc.ip},绔彛锛歿plc.port},閫氶亾:{plc.readAddr + 10}銆亄plc.readAddr + 11}");
+                                //Console.WriteLine($"鑾峰彇鍒扮殑MODBUS鏃堕棿鎴筹細{timeCuoData}");
+                                //杩欓噷闇�璋冪敤鐓х浉鏈烘帴鍙o紝鑾峰彇鏁版嵁瀛樺叆涓棿琛紝绛夊埌鍏ュ簱娴佺▼瀹屾垚锛屽皢鏁版嵁浼犻�缁橶MS
+
+                                CMMLog.Info($"鑾峰彇鍒扮殑MODBUS鏃堕棿鎴筹細{timeCuoData}");
+                                //Console.WriteLine($"鑾峰彇鍒扮殑MODBUS鏃堕棿鎴筹細{timeCuoData}");
+                                //杩欓噷闇�璋冪敤鐓х浉鏈烘帴鍙o紝鑾峰彇鏁版嵁瀛樺叆涓棿琛紝绛夊埌鍏ュ簱娴佺▼瀹屾垚锛屽皢鏁版嵁浼犻�缁橶MS
+                                string deviceNo = "";
+                                var timecuo = TimeCuo(timeCuoData, ref deviceNo);
+                                if (timecuo != null)
+                                {
+                                    string timeStamp = timecuo.data.First().timeStamp.ToString();
+                                    string employeeId = timecuo.data.First().employeeID1.ToString();
+                                    WMSHelper.WMSIn(plc.location, "鎵撳寘涓嬬嚎", ref wmstaskno, ref timeStamp, timeStamp, "CPHJ");
+                                }
+                                else CMMLog.Info($"鏃堕棿鎴虫帴鍙h繑鍥炲�涓虹┖锛�);
+                            }
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    CMMLog.Debug(ex.Message+ "CheckPackingLineFull1");
+                }
+            }
+        }
+
+
+        public class MATERIALSync
+        {
+            public ObjectId _id { get; set; }
+            /// <summary>
+            /// 鍚嶇О
+            /// </summary>
+            public string FName { get; set; }
+            /// <summary>
+            /// 娴佹按鍙�+            /// </summary>
+            public string FNumber { get; set; }
+            public string FExpUnit { get; set; }
+            public string FStoreUnit { get; set; }
+            /// <summary>
+            /// 鍛樺伐缂栧彿
+            /// </summary>
+            public string EMP_FNumber { get; set; }
+            /// <summary>
+            /// 鍛樺伐鍚嶇О
+            /// </summary>
+            public string EMP_FName { get; set; }
+            public DateTime time { get; set; }
+        }
+
+        #endregion
+
+        #region   鎵撳寘鏈哄嚭鍙ODBUS浜や簰锛堝紑濮嬪彇鏂欙紝鍙栨枡瀹屾垚锛�+
+        /// 灏忚溅璇锋眰杩涙枡	1	AMS鍐欙紝PLC璇�1-AGV鍒颁綅淇″彿锛�-鍒颁綅鍚庯紝璇锋眰鎺ラ┏婊氬姩锛�-鍙栬揣瀹屾垚锛�+        /// 璁惧鍏佽鍑烘枡	1	PLC鍐欙紝AMS璇�1-璁惧璇锋眰鍑烘枡锛�-鍏佽杩涘叆锛�-纭璐х墿鍙栬蛋锛岄�鍑虹墿鏂欙紱
+
+        ///鎵撳寘绾夸笅绾库�鈥斿皬杞﹀紑濮嬪彇璐�+        internal static void PackingLineUnload1012(string ip, string taskNo)
+        {
+            CMMLog.Info($"銆愭墦鍖呬笅绾裤�璧风偣瀹夊叏璇锋眰杩涘叆娴佺▼澶勭悊寮�--------");
+            var plc = Settings.GetPlcInfo().Where(a => a.deviceType == "4").FirstOrDefault();
+            if (plc != null)
+            {
+                try
+                {
+                    var readRes = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                    {
+                        dataNum = 1,
+                        addr = plc.readAddr + 1,
+                        host = plc.ip,
+                        port = plc.port
+                    });
+                    if (readRes != null && readRes.errCode == 0)
+                    {
+                        CMMLog.Info($"銆愭墦鍖呬笅绾裤�璇诲彇閫氶亾{plc.readAddr + 1}鐨勬暟鎹负锛歿readRes.result[0]}");
+                        if (readRes.result[0] == 1)
+                        {
+                            var write = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                            {
+                                addr = plc.writeAddr + 1,
+                                data = 1,
+                                host = plc.ip,
+                                port = plc.port
+                            });
+                            CMMLog.Info($"銆愭墦鍖呬笅绾裤�鍐欏叆閫氶亾{plc.writeAddr + 1}鐨勬暟鎹负锛歿1}");
+                        }
+                        else if (readRes.result[0] == 2)
+                        {
+                            TSHelper.GoToAGV(taskNo, 10, 1);
+                            var wirte = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                            {
+                                addr = plc.writeAddr + 1,
+                                data = 2,
+                                host = plc.ip,
+                                port = plc.port
+                            });
+                            CMMLog.Info($"銆愭墦鍖呬笅绾裤�鍐欏叆閫氶亾{plc.writeAddr + 1}鐨勬暟鎹负锛歿2}");
+                        }
+                    }
+                    else CMMLog.Info($"銆愭墦鍖呬笅绾裤�璇诲彇閫氶亾{plc.readAddr + 1}鐨勬暟鎹け璐�);
+                }
+                catch (Exception ex)
+                {
+                    CMMLog.Info(ex.Message);
+                }
+            }
+            else CMMLog.Info($"ip涓猴細{ip}鐨勮澶囨湭閰嶇疆");
+            CMMLog.Info($"銆愭墦鍖呬笅绾裤�璧风偣瀹夊叏璇锋眰杩涘叆娴佺▼澶勭悊缁撴潫--------");
+        }
+
+        /// <summary>
+        /// 鎵撳寘绾夸笅绾库�鈥斿皬杞﹀彇璐у畬鎴�+        /// </summary>
+        /// <param name="ip"></param>
+        /// <param name="taskNo"></param>
+        internal static void PackingLineComplete4(string ip, string taskNo)
+        {
+            CMMLog.Info($"銆愭墦鍖呬笅绾裤�璧风偣瀹夊叏璇锋眰閫�嚭娴佺▼澶勭悊寮�-------------");
+            //鍙栬揣瀹屾垚鍚庨渶瑕佽鍙栬澶囨椂闂存埑閲岄潰鐨勬暟鎹紝骞跺皢鍏舵殏瀛樿嚦涓棿琛ㄧ瓑鍒板叆搴撲换鍔″畬鎴愪紶杈撶粰WMS
+            
+            var plc = Settings.GetPlcInfo().Where(a => a.deviceType == "4").FirstOrDefault();
+            if (plc != null)
+            {
+                try
+                {
+                    //var readRes = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                    //{
+                    //    dataNum = 1,
+                    //    addr = plc.readAddr + 1,
+                    //    host = plc.ip,
+                    //    port = plc.port
+                    //});
+                    //if (readRes != null && readRes.errCode == 0)
+                    //{
+                    //    CMMLog.Info($"銆愭墦鍖呬笅绾裤�璇诲彇閫氶亾{plc.readAddr + 1}鐨勫�涓簕readRes.result[0]}");
+                    //    if (readRes.result[0] == 3)
+                    //    {
+                            var write = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                            {
+                                addr = plc.writeAddr + 1,
+                                data = 3,
+                                host = plc.ip,
+                                port = plc.port
+                            });
+                            CMMLog.Info($"銆愭墦鍖呬笅绾裤�鍐欏叆閫氶亾{plc.writeAddr + 1}鐨勫�涓簕3}");
+                    //    }
+                    //}
+                    //else CMMLog.Info($"銆愭墦鍖呬笅绾裤�璇诲彇閫氶亾{plc.readAddr + 1}鐨勫�澶辫触");
+                }
+                catch (Exception ex)
+                {
+                    CMMLog.Info(ex.Message);
+                }
+            }
+            else CMMLog.Info($"ip涓簕ip}鐨勮澶囨湭閰嶇疆");
+            CMMLog.Info($"銆愭墦鍖呬笅绾裤�璧风偣瀹夊叏璇锋眰閫�嚭娴佺▼澶勭悊缁撴潫-------------");
+        }
+        #endregion
+
+        #endregion
+
+
+        #endregion
+
+        public static DateTime TenMin = DateTime.MinValue;
+        /// <summary>
+        /// 姣忛殧鍗佸垎閽熷線鎵�湁寮�惎鐨勬墦鍖呬笅绾垮彛MODBUS閫氶亾閲岄潰鍐欏皬杞︾數閲�+        /// 鍏跺疄鍦板潃26锛岃繛缁線閲岄潰鍐欏叆鍥涗釜鍊�+        /// </summary>
+        internal static void WriteBattery()
+        {
+            CMMLog.Info("鍐欏叆灏忚溅鐢甸噺锛氳繘鍏ュ啓鍏ョ數閲忎俊鎭祦绋嬶紒");
+            ////Console.WriteLine("鍐欏叆灏忚溅鐢甸噺锛氳繘鍏ュ啓鍏ョ數閲忎俊鎭祦绋嬶紒");
+            if(TenMin == DateTime.MinValue) TenMin = DateTime.Now;
+            else if (DateTime.Now.Subtract(TenMin).TotalMinutes >= 10)
+            {
+                //Console.WriteLine("鍐欏叆灏忚溅鐢甸噺锛氬啓鍏ユ墍鏈夊紑鍚殑鎵撳寘涓嬬嚎鍙ODBUS閫氶亾鐢甸噺鍊�骞堕噸缃椂闂翠负褰撳墠鏃堕棿");
+                CMMLog.Info("鍐欏叆灏忚溅鐢甸噺锛氬啓鍏ユ墍鏈夊紑鍚殑鎵撳寘涓嬬嚎鍙ODBUS閫氶亾鐢甸噺鍊�骞堕噸缃椂闂翠负褰撳墠鏃堕棿");
+                //鍐欏叆鎵�湁寮�惎鐨勬墦鍖呬笅绾垮彛MODBUS閫氶亾鐢甸噺鍊�骞堕噸缃椂闂翠负褰撳墠鏃堕棿
+                //鑾峰彇鎵�湁鐢甸噺鍊�+                int[] num = ProcessHelper.GetBatteryHang();
+                CMMLog.Info($"鍐欏叆灏忚溅鐢甸噺锛氬啓鍏ユ暟鎹細{JsonConvert.SerializeObject(num)}");
+                //Console.WriteLine($"鍐欏叆灏忚溅鐢甸噺锛氬啓鍏ユ暟鎹細{JsonConvert.SerializeObject(num)}");
+                var PlcInfo04 = Settings.GetPlcInfo().Where(a => a.enable == 1 && a.deviceType == "4").FirstOrDefault();//plcInfo
+                if (PlcInfo04 != null)
+                {
+                    var wirteall = OITcpHelper.RegisterWriteOutPutMulti(new OITcpHelper.RegisterWriteOutPutModelMulti
+                    {
+                        addr = PlcInfo04.writeAddr + 5,
+                        host = PlcInfo04.ip,
+                        data = num,
+                        port = PlcInfo04.port
+                    });
+                }
+                TenMin = DateTime.Now;
+            }
+        }
+        #region   鏁版嵁澶勭悊涓氬姟
+
+        /// <summary>
+        /// 鑾峰彇璁惧鐨勫寘瑁呯墿鏂欎俊鎭�骞跺啓鍏ヤ腑闂磋〃)
+        /// </summary>
+        /// <param name="info"></param>
+        /// <param name="result"></param>
+        /// <param name="noPack">true : MES浜や簰鏂瑰紡  false : 鏃燤ES浜や簰鏂瑰紡</param>
+        private static void GetMachineData(int[] result ,bool noPack = true)
+        {
+            //Console.WriteLine($"杩涘叆鏁版嵁澶勭悊娴佺▼锛�);
+            CMMLog.Info($"杩涘叆鏁版嵁澶勭悊娴佺▼锛�);
+            
+            string trayCode = GetTrayCode(result.Take(3).ToArray());//鎵樼洏鐮�+            //string location = RemoveNull(GetTrayCode(result.Skip(3).Take(1).ToArray()));//璁惧璐т綅缂栫爜
+            string location = Convert.ToInt32(Completion(result[3]), 2).ToString();
+            if (trayCode != null && location != null)
+            {
+                CMMLog.Info($"trayCode:{trayCode},location:{location}");
+                var json = "";
+                if (!noPack)
+                {
+                    CMMLog.Info($"鏁版嵁澶勭悊娴佺▼锛氬寘瑁呮満鏃燤ES鎯呭喌涓嬶紝鑷姩鐢熸垚浠ュ綋鍓嶅寘瑁呮満鍙穥location}涓洪鐨勬暟鎹�);
+                    var task = MongoDBSingleton.Instance.FindOne<MachineInfo>(Query.EQ("machineNo", location), "MachineInfo");
+                    if (task == null)
+                    {
+                        if (MongoDBSingleton.Instance.Insert<MachineInfo>(new MachineInfo
+                        {
+                            machineNo = location,
+                        })) CMMLog.Info($"MachineInfo涓彃鍏ユ暟鎹紝鍖呰鏈哄彿锛歿location}");
+
+                    }
+                    else CMMLog.Info($"鏁版嵁澶勭悊娴佺▼锛氬寘瑁呮満鏃燤ES鎯呭喌涓嬶紝妯℃嫙MES鏁版嵁锛屼腑闂磋〃<MachineInfo>涓凡鏈夊綋鍓嶅寘瑁呮満鍙穥location}涓洪鐨勬暟鎹�);
+
+                    var taskTwo = MongoDBSingleton.Instance.FindOne<MachineInfoTwo>(Query.EQ("trayCode", trayCode), "MachineInfoTwo");
+                    if (taskTwo != null)
+                    {
+                        MongoDBSingleton.Instance.Update<MachineInfoTwo>(Query.EQ("trayCode", trayCode), Update.Set("machineNo", location), UpdateFlags.None);
+                        CMMLog.Info($"MachineInfoTwo涓洿鏂板叆鏁版嵁锛屾墭鐩樺彿锛歿trayCode}");
+                    }
+                    else
+                    {
+                        if (MongoDBSingleton.Instance.Insert<MachineInfoTwo>(new MachineInfoTwo
+                        {
+                            machineNo = location,
+                            trayCode = trayCode,
+                        })) CMMLog.Info($"MachineInfoTwo涓彃鍏ユ暟鎹紝鍖呰鏈哄彿锛歿location}");
+                    }
+                }
+                var info = MongoDBSingleton.Instance.FindOne<MachineInfo>(Query.EQ("machineNo", location), "MachineInfo");
+
+                if (info != null)
+                {
+                    CMMLog.Info($"info:{info}");
+                    #region   鑾峰彇璁惧閫氶亾淇℃伅
+
+                    #region   杞崲鍚�+                    info.location = location;
+                    info.trayCode = trayCode;
+                    //鑾峰彇閲嶉噺 鍙犲寘绛夊叾瀹冧俊鎭�+                    info.productWeight = Convert.ToInt32(Completion(result[4]) + Completion(result[5]), 2).ToString();
+                    CMMLog.Info($"鑾峰彇鏁版嵁 productWeight锛歿info.productWeight}");
+                    info.trayCodeWeight = Convert.ToInt32(Completion(result[6]) + Completion(result[7]), 2).ToString();
+                    CMMLog.Info($"鑾峰彇鏁版嵁 trayCodeWeight锛歿info.trayCodeWeight}");
+                    double x = (double)Convert.ToInt32(Completion(result[8]) + Completion(result[9]), 2) / 100;
+                    info.oneTrayWeight = x.ToString();
+                    CMMLog.Info($"鑾峰彇鏁版嵁 oneTrayWeight锛歿info.oneTrayWeight}");
+                    //棰勭暀鎵樼洏绫诲瀷  10閫氶亾
+                    info.addState = Convert.ToInt32(Completion(result[11]), 2);
+                    CMMLog.Info($"鑾峰彇鏁版嵁 addState锛歿info.addState}");
+                    if (info.addState == 0) CMMLog.Error($"鑾峰彇MODBUS淇℃伅寮傚父:鏄惁鍙犲寘鍊间负0.");
+                    info.packageCode = Convert.ToInt32(Completion(result[12]), 2).ToString();
+                    CMMLog.Info($"鑾峰彇鏁版嵁 packageCode锛歿info.packageCode}");
+                    //info.empNum = Convert.ToInt32(Completion(result[13]) + Completion(result[14])+ Completion(result[15]) + Completion(result[16]) + Completion(result[17]), 2).ToString();
+                    info.empNum = RemoveNull(GetTrayCode(result.Skip(13).Take(5).ToArray()));//鍛樺伐缂栧彿
+                    CMMLog.Info($"鑾峰彇鏁版嵁 empNum锛歿info.empNum}");
+                    info.productTime = Convert.ToInt32(Completion(result[18]) + Completion(result[19]), 2).ToString();
+                    CMMLog.Info($"鑾峰彇鏁版嵁 productTime锛歿info.productTime}");
+
+                    CMMLog.Debug($"鑾峰彇MODBUS杞崲鍚庣殑鏁版嵁淇℃伅锛歭ocation:{info.location},trayCode:{info.trayCode},productWeight:{info.productWeight}" +
+                        $",trayCodeWeight:{info.trayCodeWeight},oneTrayWeight:{info.oneTrayWeight}" +
+                        $",addState:{info.addState},packageCode:{info.packageCode},empNum:{info.empNum},productTime:{info.productTime}");
+                    #endregion
+
+                    #region   杞崲鍓�+                    for (int i = 0; i <= 90; i++)
+                    {
+                        info.machinedown[i] = result[i];
+                    }
+                    //灏嗘暟缁勬暟鎹帴鍙楄浆鎹负JSON鏁版嵁骞跺湪鍚庣画鏂规硶鍒ゆ柇涓瓨鍏ヤ腑闂磋〃
+                    json = JsonConvert.SerializeObject(info.machinedown);
+                    CMMLog.Debug($"鑾峰彇MODBUS杞崲鍓嶇殑鏁版嵁淇℃伅锛歿json}");
+                    //Console.WriteLine($"鑾峰彇MODBUS杞崲鍓嶇殑鏁版嵁淇℃伅锛歿json}");
+                    #endregion
+
+                    #endregion
+                }
+                else CMMLog.Info($"璇锋煡璇�MachineInfo>琛ㄤ腑machineNo瀛楁鏄惁涓哄綋鍓嶅寘瑁呮満鍙凤紝骞朵笖trayCode鏄惁涓�");
+
+                var infoPack = MongoDBSingleton.Instance.FindOne<MachineInfo>(Query.And(Query.EQ("machineNo", location), Query.EQ("trayCode", "0")), "MachineInfo");
+
+                if (infoPack != null)
+                {
+                    //鍖呰鏈轰笅绾胯嚦澶嶇О锛岃鍙栧寘瑁呮満骞冲彴鏁版嵁
+                    CMMLog.Info("杩涘叆info鍒ゆ柇01");
+                    //AMS鍖呰鏈轰笅绾块鍏堣皟鐢∕ES锛屼箣鍚庤幏鍙栨柊鐨勮澶囨暟鎹瓨鍏ヤ腑闂磋〃
+                    //鏍规嵁鎵樼洏鍙疯幏鍙栨寚瀹氱殑閫氶亾鐨凧SON鏁版嵁锛屽皢鍏惰浆鎹负鏁扮粍绫诲瀷鈥斺�鍐欏叆閫氶亾鏁版嵁鏃朵細浣跨敤
+                    //var arr = JsonConvert.DeserializeObject<List<int>>(json);
+                    if(!noPack)
+                    {
+                        CMMLog.Info($"鏁版嵁澶勭悊娴佺▼锛氬寘瑁呮満鏃燤ES鎯呭喌涓嬶紝鑾峰彇浠ュ線MES浼犺緭鐨勬暟鎹紝骞跺師鏍峰啓鍏ュ師鍏圡ES瀛楁涓�");
+
+                        info.lotNo = RemoveNull(GetTrayCode(result.Skip(20).Take(20).ToArray()).Trim().ToString());
+                        info.productType = RemoveNull(GetTrayCode(result.Skip(40).Take(10).ToArray()).Trim().ToString());
+                        info.materialCode = RemoveNull(GetTrayCode(result.Skip(50).Take(15).ToArray()).Trim().ToString());
+                        info.materialName = RemoveNull(GetTrayCode(result.Skip(65).Take(20).ToArray()).Trim().ToString());
+                        info.measurementUnit = RemoveNull(GetTrayCode(result.Skip(85).Take(5).ToArray()).Trim().ToString());
+                        //info.organizeCode = RemoveNull(GetTrayCode(result.Skip(90).Take(1).ToArray()).Trim().ToString());
+                        info.organizeCode = result[90].ToString();
+                        CMMLog.Info($"鑾峰彇鍖呰鏈虹殑鐗╂枡缂栫爜锛歿RemoveNull(GetTrayCode(result.Skip(50).Take(20).ToArray()).Trim().ToString())}");
+
+                        CMMLog.Info($"鏁版嵁澶勭悊娴佺▼锛氬寘瑁呮満鏃燤ES鎯呭喌涓嬶紝鑾峰彇浠ュ線MES浼犺緭鐨勬暟鎹紝鏂拌幏寰楁暟鎹紝lotNo:{info.lotNo},productType:{info.productType},materialCode:{info.materialCode},materialName:{info.materialName},measurementUnit:{info.measurementUnit},organizeCode:{info.organizeCode}");
+
+                        //娉ㄦ剰锛氳繖閲岃祴鍊间腑闂磋〃鍙傛暟璇峰鐓т俊鎭氦浜掕〃鍏蜂綋閫氶亾鍊煎搴�+                        UpdateBuilder update = Update.Set("palletLayers", info.secondNg.ToString()).Set("overlappingLayers", info.addState.ToString()).Set("bagNo", info.packageCode).
+                            Set("lotNo", info.lotNo).Set("productType", info.productType).Set("materialCode", info.materialCode).Set("materialName",info.materialName).
+                            Set("measurementUnit", info.measurementUnit).Set("organizeCode", info.organizeCode);
+                        MongoDBSingleton.Instance.Update<MachineInfo>(Query.EQ("machineNo", location), update, UpdateFlags.None);
+                        MongoDBSingleton.Instance.Update<MachineInfoTwo>(Query.EQ("trayCode", trayCode), update, UpdateFlags.None);
+                    }
+                    //鍦ㄤ腑闂磋〃涓壘鍒板垰鍒氭彃鍏ョ殑MES鏁版嵁锛堢洰鍓嶈繕娌℃湁璇诲彇骞跺啓鍏ヨ澶囨暟鎹級
+                    var query1 = Query.And(Query.EQ("machineNo", location), Query.EQ("trayCode", "0"));
+                    UpdateBuilder updateBuider = Update.Set("location", info.location).
+                        Set("trayCode", info.trayCode).Set("productWeight", info.productWeight).
+                        Set("trayCodeWeight", info.trayCodeWeight).Set("oneTrayWeight", info.oneTrayWeight).
+                        Set("addState", info.addState).Set("packageCode", info.packageCode).Set("empNum", info.empNum).Set("productTime", info.productTime).
+                        Set("jsonData", json).Set("modify", DateTime.Now);
+                    MongoDBSingleton.Instance.Update<MachineInfo>(query1, updateBuider, UpdateFlags.None);
+                    MongoDBSingleton.Instance.Update<MachineInfoTwo>(Query.EQ("trayCode", trayCode), updateBuider, UpdateFlags.None);
+                    CMMLog.Info($"MachineInfo锛氭洿鏂癕achineInfo涓棿琛ㄥ垰鍒氭彃鍏ョ殑MES鏁版嵁!璁惧鍙蜂负锛歿location},鎵樼洏鍙蜂负锛歿trayCode}");
+                    CMMLog.Info($"MachineInfo锛氭洿鏂癕achineInfoTwo涓棿琛ㄥ垰鍒氭彃鍏ョ殑MES鏁版嵁!璁惧鍙蜂负锛歿location},鎵樼洏鍙蜂负锛歿trayCode}");
+                }
+                else
+                {
+                    //澶嶇О鍏ョ紦瀛樻灦锛岃鍙栧绉板钩鍙版暟鎹�+                    CMMLog.Info("杩涘叆info鍒ゆ柇02");
+                    //璇诲彇闄ゅ寘瑁呮満澶栧叾浠栬澶囩殑淇℃伅锛屾洿鏂板寘瑁呮満涓嬬嚎鏃剁殑鏁版嵁
+                    var query2 = Query.And(Query.EQ("machineNo", location), Query.EQ("trayCode", trayCode));
+                    var info2 = MongoDBSingleton.Instance.FindOne<MachineInfo>(query2, "MachineInfo");
+                    if (info2 != null)
+                    {
+                        UpdateBuilder updateBuider = Update.Set("location", info.location).
+                            Set("trayCode", info.trayCode).Set("productWeight", info.productWeight).
+                            Set("trayCodeWeight", info.trayCodeWeight).Set("oneTrayWeight", info.oneTrayWeight).
+                            Set("addState", info.addState).Set("packageCode", info.packageCode).Set("empNum", info.empNum).Set("productTime", info.productTime).
+                            Set("jsonData", json).Set("modify", DateTime.Now);
+                        MongoDBSingleton.Instance.Update<MachineInfo>(query2, updateBuider, UpdateFlags.None);
+                        MongoDBSingleton.Instance.Update<MachineInfoTwo>(query2, updateBuider, UpdateFlags.None);
+                        CMMLog.Info($"MachineInfo锛氭洿鏂癕achineInfo涓棿琛ㄥ叾浠栬澶囩殑鏁版嵁!璁惧鍙蜂负锛歿location},鎵樼洏鍙蜂负锛歿trayCode}");
+                    }
+                    else CMMLog.Info($"MachineInfo锛氭棤娉曞湪MachineInfo涓棿琛ㄤ腑鎵惧埌褰撳墠璁惧缂栧彿鐨勬暟鎹紒褰撳墠璁惧缂栧彿涓猴細{location}锛屾墭鐩樼爜涓猴細{trayCode}");
+                }
+            }
+            else
+            {
+                //Console.WriteLine("鏁版嵁娴佺▼澶勭悊鎵樼洏鍙锋垨鍖呰鏈哄彿涓虹┖鍊硷紒");
+                CMMLog.Info("鏁版嵁娴佺▼澶勭悊鎵樼洏鍙锋垨鍖呰鏈哄彿涓虹┖鍊硷紒");
+            }
+            //Console.WriteLine($"鏁版嵁澶勭悊娴佺▼缁撴潫锛�);
+            CMMLog.Info($"鏁版嵁澶勭悊娴佺▼缁撴潫锛�);
+        }
+
+        /// <summary>
+        /// 鑾峰彇澶嶇О鐐圭姸鎬佷俊鎭�+        /// </summary>
+        /// <returns></returns>
+        public static SecondWeighState GetSecondWeighState(string location,string devicetype)
+        {
+            CMMLog.Debug($"鏌ヨ鐐逛綅锛歿devicetype}");
+            //浼犲叆褰撳墠璁惧缂栧彿锛屽苟灏嗕紶鍏ョ殑璁惧缂栧彿鏀惧叆澶嶇О涓棿琛ㄧ殑鏉ユ簮鍙橀噺涓�+            string PlcBit02 = Settings.GetPlcInfo().Where(a => a.location == devicetype && a.enable == 1).FirstOrDefault().location;
+            var query = Query.EQ("location", PlcBit02);
+            var model = MongoDBSingleton.Instance.FindOne<SecondWeighState>(query, "SecondWeighState");
+            if (model == null)
+            {
+                MongoDBSingleton.Instance.Insert<SecondWeighState>(new SecondWeighState { location = PlcBit02, from = location,full = 0,ng = 1 });
+                CMMLog.Debug($"鍒ゆ柇澶嶇О鐘舵�淇℃伅鏈嶅姟锛屽绉颁腑闂磋〃鏁版嵁涓虹┖锛屽紑濮嬫彃鍏ラ粯璁ゅ�锛�);
+            }
+            else MongoDBSingleton.Instance.Update<SecondWeighState>(query, Update.Set("from", location), "SecondWeighState", UpdateFlags.None);
+            return model;
+        }
+
+        /// <summary>
+        /// 澶嶇О骞冲彴鏁版嵁
+        /// </summary>
+        public class SecondWeighState
+        {
+            public ObjectId _id { get; set; }
+            public string location { get; set; }
+            /// <summary>
+            /// 0鏈煡 1鍚堟牸 2涓嶅悎鏍�+            /// </summary>
+            public int ng { get; set; }
+            /// <summary>
+            /// 澶嶇О骞冲彴璐т粠鍝噷鏉ョ殑
+            /// </summary>
+            public string from { get; set; }
+            /// <summary>
+            /// 鎵规鍙�+            /// </summary>
+            public string batchNo { get; set; }
+            /// <summary>
+            /// 鍖呰鏈轰笅绾块噸閲�+            /// </summary>
+            public int weight { get; set; }
+            /// <summary>
+            /// 1 婊�0 绌�+            /// </summary>
+            public int full { get; set; }
+            public string mesInfo { get; set; }
+        }
+
+        /// <summary>
+        /// 鑾峰彇澶嶇О鐐逛綅浣嶇疆
+        /// </summary>
+        /// <returns></returns>
+        /// <exception cref="NotImplementedException"></exception>
+        public static string GetSecondWeighBit()
+        {
+            //鏀规垚璇籹ettings
+            var plc = Settings.GetPlcInfo().Where(a => a.deviceType == "2").FirstOrDefault();
+            return plc.location;
+        }
+
+        /// <summary>
+        /// 灏嗚澶囬�閬撻噷闈㈣鍙栫殑16浣峴hort杞垚ascii瀛楃涓�+        /// </summary>
+        /// <param name="data"></param>
+        /// <returns></returns>
+        private static string GetTrayCode(int[] data)
+        {
+            StringBuilder sb = new StringBuilder();
+            data.ToList().ForEach(a => {
+                var bytes = BitConverter.GetBytes((short)a).Reverse().ToArray();
+                sb.Append(Encoding.ASCII.GetString(bytes));
+            });
+            return sb.ToString();
+        }
+
+        /// <summary>
+        /// 鍗佽繘鍒惰浆鎹负2杩涘埗锛堣嚜鍔ㄨˉ鍏�6浣嶏級
+        /// </summary>
+        /// <param name="data"></param>
+        /// <returns></returns>
+        public static string Completion(int data)
+        {
+            var result = Convert.ToString(data, 2).PadLeft(16, '0');
+            return result;
+        }
+
+        /// <summary>
+        /// ascii杞�0杩涘埗锛堥�杩�6杩涘埗涓浆锛�+        /// </summary>
+        /// <param name="data"></param>
+        /// <returns></returns>
+        public static string AsciiToTen(string data)
+        {
+            byte[] oneSixbad = System.Text.ASCIIEncoding.Default.GetBytes(data);
+            StringBuilder oneSixsb = new StringBuilder();
+            foreach (byte b in oneSixbad)
+            {
+                oneSixsb.Append(b.ToString("x"));
+            }
+            int oneSixA2 = Convert.ToInt32(oneSixsb.ToString(), 16);
+            return oneSixA2.ToString();
+        }
+
+        #region   鍙犵洏鏈烘壒閲忓啓鍏ユ暟鎹�+
+        #region   浜у搧鍨嬪彿鍒嗙澶勭悊鏂规硶
+        //public static int[] DiePan(WMSInfo machine)
+        //{
+        //    //鍋忕Щ閲�+11 閫氶亾鑼冨洿锛�40311 ~ 40370
+        //    CMMLog.Info($"杩涘叆DiePan鏁版嵁澶勭悊鏂规硶");
+        //    //10~19閫氶亾
+        //    int[] num = new int[60];
+        //    int[] num3 = new int[40];
+        //    int a = 0;//鎵樼洏鐮佸鐞�+        //    for (int b = 0; b <= 2; b++)
+        //    {
+        //        num[b] = int.Parse(AsciiToTen(machine.trayCode.Substring(a, 2)));
+        //        a = a + 2;
+        //    }
+        //    num[3] = int.Parse(AsciiToTen(machine.location));//鍖呰鏈哄彿
+        //    for (int b = 4; b <= 5; b++)
+        //    {
+        //        int k = b % 2 == 0 ? 0 : 16;
+        //        num[b] = Convert.ToInt32(Convert.ToString(int.Parse(machine.productWeight), 2).PadLeft(32, '0').ToString().Substring(k, 16), 2);
+        //    }
+        //    for (int b = 6; b <= 7; b++)
+        //    {
+        //        int k = b % 2 == 0 ? 0 : 16;
+        //        num[b] = Convert.ToInt32(Convert.ToString(int.Parse(machine.trayCodeWeight), 2).PadLeft(32, '0').ToString().Substring(k, 16), 2);
+        //    }
+        //    for (int b = 8; b <= 9; b++)
+        //    {
+        //        int k = b % 2 == 0 ? 0 : 16;
+        //        num[b] = Convert.ToInt32(Convert.ToString(int.Parse(machine.oneTrayWeight), 2).PadLeft(32, '0').ToString().Substring(k, 16), 2);
+        //    }
+        //    for (int b = 10; b <= 12; b++) num[b] = 0;// 鍙犲寘鍚庡疄闄呴噸閲�&& 澶嶇О缁撴灉 榛樿锛�
+        //    num[13] = string.IsNullOrEmpty(machine.palletLayers) ? 0 : int.Parse(machine.palletLayers);//鏄惁闇�鍙犳墭鐩�+        //    num[14] = machine.addState;//鏄惁闇�鍙犲寘
+        //    num[15] = int.Parse(machine.packageCode);//琚嬪彿
+        //    //鏃堕棿鎴冲鐞�+        //    string timeStamp = ProcessHelper.GetTimeStamp(32, 1, 1);
+        //    for (int b = 16; b <= 17; b++)
+        //    {
+        //        int k = b % 2 == 0 ? 0 : 16;
+        //        num[b] = Convert.ToInt32(Convert.ToString(int.Parse(timeStamp), 2).PadLeft(32, '0').ToString().Substring(k, 16), 2);
+        //    }
+        //    for (int b = 18; b <= 19; b++) num[b] = 0;//棰勭暀鐨勪袱涓�閬�榛樿锛�
+
+        //    //19 = 30  31 ~ 60 
+        //    //30~59閫氶亾  60~70閫氶亾
+        //    string pcHead = "";
+        //    string cpHead = "";
+        //    #region   31~60
+
+        //    string data = machine.itemPCode;
+        //    CMMLog.Info($"31~60data1_1:{data}");
+        //    if (data.Length % 2 != 0)
+        //    {
+        //        data = "0" + machine.itemPCode;
+        //        pcHead = "" + machine.itemPCode.Substring(0, 1);
+        //    }
+        //    CMMLog.Info($"31~60data1_2:{data}");
+        //    int x = data.Length / 2;
+        //    int aa = 0;
+        //    for (int i = 0; i <= x - 1; i++)
+        //    {
+        //        num3[i] = int.Parse(AsciiToTen(data.Substring(aa, 2)));
+        //        aa = aa + 2;
+        //    }
+        //    for (int m = x; m <= 29; m++) num3[m] = 0;//灏嗕骇鍝佹壒娆″彿鏃犳暟鎹殑閫氶亾鍏ㄩ儴缃负 0
+        //    CMMLog.Info($"itemPCode:" + JsonConvert.SerializeObject(num3));
+        //    #endregion
+
+        //    #region   61~70
+
+        //    string data2 = machine.itemCode;
+        //    CMMLog.Info($"61~70data2_1:{data2}");
+        //    if (data2.Length % 2 != 0)
+        //    {
+        //        data2 = "0" + machine.itemCode;
+        //        cpHead = "" + machine.itemCode.Substring(0, 1);
+        //    }
+        //    CMMLog.Info($"61~70data2_2:{data2}");
+        //    int y = data2.Length / 2;
+        //    CMMLog.Info($"{y}");
+        //    int aaa = 0;
+        //    //4 2 32 9 41 
+        //    for (int i = 30; i <= y + 29; i++)
+        //    {
+        //        num3[i] = int.Parse(AsciiToTen(data2.Substring(aaa, 2)));
+        //        CMMLog.Info(JsonConvert.SerializeObject(num3[i]));
+        //        aaa = aaa + 2;
+        //    }
+        //    int mm = y + 30;
+        //    CMMLog.Info($"mm:{mm}");
+        //    for (int mmm = mm; mmm <= 39; mmm++)
+        //    {
+        //        num3[mmm] = 0;
+        //        CMMLog.Info(JsonConvert.SerializeObject(num3[mmm]));
+        //    }
+        //    CMMLog.Info($"itemPCode+itemCode:{JsonConvert.SerializeObject(num3)}");
+        //    #endregion
+
+        //    for (int i = 20; i <= 60; i++) num[i] = num3[i - 20];
+
+        //    // 濡傛灉 浜у搧鎵规鍙�鎴栬� 浜у搧鍨嬪彿 浣嶆暟 涓�濂囨暟锛屽垯灏嗘彁鍓嶅彇鍑虹殑 棣栧瓧绗�閲嶆柊杞爜 鍐欏叆 鍏舵墍瀵瑰簲閫氶亾鍖哄煙鐨�棣栭�閬�+        //    if (pcHead != "" || cpHead != "")
+        //    {
+        //        if (pcHead != "") num[20] = int.Parse(AsciiToTen(pcHead));
+        //        if (cpHead != "") num[50] = int.Parse(AsciiToTen(cpHead));
+        //        CMMLog.Info($"浜у搧鍨嬪彿鎴栨壒娆″彿鏁伴噺涓哄鏁帮紝鐗瑰皢棣栦綅鍙栧嚭鍗曠嫭澶勭悊锛屼互涓嬩负鎵规鍙峰拰浜у搧鍨嬪彿鐨勫崄杩涘埗鏁板�{num[20]},{num[50]}");
+        //    }
+        //    CMMLog.Info($"DiePan鏁版嵁澶勭悊鏂规硶瀹屾瘯");
+
+        //    return num;
+        //}
+        #endregion
+
+        public static int[] DiePan(WMSInfo machine)
+        {
+            //鍋忕Щ閲�+11 閫氶亾鑼冨洿锛�40311 ~ 40370
+            CMMLog.Info($"鍙犵洏鏈烘暟鎹鐞�");
+            //10~19閫氶亾
+            int[] num = new int[60];//鎬婚暱搴︼細60
+
+            #region   0~19 => 11~30
+
+            int a = 0;//鎵樼洏鐮佸鐞�+            for (int b = 0; b <= 2; b++)
+            {
+                num[b] = int.Parse(AsciiToTen(machine.trayCode.Substring(a, 2)));
+                a = a + 2;
+            }
+            num[3] = int.Parse(AsciiToTen(machine.location));//鍖呰鏈哄彿
+            for (int b = 4; b <= 5; b++)
+            {
+                int k = b % 2 == 0 ? 0 : 16;
+                num[b] = Convert.ToInt32(Convert.ToString(int.Parse(machine.productWeight), 2).PadLeft(32, '0').ToString().Substring(k, 16), 2);
+            }
+            for (int b = 6; b <= 7; b++)
+            {
+                int k = b % 2 == 0 ? 0 : 16;
+                num[b] = Convert.ToInt32(Convert.ToString(int.Parse(machine.trayCodeWeight), 2).PadLeft(32, '0').ToString().Substring(k, 16), 2);
+            }
+            for (int b = 8; b <= 9; b++)
+            {
+                int k = b % 2 == 0 ? 0 : 16;
+                num[b] = Convert.ToInt32(Convert.ToString(int.Parse(machine.oneTrayWeight), 2).PadLeft(32, '0').ToString().Substring(k, 16), 2);
+            }
+            for (int b = 10; b <= 12; b++) num[b] = 0;// 鍙犲寘鍚庡疄闄呴噸閲�&& 澶嶇О缁撴灉 榛樿锛�
+            num[13] = string.IsNullOrEmpty(machine.palletLayers) ? 0 : int.Parse(machine.palletLayers);//鏄惁闇�鍙犳墭鐩�+            num[14] = machine.addState;//鏄惁闇�鍙犲寘
+            num[15] = int.Parse(machine.packageCode);//琚嬪彿
+            //鏃堕棿鎴冲鐞�+            string timeStamp = ProcessHelper.GetTimeStamp(32, 1, 1);
+            for (int b = 16; b <= 17; b++)
+            {
+                int k = b % 2 == 0 ? 0 : 16;
+                num[b] = Convert.ToInt32(Convert.ToString(int.Parse(timeStamp), 2).PadLeft(32, '0').ToString().Substring(k, 16), 2);
+            }
+            for (int b = 18; b <= 19; b++) num[b] = 0;//棰勭暀鐨勪袱涓�閬�榛樿锛�
+
+            #endregion
+
+            string pcHead = "";
+            string cpHead = "";
+
+            #region  20~49 => 31~60 浜у搧鎵规鍙�+
+            string data = machine.itemPCode;
+            CMMLog.Info($"31~60data1_1:{data}");
+            if (data.Length % 2 != 0)
+            {
+                data = "0" + machine.itemPCode;
+                pcHead = "" + machine.itemPCode.Substring(0, 1);
+            }
+            CMMLog.Info($"31~60data1_2:{data}");
+            //瀛楃涓查暱搴�/ 2 = 鍐欏叆閫氶亾鏁伴噺(涓や綅涓�浆) 鍒楋細 3L0050 鍐欏叆涓変釜閫氶亾
+            int maxLength = 19 + (data.Length / 2);// data.Length / 2 鑷冲皯涓�1
+            int aa = 0;
+            for (int i = 20; i <= maxLength; i++)
+            {
+                num[i] = int.Parse(AsciiToTen(data.Substring(aa, 2)));
+                aa = aa + 2;
+            }
+            for (int x = maxLength + 1; x <= 49; x++) num[x] = 0;//灏嗕骇鍝佹壒娆″彿鏃犳暟鎹殑閫氶亾鍏ㄩ儴缃负 0
+            #endregion
+
+            #region   50~59 => 61~70 浜у搧鍨嬪彿
+
+            string data2 = machine.itemCode;
+            CMMLog.Info($"61~70data2_1:{data2}");
+            if (data2.Length % 2 != 0)
+            {
+                data2 = "0" + machine.itemCode;
+                cpHead = "" + machine.itemCode.Substring(0, 1);
+            }
+            CMMLog.Info($"61~70data2_2:{data2}");
+            maxLength = 49 + (data2.Length / 2);
+            int aaa = 0;
+            for (int i = 50; i <= maxLength; i++)
+            {
+                num[i] = int.Parse(AsciiToTen(data2.Substring(aaa, 2)));
+                aaa = aaa + 2;
+            }
+            for (int x = maxLength + 1; x <= 59; x++) num[x] = 0;//灏嗕骇鍝佸瀷鍙锋棤鏁版嵁鐨勯�閬撳叏閮ㄧ疆涓�
+            #endregion
+
+            // 濡傛灉 浜у搧鎵规鍙�鎴栬� 浜у搧鍨嬪彿 浣嶆暟 涓�濂囨暟锛屽垯灏嗘彁鍓嶅彇鍑虹殑 棣栧瓧绗�閲嶆柊杞爜 鍐欏叆 鍏舵墍瀵瑰簲閫氶亾鍖哄煙鐨�棣栭�閬�+            if (pcHead != "") num[20] = int.Parse(AsciiToTen(pcHead));
+            if (cpHead != "") num[50] = int.Parse(AsciiToTen(cpHead));
+            if (pcHead != "" || cpHead != "") CMMLog.Info($"浜у搧鍨嬪彿鎴栨壒娆″彿鏁伴噺涓哄鏁帮紝鐗瑰皢棣栦綅鍙栧嚭鍗曠嫭澶勭悊锛屼互涓嬩负鎵规鍙峰拰浜у搧鍨嬪彿鐨勫崄杩涘埗鏁板�{num[20]},{num[50]}");
+            
+            CMMLog.Info($"鍙犵洏鏈烘暟鎹鐞嗗畬姣曪細{JsonConvert.SerializeObject(num)}");
+
+            return num;
+        }
+
+
+        public static int[] DiePanTwo(MachineInfoTwo machine)
+        {
+            //鍋忕Щ閲�+11 閫氶亾鑼冨洿锛�40311 ~ 40370
+            CMMLog.Info($"鍙犵洏鏈烘暟鎹鐞�");
+            //10~19閫氶亾
+            int[] num = new int[60];//鎬婚暱搴︼細60
+
+            #region   0~19 => 11~30
+
+        //    int a = 0;//鎵樼洏鐮佸鐞�+        //    for (int b = 0; b <= 2; b++)
+        //    {
+        //        num[b] = int.Parse(AsciiToTen(machine.trayCode.Substring(a, 2)));
+        //        a = a + 2;
+        //    }
+        //    num[3] = int.Parse(AsciiToTen(machine.location));//鍖呰鏈哄彿
+        //    for (int b = 4; b <= 5; b++)
+        //    {
+        //        int k = b % 2 == 0 ? 0 : 16;
+        //        num[b] = Convert.ToInt32(Convert.ToString(int.Parse(machine.productWeight), 2).PadLeft(32, '0').ToString().Substring(k, 16), 2);
+        //    }
+        //    for (int b = 6; b <= 7; b++)
+        //    {
+        //        int k = b % 2 == 0 ? 0 : 16;
+        //        num[b] = Convert.ToInt32(Convert.ToString(int.Parse(machine.trayCodeWeight), 2).PadLeft(32, '0').ToString().Substring(k, 16), 2);
+        //    }
+        //    for (int b = 8; b <= 9; b++)
+        //    {
+        //        int k = b % 2 == 0 ? 0 : 16;
+        //        num[b] = Convert.ToInt32(Convert.ToString(int.Parse(machine.oneTrayWeight), 2).PadLeft(32, '0').ToString().Substring(k, 16), 2);
+        //    }
+        //    num[10] = 0;  //鎵樼洏绫诲瀷 棰勭暀
+        //    num[11] = machine.addState;//鏄惁闇�鍙犲寘
+        //    num[12] = int.Parse(machine.packageCode);//琚嬪彿
+        //    //鏃堕棿鎴冲鐞�+        //    string timeStamp = ProcessHelper.GetTimeStamp(32, 1, 1);
+        //    for (int b = 16; b <= 17; b++)
+        //    {
+        //        int k = b % 2 == 0 ? 0 : 16;
+        //        num[b] = Convert.ToInt32(Convert.ToString(int.Parse(timeStamp), 2).PadLeft(32, '0').ToString().Substring(k, 16), 2);
+        //    }
+        //    for (int b = 18; b <= 19; b++) num[b] = 0;//棰勭暀鐨勪袱涓�閬�榛樿锛�
+        //
+        //    #endregion
+        //
+        //    string pcHead = "";
+        //    string cpHead = "";
+        //
+        //    #region  20~49 => 31~60 浜у搧鎵规鍙�+        //
+        //    string data = machine.itemPCode;
+        //    CMMLog.Info($"31~60data1_1:{data}");
+        //    if (data.Length % 2 != 0)
+        //    {
+        //        data = "0" + machine.itemPCode;
+        //        pcHead = "" + machine.itemPCode.Substring(0, 1);
+        //    }
+        //    CMMLog.Info($"31~60data1_2:{data}");
+        //    //瀛楃涓查暱搴�/ 2 = 鍐欏叆閫氶亾鏁伴噺(涓や綅涓�浆) 鍒楋細 3L0050 鍐欏叆涓変釜閫氶亾
+        //    int maxLength = 19 + (data.Length / 2);// data.Length / 2 鑷冲皯涓�1
+        //    int aa = 0;
+        //    for (int i = 20; i <= maxLength; i++)
+        //    {
+        //        num[i] = int.Parse(AsciiToTen(data.Substring(aa, 2)));
+        //        aa = aa + 2;
+        //    }
+        //    for (int x = maxLength + 1; x <= 49; x++) num[x] = 0;//灏嗕骇鍝佹壒娆″彿鏃犳暟鎹殑閫氶亾鍏ㄩ儴缃负 0
+        //    #endregion
+        //
+        //    #region   50~59 => 61~70 浜у搧鍨嬪彿
+        //
+        //    string data2 = machine.itemCode;
+        //    CMMLog.Info($"61~70data2_1:{data2}");
+        //    if (data2.Length % 2 != 0)
+        //    {
+        //        data2 = "0" + machine.itemCode;
+        //        cpHead = "" + machine.itemCode.Substring(0, 1);
+        //    }
+        //    CMMLog.Info($"61~70data2_2:{data2}");
+        //    maxLength = 49 + (data2.Length / 2);
+        //    int aaa = 0;
+        //    for (int i = 50; i <= maxLength; i++)
+        //    {
+        //        num[i] = int.Parse(AsciiToTen(data2.Substring(aaa, 2)));
+        //        aaa = aaa + 2;
+        //    }
+        //    for (int x = maxLength + 1; x <= 59; x++) num[x] = 0;//灏嗕骇鍝佸瀷鍙锋棤鏁版嵁鐨勯�閬撳叏閮ㄧ疆涓�
+            #endregion
+        //
+        //    // 濡傛灉 浜у搧鎵规鍙�鎴栬� 浜у搧鍨嬪彿 浣嶆暟 涓�濂囨暟锛屽垯灏嗘彁鍓嶅彇鍑虹殑 棣栧瓧绗�閲嶆柊杞爜 鍐欏叆 鍏舵墍瀵瑰簲閫氶亾鍖哄煙鐨�棣栭�閬�+        //    if (pcHead != "") num[20] = int.Parse(AsciiToTen(pcHead));
+        //    if (cpHead != "") num[50] = int.Parse(AsciiToTen(cpHead));
+        //    if (pcHead != "" || cpHead != "") CMMLog.Info($"浜у搧鍨嬪彿鎴栨壒娆″彿鏁伴噺涓哄鏁帮紝鐗瑰皢棣栦綅鍙栧嚭鍗曠嫭澶勭悊锛屼互涓嬩负鎵规鍙峰拰浜у搧鍨嬪彿鐨勫崄杩涘埗鏁板�{num[20]},{num[50]}");
+        //
+        //    CMMLog.Info($"鍙犵洏鏈烘暟鎹鐞嗗畬姣曪細{JsonConvert.SerializeObject(num)}");
+
+            return num;
+        }
+
+        internal static void PackingLineComplete(string ip)
+        {
+            var plc = Settings.GetPlcInfo().Where(a => a.ip == ip).FirstOrDefault();
+            if (plc != null)
+            {
+                //鍐欏叆鍖呰鏈�-瀹夊叏闂ㄥ叧闂ㄦ寚浠�+                var writeRes = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                {
+                    host = ip,
+                    addr = plc.writeAddr + 2,
+                    data = 3,
+                    port = plc.port
+                });
+                CMMLog.Debug($"鍐欏叆璁惧{plc.location}閫氶亾{plc.writeAddr + 2}閲岄潰鏁版嵁涓�.");
+            }
+            else CMMLog.Debug($"鍖呰绾跨┖鎵樹笂绾匡紝3锛宨p=null!");
+        }
+
+        internal static void BZBKComplete(string PlcBitCache01, string Extend = "")
+        {
+            var plcInfo = Settings.GetPlcInfo().Where(a => a.location == PlcBitCache01).FirstOrDefault();
+            var writeRes = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+            {
+                host = plcInfo.ip,
+                addr = plcInfo.writeAddr + 2,
+                data = 3,
+                port = plcInfo.port
+            });
+            CMMLog.Debug($"鍐欏叆璁惧{plcInfo.location}閫氶亾{plcInfo.writeAddr + 2}閲岄潰鏁版嵁3");
+            var result = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+            {
+                dataNum = 1,
+                addr = plcInfo.readAddr + 2,
+                host = plcInfo.ip,
+                port = plcInfo.port
+            });
+            if (result != null && result.errCode == 0)
+            {
+                //3锛氬畨鍏ㄩ棬鍏抽棴锛岀瓑寰呭叧闂埌浣嶅悗锛屾竻闆舵湰閫氶亾
+                if (result.result[0] == 3)
+                {
+                    CMMLog.Debug($"璇诲彇璁惧{plcInfo.location}閫氶亾{plcInfo.readAddr + 2}閲岄潰鏁版嵁3");
+                    writeRes = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                    {
+                        host = plcInfo.ip,
+                        addr = plcInfo.writeAddr + 2,
+                        data = 0,
+                        port = plcInfo.port
+                    });
+                }
+            }
+        }
+
+        internal static void writeStackingMouth6(string loca, string taskNo)
+        {
+            var plc = Settings.GetPlcInfo().Where(a => a.location == loca && a.enable == 1).FirstOrDefault();
+            CMMLog.Info($"3妤肩紦瀛樻灦鍏ュ彔鎵�鏀跺埌淇″彿6锛屾煡璇㈣澶囦俊鎭細{JsonConvert.SerializeObject(plc)}銆�);
+            if (plc != null)
+            {
+                var eleInfo = MongoDBSingleton.Instance.FindOne<elevatorTask>("elevatorTask");
+                if(eleInfo != null)
+                {
+                    var task = eleInfo.task_mst;
+                    CMMLog.Info($"3妤肩紦瀛樻灦鍏ュ彔鎵�鏀跺埌淇″彿6锛屾煡璇换鍔′俊鎭細{JsonConvert.SerializeObject(task)}銆�);
+                    var machine = eleInfo.wmsInfo;
+                    CMMLog.Info($"3妤肩紦瀛樻灦鍏ュ彔鎵�鏀跺埌淇″彿6锛屾煡璇MSInfo琛ㄤ俊鎭細{JsonConvert.SerializeObject(machine)}銆�);
+                    if (machine != null)
+                    {
+                        int[] num = DiePan(machine);
+
+                        CMMLog.Info($"send num:{JsonConvert.SerializeObject(num)}");
+                        var wirteall01 = OITcpHelper.RegisterWriteOutPutMulti(new OITcpHelper.RegisterWriteOutPutModelMulti
+                        {
+                            addr = plc.writeAddr + 10,
+                            host = plc.ip,
+                            port = plc.port,
+                            data = num
+                        });
+
+                        //WriteCacheStackingData(plc, task, machine);
+
+                        var wirte = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                        {
+                            addr = plc.writeAddr + 1,
+                            host = plc.ip,
+                            port = plc.port,
+                            data = 2
+                        });
+                    }
+                }
+                else
+                {
+                    CMMLog.Info($"3妤肩紦瀛樻灦鍏ュ彔鎵�鐢垫涓棿琛ㄥ紓甯�);
+                }
+            }
+        }
+
+        private static void WriteCacheStackingData(Settings.PlcInfo plc, TN_I_TASK_MST task, WMSInfo machine)
+        {
+            var machineTwo = MongoDBSingleton.Instance.FindOne<MachineInfoTwo>(Query.EQ("trayCode", task.CN_S_BATCH_NO), "MachineInfoTwo");
+            CMMLog.Info($"3妤肩紦瀛樻灦鍏ュ彔鎵�鏀跺埌淇″彿6锛屾煡璇achineInfoTwo琛ㄤ俊鎭細{JsonConvert.SerializeObject(machineTwo)}銆�);
+            if (machineTwo != null)
+            {
+                int[] num = DiePanTwo(machine, machineTwo);
+                CMMLog.Info($"3妤肩紦瀛樻灦鍏ュ彔鎵�鍐欏叆鏁版嵁锛歿JsonConvert.SerializeObject(num)},IPort:{plc.ip},{plc.port}");
+                var wirteall01 = OITcpHelper.RegisterWriteOutPutMulti(new OITcpHelper.RegisterWriteOutPutModelMulti
+                {
+                    addr = plc.writeAddr + 7,
+                    host = plc.ip,
+                    port = plc.port,
+                    data = num
+                });
+                CMMLog.Info($"3妤肩紦瀛樻灦鍏ュ彔鎵�杩斿洖鏁版嵁锛歿JsonConvert.SerializeObject(wirteall01)},IPort:{plc.ip},{plc.port}");
+                if (wirteall01.errCode == 0)
+                {
+                    MongoDBSingleton.Instance.Remove<MachineInfoTwo>(Query.EQ("trayCode", task.CN_S_BATCH_NO), "MachineInfoTwo", RemoveFlags.Single);
+                }
+            }
+        }
+
+        private static int[] DiePanTwo(WMSInfo machine, MachineInfoTwo machineInfoTwo)
+        {
+            var ErpItemInfo = new SqlHelper<object>().GetInstance(false).Queryable<T_JY_MATERIALSync>().Where(x => x.FNumber == machineInfoTwo.materialCode).First();
+            CMMLog.Info($"3妤肩紦瀛樻灦鍏ュ彔鎵�鏀跺埌淇″彿6锛屾煡璇_JY_MATERIALSync琛ㄤ俊鎭細{JsonConvert.SerializeObject(ErpItemInfo)}銆�);
+
+            CMMLog.Info($"鍙犵洏鏈烘暟鎹鐞嗐�");
+            //鍋忕Щ閲�+11 閫氶亾鑼冨洿锛�40311 ~ 40390
+            //10~19閫氶亾
+            int[] num = new int[94];//鎬婚暱搴︼細94
+            var arr = JsonConvert.DeserializeObject<List<int>>(machineInfoTwo.jsonData);
+            #region   0~21 => 9~30
+            num[0] = 1;
+            CMMLog.Info($"1111111111銆�);
+            for (int b = 1; b <= 2; b++)
+            {
+                var arrTwo = machineInfoTwo.oneTrayWeightFC.Split(',').ToList();
+                num[b] = int.Parse(arrTwo[b - 1]);//澶嶇О閲嶉噺
+                //int k = b % 2 == 0 ? 0 : 16;
+                //num[b] = Convert.ToInt32(Convert.ToString(int.Parse(machineInfoTwo.oneTrayWeightFC), 2).PadLeft(32, '0').ToString().Substring(k, 16), 2);
+            }
+            CMMLog.Info($"2222222銆�);
+            int a = 0;//鎵樼洏鐮佸鐞�+            for (int b = 3; b <= 5; b++)
+            {
+                num[b] = int.Parse(AsciiToTen(machine.trayCode.Substring(a, 2)));
+                a = a + 2;
+            }
+            CMMLog.Info($"3333333333333銆�);
+            num[6] = int.Parse(machine.location);//鍖呰鏈哄彿
+            CMMLog.Info($"4444444444444銆�);
+            for (int b = 7; b <= 8; b++)
+            {
+                num[b] = arr[b - 3];//浜у搧闇�眰閲嶉噺
+                //int k = b % 2 == 0 ? 0 : 16;
+                //num[b] = Convert.ToInt32(Convert.ToString(int.Parse(machine.productWeight), 2).PadLeft(32, '0').ToString().Substring(k, 16), 2);
+            }
+            CMMLog.Info($"5555555555555銆�);
+            for (int b = 9; b <= 10; b++)
+            {
+                num[b] = arr[b - 3];//鍗曟墭姣涢噸
+                //int k = b % 2 == 0 ? 0 : 16;
+                //num[b] = Convert.ToInt32(Convert.ToString(int.Parse(machineInfoTwo.trayCodeWeight), 2).PadLeft(32, '0').ToString().Substring(k, 16), 2);
+            }
+            CMMLog.Info($"66666666銆�);
+            for (int b = 11; b <= 12; b++)
+            {
+                num[b] = arr[b - 3];//鍗曟墭鍑�噸
+                //int k = b % 2 == 0 ? 0 : 16;
+                //num[b] = Convert.ToInt32(Convert.ToString(int.Parse(machineInfoTwo.oneTrayWeight), 2).PadLeft(32, '0').ToString().Substring(k, 16), 2);
+            }
+            CMMLog.Info($"77777777銆�);
+            num[13] = 0; //鐗╂枡鎵撳寘绫诲瀷
+            CMMLog.Info($"88888888銆�);
+            num[14] = machine.addState; //鏄惁闇�鍙犲寘
+            CMMLog.Info($"9999999999999銆�);
+            num[15] = int.Parse(machine.packageCode);//琚嬪彿
+            for (int b = 16; b <= 20; b++)
+            {
+                num[b] = arr[b - 3];//鍛樺伐缂栧彿
+            }
+            for (int b = 21; b <= 22; b++)
+            {
+                num[b] = arr[b - 3];//鐢熶骇鏃ユ湡
+            }
+
+            #endregion
+
+            string pcHead = "";
+            string pcTail = "";
+            string cpHead = "";
+            string mtHead = "";// 璁惧鐨勭湡瀹炵墿鏂欑紪鐮�+
+            #region  23~42 => 31~50 浜у搧鎵规鍙�+
+            string data = machineInfoTwo.lotNo;
+            CMMLog.Info($"31~50data1_1:{data}");
+            if (data.Length % 2 != 0)
+            {
+                //data = "0" + machineInfoTwo.lotNo;
+                //pcHead = "" + machineInfoTwo.lotNo.Substring(0, 1);
+
+                pcTail = machineInfoTwo.lotNo.Substring(data.Length - 1, 1) + "";
+                CMMLog.Info($"pcTail:{pcTail}");
+                data = machineInfoTwo.lotNo + " ";
+            }
+            CMMLog.Info($"31~50data1_2:{data}");
+            //瀛楃涓查暱搴�/ 2 = 鍐欏叆閫氶亾鏁伴噺(涓や綅涓�浆) 鍒楋細 3L0050 鍐欏叆涓変釜閫氶亾
+            int maxLength = 22 + (data.Length / 2);// data.Length / 2 鑷冲皯涓�1
+            int maxLength2 = maxLength;
+            int aa = 0;
+            for (int i = 23; i <= maxLength; i++)
+            {
+                num[i] = int.Parse(AsciiToTen(data.Substring(aa, 2)));
+                aa = aa + 2;
+            }
+            for (int x = maxLength + 1; x <= 42; x++) num[x] = 0;//灏嗕骇鍝佹壒娆″彿鏃犳暟鎹殑閫氶亾鍏ㄩ儴缃负 0
+            #endregion
+
+            #region   43~52 => 51~60 浜у搧鍨嬪彿
+
+            ERPService.HandleItemInfoChina(ErpItemInfo.FSpecification, 43, 52, num);// 涓枃澶勭悊 43~52 51~60
+
+            //string data2 = machine.itemCode;
+            //CMMLog.Info($"51~50data2_1:{data2}");
+            //if (data2.Length % 2 != 0)
+            //{
+            //    data2 = "0" + machine.itemCode;
+            //    cpHead = "" + machine.itemCode.Substring(0, 1);
+            //}
+            //CMMLog.Info($"51~60data2_2:{data2}");
+            //maxLength = 39 + (data2.Length / 2);
+            //int aaa = 0;
+            //for (int i = 40; i <= maxLength; i++)
+            //{
+            //    num[i] = int.Parse(AsciiToTen(data2.Substring(aaa, 2)));
+            //    aaa = aaa + 2;
+            //}
+            //for (int x = maxLength + 1; x <= 49; x++) num[x] = 0;//灏嗕骇鍝佸瀷鍙锋棤鏁版嵁鐨勯�閬撳叏閮ㄧ疆涓�
+            #endregion
+
+            #region   53~67 => 61~75 鐗╂枡缂栫爜
+
+            string data3 = machineInfoTwo.materialCode;
+            CMMLog.Info($"61~75data3_1:{data3}");
+            if (data3.Length % 2 != 0)
+            {
+                data3 = "0" + machineInfoTwo.materialCode;
+                mtHead = "" + machineInfoTwo.materialCode.Substring(0, 1);
+            }
+            CMMLog.Info($"61~75data3_2:{data3}");
+            maxLength = 52 + (data3.Length / 2);
+            int aaaa = 0;
+            for (int i = 53; i <= maxLength; i++)
+            {
+                num[i] = int.Parse(AsciiToTen(data3.Substring(aaaa, 2)));
+                aaaa = aaaa + 2;
+            }
+            for (int x = maxLength + 1; x <= 67; x++) num[x] = 0;//灏嗕骇鍝佸瀷鍙锋棤鏁版嵁鐨勯�閬撳叏閮ㄧ疆涓�
+            #endregion
+
+            ERPService.HandleItemInfoChina(ErpItemInfo.FName, 68, 87, num);// 涓枃澶勭悊 68~87 76~95
+            ERPService.HandleItemInfo(ErpItemInfo.FStoreUnit, 88, 92, num);// 88~92 96~100
+            CMMLog.Info($"{num.Length}");
+            num[93] = int.Parse(machineInfoTwo.organizeCode); //缁勭粐缂栫爜
+            // 濡傛灉 浜у搧鎵规鍙�鎴栬� 浜у搧鍨嬪彿 浣嶆暟 涓�濂囨暟锛屽垯灏嗘彁鍓嶅彇鍑虹殑 棣栧瓧绗�閲嶆柊杞爜 鍐欏叆 鍏舵墍瀵瑰簲閫氶亾鍖哄煙鐨�棣栭�閬�+            //if (pcHead != "") num[23] = int.Parse(AsciiToTen(pcHead));
+            if (pcTail != "") num[maxLength2] = tailToTen(pcTail);
+            if (cpHead != "") num[43] = int.Parse(AsciiToTen(cpHead));
+            if (mtHead != "") num[53] = int.Parse(AsciiToTen(mtHead));
+            if (pcHead != "" || cpHead != "") CMMLog.Info($"浜у搧鍨嬪彿鎴栨壒娆″彿鏁伴噺涓哄鏁帮紝鐗瑰皢棣栦綅鍙栧嚭鍗曠嫭澶勭悊锛屼互涓嬩负鎵规鍙峰拰浜у搧鍨嬪彿鐨勫崄杩涘埗鏁板�{num[23]},{num[53]}");
+
+            CMMLog.Info($"鍙犵洏鏈烘暟鎹鐞嗗畬姣曪細{JsonConvert.SerializeObject(num)}");
+
+            return num;
+        }
+
+        private static int tailToTen(string Tail)
+        {
+            char inputChar = Tail[0]; // 鑾峰彇瀛楃涓茬殑绗竴涓瓧绗�+            int asciiValue = (int)inputChar; // 杞崲涓篈SCII鐮�+            string hexValue = asciiValue.ToString("X2"); // 杞崲涓�6杩涘埗
+            string binaryValue = Convert.ToString(asciiValue, 2).PadLeft(8, '0'); // 杞崲涓�浣嶄簩杩涘埗
+            string finalBinaryValue = binaryValue + "00000000"; // 琛�涓簩杩涘埗0
+            int finalDecimalValue = Convert.ToInt32(finalBinaryValue, 2); // 杞崲涓�0杩涘埗
+
+            return finalDecimalValue;
+        }
+
+        internal static bool writeStackingMouth5(string loc)
+        {
+            bool result = false;
+            var plc = Settings.GetPlcInfo().Where(a => a.location == loc).FirstOrDefault();
+            if (plc != null)
+            {
+                var wirte = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                {
+                    addr = plc.writeAddr + 2,
+                    data = 1,
+                    host = plc.ip,
+                    port = plc.port
+                });
+                if (wirte.errCode == 0) result = true;
+            }
+            else CMMLog.Debug($"缂撳瓨鍏ュ彔鐩樻満锛�锛宲lc=null!");
+            return result;
+        }
+
+        internal static void changeSignal()
+        {
+            CMMLog.Info("鑽嗛棬鍙樻洿浠诲姟澶勭悊");
+
+            #region 璁$畻璁惧鍚堟牸鐜�+            //ip鍦板潃锛�0.50.65.30  绔彛锛�02
+            //鏌ヨ涓棿琛≒roductList 瀛楁overallPassRate寰��閬�0073鍐欏叆澶嶇О骞冲彴鍚堟牸鐜�閫氳繃machine鏌ヨ姣忎釜璁惧鐨勫悎鏍肩巼鍐欏叆40074 - 瀛楁
+            try
+            {
+                //CMMLog.Info("璁$畻璁惧鍚堟牸鐜囧鐞嗗紑濮�);
+                //var proInfo = MongoDBSingleton.Instance.Find<ProductList>(Query.EQ("Date", DateTime.Now.ToString("yyyy-MM-dd")), "ProductList");
+                //if (proInfo.Count > 0)
+                //{
+                //    CMMLog.Info($"{proInfo.Count}");
+                //    var sum = proInfo.Count;
+                //    int[] num = new int[15];
+                //    proInfo.ForEach(a =>
+                //    {
+                //        CMMLog.Info("11111111111111111");
+                //        CMMLog.Info(JsonConvert.SerializeObject(a));
+                //        if (string.IsNullOrEmpty(a.machine))
+                //        {
+                //            num[0] = (int)a.overallPassRate;
+                //        }
+                //        else
+                //        {
+                //            CMMLog.Info("----------------------");
+                //            string devInfo = Settings.GetPlcInfo().Where(it => it.location == a.machine).FirstOrDefault().device;
+                //            if (devInfo != null)
+                //            {
+                //                int m = int.Parse(devInfo);
+                //                CMMLog.Info($"{m}");
+                //                num[m] = (int)a.percentOfPass;
+                //            }
+                //            CMMLog.Info("222222222222222222");
+                //        }
+                //    });
+                //
+                //    CMMLog.Info($"bgip锛歿Settings.BGip}");
+                //    var writeRes0 = OITcpHelper.RegisterWriteOutPutMulti(new OITcpHelper.RegisterWriteOutPutModelMulti
+                //    {
+                //        host = Settings.BGip,
+                //        addr = 72,
+                //        data = num,//鍘熷厛鏄�,鍗曚釜鍐欏叆
+                //        port = int.Parse(Settings.BGPort)
+                //    });
+                //}
+            }
+            catch(Exception ex)
+            {
+                CMMLog.Info($"璁$畻鍚堟牸鐜囧鐞�寮傚父锛歿ex.Message}锛�);
+            }
+            
+            #endregion
+
+            #region 鍐欏叆娴佽浆绌烘墭鏁伴噺
+            //var emptyInfo = MongoDBSingleton.Instance.FindAll<BZEmptyPoint>();
+            //if(emptyInfo.Count > 0)
+            //{
+            //    
+            //    int x = 0;
+            //    foreach(var a in emptyInfo)
+            //    {
+            //        var address = x == 0 ? 70 : 71;
+            //        var write = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+            //        {
+            //            host = Settings.BGip,
+            //            addr = address,
+            //            dataNum = a.Quantity,
+            //            port = int.Parse(Settings.BGPort)
+            //        });
+            //        if (write.errCode == 0) x = x + 1;
+            //    }
+            //}
+            #endregion
+
+            #region 鍐欏叆灏忚溅鐘舵�
+            CMMLog.Info("杞﹁締鐘舵�澶勭悊锛氭墽琛屽紑濮嬶紒");
+            try
+            {
+                //鏌ヨ灏忚溅鐘舵�琛紝鍐欏叆灏忚溅鍧愭爣鍜屾柟鍚�骞跺啓鍏ヤ腑闂磋〃
+                var agvState = MongoDBSingleton.Instance.FindAll<AGV_STATE>();
+                if (agvState.Count > 0)
+                {
+                    CMMLog.Info($"{agvState.Count}");
+                    agvState.ForEach(a =>
+                    {
+                        var stateInfo = Settings.GetAGVStateList().Where(it => it.AgvNo == a.forkliftNo).FirstOrDefault();
+                        if (stateInfo != null)
+                        {
+                            CMMLog.Info(JsonConvert.SerializeObject(stateInfo));
+                            int[] num = new int[6];//鎬婚暱搴︼細6
+                            int divisor = 65536; // 闄ゆ暟
+                            int xPos = int.Parse(a.xPos);
+                            int yPos = int.Parse(a.yPos);
+
+                            int xquotient = xPos / divisor; // 璁$畻鍟嗘暟
+                            int xremainder = xPos % divisor; // 璁$畻浣欐暟
+                            num[0] = xquotient;
+                            num[1] = xremainder;
+
+                            int yquotient = yPos / divisor; // 璁$畻鍟嗘暟
+                            int yremainder = yPos % divisor; // 璁$畻浣欐暟
+                            num[2] = yquotient;
+                            num[3] = yremainder;
+
+                            num[4] = string.IsNullOrEmpty(a.Degree) ? 0 : int.Parse(a.Degree);
+                            //num[4] = int.Parse(a.Degree);
+                            num[5] = a.errCode != "0" || a.errCode2 != "0" || a.faildCode != "0" ? 2 : 0;
+
+                            //if (a.errCode != "0" || a.errCode2 != "0" || a.faildCode != "0") num[5] = 2;
+
+                            CMMLog.Info($"杞﹁締鐘舵�澶勭悊锛氬啓鍏ヨ溅杈嗘暟鎹細杞﹀彿锛歿a.forkliftNo},ip:{stateInfo.ip},port:{stateInfo.port},data:{JsonConvert.SerializeObject(num)}");
+                            var wirteal = OITcpHelper.RegisterWriteOutPutMulti(new OITcpHelper.RegisterWriteOutPutModelMulti
+                            {
+                                addr = stateInfo.writeAddr,
+                                host = stateInfo.ip,
+                                port = stateInfo.port,
+                                data = num
+                            });
+                        }
+                        else CMMLog.Info($"杞﹁締鐘舵�澶勭悊锛氬皬杞a.forkliftNo}鏈厤缃�);
+                    });
+                }
+                else CMMLog.Info("杞﹁締鐘舵�澶勭悊锛欰GV_STATE 杞﹁締鐘舵�琛ㄦ湭鑾峰彇鍒拌溅杈嗙姸鎬佹暟鎹紒");
+            }
+            catch (Exception ex)
+            {
+                CMMLog.Info($"杞﹁締鐘舵�澶勭悊-寮傚父锛歿ex.Message}锛�);
+            }
+            #endregion
+
+            Thread.Sleep(1000);
+        }
+
+        internal static void outWare(string taskNo,bool flage)
+        {
+            var plc = Settings.GetPlcInfo().Where(a => a.Extend == "2" && a.enable == 1).FirstOrDefault();
+            if(plc != null)
+            {
+                if (flage)
+                {
+                    //鐢靛姩闂ㄥ紑闂ㄦ楠わ細
+                    //1銆佸湪閫氶亾銆�0101銆戜腑鍐欏叆1锛屽彂閫佸紑闂ㄤ俊鍙�+                    //2銆佽鍙栭�閬撱�40001銆戜腑鐨勫�锛屽鏋滀负2锛岃〃绀哄紑闂ㄥ埌浣嶏紝閫氱煡灏忚溅杩涘幓
+                    var writeRes = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                    {
+                        host = plc.ip,
+                        port = plc.port,
+                        addr = plc.writeAddr,
+                        data = 1
+                    });
+                    CMMLog.Info($"鍙戦�寮�棬淇″彿锛屽湪閫氶亾{plc.writeAddr}涓啓鍏�锛宨p锛歿plc.ip}锛岀鍙o細{plc.port}");
+
+                    var result = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                    {
+                        dataNum = 2,
+                        addr = plc.readAddr,
+                        host = plc.ip,
+                        port = plc.port
+                    });
+
+                    if (result != null && result.errCode == 0)
+                    {
+                        CMMLog.Info($"鐢靛姩闂ㄥ紑闂ㄦ祦绋嬶細璇诲彇鐢靛姩闂ㄩ�閬撳彿涓猴細{plc.readAddr}閲岄潰鐨勫�涓簕result.result[0]},{plc.readAddr + 1}閲岄潰鐨勫�涓簕result.result[1]}");
+                        //Console.WriteLine($"鐢靛姩闂ㄥ紑闂ㄦ祦绋嬶細璇诲彇鐢靛姩闂ㄩ�閬撳彿涓猴細{plc.readAddr}閲岄潰鐨勫�涓簕result.result[0]},{plc.readAddr + 1}閲岄潰鐨勫�涓簕result.result[1]}");
+                        if (result.result[0] == 1 && result.result[1] == 1)
+                        {
+                            //鎺ㄩ�灏忚溅杩涘幓
+                            CMMLog.Info($"鐢靛姩闂ㄥ凡缁忔墦寮�紝闂ㄥ彿锛�");
+
+                            TSHelper.GoToAGV(taskNo, 10, 3);
+                        }
+                    }
+                    else CMMLog.Info($"鐢靛姩闂ㄥ紑闂ㄦ祦绋嬶細鏈鍙栧埌鍖呰鏈洪�閬搟plc.readAddr}閲岄潰鐨勬暟鎹紒锛侊紒result:{JsonConvert.SerializeObject(result)}");
+                }
+                else
+                {
+                    //鐢靛姩闂ㄥ叧闂ㄦ楠�+                    //1銆佸皬杞﹂�杩囩數鍔ㄩ棬鍚庯紝鍦ㄩ�閬撱�40101銆戜腑鍐欏叆2
+                    var writeRes = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                    {
+                        host = plc.ip,
+                        port = plc.port,
+                        addr = plc.writeAddr,
+                        data = 2
+                    });
+                    CMMLog.Info($"鐢靛姩闂ㄥ叧闂ㄦ祦绋嬶紝鍦ㄩ�閬搟plc.writeAddr}涓啓鍏�锛宨p锛歿plc.ip}锛岀鍙o細{plc.port}");
+                }
+            }
+            else CMMLog.Info($"闂ㄥ彿涓恒�2銆戠殑闂ㄦ湭鍦ㄩ厤缃枃浠堕厤缃垨鑰呮湭鍚敤");
+        }
+
+        /// <summary>
+        /// 缂撳瓨鏋跺叆鍏ユ枡鍙�+        /// </summary>
+        /// <param name="plc"></param>
+        /// <exception cref="NotImplementedException"></exception>
+        internal static void InInlet(Settings.PlcInfo plc)
+        {
+            var locInfo = MongoDBSingleton.Instance.FindOne<location>(Query.And(Query.EQ("S_LOC_STATE", "鏃�), Query.EQ("N_CURRENT_NUM", 0)), "location");
+            if(locInfo != null)
+            {
+                //鍒ゆ柇涓婃枡鏄惁鏈変换鍔�+                if (CheckEndFree(plc.location))
+                {
+                    var num = plc.device == "26" ? 1 : 2;
+
+                    var result1 = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                    {
+                        dataNum = 1,
+                        addr = plc.readAddr + 1,
+                        host = plc.ip,
+                        port = plc.port
+                    });
+                    if (result1 != null && result1.errCode == 0)
+                    {
+                        if (result1.result[0] == num)
+                        {
+                            //涓婃枡骞冲彴涓虹┖锛屽彲鐢熸垚浠诲姟
+                            var amsResult = AMSHelper.CreateTask(DateTime.Now.Ticks.ToString(), locInfo.S_LOC_CODE, plc.location, "3妤兼垚鍝佸嚭搴�, 0, locInfo.S_TRAY_CODE);
+                            if (amsResult.success)
+                            {
+                                CMMLog.Debug($"缂撳瓨鏋跺嚭搴撴祦绋嬶細AMS璋冪敤API鎴愬姛锛�);
+                            }
+                            else CMMLog.Debug($"缂撳瓨鏋跺嚭搴撴祦绋嬶細AMS璋冪敤API澶辫触锛屽紑濮嬮噸鏂拌皟鐢紒");
+                        }
+                    }
+                }
+            }
+        }
+
+        internal static void machine()
+        {
+            //MongoDBSingleton.Instance.Remove<packageInfoModel>(Query.EQ("weight2", ""), RemoveFlags.Single);
+
+
+            //鑾峰彇褰撳ぉ鐨勬墍鏈夊悎鏍肩巼
+            var proInfoList = MongoDBSingleton.Instance.Find<ProductList>(Query.EQ("Date", DateTime.Now.ToString("yyyy-MM-dd")), "ProductList").ToList();
+            if (proInfoList.Count > 0)
+            {
+                double sum = 0;
+                int flage = 0;
+                proInfoList.ForEach(a => {
+                    if (!string.IsNullOrEmpty(a.machine))
+                    {
+                        sum = sum + a.percentOfPass;
+                    }
+                    else flage = 1;
+                });
+
+                sum = flage == 0 ? Math.Round((sum / proInfoList.Count), 2) : Math.Round((sum / (proInfoList.Count - 1)), 2);
+
+                //璁$畻褰撳ぉ鐨勬�鍚堟牸鐜�+                var HGL = MongoDBSingleton.Instance.FindOne<ProductList>(Query.And(Query.EQ("Date", DateTime.Now.ToString("yyyy-MM-dd")), Query.EQ("machine", "")), "ProductList");
+                if (HGL != null)
+                {
+                    HGL.overallPassRate = sum;
+                    MongoDBSingleton.Instance.Update<ProductList>(Query.And(Query.EQ("Date", DateTime.Now.ToString("yyyy-MM-dd")), Query.EQ("machine", "")), Update.Set("overallPassRate", HGL.overallPassRate), UpdateFlags.None);
+                }
+                else
+                {
+                    ProductList machine = new ProductList
+                    {
+                        Date = DateTime.Now.ToString("yyyy-MM-dd"),
+                        machine = "",
+                        total = 0,
+                        qualifiedQuantity = 0,
+                        percentOfPass = 0,
+                        overallPassRate = sum
+                    };
+                    MongoDBSingleton.Instance.Insert(machine);
+                }
+            }
+        }
+
+        internal static void deleteTableTask()
+        {
+            var request = MongoDBSingleton.Instance.FindAll<packageInfoModel>();
+            if (request.Count > 0)
+            {
+                request.ForEach(a =>
+                {
+                    DateTime CreateTime = Convert.ToDateTime(a.time);
+                    CMMLog.Info($"deleteTableTask CreateTime:{CreateTime}");
+                    //if (DateTime.Now.Subtract(CreateTime).TotalHours > 48)
+                    if (DateTime.Now.Subtract(CreateTime).TotalDays > 7)
+                    {
+                        MongoDBSingleton.Instance.Remove<packageInfoModel>(Query.EQ("_id", a._id), "packageInfoModel", RemoveFlags.None);
+                    }
+                });
+            }
+
+            var requestTwo = MongoDBSingleton.Instance.FindAll<ProductList>();
+            if (requestTwo.Count > 0)
+            {
+                requestTwo.ForEach(a =>
+                {
+                    DateTime CreateTime = Convert.ToDateTime(a.Date + " 00:00:00");
+                    CMMLog.Info($"deleteTableTask CreateTime:{CreateTime}");
+                    if (DateTime.Now.Subtract(CreateTime).TotalDays > 7)
+                    {
+                        MongoDBSingleton.Instance.Remove<ProductList>(Query.EQ("_id", a._id), "ProductList", RemoveFlags.None);
+                    }
+                });
+            }
+        }
+
+        internal static void productOutWare(string endBit, string taskNo, bool action)
+        {
+            var plc = Settings.GetPlcInfo().Where(a => a.location == endBit).FirstOrDefault();
+            if (plc != null)
+            {
+                if (action)
+                {
+                    var writeRes = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                    {
+                        host = plc.ip,
+                        addr = plc.writeAddr,
+                        data = 1,
+                        port = plc.port
+                    });
+                    CMMLog.Debug($"鍐欏叆璁惧{plc.location}閫氶亾{plc.writeAddr}閲岄潰鏁版嵁涓�.");
+
+                    var result = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                    {
+                        dataNum = 2,
+                        addr = plc.readAddr,
+                        host = plc.ip,
+                        port = plc.port
+                    });
+                    CMMLog.Debug($"鏌ヨ璁惧{plc.location}閫氶亾{plc.readAddr}閲岄潰鏁版嵁涓簕result.result[0]}銆亄result.result[1]}.");
+                    if (result != null && result.errCode == 0)
+                    {
+                        if (result.result[0] == 1 && result.result[1] == 1)
+                        {
+                            //鎺ㄩ�灏忚溅杩涘叆
+                            TSHelper.GoToAGV(taskNo, 10, 3);
+                        }
+                    }
+                }
+                else
+                {
+                    var writeRes = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                    {
+                        host = plc.ip,
+                        addr = plc.writeAddr,
+                        data = 2,
+                        port = plc.port
+                    });
+                    CMMLog.Debug($"鍐欏叆璁惧{plc.location}閫氶亾{plc.writeAddr}閲岄潰鏁版嵁涓�.");
+                }
+            }
+        }
+
+        /// <summary>
+        /// 灏嗕腑闂磋〃 InAndOutQuantity 鐨勫�鍐欏叆閫氶亾
+        /// </summary>
+        /// <exception cref="NotImplementedException"></exception>
+        internal static void writeQtt()
+        {
+            //40075   148 UDint 鍑哄簱鏁伴噺锛堟�锛�		鍑哄簱鎬绘暟閲忥紙鎸夊勾璁$畻锛�+            //40077   152 UDint 鍏ュ簱鏁伴噺锛堟�锛�		鍏ュ簱鎬绘暟閲忥紙鎸夊勾璁$畻锛�+            //40081   160 Uint 鏈湀鍑哄簱鏁伴噺鎬昏
+            //40082   162 Uint 鏈湀鍏ュ簱鏁伴噺鎬昏
+            //40083   164 Uint 鏈懆鍑哄簱鏁伴噺鎬昏
+            //40084   166 Uint 鏈懆鍏ュ簱鏁伴噺鎬昏
+
+            int outTotal = 0; //鍑哄簱鏁伴噺鎬诲拰
+            int inTotal = 0; //鍏ュ簱鏁伴噺鎬诲拰
+            int outMonthTotal = 0; //鏈湀鍑哄簱鏁伴噺鎬诲拰
+            int intMonthTotal = 0; //鏈湀鍏ュ簱鏁伴噺鎬诲拰
+            int outWeekTotal = 0; //鏈懆鍑哄簱鏁伴噺鎬诲拰
+            int inWeekTotal = 0; //鏈懆鍏ュ簱鏁伴噺鎬诲拰
+
+            string week = GetWeekOfMonth(DateTime.Now).ToString(); //褰撳墠涓烘湰鏈堢殑绗嚑鍛�+
+            //鍑哄簱鎬绘暟
+            var outList = MongoDBSingleton.Instance.Find<InAndOutQuantity>(Query.And(Query.EQ("Type", "鍑哄簱"), Query.EQ("Year", DateTime.Now.ToString("yyyy"))), "InAndOutQuantity");
+            if(outList.Count > 0)
+            {
+                foreach(var a in outList)
+                {
+                    outTotal = outTotal + a.Quntity;
+                }
+            }
+
+            //鍏ュ簱鎬绘暟
+            var inList = MongoDBSingleton.Instance.Find<InAndOutQuantity>(Query.And(Query.EQ("Type", "鍏ュ簱"), Query.EQ("Year", DateTime.Now.ToString("yyyy"))), "InAndOutQuantity");
+            if (inList.Count > 0)
+            {
+                foreach (var a in inList)
+                {
+                    inTotal = inTotal + a.Quntity;
+                }
+            }
+
+            //鏈堝嚭搴撴�鏁�+            var outMonthList = MongoDBSingleton.Instance.Find<InAndOutQuantity>(Query.And(Query.EQ("Type", "鍑哄簱"), Query.EQ("Year", DateTime.Now.ToString("yyyy")),Query.EQ("Month",DateTime.Now.ToString("MM"))), "InAndOutQuantity");
+            if (outMonthList.Count > 0)
+            {
+                foreach (var a in outMonthList)
+                {
+                    outMonthTotal = outMonthTotal + a.Quntity;
+                }
+            }
+
+            //鏈堝叆搴撴�鏁�+            var inMonthList = MongoDBSingleton.Instance.Find<InAndOutQuantity>(Query.And(Query.EQ("Type", "鍏ュ簱"), Query.EQ("Year", DateTime.Now.ToString("yyyy")), Query.EQ("Month", DateTime.Now.ToString("MM"))), "InAndOutQuantity");
+            if (inMonthList.Count > 0)
+            {
+                foreach (var a in inMonthList)
+                {
+                    intMonthTotal = intMonthTotal + a.Quntity;
+                }
+            }
+
+            //鍛ㄦ�鏁扮畻娉� 鑾峰彇褰撳墠鏄槦鏈熷嚑  鐒跺悗褰撳ぉ鐨勬棩鏈熷噺鍘绘槦鏈熸暟鍔犱竴 鑾峰彇鏈懆涓�殑鏃ユ湡 鐒跺悗璁$畻鏈懆涓�埌浠婂ぉ鐨勬暟閲�+            int xq = (int)DateTime.Now.DayOfWeek;
+            int startDay = int.Parse(DateTime.Now.ToString("dd")) - xq + 1;
+
+            //鍛ㄥ嚭搴撴�鏁�+            var outWeekList = MongoDBSingleton.Instance.Find<InAndOutQuantity>(Query.And(Query.EQ("Type", "鍑哄簱"),Query.GTE("Day", startDay), Query.LTE("Day", DateTime.Now.ToString("dd"))), "InAndOutQuantity");
+            //var outWeekList = MongoDBSingleton.Instance.Find<InAndOutQuantity>(Query.And(Query.EQ("Type", "鍏ュ簱"), Query.EQ("Year", DateTime.Now.ToString("yyyy")), Query.EQ("Month", DateTime.Now.ToString("MM"))), "InAndOutQuantity");
+            if (outWeekList.Count > 0)
+            {
+                foreach (var a in outWeekList)
+                {
+                    outWeekTotal = outWeekTotal + a.Quntity;
+                }
+            }
+
+            //鍛ㄥ叆搴撴�鏁�+            var inWeekList = MongoDBSingleton.Instance.Find<InAndOutQuantity>(Query.And(Query.EQ("Type", "鍏ュ簱"), Query.GTE("Day", startDay), Query.LTE("Day", DateTime.Now.ToString("dd"))), "InAndOutQuantity");
+            if (inWeekList.Count > 0)
+            {
+                foreach (var a in inWeekList)
+                {
+                    inWeekTotal = inWeekTotal + a.Quntity;
+                }
+            }
+
+            int[] num = new int[4];
+            num[0] = outMonthTotal;
+            num[1] = intMonthTotal;
+            num[2] = outWeekTotal;
+            num[3] = inWeekTotal;
+            var wirte = OITcpHelper.RegisterWriteOutPutMulti(new OITcpHelper.RegisterWriteOutPutModelMulti
+            {
+                addr = 80,
+                host = "10.15.73.26",
+                port = 5006,
+                data = num
+            });
+
+            int[] num1 = new int[4];
+            int hightOutTotal = outTotal / 65536; // 璁$畻鍟嗘暟
+            int lowOutTotal = outTotal % 65536; // 璁$畻浣欐暟
+            int hightInTotal = inTotal / 65536; // 璁$畻鍟嗘暟
+            int lowInTotal = inTotal % 65536; // 璁$畻浣欐暟
+            num1[0] = hightOutTotal;
+            num1[1] = lowOutTotal;
+            num1[2] = hightInTotal;
+            num1[3] = lowInTotal;
+            var wirte1 = OITcpHelper.RegisterWriteOutPutMulti(new OITcpHelper.RegisterWriteOutPutModelMulti
+            {
+                addr = 74,
+                host = "10.15.73.26",
+                port = 5006,
+                data = num1
+            });
+        }
+
+        /// <summary>
+        /// 鎻愬崌鏈鸿捣鐐瑰畨鍏ㄤ氦浜�+        /// </summary>
+        /// <param name="ip"></param>
+        /// <param name="taskNo"></param>
+        /// <param name="taskType"></param>
+        internal static void ElevatorStart(string ip, string taskNo, string taskType,int port)
+        {
+            var plc = Settings.GetPlcInfo().Where(a => a.ip == ip && a.port == port).FirstOrDefault();
+            if (plc != null)
+            {
+                if (plc.deviceType == "3")
+                {
+                    //璧风偣鏄彔鐩樻満灏辨槸ng浠诲姟
+                    TSHelper.GoToAGV(taskNo, 10, 1);
+                }
+                else
+                {
+                    //鍒ゆ柇褰撳墠浠诲姟鐨勮捣鐐规槸鍦ㄥ嚑妤�+                    var eleInfo = MongoDBSingleton.Instance.FindOne<elevatorTask>("elevatorTask");
+                    if (eleInfo != null)
+                    {
+                        int num = eleInfo.S_END_FLOOR == 1 ? 0 : 1;
+                        var wirte = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                        {
+                            addr = plc.writeAddr + num,
+                            host = plc.ip,
+                            port = plc.port,
+                            data = 1
+                        });
+
+                        CMMLog.Info($"銆愮數姊紑闂ㄣ�鍐欏叆閫氶亾{plc.writeAddr + num}鐨勪俊鍙蜂负[1]");
+                        var readRes = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                        {
+                            dataNum = 1,
+                            host = plc.ip,
+                            port = plc.port,
+                            addr = plc.readAddr + num
+                        });
+
+                        CMMLog.Info($"銆愮數姊紑闂ㄣ�璇诲彇閫氶亾{plc.readAddr + num}鐨勪俊鍙蜂负[{JsonConvert.SerializeObject(readRes)}]");
+                        if (readRes != null && readRes.errCode == 0)
+                        {
+                            if (readRes.result[0] == 2)
+                            {
+                                TSHelper.GoToAGV(taskNo, 10, 1);
+
+                                var wirte1 = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                                {
+                                    addr = plc.writeAddr + num,
+                                    host = plc.ip,
+                                    port = plc.port,
+                                    data = 2
+                                });
+
+                                CMMLog.Info($"銆愮數姊紑闂ㄣ�鍐欏叆閫氶亾{plc.readAddr + num}鐨勪俊鍙蜂负[2]");
+                            }
+                        }
+                    }
+                }
+                
+            }
+        }
+
+        internal static void EcheckWeighingPlatform1313(string deviceType, TN_I_TASK_MST mst)
+        {
+            CMMLog.Info($"銆愬绉ゆ敼閬撱�浠诲姟娴佺▼澶勭悊寮�------------");
+            string taskName = mst.CN_S_BUSS_TYPE = getTaskType("3妤煎绉板叆缂撳瓨鏋�, true);
+            string taskNameNG = mst.CN_S_BUSS_TYPE = getTaskType("3妤煎绉板叆缂撳瓨鏋禢G", true);
+
+            var taskInfo = MongoDBSingleton.Instance.FindOne<TN_I_TASK_MST>(Query.And(Query.EQ("CN_S_START_BIT", mst.CN_S_END_BIT), Query.Or(Query.EQ("CN_S_BUSS_TYPE", taskName), Query.EQ("CN_S_BUSS_TYPE", taskNameNG))) , "TN_I_TASK_MST");
+            if(taskInfo != null)
+            {
+                CMMLog.Info($"璧风偣锛歿mst.CN_S_END_BIT}");
+                CMMLog.Info($"缁堢偣锛歿taskInfo.CN_S_END_BIT}");
+                int[] parms = { StockInstance.Instance.GetAGVCodeForBitCode(mst.CN_S_END_BIT), StockInstance.Instance.GetAGVCodeForBitCode(taskInfo.CN_S_END_BIT) };
+                //TSHelper.ChangeParam(taskNo, 1, StockInstance.Instance.GetAGVCodeForBitCode(taskInfo.CN_S_END_BIT));
+                //TSHelper.ChangeParam(taskNo, 2, StockInstance.Instance.GetAGVCodeForBitCode(ChangeBit));
+                TSHelper.ChangeParam(mst.CN_S_TASK_NO, 1, parms);
+                //TSHelper.GoToAGV(mst.CN_S_TASK_NO, 3, 1);
+                TSHelper.GoToAGV(mst.CN_S_TASK_NO, 10, 8);
+
+                MongoDBSingleton.Instance.Update<TN_I_TASK_MST>(Query.EQ("CN_S_TASK_NO", mst.CN_S_TASK_NO), Update.Set("CN_S_END_BIT", taskInfo.CN_S_END_BIT).Set("CN_S_START_BIT", mst.CN_S_END_BIT), "TN_I_TASK_MST", UpdateFlags.None);
+            }
+            else
+            {
+                CMMLog.Info($"銆愬绉ゆ敼閬撱�鏈煡璇㈠埌澶嶇Г鍏ョ紦瀛樻灦浠诲姟");
+            }
+            CMMLog.Info($"銆愬绉ゆ敼閬撱�浠诲姟娴佺▼澶勭悊缁撴潫------------");
+
+        }
+
+        internal static void SecondWeightInCache6(string ip, string cN_S_TASK_NO)
+        {
+            var plc = Settings.GetPlcInfo().Where(a => a.deviceType == ip).FirstOrDefault();
+            if (plc != null)
+            {
+                //鍒ゆ柇褰撳墠浠诲姟鐨勮捣鐐规槸鍦ㄥ嚑妤�+                var eleInfo = MongoDBSingleton.Instance.FindOne<elevatorTask>(Query.EQ("S_USE", "0"),"elevatorTask");
+                if (eleInfo != null)
+                {
+                    int num = eleInfo.S_END_FLOOR == 1 ? 1 : 0;
+                    var wirte = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                    {
+                        addr = plc.writeAddr + num,
+                        host = plc.ip,
+                        port = plc.port,
+                        data = 3
+                    });
+                    CMMLog.Info($"銆愮數姊紑闂ㄣ�鍐欏叆閫氶亾{plc.writeAddr + 1}鐨勪俊鍙蜂负[3]");
+                }
+            }
+            else CMMLog.Debug($"缂撳瓨鍏ュ彔鐩樻満锛�锛宲lc=null!");
+
+
+            //var plc = Settings.GetPlcInfo().Where(a => a.deviceType == ip).FirstOrDefault();
+            //if (plc != null)
+            //{
+            //    var wirte = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+            //    {
+            //        addr = plc.writeAddr + 1,
+            //        host = plc.ip,
+            //        port = plc.port,
+            //        data = 3
+            //    });
+            //    CMMLog.Info($"銆愮數姊紑闂ㄣ�鍐欏叆閫氶亾{plc.writeAddr + 1}鐨勪俊鍙蜂负[3]");
+            //}
+            //else CMMLog.Debug($"缂撳瓨鍏ュ彔鐩樻満锛�锛宲lc=null!");
+        }
+
+        internal static void ElevatorEnd(string ip, string cN_S_TASK_NO, string cN_S_BUSS_TYPE)
+        {
+            CMMLog.Info("ElevatorEnd 111111111");
+            var plc = Settings.GetPlcInfo().Where(a => a.ip == ip).FirstOrDefault();
+            if (plc != null)
+            {
+                CMMLog.Info("ElevatorEnd 2222222");
+                //鍒ゆ柇褰撳墠浠诲姟鐨勮捣鐐规槸鍦ㄥ嚑妤�+                var eleInfo = MongoDBSingleton.Instance.FindOne<elevatorTask>(Query.EQ("S_USE", "1"),"elevatorTask");
+                if (eleInfo != null)
+                {
+                    CMMLog.Info("ElevatorEnd 3333333");
+                    int num = eleInfo.S_END_FLOOR == 1 ? 0 : 1;
+                    CMMLog.Info($"ElevatorEnd 44444444:{num}");
+                    var wirte = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                    {
+                        addr = plc.writeAddr + num,
+                        host = plc.ip,
+                        port = plc.port,
+                        data = 3
+                    });
+                    CMMLog.Info($"銆愮數姊紑闂ㄣ�鍐欏叆閫氶亾{plc.writeAddr + num}鐨勪俊鍙蜂负[3]");
+                }
+            }
+        }
+
+        internal static void CacheStackingMouth1013Two(string ip, string taskNo)
+        {
+            var plc = Settings.GetPlcInfo().Where(a => a.deviceType == ip).FirstOrDefault();
+            if (plc != null)
+            {
+                
+
+
+                var readres = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                {
+                    dataNum = 1,
+                    addr = plc.readAddr + 1,
+                    host = plc.ip,
+                    port = plc.port
+                });
+                if (readres.result[0] == 0 || readres.result[0] == 1)
+                {
+                    var wirte = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                    {
+                        addr = plc.writeAddr + 1,
+                        host = plc.ip,
+                        port = plc.port,
+                        data = 1
+                    });
+                }
+                else if (readres.result[0] == 2)
+                {
+                    TSHelper.GoToAGV(taskNo, 10, 3);
+                }
+            }
+            else CMMLog.Debug($"缂撳瓨鍏ュ彔鐩樻満锛�013锛宲lc=null!");
+
+
+            
+        }
+
+        internal static void CacheStackingMouth6Two(string loca)
+        {
+            var plc = Settings.GetPlcInfo().Where(a => a.location == loca && a.enable == 1).FirstOrDefault();
+            CMMLog.Info($"3妤肩紦瀛樻灦鍏ュ彔鎵�鏀跺埌淇″彿6锛屾煡璇㈣澶囦俊鎭細{JsonConvert.SerializeObject(plc)}銆�);
+            if (plc != null)
+            {
+                var eleInfo = MongoDBSingleton.Instance.FindOne<elevatorTask>("elevatorTask");
+                if (eleInfo != null)
+                {
+                    var task = eleInfo.task_mst;
+                    CMMLog.Info($"3妤肩紦瀛樻灦鍏ュ彔鎵�鏀跺埌淇″彿6锛屾煡璇换鍔′俊鎭細{JsonConvert.SerializeObject(task)}銆�);
+                    var machine = eleInfo.wmsInfo;
+                    CMMLog.Info($"3妤肩紦瀛樻灦鍏ュ彔鎵�鏀跺埌淇″彿6锛屾煡璇MSInfo琛ㄤ俊鎭細{JsonConvert.SerializeObject(machine)}銆�);
+                    if (machine != null)
+                    {
+                        WriteCacheStackingData(plc, task, machine);
+
+                        var wirte = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                        {
+                            addr = plc.writeAddr + 1,
+                            host = plc.ip,
+                            port = plc.port,
+                            data = 2
+                        });
+
+                    }
+                }
+                else
+                {
+                    CMMLog.Info($"3妤肩紦瀛樻灦鍏ュ彔鎵�鐢垫涓棿琛ㄥ紓甯�);
+                }
+            }
+        }
+
+        internal static void machineEmpty1013(string deviceType, string taskNo,bool action)
+        {
+            var plc = Settings.GetPlcInfo().Where(a => a.deviceType == deviceType && a.enable == 1).First();
+            if(plc != null)
+            {
+                //鍒ゆ柇褰撳墠浠诲姟鐨勮捣鐐规槸鍦ㄥ嚑妤�+                var eleInfo = MongoDBSingleton.Instance.FindOne<elevatorTask>("elevatorTask");
+                if (eleInfo != null)
+                {
+                    int num = eleInfo.S_END_FLOOR == 2 ? 0 : 1;
+                    if (action)
+                    {
+                        var wirte = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                        {
+                            addr = plc.writeAddr + num,
+                            host = plc.ip,
+                            port = plc.port,
+                            data = 1
+                        });
+
+                        CMMLog.Info($"銆愮數姊紑闂ㄣ�鍐欏叆閫氶亾{plc.writeAddr + num}鐨勪俊鍙蜂负[1]");
+                        var readRes = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                        {
+                            dataNum = 1,
+                            host = plc.ip,
+                            port = plc.port,
+                            addr = plc.readAddr + num
+                        });
+
+                        CMMLog.Info($"銆愮數姊紑闂ㄣ�璇诲彇閫氶亾{plc.readAddr + num}鐨勪俊鍙蜂负[{JsonConvert.SerializeObject(readRes)}]");
+                        if (readRes != null && readRes.errCode == 0)
+                        {
+                            if (readRes.result[0] == 2)
+                            {
+                                TSHelper.GoToAGV(taskNo, 10, 3);
+
+                                var wirte1 = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                                {
+                                    addr = plc.writeAddr + num,
+                                    host = plc.ip,
+                                    port = plc.port,
+                                    data = 2
+                                });
+
+                                CMMLog.Info($"銆愮數姊紑闂ㄣ�鍐欏叆閫氶亾{plc.readAddr + num}鐨勪俊鍙蜂负[2]");
+                            }
+                        }
+                    }
+                    else
+                    {
+                        var wirte1 = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                        {
+                            addr = plc.writeAddr + num,
+                            host = plc.ip,
+                            port = plc.port,
+                            data = 3
+                        });
+
+                        CMMLog.Info($"銆愮數姊紑闂ㄣ�鍐欏叆閫氶亾{plc.readAddr + num}鐨勪俊鍙蜂负[3]");
+                    }
+                        
+                }
+            }
+        }
+
+        #endregion
+
+        #endregion
+
+        public class Z_ChaiPanEmptyOrFull
+        {
+            public ObjectId _id { get; set; }
+            /// <summary>
+            /// 鎷嗙洏鐐逛綅
+            /// </summary>
+            public string ChaiPanBit { get; set; }
+            /// <summary>
+            /// 鎷嗙洏鐐逛綅绌烘弧鐘舵�--绌簗婊�+            /// </summary>
+            public string ChaiPanState { get; set; }
+        }
+
+
+        public class ActionControlModel
+        {
+            public ObjectId _id { get; set; }
+            /// <summary>
+            /// 鍔熻兘鐮�- 1-鐢熸垚澶嶇О骞冲彴鍏ョ紦瀛樻灦浠诲姟
+            /// </summary>
+            public string actionNo { get; set; } = "0";
+            /// <summary>
+            /// 1-ip
+            /// </summary>
+            public string ext1 { get; set; } = "";
+            /// <summary>
+            /// 1-CN_S_BATCH_NO
+            /// </summary>
+            public string ext2 { get; set; } = "";
+            public int ext3 { get; set; } = 0;
+            public string machince { get; set; } = "";
+        }
+
+        public class packageInfoModel
+        {
+            public ObjectId _id { get; set; }
+            /// <summary>
+            /// 鍖呰鏈哄彿
+            /// </summary>
+            public string machineNo { get; set; } = "";
+            /// <summary>
+            /// 鎵樼洏鍙�+            /// </summary>
+            public string trayCode { get; set; } = "";
+            /// <summary>
+            /// 鎵规鍙�+            /// </summary>
+            public string batchNo { get; set; } = "";
+            /// <summary>
+            /// 涓嬫枡鏃堕棿
+            /// </summary>
+            public string time { get; set; } = "";
+            /// <summary>
+            /// 閲嶉噺
+            /// </summary>
+            public string weight { get; set; } = "";
+            /// <summary>
+            /// 澶嶇О閲嶉噺
+            /// </summary>
+            public string weight2 { get; set; } = "";
+            /// <summary>
+            /// 閲嶉噺宸�
+            /// </summary>
+            public string weightDifference { get; set; } = "";
+        }
+
+    }
+}
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMProtocol/ProcessHelper.cs b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/ProcessHelper.cs
new file mode 100644
index 0000000..75cf953
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/ProcessHelper.cs
@@ -0,0 +1,1085 @@
+锘縰sing Hanhe.iWCS.Business;
+using Hanhe.iWCS.Common;
+using Hanhe.iWCS.DeviceDriver;
+using Hanhe.iWCS.MData;
+using Hanhe.iWCS.Model;
+using Hanhe.iWCS.Model.AMS;
+using Hanhe.iWCS.Model.H883;
+using MongoDB.Bson;
+using MongoDB.Driver;
+using MongoDB.Driver.Builders;
+using MySql.Data.MySqlClient;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net.Configuration;
+using System.Text;
+using System.Threading.Tasks;
+using System.Web.UI.WebControls.WebParts;
+using static Hanhe.iWCS.IndonesiaGLMProtocol.AMSHelper;
+using static Hanhe.iWCS.IndonesiaGLMProtocol.EnentListen;
+using static Hanhe.iWCS.IndonesiaGLMProtocol.MESHelper;
+using static Hanhe.iWCS.IndonesiaGLMProtocol.PLCControl;
+using static Hanhe.iWCS.IndonesiaGLMProtocol.ProtocolAnalysis;
+using static System.Runtime.CompilerServices.RuntimeHelpers;
+
+namespace Hanhe.iWCS.IndonesiaGLMProtocol
+{
+    public class ProcessHelper
+    {
+        private static ICallTaskProcessing callTaskProcessing = new ICallTaskProcessing();
+        private static WebApiHelper webApiHelper = new WebApiHelper();
+
+        public static bool CheckStartFree(string bit) {
+            var result = false;
+            var tasks = MongoDBSingleton.Instance.Find<TN_I_TASK_MST>(Query.EQ("CN_S_START_BIT", bit), "TN_I_TASK_MST");
+            if (tasks.Count == 0) {
+                result = true;
+            }
+            else {
+                for (int i = 0; i < tasks.Count; i++) {
+                    if (!WorkFlowAction.ExistsTrackLogs(tasks[i].CN_S_TASK_NO, 1, 4)) {
+                        break;
+                    }
+                }
+            }
+            return result;
+        }
+
+        public static bool PickUpStartFree(string bit)
+        {
+            var result = false;
+            var tasks = MongoDBSingleton.Instance.Find<TN_I_TASK_MST>(Query.EQ("CN_S_START_BIT", bit), "TN_I_TASK_MST");
+            if (tasks.Count == 0)
+            {
+                result = true;
+            }
+            else
+            {
+                result = true;
+                for (int i = 0; i < tasks.Count; i++)
+                {
+                    if (!WorkFlowAction.ExistsTrackLogs(tasks[i].CN_S_TASK_NO, 1, 4))
+                    {
+                        result = false;
+                        break;
+                    }
+                }
+            }
+            return result;
+        }
+
+        public static bool PickUpEndFree(string bit)
+        {
+            var result = false;
+            var tasks = MongoDBSingleton.Instance.Find<TN_I_TASK_MST>(Query.EQ("CN_S_END_BIT", bit), "TN_I_TASK_MST");
+            if (tasks.Count == 0)
+            {
+                result = true;
+            }
+            else
+            {
+                result = true;
+                for (int i = 0; i < tasks.Count; i++)
+                {
+                    if (!WorkFlowAction.ExistsTrackLogs(tasks[i].CN_S_TASK_NO, 1, 6))
+                    {
+                        result = false;
+                        break;
+                    }
+                }
+            }
+            return result;
+        }
+
+        internal static bool CheckEndFree(string bit) {
+            var count = MongoDBSingleton.Instance.FindCount<TN_I_TASK_MST>(Query.EQ("CN_S_END_BIT", bit), "TN_I_TASK_MST");
+            return count == 0;
+        }
+
+        /// <summary>
+        /// 鍙戦�浠诲姟鈥斺�宸插鍔犺捣鐐圭粓鐐瑰眰鏁帮紝鐗规畩AGV绔欑偣鎺ㄩ�
+        /// </summary>
+        /// <param name="mst"></param>
+        internal static void SendTask(TN_I_TASK_MST mst)
+        {
+            try
+            {
+                if (mst.CN_S_STATUS == "鏈墽琛� || mst.CN_S_STATUS == "寰呮帹閫�)
+                {
+                    mst.CN_S_BUSS_TYPE = getTaskType(mst.CN_S_BUSS_TYPE,false);
+
+                    if (mst.CN_S_END_BIT == "CK001_XN-01")
+                    {
+                        mst = MongoDBSingleton.Instance.FindOne<TN_I_TASK_MST>(Query.EQ("CN_S_TASK_NO", mst.CN_S_TASK_NO), "TN_I_TASK_MST");
+                    }
+                    StringBuilder sbMsg = new StringBuilder();
+                    var start = StockInstance.Instance.GetLocationInfoTwo(mst.CN_S_START_BIT);
+                    var end = StockInstance.Instance.GetLocationInfoTwo(mst.CN_S_END_BIT);
+                    string FRow = string.IsNullOrEmpty(start.CN_S_FLOOR) ? "1" : start.CN_S_FLOOR;
+                    string TRow = string.IsNullOrEmpty(end.CN_S_FLOOR) ? "1" : end.CN_S_FLOOR;
+                    int location = -1;
+                    CMMLog.Info($"浠诲姟鎺ㄩ�锛氳揣浣嶇紪鐮侊細璧风偣淇℃伅:{JsonConvert.SerializeObject(start)},缁堢偣淇℃伅:{JsonConvert.SerializeObject(end)}锛涗换鍔′俊鎭細{JsonConvert.SerializeObject(mst)}");
+
+                    if (mst.CN_S_BUSS_TYPE.Contains("3妤煎绉板叆缂撳瓨鏋�))
+                    {
+                        //鏇存敼浠诲姟涓哄凡鎺ㄩ�
+                        MongoDBSingleton.Instance.Update<TN_I_TASK_MST>(Query.EQ("_id", mst._id), Update.Set("CN_S_STATUS", "宸叉帹閫�), UpdateFlags.None);
+                        CMMLog.Info("浠诲姟鏇存敼鎴愬姛");
+                        return;
+                    }
+                    if (mst.CN_S_BUSS_TYPE == "鍖呰绾胯ˉ绌�)
+                    {
+                        CMMLog.Info($"浠诲姟鎺ㄩ�鐗规畩浠诲姟澶勭悊-鍖呰绾胯ˉ绌猴細浠诲姟鍙凤細{mst.CN_S_TASK_NO},鍑嗗鑾峰彇 AGVLocationList 閰嶇疆鏁版嵁銆傚娉細姝や换鍔$被鍨嬩粎鑾峰彇璧风偣銆�);
+                        var agvLoc = Settings.GetDDSiteList().Where(a => a.ddLoc == mst.CN_S_START_BIT).FirstOrDefault();
+                        if (agvLoc != null)
+                        {
+                            var emp = MongoDBSingleton.Instance.FindOne<BZEmptyPoint>(Query.EQ("Bit", mst.CN_S_START_BIT), "BZEmptyPoint");
+                            if (emp != null)
+                            {
+                                location = agvLoc.Site[emp.Quantity - 1];
+                            }
+                        }
+                    }
+                    if (mst.CN_S_BUSS_TYPE == "缂撳瓨鏋跺叆绔嬪簱")
+                    {
+                        TRow = "1";
+                    }
+                    if (mst.CN_S_BUSS_TYPE == "3妤兼垚鍝佸嚭搴�)
+                    {
+                        FRow = "1";
+                    }
+                    #region 鐢垫浠诲姟澶勭悊
+                    if (mst.CN_S_BUSS_TYPE == "3妤肩紦瀛樻灦鍏ュ彔鎵� || mst.CN_S_BUSS_TYPE == "3妤煎寘瑁呰ˉ绌� || mst.CN_S_BUSS_TYPE == "杞繍" || mst.CN_S_BUSS_TYPE == "1妤艰緟鏉愬叆2妤� || mst.CN_S_BUSS_TYPE == "杞繍鍒板寘瑁呮満")
+                    {
+                        CMMLog.Info("鐢垫浠诲姟澶勭悊");
+                        //鐢垫浠诲姟澶勭悊娴佺▼
+                        #region 鏍规嵁浠诲姟绫诲瀷鍒ゆ柇浠诲姟缁堢偣妤煎眰
+                        int floor = 0;
+                        if (mst.CN_S_BUSS_TYPE == "3妤肩紦瀛樻灦鍏ュ彔鎵�)
+                        {
+                            floor = 1;
+                        }
+                        if (mst.CN_S_BUSS_TYPE == "3妤煎寘瑁呰ˉ绌�)
+                        {
+                            floor = 2;
+                        }
+                        if (mst.CN_S_BUSS_TYPE == "杞繍鍒板寘瑁呮満")
+                        {
+                            if(mst.CN_S_START_AREA != mst.CN_S_END_AREA)
+                            {
+                                floor = 2;
+                            }
+                        }
+                        if (mst.CN_S_BUSS_TYPE == "杞繍")
+                        {
+                            //鍒ゆ柇鐐瑰埌鐐硅浆杩愪换鍔℃槸鍚﹂渶瑕佺粡杩囩數姊紝濡傛灉闇�缁忚繃鐢垫锛屽垯鍒ゆ柇璧风偣缁堢偣鐨勬ゼ灞傦紝濡傛灉涓嶇粡杩囩數姊紝鍒欑洿鎺ユ帹閫�+                            if (mst.CN_S_START_AREA != mst.CN_S_END_AREA)
+                            {
+                                floor = mst.CN_S_END_AREA.Contains("2") ? 2 : 1;
+                            }
+                        }
+                        if (mst.CN_S_BUSS_TYPE == "1妤艰緟鏉愬叆2妤�)
+                        {
+                            floor = 2;
+                        }
+                        #endregion
+
+                        if(floor != 0)
+                        {
+                            CMMLog.Info($"浠诲姟缁堢偣锛歿floor}锛屼换鍔$被鍨嬶細{mst.CN_S_BUSS_TYPE}");
+                            //1銆佸垽鏂綋鍓嶇數姊槸鍚︽湁浠诲姟锛屾棤浠诲姟鍒欐帹閫�+                            var eleInfo = MongoDBSingleton.Instance.FindOne<elevatorTask>(Query.EQ("S_USE", "0"), "elevatorTask");
+                            if (eleInfo == null)
+                            {
+                                var plcInfo = Settings.GetPlcInfo().Where(a => a.deviceType == "22" && a.enable == 1).First();
+                                if (plcInfo != null)
+                                {
+                                    string endLoc = floor == 1 ? plcInfo.location.Split(',')[0] : plcInfo.location.Split(',')[1];
+                                    string startLoc = floor == 1 ? plcInfo.location.Split(',')[1] : plcInfo.location.Split(',')[0];
+                                    //鏇存敼浠诲姟鐨勭粓鐐逛负鐢垫
+                                    var updateBuider = Update.Set("CN_S_END_BIT", endLoc);//鏂扮洰鐨勫湴
+                                    MongoDBSingleton.Instance.Update<TN_I_TASK_MST>(Query.EQ("CN_S_TASK_NO", mst.CN_S_TASK_NO), updateBuider, UpdateFlags.None);
+                                    CMMLog.Info($"鏇存敼浠诲姟鐨勭粓鐐癸細{endLoc}");
+                                    MongoDBSingleton.Instance.Insert<elevatorTask>(new elevatorTask
+                                    {
+                                        S_DT_LOC = startLoc,
+                                        S_END_LOC = mst.CN_S_END_BIT,
+                                        S_END_FLOOR = floor,
+                                        S_TASK_TYPE = mst.CN_S_BUSS_TYPE,
+                                        task_mst = mst,
+                                        wmsInfo = MongoDBSingleton.Instance.FindOne<WMSInfo>(Query.EQ("trayCode", mst.CN_S_BATCH_NO), "WMSInfo"),
+                                        S_USE = "0",
+                                        time = DateTime.Now
+                                    });
+                                    CMMLog.Info("鎻掑叆涓棿琛ㄦ暟鎹�);
+                                    mst = MongoDBSingleton.Instance.FindOne<TN_I_TASK_MST>(Query.EQ("_id", mst._id), "TN_I_TASK_MST");
+                                    start = StockInstance.Instance.GetLocationInfoTwo(mst.CN_S_START_BIT);
+                                    end = StockInstance.Instance.GetLocationInfoTwo(mst.CN_S_END_BIT);
+                                    FRow = string.IsNullOrEmpty(start.CN_S_FLOOR) ? "1" : start.CN_S_FLOOR;
+                                    TRow = string.IsNullOrEmpty(end.CN_S_FLOOR) ? "1" : end.CN_S_FLOOR;
+                                }
+                                else CMMLog.Info("鎻愬崌鏈烘湭閰嶇疆");
+                            }
+                            else
+                            {
+                                CMMLog.Info("鐢垫姝e湪浣跨敤");
+                                return;
+                            }
+                        }
+                    }
+                    #endregion
+                    try
+                    {
+                        start.CN_N_AGV_LOCATION = location == -1 ? start.CN_N_AGV_LOCATION : location;
+                        var req = $"<Req><Order  TS='1'  Pri='{mst.CN_N_PRIORITY}' From='{start.CN_N_AGV_LOCATION}' To='{end.CN_N_AGV_LOCATION}'  No='{mst.CN_S_TASK_NO}_1' Ext1='1' Ext2='CALLADDAGV'  Ext3='' FRow='{1}' TRow='{1}'/></Req>";
+                        CMMLog.Info($"浠诲姟鎺ㄩ�锛氫笅鍙�Hosttoagv 鏁版嵁锛歿req}.");
+                        HardwareAccessObject AGVHao = HardwareAccessHelper.Instance.GetEquipmentsHAO("1");
+                        if (AGVHao != null)
+                        {
+                            object[] args = new object[1];
+                            args[0] = req;
+                            object xmlData = AGVHao._WebServiceInstance.Invoke("AddNewOrder", args);
+                            string errMsg = string.Empty;
+                            int errCode = -1;
+                            if (xmlData != null)
+                            {
+                                errCode = Hanhe.iWCS.AGVWebService.AGVHelper.Instance.AGVXmlResult((string)xmlData, out errMsg);
+                            }
+                            var msg = "WCS To AGV send task; errcode=" + errCode + "锛乨ata=" + sbMsg.ToString() + ";url=" + AGVHao.WebUrl;
+                            CMMLog.Info($"浠诲姟鎺ㄩ�锛氭帴鏀�Hosttoagv 鏁版嵁锛歿msg}.");
+                            if (errCode == Constants.WCS_AGV_ERRCode || errCode == 99999)
+                            {
+                                MongoDBSingleton.Instance.Update<TN_I_TASK_MST>(Query.EQ("_id", mst._id), Update.Set("CN_S_STATUS", "鏈墽琛�), UpdateFlags.None);
+                                AMSHelper.TaskTrackLogMessage(mst.CN_S_TASK_NO, "1", "1027", "AGV浠诲姟鎷︽埅鎺ㄩ�澶辫触", errCode.ToString());
+                                //Console.WriteLine(mst.CN_S_TASK_NO + ", \"1\", \"1027\", \"AGV浠诲姟鎷︽埅鎺ㄩ�澶辫触\"," + errCode.ToString());
+                                CMMLog.Info(mst.CN_S_TASK_NO + ", \"1\", \"1027\", \"AGV浠诲姟鎷︽埅鎺ㄩ�澶辫触\"," + errCode.ToString());
+                            }
+                            else
+                            {
+                                if (errCode == 0 || errCode == 50009)
+                                {
+                                    MongoDBSingleton.Instance.Update<TN_I_TASK_MST>(Query.EQ("_id", mst._id), Update.Set("CN_S_STATUS", "宸叉帹閫�), UpdateFlags.None);
+                                }
+                                AMSHelper.TaskTrackLogMessage(mst.CN_S_TASK_NO, "1", "1027", "AGV浠诲姟涓嬭揪鎴愬姛");
+                                //Console.WriteLine(mst.CN_S_TASK_NO + "\"1\", \"1027\", \"AGV浠诲姟涓嬭揪鎴愬姛\"");
+                                CMMLog.Info(mst.CN_S_TASK_NO + "\"1\", \"1027\", \"AGV浠诲姟涓嬭揪鎴愬姛\"");
+                            }
+                        }
+                        else
+                        {
+                            //Console.WriteLine("WCS To AGV send task fail; ts1 not set in ams work center");
+                            CMMLog.Info("WCS To AGV send task fail; ts1 not set in ams work center");
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+                        MongoDBSingleton.Instance.Update<TN_I_TASK_MST>(Query.EQ("_id", mst._id), Update.Set("CN_S_STATUS", "鏈墽琛�), UpdateFlags.None);
+                        CMMLog.Error("WCS To AGV send task fail;param=" + mst.CN_S_TASK_NO + ";err=" + ex.Message);
+                        AMSHelper.TaskTrackLogMessage(mst.CN_S_TASK_NO, "1", "1027", "AGV浠诲姟鎷︽埅鎺ㄩ�澶辫触");
+                    }
+                }
+            }
+            catch(Exception ex)
+            {
+                CMMLog.Info($"浠诲姟鎺ㄩ�鎶ラ敊锛歟rr:{ex.Message}");
+            }
+            
+        }
+
+        #region   3妤艰澶囦换鍔�+
+        /// <summary>
+        /// 缁堢偣瀹夊叏瀵规帴锛�013瀹夊叏璇锋眰杩涘叆锛�瀹夊叏璇锋眰閫�嚭
+        /// </summary>
+        /// <param name="mst"></param>
+        /// <param name="code"></param>
+        internal static void EndPickUpDoorSafe(TN_I_TASK_MST mst, int code)
+        {
+            //3妤煎寘瑁呰ˉ绌猴細鍖呰鏈鸿ˉ绌烘墭娴佺▼鈥斺�3妤煎寘瑁呮満瀹夊叏闂ㄤ氦浜�+            var plc = Settings.GetPlcInfo().Where(a => a.location.Contains(mst.CN_S_END_BIT)).FirstOrDefault();
+            //if (plc != null || mst.CN_S_BUSS_TYPE == "3妤煎绉板叆缂撳瓨鏋�)
+            CMMLog.Info($"{mst.CN_S_END_BIT}");
+            CMMLog.Info($"{plc}");
+            if (plc != null || mst.CN_S_BUSS_TYPE == "3妤兼墦鍖呬笅绾�)
+            {
+                CMMLog.Info($"杩涘叆{mst.CN_S_BUSS_TYPE}娴佺▼{code}鐨勫鐞�);
+                if (code == 1013)
+                {
+                    //鍗歌揣鐢宠锛屽厛鍒ゆ柇璁惧鏄惁鍏佽杩涙枡锛屽鏋滄槸鐩存帴鏀瑰弬鏁帮紝骞堕�鐭ヨ澶�+                    if (mst.CN_S_BUSS_TYPE == "3妤煎寘瑁呭彇鏂�) PLCControl.SecondWeightSafe(plc.ip, mst.CN_S_TASK_NO, plc.port);
+                    //if (mst.CN_S_BUSS_TYPE == "3妤煎绉板叆缂撳瓨鏋�) PLCControl.SecondWeightInCache1013(mst.CN_S_TASK_NO);
+                    if (mst.CN_S_BUSS_TYPE == "3妤肩紦瀛樻灦鍏ュ彔鎵�) PLCControl.CacheStackingMouth1013(plc.deviceType, mst.CN_S_TASK_NO, mst.CN_S_END_BIT);
+                    if (mst.CN_S_BUSS_TYPE == "3妤兼媶鐩樿ˉ绌�) PLCControl.DiscRemoverReqUnload(plc.deviceType, mst.CN_S_TASK_NO);
+                    if (mst.CN_S_BUSS_TYPE == "鍖呰绾胯ˉ绌� || mst.CN_S_BUSS_TYPE == "杞繍鍒板寘瑁呮満") PLCControl.PackingLine(plc.ip, mst.CN_S_TASK_NO);
+                    if (mst.CN_S_BUSS_TYPE == "3妤兼墦鍖呬笅绾�) PLCControl.outWare(mst.CN_S_TASK_NO, true);
+                    if (mst.CN_S_BUSS_TYPE == "3妤兼垚鍝佸嚭搴�) PLCControl.productOutWare(mst.CN_S_END_BIT, mst.CN_S_TASK_NO, true);
+                    if (mst.CN_S_BUSS_TYPE == "3妤煎寘瑁呰ˉ绌� || mst.CN_S_BUSS_TYPE == "1妤艰緟鏉愬叆2妤�) PLCControl.machineEmpty1013(plc.deviceType, mst.CN_S_TASK_NO,true);
+                    if (mst.CN_S_BUSS_TYPE.Contains("鎻愬崌鏈�)) PLCControl.CacheStackingMouth1013Two(plc.deviceType, mst.CN_S_TASK_NO);
+                }
+                if (code == 6)
+                {
+                    //鍗歌揣瀹屾垚鐢宠锛屽垽鏂澶囬偅杈硅繘鏂欏畬鎴愶紝鏀瑰弬鏁伴�鐭gv绂诲紑
+                    if (mst.CN_S_BUSS_TYPE == "3妤煎寘瑁呭彇鏂�) PLCControl.CheckUpUnloadComplete(plc.ip, mst.CN_S_TASK_NO, mst.CN_S_START_BIT, plc.port);
+                    //if (mst.CN_S_BUSS_TYPE == "3妤煎寘瑁呭彇鏂�) PLCControl.SecondWeightSafeComplete(plc.ip, mst.CN_S_TASK_NO);
+                    if (mst.CN_S_BUSS_TYPE == "3妤兼媶鐩樿ˉ绌�) PLCControl.DiscRemoverUnloadComplete(plc.deviceType, mst.CN_S_TASK_NO);
+                    if (mst.CN_S_BUSS_TYPE == "3妤兼墦鍖呬笅绾�) PLCControl.outWare(mst.CN_S_TASK_NO, false);
+                    if (mst.CN_S_BUSS_TYPE == "鍖呰绾胯ˉ绌� || mst.CN_S_BUSS_TYPE == "杞繍鍒板寘瑁呮満") PLCControl.PackingLineComplete(plc.ip);
+                    if (mst.CN_S_BUSS_TYPE == "3妤兼垚鍝佸嚭搴�) PLCControl.productOutWare(mst.CN_S_END_BIT, mst.CN_S_TASK_NO, false);
+                    if (mst.CN_S_BUSS_TYPE == "鍙犲寘鎻愬崌鏈�) PLCControl.CacheStackingMouth6Two(mst.CN_S_END_BIT);
+                    if (mst.CN_S_BUSS_TYPE == "3妤肩紦瀛樻灦鍏ュ彔鎵� || mst.CN_S_BUSS_TYPE == "3妤煎寘瑁呰ˉ绌�) PLCControl.SecondWeightInCache6(plc.deviceType, mst.CN_S_TASK_NO);
+                    if (mst.CN_S_BUSS_TYPE == "3妤煎寘瑁呰ˉ绌� || mst.CN_S_BUSS_TYPE == "1妤艰緟鏉愬叆2妤�) PLCControl.machineEmpty1013(plc.deviceType, mst.CN_S_TASK_NO,false);
+                }
+            }
+            else CMMLog.Info($"PlcInfo涓湭鎵惧埌璇ョ偣浣嶏紝鐐逛綅锛歿mst.CN_S_END_BIT}");
+        }
+
+        /// <summary>
+        /// 婊氱瓛杞︾粓鐐瑰埌浣嶄俊鍙凤細4     鍙栬揣瀹屾垚锛�213
+        /// </summary>
+        /// <param name="mst"></param>
+        /// <param name="code"></param>
+        internal static void DiscRemoverEmptySupport(TN_I_TASK_MST mst, int code)
+        {
+            var plc = Settings.GetPlcInfo().Where(a => a.location == mst.CN_S_END_BIT).FirstOrDefault();
+            if (plc != null)
+            {
+                if (code == 4)
+                {
+                    //鍗歌揣鐢宠锛屽厛鍒ゆ柇璁惧鏄惁鍏佽杩涙枡锛屽鏋滄槸鐩存帴鏀瑰弬鏁帮紝骞堕�鐭ヨ澶�+                    if (mst.CN_S_BUSS_TYPE == "3妤煎寘瑁呭彇鏂�) PLCControl.CheckUpReqUnload(plc, mst.CN_S_TASK_NO);
+                }
+                if (code == 1213)
+                {
+                    //鍗歌揣瀹屾垚鐢宠锛屽垽鏂澶囬偅杈硅繘鏂欏畬鎴愶紝鏀瑰弬鏁伴�鐭gv绂诲紑
+                    if (mst.CN_S_BUSS_TYPE == "3妤煎寘瑁呭彇鏂�) PLCControl.CheckUpUnloadComplete(plc.ip, mst.CN_S_TASK_NO,mst.CN_S_START_BIT,plc.port);
+                }
+            }
+            else CMMLog.Info($"璁惧鏈厤缃細{mst.CN_S_END_BIT}");
+        }
+
+        /// <summary>
+        /// 璧风偣瀹夊叏瀵规帴锛�012瀹夊叏璇锋眰杩涘叆锛�瀹夊叏璇锋眰閫�嚭
+        /// </summary>
+        /// <param name="mst"></param>
+        /// <param name="code"></param>
+        internal static void StartPickUpDoorSafe(TN_I_TASK_MST mst, int code)
+        {
+            //3妤煎寘瑁呰ˉ绌猴細鍖呰鏈鸿ˉ绌烘墭娴佺▼鈥斺�3妤煎寘瑁呮満瀹夊叏闂ㄤ氦浜�+            var plc = Settings.GetPlcInfo().Where(a => a.location.Contains(mst.CN_S_START_BIT)).FirstOrDefault();
+            if (plc != null)
+            {
+                CMMLog.Info($"杩涘叆浠诲姟{mst.CN_S_BUSS_TYPE}鐨勬祦绋媨code}");
+                if (code == 1012)
+                {
+                    //鍗歌揣鐢宠锛屽厛鍒ゆ柇璁惧鏄惁鍏佽杩涙枡锛屽鏋滄槸鐩存帴鏀瑰弬鏁帮紝骞堕�鐭ヨ澶�+                    if (mst.CN_S_BUSS_TYPE == "3妤煎寘瑁呭彇鏂�) PLCControl.PickUpFullDoorUnload(plc.ip, mst.CN_S_TASK_NO,plc.deviceType);//杩涘叆3妤煎寘瑁呭彇鏂欐祦绋�012,ip:{plc.ip},task:{mst.CN_S_TASK_NO}
+                    //if (mst.CN_S_BUSS_TYPE == "3妤煎绉板叆缂撳瓨鏋� || mst.CN_S_BUSS_TYPE == "3妤煎绉板叆缂撳瓨鏋禢G") PLCControl.SecondWeightInCache1012(plc.ip, mst.CN_S_TASK_NO);//浜屾湡锛氱洿鎺ユ敼鍙傛暟
+                    if (mst.CN_S_BUSS_TYPE == "3妤肩紦瀛樻灦鍏ュ彔鎵�) TSHelper.GoToAGV(mst.CN_S_TASK_NO, 10, 1);
+                    if (mst.CN_S_BUSS_TYPE == "3妤煎彔鐩樹笅绾�) PLCControl.StackingReqUnload(plc.deviceType, mst.CN_S_TASK_NO);
+                    if (mst.CN_S_BUSS_TYPE == "3妤兼墦鍖呬笅绾�) PLCControl.PackingLineUnload1012(plc.ip, mst.CN_S_TASK_NO);
+                    if (mst.CN_S_BUSS_TYPE.Contains("鎻愬崌鏈�)) PLCControl.ElevatorStart(plc.ip, mst.CN_S_TASK_NO, mst.CN_S_BUSS_TYPE,plc.port);
+                }
+                if (code == 4)
+                {
+                    //鍗歌揣瀹屾垚鐢宠锛屽垽鏂澶囬偅杈硅繘鏂欏畬鎴愶紝鏀瑰弬鏁伴�鐭gv绂诲紑
+                    if (mst.CN_S_BUSS_TYPE == "3妤煎寘瑁呭彇鏂�) PLCControl.PickUpFullDoorComplete(plc.ip, mst.CN_S_TASK_NO, plc.deviceType);
+                    //if (mst.CN_S_BUSS_TYPE == "3妤煎绉板叆缂撳瓨鏋� || mst.CN_S_BUSS_TYPE == "3妤煎绉板叆缂撳瓨鏋禢G") PLCControl.SecondWeightInCache4(plc.deviceType, mst.CN_S_TASK_NO);
+                    if (mst.CN_S_BUSS_TYPE == "3妤煎彔鐩樹笅绾�) PLCControl.StackingComplete(plc.deviceType, mst.CN_S_TASK_NO);
+                    if (mst.CN_S_BUSS_TYPE == "3妤兼墦鍖呬笅绾�) PLCControl.PackingLineComplete4(plc.ip, mst.CN_S_SOURCE_NO);
+                    if (mst.CN_S_BUSS_TYPE != "3妤煎寘瑁呭彇鏂�) WMSHelper.ExecuteState(mst.CN_S_SOURCE_NO, 4);
+                    if (mst.CN_S_BUSS_TYPE.Contains("鎻愬崌鏈�)) PLCControl.ElevatorEnd(plc.ip, mst.CN_S_TASK_NO, mst.CN_S_BUSS_TYPE);
+                }
+            }
+            else CMMLog.Info($"鐐逛綅{mst.CN_S_START_BIT}鏈厤缃�);
+        }
+
+        /// <summary>
+        /// 婊氱瓛杞﹁捣鐐瑰埌浣嶄俊鍙凤細1112     鍙栬揣瀹屾垚锛�212
+        /// </summary>
+        /// <param name="mst"></param>
+        /// <param name="code"></param>
+        internal static void PickupAndUnload(TN_I_TASK_MST mst,int code)
+        {
+            //3妤煎寘瑁呰ˉ绌猴細鍖呰鏈鸿ˉ绌烘墭娴佺▼鈥斺�绌烘墭杈撻�绾夸氦浜掞紙鍙栫┖鎵橈紝鍙栫┖鎵樺畬鎴愶級
+            //3妤煎寘瑁呭彇鏂欙細3妤煎寘瑁呮満鍙栨枡鍘诲绉板钩鍙版祦绋嬧�鈥旇繘鍏ュ寘瑁呮満瀹夊叏闂ㄥ悗鍙栨枡
+            var plc = Settings.GetPlcInfo().Where(a => a.location == mst.CN_S_START_BIT).FirstOrDefault();
+            if (plc != null)
+            {
+                if (code == 1112)
+                {
+                    //涓夋ゼ鍖呰鏈鸿繘瀹夊叏闂ㄥ唴瀵规帴
+                    if (mst.CN_S_BUSS_TYPE == "3妤煎寘瑁呭彇鏂�) PLCControl.PickUpFullUnload(plc.ip, mst.CN_S_TASK_NO, plc.port);
+                }
+                if (code == 1212)
+                {
+                    //涓夋ゼ鍖呰鏈哄畨鍏ㄩ棬鍐呭鎺�  浜屾湡娌℃湁婊氱瓛杞︼紝鍥犳鏃犻渶鍚�鍖呰鏈�鍐欏叆 婊氱瓛鍋滄鎸囦护
+                    //if (mst.CN_S_BUSS_TYPE == "3妤煎寘瑁呭彇鏂�) PLCControl.PickUpFullComplete(plc.ip, mst.CN_S_TASK_NO);
+                }
+            }
+        }
+
+        #endregion
+
+        #region   浠诲姟澶勭悊鈥斺�鎷︽埅浠诲姟-鐢垫浠诲姟-鍙栨秷浠诲姟
+
+        /// <summary>
+        /// 鎷︽埅WMS鍙戦�鐨勪换鍔★紝鍥犱负WCS闇�瀵逛换鍔$被鍨嬭繘琛屽垎绫诲鐞�+        /// </summary>
+        /// <param name="mst"></param>
+        /// <returns></returns>
+        internal static bool Intercept(TN_I_TASK_MST mst)
+        {
+            bool result = false;// false:鐩存帴鎺ㄩ� true:鎷︽埅涓嶆帹閫�+            try
+            {
+                //瀵筗MS涓嬪彂鐨勪换鍔¤繘琛屾嫤鎴紝鍥犱负AMS闇�瀵逛换鍔$被鍨嬭繘琛屽尯鍒嗗鐞嗭紙璋冭瘯閫氳繃鍚庯紝鍙互鑰冭檻灏佽涓烘柟娉曪級
+
+                CMMLog.Info($"浠诲姟鎷︽埅澶勭悊锛氭墽琛屽紑濮嬶紒浠诲姟鍙凤細{mst.CN_S_TASK_NO},ext1:{mst.Ext1}");
+
+                //if (!string.IsNullOrEmpty(mst.CN_S_BUSS_TYPE) && mst.CN_S_BUSS_TYPE != "杞繍")
+                //{
+                //    CMMLog.Info($"bussType:{mst.CN_S_BUSS_TYPE}");
+                //    mst.CN_S_BUSS_TYPE = getTaskType(mst.CN_S_BUSS_TYPE, false);
+                //    if (string.IsNullOrEmpty(mst.CN_S_BUSS_TYPE))
+                //    {
+                //        return true;
+                //    }
+                //}
+
+                #region
+                if (mst.CN_S_BUSS_TYPE == "3妤肩紦瀛樻灦鍏ュ彔鎵�)
+                {
+                    //瀵绘壘鎵�湁姝e湪鎵ц涓殑  3妤肩紦瀛樻灦鍏ュ彔鎵� 浠诲姟
+                    //var taskInfoList = MongoDBSingleton.Instance.Find<TN_I_TASK_MST>(Query.And(Query.EQ("CN_S_BUSS_TYPE", "3妤肩紦瀛樻灦鍏ュ彔鎵�), Query.NotIn("CN_S_STATUS", new List<MongoDB.Bson.BsonValue>() { "鏈墽琛�, "寰呮帹閫� })), "TN_I_TASK_MST");
+                    //if (taskInfoList.Count > 0)
+                    //{
+                    //    //鎵惧埌浜嗘湁姝e湪鎵ц涓殑浠诲姟锛岄�杩囨槸鍚﹀嵏璐у畬鎴愬垽鏂槸鍚﹀彲鎺ㄩ�浠诲姟
+                    //    try
+                    //    {
+                    //        for (int i = taskInfoList.Count - 1; i >= 0; i--)
+                    //        {
+                    //            //鏌ヨ鎵�湁鐨勫凡鎺ㄩ�鐨勪换鍔★紝鍒ゆ柇鏄惁鍗歌揣瀹屾垚锛屽嵏璐у畬鎴愪粠鍒楄〃涓帀
+                    //            var taskNo = taskInfoList[i].CN_S_TASK_NO;
+                    //            var trackInfo = MongoDBSingleton.Instance.FindOne<TN_I_TASK_DTL_ACTION_TrackLog>(Query.And(Query.EQ("CN_S_TASK_NO", taskNo), Query.EQ("CN_S_ACTION_CODE", 6)), "TN_I_TASK_DTL_ACTION_TrackLog");
+                    //            if (trackInfo != null) taskInfoList.Remove(taskInfoList[i]);
+                    //        }
+                    //
+                    //        if(taskInfoList.Count > 0) 
+                    //        {
+                    //            int a = 0;
+                    //            int b = 0;
+                    //            foreach (var c in taskInfoList)
+                    //            {
+                    //                //鏌ヨ鎵�湁鏈帹閫佺殑浠诲姟
+                    //                if (c.CN_S_START_BIT.Substring(0,1) == mst.CN_S_START_BIT.Substring(0, 1)) a = a + 1;
+                    //                else b = b + 1;
+                    //            }
+                    //            if (a > b) return true;
+                    //        }
+                    //
+                    //        //鍒ゆ柇鏄惁杩樻湁娌℃湁鍙栬揣瀹屾垚鐨勪换鍔★紝鑻ヨ繕鏈夛紝涓嶆帹閫�+                    //        if (taskInfoList.Count > 0)
+                    //        {
+                    //            return true;
+                    //        }
+                    //    }
+                    //    catch (Exception ex)
+                    //    {
+                    //        Console.WriteLine("3妤肩紦瀛樻灦鍏ュ彔鎵�" + ex.Message);
+                    //    }
+                    //}
+                }
+                #endregion
+
+                #region 鐐瑰埌鐐硅浆杩愬埌鍖呰鏈�+                var plcInfo = Settings.GetPlcInfo().Where(a => a.location == mst.CN_S_END_BIT && a.enable == 1).FirstOrDefault();
+                if(plcInfo != null && plcInfo.deviceType == "1")
+                {
+                    CMMLog.Info($"ext1:{mst.Ext1},{string.IsNullOrEmpty(mst.Ext1)}");
+                    CMMLog.Info($"CN_S_BUSS_TYPE:{mst.CN_S_BUSS_TYPE},{string.IsNullOrEmpty(mst.CN_S_BUSS_TYPE)}");
+                    if (string.IsNullOrEmpty(mst.Ext1) && (string.IsNullOrEmpty(mst.CN_S_BUSS_TYPE) || mst.CN_S_BUSS_TYPE == "杞繍"))
+                    {
+                        //纭畾鏄笂鍖呰鏈虹殑浠诲姟
+                        mst.Ext1 = "DDD_BZJ";
+                    }
+                }
+                #endregion
+
+                var bussTypeInfo = Settings.GetHouWeiCodeo().Where(a => a.location == mst.Ext1).FirstOrDefault();
+                if (bussTypeInfo != null)
+                {
+                    CMMLog.Info($"type:{bussTypeInfo.taskType}");
+                    string taskType = getTaskType(bussTypeInfo.taskType, true);
+                    if (!string.IsNullOrEmpty(taskType))
+                    {
+                        if (bussTypeInfo.task != "5" && bussTypeInfo.task != "15")
+                            MongoDBSingleton.Instance.Update<TN_I_TASK_MST>(Query.EQ("_id", mst._id), Update.Set("CN_S_BUSS_TYPE", taskType).Set("Ext1", mst.Ext1 + taskType), "TN_I_TASK_MST", UpdateFlags.None);
+                        else
+                        {
+                            var wmsinfo = MongoDBSingleton.Instance.FindOne<WMSInfo>(Query.EQ("trayCode", mst.CN_S_BATCH_NO), "WMSInfo");
+                            if (wmsinfo == null)
+                            {
+                                MongoDBSingleton.Instance.Update<TN_I_TASK_MST>(Query.EQ("_id", mst._id), Update.Set("CN_S_BUSS_TYPE", taskType).Set("Ext1", mst.Ext1 + taskType), "TN_I_TASK_MST", UpdateFlags.None);
+                                var transInfo = mst.transportInfo.First();
+                                List<string> list = new List<string>(transInfo.itemWeight.Split(','));
+                                MongoDBSingleton.Instance.Insert<WMSInfo>(new WMSInfo
+                                {
+                                    trayCode = mst.CN_S_BATCH_NO,
+                                    itemCode = transInfo.itemCode,
+                                    itemPCode = transInfo.itemPCode,
+                                    location = transInfo.itemName,
+                                    productWeight = list[0],
+                                    trayCodeWeight = list[1],
+                                    oneTrayWeight = list[2],
+                                    palletLayers = list[3],
+                                    addState = int.Parse(transInfo.itemFeatures),
+                                    packageCode = transInfo.trayCode,
+                                    TaskNo = mst.CN_S_TASK_NO,
+                                    dateTime = DateTime.Now
+                                });
+                            }
+                            else
+                            {
+                                //Console.WriteLine("浠诲姟鎷︽埅澶勭悊锛歐MSINFO涓棿琛ㄧ洰鍓嶆鍦ㄦ湁缂撳瓨鏋跺叆鍙犳墭鐨勪换鍔″湪鎵ц锛�);
+                                CMMLog.Info("浠诲姟鎷︽埅澶勭悊锛歐MSINFO涓棿琛ㄧ洰鍓嶆鍦ㄦ湁缂撳瓨鏋跺叆鍙犳墭鐨勪换鍔″湪鎵ц锛�);
+                            }
+                        }
+                        result = true;
+
+                        if (bussTypeInfo.task == "21")
+                        {
+                            //绔嬪簱鍏ュ簱鐨勪紭鍏堢骇瑕侀珮浜庡嚭搴撶殑浼樺厛绾�+                            var taskInfo = MongoDBSingleton.Instance.FindOne<TN_I_TASK_MST>(Query.And(Query.EQ("CN_S_BUSS_TYPE", "缂撳瓨鏋跺叆绔嬪簱"), Query.EQ("CN_S_STATUS", "鏈墽琛�)), "TN_I_TASK_MST");
+                            if (taskInfo == null)
+                            {
+                                //3妤兼垚鍝佸嚭搴撲换鍔℃嫤鎴�+                                if (OutWareTask(mst))
+                                {
+                                    CMMLog.Info("鎴愬搧鍑哄簱娴佺▼锛屼换鍔℃洿鏀逛负false");
+                                    result = false;
+                                }
+                                else
+                                {
+                                    CMMLog.Info("鎴愬搧鍑哄簱娴佺▼锛屼换鍔℃洿鏀逛负true");
+                                    result = true;
+                                }
+                            }
+                            else
+                            {
+                                result = true;
+                            }
+                        }
+                    }
+                    else
+                    {
+                        MongoDBSingleton.Instance.Insert(new taskTypeConversion
+                        {
+                            ChineseType = bussTypeInfo.taskType
+                        }, "taskTypeConversion"); 
+
+                        CMMLog.Info($"浠诲姟绫诲瀷杞崲琛ㄦ湭閰嶇疆璇ヤ换鍔$殑鑻辨枃浠诲姟绫诲瀷锛屼换鍔$被鍨嬶細{bussTypeInfo.taskType}");
+                    }
+                }
+                MongoDBSingleton.Instance.Update<TN_I_TASK_MST>(Query.EQ("_id", mst._id), Update.Set("CN_S_STATUS", "鏈墽琛�), "TN_I_TASK_MST", UpdateFlags.None);
+                CMMLog.Info("浠诲姟鎷︽埅澶勭悊锛氭墽琛屽畬姣曪紒");
+            }
+            catch(Exception ex)
+            {
+                Console.WriteLine($"taskNo:{mst.CN_S_TASK_NO},Intercept ex:{ex}");
+                return true;
+            }
+            CMMLog.Info($"RESULT:{result}");
+            return result;
+        }
+
+        /// <summary>
+        /// 浠诲姟涓嫳鏂囪浆鎹�+        /// </summary>
+        /// <param name="taskType"></param>
+        /// <param name="result">true 涓�鑻�/param>
+        /// <returns></returns>
+        internal static string getTaskType(string taskType,bool result)
+        {
+            string type = "";
+
+            try
+            {
+                if (result)
+                {
+                    //鏍规嵁涓枃鏌ヨ鑻辨枃
+                    type = MongoDBSingleton.Instance.FindOne<taskTypeConversion>(Query.EQ("ChineseType", taskType), "taskTypeConversion").EnglishType;
+                }
+                else
+                {
+                    //鏍规嵁鑻辨枃鏌ヨ涓枃
+                    type = MongoDBSingleton.Instance.FindOne<taskTypeConversion>(Query.EQ("EnglishType", taskType), "taskTypeConversion").ChineseType;
+                }
+            }
+            catch (Exception ex)
+            {
+                CMMLog.Info("getTaskType err:"+ex.Message);
+                return "";
+            }
+            
+            return type;
+        }
+
+        public class taskTypeConversion
+        {
+            public ObjectId _id { get; set; }
+            public string EnglishType { get; set; }
+            public string ChineseType { get; set; }
+        }
+
+
+        internal static bool OutWareTask(TN_I_TASK_MST mst)
+        {
+            bool result = false;
+            CMMLog.Info("鎴愬搧鍑哄簱浠诲姟娴佺▼澶勭悊寮�");
+            string endMachLoc = "";
+            string endLoc = "";
+            //1銆佸垽鏂笂鏂欏钩鍙版槸鍚︾┖闂诧紝鑻ョ┖闂叉洿鏀圭粓鐐瑰埌涓婃枡骞冲彴
+            var plc = Settings.GetPlcInfo().Where(a => a.deviceType == "18" && a.enable == 1).ToList();
+            if (plc.Count > 0)
+            {
+                foreach(var a in plc)
+                {
+                    CMMLog.Info($"鏌ヨ杈撻�绾垮綋鍓嶇偣浣嶏細{a.location}");
+                    if (CheckEndFree(a.location))
+                    {
+                        CMMLog.Info($"褰撳墠杈撻�绾挎棤浠诲姟");
+                        //var num = a.device == "26" ? 1 : 2;
+
+                        var result1 = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                        {
+                            dataNum = 1,
+                            addr = a.readAddr + 1,
+                            host = a.ip,
+                            port = a.port
+                        });
+                        CMMLog.Debug($"鎴愬搧鍑哄簱娴佺▼锛氳鍙栬緭閫佺嚎{a.device},ip:{a.ip},port:{a.port},閫氶亾鍙蜂负锛歿a.readAddr + 1}鐨勫�涓猴細{result1.result[0]}");
+                        if (result1 != null && result1.errCode == 0)
+                        {
+                            if (result1.result[0] == 1)
+                            {
+                                endMachLoc = a.location;
+                                break;
+                            }
+                        }
+                    }
+                }
+
+                if (string.IsNullOrEmpty(endMachLoc))
+                {
+                    CMMLog.Info("杈撻�绾夸笉鍙敤锛岀敓鎴愪换鍔″埌缂撳瓨璐ф灦");
+                    //璁惧闈炵┖闂诧紝璁$畻缁堢偣鍒拌揣鏋�+                    var locInfo = MongoDBSingleton.Instance.FindOne<location>(Query.And(Query.EQ("N_CURRENT_NUM",0),Query.EQ("S_LOC_STATE", "鏃�)), "location");
+                    if (locInfo != null)
+                    {
+                        endLoc = locInfo.S_LOC_CODE;
+                    }
+                    if (!string.IsNullOrEmpty(endLoc))
+                    {
+                        //鏀逛换鍔$殑缁堢偣
+                        MongoDBSingleton.Instance.Update<TN_I_TASK_MST>(Query.EQ("CN_S_TASK_NO", mst.CN_S_TASK_NO), Update.Set("CN_S_END_BIT", endLoc), UpdateFlags.None);
+
+                        //缁堢偣涓婇攣
+                        var trayCode = mst.transportInfo[0].trayCode;
+                        MongoDBSingleton.Instance.Update<location>(Query.EQ("S_LOC_CODE", endLoc), Update.Set("S_LOC_STATE", "鍏ュ簱閿�).Set("S_TRAY_CODE", trayCode), UpdateFlags.None);
+
+                        new SqlHelper<object>().ExecuteSql($"update dbo.tn_am_task_mst set CN_S_END_BIE='{endLoc}',CN_S_END_AGVBIT = '{StockInstance.Instance.GetAGVCodeForBitCode(endLoc)}' where CN_S_TASK_NO = '{mst.CN_S_TASK_NO}'");
+                        result = true;
+                    }
+                }
+                else
+                {
+                    CMMLog.Info($"鐢熸垚浠诲姟鍒拌緭閫佺嚎锛屾洿鏀逛换鍔$粓鐐癸紝璐т綅鍙凤細{endMachLoc}");
+                    //鏀逛换鍔$殑缁堢偣
+                    MongoDBSingleton.Instance.Update<TN_I_TASK_MST>(Query.EQ("CN_S_TASK_NO", mst.CN_S_TASK_NO), Update.Set("CN_S_END_BIT", endMachLoc), UpdateFlags.None);
+
+                    endBitModel bit = new endBitModel
+                    {
+                        CN_S_TASK_NO = mst.CN_S_TASK_NO,
+                        CN_S_END_BIT = endMachLoc,
+                    };
+                    string json = JsonConvert.SerializeObject(bit);
+
+                    new SqlHelper<object>().ExecuteSql($"update dbo.tn_am_task_mst set CN_S_END_BIE='{endMachLoc}',CN_S_END_AGVBIT = '{StockInstance.Instance.GetAGVCodeForBitCode(endMachLoc)}' where CN_S_TASK_NO = '{mst.CN_S_TASK_NO}'");
+                    result = true;
+                }
+            }
+            else
+            {
+                CMMLog.Info("涓婃枡骞冲彴璁惧鏈厤缃�);
+            }
+            CMMLog.Info($"OutWareTask result:{result}");
+            return result;
+        }
+
+        public class endBitModel
+        {
+            public string CN_S_TASK_NO { get; set; }
+            public string CN_S_END_BIT { get; set; }
+        }
+
+        /// <summary>
+        /// 鎴愬搧鍑哄簱浠诲姟涓棿琛�+        /// </summary>
+        public class OutWareTable
+        {
+            public ObjectId _id { get; set; }
+            public string itemCode { get; set; }
+            public string batchNo { get; set; }
+        }
+
+        public class location
+        {
+            public ObjectId _id { get; set; }
+            public string S_LOC_CODE { get; set; }
+            //public string S_ITEM_CODE { get; set; }
+            //public string S_BATCH_NO { get; set; }
+            public string S_LOC_STATE { get; set; } = "鏃�;
+            public int N_CURRENT_NUM { get; set; }
+            public string S_TRAY_CODE { get; set; }
+        }
+
+        /// <summary>
+        /// 鐢垫浠诲姟
+        /// </summary>
+        public class elevatorTask
+        {
+            public ObjectId _id { get; set; }
+            /// <summary>
+            /// 鐢垫鐐逛綅
+            /// </summary>
+            public string S_DT_LOC { get; set; }
+            /// <summary>
+            /// 浠诲姟缁堢偣
+            /// </summary>
+            public string S_END_LOC { get; set; }
+            /// <summary>
+            /// 缁堢偣妤煎眰
+            /// </summary>
+            public int S_END_FLOOR { get; set; }
+            /// <summary>
+            /// 浠诲姟绫诲瀷
+            /// </summary>
+            public string S_TASK_TYPE { get; set; }
+            /// <summary>
+            /// 鍙栬揣瀹屾垚 0-鏈畬鎴�1-宸插畬鎴�+            /// </summary>
+            public string S_USE { get; set; }
+            public TN_I_TASK_MST task_mst {get;set;}
+            public WMSInfo wmsInfo { get; set; }
+            /// <summary>
+            /// 浠诲姟鍒涘缓鏃堕棿
+            /// </summary>
+            public DateTime time { get; set; }
+        }
+
+        /// <summary>
+        /// 鍙栨秷浠诲姟澶勭悊
+        /// </summary>
+        /// <param name="mst"></param>
+        public static void TaskCancel(TN_I_TASK_MST mst)
+        {
+            CMMLog.Info($"杩涘叆鍙栨秷浠诲姟娴佺▼锛佷换鍔$被鍨嬶細{mst.CN_S_BUSS_TYPE}");
+            if (mst.CN_S_BUSS_TYPE == "3妤煎寘瑁呭彇鏂�)
+            {
+                CMMLog.Info($"浠诲姟绫诲瀷锛歿mst.CN_S_BUSS_TYPE},浠诲姟鎿嶄綔锛氭煡璇�MachineInfo>琛ㄤ腑宸插綋鍓嶈捣鐐逛负鍖呰鏈哄彿鐨勬暟鎹甿achineNo锛屼笉涓虹┖锛屽垹闄わ紒浠诲姟鍙凤細{mst.CN_S_TASK_NO},浠诲姟璧风偣锛歿mst.CN_S_START_BIT},浠诲姟缁堢偣锛歿mst.CN_S_END_BIT}");
+                var tray = MongoDBSingleton.Instance.FindOne<MachineInfo>(Query.EQ("machineNo", mst.CN_S_START_BIT), "MachineInfo");
+                if(tray != null)
+                {
+                    MongoDBSingleton.Instance.Remove<MachineInfo>(Query.EQ("machineNo", mst.CN_S_START_BIT), RemoveFlags.Single);
+                    if (ERPService.ERPSwitch01 == "0") MongoDBSingleton.Instance.Remove<MachineInfoTwo>(Query.EQ("machineNo", mst.CN_S_START_BIT), "MachineInfoTwo", RemoveFlags.Single);
+                }
+            }
+            if (mst.CN_S_BUSS_TYPE == "3妤肩紦瀛樻灦鍏ュ彔鎵�)
+            {
+                var plc = Settings.GetPlcInfo().Where(a => a.deviceType == "3").FirstOrDefault();
+                if (plc != null)
+                {
+                    var machine = MongoDBSingleton.Instance.FindOne<WMSInfo>(Query.EQ("trayCode", mst.CN_S_BATCH_NO), "WMSInfo");
+                    if (machine != null)
+                    {
+                        #region   鍐欏涓狹ODBUS鏁版嵁
+                        int[] num = DiePan(machine);
+
+                        CMMLog.Info($"send num:");
+                        CMMLog.Info(JsonConvert.SerializeObject(num));
+                        var wirteall01 = OITcpHelper.RegisterWriteOutPutMulti(new OITcpHelper.RegisterWriteOutPutModelMulti
+                        {
+                            addr = plc.writeAddr + 10,
+                            host = plc.ip,
+                            port = plc.port,
+                            data = num
+                        });
+                        #endregion
+                        MongoDBSingleton.Instance.Remove<WMSInfo>(Query.EQ("trayCode", mst.CN_S_BATCH_NO), RemoveFlags.Single);
+                    }
+                }
+            }
+            MongoDBSingleton.Instance.Remove<Mongo_AGV_TASK_STATE>(Query.EQ("TaskNo", mst.CN_S_TASK_NO), RemoveFlags.None);
+            CMMLog.Info($"鍙栨秷浠诲姟娴佺▼缁撴潫锛�);
+        }
+        /// <summary>
+        /// 寮哄埗瀹屾垚浠诲姟澶勭悊
+        /// </summary>
+        /// <param name="mst"></param>
+        /// <param name="action"></param>
+        public static void ForceComplete(TN_I_TASK_MST mst, TN_I_TASK_DTL_ACTION action)
+        {
+            CMMLog.Info($"寮哄埗瀹屾垚浠诲姟澶勭悊锛氭敹鍒�淇″彿涔嬪悗鐗规畩浠诲姟绫诲瀷澶勭悊锛氫换鍔″彿锛歿mst.CN_S_TASK_NO},浠诲姟绫诲瀷锛歿mst.CN_S_BUSS_TYPE}");
+            if(mst.CN_S_BUSS_TYPE == "3妤煎寘瑁呭彇鏂�)
+            {
+                MongoDBSingleton.Instance.Remove<MachineInfo>(Query.EQ("trayCode", mst.CN_S_BATCH_NO), RemoveFlags.Single);
+                if (ERPService.ERPSwitch01 == "0") MongoDBSingleton.Instance.Remove<MachineInfoTwo>(Query.EQ("trayCode", mst.CN_S_BATCH_NO), "MachineInfoTwo", RemoveFlags.Single);
+            }
+        }
+        /// <summary>
+        /// 鐢垫鍙栨秷鍒犻櫎浠诲姟
+        /// </summary>
+        /// <param name="mst"></param>
+        /// <param name="action"></param>
+        public static void ForceCancel(TN_I_TASK_MST mst, TN_I_TASK_DTL_ACTION action)
+        {
+            CMMLog.Info($"鍙栨秷浠诲姟澶勭悊锛氭敹鍒�淇″彿涔嬪悗鐗规畩浠诲姟绫诲瀷澶勭悊锛氫换鍔″彿锛歿mst.CN_S_TASK_NO},浠诲姟绫诲瀷锛歿mst.CN_S_BUSS_TYPE}");
+            if (mst.CN_S_BUSS_TYPE == "3妤煎寘瑁呭彇鏂�)
+            {
+                MongoDBSingleton.Instance.Remove<MachineInfo>(Query.EQ("trayCode", mst.CN_S_BATCH_NO), RemoveFlags.Single);
+                if (ERPService.ERPSwitch01 == "0") MongoDBSingleton.Instance.Remove<MachineInfoTwo>(Query.EQ("trayCode", mst.CN_S_BATCH_NO), "MachineInfoTwo", RemoveFlags.Single);
+            }
+        }
+        #endregion
+
+        #region   鍏呯數浠诲姟
+        public static string battery = Settings.BatteryTime;
+        internal static void AGVBatteryTime()
+        {
+            CMMLog.Info("杩涘叆鍏呯數浠诲姟娴佺▼鍒ゆ柇锛氭墽琛屽紑濮嬶紒");
+            var now = DateTime.Today;
+            string date = now.Year.ToString() + "-" + now.Month.ToString() + "-" + now.Day.ToString() + " " + battery;
+            DateTime dt = Convert.ToDateTime(date);
+            //鍗佸垎閽熶互鍐呭垽鏂綋鍓嶅厖鐢垫々鏄惁鏈夊皬杞﹀湪鍏呯數锛屾病鏈夊垯鎺ㄩ�褰撳墠鍏呯數妗╃數閲忔渶浣庣殑涓�締灏忚溅鍘诲厖鐢碉紝骞跺啓鍏ュ厖鐢垫々鐘舵�
+            CMMLog.Info("杩涘叆鍏呯數浠诲姟娴佺▼:鑾峰彇閰嶇疆鏂囦欢鏃堕棿锛屽苟鍒ゆ柇褰撳墠鏃堕棿鍑忓幓閰嶇疆鏂囦欢鏃堕棿鏄惁鍦�0鍒嗛挓浠ュ唴锛�);
+            if (DateTime.Now.Subtract(dt).TotalMinutes <= 20 && DateTime.Now.Subtract(dt).TotalMinutes > 0)
+            {
+                //鍏堝垽鏂腑闂磋〃鏄惁鏈夊綋鍓嶅厖鐢垫々鐨勭姸鎬侊紝鏈夊垯涓嶆搷浣滐紝鍙嶄箣杩涘叆灏忚溅鐢甸噺鏌ヨ
+                CMMLog.Info("杩涘叆鍏呯數浠诲姟娴佺▼:褰撳墠鏃堕棿婊¤冻鐢熸垚鍏呯數浠诲姟鍩烘湰瑕佹眰锛屽紑濮嬪垽鏂瑿hargingPile閰嶇疆椤逛腑褰撳墠鍏呯數妗╃姸鎬佹槸鍚﹀紑鍚�);//ChargingPile
+                var list = Settings.GetChargingPile().Where(a => a.enable == "1").ToList();
+                if (list.Count > 0)
+                {
+                    //CMMLog.Info("04");
+                    list.ForEach(a => {
+                        //CMMLog.Info("05");
+                        var margin = MongoDBSingleton.Instance.FindOne<MarginAGV>(Query.EQ("marginGroup", int.Parse(a.charginGroup)), "MarginAGV");
+                        int agvBattery = 1000, agvNo = 0, marginGroup = 0;
+                        if (margin == null)
+                        {
+                            CMMLog.Info($"杩涘叆鍏呯數浠诲姟娴佺▼锛氬垽鏂綋鍓嶅厖鐢垫々鍒嗙粍{a.charginGroup}鑳藉惁鍦–hargingPile閰嶇疆椤逛腑鏌ユ壘鍒颁笖enable涓哄紑鍚姸鎬侊紒");
+                            var list2 = Settings.GetChargingPile().Where(b => b.charginGroup == a.charginGroup && b.enable == "1").ToList();
+                            list2.ForEach(b =>
+                            {
+                                CMMLog.Info($"杩涘叆鍏呯數浠诲姟娴佺▼锛氬垽鏂綋鍓嶈溅鍙疯兘鍚﹀湪<HangChaAGV>灏忚溅杞﹁韩鐘舵�琛ㄤ腑鏌ヨ鍒版暟鎹紝杞﹀彿agvNo:{b.agvNo}");
+                                var battery = MongoDBSingleton.Instance.FindOne<HangChaAGV>(Query.EQ("agvNo", b.agvNo), "HangChaAGV");
+                                if(battery != null)
+                                {
+                                    if (int.Parse(battery.agvBattery) < agvBattery)
+                                    {
+                                        //CMMLog.Info($"杩涘叆鍏呯數浠诲姟娴佺▼锛�6 ");
+                                        agvBattery = int.Parse(battery.agvBattery);
+                                        agvNo = int.Parse(b.agvNo);
+                                        marginGroup = int.Parse(b.charginGroup);
+                                    }
+                                }
+                                else CMMLog.Info($"杩涘叆鍏呯數浠诲姟娴佺▼锛歟rror:褰撳墠杞﹀彿鍦℉angChaAgv涓棿琛ㄤ腑鏌ヨ涓嶅埌鏁版嵁锛佽溅鍙凤細{b.agvNo},鎵�睘鍏呯數妗╋細{b.charginGroup}");
+                            });
+                            //鎺ㄩ�灏忚溅鍓嶅線鎸囧畾鍏呯數妗╋紝骞舵彃鍏ヤ腑闂磋〃鐘舵�
+                            var agv = MongoDBSingleton.Instance.FindOne<MarginAGV>(Query.And(Query.EQ("agvNo", agvNo),Query.EQ("marginGroup", marginGroup)), "MarginAGV");
+                            if(agv == null && agvNo != 0)
+                            {
+                                TSHelper.SendChargeTask(agvNo.ToString(), true);
+                                //澧炲姞鏃堕棿
+                                MongoDBSingleton.Instance.Insert<MarginAGV>(new MarginAGV { agvNo = agvNo, marginGroup = marginGroup ,dateTime = DateTime.Now});
+                            }
+                        }
+                    });
+                }
+            }
+            else
+            {
+                CMMLog.Info("杩涘叆鍏呯數浠诲姟娴佺▼锛氳秴杩囧崄鍒嗛挓锛屽垹闄や腑闂磋〃");
+                //瓒呰繃鍗佸垎閽燂紝鍒犻櫎涓棿琛�+                MongoDBSingleton.Instance.ReomveAll<MarginAGV>();
+            }
+            CMMLog.Info("杩涘叆鍏呯數浠诲姟娴佺▼鍒ゆ柇锛氭墽琛岀粨鏉燂紒");
+        }
+        #endregion
+
+        /// <summary>
+        /// 鑾峰彇鏉弶AGV<HangChaAGV>琛ㄩ噷灏忚溅鐢甸噺锛屽苟灏嗗叾鍐欏叆MODBUS涓�+        /// </summary>
+        public static int[] GetBatteryHang() 
+        {
+            int[] num = new int[5];
+            var bits = Settings.GetChargingAgvNo();
+            CMMLog.Info($"鑾峰彇灏忚溅杞﹀彿淇℃伅锛歿JsonConvert.SerializeObject(bits)}");//6723
+            for (int i = 0; i < num.Length; i++)
+            {
+                var battery = MongoDBSingleton.Instance.FindOne<HangChaAGV>(Query.EQ("agvNo", bits[i]), "HangChaAGV");
+                num[i] = battery == null ? 0 : int.Parse(battery.agvBattery);
+            }
+            CMMLog.Info($"鑾峰彇灏忚溅鐢甸噺锛歿JsonConvert.SerializeObject(num)}");
+            return num;
+        }
+
+        /// <summary>
+        /// WMS鍙犵洏鏈轰换鍔′腑瀛樺偍淇℃伅
+        /// </summary>
+        public class WMSInfo
+        {
+            public ObjectId _id { get; set; }
+            /// <summary>
+            /// 浜у搧鍨嬪彿 11 60
+            /// </summary>
+            public string itemCode { get; set; }
+            /// <summary>
+            /// 鎵规鍙� 30 30
+            /// </summary>
+            public string itemPCode { get; set; }
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁3鈥斺�鎵樼洏鐮�         
+            /// </summary>
+            public string trayCode { get; set; }
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁1鈥斺�鍖呰鏈哄彿        
+            /// </summary>
+            public string location { get; set; }
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁2鈥斺�浜у搧闇�眰閲嶉噺锛�2浣嶆暣鏁�+            /// </summary>
+            public string productWeight { get; set; }
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁2鈥斺�鎵樼洏閲嶉噺锛�2浣嶆暣鏁�+            /// </summary>
+            public string trayCodeWeight { get; set; }
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁2鈥斺�鍗曟墭瀹為檯閲嶉噺锛�2浣嶆暣鏁�+            /// </summary>
+            public string oneTrayWeight { get; set; }
+            /// <summary>
+            /// 鏄惁鍙犲簳鎵橈紙1-涓嶅彔搴曟墭锛�-鍙犲簳鎵橈級
+            /// </summary>
+            public string palletLayers { get; set; }
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁1鈥斺�鏄惁闇�鍙犲寘锛�锛氬彔鍖咃紝2锛氫笉鍙犲寘
+            /// </summary>
+            public int addState { get; set; }
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁1鈥斺�琚嬪彿(001,002,003鈥�99)
+            /// </summary>
+            public string packageCode { get; set; }
+            public DateTime dateTime { get; set; }
+            public string TaskNo { get; set; }
+        }
+        /// <summary>
+        /// 鍏呯數浠诲姟涓棿琛�+        /// </summary>
+        public class MarginAGV
+        {
+            public ObjectId id { get; set; }
+            public int agvNo { get; set; }
+            public int marginGroup { get; set; }
+            public DateTime dateTime { get; set; }
+        }
+        /// <summary>
+        /// 鍘婚櫎瀛楃涓蹭腑NULL瀛楃涓�+        /// </summary>
+        internal static string RemoveNull(string str)
+        {
+            CMMLog.Info($"remove:{str}");
+            string result = "";
+            string empty = null;
+            for(int i = 0; i <= str.Length-1; i++)
+            {
+                if(str.Substring(i,1) != empty && str.Substring(i, 1) != "" && str.Substring(i, 1) != " " && str.Substring(i,1) != "\0")
+                {
+                    //CMMLog.Debug($"str.substring:{i},{str.Substring(i, 1)}");
+                    result = result + str.Substring(i, 1);
+                }
+                else
+                {
+                    return result;
+                }
+            }
+            return result;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏃堕棿鎴�+        /// </summary>
+        /// <param name="DataBitType">鏁版嵁浣嶆暟锛氬�锛�2|64  鍚箟锛�2浣峾64浣�/param>
+        /// <param name="TimeType">鑾峰彇鏃堕棿绫诲瀷锛氬�锛�|2   鍚箟锛�-绉掔骇   2-姣绾�/param>
+        /// <param name="TimeUtcType">鑾峰彇鏃堕棿Utc绫诲瀷锛氬�锛�|2   鍚箟锛�-鏈湴鏃堕棿   2-Utc鏃堕棿</param>
+        /// <returns></returns>
+        public static string GetTimeStamp(int DataBitType, int TimeType, int TimeUtcType)
+        {
+            string timeStamp = "";
+
+            //鏃堕棿鎴虫墦鍗�+            DateTime dateTime = TimeUtcType == 1 ? DateTime.Now : DateTime.UtcNow;//鏈湴鏃堕棿|Utc鏃堕棿鑾峰彇
+            TimeSpan ts = dateTime - new DateTime(1970, 1, 1, 0, 0, 0, 0);//鏃堕棿鎴宠幏鍙�+            double tsTime = TimeType == 1 ? ts.TotalSeconds : ts.TotalMilliseconds;//绉掔骇|姣绾ф椂闂磋幏鍙�+
+            string TimeTypeInfo = TimeType == 1 ? "绉掔骇" : "姣绾�;
+            string TimeUtcTypeInfo = TimeUtcType == 1 ? "鏈湴鏃堕棿" : "Utc鏃堕棿";
+            timeStamp = DataBitType == 32 ? Convert.ToInt32(tsTime).ToString() : Convert.ToInt64(tsTime).ToString();
+
+            //Console.WriteLine($"鏃堕棿鎴虫墦鍗帮細{DataBitType}浣嶏紝{TimeTypeInfo}锛寋TimeUtcTypeInfo}锛屾椂闂存埑锛歿timeStamp}");
+
+            return timeStamp;
+        }
+
+        public static int GetWeekOfMonth(DateTime daytime)
+        {
+            int dayInMonth = daytime.Day;
+            //鏈湀绗竴澶�+            DateTime firstDay = daytime.AddDays(1 - daytime.Day);
+            //鏈湀绗竴澶╂槸鍛ㄥ嚑
+            int weekday = (int)firstDay.DayOfWeek == 0 ? 7 : (int)firstDay.DayOfWeek;
+            //鏈湀绗竴鍛ㄦ湁鍑犲ぉ
+            int firstWeekEndDay = 7 - (weekday - 1);
+            //褰撳墠鏃ユ湡鍜岀涓�懆涔嬪樊
+            int diffday = dayInMonth - firstWeekEndDay;
+
+            diffday = diffday > 0 ? diffday : 1;
+            //褰撳墠鏄鍑犲懆,濡傛灉鏁撮櫎7灏卞噺涓�ぉ 
+            int WeekNumInMonth = ((diffday % 7) == 0 ? (diffday / 7 - 1) : (diffday / 7)) + 1 + (dayInMonth > firstWeekEndDay ? 1 : 0);
+
+            return WeekNumInMonth;
+        }
+
+        internal static void createDTTask()
+        {
+            var ele = MongoDBSingleton.Instance.FindOne<elevatorTask>(Query.EQ("S_USE", "0"),"elevatorTask");
+            if(ele != null)
+            {
+                CMMLog.Info("鎻愬崌鏈哄湪鎸囧畾妤煎眰锛屽苟涓旀槸寮�棬鐘舵�锛岀敓鎴愪簩娈典换鍔�);
+                string taskType = getTaskType(ele.S_TASK_TYPE, true) + "-ELETwo";
+                HHAmsExecuteResult req = AMSHelper.CreateTask(DateTime.Now.Ticks.ToString(), ele.S_DT_LOC, ele.S_END_LOC, taskType, 0);
+                if (req.success)
+                {
+                    CMMLog.Info($"銆恵taskType}銆戜换鍔$敓鎴愭垚鍔�);
+                }
+            }
+            else
+            {
+                CMMLog.Info("鐢垫浜屾浠诲姟鐢熸垚寮傚父锛屼腑闂磋〃鏃犳暟鎹�);
+            }
+
+        }
+    }
+}
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMProtocol/Properties/AssemblyInfo.cs b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..80dcb59
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+锘縰sing System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 鏈夊叧绋嬪簭闆嗙殑涓�埇淇℃伅鐢变互涓�+// 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у�鍙慨鏀�+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭�
+[assembly: AssemblyTitle("Hanhe.iWCS.TaizhouGEMTwoProtocol")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Hanhe.iWCS.TaizhouGEMTwoProtocol")]
+[assembly: AssemblyCopyright("Copyright 漏  2020")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏�ComVisible 璁剧疆涓�false 浼氫娇姝ょ▼搴忛泦涓殑绫诲瀷
+//瀵�COM 缁勪欢涓嶅彲瑙併�濡傛灉闇�浠�COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷
+//璇峰皢姝ょ被鍨嬬殑 ComVisible 鐗规�璁剧疆涓�true銆�+[assembly: ComVisible(false)]
+
+// 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
+[assembly: Guid("657c05ba-13f3-4f7c-8a39-862d5d8d078e")]
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓�缁勬垚: 
+//
+//      涓荤増鏈�+//      娆$増鏈�+//      鐢熸垚鍙�+//      淇鍙�+//
+//鍙互鎸囧畾鎵�湁杩欎簺鍊硷紝涔熷彲浠ヤ娇鐢ㄢ�鐢熸垚鍙封�鍜屸�淇鍙封�鐨勯粯璁ゅ�
+//閫氳繃浣跨敤 "*"锛屽涓嬫墍绀�
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMProtocol/ProtocolAnalysis.cs b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/ProtocolAnalysis.cs
new file mode 100644
index 0000000..3a263d5
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/ProtocolAnalysis.cs
@@ -0,0 +1,828 @@
+锘縰sing Hanhe.iWCS.Business;
+using Hanhe.iWCS.Common;
+using Hanhe.iWCS.Interface;
+using Hanhe.iWCS.MData;
+using Hanhe.iWCS.Model;
+using Hanhe.iWCS.Model.AMS;
+using Microsoft.Owin.Hosting;
+using MongoDB.Driver;
+using MongoDB.Driver.Builders;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using static Hanhe.iWCS.IndonesiaGLMProtocol.EnentListen;
+using static Hanhe.iWCS.IndonesiaGLMProtocol.MESHelper;
+using static Hanhe.iWCS.IndonesiaGLMProtocol.ProcessHelper;
+using static Hanhe.iWCS.IndonesiaGLMProtocol.PLCControl;
+using MongoDB.Bson;
+using static Hanhe.iWCS.IndonesiaGLMProtocol.ERPService;
+
+namespace Hanhe.iWCS.IndonesiaGLMProtocol
+{
+    /// <summary>
+    /// 璁惧鍗忚瑙f瀽绫�+    /// </summary>
+    public class ProtocolAnalysis : IProtocolAnalysis
+    {
+        private EquipmentCommandEQBLL CommandEQBLL = new EquipmentCommandEQBLL();
+        private ICallTaskProcessing iCallTask = new ICallTaskProcessing();
+        private Logger AMSLoggerAPI = new Logger();
+
+        public void StringRequestInfo(string protocolMsg, string address, int port) {
+        }
+
+        public void StringRequestInfo(string protocolMsg, string address, int port, string sessionID) {
+            //16杩涘埗鎺ユ敹
+            protocolMsg = protocolMsg.Trim();//3f 00 11 20 30 40 50 60 70 80 90 A0 24 24
+            if (protocolMsg != "") {
+            }
+            #region 鎻℃墜鍙嶉鎸囦护
+            //UpdateHandshakeFeedbackCode(protocolMsg);
+            PLCControl.Analysis(protocolMsg);
+
+            #endregion
+        }
+        
+        public void UpdateHandshakeFeedbackCode(string commandText) {
+            var query = Query.And(Query.EQ("CommandText", commandText + "$$"), Query.EQ("Status", Constants.COMMANDEQ_STATUS_SENDED));
+            EquipmentCommandEQ eq = MongoDBSingleton.Instance.FindOne<EquipmentCommandEQ>(query, typeof(EquipmentCommandEQ).Name);
+            if (eq != null) {
+                UpdateBuilder updateBuider = Update.Set("isHandshake", 1).Set("FeedbackCode", commandText);
+                MongoDBSingleton.Instance.Update<EquipmentCommandEQ>(query, updateBuider, UpdateFlags.None);
+            }
+        }
+
+        private static bool api = false;
+        public ProtocolAnalysis() {
+            if (!api) {
+                Startup();
+                api = true;
+            }
+        }
+        public static void Startup() {
+            //Console.WriteLine("Startup ApiController");
+            Task.Run(() => {
+                var url = "http://+:8801";
+                using (WebApp.Start<Startup>(url)) {
+                    //Console.WriteLine("Running on {0}", url);
+                    Console.ReadLine();
+                }
+            });
+        }
+
+        public int workflowToDeviceDriver(TN_I_TASK_DTL_ACTION action) {
+            int iResult = 0;
+            CMMLog.Info($"浠诲姟澶勭悊:Action Code:{action.CN_N_ACTION_CODE},TaskNo:{action.CN_S_TASK_NO}");
+            
+            switch (action.CN_N_ACTION_CODE)
+            {
+                case 1012: AMSHelper.TaskTrackLogMessage(action.CN_S_TASK_NO, action.CN_N_ORDER.ToString(), action.CN_N_ACTION_CODE.ToString(), "璧风偣鐢宠杩涘叆"); break;
+                case 1312: AMSHelper.TaskTrackLogMessage(action.CN_S_TASK_NO, action.CN_N_ORDER.ToString(), action.CN_N_ACTION_CODE.ToString(), "鐢垫瀹夊叏瀵规帴"); break;
+                case 1112: AMSHelper.TaskTrackLogMessage(action.CN_S_TASK_NO, action.CN_N_ORDER.ToString(), action.CN_N_ACTION_CODE.ToString(), "婊氱瓛杞﹁捣鐐瑰埌浣�); break;
+                case 1212: AMSHelper.TaskTrackLogMessage(action.CN_S_TASK_NO, action.CN_N_ORDER.ToString(), action.CN_N_ACTION_CODE.ToString(), "婊氱瓛杞﹀彇璐у畬鎴愰�鐭LC"); break;
+                case 1013: AMSHelper.TaskTrackLogMessage(action.CN_S_TASK_NO, action.CN_N_ORDER.ToString(), action.CN_N_ACTION_CODE.ToString(), "缁堢偣鐢宠杩涘叆"); break;
+                case 1113: AMSHelper.TaskTrackLogMessage(action.CN_S_TASK_NO, action.CN_N_ORDER.ToString(), action.CN_N_ACTION_CODE.ToString(), "婊氱瓛杞︾粓鐐瑰埌浣�); break;
+                case 1213: AMSHelper.TaskTrackLogMessage(action.CN_S_TASK_NO, action.CN_N_ORDER.ToString(), action.CN_N_ACTION_CODE.ToString(), "婊氱瓛杞﹀嵏璐у畬鎴愰�鐭LC"); break;
+                case 1313: AMSHelper.TaskTrackLogMessage(action.CN_S_TASK_NO, action.CN_N_ORDER.ToString(), action.CN_N_ACTION_CODE.ToString(), "鎷嶇収鎵爜"); break;
+            }
+
+            if (action.CN_N_ACTION_CODE == 1027) {
+                var mst = iCallTask.FindTask(action.CN_S_TASK_NO);
+                if (mst != null ) {
+                    if (ProcessHelper.Intercept(mst))
+                    {
+                        iResult = 1027;//鎷︽埅鏇存敼 WCS 浠诲姟绫诲瀷(灏�WMS 浠诲姟绫诲瀷鏇存敼涓�WCS 浠诲姟绫诲瀷锛屽洜涓�WCS 闇�鏍规嵁浠诲姟绫诲瀷杩涜瀵瑰簲浠诲姟娴佺▼澶勭悊)
+                        iCallTask.UpdateTask(mst.CN_S_TASK_NO, "鏈墽琛�);
+                    }
+                    else
+                    {
+                        CMMLog.Info($"鎺ㄩ�浠诲姟锛氫换鍔″彿{mst.CN_S_TASK_NO},浠诲姟绫诲瀷锛歿mst.CN_S_BUSS_TYPE}");
+                        ProcessHelper.SendTask(mst);
+                    }
+                }
+                iResult = 1027;
+            }
+
+            #region 鍙栨秷
+            if (action.CN_N_ACTION_CODE == 7) {
+                TN_I_TASK_MST mst = iCallTask.FindTask(action.CN_S_TASK_NO);
+                CMMLog.Info(JsonConvert.SerializeObject(mst));
+                string agvNo = action.CN_S_DEVICE_CODE;
+                if (mst != null)
+                {
+                    CMMLog.Info($"type:{agvNo}");
+                    mst.CN_S_BUSS_TYPE = getTaskType(mst.CN_S_BUSS_TYPE, false);
+                    CMMLog.Info($"type:{mst.CN_S_BUSS_TYPE}");
+                    CMMLog.Info("action.CN_N_ORDER:"+ action.CN_N_ORDER);
+                    //璇锋眰鍓�+                    if (action.CN_N_ORDER == 0)
+                        WorkFlowAction.TrackLog(action.CN_S_TASK_NO, 0, 7, "鏀跺埌ams鍙栨秷璇锋眰");
+
+                    if (action.CN_N_ORDER == 1 || action.CN_N_ORDER == 0) {
+                        ProcessHelper.TaskCancel(mst);
+                        iCallTask.CancelTask(mst.CN_S_TASK_NO, "1");
+                        AMSHelper.SetStatus(action.CN_S_TASK_NO, 1, "7", "0", true);
+                        if (mst.CN_S_BUSS_TYPE != "鐢垫鍙栬揣" && mst.CN_S_BUSS_TYPE != "鐢垫鍗歌揣" && mst.CN_S_BUSS_TYPE != "3妤煎寘瑁呭彇鏂�) 
+                            WMSHelper.ExecuteState(mst.CN_S_SOURCE_NO, action.CN_N_ACTION_CODE);
+                        iCallTask.DeleteTask(mst.CN_S_TASK_NO);
+                    }
+                    if (mst.CN_S_BUSS_TYPE == "鐢垫鍙栬揣" || mst.CN_S_BUSS_TYPE == "鐢垫鍗歌揣" || mst.CN_S_BUSS_TYPE == "婊℃墭鍏ュ簱" || mst.CN_S_BUSS_TYPE == "绌烘墭鍑哄簱")
+                    {
+                        ProcessHelper.ForceCancel(mst, action);
+                        MongoDBSingleton.Instance.Remove<TimeCuoInfoCom>(Query.EQ("timeStamp",mst.CN_S_BATCH_NO),RemoveFlags.None);
+                    }
+                    if (mst.CN_S_START_BIT.Contains("TSJ") || mst.CN_S_END_BIT.Contains("TSJ"))
+                    {
+                        MongoDBSingleton.Instance.Remove<elevatorTask>(Query.EQ("S_USE", "0"), RemoveFlags.None);
+                    }
+                    //if (mst.CN_S_BUSS_TYPE == "鍖呰绾胯ˉ绌�) PLCControl.PickUpBlankComplete(mst.CN_S_END_BIT);
+                }
+            }
+
+            #endregion
+
+            #region 寮哄埗瀹屾垚
+            if (action.CN_N_ACTION_CODE == 1022) {
+                TN_I_TASK_MST mst = iCallTask.FindTask(action.CN_S_TASK_NO);
+                if (mst != null)
+                {
+                    mst.CN_S_BUSS_TYPE = getTaskType(mst.CN_S_BUSS_TYPE, false);
+                    ProcessHelper.ForceComplete(mst, action);
+                    if (mst.CN_S_BUSS_TYPE == "3妤肩紦瀛樻灦鍏ュ彔鎵�)
+                    {
+                        var plc = Settings.GetPlcInfo().Where(a => a.deviceType == "3").FirstOrDefault();
+                        if (plc != null)
+                        {
+                            var machine = MongoDBSingleton.Instance.FindOne<WMSInfo>(Query.EQ("trayCode", mst.CN_S_BATCH_NO), "WMSInfo");
+                            if (machine != null)
+                            {
+                                #region   鍐欏涓狹ODBUS鏁版嵁
+                                int[] num = DiePan(machine);
+
+                                CMMLog.Info($"send num:" +JsonConvert.SerializeObject(num));
+                                var wirteall01 = OITcpHelper.RegisterWriteOutPutMulti(new OITcpHelper.RegisterWriteOutPutModelMulti
+                                {
+                                    addr = plc.writeAddr + 10,
+                                    host = plc.ip,
+                                    port = plc.port,
+                                    data = num
+                                });
+                                #endregion
+                                MongoDBSingleton.Instance.Remove<WMSInfo>(Query.EQ("trayCode", mst.CN_S_BATCH_NO), "WMSInfo", RemoveFlags.Single);
+                            }
+                        }
+                    }
+                    MongoDBSingleton.Instance.Remove<Mongo_AGV_TASK_STATE>(Query.EQ("TaskNo", mst.CN_S_TASK_NO), RemoveFlags.Single);
+                    WorkFlowAction.TrackLog(mst.CN_S_TASK_NO, 1, 1022, "鏀跺埌ams寮哄埗瀹屾垚璇锋眰");
+                    AMSHelper.SetStatus(action.CN_S_TASK_NO, 1, "1022", "0", true);
+                    iCallTask.CancelTask(mst.CN_S_TASK_NO, "1");
+                    if (mst.CN_S_BUSS_TYPE != "鐢垫鍙栬揣" && mst.CN_S_BUSS_TYPE != "鐢垫鍗歌揣" && mst.CN_S_BUSS_TYPE != "3妤煎寘瑁呭彇鏂� && mst.CN_S_BUSS_TYPE != "鍖呰闂存彁鍗囨満") 
+                        WMSHelper.ExecuteState(mst.CN_S_SOURCE_NO, action.CN_N_ACTION_CODE);
+                    if (mst.CN_S_BUSS_TYPE == "鐢垫鍙栬揣" && mst.CN_S_BUSS_TYPE == "鐢垫鍗歌揣") 
+                        MongoDBSingleton.Instance.ReomveAll<TimeCuoInfoCom>();
+                    if (mst.CN_S_BUSS_TYPE == "鍖呰绾胯ˉ绌�) PLCControl.PickUpBlankComplete(mst.CN_S_END_BIT);
+                    if (mst.CN_S_BUSS_TYPE == "3妤煎绉板叆缂撳瓨鏋� || mst.CN_S_BUSS_TYPE == "3妤煎绉板叆缂撳瓨鏋禢G") 
+                    {
+                        var plc = Settings.GetPlcInfo().Where(a => a.location == mst.CN_S_START_BIT && a.enable == 1).FirstOrDefault();
+                        if (plc != null)
+                        {
+                            PLCControl.SecondWeightInCache4(plc.ip, mst.CN_S_TASK_NO);
+                        }
+                        
+                    }
+                    if (mst.CN_S_END_BIT.Contains("TSJ"))
+                    {
+                        ProcessHelper.createDTTask();
+                    }
+                    if (mst.CN_S_BUSS_TYPE == "3妤煎寘瑁呭彇鏂�)
+                    {
+                        //鍒ゆ柇鏄惁鏄绉ゅ叆缂撳瓨鏋朵换鍔�+                        var plcInfo = Settings.GetPlcInfo().Where(a => a.location == mst.CN_S_START_BIT).FirstOrDefault();
+                        if (plcInfo != null)
+                        {
+                            if (plcInfo.deviceType == "2")
+                            {
+                                string taskName = mst.CN_S_BUSS_TYPE = getTaskType("3妤煎绉板叆缂撳瓨鏋�, true);
+                                string taskNameNG = mst.CN_S_BUSS_TYPE = getTaskType("3妤煎绉板叆缂撳瓨鏋禢G", true);
+                                CMMLog.Info($"璧风偣浠诲姟绫诲瀷锛歿taskName},{taskNameNG}");
+                    
+                                var FCTask = MongoDBSingleton.Instance.FindOne<TN_I_TASK_MST>(Query.And(Query.EQ("CN_S_START_BIT",mst.CN_S_START_BIT),Query.Or(Query.EQ("CN_S_BUSS_TYPE", taskName), Query.EQ("CN_S_BUSS_TYPE", taskNameNG))), "TN_I_TASK_MST");
+                                if (FCTask != null)
+                                {
+                                    CMMLog.Info($"宸叉煡璇㈠埌浠诲姟,浠诲姟鍙凤細{FCTask.CN_S_TASK_NO}");
+                                    AMSHelper.SetStatus(FCTask.CN_S_TASK_NO, 1, "2", action.CN_S_DEVICE_CODE, true);
+                                    WMSHelper.ExecuteState(FCTask.CN_S_SOURCE_NO, action.CN_N_ACTION_CODE);
+                                    iCallTask.DeleteTask(FCTask.CN_S_TASK_NO);
+                                }
+                            }
+                        }
+                    }
+
+                    MongoDBSingleton.Instance.Remove<elevatorTask>(Query.And(Query.EQ("S_DT_LOC", mst.CN_S_START_BIT), Query.EQ("S_USE", "1")), RemoveFlags.None);
+                    iCallTask.DeleteTask(mst.CN_S_TASK_NO);
+                }
+            }
+            #endregion
+
+            if (action.CN_N_ACTION_CODE == 13) {
+                var task = iCallTask.FindTask(action.CN_S_TASK_NO);
+                AMSHelper.TaskTrackLogMessage(action.CN_S_TASK_NO, action.CN_N_ORDER.ToString(), "", "AGV璋冩暣浠诲姟浼樺厛绾ф垚鍔� + action.Ext1);
+            }
+
+            #region 浠诲姟鐘舵�濮旀墭(1-寮�;3-寮�鍙栬揣;4-鍙栬揣瀹屾垚;5-寮�鍗歌揣;6-鍗歌揣瀹屾垚;2-瀹屾垚)
+            if (action.CN_N_ACTION_CODE == 1 || action.CN_N_ACTION_CODE == 2 || action.CN_N_ACTION_CODE == 4 || action.CN_N_ACTION_CODE == 6) {
+                WorkFlowAction.TrackLog(action.CN_S_TASK_NO, 1, action.CN_N_ACTION_CODE, "");
+                TN_I_TASK_MST mst = iCallTask.FindTask(action.CN_S_TASK_NO);
+                if (mst != null) {
+                    mst.CN_S_BUSS_TYPE = getTaskType(mst.CN_S_BUSS_TYPE, false);
+
+                    if (string.IsNullOrEmpty(mst.CN_S_ForkliftNo) && !string.IsNullOrEmpty(action.CN_S_DEVICE_CODE))
+                    {
+                        MongoDBSingleton.Instance.Update<TN_I_TASK_MST>(Query.EQ("_id", mst._id), Update.Set("CN_S_ForkliftNo", action.CN_S_DEVICE_CODE), UpdateFlags.None);
+                    }
+                    if (action.CN_N_ACTION_CODE == 1)
+                    {
+                        AMSHelper.SetStatus(action.CN_S_TASK_NO, 1, "1", action.CN_S_DEVICE_CODE, true);
+                        if (mst.CN_S_BUSS_TYPE != "3妤煎寘瑁呭彇鏂�)
+                            WMSHelper.ExecuteState(mst.CN_S_SOURCE_NO, action.CN_N_ACTION_CODE);
+                    }
+                    if (action.CN_N_ACTION_CODE == 4)
+                    {
+                        CMMLog.Info($"鏀跺埌淇″彿锛歿action.CN_N_ACTION_CODE},浠诲姟鍙凤細{action.CN_S_TASK_NO}锛屽紑濮嬫牴鎹换鍔″彿鏌ヨ涓昏〃涓搴旀暟鎹紒");
+                        AMSHelper.SetStatus(action.CN_S_TASK_NO, 1, "4", action.CN_S_DEVICE_CODE, true);
+                        if (mst.CN_S_BUSS_TYPE == "鍖呰绾胯ˉ绌�) PLCControl.PickUpBlankComplete(mst.CN_S_END_BIT, mst.CN_S_START_BIT);
+                        //if (mst.CN_S_BUSS_TYPE == "3妤煎寘瑁呭彇鏂�) PLCControl.CheckUpReqUnload(mst.CN_S_END_BIT, mst.CN_S_TASK_NO);
+                        if (mst.CN_S_BUSS_TYPE == "缂撳瓨鏋跺叆绔嬪簱")
+                        {
+                            MongoDBSingleton.Instance.Update<ConnectingBits>(Query.EQ("Bit", mst.CN_S_START_BIT),Update.Set("trayCode", "").Set("state", "0"),UpdateFlags.None);
+                        }
+                        //if (mst.CN_S_BUSS_TYPE == "3妤肩紦瀛樻灦鍏ュ彔鎵�) WMSHelper.ExecuteState(mst.CN_S_SOURCE_NO, action.CN_N_ACTION_CODE);
+                        if (mst.CN_S_BUSS_TYPE == "3妤兼墦鍖呬笅绾�)
+                        {
+                            //鎵撳寘涓嬬嚎鍙栬揣瀹屾垚锛屽皢鏁版嵁鍐欏叆涓棿琛�+
+                        }
+                        if (mst.CN_S_BUSS_TYPE.Contains("鎻愬崌鏈�))
+                        {
+                            MongoDBSingleton.Instance.Update<elevatorTask>(Query.EQ("S_DT_LOC", mst.CN_S_START_BIT), Update.Set("S_USE","1"), UpdateFlags.None);
+                        }
+                    }
+                    if (action.CN_N_ACTION_CODE == 6)
+                    {
+                        AMSHelper.SetStatus(action.CN_S_TASK_NO, 1, "6", action.CN_S_DEVICE_CODE, true);
+                        if (mst.CN_S_BUSS_TYPE == "鍛ㄨ浆鎻愬崌鏈�)
+                        {
+                            //灏嗘暟鎹褰曞埌涓棿琛�+                            var agvloc = Settings.GetDDSiteList().Where(a => a.ddLoc == mst.CN_S_END_BIT).First();
+                            if (agvloc != null)
+                            {
+                                var quantity = agvloc.quantity;
+                                CMMLog.Info($"3妤煎寘瑁呰ˉ绌猴紝缁堢偣{mst.CN_S_END_BIT}绔欑偣涓暟锛歿quantity}");
+                                var emptyInfo = MongoDBSingleton.Instance.FindOne<BZEmptyPoint>(Query.EQ("Bit", mst.CN_S_END_BIT), "BZEmptyPoint");
+                                if (emptyInfo != null)
+                                {
+                                    MongoDBSingleton.Instance.Update<BZEmptyPoint>(Query.EQ("Bit", mst.CN_S_END_BIT), Update.Set("Quantity", quantity), UpdateFlags.None);
+                                }
+                                else
+                                {
+                                    MongoDBSingleton.Instance.Insert(new BZEmptyPoint { Bit = mst.CN_S_END_BIT, Quantity = quantity });
+                                }
+                            }
+                        }
+                        if (mst.CN_S_BUSS_TYPE == "3妤煎寘瑁呭彇鏂�)
+                        {
+                            //鍗歌揣瀹屾垚锛屼腑闂磋〃SecondWeighState  full鏀逛负1
+                            UpdateBuilder update = Update.Set("full", 1);
+                            MongoDBSingleton.Instance.Update<SecondWeighState>(Query.EQ("location", mst.CN_S_END_BIT), update, "SecondWeighState", UpdateFlags.None);
+                        }
+                        if (mst.CN_S_BUSS_TYPE == "3妤兼墦鍖呬笅绾�)
+                        {
+                            MongoDBSingleton.Instance.Update<ConnectingBits>(Query.EQ("Bit", mst.CN_S_END_BIT), Update.Set("state", "1"), UpdateFlags.None);
+
+                        }
+                        if (mst.CN_S_BUSS_TYPE == "缂撳瓨鏋跺叆绔嬪簱")
+                        {
+                            //璐х墿鍏ュ簱鍚嶹MS瑕佸弽棣堝叆搴撲俊鎭粰ERP锛屽拰ERP纭闇�鍙嶉鐨勪俊鎭拰鑺傛媿銆傛瘡5鎵樻垨鑰呭熬鎷栨椂闂达紙1涓皬鏃讹級銆傛寜鐓ф爣绛鹃噸閲忓叆搴�+                            //var erpInfo = MongoDBSingleton.Instance.FindOne<ERPInfoTable>(Query.And(Query.EQ("batchNo",),Query.EQ("flage",1)), "ERPInfoTable");
+                            //if(erpInfo != null)
+                            //{
+                            //    erpInfo.num = erpInfo.num + 1;
+                            //    erpInfo.time = DateTime.Now;
+                            //    MongoDBSingleton.Instance.Update<ERPInfoTable>(Query.And(Query.EQ("batchNo",),Query.EQ("flage", 1)), Update.Set("num", erpInfo.num).Set("time", erpInfo.time), UpdateFlags.None);
+                            //    if (erpInfo.num == 5)
+                            //    {
+                            //        //鍙嶉淇℃伅缁檈rp
+                            //
+                            //
+                            //
+                            //        erpInfo.flage = 2;
+                            //        MongoDBSingleton.Instance.Update<ERPInfoTable>(Query.EQ("batchNo", ), Update.Set("flage", erpInfo.flage), UpdateFlags.None);
+                            //    }
+                            //}
+                            //else
+                            //{
+                            //    erpInfo = new ERPInfoTable
+                            //    {
+                            //        batchNo = ,
+                            //        num = 1,
+                            //        time = DateTime.Now,
+                            //        flage = 1,
+                            //    };
+                            //    MongoDBSingleton.Instance.Insert(erpInfo);
+                            //}
+                        }
+                    }
+                    if (action.CN_N_ACTION_CODE == 2) {
+                        AMSHelper.SetStatus(action.CN_S_TASK_NO, 1, "2", action.CN_S_DEVICE_CODE, true);
+                        CMMLog.Info($"瀹屾垚浠诲姟澶勭悊锛氭敹鍒�淇″彿涔嬪悗鐗规畩浠诲姟绫诲瀷澶勭悊锛氫换鍔″彿锛歿mst.CN_S_TASK_NO},浠诲姟绫诲瀷锛歿mst.CN_S_BUSS_TYPE}");
+                        if(mst.CN_S_BUSS_TYPE == "鍖呰绾胯ˉ绌�) ProcessHelper.EndPickUpDoorSafe(mst, action.CN_N_ACTION_CODE);
+
+
+                        if (mst.CN_S_BUSS_TYPE != "3妤煎寘瑁呭彇鏂� && mst.CN_S_BUSS_TYPE != "鍖呰闂存彁鍗囨満") 
+                            WMSHelper.ExecuteState(mst.CN_S_SOURCE_NO, action.CN_N_ACTION_CODE);
+
+                        //if (ERPService.SendERPTaskType.Contains(mst.CN_S_BUSS_TYPE) && ERPService.ERPSwitch01 == "1") ERPService.SendERPTaskInfo(mst);
+
+                        //2024-08-08鍙樻洿锛岃绠楀綋鏃ュ叆搴撳嚭搴撴暟閲�+                        if (mst.CN_S_BUSS_TYPE == "缂撳瓨鏋跺叆绔嬪簱" || mst.CN_S_BUSS_TYPE == "鎴愬搧鍑哄簱")
+                        {
+                            string type = mst.CN_S_BUSS_TYPE == "缂撳瓨鏋跺叆绔嬪簱" ? "鍏ュ簱" : "鍑哄簱";
+
+                            DateTime time = DateTime.Now;
+                            string year = time.ToString("yyyy");
+                            string month = time.ToString("MM");
+                            string day = time.ToString("dd");
+                            
+                            var qutInfo = MongoDBSingleton.Instance.FindOne<InAndOutQuantity>(Query.And(Query.EQ("Type", type), Query.EQ("Year",year), Query.EQ("Month",month), Query.EQ("Day",day)), "InAndOutQuantity");
+                            if(qutInfo != null)
+                            {
+                                qutInfo.Quntity = qutInfo.Quntity + 1;
+                                MongoDBSingleton.Instance.Update<InAndOutQuantity>(Query.And(Query.EQ("Type", type), Query.EQ("Year", year), Query.EQ("Month",month), Query.EQ("Day",day)), Update.Set("Quntity", qutInfo.Quntity), UpdateFlags.None);
+                            }
+                            else
+                            {
+                                qutInfo = new InAndOutQuantity
+                                {
+                                    Type = type,
+                                    Year = year,
+                                    Month = month,
+                                    //Week = GetWeekOfMonth(DateTime.Now).ToString(),
+                                    Day = day,
+                                    Quntity = 1,
+                                };
+                                MongoDBSingleton.Instance.Insert(qutInfo);
+                            }
+
+                            //鏁伴噺宸茬粡鍐欏叆涓棿琛�鏍规嵁涓棿琛ㄦ暟鎹紝灏嗘暟鎹啓鍏ラ�閬�+                            // 褰撴棩鍑哄簱鏁伴噺  40079
+                            // 褰撴棩鍏ュ簱鏁伴噺  40080
+
+                            //鑾峰彇浠婂ぉ鐨勫叆搴撴暟閲�+
+                            int[] num = new int[2];
+                            num[0] = MongoDBSingleton.Instance.FindOne<InAndOutQuantity>(Query.And(Query.EQ("Type", "鍑哄簱"), Query.EQ("Year", year), Query.EQ("Month", month), Query.EQ("Day", day)), "InAndOutQuantity").Quntity;
+                            num[1] = MongoDBSingleton.Instance.FindOne<InAndOutQuantity>(Query.And(Query.EQ("Type", "鍏ュ簱"), Query.EQ("Year", year), Query.EQ("Month", month), Query.EQ("Day", day)), "InAndOutQuantity").Quntity;
+                            var wirteal = OITcpHelper.RegisterWriteOutPutMulti(new OITcpHelper.RegisterWriteOutPutModelMulti
+                            {
+                                addr = 78,
+                                host = "10.15.73.26",
+                                port = 5006,
+                                data = num
+                            });
+                        }
+                        if (mst.CN_S_BUSS_TYPE == "3妤煎寘瑁呭彇鏂�)
+                        {
+                            CMMLog.Info("杩涘叆涓夋ゼ鍖呰鍙栨枡娴佺▼");
+                            //鍒ゆ柇鏄惁鏄绉ゅ叆缂撳瓨鏋朵换鍔�+                            var plcInfo = Settings.GetPlcInfo().Where(a => a.location == mst.CN_S_START_BIT).FirstOrDefault();
+                            if(plcInfo != null)
+                            {
+                                CMMLog.Info($"鏌ヨ璧风偣淇℃伅锛歿plcInfo.deviceType}");
+                                if(plcInfo.deviceType == "2")
+                                {
+                                    string taskName = mst.CN_S_BUSS_TYPE = getTaskType("3妤煎绉板叆缂撳瓨鏋�, true);
+                                    string taskNameNG = mst.CN_S_BUSS_TYPE = getTaskType("3妤煎绉板叆缂撳瓨鏋禢G", true);
+                                    CMMLog.Info($"璧风偣浠诲姟绫诲瀷锛歿taskName},{taskNameNG}");
+                                    var FCTask = MongoDBSingleton.Instance.FindOne<TN_I_TASK_MST>(Query.And(Query.EQ("CN_S_START_BIT", mst.CN_S_START_BIT), Query.Or(Query.EQ("CN_S_BUSS_TYPE", taskName), Query.EQ("CN_S_BUSS_TYPE", taskNameNG))), "TN_I_TASK_MST");
+                                    if(FCTask != null)
+                                    {
+                                        CMMLog.Info($"宸叉煡璇㈠埌浠诲姟,浠诲姟鍙凤細{FCTask.CN_S_TASK_NO}");
+                                        AMSHelper.SetStatus(FCTask.CN_S_TASK_NO, 1, "2", action.CN_S_DEVICE_CODE, true);
+                                        WMSHelper.ExecuteState(FCTask.CN_S_SOURCE_NO, action.CN_N_ACTION_CODE);
+                                        iCallTask.DeleteTask(FCTask.CN_S_TASK_NO);
+                                    }
+                                    else
+                                    {
+                                        CMMLog.Info("鏈煡璇㈠埌浠诲姟");
+                                    }
+                                }
+                            }
+                        }
+                        if (mst.CN_S_END_BIT.Contains("TSJ"))
+                        {
+                            ProcessHelper.createDTTask();
+                        }
+
+                        MongoDBSingleton.Instance.Remove<elevatorTask>(Query.And(Query.EQ("S_DT_LOC", mst.CN_S_START_BIT),Query.EQ("S_USE", "1")), RemoveFlags.None);
+                        //if (ERPService.SendERPTaskType.Contains(mst.CN_S_BUSS_TYPE) && ERPService.ERPSwitch01 == "1") ERPService.SendERPTaskInfo(mst);
+                        iCallTask.DeleteTask(mst.CN_S_TASK_NO);
+                    }
+                }
+            }
+            #endregion
+
+            #region 灏忚溅鐘舵�鍐欏叆閫氶亾 (1-寮�;2-瀹屾垚 4-鍙栬揣瀹屾垚 6-鍗歌揣瀹屾垚)
+            //if (action.CN_N_ACTION_CODE == 1 || action.CN_N_ACTION_CODE == 2 || action.CN_N_ACTION_CODE == 4 || action.CN_N_ACTION_CODE == 6)
+            //{
+            //    TN_I_TASK_MST mst = iCallTask.FindTask(action.CN_S_TASK_NO);
+            //    CMMLog.Info($"灏忚溅鐘舵�鍐欏叆閫氶亾澶勭悊寮�");
+            //    if (mst != null)
+            //    {
+            //        mst.CN_S_BUSS_TYPE = getTaskType(mst.CN_S_BUSS_TYPE, false);
+            //        CMMLog.Info($"杞﹀彿锛歿mst.CN_S_ForkliftNo}");
+            //        var stateInfo = Settings.GetAGVStateList().Where(a => a.AgvNo == mst.CN_S_ForkliftNo).FirstOrDefault();
+            //        if (stateInfo != null)
+            //        {
+            //            if(action.CN_N_ACTION_CODE == 1)
+            //            {
+            //                //寮�锛屽線閫氶亾鍐欏叆1
+            //                var writeRes = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+            //                {
+            //                    host = stateInfo.ip,
+            //                    port = stateInfo.port,
+            //                    addr = stateInfo.writeAddr + 5,
+            //                    data = 1
+            //                });
+            //                CMMLog.Info($"鍦ㄩ�閬搟stateInfo.writeAddr + 5}涓啓鍏�锛宨p锛歿stateInfo.ip}锛岀鍙o細{stateInfo.port}");
+            //            }
+            //            if (action.CN_N_ACTION_CODE == 2)
+            //            {
+            //                //瀹屾垚锛屽線閫氶亾鍐欏叆0
+            //                var writeRes = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+            //                {
+            //                    host = stateInfo.ip,
+            //                    port = stateInfo.port,
+            //                    addr = stateInfo.writeAddr + 5,
+            //                    data = 0
+            //                });
+            //                CMMLog.Info($"鍦ㄩ�閬搟stateInfo.writeAddr + 5}涓啓鍏�锛宨p锛歿stateInfo.ip}锛岀鍙o細{stateInfo.port}");
+            //            }
+            //            if(action.CN_N_ACTION_CODE == 4)
+            //            {
+            //                //鍙栬揣瀹屾垚锛屽線閫氶亾鍐欏叆1
+            //                var writeRes = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+            //                {
+            //                    host = stateInfo.ip,
+            //                    port = stateInfo.port,
+            //                    addr = stateInfo.writeAddr + 6,
+            //                    data = 1
+            //                });
+            //                CMMLog.Info($"鍦ㄩ�閬搟stateInfo.writeAddr + 5}涓啓鍏�锛宨p锛歿stateInfo.ip}锛岀鍙o細{stateInfo.port}");
+            //            }
+            //            if(action.CN_N_ACTION_CODE == 6)
+            //            {
+            //                //鍗歌揣瀹屾垚锛屽線閫氶亾鍐欏叆0
+            //                var writeRes = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+            //                {
+            //                    host = stateInfo.ip,
+            //                    port = stateInfo.port,
+            //                    addr = stateInfo.writeAddr + 6,
+            //                    data = 0
+            //                });
+            //                CMMLog.Info($"鍦ㄩ�閬搟stateInfo.writeAddr + 5}涓啓鍏�锛宨p锛歿stateInfo.ip}锛岀鍙o細{stateInfo.port}");
+            //            }
+            //        }
+            //        else CMMLog.Info($"灏忚溅{mst.CN_S_ForkliftNo}淇″彿鏈厤缃�);
+            //    }
+            //}
+            #endregion
+
+            #region 鐢靛姩闂ˋ闂ㄤ氦绠′俊鍙�1023-寮�棬 1025-鍏抽棬)  B闂ㄤ氦绠′俊鍙�1013-寮�棬 6--鍏抽棬)
+            if (action.CN_N_ACTION_CODE == 1023)
+            {
+                CMMLog.Info($"鏀跺埌淇″彿{action.CN_N_ACTION_CODE},闂ㄥ彿锛歿action.Ext2}");
+                //鐢靛姩闂ㄥ紑闂�+                var doorInfo = Settings.GetPlcInfo().Where(a => a.Extend == action.Ext2 && a.enable == 1).FirstOrDefault();
+                if(doorInfo != null)
+                {
+                    //鐢靛姩闂ㄥ紑闂ㄦ楠わ細
+                    //1銆佸湪閫氶亾銆�0101銆戜腑鍐欏叆1锛屽彂閫佸紑闂ㄤ俊鍙�+                    //2銆佽鍙栭�閬撱�40001銆戜腑鐨勫�锛屽鏋滀负1锛岃〃绀哄紑闂ㄥ埌浣嶏紝閫氱煡灏忚溅杩涘幓
+                    var writeRes = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                    {
+                        host = doorInfo.ip,
+                        port = doorInfo.port,
+                        addr = doorInfo.writeAddr,
+                        data = 1
+                    });
+                    CMMLog.Info($"鍙戦�寮�棬淇″彿锛屽湪閫氶亾{doorInfo.writeAddr}涓啓鍏�锛宨p锛歿doorInfo.ip}锛岀鍙o細{doorInfo.port}");
+
+                    var result = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel
+                    {
+                        dataNum = 1,
+                        addr = doorInfo.readAddr,
+                        host = doorInfo.ip,
+                        port = doorInfo.port
+                    });
+                    CMMLog.Info($"鐢靛姩闂ㄥ紑闂ㄦ祦绋嬶細璇诲彇鐢靛姩闂ㄩ�閬撳彿涓猴細{doorInfo.readAddr}閲岄潰鐨勫�涓簕JsonConvert.SerializeObject(result.result)}");
+                    if (result != null && result.errCode == 0)
+                    {
+                        //Console.WriteLine($"鐢靛姩闂ㄥ紑闂ㄦ祦绋嬶細璇诲彇鐢靛姩闂ㄩ�閬撳彿涓猴細{doorInfo.readAddr}閲岄潰鐨勫�涓簕result.result[0]},{doorInfo.readAddr + 1}閲岄潰鐨勫�涓簕result.result[1]}");
+                        if (result.result[0] == 2 )
+                        {
+                            //鎺ㄩ�灏忚溅杩涘幓
+                            CMMLog.Info($"鐢靛姩闂ㄥ凡缁忔墦寮�紝闂ㄥ彿锛歿action.Ext2}");
+                            
+                            TSHelper.Traffic(action.Ext2);
+
+                            writeRes = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                            {
+                                host = doorInfo.ip,
+                                port = doorInfo.port,
+                                addr = doorInfo.writeAddr,
+                                data = 2
+                            });
+                            CMMLog.Info($"鐢靛姩闂ㄥ叧闂ㄦ祦绋嬶紝鍦ㄩ�閬搟doorInfo.writeAddr}涓啓鍏�锛宨p锛歿doorInfo.ip}锛岀鍙o細{doorInfo.port}");
+                        }
+                    }
+                    else CMMLog.Info($"鐢靛姩闂ㄥ紑闂ㄦ祦绋嬶細鏈鍙栧埌鍖呰鏈洪�閬搟doorInfo.readAddr}閲岄潰鐨勬暟鎹紒锛侊紒result:{JsonConvert.SerializeObject(result)}");
+                }
+                else CMMLog.Info($"闂ㄥ彿涓恒�{action.Ext2}銆戠殑闂ㄤ负鍦ㄩ厤缃枃浠堕厤缃垨鑰呮湭鍚敤");
+            }
+            else if(action.CN_N_ACTION_CODE == 1025)
+            {
+                //鐢靛姩闂ㄥ叧闂�+                var doorInfo = Settings.GetPlcInfo().Where(a => a.Extend == action.Ext2 && a.enable == 1).FirstOrDefault();
+                if (doorInfo != null)
+                {
+                    //鐢靛姩闂ㄥ叧闂ㄦ楠�+                    //1銆佸皬杞﹂�杩囩數鍔ㄩ棬鍚庯紝鍦ㄩ�閬撱�40101銆戜腑鍐欏叆2
+                    var writeRes = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel
+                    {
+                        host = doorInfo.ip,
+                        port = doorInfo.port,
+                        addr = doorInfo.writeAddr,
+                        data = 3
+                    });
+                    CMMLog.Info($"鐢靛姩闂ㄥ叧闂ㄦ祦绋嬶紝鍦ㄩ�閬搟doorInfo.writeAddr}涓啓鍏�锛宨p锛歿doorInfo.ip}锛岀鍙o細{doorInfo.port}");
+                }
+                else CMMLog.Info($"闂ㄥ彿涓恒�{action.Ext2}銆戠殑闂ㄤ负鍦ㄩ厤缃枃浠堕厤缃垨鑰呮湭鍚敤");
+            }
+            #endregion
+
+            #region   3妤艰澶囦换鍔�+
+            //璧风偣瀹夊叏瀵规帴      1012锛氬畨鍏ㄨ姹傝繘鍏�    4锛氬畨鍏ㄨ姹傞�鍑�+            if (action.CN_N_ACTION_CODE == 1012 || action.CN_N_ACTION_CODE == 4 || action.CN_N_ACTION_CODE == 1312)
+            {
+                CMMLog.Info($"璧风偣瀹夊叏瀵规帴:鏀跺埌淇″彿锛歿action.CN_N_ACTION_CODE},浠诲姟鍙凤細{action.CN_S_TASK_NO}锛屽紑濮嬫牴鎹换鍔″彿鏌ヨ涓昏〃涓搴旀暟鎹紒");
+                var mst = iCallTask.FindTask(action.CN_S_TASK_NO);
+                if (mst != null)
+                {
+                    mst.CN_S_BUSS_TYPE = getTaskType(mst.CN_S_BUSS_TYPE, false);
+                    CMMLog.Info($"璧风偣瀹夊叏瀵规帴锛氭敹鍒颁换鍔″彿锛歿mst.CN_S_TASK_NO},浠诲姟绫诲瀷锛歿mst.CN_S_BUSS_TYPE},浠诲姟淇″彿锛歿action.CN_N_ACTION_CODE}");
+                    //3妤兼媶鐩樿ˉ绌猴細鎷嗙洏鏈鸿ˉ绌烘墭鐩�           3妤煎寘瑁呰ˉ绌猴細鍖呰鏈鸿ˉ绌烘墭
+                    if (mst.CN_S_BUSS_TYPE == "3妤煎寘瑁呭彇鏂� || mst.CN_S_BUSS_TYPE == "3妤肩紦瀛樻灦鍏ュ彔鎵� || mst.CN_S_BUSS_TYPE == "3妤煎彔鐩樹笅绾� || mst.CN_S_BUSS_TYPE == "3妤兼墦鍖呬笅绾� || mst.CN_S_BUSS_TYPE.Contains("鎻愬崌鏈�))
+                    {   
+                        CMMLog.Info($"璧风偣瀹夊叏瀵规帴锛氬嵆灏嗚繘鍏ヤ换鍔℃祦绋嬶細{mst.CN_S_BUSS_TYPE},鐘舵�鍙蜂负:{action.CN_N_ACTION_CODE}");
+                        ProcessHelper.StartPickUpDoorSafe(mst, action.CN_N_ACTION_CODE);
+                    }
+                }
+                else
+                {
+                    CMMLog.Info("鏈煡璇㈠埌浠诲姟");
+                }
+            }
+
+            //婊氱瓛杞﹁捣鐐瑰埌浣嶄俊鍙枫�鍙栬揣瀹屾垚淇″彿    1112        1212     3銆�          鍙婊氱瓛杞﹀鎺�+            if (action.CN_N_ACTION_CODE == 1112 || action.CN_N_ACTION_CODE == 1212)
+            {
+                var mst = iCallTask.FindTask(action.CN_S_TASK_NO);
+                if (mst != null)
+                {
+                    mst.CN_S_BUSS_TYPE = getTaskType(mst.CN_S_BUSS_TYPE, false);
+                    if (mst.CN_S_BUSS_TYPE == "3妤煎寘瑁呭彇鏂�)
+                    {
+                        ProcessHelper.PickupAndUnload(mst, action.CN_N_ACTION_CODE);
+                    }
+                }
+            }
+
+            //缁堢偣瀹夊叏瀵规帴      1013锛氬畨鍏ㄨ姹傝繘鍏�    6锛氬畨鍏ㄨ姹傞�鍑�+            if (action.CN_N_ACTION_CODE == 1013 || action.CN_N_ACTION_CODE == 6 || action.CN_N_ACTION_CODE == 1312)
+            {
+                CMMLog.Info($"缁堢偣瀹夊叏瀵规帴:鏀跺埌淇″彿锛歿action.CN_N_ACTION_CODE},浠诲姟鍙凤細{action.CN_S_TASK_NO}锛屽紑濮嬫牴鎹换鍔″彿鏌ヨ涓昏〃涓搴旀暟鎹紒");
+                TN_I_TASK_MST mst = iCallTask.FindTask(action.CN_S_TASK_NO);
+                if (mst != null)
+                {
+                    mst.CN_S_BUSS_TYPE = getTaskType(mst.CN_S_BUSS_TYPE, false);
+                    CMMLog.Info($"缁堢偣瀹夊叏瀵规帴锛氭敹鍒颁换鍔″彿锛歿mst.CN_S_TASK_NO},浠诲姟绫诲瀷锛歿mst.CN_S_BUSS_TYPE},浠诲姟淇″彿锛歿action.CN_N_ACTION_CODE}");
+                    //3妤兼媶鐩樿ˉ绌猴細鎷嗙洏鏈鸿ˉ绌烘墭鐩�           3妤煎寘瑁呰ˉ绌猴細鍖呰鏈鸿ˉ绌烘墭
+                    if (mst.CN_S_BUSS_TYPE == "3妤煎寘瑁呰ˉ绌� || mst.CN_S_BUSS_TYPE == "3妤煎寘瑁呭彇鏂� || mst.CN_S_BUSS_TYPE == "3妤煎绉板叆缂撳瓨鏋� || mst.CN_S_BUSS_TYPE == "3妤肩紦瀛樻灦鍏ュ彔鎵� || mst.CN_S_BUSS_TYPE == "3妤兼媶鐩樿ˉ绌� || mst.CN_S_BUSS_TYPE == "鍖呰绾胯ˉ绌� || mst.CN_S_BUSS_TYPE == "3妤兼墦鍖呬笅绾� || mst.CN_S_BUSS_TYPE == "3妤兼垚鍝佸嚭搴� || mst.CN_S_BUSS_TYPE.Contains("鎻愬崌鏈�) || mst.CN_S_BUSS_TYPE == "杞繍鍒板寘瑁呮満" || mst.CN_S_BUSS_TYPE == "1妤艰緟鏉愬叆2妤�)
+                    {
+                        ProcessHelper.EndPickUpDoorSafe(mst, action.CN_N_ACTION_CODE);
+                    }
+                }
+            }
+
+            //婊氱瓛杞︾粓鐐瑰埌浣嶄俊鍙枫�鍗歌揣瀹屾垚淇″彿     1113        1213        5銆�      鍙婊氱瓛杞﹀鎺�+            if (action.CN_N_ACTION_CODE == 4 || action.CN_N_ACTION_CODE == 1213)
+            {
+                var mst = iCallTask.FindTask(action.CN_S_TASK_NO);
+                CMMLog.Info($"4 鎴�1213 淇″彿锛寋mst.CN_S_BUSS_TYPE},{mst.CN_S_END_BIT}");
+                if (mst != null)
+                {
+                    mst.CN_S_BUSS_TYPE = getTaskType(mst.CN_S_BUSS_TYPE, false);
+
+                    //3妤兼媶鐩樿ˉ绌猴細鎷嗙洏鏈鸿ˉ绌烘墭鐩�           3妤煎寘瑁呰ˉ绌猴細鍖呰鏈鸿ˉ绌烘墭
+                    if (mst.CN_S_BUSS_TYPE == "3妤煎寘瑁呭彇鏂�) ProcessHelper.DiscRemoverEmptySupport(mst, action.CN_N_ACTION_CODE);
+                }
+            }
+
+            //缂撳瓨鏋跺叆鍙犳墭锛屽皬杞︽壂鐮�+            if(action.CN_N_ACTION_CODE == 1313)
+            {
+                TN_I_TASK_MST mst = iCallTask.FindTask(action.CN_S_TASK_NO);
+                if(mst != null)
+                {
+                    mst.CN_S_BUSS_TYPE = getTaskType(mst.CN_S_BUSS_TYPE, false);
+                    CMMLog.Info($"鏀跺埌淇″彿锛歿action.CN_N_ACTION_CODE},浠诲姟鍙凤細{action.CN_S_TASK_NO}锛屼换鍔$被鍨嬶細{mst.CN_S_BUSS_TYPE}");
+                    if (mst.CN_S_BUSS_TYPE.Contains("3妤煎寘瑁呭彇鏂�))
+                    {
+                        //灏嗚鍙栧绉伴噸閲忕殑娴佺▼鏀惧埌1313娴佺▼涓嬶紝鑾峰彇鍒皐ms浼犵殑缁堢偣锛岃繘琛屾敼閬�+                        var plc = Settings.GetPlcInfo().Where(a => a.location == mst.CN_S_END_BIT).FirstOrDefault();
+                        if (plc != null)
+                        {
+                            PLCControl.EcheckWeighingPlatform1313(plc.deviceType, mst);
+                            //AMSHelper.TaskTrackLogMessage(action.CN_S_TASK_NO, action.CN_N_ORDER.ToString(), action.CN_N_ACTION_CODE.ToString(), "灏忚溅鎵爜");
+                        }
+                        else CMMLog.Info($"鐐逛綅涓簕mst.CN_S_END_BIT}鐨勮澶囨湭閰嶇疆");
+                    }
+                    if (mst.CN_S_BUSS_TYPE == "鍙犲寘鎻愬崌鏈�)
+                    {
+                        var plc = Settings.GetPlcInfo().Where(a => a.location == mst.CN_S_END_BIT).FirstOrDefault();
+                        if (plc != null)
+                        {
+                            PLCControl.CacheStackingMouth1313(plc.deviceType, mst);
+                            //AMSHelper.TaskTrackLogMessage(action.CN_S_TASK_NO, action.CN_N_ORDER.ToString(), action.CN_N_ACTION_CODE.ToString(), "灏忚溅鎵爜");
+                        }
+                        else CMMLog.Info($"鐐逛綅涓簕mst.CN_S_END_BIT}鐨勮澶囨湭閰嶇疆");
+                    }
+                    
+                }
+            }
+
+            //绔嬪簱鍑哄簱
+            //if (action.CN_N_ACTION_CODE == 1105)
+            //{
+            //    TN_I_TASK_MST mst = iCallTask.FindTask(action.CN_S_TASK_NO);
+            //    if (mst != null)
+            //    {
+            //        CMMLog.Info($"1105淇″彿锛寋mst.CN_S_BUSS_TYPE},{mst.CN_S_END_BIT}");
+            //        OutWareTask(mst);
+            //    }
+            //}
+
+            #endregion
+
+            return iResult;
+        }
+
+        
+
+        #region AGV杞︿綋鐘舵�淇℃伅
+        public void HangChaAGVEvent(HangChaAGV _hangChaAGV) {
+        }
+        public void HangChaAGVEvent(List<HangChaAGV> agvs) {
+
+        }
+
+        #endregion
+
+        /// <summary>
+        /// 鍛ㄨ浆鎵樼洏浣�+        /// </summary>
+        public class BZEmptyPoint
+        {
+            public ObjectId _id { get; set; }
+            /// <summary>
+            /// 绌烘墭缂撳瓨鐐�+            /// </summary>
+            public string Bit { get; set; }
+            /// <summary>
+            /// 鎵樼洏鏁伴噺
+            /// </summary>
+            public int Quantity { get; set; }
+        }
+
+        /// <summary>
+        /// 绔嬪簱鍏ュ簱ERP鑺傛媿
+        /// </summary>
+        public class ERPInfoTable
+        {
+            public ObjectId _id { get; set; }
+            /// <summary>
+            /// 鎵规鍙�+            /// </summary>
+            public string batchNo { get; set; }
+            /// <summary>
+            /// 鍏ュ簱鏁伴噺
+            /// </summary>
+            public int num { get; set; } = 1;
+            /// <summary>
+            /// 灏炬墭鏃堕棿
+            /// </summary>
+            public DateTime time { get; set; }
+            /// <summary>
+            /// 鏄惁鎵ц瀹屾垚  1锛氬緟鎵ц 2锛氭墽琛屽畬鎴�+            /// </summary>
+            public int flage { get; set; } = 1;
+        }
+
+        #region 璁惧鍚堟牸鐜囨竻鍗�+        public class ProductList
+        {
+            public ObjectId _id { get; set; }
+            /// <summary>
+            /// 鏃ユ湡
+            /// </summary>
+            public string Date { get; set; }
+            /// <summary>
+            /// 璁惧
+            /// </summary>
+            public string machine { get; set; }
+            /// <summary>
+            /// 璁惧鐢熶骇鏁�+            /// </summary>
+            public double total { get; set; }
+            /// <summary>
+            /// 鍚堟牸鏁�+            /// </summary>
+            public double qualifiedQuantity { get; set; }
+            /// <summary>
+            /// 鍚堟牸鐜�+            /// </summary>
+            public double percentOfPass { get; set; }
+            /// <summary>
+            /// 褰撳ぉ鎬诲悎鏍兼暟
+            /// </summary>
+            public double overallPassRate { get; set; }
+        }
+        #endregion
+
+        #region 鎵撳寘涓嬬嚎鍙f帴椹充綅
+        public class ConnectingBits
+        {
+            public ObjectId _id { get; set; }
+            /// <summary>
+            /// 璐т綅缂栫爜
+            /// </summary>
+            public string Bit { get; set; }
+            /// <summary>
+            /// 鎵樼洏鍙�+            /// </summary>
+            public string trayCode { get; set; }
+            /// <summary>
+            /// 璐т綅鐘舵� 0 鏃犺揣  1 鏈夎揣
+            /// </summary>
+            public string state { get; set; }
+            /// <summary>
+            /// 鏃堕棿鎴�+            /// </summary>
+            public string timeCuo { get; set; }
+        }
+        public class InAndOutQuantity
+        {
+            /// <summary>
+            /// 绫诲瀷 鍑哄簱 - 鍏ュ簱
+            /// </summary>
+            public string Type { get; set; }
+            /// <summary>
+            /// 骞�+            /// </summary>
+            public string Year { get; set; }
+            /// <summary>
+            /// 鏈�+            /// </summary>
+            public string Month { get; set; }
+            /// <summary>
+            /// 鍛�+            /// </summary>
+            //public string Week { get; set; }
+            /// <summary>
+            /// 鏃�+            /// </summary>
+            public string Day { get; set; }
+            /// <summary>
+            /// 鏁伴噺
+            /// </summary>
+            public int Quntity { get; set; }
+        }
+
+        #endregion
+
+
+    }
+}
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMProtocol/Settings.cs b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/Settings.cs
new file mode 100644
index 0000000..50e2d65
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/Settings.cs
@@ -0,0 +1,535 @@
+锘縰sing Hanhe.iWCS.Common;
+using Hanhe.iWCS.MData;
+using MongoDB.Bson;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hanhe.iWCS.IndonesiaGLMProtocol
+{
+
+    public class Settings
+    {
+
+        #region 璁惧淇℃伅
+        private static string _plcInfo = "";
+        private static string plcInfo {
+            get {
+                if (_plcInfo == "") {
+                    _plcInfo = XmlHelper.GetElementValue("plcInfo");
+                }
+                return _plcInfo;
+            }
+        }
+        public static List<PlcInfo> GetPlcInfo() {
+            return JsonConvert.DeserializeObject<List<PlcInfo>>(plcInfo);
+        }
+        public class PlcInfo
+        {
+            public string device { get; set; }
+            public string deviceType { get; set; }
+            public string ip { get; set; }
+            public int readAddr { get; set; }
+            public int writeAddr { get; set; }
+            public int FyReadAddr { get; set; }
+            public int FyWriteAddr { get; set; }
+            public string location { get; set; }
+            public string Extend { get; set; }
+            public int enable { get; set; }
+            public int port { get; set; }
+            public int plcPort { get; set; }
+        }
+        #endregion
+
+        #region _OITcpServerUrl
+        private static string _OITcpServerUrl = "";
+        public static string OITcpSeverUrl {
+            get {
+                if (_OITcpServerUrl == "") {
+                    _OITcpServerUrl = XmlHelper.GetElementValue("OITcpServerUrl");
+                }
+                return _OITcpServerUrl;
+            }
+        }
+        #endregion
+
+        #region   MESUrl
+        private static string _MESUrl = "";
+        public static string MESUrl
+        {
+            get
+            {
+                if (_MESUrl == "")
+                {
+                    _MESUrl = XmlHelper.GetElementValue("mesurl");
+                }
+                return _MESUrl;
+            }
+        }
+        #endregion
+
+        #region BGIP
+        private static string _BGIP = "";
+        public static string BGip
+        {
+            get
+            {
+                if (_BGIP == "")
+                {
+                    _BGIP = XmlHelper.GetElementValue("BGIP");
+                }
+                return _BGIP;
+            }
+        }
+        #endregion
+
+        #region BGPORT
+        private static string _BGPORT = "";
+        public static string BGPort
+        {
+            get
+            {
+                if (_BGPORT == "")
+                {
+                    _BGPORT = XmlHelper.GetElementValue("BGPORT");
+                }
+                return _BGPORT;
+            }
+        }
+        #endregion
+
+        #region   mesOpen
+        private static string _mesOpen = "";
+        public static string mesOpen
+        {
+            get
+            {
+                if (_mesOpen == "")
+                {
+                    _mesOpen = XmlHelper.GetElementValue("mesOpen");
+                }
+                return _mesOpen;
+            }
+        }
+        #endregion
+
+        #region   packChange
+        private static string _packChange = "";
+        public static string packChange
+        {
+            get
+            {
+                if (_packChange == "")
+                {
+                    _packChange = XmlHelper.GetElementValue("packChange");
+                }
+                return _packChange;
+            }
+        }
+        #endregion
+
+        #region   Wait01
+        private static string _Wait01 = "";
+        public static string Wait01
+        {
+            get
+            {
+                if (_Wait01 == "")
+                {
+                    _Wait01 = XmlHelper.GetElementValue("Wait01");
+                }
+                return _Wait01;
+            }
+        }
+        #endregion
+
+        #region   Wait02
+        private static string _Wait02 = "";
+        public static string Wait02
+        {
+            get
+            {
+                if (_Wait02 == "")
+                {
+                    _Wait02 = XmlHelper.GetElementValue("Wait02");
+                }
+                return _Wait02;
+            }
+        }
+        #endregion
+
+        #region   timecuo
+        private static string _TimeCuo = "";
+        public static string TimeCuo
+        {
+            get
+            {
+                if (_TimeCuo == "")
+                {
+                    _TimeCuo = XmlHelper.GetElementValue("timecuo");
+                }
+                return _TimeCuo;
+            }
+        }
+        #endregion
+
+        #region   SendERPTaskType
+        private static string _SendERPTaskType = "";
+        public static string SendERPTaskType
+        {
+            get
+            {
+                if (_SendERPTaskType == "")
+                {
+                    _SendERPTaskType = XmlHelper.GetElementValue("SendERPTaskType");
+                }
+                return _SendERPTaskType;
+            }
+        }
+        #endregion
+
+
+        #region   huoWeiCode
+        private static string _HouWeiCode = "";
+        public static string houWeiCode
+        {
+            get
+            {
+                if (_HouWeiCode == "")
+                {
+                    _HouWeiCode = XmlHelper.GetElementValue("huoWeiCode");
+                }
+                return _HouWeiCode;
+            }
+        }
+
+        public static List<HuoWeiCode> GetHouWeiCodeo()
+        {
+            return JsonConvert.DeserializeObject<List<HuoWeiCode>>(houWeiCode);
+        }
+
+        /// <summary>
+        ///  {"device":"1"ip:"192.168.1.100","readAddr":100,"writeAddr":101,"location":"AAA"},
+        /// </summary>
+        public class HuoWeiCode
+        {
+            public string task { get; set; }
+            public string taskType { get; set; }
+            public string location { get; set; }
+        }
+        #endregion
+
+        #region   sendBit
+        private static string _SendBit = "";
+        public static string sendBit
+        {
+            get
+            {
+                if (_SendBit == "")
+                {
+                    _SendBit = XmlHelper.GetElementValue("sendBit");
+                }
+                return _SendBit;
+            }
+        }
+
+        public static List<SendBit> GetSendBit()
+        {
+            return JsonConvert.DeserializeObject<List<SendBit>>(sendBit);
+        }
+
+        /// <summary>
+        ///  {"device":"1"ip:"192.168.1.100","readAddr":100,"writeAddr":101,"location":"AAA"},
+        /// </summary>
+        public class SendBit
+        {
+            public string task { get; set; }
+            public string taskType { get; set; }
+            public string bit { get; set; }
+            public int agv { get; set; }
+            public string floor { get; set; }
+        }
+        #endregion
+
+        #region   BatteryTime
+        private static string _BatteryTime = "";
+        public static string BatteryTime
+        {
+            get
+            {
+                if (_BatteryTime == "")
+                {
+                    _BatteryTime = XmlHelper.GetElementValue("BatteryTime");
+                }
+                return _BatteryTime;
+            }
+        }
+        #endregion
+
+        #region 灏忚溅淇℃伅
+        private static string _ChargingPile = "";
+        private static string ChargingPile
+        {
+            get
+            {
+                if (_ChargingPile == "")
+                {
+                    _ChargingPile = XmlHelper.GetElementValue("ChargingPile");
+                }
+                return _ChargingPile;
+            }
+        }
+        public static List<ChargingPileInfo> GetChargingPile()
+        {
+            return JsonConvert.DeserializeObject<List<ChargingPileInfo>>(ChargingPile);
+        }
+        public class ChargingPileInfo
+        {
+            public string agvNo { get; set; }
+            public string agvType { get; set; }
+            public string charginGroup { get; set; }
+            public string charginIP { get; set; }
+            public string agvBit { get; set; }
+            public string enable { get; set; }
+        }
+        #endregion
+
+        #region 鍐欏叆鐢甸噺杞﹀彿
+        private static string _ChargingAgvNo = "";
+        private static string ChargingAgvNo
+        {
+            get
+            {
+                if (_ChargingAgvNo == "")
+                {
+                    _ChargingAgvNo = XmlHelper.GetElementValue("ChargingAgvNo");
+                }
+                return _ChargingAgvNo;
+            }
+        }
+        public static string[] GetChargingAgvNo()
+        {
+            return JsonConvert.DeserializeObject<List<string>>(ChargingAgvNo).ToArray();
+        }
+        #endregion
+
+        #region AGVLocation
+        private static string _AGVLocation = "";
+        private static string AGVLocationList
+        {
+            get
+            {
+                if (_AGVLocation == "")
+                {
+                    _AGVLocation = XmlHelper.GetElementValue("AGVLocation");
+                }
+                return _AGVLocation;
+            }
+        }
+
+        private static List<AGVLocation> AGVLocations = new List<AGVLocation>();
+        public static List<AGVLocation> GetAGVLocationList()
+        {
+            if (AGVLocations.Count == 0 && AGVLocationList != "")
+            {
+                AGVLocations = Newtonsoft.Json.JsonConvert.DeserializeObject<List<AGVLocation>>(AGVLocationList);
+            }
+            return AGVLocations;
+        }
+
+        public class AGVLocation
+        {
+
+            public string machineLoc { get; set; }
+            public string[] ddLoc { get; set; }
+            public int Enabel { get; set; }
+        }
+
+        #endregion
+
+        #region DDSite
+        private static string _DDSite = "";
+        private static string DDSiteList
+        {
+            get
+            {
+                if (_DDSite == "")
+                {
+                    _DDSite = XmlHelper.GetElementValue("DDSite");
+                }
+                return _DDSite;
+            }
+        }
+
+        private static List<DDSiteModel> DDSites = new List<DDSiteModel>();
+        public static List<DDSiteModel> GetDDSiteList()
+        {
+            if (DDSites.Count == 0 && DDSiteList != "")
+            {
+                DDSites = Newtonsoft.Json.JsonConvert.DeserializeObject<List<DDSiteModel>>(DDSiteList);
+            }
+            return DDSites;
+        }
+
+        public class DDSiteModel
+        {
+
+            public string ddLoc { get; set; }
+            public int[] Site { get; set; }
+            public int quantity { get; set; }
+            public int Enable { get; set; }
+        }
+
+        #endregion
+
+        #region AGVState
+        private static string _AGVState = "";
+        private static string AGVStateList
+        {
+            get
+            {
+                if (_AGVState == "")
+                {
+                    _AGVState = XmlHelper.GetElementValue("AGVState");
+                }
+                return _AGVState;
+            }
+        }
+
+        private static List<AGVState> AGVStates = new List<AGVState>();
+        public static List<AGVState> GetAGVStateList()
+        {
+            if (AGVStates.Count == 0 && AGVStateList != "")
+            {
+                AGVStates = Newtonsoft.Json.JsonConvert.DeserializeObject<List<AGVState>>(AGVStateList);
+            }
+            return AGVStates;
+        }
+
+        public class AGVState
+        {
+
+            public string AgvNo { get; set; }
+            public string ip { get; set; }
+            public int port { get; set; }
+            public int readAddr { get; set; }
+            public int writeAddr { get; set; }
+            public int enable { get; set; }
+        }
+        #endregion
+
+        #region Connectingbits
+        private static string _Connectingbits = "";
+        private static string ConnectingbitsList
+        {
+            get
+            {
+                if (_Connectingbits == "")
+                {
+                    _Connectingbits = XmlHelper.GetElementValue("Connectingbits");
+                }
+                return _Connectingbits;
+            }
+        }
+
+        private static List<ConnectingbitsModel> connectingbits = new List<ConnectingbitsModel>();
+        public static List<ConnectingbitsModel> GetConnectingbitsList()
+        {
+            if (connectingbits.Count == 0 && ConnectingbitsList != "")
+            {
+                connectingbits = Newtonsoft.Json.JsonConvert.DeserializeObject<List<ConnectingbitsModel>>(ConnectingbitsList);
+            }
+            return connectingbits;
+        }
+
+        public class ConnectingbitsModel
+        {
+            public string locCode { get; set; }
+            public int[] agvSite { get; set; }
+            public int enable { get; set; }
+        }
+        #endregion
+
+        #region ThirdUrl
+        private static string _ThirdUrl = "";
+        private static string ThirdUrlList
+        {
+            get
+            {
+                if (_ThirdUrl == "")
+                {
+                    _ThirdUrl = XmlHelper.GetElementValue("ThirdUrl");
+                }
+                return _ThirdUrl;
+            }
+        }
+
+        private static List<ThirdUrl> ThirdUrls = new List<ThirdUrl>();
+        public static List<ThirdUrl> GetThirdUrlList()
+        {
+            if (ThirdUrls.Count == 0 && ThirdUrlList != "")
+            {
+                ThirdUrls = Newtonsoft.Json.JsonConvert.DeserializeObject<List<ThirdUrl>>(ThirdUrlList);
+            }
+            return ThirdUrls;
+        }
+
+        public class ThirdUrl
+        {
+
+            public string UrlNo { get; set; }
+            public string UrlSign { get; set; }
+            public string Url { get; set; }
+            public int enable { get; set; }
+        }
+        #endregion
+
+        #region   LoginInfo
+        private static string _LoginInfo = "";
+        public static string LoginInfo
+        {
+            get
+            {
+                if (_LoginInfo == "")
+                {
+                    _LoginInfo = XmlHelper.GetElementValue("LoginInfo");
+                }
+                return _LoginInfo;
+            }
+        }
+        #endregion
+
+        #region _SqlServer
+        private static string _SqlServer = "";
+        public static string SqlServer
+        {
+            get
+            {
+                if (_SqlServer == "")
+                {
+                    _SqlServer = XmlHelper.GetElementValue("SqlServer");
+                }
+                return _SqlServer;
+            }
+        }
+        #endregion        
+        
+        #region _SqlServer1
+        private static string _SqlServer1 = "";
+        public static string SqlServer1
+        {
+            get
+            {
+                if (_SqlServer1 == "")
+                {
+                    _SqlServer1 = XmlHelper.GetElementValue("SqlServer1");
+                }
+                return _SqlServer1;
+            }
+        }
+        #endregion
+    }
+}
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMProtocol/SqlHelper.cs b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/SqlHelper.cs
new file mode 100644
index 0000000..c049a12
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/SqlHelper.cs
@@ -0,0 +1,105 @@
+锘縰sing Hanhe.iWCS.Common;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hanhe.iWCS.IndonesiaGLMProtocol
+{
+    public class SqlHelper<T> where T : class, new()
+    {
+        public bool ExecuteSql(string sql,bool result = true) {
+            try {
+                var code = GetInstance(result).Ado.ExecuteCommand(sql);
+                CMMLog.Info($"code:{code}");
+                return code >= 1;
+            }
+            catch (Exception ex) {
+                CMMLog.Info($"鏇存柊鏁版嵁搴撳け璐ワ紝閿欒鍘熷洜鍙兘鏄細{ex.Message}");
+                return false;
+            }
+        }
+        public List<T> GetList(Expression<Func<T, bool>> where = null) {
+            SqlSugarClient db = GetInstance();
+            if (where == null) {
+                return db.Queryable<T>().ToList();
+            }
+            else {
+                return db.Queryable<T>().Where(where).ToList();
+            }
+        }
+
+        public T Get(Expression<Func<T, bool>> where, Expression<Func<T, object>> order, bool asc = false) {
+            SqlSugarClient db = GetInstance();
+            if (order == null) {
+
+                return db.Queryable<T>().Where(where).Single();
+            }
+            else {
+                return db.Queryable<T>().Where(where).OrderBy(order, asc ? OrderByType.Asc : OrderByType.Desc).First();
+            }
+        }
+        public bool Update(T model) {
+            SqlSugarClient db = GetInstance();
+            return db.Updateable<T>(model).ExecuteCommand() > 0;
+        }
+
+        //鍒犻櫎鎸囧畾鏉′欢鏁版嵁
+        public bool Deleteable(Expression<Func<T, bool>> where) {
+            SqlSugarClient db = GetInstance();
+            return db.Deleteable<T>().Where(where).ExecuteCommand() > 0;
+        }
+
+
+        //鍒涘缓SqlSugarClient 
+        public SqlSugarClient GetInstance(bool action = true) {
+            if (action)
+            {
+                //鍒涘缓鏁版嵁搴撳璞�+                SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
+                {
+                    //ConnectionString = "Server=192.168.1.233;Database=ams;Uid=root;Pwd=123456;",//杩炴帴绗﹀瓧涓�+                    ConnectionString = Settings.SqlServer,//杩炴帴绗﹀瓧涓�+                    DbType = DbType.SqlServer,//DbType.MySql
+                    IsAutoCloseConnection = true,
+                    InitKeyType = InitKeyType.Attribute//浠庣壒鎬ц鍙栦富閿嚜澧炰俊鎭�+                });
+
+                //娣诲姞Sql鎵撳嵃浜嬩欢锛屽紑鍙戜腑鍙互鍒犳帀杩欎釜浠g爜
+                db.Aop.OnLogExecuting = (sql, pars) => {
+                    //Console.WriteLine(sql + "\r\n" + db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
+                };
+                return db;
+            }
+            else
+            {
+                //鍒涘缓鏁版嵁搴撳璞�+                SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
+                {
+                    //ConnectionString = "Server=192.168.1.233;Database=ams;Uid=root;Pwd=123456;",//杩炴帴绗﹀瓧涓�+                    ConnectionString = Settings.SqlServer1,//杩炴帴绗﹀瓧涓�+                    DbType = DbType.SqlServer,//DbType.MySql
+                    IsAutoCloseConnection = true,
+                    InitKeyType = InitKeyType.Attribute//浠庣壒鎬ц鍙栦富閿嚜澧炰俊鎭�+                });
+
+                //娣诲姞Sql鎵撳嵃浜嬩欢锛屽紑鍙戜腑鍙互鍒犳帀杩欎釜浠g爜
+                db.Aop.OnLogExecuting = (sql, pars) => {
+                    //Console.WriteLine(sql + "\r\n" + db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
+                };
+                return db;
+            }
+            
+        }
+
+
+        public static string AMS_MSSQL = ConfigurationManager.ConnectionStrings["AMS_MSSQL"].ToString();
+
+
+
+    }
+}
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMProtocol/Startup.cs b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/Startup.cs
new file mode 100644
index 0000000..f49e18c
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/Startup.cs
@@ -0,0 +1,25 @@
+锘縰sing System;
+using System.Threading.Tasks;
+using System.Web.Http;
+using Microsoft.Owin;
+using Owin;
+
+[assembly: OwinStartup(typeof(Hanhe.iWCS.IndonesiaGLMProtocol.Startup))]
+
+namespace Hanhe.iWCS.IndonesiaGLMProtocol
+{
+    public class Startup
+    {
+        public void Configuration(IAppBuilder app) {
+            // 鏈夊叧濡備綍閰嶇疆搴旂敤绋嬪簭鐨勮缁嗕俊鎭紝璇疯闂�https://go.microsoft.com/fwlink/?LinkID=316888
+            HttpConfiguration config = new HttpConfiguration();
+
+            // Web API routes
+            config.MapHttpAttributeRoutes();
+
+            //WebApiConfig.Register(config);
+
+            app.UseWebApi(config);
+        }
+    }
+}
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMProtocol/TSHelper.cs b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/TSHelper.cs
new file mode 100644
index 0000000..7aae8b6
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/TSHelper.cs
@@ -0,0 +1,246 @@
+锘縰sing Hanhe.iWCS.Business;
+using Hanhe.iWCS.Common;
+using Hanhe.iWCS.DeviceDriver;
+using Hanhe.iWCS.Model;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hanhe.iWCS.IndonesiaGLMProtocol
+{
+    public class TSHelper
+    {
+        /// <summary>
+        /// AGV杩涘叆
+        /// </summary>
+        /// <param name="taskNo">浠诲姟鍙�/param>
+        /// <param name="orderNo">搴忓彿</param>
+        /// <param name="param1">鏂扮殑agv缁堢偣</param>
+        //public static bool GoToAGV(string taskNo, int orderNo, int param1 = 1) {
+        public static bool GoToAGV(string taskNo, int orderNo, int param1)
+        {
+            bool bResult = false;
+            //TN_I_TASK_DTL_ACTION GoToAction = WorkFlowAction.GetActionNode(taskNo, orderNo, 0);
+            TN_I_TASK_DTL_ACTION GoToAction = WorkFlowAction.GetActionNode(taskNo, 1, 0);
+            if (GoToAction != null) {
+                HardwareAccessObject GoToAGVHao = HardwareAccessHelper.Instance.GetEquipmentsHAO(GoToAction.CN_S_PROGRAM_CODE);
+                if (GoToAGVHao != null) {
+                    //鍙戦�琛岃蛋鎸囦护 鍒癆GV
+                    CMMLog.Info($"銆愭澀鍙堿GV銆慓oToAGVHao:{GoToAGVHao}");
+                    //Console.WriteLine($"銆愭澀鍙堿GV銆慓oToAGVHao:{GoToAGVHao}");
+                    StringBuilder sbMsg = new StringBuilder();
+                    sbMsg.Append("<Req>");
+                    sbMsg.Append("<Order No='" + taskNo + "_" + "1" + "' Param1='" + param1 + "' ParamNo='" + orderNo + "' />");
+                    sbMsg.Append("</Req>");
+                    try {
+                        object[] args = new object[1];
+                        args[0] = sbMsg.ToString();
+                        object errObject = GoToAGVHao._WebServiceInstance.Invoke("ChangeOrder", args);
+                        string errMsg = string.Empty;
+                        int errCode = Hanhe.iWCS.AGVWebService.AGVHelper.Instance.AGVXmlResult((string)errObject, out errMsg);
+                        if (errCode == 0) {
+                            CMMLog.Info("銆愭澀鍙堿GV銆戦�鐭GV琛岃蛋鎴愬姛锛佽姹傚弬鏁�" + sbMsg.ToString());
+                            //Console.WriteLine("銆愭澀鍙堿GV銆戦�鐭GV琛岃蛋鎴愬姛锛佽姹傚弬鏁�" + sbMsg.ToString());
+                            bResult = true;
+                        }
+                        else {
+                            CMMLog.Info("銆愭澀鍙堿GV銆戝崰鐢ㄥけ璐�閫氱煡AGV琛岃蛋澶辫触锛乪rrCode=" + errCode + ";璇锋眰鍙傛暟=" + sbMsg.ToString());
+                            //Console.WriteLine("銆愭澀鍙堿GV銆戝崰鐢ㄥけ璐�閫氱煡AGV琛岃蛋澶辫触锛乪rrCode=" + errCode + ";璇锋眰鍙傛暟=" + sbMsg.ToString());
+                        }
+                    }
+                    catch (Exception ex) {
+                        CMMLog.Info("銆愭澀鍙堿GV銆戦�鐭GV寮傚父锛丒xception=" + ex.Message + ";璇锋眰鍙傛暟=" + sbMsg.ToString());
+                        //Console.WriteLine("銆愭澀鍙堿GV銆戦�鐭GV寮傚父锛丒xception=" + ex.Message + ";璇锋眰鍙傛暟=" + sbMsg.ToString());
+                    }
+                }
+                else
+                {
+                    CMMLog.Info($"銆愭澀鍙堿GV銆慓oToAGVHao==null!");
+                    //Console.WriteLine($"銆愭澀鍙堿GV銆慓oToAGVHao==null!");
+                }
+            }
+            else
+            {
+                CMMLog.Info($"銆愭澀鍙堿GV銆慓oToAction==null!");
+                //Console.WriteLine($"銆愭澀鍙堿GV銆慓oToAction==null!");
+            }
+            return bResult;
+        }
+
+        //ams涓嬪彂鍏呯數浠诲姟锛孴S99锛屽弬鏁�濉啓杞﹀彿鍗冲彲銆�+        //褰撳厖鐢靛紑濮嬫椂锛屼細鍙戦�s娑堟伅锛屽甫鐨勪笁涓弬鏁板垎鍒负锛�杞﹀彿锛�1锛�9
+        //褰撳厖鐢电粨鏉熸垨鑰呬换鍔¤鍙栨秷锛屼細鍙戦�s娑堟伅锛屼笁涓弬鏁板垎鍒负锛�杞﹀彿锛�2锛�9
+        internal static int SendChargeTask(string agvNo, bool charge, bool full = false)
+        {
+            CMMLog.Info("鎺ㄩ�鍏呯數浠诲姟锛氭墽琛屽紑濮嬶紒");
+            //Console.WriteLine("鎺ㄩ�鍏呯數浠诲姟锛氭墽琛屽紑濮嬶紒");
+            var command = charge ? "AddNewOrder" : "CancelOrder";
+            int code = -1;
+            try
+            {
+                CMMLog.Info("鎺ㄩ�鍏呯數浠诲姟锛歠ull=" + full);
+                int to = full ? 1000 : 0;
+                StringBuilder sbMsg = new StringBuilder();
+                sbMsg.Append("<Req>");
+                if (charge)
+                {
+                    sbMsg.Append("<Order  TS='99' Pri='20' ExtDeviceNo='" + agvNo + "' FRow='' TRow='' No='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff:ffffff") + "' />");
+                    CMMLog.Info($"鎺ㄩ�鍏呯數浠诲姟锛歿sbMsg}");
+                }
+                else
+                {
+                    sbMsg.Append("<Order Pri='20' TS='101' IsForce='1' ExtDeviceNo='" + agvNo + "' IsForce='1' From='" + agvNo + "' To='4'  />");
+                    CMMLog.Info($"鎺ㄩ�鍏呯數浠诲姟锛歿sbMsg}");
+                }
+                sbMsg.Append("</Req>");
+                HardwareAccessObject AGVHao = HardwareAccessHelper.Instance.GetEquipmentsHAO("1");
+                if (AGVHao != null)
+                {
+                    object[] args = new object[1];
+                    string errMsg = string.Empty;
+                    args[0] = sbMsg.ToString();
+                    object xmlData = AGVHao._WebServiceInstance.Invoke(command, args);
+                    code = Hanhe.iWCS.AGVWebService.AGVHelper.Instance.AGVXmlResult((string)xmlData, out errMsg);
+                    CMMLog.Info("鎺ㄩ�鍏呯數浠诲姟锛歱aram=" + sbMsg.ToString() + ";cmd=" + command + ";code=" + code + ";errMsg=" + errMsg);
+                    if (code == 60050)
+                    {
+                        code = 0;
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                CMMLog.Info("鎺ㄩ�鍏呯數浠诲姟锛氬紓甯革細銆恆gv=" + agvNo + ";cmd=" + command + "銆慶harge task err锛� + ex.Message.ToString());
+            }
+            CMMLog.Info("鎺ㄩ�鍏呯數浠诲姟锛氭墽琛岀粨鏉燂紒");
+            return code;
+        }
+
+        /// <summary>
+        /// 灏忚溅瀹夊叏闂ㄤ氦浜�+        /// </summary>
+        /// <param name="lockNo"></param>
+        /// <returns></returns>
+        public static bool Traffic(string lockNo)
+        {
+            bool bResult = false;
+            HardwareAccessObject AGVhao = HardwareAccessHelper.Instance.GetEquipmentsHAO("1");
+            if (AGVhao != null)
+            {
+                //鍙戦�琛岃蛋鎸囦护 鍒癆GV
+                StringBuilder sbMsg = new StringBuilder();
+                sbMsg.Append("<Req>");
+                //sbMsg.Append("<Order TS='164' From='2' To='2' ExtDeviceNo='" + lockNo + "' No='" + DateTime.Now.Ticks.ToString() + "' />");
+                sbMsg.Append("<Order TS='164' ExtDeviceNo='" + lockNo + "' No='" + DateTime.Now.Ticks.ToString() + "' />");
+                sbMsg.Append("</Req>");
+
+                var msg = string.Empty;
+                try
+                {
+                    object[] args = new object[1];
+                    args[0] = sbMsg.ToString();
+                    object errObject = AGVhao._WebServiceInstance.Invoke("StartNewOrderWithQCmd", args);
+                    string errMsg = string.Empty;
+                    int errCode = Hanhe.iWCS.AGVWebService.AGVHelper.Instance.AGVXmlResult((string)errObject, out errMsg);
+                    if (errCode == 0)
+                    {
+                        bResult = true;
+                    }
+                    msg = string.Format($"銆愭帹閫佸皬杞﹁繘鍏ュ畨鍏ㄩ棬銆戯細" + "notice agv go errCode={0} errMsg={1} request={2}", errCode, errMsg, sbMsg.ToString());
+                    //Console.WriteLine(msg);
+                    CMMLog.Debug(msg);
+                }
+                catch (Exception ex)
+                {
+                    msg = string.Format($"銆愭帹閫佸皬杞﹁繘鍏ュ畨鍏ㄩ棬锛氬紓甯搞�锛� + "notice agv go errMsg={0} request={1}", ex.Message, sbMsg.ToString());
+                    //Console.WriteLine(msg);
+                    CMMLog.Debug(msg);
+                }
+            }
+            return bResult;
+        }
+
+
+        /// <summary>
+        /// 鍙戦�鍜屽彇娑堝厖鐢典换鍔�+        /// </summary>
+        /// <param name="taskNo">浠诲姟鍙�/param>
+        /// <param name="agvNo">杞﹀彿</param>
+        /// <param name="command">鎸囦护鏂规硶</param>
+        /// <returns></returns>
+        //internal static int SendChargeTask(string taskNo, string agvNo, bool charge, bool full = false) {
+        //    //Console.WriteLine("SendChargeTask");
+        //    var command = charge ? "AddNewOrder" : "CancelOrder";
+        //    //	int code = SendAGVTaskInfo(taskNo, agvNo, "AddNewOrder");
+        //    //  int code = SendAGVTaskInfo(taskNo, agvNo, "CancelOrder");
+        //    int code = -1;
+        //    try {
+        //        CMMLog.Info("full=" + full);
+        //        int to = full ? 1000 : 0;
+        //        StringBuilder sbMsg = new StringBuilder();
+        //        sbMsg.Append("<Req>");
+        //        if (charge) {
+        //            sbMsg.Append("<Order Pri='15' TS='99' No='" + taskNo + "' From='" + agvNo + "'  />");
+        //        }
+        //        else {
+        //            sbMsg.Append("<Order Pri='15' TS='101' IsForce='1' No='" + taskNo + "' IsForce='1' From='" + agvNo + "' To='4'  />");
+        //        }
+        //        sbMsg.Append("</Req>");
+        //        HardwareAccessObject AGVHao = HardwareAccessHelper.Instance.GetEquipmentsHAO("1");
+        //        if (AGVHao != null) {
+        //            object[] args = new object[1];
+        //            string errMsg = string.Empty;
+        //            args[0] = sbMsg.ToString();
+        //            object xmlData = AGVHao._WebServiceInstance.Invoke(command, args);
+        //            code = Hanhe.iWCS.AGVWebService.AGVHelper.Instance.AGVXmlResult((string)xmlData, out errMsg);
+        //            CMMLog.Info("send charge task锛歱aram=" + sbMsg.ToString() + ";cmd=" + command + ";code=" + code + ";errMsg=" + errMsg);
+        //            if (code == 60050) {
+        //                code = 0;
+        //            }
+        //        }
+        //    }
+        //    catch (Exception ex) {
+        //        CMMLog.Info("銆恆gv=" + agvNo + ";cmd=" + command + "銆慶harge task err锛� + ex.Message.ToString());
+        //    }
+        //    return code;
+        //}
+
+        
+        public static bool ChangeParam(string taskNo, int paramNo, params int[] param) {
+            bool bResult = false;
+            TN_I_TASK_DTL_ACTION GoToAction = WorkFlowAction.GetActionNode(taskNo, 1, 0);
+            if (GoToAction != null) {
+                HardwareAccessObject GoToAGVHao = HardwareAccessHelper.Instance.GetEquipmentsHAO(GoToAction.CN_S_PROGRAM_CODE);
+                if (GoToAGVHao != null) {
+                    //鍙戦�琛岃蛋鎸囦护 鍒癆GV
+                    var req = $"< Req >< Order No = '{taskNo}_1' ParamNo = '{paramNo}' Param1='{param[0]}'/></ Req > ";
+                    if (param.Length > 1) {
+                        //req = $"< Req >< Order No = '{taskNo}_1' ParamNo = '{paramNo}' Param1='{param[0]}' Param2='{param[1]}'/></ Req > ";
+                        req = $"<Req><Order No = '{taskNo}_1' ParamNo = '{paramNo}' Param1='{param[0]}' Param2='{param[1]}'/></Req> ";
+                    }
+                    try {
+                        object[] args = new object[1];
+                        args[0] = req;
+                        object errObject = GoToAGVHao._WebServiceInstance.Invoke("ChangeOrder", args);
+                        string errMsg = string.Empty;
+                        int errCode = Hanhe.iWCS.AGVWebService.AGVHelper.Instance.AGVXmlResult((string)errObject, out errMsg);
+                        if (errCode == 0) {
+                            CMMLog.Info("銆愭澀鍙堿GV銆戦�鐭GV琛岃蛋鎴愬姛锛佽姹傚弬鏁�" + req);
+                            bResult = true;
+                        }
+                        else {
+                            CMMLog.Info("銆愭澀鍙堿GV銆戝崰鐢ㄥけ璐�閫氱煡AGV琛岃蛋澶辫触锛乪rrCode=" + errCode + ";璇锋眰鍙傛暟=" + req);
+                        }
+                    }
+                    catch (Exception ex) {
+                        CMMLog.Info("銆愭澀鍙堿GV銆戦�鐭GV寮傚父锛丒xception=" + ex.Message + ";璇锋眰鍙傛暟=" + req);
+                    }
+                }
+            }
+            return bResult;
+        }
+
+    }
+}
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMProtocol/Test.cs b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/Test.cs
new file mode 100644
index 0000000..801daf4
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/Test.cs
@@ -0,0 +1,57 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Microsoft.VisualBasic;
+using System.Collections;
+using System.Data;
+using System.Diagnostics;
+
+namespace Hanhe.iWCS.IndonesiaGLMProtocol
+{
+    
+    public static class Test
+    {
+        public static int ConvertToAscii(char c)
+        {
+            return Strings.AscW(c);
+        }
+
+        public static char ConvertFromAscii(int n)
+        {
+            return Strings.ChrW(n);
+        }
+        public static void Main()
+        {
+            //娴嬭瘯
+            string s = "鎴戠埍鍖椾含澶╁畨闂�;
+            Console.WriteLine(s.Length);
+            int dataCutCont = 0;
+            for (int i = 1; i <= 7; i++)
+            {
+                Console.WriteLine(Test.ConvertToAscii(char.Parse(s.Substring(dataCutCont, 1))));
+                dataCutCont = dataCutCont + 1;
+            }
+
+            //foreach (char c in s)
+            //{
+            //    Console.Write(ConvertToAscii(c).ToString() + "   ");
+            //}
+            Console.WriteLine();
+            int[] n = new int[] {
+            25105,
+            29233,
+            21271,
+            22825,
+            23433,
+            38376
+        };
+            foreach (int num in n)
+            {
+                //Console.Write(ConvertFromAscii(num).ToString() + "      ");
+            }
+
+        }
+    }
+}
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMProtocol/WMSHelper.cs b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/WMSHelper.cs
new file mode 100644
index 0000000..cc48855
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/WMSHelper.cs
@@ -0,0 +1,805 @@
+锘縰sing Hanhe.iWCS.Common;
+using Hanhe.iWCS.DeviceDriver;
+using Hanhe.iWCS.MData;
+using Hanhe.iWCS.Model;
+using MongoDB.Driver;
+using MongoDB.Driver.Builders;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Security.Cryptography;
+using System.Text;
+using System.Threading.Tasks;
+using static Hanhe.iWCS.IndonesiaGLMProtocol.ERPService;
+using static Hanhe.iWCS.IndonesiaGLMProtocol.MESHelper;
+using static System.Runtime.CompilerServices.RuntimeHelpers;
+
+namespace Hanhe.iWCS.IndonesiaGLMProtocol
+{
+    public class WMSHelper
+    {
+        private static WebApiHelper helper = new WebApiHelper();
+        private static T WmsRequest<T>(string name, string param) where T : BaseResponse {
+            HardwareAccessObject hao = HardwareAccessHelper.Instance.GetEquipmentsHAO(Constants.WMS_DEVICE_TYPE_WMS);
+            string msg = "";
+            string feedback = "";
+            T response = default(T);
+            if (hao != null) {
+                try {
+                    //http://[IP]:[绔彛]/api/ApiTask/
+                    string webAPIUrl = hao.WebUrl + name;
+                    //Console.WriteLine(webAPIUrl);
+                    //Console.WriteLine(param);
+                    feedback = new WebApiHelper().WebPost(webAPIUrl, param).Replace(@"\", "").Trim();
+                    //feedback = "{\"success\":false,\"errCode\":\"5001\",\"errMsg\":\"鎵樼洏鍙蜂笉瀛樺湪121锛乗"}";
+                    //feedback = "{\"success\":true,\"errCode\":\"0\",\"task\":{\"taskNo\":\"RWH2103300000013\",\"warehouse\":\"CK002\",\"warehouseArea\":\"BCPLK01\",\"bit\":\"P01-02-06-08\"}}";
+                    if (!string.IsNullOrEmpty(feedback)) {
+                        feedback = feedback.Substring(1, feedback.Length - 2);
+                        //Console.WriteLine(feedback);
+                        response = JsonConvert.DeserializeObject<T>(feedback);
+                        if (response.success == true) {
+                            msg = $"銆恮ms {name}銆憇uccess锛�WebUrl=" + webAPIUrl + ";param=" + param + ";feedback=" + feedback;
+                        }
+                        else {
+                            string errMsg = response.errMsg;
+                            msg = $"銆恮ms {name}銆慺ail锛乪rr=" + errMsg + ";WebUrl=" + webAPIUrl + ";param=" + param + ";feedback=" + feedback;
+                        }
+                    }
+                    else {
+                        string errMsg = "can't find the address";
+                        msg = $"銆恮ms {name}銆慺ail锛乪rr=" + errMsg + ";WebUrl=" + webAPIUrl + ";param=" + param;
+                    }
+                    //Console.WriteLine(msg);
+                    CMMLog.Info(msg);
+                }
+                catch (Exception e) {
+                    CMMLog.Error($"銆恮ms {name}銆慺ail锛乪rr={e.Message}", e);
+                }
+            }
+            else {
+                msg = string.Format($"wms {name} fail锛宎ms workcenter not set锛�);
+            }
+
+            return response;
+        }
+
+        internal static void ExecuteState(string taskNo, int state, string bit = "") {
+            var param = new { taskNo = taskNo, stateNo = state };
+            WmsRequest<BaseResponse>("ExecuteState", JsonConvert.SerializeObject(param));
+        }
+        
+
+        public class BaseResponse
+        {
+            public bool success { get; set; }
+            public string errCode { get; set; }
+            public string errMsg { get; set; }
+        }
+        public class WMSInModel
+        {
+            public string taskNo { get; set; }
+            public string locationGear { get; set; }
+            public string startStock { get; set; }
+            public string startArea { get; set; }
+            public string endArea { get; set; }
+            public string startBit { get; set; }
+            public string trayDimension { get; set; }
+            public string isTransport { get; set; }
+            public string needCreateAMSTask { get; set; }
+            public int priority { get; set; }
+            public int isFull { get; set; }
+            public string projectCode { get; set; }
+            /// <summary>
+            /// 鎵樼洏鐮�+            /// </summary>
+            public string trayCode { get; set; }
+            public List<ItemData> data { get; set; }
+            //public List<TimeData> TimeData { get; set; }
+        }
+
+        public class WMSOutModel
+        {
+            //public string taskNo { get; set; }
+            //public string endStock { get; set; }
+            //public string endArea { get; set; }
+            public string endBit { get; set; }
+            public string trayDimension { get; set; }
+            public string needCreateAMSTask { get; set; }
+            public int priority { get; set; }
+            //public int isFull { get; set; }
+            public string projectCode { get; set; }
+            //public List<ItemData> Data { get; set; }
+        }
+        public class WMSEmptyOutModel
+        {
+            //public string taskNo { get; set; }
+            //public string endStock { get; set; }
+            //public string endArea { get; set; }
+            public string endBit { get; set; }
+            public string trayDimension { get; set; }
+            public string needCreateAMSTask { get; set; }
+            public int priority { get; set; }
+            //public int isFull { get; set; }
+            public string projectCode { get; set; }
+        }
+
+        public class WMSEmptyUnbindModel
+        {
+            //public string taskNo { get; set; }
+            //public string endStock { get; set; }
+            //public string endArea { get; set; }
+            public string locationCode { get; set; }
+        }
+        public class WMSResponseModel
+        {
+            //"{\"Success\":false,\"ErrCode\":null,\"ErrMsg\":\"\",\"OkList\":[],\"FailList\":[{\"Index\":0,\"ErrCode\":null,\"ErrMsg\":\"鏈壘鍒癮aa浣嶇疆鐨勬墍灞炰粨搴揬"}],\"Tasks\":[]}"
+            // "{\"Success\":true,\"ErrCode\":null,\"ErrMsg\":null,\"OkList\":[{\"Index\":0,\"TaskNo\":\"RKT00032\",\"StartStock\":\"XMZ001\",\"StartArea\":\"XMZ001005\",\"StartBit\":\"XMZ001Q71-1\",\"EndStock\":\"XMZ001\",\"EndArea\":\"XMZ001001\",\"EndBit\":\"XMZ001B61-2\",\"Priority\":0}],\"FailList\":[],\"Tasks\":[]}"
+            public int Status { get; set; }
+            public string Code { get; set; }
+            public string Msg { get; set; }
+            public List<TaskInfo> Data { get; set; }
+            public int AffectedRows { get; set; }
+
+            public bool Success { get; set; }
+            //public List<TaskInfo> failList { get; set; }
+            //public List<TaskInfo> tasks { get; set; }
+            //{"taskNo":"浠诲姟鍙�,"startStock":"璧峰浠撳簱","startArea":"璧峰搴撳尯","startBit":"璧峰璐т綅","endStock":"鐩殑浠撳簱","endArea":"鐩殑搴撳尯","endBit":"鐩殑璐т綅"}
+            public class TaskInfo
+            {
+                public string taskNo { get; set; }
+                public string startStock { get; set; }
+                public string startArea { get; set; }
+                public string startBit { get; set; }
+                public string endStock { get; set; }
+                public string endArea { get; set; }
+                public string endBit { get; set; }
+                #region   璁惧閫氶亾淇℃伅
+
+                /// <summary>
+                /// 璁惧閫氶亾鏁版嵁3鈥斺�鎵樼洏鐮�         
+                /// </summary>
+                public string trayCode { get; set; }
+
+                #endregion
+            }
+        }
+
+        public class WMSResponseModel1
+        {
+            //"{\"Success\":false,\"ErrCode\":null,\"ErrMsg\":\"\",\"OkList\":[],\"FailList\":[{\"Index\":0,\"ErrCode\":null,\"ErrMsg\":\"鏈壘鍒癮aa浣嶇疆鐨勬墍灞炰粨搴揬"}],\"Tasks\":[]}"
+            // "{\"Success\":true,\"ErrCode\":null,\"ErrMsg\":null,\"OkList\":[{\"Index\":0,\"TaskNo\":\"RKT00032\",\"StartStock\":\"XMZ001\",\"StartArea\":\"XMZ001005\",\"StartBit\":\"XMZ001Q71-1\",\"EndStock\":\"XMZ001\",\"EndArea\":\"XMZ001001\",\"EndBit\":\"XMZ001B61-2\",\"Priority\":0}],\"FailList\":[],\"Tasks\":[]}"
+            public int Status { get; set; }
+            //public string Code { get; set; }
+            public string Msg { get; set; }
+            public List<TaskInfo> Data { get; set; }
+            public int AffectedRows { get; set; }
+
+            public bool Success { get; set; }
+            //public List<TaskInfo> failList { get; set; }
+            //public List<TaskInfo> tasks { get; set; }
+            //{"taskNo":"浠诲姟鍙�,"startStock":"璧峰浠撳簱","startArea":"璧峰搴撳尯","startBit":"璧峰璐т綅","endStock":"鐩殑浠撳簱","endArea":"鐩殑搴撳尯","endBit":"鐩殑璐т綅"}
+            public class TaskInfo
+            {
+                public string taskNo { get; set; }
+                public string startStock { get; set; }
+                public string startArea { get; set; }
+                public string startBit { get; set; }
+                public string endStock { get; set; }
+                public string endArea { get; set; }
+                public string endBit { get; set; }
+                #region   璁惧閫氶亾淇℃伅
+
+                /// <summary>
+                /// 璁惧閫氶亾鏁版嵁3鈥斺�鎵樼洏鐮�         
+                /// </summary>
+                public string trayCode { get; set; }
+
+                #endregion
+            }
+        }
+        public class ItemData
+        {
+            //鎵樼洏灏哄锛歵rayDimension
+            //鐗╂枡缂栧彿锛歩temCode
+            //鐗╂枡鏁伴噺锛歲ty
+            public string itemCode { get; set; }
+            //public string itemFeature { get; set; }
+            //public string itemState { get; set; }
+            //public string ProductionDate { get; set; }
+            //public string ColourNumber { get; set; }
+            //public string Specification { get; set; }
+            //public string BatchNumber { get; set; }
+            //public int qty { get; set; }
+
+            /// <summary>
+            /// 鏄惁鍙犲簳鎵橈紙1-涓嶅彔搴曟墭    2-鍙犲簳鎵橈級
+            /// </summary>
+            public string palletLayers { get; set; }
+
+            public int qty { get; set; }
+
+            #region   MES浼犺緭鐨勬暟鎹�+            //浼犺緭MES淇℃伅浠ュ強璁惧淇℃伅缁橶MS
+            /// <summary>
+            /// mes杩斿洖鐨勫寘瑁呮満鍙凤紙T1锛孴2锛�.....锛孴9锛�+            /// </summary>
+            public string machineNo { get; set; }
+            /// <summary>
+            /// mes杩斿洖鐨勬垚鍝佹壒娆″彿
+            /// </summary>
+            public string lotNo { get; set; }
+            /// <summary>
+            /// mes杩斿洖鐨勮鍙�+            /// </summary>
+            //public string bagNo { get; set; }
+            /// <summary>
+            /// mes杩斿洖鐨勪骇鍝佸瀷鍙�+            /// </summary>
+            //public string productType { get; set; }
+            /// <summary>
+            /// mes杩斿洖鐨勭墿鏂欑紪鐮�+            /// </summary>
+            //public string materialCode { get; set; }
+            /// <summary>
+            /// mes杩斿洖鐨勫彔鍖呭眰鏁� 锛堜緥1,2,3锛�浠h〃涓嶅彔鍖咃紝2浠h〃鍙�灞傦紝3浠h〃鍙�灞傦級
+            /// </summary>
+            public string foldingbag { get; set; }
+            #endregion
+
+            #region   璁惧閫氶亾淇℃伅
+
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁3鈥斺�鎵樼洏鐮�         
+            /// </summary>
+            //public string trayCode { get; set; }
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁1鈥斺�鍖呰鏈哄彿        
+            /// </summary>
+            //public string location { get; set; }
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁2鈥斺�浜у搧闇�眰閲嶉噺锛�2浣嶆暣鏁�+            /// </summary>
+            public string productWeight { get; set; }
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁2鈥斺�鎵樼洏閲嶉噺锛�2浣嶆暣鏁�+            /// </summary>
+            public string trayCodeWeight { get; set; }
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁2鈥斺�鍗曟墭瀹為檯閲嶉噺锛�2浣嶆暣鏁�+            /// </summary>
+            public string oneTrayWeight { get; set; }
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁2鈥斺�鍙犲寘鍚庡疄闄呴噸閲忥細32浣嶆暣鏁�+            /// </summary>
+            //public string addWeight { get; set; }
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁1鈥斺�鍖呰鏈哄嚭鍙gО閲嶇粨鏋滐細1:OK,2:NG
+            /// </summary>
+            //public int packNg { get; set; }
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁1鈥斺�澶嶇О鍙gО閲嶇粨鏋滐細1:OK,2:NG
+            /// </summary>
+            public int itemState { get; set; }
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁1鈥斺�鏄惁闇�鍙犲寘锛�锛氬彔鍖咃紝2锛氫笉鍙犲寘
+            /// </summary>
+            //public int addState { get; set; }
+            /// <summary>
+            /// 璁惧閫氶亾鏁版嵁1鈥斺�琚嬪彿(001,002,003鈥�99)
+            /// </summary>
+            public string packageCode { get; set; }
+
+            #endregion
+
+            #region   鏃堕棿鎴充俊鎭�+            /// <summary>
+            /// 鏄惁鍙犲寘锛�锛�锛�锛�+            /// </summary>
+            public int isFold { get; set; } = 0;
+            /// <summary>
+            /// 鍖呰鏈哄彿
+            /// </summary>
+            public int packingMachineNumber { get; set; }
+            /// <summary>
+            /// 琚嬪彿(001,002,003鈥�99)1
+            /// </summary>
+            public string bagNumber { get; set; }
+            /// <summary>
+            /// 浜у搧闇�眰閲嶉噺1锛�2浣嶆暣鏁�+            /// </summary>
+            public int needWeight { get; set; }
+            /// <summary>
+            /// 鍗曟墭瀹為檯閲嶉噺1锛�2浣嶆暣鏁�+            /// </summary>
+            public int realWeight { get; set; }
+            /// <summary>
+            /// 鍙犳墭鍚庣殑瀹為檯閲嶉噺锛�2浣嶆暣鏁�+            /// </summary>
+            public int totalWeight { get; set; }
+            /// <summary>
+            /// 浜у搧鎵规鍙�+            /// </summary>
+            public string batchNumber { get; set; }
+            /// <summary>
+            /// 浜у搧鍨嬪彿
+            /// </summary>
+            public string productModel { get; set; }
+            /// <summary>
+            /// 璁℃暟(鍙湪鏁版嵁搴�
+            /// </summary>
+            public int totalCount { get; set; }
+            /// <summary>
+            /// 鏃堕棿鎴�+            /// </summary>
+            public int timeStamp { get; set; }
+            /// <summary>
+            /// 鐓х墖url
+            /// </summary>
+            public string photoURL { get; set; }
+            #endregion
+
+            #region   WMS鏄剧ず淇℃伅
+            /// <summary>
+            /// 鐗╂枡缂栫爜
+            /// </summary>
+            public string Jm_Item_Code { get; set; }
+            /// <summary>
+            /// 鐗╂枡鍚嶇О
+            /// </summary>
+            public string Jm_Item_Name { get; set; }
+            /// <summary>
+            /// 瑙勬牸鍨嬪彿
+            /// </summary>
+            public string Jm_Item_Model { get; set; }
+            /// <summary>
+            /// 鍗曚綅 
+            /// </summary>
+            public string Jm_Item_Unit { get; set; }
+            /// <summary>
+            /// 鍛樺伐
+            /// </summary>
+            public string Jm_Item_Staff { get; set; }
+            #endregion
+
+        }
+
+        public static bool WMSIn(string startBit, string ItemCode, ref string taskNo,ref string trayCode,string timeStamp = "",string endArea = "") {
+            //XMZ001A11-1
+            //startBit = startBit.Substring(0, 9);
+            bool result = false;
+            HardwareAccessObject hao = HardwareAccessHelper.Instance.GetEquipmentsHAO(Constants.WMS_DEVICE_TYPE_WMS);
+            string msg = "";
+            if (hao != null) {
+                //http://192.168.1.199:9001/api/wmsapi/InWorkArea
+                WMSInModel model = new WMSInModel();
+                model.startBit = startBit;
+                model.isTransport = "N";
+                model.needCreateAMSTask = "Y";
+                model.projectCode = "glm";
+                model.data = new List<ItemData>();
+                model.locationGear = "";
+                if (!string.IsNullOrEmpty(ItemCode)) {
+                    CMMLog.Info($"WMSIn-{startBit}:ItemCode涓嶄负绌猴紝鑾峰彇淇℃伅锛�11!");
+                    CMMLog.Info($"{ItemCode}");
+                    //var time = MongoDBSingleton.Instance.FindOne<TimeCuoInfoCom>(Query.Or(Query.EQ("isNeedTray", 1), Query.EQ("isNeedTray", 2)), "TimeCuoInfoCom");
+                    if (ItemCode == "time" || ItemCode == "鎷嗙洏鍙樻洿" || ItemCode == "鎵撳寘涓嬬嚎")
+                    {
+                        CMMLog.Info($"{trayCode}");
+                        var time = MongoDBSingleton.Instance.FindOne<TimeCuoInfoCom>(Query.EQ("timeStamp", int.Parse(trayCode)), "TimeCuoInfoCom");
+                        if (ItemCode == "time" && time != null)
+                        {
+                            int TimeStamp = string.IsNullOrEmpty(timeStamp) ? time.timeStamp : int.Parse(timeStamp);
+                            CMMLog.Info($"time鑾峰彇鏃堕棿鎴虫暟鎹紝鑾峰彇淇℃伅锛�);
+                            model.data.Add(new ItemData()
+                            {
+                                //1妤兼媶鐩樻満璋僕MS鑾峰彇鍏ュ簱缁堢偣锛屼紶杈撴椂闂存埑鏁版嵁锛堟殏瀹氾級
+                                //isFold = time.isFold,
+                                //packingMachineNumber = time.packingMachineNumber,
+                                itemCode = time.productModel,
+                                lotNo = time.batchNumber,
+                                machineNo = time.packingMachineNumber.ToString(),
+                                packageCode = time.bagNumber,
+                                palletLayers = time.isNeedTray.ToString(),
+                                foldingbag = time.isFold.ToString(),
+                                //totalWeight = time.totalWeight,
+                                timeStamp = TimeStamp,
+                                photoURL = time.photoURL,
+                                //productType = time.productModel,
+                                //bagNumber = time.bagNumber,
+                                //needWeight = time.needWeight,
+                                realWeight = time.realWeight
+                                //batchNumber = time.batchNumber,
+                                //totalCount = time.totalCount,
+                            });
+                            MongoDBSingleton.Instance.Remove<TimeCuoInfoCom>(Query.EQ("timeStamp", int.Parse(trayCode)), RemoveFlags.Single);
+                        }
+                        else if (ItemCode == "鎷嗙洏鍙樻洿")
+                        {
+                            model.data.Add(new ItemData()
+                            {
+                                //1妤兼媶鐩樻満璋僕MS鑾峰彇鍏ュ簱缁堢偣锛屼紶杈撴椂闂存埑鏁版嵁锛堟殏瀹氾級
+                                //isFold = time.isFold,
+                                //packingMachineNumber = time.packingMachineNumber,
+                                itemCode = "1",
+                                lotNo = "1",
+                                machineNo = "1",
+                                packageCode = "1",
+                                palletLayers = "1",
+
+                                foldingbag = "1",
+                                //totalWeight = time.totalWeight,
+                                timeStamp = 1,
+                                photoURL = "1",
+                                //productType = time.productModel,
+                                //bagNumber = time.bagNumber,
+                                //needWeight = time.needWeight,
+                                realWeight = 1,
+                                //batchNumber = time.batchNumber,
+                                //totalCount = time.totalCount,
+                            });
+                        }
+                        else if (ItemCode == "鎵撳寘涓嬬嚎")
+                        {
+                            int TimeStamp = string.IsNullOrEmpty(timeStamp) ? time.timeStamp : int.Parse(timeStamp);
+                            List<string> batchList = time.batchNumber.Split('-').ToList();
+                            string batch = "";
+                            for(int i = 0; i < 1; i++)
+                            {
+                                batch = batch + batchList[i] + "-";
+                            }
+                            batch = batch.Substring(0,batch.Length - 1);
+                            CMMLog.Info($"batch:{batch}");
+                            CMMLog.Info($"time鑾峰彇鏃堕棿鎴虫暟鎹紝鑾峰彇淇℃伅锛�);
+                            model.endArea = endArea;
+                            model.data.Add(new ItemData()
+                            {
+                                itemCode = time.materialCode,
+                                lotNo = time.batchNumber,
+                                qty = time.needWeight,
+                                machineNo = time.packingMachineNumber.ToString(),
+                                isFold = time.isFold,
+                                packageCode = time.bagNumber,
+                                needWeight = time.needWeight,
+                                realWeight = time.realWeight,
+                                totalWeight = time.totalWeight,
+                                batchNumber = batch,
+                                productModel = time.productModel,
+                                totalCount = time.totalCount,
+                                timeStamp = TimeStamp,
+                                photoURL = time.photoURL
+                            }) ;
+
+                            //灏嗘暟鎹彃鍏ヤ腑闂磋〃
+                            ERPService.senderpTask(time, startBit);
+                        }
+                    }
+                    else
+                    {
+                        var info = MongoDBSingleton.Instance.FindOne<MachineInfo>(Query.EQ("trayCode", ItemCode), "MachineInfo");
+                        // ERP鍙樻洿鏂板鏁版嵁鐩存帴浠� ERP鐗╂枡涓棿琛�ERPItemTable 鑾峰彇(鏍规嵁鐗╂枡缂栫爜)
+                        //CMMLog.Info($"WMSIn-{startBit}:鏌ヨ鏉′欢锛歵rayCode={ItemCode},璇诲嚭 MachineInfo 琛ㄦ暟鎹负锛歿JsonConvert.SerializeObject(info)}");
+
+                        //var info = MongoDBSingleton.Instance.FindOne<MachineInfo>(Query.EQ("trayCode", ItemCode), "MachineInfo");
+                        if (info != null)
+                        {
+                            //var erpItemTableInfo = MongoDBSingleton.Instance.FindOne<ERPItemTable>(Query.EQ("item_code", info.materialCode), "ERPItemTable");
+                            //CMMLog.Info($"WMSIn-{startBit}:鏌ヨ鏉′欢锛歩tem_code={info.materialCode},璇诲嚭 ERPItemTable 琛ㄦ暟鎹负锛歿JsonConvert.SerializeObject(erpItemTableInfo)}");
+                            model.locationGear = info.secondNg.ToString();
+                            model.trayCode = info.trayCode;
+                            //string product = !string.IsNullOrEmpty(info.productType) ? info.productType : erpItemTableInfo.item_spec;
+                            model.data.Add(new ItemData()
+                            {
+                                itemCode = info.materialCode,
+                                qty = int.Parse(info.productWeight),  //閲嶉噺
+                                //itemCode = product,
+                                lotNo = info.lotNo,
+                                machineNo = info.machineNo,
+                                packageCode = info.packageCode,
+                                palletLayers = info.palletLayers,
+                                foldingbag = info.overlappingLayers,
+                                itemState = info.secondNg,
+                                productWeight = info.productWeight,
+                                trayCodeWeight = info.trayCodeWeight,
+                                oneTrayWeight = info.oneTrayWeight,
+                                //bagNo = info.bagNo,
+                                //productType = info.productType,
+                                //materialCode = info.materialCode,
+                                //location = info.location,
+                                //addWeight = info.addWeight,
+                                //packNg = info.packNg,
+                                //addState = info.addState,
+
+                                //Jm_Item_Code = info.materialCode,
+                                //Jm_Item_Name = erpItemTableInfo.item_name,
+                                //Jm_Item_Model = erpItemTableInfo.item_spec,
+                                //Jm_Item_Unit = erpItemTableInfo.item_uom,
+                                //Jm_Item_Staff = info.trayCodeWeight
+                            });
+                        }
+                    }
+                }
+                CMMLog.Info("-------------------------");
+                string msgData = JsonConvert.SerializeObject(model);
+                CMMLog.Info($"{msgData}");
+                string reqStr = "鐗╂枡鍚�" + ItemCode + ";鏁伴噺";
+                string feedback = "";
+
+                CMMLog.Info($"WMSIn-{startBit}:銆愯皟鐢╳ms鑾峰彇鍏ュ簱璐т綅銆�鍙戦�鏁版嵁锛歿JsonConvert.SerializeObject(msgData)}锛岀墿鏂欐潯浠讹細ItemCode锛歿ItemCode},trayCode锛歿trayCode}");
+                var url = hao.WebUrl + "GlmInSendTask";
+                try {
+                    //hao.WebUrl = "http://192.168.1.199:9001/api/";
+                    feedback = helper.WebPost(url, msgData).Replace(@"\", "").Trim();
+                    //Console.WriteLine(feedback);
+                    CMMLog.Info($"WMSIn-{startBit}:銆愯皟鐢╳ms鑾峰彇鍏ュ簱璐т綅銆�鎺ユ敹鏁版嵁锛� + feedback);
+                    if (!string.IsNullOrEmpty(feedback)) {
+                        //var wmsResponse = JsonConvert.DeserializeObject<WMSResponseModel>(feedback.Substring(1, feedback.Length - 2));
+                        var wmsResponse = JsonConvert.DeserializeObject<WMSResponseModel>(feedback);
+                        //var res = feedback.Replace("{", "").Replace("}", "").Replace(":", "=").Replace(",", ";").Replace('"', ' ');
+                        if (wmsResponse.Success == true) {
+                            if (ItemCode == "鎵撳寘涓嬬嚎") MongoDBSingleton.Instance.Remove<TimeCuoInfoCom>(Query.EQ("timeStamp", int.Parse(trayCode)), RemoveFlags.Single);
+                            msg = $"WMSIn-{startBit}:銆愯皟鐢╳ms鑾峰彇鍏ュ簱璐т綅銆戞垚鍔燂紒杩斿洖缁撴灉=" + wmsResponse.Success + ";璋冪敤WebUrl=" + url + ";杈撳叆鍙傛暟=" + msgData;
+                        }
+                        else {
+                            string errMsg = wmsResponse.Code + "-" + wmsResponse.Msg;
+                            msg = $"WMSIn-{startBit}:銆愯皟鐢╳ms鑾峰彇鍏ュ簱璐т綅銆戝け璐ワ紒閿欒鍘熷洜=" + errMsg + ";璋冪敤WebUrl=" + url + ";杈撳叆鍙傛暟=" + msgData;
+                        }
+                        result = wmsResponse.Success;
+                    }
+                    else {
+                        string errMsg = "鍙傛暟鍙嶉绌哄�";
+                        msg = $"WMSIn-{startBit}:銆愯皟鐢╳ms鑾峰彇鍏ュ簱璐т綅銆戝け璐ワ紒閿欒鍘熷洜=" + errMsg + ";璋冪敤WebUrl=" + url + ";杈撳叆鍙傛暟=" + msgData;
+                    }
+                }
+                catch (Exception e) {
+                    CMMLog.Error(string.Format("銆愯皟鐢╳ms鑾峰彇鍏ュ簱璐т綅澶辫触銆戝紓甯竰0}", e.Message), e);
+                    msg = $"WMSIn-{startBit}:銆愯皟鐢╳ms鑾峰彇鍏ュ簱璐т綅銆戝け璐ワ紒瑙f瀽杩斿洖鍊煎嚭閿�" + feedback + ";璋冪敤WebUrl=" + url + ";杈撳叆鍙傛暟=" + msgData;
+                }
+            }
+            else msg = string.Format($"WMSIn-{startBit}:璋冪敤wms澶辫触锛宎ms宸ヤ綔涓績娌℃湁璁剧疆锛�);
+            CMMLog.Info(msg);
+            //Console.WriteLine(msg);
+            return result;
+        }
+
+        public static bool WMSOut(string endBit, string ItemCode) {
+            //endBit = endBit.Substring(0, 9);
+            bool result = false;
+            HardwareAccessObject hao = HardwareAccessHelper.Instance.GetEquipmentsHAO(Constants.WMS_DEVICE_TYPE_WMS);
+            string msg = "";
+            if (hao != null) {
+                //http://192.168.1.199:9001/api/wmsapi/InWorkArea
+                WMSOutModel model = new WMSOutModel();
+                model.endBit = endBit;
+                model.projectCode = "glm";
+                model.needCreateAMSTask = "Y";
+                //model.Data = new List<ItemData>();
+                //if (!string.IsNullOrEmpty(ItemCode))
+                //{
+                //    model.Data.Add(new ItemData()
+                //    {
+                //        itemCode = ItemCode
+                //    });
+                //}
+                string msgData = JsonConvert.SerializeObject(model);
+                string reqStr = "鐗╂枡鍚�" + ItemCode + ";";
+                string feedback = "";
+
+                var url = hao.WebUrl + "GlmOutSendAmsTask";
+                try {
+                    //hao.WebUrl = "http://192.168.1.199:9001/api/";
+                    feedback = helper.WebPost(url, msgData).Replace(@"\", "").Trim();
+                    CMMLog.Info($"WMS鍑哄簱鎺ュ彛鍥炴姤鏁版嵁锛歿feedback}");
+                    if (!string.IsNullOrEmpty(feedback)) 
+                    {
+                        //var wmsResponse = JsonConvert.DeserializeObject<WMSResponseModel>(feedback.Substring(1, feedback.Length - 2));
+                        var wmsResponse = JsonConvert.DeserializeObject<WMSResponseModel>(feedback);
+                        CMMLog.Info($"{wmsResponse.Success}");
+                        if (wmsResponse.Success == true) msg = "銆愯皟鐢╳ms鑾峰彇鍑哄簱璐т綅銆戞垚鍔燂紒杩斿洖缁撴灉=" + wmsResponse.Success + ";璋冪敤WebUrl=" + url + ";杈撳叆鍙傛暟=" + msgData;
+                        else msg = "銆愯皟鐢╳ms鑾峰彇鍑哄簱璐т綅銆戝け璐ワ紒閿欒鍘熷洜=" + wmsResponse.Code + "-" + wmsResponse.Msg + ";璋冪敤WebUrl=" + url + ";杈撳叆鍙傛暟=" + msgData;
+                        result = wmsResponse.Success;
+                    }
+                    else msg = "銆愯皟鐢╳ms鑾峰彇鍑哄簱璐т綅銆戝け璐ワ紒閿欒鍘熷洜=鍙傛暟鍙嶉绌哄�;璋冪敤WebUrl=" + url + ";杈撳叆鍙傛暟=" + msgData;
+                }
+                catch (Exception e) {
+                    CMMLog.Error(string.Format("銆愯皟鐢╳ms鑾峰彇鍑哄簱璐т綅澶辫触銆戝紓甯竰0}", e.Message), e);
+                    msg = "銆愯皟鐢╳ms鑾峰彇鍑哄簱璐т綅銆戝け璐ワ紒瑙f瀽杩斿洖鍊煎嚭閿�" + feedback + ";璋冪敤WebUrl=" + url + ";杈撳叆鍙傛暟=" + msgData;
+                }
+            }
+            else msg = string.Format("璋冪敤wms澶辫触锛宎ms宸ヤ綔涓績娌℃湁璁剧疆锛�);
+            CMMLog.Info(msg);
+            //Console.WriteLine(msg);
+            return result;
+        }
+
+        public static bool WMSEmptyOut(string endBit, string ItemCode, ref string taskNo, ref string trayCode)
+        {
+            bool result = false;
+            HardwareAccessObject hao = HardwareAccessHelper.Instance.GetEquipmentsHAO(Constants.WMS_DEVICE_TYPE_WMS);
+            string msg = "";
+            if (hao != null)
+            {
+                //http://192.168.1.199:9001/api/wmsapi/InWorkArea
+                WMSEmptyOutModel model = new WMSEmptyOutModel();
+                model.endBit = endBit;
+                model.projectCode = "glm";
+                model.needCreateAMSTask = "Y";
+                string msgData = JsonConvert.SerializeObject(model);
+                string reqStr = "鐗╂枡鍚�" + ItemCode + ";";
+                string feedback = "";
+
+                var url = hao.WebUrl + "TrayOutCallTask";
+                try
+                {
+                    //hao.WebUrl = "http://192.168.1.199:9001/api/";
+                    feedback = helper.WebPost(url, msgData).Replace(@"\", "").Trim();
+                    CMMLog.Info($"WMS鍥炴姤鏁版嵁:{feedback}");
+                    if (!string.IsNullOrEmpty(feedback))
+                    {
+                        //var wmsResponse = JsonConvert.DeserializeObject<WMSResponseModel>(feedback.Substring(1, feedback.Length - 2));
+                        var wmsResponse = JsonConvert.DeserializeObject<WMSResponseModel>(feedback);
+
+                        CMMLog.Info($"{wmsResponse.Success}");
+                        if (wmsResponse.Success == true)
+                        {
+                            // 澧炲姞闈炵┖鍒ゆ柇
+                            //var ok = wmsResponse.Data[0];
+                            //taskNo = ok.taskNo;
+                            //trayCode = ok.trayCode;
+                            msg = "銆愯皟鐢╳ms鑾峰彇鍑哄簱璐т綅銆戞垚鍔燂紒杩斿洖缁撴灉=" + wmsResponse.Success + ";璋冪敤WebUrl=" + url + ";杈撳叆鍙傛暟=" + msgData;
+                        }
+                        else
+                        {
+                            string errMsg = wmsResponse.Code + "-" + wmsResponse.Msg;
+                            msg = "銆愯皟鐢╳ms鑾峰彇鍑哄簱璐т綅銆戝け璐ワ紒閿欒鍘熷洜=" + errMsg + ";璋冪敤WebUrl=" + url + ";杈撳叆鍙傛暟=" + msgData;
+                        }
+                        result = wmsResponse.Success;
+                    }
+                    else
+                    {
+                        string errMsg = "鍙傛暟鍙嶉绌哄�";
+                        msg = "銆愯皟鐢╳ms鑾峰彇鍑哄簱璐т綅銆戝け璐ワ紒閿欒鍘熷洜=" + errMsg + ";璋冪敤WebUrl=" + url + ";杈撳叆鍙傛暟=" + msgData;
+                    }
+                }
+                catch (Exception e)
+                {
+                    CMMLog.Error(string.Format("銆愯皟鐢╳ms鑾峰彇鍑哄簱璐т綅澶辫触銆戝紓甯竰0}", e.Message), e);
+                    msg = "銆愯皟鐢╳ms鑾峰彇鍑哄簱璐т綅銆戝け璐ワ紒瑙f瀽杩斿洖鍊煎嚭閿�" + feedback + ";璋冪敤WebUrl=" + url + ";杈撳叆鍙傛暟=" + msgData;
+                }
+            }
+            else msg = string.Format("璋冪敤wms澶辫触锛宎ms宸ヤ綔涓績娌℃湁璁剧疆锛�);
+            CMMLog.Info(msg);
+            //Console.WriteLine(msg);
+            return result;
+        }
+
+
+        /// <summary>
+        /// 鏀归亾鎺ュ彛
+        /// </summary>
+        /// <param name="taskNo">WMS浠诲姟鍙�/param>
+        /// <param name="changeArea">鏀归亾搴撳尯</param>
+        /// <returns></returns>
+        internal static string WmsUpdateWay(string taskNo, string changeArea)
+        {
+            string result = "";
+            string param = JsonConvert.SerializeObject(new
+            {
+                taskNo = taskNo,
+                updateType = "缁堢偣",
+                changeArea = changeArea
+            });
+            var req = WmsWebPost(param, "UpdateWay");
+            if (req != null && req.success) result = req.location;
+            return result;
+        }
+
+        /// <summary>
+        /// WebPost
+        /// </summary>
+        /// <param name="param">鍙戦�鍐呭</param>
+        /// <param name="postName">鎺ュ彛鍚嶇О</param>
+        /// <param name="Par1">鎵╁睍鍙傛暟</param>
+        /// <returns></returns>
+        private static WmsResModel WmsWebPost(string param, string postName, string Par1 = "")
+        {
+            string msg = ""; string feedback = "";
+            WmsResModel response = new WmsResModel();
+            response.success = false;
+            try
+            {
+                HardwareAccessObject hao = HardwareAccessHelper.Instance.GetEquipmentsHAO(Constants.WMS_DEVICE_TYPE_WMS);
+                if (hao != null)
+                {
+                    string webAPIUrl = hao.WebUrl + postName;
+                    feedback = new WebApiHelper().WebPost(webAPIUrl, param);
+                    if (!string.IsNullOrEmpty(feedback))
+                    {
+                        msg = $"銆怶MS Post {postName}銆慦ebUrl={webAPIUrl} ;param={param} ;return={feedback}";
+                        response = JsonConvert.DeserializeObject<WmsResModel>(feedback.Substring(1, feedback.Length - 2).Replace(@"\",""));
+
+                        if (response.success == true) msg = $"銆怶MS Post {postName}銆憇uccess锛�WebUrl={ webAPIUrl};param={param} ;return={feedback}";
+                        else msg = $"銆怶MS Post {postName}銆慺ail锛乄ebUrl={ webAPIUrl} ;param={param} ;return={feedback}";
+                    }
+                    else
+                    {
+                        string errMsg = "can't find the address";
+                        msg = $"銆怶MS Post {postName}銆慺ail锛乪rr={errMsg};WebUrl={ webAPIUrl} ;param={param}";
+                    }
+                }
+                else msg = $"璋冪敤wms澶辫触锛宎ms宸ヤ綔涓績娌℃湁璁剧疆锛�;
+                CMMLog.Info(msg);
+            }
+            catch (Exception ex)
+            {
+                CMMLog.Info($"銆怶MS Post {postName}銆慺ail锛乪rr={ex.Message}");
+            }
+            return response;
+        }
+
+        internal static bool WMSEmptyUnbind(string extend)
+        {
+            bool result = false;
+            string feedback = "";
+            HardwareAccessObject hao = HardwareAccessHelper.Instance.GetEquipmentsHAO(Constants.WMS_DEVICE_TYPE_WMS);
+            string msg = "";
+            if (hao != null)
+            {
+                //http://192.168.1.199:9001/api/wmsapi/UnbindLocation
+                WMSEmptyUnbindModel model = new WMSEmptyUnbindModel();
+                model.locationCode = extend;
+                string msgData = JsonConvert.SerializeObject(model);
+
+                var url = hao.WebUrl + "UnbindLocation";
+                try
+                {
+                    //hao.WebUrl = "http://192.168.1.199:9001/api/";
+                    feedback = helper.WebGet(url + "?locationCode=" + extend).Replace(@"\", "").Trim();
+                    CMMLog.Info($"璋冪敤瑙g粦鎺ュ彛WMS鍥炴姤鏁版嵁:{feedback}");
+                    if (!string.IsNullOrEmpty(feedback))
+                    {
+                        //var wmsResponse = JsonConvert.DeserializeObject<WMSResponseModel>(feedback.Substring(1, feedback.Length - 2));
+                        
+                        var wmsResponse = JsonConvert.DeserializeObject<WMSResponseModel1>(feedback);
+
+                        CMMLog.Info($"{wmsResponse.Success}");
+                        if (wmsResponse.Success == true)
+                        {
+                            //var ok = wmsResponse.Data[0];
+                            msg = "銆愯皟鐢╳ms瑙g粦绌烘墭缂撳瓨浣嶃�鎴愬姛锛佽繑鍥炵粨鏋�" + wmsResponse.Success + ";璋冪敤WebUrl=" + url + ";杈撳叆鍙傛暟=" + msgData;
+                        }
+                        else
+                        {
+                            string errMsg =  wmsResponse.Msg;
+                            msg = "銆愯皟鐢╳ms瑙g粦绌烘墭缂撳瓨浣嶃�澶辫触锛侀敊璇師鍥�" + errMsg + ";璋冪敤WebUrl=" + url + ";杈撳叆鍙傛暟=" + msgData;
+                        }
+                        result = wmsResponse.Success;
+                    }
+                    else
+                    {
+                        string errMsg = "鍙傛暟鍙嶉绌哄�";
+                        msg = "銆愯皟鐢╳ms瑙g粦绌烘墭缂撳瓨浣嶃�澶辫触锛侀敊璇師鍥�" + errMsg + ";璋冪敤WebUrl=" + url + ";杈撳叆鍙傛暟=" + msgData;
+                    }
+                }
+                catch (Exception e)
+                {
+                    CMMLog.Error(string.Format("銆愯皟鐢╳ms鑾峰彇鍑哄簱璐т綅澶辫触銆戝紓甯竰0}", e.Message), e);
+                    msg = "銆愯皟鐢╳ms瑙g粦绌烘墭缂撳瓨浣嶃�澶辫触锛佽В鏋愯繑鍥炲�鍑洪敊=" + feedback + ";璋冪敤WebUrl=" + url + ";杈撳叆鍙傛暟=" + msgData;
+                }
+            }
+            else msg = string.Format("璋冪敤wms澶辫触锛宎ms宸ヤ綔涓績娌℃湁璁剧疆锛�);
+            CMMLog.Info(msg);
+            //Console.WriteLine(msg);
+            return result;
+        }
+
+        public class WmsResModel
+        {
+            public bool success { get; set; }
+            public string errCode { get; set; }
+            public string errMsg { get; set; }
+            public string location { get; set; }
+
+        }
+    }
+}
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMProtocol/WebApiHelper.cs b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/WebApiHelper.cs
new file mode 100644
index 0000000..9903d50
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/WebApiHelper.cs
@@ -0,0 +1,99 @@
+锘縰sing Hanhe.iWCS.Common;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Net;
+using System.Net.Http;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hanhe.iWCS.IndonesiaGLMProtocol
+{
+    public class WebApiHelper
+    {
+        public string WebPost(string url, string postData, string token = "", string isCookie = "", string cotentType = "application/json")
+        {
+            CMMLog.Info($"webPost,data:{postData} start:{DateTime.Now}");
+            //Console.WriteLine(url);
+            //CMMLog.Info($"url:{url}");
+            WebRequest request = WebRequest.Create(url);
+            request.Method = "POST";
+            //string postData = JsonConvert.SerializeObject(data); 
+            byte[] byteArray = Encoding.UTF8.GetBytes(postData);
+            request.ContentType = cotentType;
+            request.ContentLength = byteArray.Length;
+
+            if (!string.IsNullOrEmpty(token)) request.Headers.Set("Cookie", token);//MD5鍔犲瘑鍚嶵oken鍊�+
+            CMMLog.Debug($"WebPost:URL锛歿url},SendData:{postData}");
+            //request.Timeout = 5000;
+            request.Timeout = 30000;
+
+            try
+            {
+                Stream dataStream = request.GetRequestStream();
+                dataStream.Write(byteArray, 0, byteArray.Length);
+                dataStream.Close();
+                WebResponse response = request.GetResponse();
+                // "kdservice-sessionid=3ec0afdd-3cc2-4573-ae35-62f1751f6b0e; path=/,ASP.NET_SessionId=eokqkml3mdy0gmfroig5cpr3; path=/; HttpOnly"
+                if (!string.IsNullOrEmpty(isCookie))
+                {
+                    ERPService.CooKie = response.Headers.Get("Set-Cookie").Replace("HttpOnly", "");
+                    Console.WriteLine($"WebPost:URL锛歿url},GetCookie锛歿ERPService.CooKie}");
+                    CMMLog.Debug($"WebPost:URL锛歿url},GetCookie锛歿ERPService.CooKie}");
+                }
+                //CMMLog.Info($"{((HttpWebResponse)response).StatusDescription}");
+                //Console.WriteLine(((HttpWebResponse)response).StatusDescription);
+
+                dataStream = response.GetResponseStream();
+                StreamReader reader = new StreamReader(dataStream, Encoding.UTF8);
+                string responseFromServer = reader.ReadToEnd();
+                reader.Close();
+                dataStream.Close();
+                response.Close();
+                CMMLog.Debug($"WebPost:ResData is {responseFromServer},sendData:{postData}");
+
+                //CMMLog.Info($"webPost,data:{postData} end:{DateTime.Now}");
+                return responseFromServer;
+            }
+            catch (Exception e)
+            {
+                CMMLog.Error($"WebPost:璋冪敤鎺ュ彛寮傚父锛歎RL锛歿url},SendData:{postData},ErrorMsg: {e.Message}");
+                return "";
+            }
+        }
+
+        public string WebGet(string url) {
+            //using (var client = new HttpClient()) {
+            //	//璇锋眰缁撴灉
+            //	string result = client.GetAsync(url).Result.Content.ReadAsStringAsync().Result;
+
+            //	//Console.WriteLine(result);
+            //	return result;
+
+            //}
+            ////Console.WriteLine(url);
+            WebRequest request = WebRequest.Create(url);
+            request.Method = "GET";
+            CMMLog.Info("url:"+url+"锛宮ethod:"+request.Method);
+            try {
+                WebResponse response = request.GetResponse();
+                Stream dataStream = response.GetResponseStream();
+                StreamReader reader = new StreamReader(dataStream);
+                string responseFromServer = reader.ReadToEnd();
+
+                reader.Close();
+                dataStream.Close();
+                response.Close();
+                //Console.WriteLine(responseFromServer);
+                CMMLog.Info($"get res:{responseFromServer}");
+                return responseFromServer;
+            }
+            catch (Exception e) {
+                CMMLog.Error(e.Message, e);
+                return "";
+            }
+        }
+    }
+}
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMProtocol/XmlHelper.cs b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/XmlHelper.cs
new file mode 100644
index 0000000..1a596ca
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/XmlHelper.cs
@@ -0,0 +1,39 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml;
+
+namespace Hanhe.iWCS.IndonesiaGLMProtocol
+{
+    public class XmlHelper
+    {
+        public static string xmlPath = "";
+        public static string xmlFileName = "settings.xml";
+        public static XmlDocument xmldoc = new XmlDocument();
+        static XmlHelper()
+        {
+            xmlPath = System.IO.Directory.GetCurrentDirectory();
+            xmlPath += "/" + xmlFileName;
+            xmldoc.Load(xmlPath);
+        }
+
+		public static string GetElementValue(string name) {
+			string result = string.Empty;
+			XmlNode xn = xmldoc.SelectSingleNode("Custom");
+			XmlNodeList xnl = xn.ChildNodes;
+			foreach (object node in xnl) {
+				XmlElement xe = node as XmlElement;
+				if (xe == null)
+					continue;
+
+				if (xe.Name == name) {
+					result = xe.InnerText;
+					break;
+				}
+			}
+			return result;
+		}
+    }
+}
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMProtocol/app.config b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/app.config
new file mode 100644
index 0000000..bacb56b
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/app.config
@@ -0,0 +1,28 @@
+锘�?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="SuperSocket.SocketBase" publicKeyToken="6c80000676988ebb" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-1.6.7.0" newVersion="1.6.7.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-6.7.9.0" newVersion="6.7.9.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+<system.data>
+    <DbProviderFactories>
+      <remove invariant="MySql.Data.MySqlClient" />
+      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.7.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
+    </DbProviderFactories>
+  </system.data></configuration>
\ No newline at end of file
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMProtocol/packages.config b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/packages.config
new file mode 100644
index 0000000..01f4945
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/packages.config
@@ -0,0 +1,11 @@
+锘�?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="Microsoft.AspNet.WebApi.Client" version="5.2.7" targetFramework="net451" />
+  <package id="Microsoft.AspNet.WebApi.Core" version="5.2.7" targetFramework="net451" />
+  <package id="Microsoft.Owin" version="4.1.1" targetFramework="net451" />
+  <package id="Microsoft.Owin.Hosting" version="4.1.1" targetFramework="net451" />
+  <package id="MySql.Data" version="6.7.9" targetFramework="net451" />
+  <package id="Newtonsoft.Json" version="6.0.4" targetFramework="net451" />
+  <package id="Owin" version="1.0" targetFramework="net451" />
+  <package id="SqlSugar" version="5.0.1.7" targetFramework="net451" />
+</packages>
\ No newline at end of file
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMProtocol/readme.txt b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/readme.txt
new file mode 100644
index 0000000..fc3ff77
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/readme.txt
@@ -0,0 +1,7 @@
+锘块」鐩鏄�+涓��鍖呰鏈轰笅绾垮埌澶嶇О骞冲彴锛岀О閲嶇‘璁ゅ悗杞埌绾胯竟搴擄紝闇�璋僿ms鍏ュ簱銆傚悓鏃跺皢绌烘墭杩愬洖鍖呰绾裤�
+9鏉¤緭閫佺嚎涓嬬嚎銆�涓嚎绋嬪幓璇诲彇杈撻�绾跨姸鎬侊紝鑾峰彇涓嬬嚎淇″彿鐢熸垚浠诲姟銆傝鍐�+
+
+
+浜屻�
\ No newline at end of file
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMProtocol/settings.xml b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/settings.xml
new file mode 100644
index 0000000..abd3496
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMProtocol/settings.xml
@@ -0,0 +1,296 @@
+锘�?xml version="1.0" encoding="utf-8" ?>
+<Custom>
+	
+	<SqlServer>Data Source=DESKTOP-NHLBB1O;Initial Catalog=OIMobox3;User ID=sa;Password=mysqlserver;</SqlServer>
+
+	<!--鏃堕棿鎴虫帴鍙�->
+	<timecuo>http://10.1.141.236:5000/getProductInfo</timecuo>
+	<SendERPTaskType>闇�鍥炴姤ERP鐨勪换鍔$被鍨嬶紝澶氫釜浣跨敤鑻辨枃閫楀彿闅斿紑</SendERPTaskType>
+	<!--ERP鐧诲綍鎺ュ彛浼犺緭淇℃伅锛屽涓娇鐢ㄨ嫳鏂囬�鍙烽殧寮�紝绀轰緥鏁版嵁 -->
+	<LoginInfo>64c226e170a9a0,鏉滄枃姝�123456,2052</LoginInfo>
+	
+	<!--MES鎺ュ彛鍦板潃-->
+	<mesurl>http://10.1.141.236:2222/api/WmsApi/GlmTonBagFillInfo</mesurl>
+	<!--鏄惁鍚敤Mes鎺ュ彛鑾峰彇鏁版嵁		0 榛樿寮�惎	1 涓嶉�杩嘙ES鑾峰彇鏁版嵁-->
+	<mesOpen>0</mesOpen>
+	<!--221118鎵撳寘鏈轰笅绾挎祦绋嬪彉鏇�	0 浣跨敤鍘熸湁娴佺▼	1 浣跨敤鍙樻洿娴佺▼-->
+	<packChange>0</packChange>
+	<!--MODBUS鍦板潃-->
+	<OITcpServerUrl>http://192.168.1.199:5102</OITcpServerUrl>
+	<!--鍙樻洿ip鍦板潃-->
+	<BGIP></BGIP>
+	<!--鍙樻洿绔彛-->
+	<BGPORT></BGPORT>
+	<!--涓�ゼ绛夊緟鐐�->
+	<Wait01>CK001-3F-FC01</Wait01>
+	<!--浜屾ゼ绛夊緟鐐�->
+	<Wait02>CK001-3F-FC01</Wait02>
+	<!--AGV瀹氭椂鍏呯數鏃堕棿锛堟牸寮忥細鏃�鍒�绉掞級 澶滈棿鍗佷簩鐐规椂闂存牸寮忥細00:00:00	鐧藉ぉ鍗佷簩鐐瑰墠鏍煎紡锛�1:00:00-->
+	<BatteryTime>00:44:00</BatteryTime>
+	<!--鍏呯數妗�->
+	<!--鍙傛暟璇存槑锛歛gvNo:杞﹀彿	agvType:杞﹀瀷	charginGroup:鍏呯數妗╁垎缁�	charginIP:鍏呯數妗㊣P		agvBit:agv绔欑偣鍙�enable:鏄惁鍚敤-->
+	<ChargingPile>
+		<![CDATA[
+		[
+			{"agvNo":"1","agvType":"鍫嗗灈","charginGroup":"1","charginIP":"10.15.73.13","agvBit":"378","enable":"1"},
+			{"agvNo":"4","agvType":"鍓嶇Щ","charginGroup":"2","charginIP":"10.15.73.14","agvBit":"379","enable":"1"},
+			{"agvNo":"5","agvType":"鍓嶇Щ","charginGroup":"3","charginIP":"10.15.73.14","agvBit":"379","enable":"1"},
+			{"agvNo":"6","agvType":"鍓嶇Щ","charginGroup":"4","charginIP":"10.15.73.14","agvBit":"379","enable":"1"}
+		]]]>
+	</ChargingPile>
+	<!--鐢甸噺杞﹀彿-->
+	<ChargingAgvNo>
+		<![CDATA[
+        [
+          "6","7","2","3"
+        ]]]>
+	</ChargingAgvNo>
+	<!--
+		plc閰嶇疆淇℃伅锛宔nable=1鍚敤锛屾墦鍖呯嚎澶氫釜璁惧鍏辩敤涓�釜ip閫氳							鍙橀噺淇℃伅锛�	  device		璁惧鍙�+		deviceType:1	3妤�鍖呰鏈�																	  deviceType	璁惧绫诲瀷
+		deviceType:2	3妤�鎵撳寘绾�澶嶇О骞冲彴																  ip			璁惧鍦板潃
+		deviceType:3	3妤�鎵撳寘绾�婊℃墭鍏ワ紙鍙犲寘鏈猴級														  readAddr		璇诲彇璁惧鍐呬俊鎭殑鍦板潃
+		deviceType:4	3妤�鎵撳寘绾�婊℃墭鍑猴紙涓嬬嚎锛�													  writeAddr     鍐欏叆璁惧鍐呬俊鎭殑鍦板潃
+		deviceType:5	3妤�鎵撳寘绾�绌烘墭鍑猴紙澶嶇О骞冲彴涓嬫柟锛�											  location      璁惧缂栧彿
+		deviceType:6	3妤�鎵撳寘绾�鎷嗙洏鏈猴紙琛ョ┖鎵樼洏锛�												  enable        璁惧褰撳墠鏄惁宸茬粡鍚敤
+		deviceType:7	1妤�鍙犳墭(鐢垫涓嬫斁)								鈥斺�鈥斺�寮冪敤					  port			MODBUS璇诲彇绔彛鍙�
+		deviceType:8	1鍙疯揣姊�涓夋ゼ													鏂板鍙傛暟锛�+																										  Extend		
+																										  鍖呰鏈虹敤浜庯細瀵瑰簲 鍦板爢缂撳瓨浣嶏紝鍏朵粬璁惧鏃犲彲浠ヤ负绌�+																										  鍙犲寘鏈虹敤浜庯細WMS 鏀归亾鎺ュ彛 浼犺緭鐨�鏀归亾搴撳尯缂栫爜
+		鍚庣画鍔犲叆
+		deviceType:9	1妤�鎷嗙洏鏈�鎷嗙洏琛ョ┖)							鈥斺�鈥斺�寮冪敤
+		deviceType:10	1妤�鍙犳墭锛堢數姊笅鏀锯�鈥旀棤闇�彔鎵橈級				鈥斺�鈥斺�寮冪敤
+								锛堜綔搴燂紝涓嶉渶瑕侊紝鍙犳墭鐐逛负涓�釜浣嶇疆锛�+								浠呬粎鏄嚭浜庢槸鍚﹀彔搴曟墭鏃禔GV绔欑偣涓嶄竴鏍凤紝
+								璇ラ厤缃」宸查厤缃湪sendBit閲岄潰锛�+		deviceType:11	2鍙疯揣姊�涓夋ゼ
+		deviceType:12	1鍙疯揣姊�涓�ゼ
+		deviceType:13	2鍙疯揣姊�涓�ゼ
+		
+		deviceType:14	鍐欏叆5鍙峰寘瑁呮満鐩稿叧淇℃伅  221115鏂板閰嶇疆鍐呭		鈥斺�鈥斺�寮冪敤
+		
+		浜屾湡鏂板璁惧
+		deviceType:15	3妤�鍙犵洏鏈�婊℃墭涓嬬嚎鍏ュ簱
+		
+		鎴愬搧鍏ュ簱娴佺▼璁惧
+		deviceType:16	杞﹂棿鍑哄彛
+		deviceType:17	浠撳簱鍏ュ彛
+		deviceType:18	涓婃枡骞冲彴1
+		deviceType:19	浠撳簱鍑哄彛 2鍙蜂綅绔彛淇℃伅
+		deviceType:20	杩炲粖 鐢靛姩闂�1
+		deviceType:21	杩炲粖 鐢靛姩闂�2
+		deviceType:22	鎻愬崌鏈�+	-->
+	<plcInfo>
+		<![CDATA[
+        [
+         {"device":"1","deviceType":"1",ip:"192.168.1.199","port":502,"plcPort":502,"readAddr":0,"writeAddr":50,"location":"T1","Extend":"","enable":0},
+		 {"device":"2","deviceType":"1",ip:"192.168.1.101","port":502,"plcPort":502,"readAddr":0,"writeAddr":50,"location":"T2","Extend":"","enable":0},
+		 {"device":"3","deviceType":"1",ip:"192.168.1.102","port":502,"plcPort":502,"readAddr":0,"writeAddr":100,"location":"T3","Extend":"","enable":0},
+		 {"device":"4","deviceType":"1",ip:"192.168.1.103","port":502,"plcPort":502,"readAddr":0,"writeAddr":100,"location":"T4","Extend":"","enable":0},
+		 {"device":"5","deviceType":"1",ip:"192.168.1.104","port":502,"plcPort":502,"readAddr":0,"writeAddr":100,"location":"T5","Extend":"","enable":0},
+		 {"device":"6","deviceType":"1",ip:"192.168.1.105","port":502,"plcPort":502,"readAddr":0,"writeAddr":100,"location":"T6","Extend":"","enable":0},
+		 {"device":"7","deviceType":"1",ip:"192.168.1.106","port":502,"plcPort":502,"readAddr":0,"writeAddr":100,"location":"T7","Extend":"","enable":0},
+		 {"device":"8","deviceType":"1",ip:"192.168.1.107","port":502,"plcPort":502,"readAddr":0,"writeAddr":100,"location":"T8","Extend":"","enable":0},
+		 {"device":"9","deviceType":"1",ip:"192.168.1.108","port":502,"plcPort":502,"readAddr":0,"writeAddr":100,"location":"T9","Extend":"","enable":0},
+         
+		 {"device":"10","deviceType":"2",ip:"192.168.1.127","port":502,"plcPort":502,"readAddr":0,"writeAddr":50,"location":"CK001-3F-FC01","Extend":"","enable":0},
+		 {"device":"11","deviceType":"3",ip:"192.168.1.127","port":502,"plcPort":502,"readAddr":200,"writeAddr":300,"location":"CK001-3F-DT01","Extend":"","enable":0},
+		 {"device":"12","deviceType":"4",ip:"192.168.1.127","port":502,"plcPort":502,"readAddr":400,"writeAddr":500,"location":"CK001-3F-DBXX01","Extend":"","enable":1},
+		 {"device":"13","deviceType":"5",ip:"192.168.1.127","port":502,"plcPort":502,"readAddr":600,"writeAddr":620,"location":"CK001-3F-KT01","Extend":"","enable":0},
+		 {"device":"14","deviceType":"6",ip:"192.168.1.127","port":502,"plcPort":502,"readAddr":640,"writeAddr":660,"location":"CK001-3F-KTRK01","Extend":"","enable":0},
+		 {"device":"15","deviceType":"7",ip:"192.168.1.127","port":502,"plcPort":502,"readAddr":680,"writeAddr":700,"location":"CK001-1F-DT01","Extend":"","enable":1},
+		 {"device":"18","deviceType":"10",ip:"192.168.1.110","port":502,"plcPort":502,"readAddr":0,"writeAddr":100,"location":"AAA","Extend":"","enable":0},
+		 
+		 {"device":"16","deviceType":"8",ip:"192.168.1.110","port":502,"plcPort":502,"readAddr":0,"writeAddr":100,"location":"CK001-3F-LIFT01","Extend":"","enable":1},
+		 {"device":"19","deviceType":"11",ip:"192.168.1.110","port":502,"plcPort":502,"readAddr":0,"writeAddr":100,"location":"CK001-1F-LIFT01","Extend":"","enable":0},
+		 {"device":"20","deviceType":"12",ip:"192.168.1.110","port":502,"plcPort":502,"readAddr":0,"writeAddr":100,"location":"AAA","Extend":"","enable":1},
+		 {"device":"21","deviceType":"13",ip:"192.168.1.110","port":502,"plcPort":502,"readAddr":0,"writeAddr":100,"location":"AAA","Extend":"","enable":0},
+		 
+         
+		 {"device":"17","deviceType":"9",ip:"192.168.1.109","port":0,"plcPort":502,"readAddr":680,"writeAddr":700,"location":"AAA","Extend":"","enable":0},
+		 
+		 {"device":"22","deviceType":"14",ip:"192.168.1.104","port":5000,"plcPort":502,"readAddr":1,"writeAddr":1,"location":"DT1,DT2","Extend":"","enable":0},
+		 
+		 {"device":"23","deviceType":"15",ip:"192.168.1.104","port":5000,"plcPort":502,"readAddr":1,"writeAddr":1,"location":"AAA","Extend":"","enable":0},
+		 
+		 {"device":"24","deviceType":"16",ip:"192.168.1.104","port":5000,"plcPort":502,"readAddr":1,"writeAddr":1,"location":"AAA","Extend":"1","enable":0},
+		 {"device":"24","deviceType":"17",ip:"192.168.1.104","port":5000,"plcPort":502,"readAddr":1,"writeAddr":1,"location":"AAA","Extend":"2","enable":0},
+		 {"device":"26","deviceType":"18",ip:"192.168.1.104","port":5000,"plcPort":502,"readAddr":1,"writeAddr":1,"location":"AAA","Extend":"","enable":0},
+		 {"device":"27","deviceType":"18",ip:"192.168.1.104","port":5000,"plcPort":502,"readAddr":1,"writeAddr":1,"location":"AAA","Extend":"","enable":0},
+		 {"device":"24","deviceType":"19",ip:"192.168.1.104","port":5000,"plcPort":502,"readAddr":1,"writeAddr":1,"location":"AAA","Extend":"","enable":0},
+		 {"device":"25","deviceType":"20",ip:"192.168.1.104","port":5000,"plcPort":502,"readAddr":1,"writeAddr":1,"location":"AAA","Extend":"","enable":0},
+		 {"device":"25","deviceType":"21",ip:"192.168.1.104","port":5000,"plcPort":502,"readAddr":1,"writeAddr":1,"location":"AAA","Extend":"","enable":0},
+		 {"device":"25","deviceType":"22",ip:"192.168.1.104","port":5000,"plcPort":502,"readAddr":1,"writeAddr":1,"location":"AAA","Extend":"","enable":0}
+        ]]]>
+	</plcInfo>
+
+	<!--
+		plc璐т綅缂栫爜锛�												鍙傛暟鍚箟锛�
+		鍘熷厛																task:闇�鎷︽埅鐨勪换鍔″簭鍙凤紙鏍囪鎺掑簭浣滅敤锛�+		taskType:1	绌烘墭鍑哄簱				鈥斺�鈥斺�璋冪敤鎺ュ彛涓嬪彂锛堝純鐢級	taskType:AMS浠诲姟绫诲瀷     
+		taskType:2	鎴愬搧鍑哄簱				鈥斺�鈥斺�璋冪敤鎺ュ彛涓嬪彂			location:WMS浠诲姟绫诲瀷		姣斿锛�F_BJCPKT		娉細璇籩xt1鐨勫�
+		taskType:3	绌烘墭绾胯竟1				鈥斺�鈥斺�鏈煡锛堜笉鍋氬鐞嗭級				
+		taskType:4	绌烘墭绾胯竟2				鈥斺�鈥斺�鏈煡锛堜笉鍋氬鐞嗭級	
+		
+		鍚庣画娣诲姞
+		taskType:5	3妤肩紦瀛樻灦鍏ュ彔鎵�					  
+		taskType:6	3妤兼媶鐩樿ˉ绌�						  
+		taskType:7	1妤兼媶鐩樿ˉ绌�			鈥斺�鈥斺�寮冪敤
+		
+		taskType:8  3妤煎绉板叆缂撳瓨鏋�+		taskType:9  婊℃墭鍏ュ簱				鈥斺�鈥斺�鐢盬MS鍒涘缓浠诲姟鐢ㄤ簬鎷︽埅鐢熸垚鐢垫浠诲姟(鍘熷厛涓�涓夋ゼ鎵撳寘涓嬬嚎鍙�鑷�涓�ゼ鍙犳墭鍙o紝鐜板湪鐩存帴 浠�涓夋ゼ婊℃墭搴撳尯 閫佸線 涓�ゼ缁堢偣搴撳尯鍗冲彲)
+		
+		浜屾娣诲姞
+		taskType:10 3妤煎绉板叆缂撳瓨鏋禢G
+		
+		鏁欑О娴佺▼
+		taskType:11 3妤肩牆鐮佸叆澶嶇ОNG			鈥斺�鈥斺�寮冪敤
+		taskType:12 3妤煎绉板叆鍖呰鏈篘G		鈥斺�鈥斺�寮冪敤
+		taskType:13 3妤煎寘瑁呮満鍏ュ绉癗G		鈥斺�鈥斺�寮冪敤
+		taskType:14 3妤煎绉板叆鐮濈爜NG			鈥斺�鈥斺�寮冪敤
+		
+		鏁欑О鍚庡鐞嗘祦绋�+		taskType:15 3妤肩紦瀛樻灦鍏ュ彔鎵楴G
+		taskType:16 3妤肩紦瀛樻灦鍏ュ寘瑁呮満NG		鈥斺�鈥斺�寮冪敤
+		
+		浜屾湡鏇存敼涓庢柊澧炴祦绋�闇�澧炲姞鐨勬柊閰嶇疆椤�
+		taskType:17 3妤煎寘瑁呰ˉ绌�			鈥斺�鈥斺�浜屾湡锛氱敱 AMS 鑷缓浠诲姟鏀逛负 鐢�WMS 鍒涘缓涓嬪彂锛屽洜姝ら渶瑕侀厤缃浠诲姟鏁版嵁
+		taskType:18 3妤煎彔鐩樹笅绾�			鈥斺�鈥斺�浜屾湡锛氫笁妤煎彔鐩樻満绌烘墭鐩樻弧鎵樹笅绾垮叆搴�+		taskType:19 3妤兼墦鍖呬笅绾�			鈥斺�鈥斺�浜屾湡锛氫笁妤兼墦鍖呬笅绾垮彛婊℃墭鐩樻弧鎵樹笅绾垮叆搴�+		
+		AMS鑷缓浠诲姟绫诲瀷
+		NG缂撳瓨涓�							鈥斺�鈥斺�寮冪敤
+		NG缂撳瓨浜屾							鈥斺�鈥斺�寮冪敤
+		鐢垫鍙栬揣
+		鐢垫鍗歌揣
+		3妤煎寘瑁呭彇鏂�+	-->
+	<huoWeiCode>
+		<![CDATA[
+        [
+         {"task":"1","taskType":"绌烘墭鍑哄簱","location":"3F_BJCPKT"},
+		 {"task":"2","taskType":"鎴愬搧鍑哄簱","location":"1F_HJ_CKHC"},
+		 {"task":"3","taskType":"绌烘墭绾胯竟1","location":"PDA01"},
+		 {"task":"4","taskType":"绌烘墭绾胯竟2","location":"PDA02"},
+		 
+		 {"task":"5","taskType":"3妤肩紦瀛樻灦鍏ュ彔鎵�,"location":"3F_HC_DB"},
+		 {"task":"6","taskType":"3妤兼媶鐩樿ˉ绌�,"location":"3F_BJ_BZRK"},
+		 {"task":"7","taskType":"1妤兼媶鐩樿ˉ绌�,"location":"1F_DTKT_CPJ"},
+		 
+		 {"task":"8","taskType":"3妤煎绉板叆缂撳瓨鏋�,"location":"3F_FC_HC"},
+		 {"task":"9","taskType":"婊℃墭鍏ュ簱","location":"1F_DT_HJ"},
+		 
+		 {"task":"10","taskType":"3妤煎绉板叆缂撳瓨鏋禢G","location":"NG_HJ"},
+		 
+		 {"task":"11","taskType":"3妤肩牆鐮佸叆澶嶇ОNG","location":"NG_FM_FC"},
+		 {"task":"12","taskType":"3妤煎绉板叆鍖呰鏈篘G","location":"NG_FC_BZJ"},
+		 {"task":"13","taskType":"3妤煎寘瑁呮満鍏ュ绉癗G","location":"NG_BZJ_FC"},
+		 {"task":"14","taskType":"3妤煎绉板叆鐮濈爜NG","location":"NG_FC_FM"},
+		 
+		 {"task":"15","taskType":"3妤肩紦瀛樻灦鍏ュ彔鎵楴G","location":"3F_NG_DB"},
+		 
+		 {"task":"16","taskType":"3妤肩紦瀛樻灦鍏ュ寘瑁呮満NG","location":"3F_NG_DB"},
+		 
+		 {"task":"17","taskType":"3妤煎寘瑁呰ˉ绌�,"location":"3F_NG_DB"},
+		 
+		 {"task":"18","taskType":"鍙犵洏涓嬬嚎","location":"3F_NG_DB"},
+		 {"task":"19","taskType":"3妤兼垚鍝佸嚭搴�,"location":"CK001_XN01"},
+		 {"task":"19","taskType":"1妤艰緟鏉愬叆3妤�,"location":"CK001_XN01"},
+		 
+        ]]]>
+	</huoWeiCode>
+
+	<!--
+		鐗规畩鐐逛綅浠诲姟鎺ㄩ�澶勭悊锛�                             鍙傛暟鍚箟锛�瀵瑰簲<MongoTN_AB_STOCK_LOCATION>琛�+		task:1	3妤煎绉板叆缂撳瓨鏋�								task:鐗规畩浠诲姟搴忓彿锛堟爣璁版帓搴忎綔鐢級
+		task:2	鐗规畩浠诲姟绫诲瀷2锛堜繚鐣欑被鍨嬶紝渚夸簬鍚庢湡娣诲姞锛�		taskType:鍏锋湁鐗规畩鐐圭殑浠诲姟绫诲瀷(鐢盇MS鑷畾涔�
+																bit:褰撳墠鐗规畩浠诲姟绫诲瀷鐨勪换鍔$偣浣嶏紙瀵瑰簲涓昏〃 CN_S_START_BIT 鎴栬�涓昏〃 CN_S_END_BIT 锛�+																agv:褰撳墠鐗规畩鐐逛綅瀵瑰簲鐨刟gv鍙凤紙瀵瑰簲鏍囬琛�CN_N_AGV_LOCATION 锛�+																锛堝凡浣滃簾锛塮loor:褰撳墠鐗规畩浠诲姟绫诲瀷鐨勭壒娈婄偣浣嶅眰鏁帮紙瀵瑰簲鏍囬琛�CN_S_FLOOR 锛�+																floor:褰撳墠鐗规畩浠诲姟绫诲瀷鐨勭壒娈婄偣浣嶅眰鏁帮紙鐩存帴鍘籑ongo閲岄潰鏌ヨ锛岀洰鍓嶅叆搴撶殑缁堢偣灞傛暟鍧囨槸鐩存帴璇籑ongo锛屽皬杞︽槸鍚屼竴杈�锛�+																		鏈夊叧floor澶囨敞锛氫竴妤煎眰鏁伴兘鏄�锛岃�涓嶆槸灏唂loor璧嬪�缁橣Row
+																
+																
+																
+		鐗规畩鎯呭喌澶囨敞锛�+			taskType涓烘弧鎵樺叆搴撶殑鏃跺�锛岃捣鐐瑰簲涓轰竴妤煎彔鐩樻満锛岀粓鐐圭敱WMS鎸囧畾锛屼换鍔$敱WMS涓嬪彂
+	-->
+	<sendBit>
+		<![CDATA[
+        [
+         {"task":"1","taskType":"3妤煎绉板叆缂撳瓨鏋�,"bit":"CK001-3F-FC01","agv":999,"floor":"1"},
+	
+		 
+		 {"task":"2","taskType":"婊℃墭鍏ュ簱","bit":"CK001-1F-DT01","agv":2,"floor":"2"},
+		 {"task":"2","taskType":"婊℃墭鍏ュ簱","bit":"CK001-1F-DT01","agv":1,"floor":"1"}
+        ]]]>
+	</sendBit>
+
+	<!--鍙傛暟璇存槑锛�+		AgvNo:杞﹀彿
+	-->
+	<AGVState>
+		<![CDATA[
+        [
+		 {"AgvNo":"1","ip":"10.50.65.30","port":502,"readAddr":0,"writeAddr":0,"enable":0},
+		 {"AgvNo":"1","ip":"10.50.65.30","port":502,"readAddr":0,"writeAddr":7,"enable":0}
+        ]]]>
+	</AGVState>
+
+	
+	<!--鍙傛暟璇存槑锛�+		machineLoc:鍖呰鏈鸿揣浣�+		ddLoc:鍦板爢缂撳瓨鐐�+		quantity:鏁伴噺
+	-->
+	<AGVLocation>
+		<![CDATA[
+        [
+		 {"machineLoc":"loc1,loc2","ddLoc",["loc1","loc2"],"Enabel":1},
+		 {"machineLoc":"loc1,loc2","ddLoc",["loc1","loc2"],"Enabel":1}
+        ]]]>
+	</AGVLocation>
+
+	<!--鍙傛暟璇存槑锛�+		ddLoc:鍦板爢缂撳瓨鐐�+		Site:agv绔欑偣 浠庡乏鍒板彸涓�鏄竴灞傚埌鍏眰鐨勭珯鐐�+	-->
+	<DDSite>
+		<![CDATA[
+        [
+		 {"ddLoc":"loc1","Site":[1,2,3],quantity:6,"Enable":1}
+        ]]]>
+	</DDSite>
+
+	<!--
+		鎴愬搧鍏ュ簱鐨勬帴椹充綅
+		鍙傛暟璇存槑锛�+		locCode:璐т綅缂栫爜
+	-->
+	<Connectingbits>
+		<![CDATA[
+        [
+		 {"locCode":"1","agvSite":[],"enable":1},
+		 {"locCode":"2","agvSite":[],"enable":1}
+        ]]]>
+	</Connectingbits>
+
+	<!--
+		绗笁鏂规帴鍙RL閰嶇疆椤�+		鍙傛暟璇存槑锛�+		UrlNo锛歎RL鏍囪瘑(鍞竴锛屽紑鍙戞寚瀹氾紝涓嶅厑璁镐慨鏀�
+		UrlSign锛歎RL涓枃鍚箟
+		Url锛歎RL璋冪敤鍦板潃
+		Enable锛氭槸鍚﹀惎鐢�+	-->
+	<ThirdUrl>
+		<![CDATA[
+        [
+		 {"UrlNo":"1","UrlSign":"ERP鐧诲綍鎺ュ彛","Url":"http://113.105.66.24:89/k3cloud/Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc","Enable":1},
+		 {"UrlNo":"2","UrlSign":"ERP鏉$爜涓绘。鎺ュ彛","Url":"http://113.105.66.24:89/k3cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save.common.kdsvc","Enable":1},
+		 {"UrlNo":"3","UrlSign":"ERP鎵瑰彿鎺ュ彛","Url":"http://113.105.66.24:89/k3cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save.common.kdsvc","Enable":1}
+        ]]]>
+	</ThirdUrl>
+</Custom>
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMTCP/.vs/Hanhe.iWCS.IndonesiaGLMTCP.csproj.dtbcache.json b/ams/Hanhe.iWCS.IndonesiaGLMTCP/.vs/Hanhe.iWCS.IndonesiaGLMTCP.csproj.dtbcache.json
new file mode 100644
index 0000000..8b0c437
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMTCP/.vs/Hanhe.iWCS.IndonesiaGLMTCP.csproj.dtbcache.json
@@ -0,0 +1 @@
+{"RootPath":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\鍗板凹鏍兼灄缇嶾\Hanhe.iWCS.IndonesiaGLMTCP","ProjectFileName":"Hanhe.iWCS.IndonesiaGLMTCP.csproj","Configuration":"Debug|AnyCPU","FrameworkPath":"","Sources":[{"SourceFile":"SessionInstance.cs"},{"SourceFile":"Properties\\AssemblyInfo.cs"},{"SourceFile":"WCSServer.cs"},{"SourceFile":"WCSSession.cs"},{"SourceFile":"XmlHelper.cs"},{"SourceFile":"obj\\Debug\\.NETFramework,Version=v4.5.1.AssemblyAttributes.cs"}],"References":[{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\Hanhe.iWCS.Business\\bin\\Debug\\Hanhe.iWCS.Business.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":true,"ProjectPath":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\Hanhe.iWCS.Business\\bin\\Debug\\Hanhe.iWCS.Business.dll"},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\姹夊拰鏅鸿兘浜屾寮�彂鍖匼\Hanhe.iWCS.Common.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\姹夊拰鏅鸿兘浜屾寮�彂鍖匼\Hanhe.iWCS.DeviceDriver.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\姹夊拰鏅鸿兘浜屾寮�彂鍖匼\Hanhe.iWCS.Factroy.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\姹夊拰鏅鸿兘浜屾寮�彂鍖匼\Hanhe.iWCS.Interface.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\姹夊拰鏅鸿兘浜屾寮�彂鍖匼\Hanhe.iWCS.Model.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\Microsoft.CSharp\\v4.0_4.0.0.0__b03f5f7f11d50a3a\\Microsoft.CSharp.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\WINDOWS\\Microsoft.NET\\Framework\\v4.0.30319\\mscorlib.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\姹夊拰鏅鸿兘浜屾寮�彂鍖匼\SuperSocket1.6.7\\SuperSocket.Common.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\姹夊拰鏅鸿兘浜屾寮�彂鍖匼\SuperSocket1.6.7\\SuperSocket.Facility.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\姹夊拰鏅鸿兘浜屾寮�彂鍖匼\SuperSocket1.6.7\\SuperSocket.SocketBase.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\姹夊拰鏅鸿兘浜屾寮�彂鍖匼\SuperSocket1.6.7\\SuperSocket.SocketEngine.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Core\\v4.0_4.0.0.0__b77a5c561934e089\\System.Core.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Data.DataSetExtensions\\v4.0_4.0.0.0__b77a5c561934e089\\System.Data.DataSetExtensions.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_64\\System.Data\\v4.0_4.0.0.0__b77a5c561934e089\\System.Data.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System\\v4.0_4.0.0.0__b77a5c561934e089\\System.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Net.Http\\v4.0_4.0.0.0__b03f5f7f11d50a3a\\System.Net.Http.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Xml\\v4.0_4.0.0.0__b77a5c561934e089\\System.Xml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Xml.Linq\\v4.0_4.0.0.0__b77a5c561934e089\\System.Xml.Linq.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""}],"Analyzers":[],"Outputs":[{"OutputItemFullPath":"C:\\software\\A-宸ヤ綔\\婧愮爜\\WCS\\Hanhe.iWCS.3.3\\鍗板凹鏍兼灄缇嶾\Hanhe.iWCS.IndonesiaGLMTCP\\bin\\Debug\\Hanhe.iWCS.IndonesiaGLMTCP.dll","OutputItemRelativePath":"Hanhe.iWCS.IndonesiaGLMTCP.dll"},{"OutputItemFullPath":"","OutputItemRelativePath":""}],"CopyToOutputEntries":[]}
\ No newline at end of file
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMTCP/Hanhe.iWCS.IndonesiaGLMTCP.csproj b/ams/Hanhe.iWCS.IndonesiaGLMTCP/Hanhe.iWCS.IndonesiaGLMTCP.csproj
new file mode 100644
index 0000000..08fed90
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMTCP/Hanhe.iWCS.IndonesiaGLMTCP.csproj
@@ -0,0 +1,84 @@
+锘�?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{8738FE97-0699-437B-8480-8D86BD3B86EA}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Hanhe.iWCS.IndonesiaGLMTCP</RootNamespace>
+    <AssemblyName>Hanhe.iWCS.IndonesiaGLMTCP</AssemblyName>
+    <TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Hanhe.iWCS.Common">
+      <HintPath>..\..\姹夊拰鏅鸿兘浜屾寮�彂鍖匼Hanhe.iWCS.Common.dll</HintPath>
+    </Reference>
+    <Reference Include="Hanhe.iWCS.DeviceDriver">
+      <HintPath>..\..\姹夊拰鏅鸿兘浜屾寮�彂鍖匼Hanhe.iWCS.DeviceDriver.dll</HintPath>
+    </Reference>
+    <Reference Include="Hanhe.iWCS.Factroy">
+      <HintPath>..\..\姹夊拰鏅鸿兘浜屾寮�彂鍖匼Hanhe.iWCS.Factroy.dll</HintPath>
+    </Reference>
+    <Reference Include="Hanhe.iWCS.Interface">
+      <HintPath>..\..\姹夊拰鏅鸿兘浜屾寮�彂鍖匼Hanhe.iWCS.Interface.dll</HintPath>
+    </Reference>
+    <Reference Include="Hanhe.iWCS.Model">
+      <HintPath>..\..\姹夊拰鏅鸿兘浜屾寮�彂鍖匼Hanhe.iWCS.Model.dll</HintPath>
+    </Reference>
+    <Reference Include="SuperSocket.Common">
+      <HintPath>..\..\姹夊拰鏅鸿兘浜屾寮�彂鍖匼SuperSocket1.6.7\SuperSocket.Common.dll</HintPath>
+    </Reference>
+    <Reference Include="SuperSocket.Facility">
+      <HintPath>..\..\姹夊拰鏅鸿兘浜屾寮�彂鍖匼SuperSocket1.6.7\SuperSocket.Facility.dll</HintPath>
+    </Reference>
+    <Reference Include="SuperSocket.SocketBase">
+      <HintPath>..\..\姹夊拰鏅鸿兘浜屾寮�彂鍖匼SuperSocket1.6.7\SuperSocket.SocketBase.dll</HintPath>
+    </Reference>
+    <Reference Include="SuperSocket.SocketEngine">
+      <HintPath>..\..\姹夊拰鏅鸿兘浜屾寮�彂鍖匼SuperSocket1.6.7\SuperSocket.SocketEngine.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="SessionInstance.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="WCSServer.cs" />
+    <Compile Include="WCSSession.cs" />
+    <Compile Include="XmlHelper.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\Hanhe.iWCS.Business\Hanhe.iWCS.Business.csproj">
+      <Project>{733b341a-eddb-44e0-8749-6764aee699ed}</Project>
+      <Name>Hanhe.iWCS.Business</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMTCP/Properties/AssemblyInfo.cs b/ams/Hanhe.iWCS.IndonesiaGLMTCP/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..5996fb8
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMTCP/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+锘縰sing System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 鏈夊叧绋嬪簭闆嗙殑涓�埇淇℃伅鐢变互涓�+// 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у�鍙慨鏀�+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭�
+[assembly: AssemblyTitle("Hanhe.iWCS.TaizhouGEMTwoTCP")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Hanhe.iWCS.TaizhouGEMTwoTCP")]
+[assembly: AssemblyCopyright("Copyright 漏  2020")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏�ComVisible 璁剧疆涓�false 浼氫娇姝ょ▼搴忛泦涓殑绫诲瀷
+//瀵�COM 缁勪欢涓嶅彲瑙併�濡傛灉闇�浠�COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷
+//璇峰皢姝ょ被鍨嬬殑 ComVisible 鐗规�璁剧疆涓�true銆�+[assembly: ComVisible(false)]
+
+// 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
+[assembly: Guid("681eb23c-6036-4e37-8acf-46b37c17f7af")]
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓�缁勬垚: 
+//
+//      涓荤増鏈�+//      娆$増鏈�+//      鐢熸垚鍙�+//      淇鍙�+//
+//鍙互鎸囧畾鎵�湁杩欎簺鍊硷紝涔熷彲浠ヤ娇鐢ㄢ�鐢熸垚鍙封�鍜屸�淇鍙封�鐨勯粯璁ゅ�
+//閫氳繃浣跨敤 "*"锛屽涓嬫墍绀�
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMTCP/SessionInstance.cs b/ams/Hanhe.iWCS.IndonesiaGLMTCP/SessionInstance.cs
new file mode 100644
index 0000000..ccb75fb
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMTCP/SessionInstance.cs
@@ -0,0 +1,195 @@
+锘縰sing Hanhe.iWCS.Factroy;
+using Hanhe.iWCS.Interface;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hanhe.iWCS.IndonesiaGLMTCP
+{
+    public class SessionInstance
+    {
+        private static readonly SessionInstance instance = new SessionInstance();
+
+        public List<WCSSession> WCSSessionList = new List<WCSSession>();
+
+        /// <summary>
+        /// 璁惧鎺堟潈鏁伴噺
+        /// </summary>
+        private const int DeviceAuthNumber = 100;
+
+        /// <summary>
+        /// 璁惧鍗忚鎺ュ彛瀹炰緥鍖�+        /// </summary>
+        public IProtocolAnalysis _IProtocolAnalysis;
+
+
+        /// <summary>
+        /// 鑾峰彇鍗曞疄渚�+        /// </summary>
+        public static SessionInstance Instance {
+            get {
+                return instance;
+            }
+        }
+
+        /// <summary>
+        /// 鏋勯�鍑芥暟
+        /// </summary>
+        public SessionInstance() {
+
+        }
+
+        /// <summary>
+        /// 鍒濆鍖�+        /// </summary>
+        public void Initialize() {
+            _IProtocolAnalysis = DataAccess.CreateProtocolAnalysis();
+        }
+
+        /// <summary>
+        /// 澧炲姞浼氳瘽鍒板唴瀛橀槦鍒�+        /// </summary>
+        /// <param name="session"></param>
+        public void AddSession(WCSSession session) {
+            if (!WCSSessionList.Exists(p => p.SessionID == session.SessionID)) {
+                WCSSessionList.RemoveAll(a => a.RemoteEndPoint.Address == session.RemoteEndPoint.Address);
+                var _wcsSession = WCSSessionList.Where(p => p.RemoteEndPoint.Address == session.RemoteEndPoint.Address);
+                foreach (var sessionIns in _wcsSession) {
+
+                    WCSSessionList.Remove(sessionIns);
+                }
+                if (WCSSessionList.Count <= DeviceAuthNumber) {
+                    WCSSessionList.Add(session);
+                }
+            }
+        }
+        private void PrintSession() {
+            WCSSessionList.ForEach(a => Console.WriteLine($"{a.RemoteEndPoint.Address}:{a.RemoteEndPoint.Port}"));
+        }
+        /// <summary>
+        /// 缁欐寚瀹氬鎴风鍙戦�娑堟伅(鍙尮閰岻P鍦板潃)
+        /// </summary>
+        /// <param name="ip"></param>
+        /// <param name="port"></param>
+        /// <param name="msg"></param>
+        /// <returns></returns>
+        public bool PLCSend(string ip, int port, string msg) {
+            bool iRtn = false;
+            //PrintSession();
+            //瀵瑰綋鍓嶅凡杩炴帴鐨勬墍鏈変細璇濊繘琛屽箍鎾�+            WCSSession wcsSession = WCSSessionList.Find(p => p.RemoteEndPoint.Address.ToString() == ip && p.RemoteEndPoint.Port == port);
+            if (wcsSession != null) {
+                var data = Encoding.UTF8.GetBytes(msg);
+                wcsSession.Send(data, 0, data.Length);
+                //Console.WriteLine($"{ip}:{port} 鍙戦�娑堟伅{msg}");
+                iRtn = true;
+            }
+            else {
+                Console.WriteLine($"{ip}:{port}杩炴帴涓嶅瓨鍦�);
+            }
+            return iRtn;
+        }
+
+        public bool PLCSend(string ip, int port, byte[] data) {
+            bool iRtn = false;
+            //PrintSession();
+            //瀵瑰綋鍓嶅凡杩炴帴鐨勬墍鏈変細璇濊繘琛屽箍鎾�+            
+            WCSSession wcsSession = WCSSessionList.Find(p => p.RemoteEndPoint.Address.ToString() == ip && p.RemoteEndPoint.Port == port);
+            if (wcsSession != null) {
+                wcsSession.Send(data, 0, data.Length);
+                //Console.WriteLine($"{ip}:{port} 鍙戦�娑堟伅{msg}");
+                iRtn = true;
+            }
+            else {
+                Console.WriteLine($"{ip}:{port}杩炴帴涓嶅瓨鍦�);
+            }
+            return iRtn;
+        }
+        /// <summary>
+        /// 缁欐寚瀹氬鎴风鍙戦�娑堟伅(鍖归厤IP鍦板潃)
+        /// </summary>
+        /// <param name="ip">IP鍦板潃</param>
+        /// <param name="msg"></param>
+        /// <returns></returns>
+        public bool PLCSend(string ip, string msg) {
+            bool iRtn = false;
+            //瀵瑰綋鍓嶅凡杩炴帴鐨勬墍鏈変細璇濊繘琛屽箍鎾�+            WCSSession wcsSession = WCSSessionList.Find(p => p.RemoteEndPoint.Address.ToString() == ip);
+            if (wcsSession != null) {
+                //var data = Encoding.Default.GetBytes(msg);
+                var data = Encoding.UTF8.GetBytes(msg);
+                wcsSession.Send(data, 0, data.Length);
+                iRtn = true;
+            }
+            return iRtn;
+        }
+
+        /// <summary>
+        /// 閫氳繃浼氳瘽鍙ユ焺ID鎵惧埌瀹㈡埛绔璞″彂閫佹暟鎹�+        /// </summary>
+        /// <param name="sessionID">浼氳瘽鍙ユ焺ID</param>
+        /// <param name="msg">鍙戦�鏁版嵁</param>
+        /// <returns></returns>
+        public bool PLCSendForSessionID(string sessionID, string msg) {
+            bool iRtn = false;
+            WCSSession wcsSession = WCSSessionList.Find(p => p.SessionID == sessionID);
+            if (wcsSession != null) {
+                Hanhe.iWCS.Common.CMMLog.Info("PLC IP=" + wcsSession.RemoteEndPoint.Address.ToString());
+                var data = Encoding.UTF8.GetBytes(msg);
+                wcsSession.Send(data, 0, data.Length);
+                iRtn = true;
+            }
+            return iRtn;
+        }
+
+
+        /// <summary>
+        /// 鍒犻櫎涓�釜浼氳瘽
+        /// </summary>
+        /// <param name="sessionID">浼氳瘽ID</param>
+        public void SessionRemove(string sessionID) {
+            if (WCSSessionList.Count > 0) {
+                WCSSession wcsSession = WCSSessionList.Find(p => p.SessionID == sessionID);
+                if (wcsSession != null) WCSSessionList.Remove(wcsSession);
+            }
+        }
+
+        /// <summary>
+        /// 绉婚櫎閲嶅鐨勪細璇濓紙鍚屼竴涓澶囩紪鍙峰湪Session閲嶅锛�+        /// </summary>
+        /// <param name="sessionID">浼氳瘽SessionID</param>
+        /// <param name="deviceCode">璁惧缂栧彿</param>
+        public void RemoveRepeatDeviceCodeForSession(string sessionID, string deviceCode) {
+            IEnumerable<WCSSession> wcsSessionList = WCSSessionList.Where(p => p.SessionID != sessionID && p.deviceCode == deviceCode);
+            foreach (var wcsSession in wcsSessionList) {
+                WCSSessionList.Remove(wcsSession);
+            }
+        }
+
+        /// <summary>
+        /// 绉婚櫎浼氳瘽
+        /// </summary>
+        /// <param name="ip">浼氳瘽ip</param>
+        public void RemoveSessionExcludeFromIP(string ip) {
+            IEnumerable<WCSSession> wcsSessionList = WCSSessionList.Where(p => p.RemoteEndPoint.Address.ToString() != ip);
+            foreach (var wcsSession in wcsSessionList) {
+                WCSSessionList.Remove(wcsSession);
+            }
+        }
+
+        /// <summary>
+        /// 鏍规嵁蹇冭烦浼氳瘽锛屾洿鏂颁細璇濅笌璁惧缂栧彿鐨勫搴斿叧绯�+        /// </summary>
+        /// <param name="sessionID">浼氳瘽ID</param>
+        /// <param name="deviceCode">璁惧缂栧彿</param>
+        public void UpdateDeviceCodeForSessionID(string sessionID, string deviceCode) {
+            WCSSession wcsSession = WCSSessionList.Find(p => p.SessionID == sessionID);
+            if (wcsSession != null) {
+                wcsSession.deviceCode = deviceCode;
+            }
+        }
+    }
+}
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMTCP/WCSServer.cs b/ams/Hanhe.iWCS.IndonesiaGLMTCP/WCSServer.cs
new file mode 100644
index 0000000..bcc1604
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMTCP/WCSServer.cs
@@ -0,0 +1,119 @@
+锘�+using Hanhe.iWCS.Business;
+using Hanhe.iWCS.Common;
+using Hanhe.iWCS.DeviceDriver;
+using Hanhe.iWCS.Factroy;
+using Hanhe.iWCS.Interface;
+using Hanhe.iWCS.Model;
+using SuperSocket.SocketBase;
+using SuperSocket.SocketBase.Protocol;
+using System;
+using System.Configuration;
+using System.Linq;
+
+namespace Hanhe.iWCS.IndonesiaGLMTCP
+{
+	public class WCSServer : AppServer<WCSSession, BinaryRequestInfo> {
+		/// <summary>
+		/// 鍏煎CommandLine  鍛戒护琛屾柟寮忕殑鍗忚 鍜�绾瓧绗︿覆鐨勫崗璁�閮芥槸浠�$涓虹粨鏉熺
+		/// </summary>
+		public WCSServer()
+			: base(new YourReceiveFilter()) {
+			//: base(new CommandLineReceiveFilterFactory("$$", Encoding.UTF8, new BasicRequestInfoParser(",", "&"))) {
+			//璁惧鍒濆鍖�+			HardwareAccessHelper.Instance.Initialize();
+			HardwareAccessHelper.Instance.ProgramDataInit();
+			HardwareAccessHelper.Instance.ArchivesInit();
+			SessionInstance.Instance.Initialize();
+			Console.WriteLine("amswcs service CopyRight haninfo.cc " + DateTime.Now.Year);
+			StockInstance.Instance.Initialize();
+
+            //娣诲姞寮�惎绾跨▼
+
+            //浠诲姟鎷︽埅
+            IEnentListen agvStateListen = DataAccess.CreateEnentListen();
+            agvStateListen.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 1027 });
+
+            //10001-璇诲彇鍖呰绾夸俊鍙�3妤煎寘瑁呭彇鏂�+            IEnentListen CheckPackingMachine = DataAccess.CreateEnentListen();
+            CheckPackingMachine.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10001 });
+
+            //10002-璇诲彇鍙犲寘鏈轰俊鍙凤紙涓夋ゼ鍙屽眰缂撳瓨鏋跺叆鍙犵洏鏈烘祦绋嬶級-3妤肩紦瀛樻灦鍏ュ彔鎵�+            IEnentListen CacheStackingMouth = DataAccess.CreateEnentListen();
+            CacheStackingMouth.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10002 });
+
+            //10003-璇诲寘瑁呮満淇″彿锛堝寘瑁呮満琛ョ┖鎵樻祦绋嬶級-3妤煎寘瑁呰ˉ绌�+            IEnentListen PickUpBlank = DataAccess.CreateEnentListen();
+            PickUpBlank.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10003 });
+
+            //10004-鎵撳寘绾跨┖鎵樿ˉ鏂欒姹傦紙3妤兼媶鐩樻満琛ョ┖鎵橈級-3妤兼媶鐩樿ˉ绌�+            IEnentListen CheckPackingLineEmpty = DataAccess.CreateEnentListen();
+            CheckPackingLineEmpty.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10004 });
+
+            //10005 - 涓夋ゼ鍙犵洏鏈鸿姹�- 3妤煎彔鐩樹笅绾�- 浜屾湡鏂板浠诲姟娴佺▼
+            IEnentListen CheckLineEmtpy = DataAccess.CreateEnentListen();
+            CheckLineEmtpy.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10005 });
+
+            //10006-鎵撳寘绾夸笅绾�婊℃墭鍏ュ簱
+            IEnentListen CheckPackingLineFull = DataAccess.CreateEnentListen();
+            CheckPackingLineFull.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10006 });
+
+            //10007-缂撳瓨浣嶅叆鍏ユ枡骞冲彴
+            IEnentListen InInlet = DataAccess.CreateEnentListen();
+            //InInlet.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10007 });
+
+            //鍏呯數浠诲姟
+            IEnentListen BatteryTime = DataAccess.CreateEnentListen();
+			//BatteryTime.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 2000 });
+
+			//鍐欑數閲忎换鍔�+			IEnentListen WirteBattery = DataAccess.CreateEnentListen();
+			//WirteBattery.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 2001 });
+
+			//浠诲姟鍔ㄤ綔绾跨▼
+			IEnentListen ActionControl = DataAccess.CreateEnentListen();
+			ActionControl.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10010 });
+
+			//璁惧鍚堟牸鐜�+			IEnentListen machine = DataAccess.CreateEnentListen();
+            //machine.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10011 });
+
+            //鑽嗛棬鍙樻洿
+            IEnentListen changeSignal = DataAccess.CreateEnentListen();
+            //changeSignal.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10012 });
+
+            //鍒犻櫎鍙樻洿涓棿琛ㄦ椂闂村ぇ浜庝袱鍛ㄧ殑鏁版嵁
+            IEnentListen deleteTableTask = DataAccess.CreateEnentListen();
+            //deleteTableTask.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10013 });
+
+            //ERP鍙樻洿鍔熻兘
+            IEnentListen SendERPTaskCompleteFunc = DataAccess.CreateEnentListen();
+            SendERPTaskCompleteFunc.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10014 });
+
+            //鐪嬫澘鍐呭鍐欏叆閫氶亾
+            IEnentListen writeQtt = DataAccess.CreateEnentListen();
+            //writeQtt.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10015 });
+
+            //灏嗙墿鏂欒〃鏁版嵁鎻掑叆涓棿琛�+            IEnentListen insertMidTable = DataAccess.CreateEnentListen();
+            insertMidTable.EnentSubscribe(new TN_I_TASK_DTL_ACTION() { CN_N_ACTION_CODE = 10017 });
+
+        }
+		public class YourReceiveFilter : IReceiveFilterFactory<BinaryRequestInfo> {
+			public IReceiveFilter<BinaryRequestInfo> CreateFilter(IAppServer appServer, IAppSession appSession, System.Net.IPEndPoint remoteEndPoint) {
+				return new MsgPackReceiveFilter();
+			}
+		}
+		public class MsgPackReceiveFilter : TerminatorReceiveFilter<BinaryRequestInfo> {
+			public MsgPackReceiveFilter()
+				: base(new byte[] { 36, 36 }) {
+			}
+			public override BinaryRequestInfo Filter(byte[] readBuffer, int offset, int length, bool toBeCopied, out int rest) {
+				return base.Filter(readBuffer, offset, length, toBeCopied, out rest);
+			}
+			protected override BinaryRequestInfo ProcessMatchedRequest(byte[] data, int offset, int length) {
+				return new BinaryRequestInfo("", data.Skip(offset).Take(length).ToArray());
+			}
+		}
+	}
+}
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMTCP/WCSSession.cs b/ams/Hanhe.iWCS.IndonesiaGLMTCP/WCSSession.cs
new file mode 100644
index 0000000..32e2a2e
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMTCP/WCSSession.cs
@@ -0,0 +1,69 @@
+锘縰sing Hanhe.iWCS.Common;
+using SuperSocket.SocketBase;
+using SuperSocket.SocketBase.Protocol;
+using System;
+using System.Linq;
+using System.Text;
+
+namespace Hanhe.iWCS.IndonesiaGLMTCP
+{
+    public class WCSSession : AppSession<WCSSession, BinaryRequestInfo>
+    {
+        /// <summary>
+        /// 璁惧缂栧彿
+        /// </summary>
+        public string deviceCode { get; set; }
+        protected override void OnSessionStarted()
+        {
+            SessionInstance.Instance.AddSession(this.AppServer.GetSessionByID(this.SessionID));
+            string msg = DateTime.Now.ToString() + "-a new Session connectioned,new Client Ip=" + this.RemoteEndPoint.Address + " and Port=" + this.RemoteEndPoint.Port + "";
+            Console.WriteLine(msg);
+        }
+
+        /// <summary>
+        /// PLC淇″彿鎸囦护
+        /// </summary>
+        /// <param name="requestInfo"></param>
+        protected override void HandleUnknownRequest(BinaryRequestInfo requestInfo)
+        {
+            var hex = BitConverter.ToString(requestInfo.Body, 0).Replace("-", string.Empty).ToLower();
+            WCSSession currSession = this.AppServer.GetSessionByID(this.SessionID);
+            var ip = currSession.RemoteEndPoint.Address.ToString();
+            var port = currSession.RemoteEndPoint.Port;
+            //Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "--receive:" + hex + "--length:" + hex.Length);
+            SessionInstance.Instance._IProtocolAnalysis.StringRequestInfo(hex, ip, port, currSession.SessionID);
+            SessionInstance.Instance._IProtocolAnalysis.StringRequestInfo(hexToStr(hex), ip, port);
+
+            var res = requestInfo.Body.ToList();res.Add(36);res.Add(36);
+            SessionInstance.Instance.PLCSend(ip, port, res.ToArray());
+
+        }
+        private static string hexToStr(string hexString)
+        {
+            hexString = hexString.Replace(" ", "");
+            if ((hexString.Length % 2) != 0)
+                hexString += " ";
+            byte[] returnBytes = new byte[hexString.Length / 2];
+            for (int i = 0; i < returnBytes.Length; i++)
+                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
+
+            return Encoding.ASCII.GetString(returnBytes);
+        }
+        protected override void HandleException(Exception e)
+        {
+            this.Send("Application error: {0}", e.Message);
+        }
+
+        protected override void OnSessionClosed(CloseReason reason)
+        {
+            //add you logics which will be executed after the session is closed
+            SessionInstance.Instance.SessionRemove(this.SessionID);
+            base.OnSessionClosed(reason);
+            string msg = DateTime.Now.ToString() + "-a connection Client Ip=" + this.RemoteEndPoint.Address + " and Port=" + this.RemoteEndPoint.Port + " is SocketClosed";
+            Console.WriteLine(msg);
+            CMMLog.Debug(msg);
+            //ProtocolAnalysis.Instance._Logger.DeleteOnline(this.RemoteEndPoint.Address.ToString(), this.RemoteEndPoint.Port);
+
+        }
+    }
+}
diff --git a/ams/Hanhe.iWCS.IndonesiaGLMTCP/XmlHelper.cs b/ams/Hanhe.iWCS.IndonesiaGLMTCP/XmlHelper.cs
new file mode 100644
index 0000000..0f9db44
--- /dev/null
+++ b/ams/Hanhe.iWCS.IndonesiaGLMTCP/XmlHelper.cs
@@ -0,0 +1,39 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml;
+
+namespace Hanhe.iWCS.JingmenGEMTwoProtocol
+{
+    public class XmlHelper
+    {
+        public static string xmlPath = "";
+        public static string xmlFileName = "settings.xml";
+        public static XmlDocument xmldoc = new XmlDocument();
+        static XmlHelper()
+        {
+            xmlPath = System.IO.Directory.GetCurrentDirectory();
+            xmlPath += "/" + xmlFileName;
+            xmldoc.Load(xmlPath);
+        }
+
+		public static string GetElementValue(string name) {
+			string result = string.Empty;
+			XmlNode xn = xmldoc.SelectSingleNode("Custom");
+			XmlNodeList xnl = xn.ChildNodes;
+			foreach (object node in xnl) {
+				XmlElement xe = node as XmlElement;
+				if (xe == null)
+					continue;
+
+				if (xe.Name == name) {
+					result = xe.InnerText;
+					break;
+				}
+			}
+			return result;
+		}
+    }
+}

--
Gitblit v1.9.1