From cdf20a4525a2ff9f6fe2c1e9b69fa2854c5848fd Mon Sep 17 00:00:00 2001
From: zxx <Zxx@HanInfo>
Date: 星期二, 27 五月 2025 17:17:03 +0800
Subject: [PATCH] 巨石

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/ApiHelper.cs         |   80 +-
 HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/core/WMSCore.cs          |  170 +++++-
 HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/util/Settings.cs         |    1 
 HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/WmsController.cs     |   53 ++
 HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/CameraMonitor.cs  |    4 
 HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/TN_ISUSING.cs     |   15 
 HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/PlcDeviceTable.cs |   86 ++-
 HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/wms/ContainerHelper.cs   |   72 +-
 HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/MoboxController.cs   |    8 
 HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/process/DeviceProcess.cs |  102 ++--
 HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/HH.WCS.JuShi.csproj      |    1 
 HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/process/TaskProcess.cs   |  438 +++++++++++------
 HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/config/config.json       |   34 +
 HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/device/S7Helper.cs       |  280 ++++++++--
 HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/Program.cs               |    4 
 HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/device/TcpServer.cs      |   30 
 HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/CntrItemDetail.cs |   10 
 17 files changed, 947 insertions(+), 441 deletions(-)

diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/HH.WCS.JuShi.csproj b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/HH.WCS.JuShi.csproj
index f1a3a25..0b1d409 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/HH.WCS.JuShi.csproj
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/HH.WCS.JuShi.csproj
@@ -217,6 +217,7 @@
     <Compile Include="dispatch\HanAo.cs" />
     <Compile Include="dispatch\NDC.cs" />
     <Compile Include="core\Monitor.cs" />
+    <Compile Include="models\TN_ISUSING.cs" />
     <Compile Include="models\BaseModel.cs" />
     <Compile Include="models\Area.cs" />
     <Compile Include="models\SafeInteraction.cs" />
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/Program.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/Program.cs
index e559db8..262df7d 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/Program.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/Program.cs
@@ -78,10 +78,12 @@
                 tasks.Add(GetTask(WCSCore.Dispatch));
                 //鎽勫儚澶寸洃娴嬫弧鐘舵�鎵樼洏
                 tasks.Add(GetTask(WMSCore.MonitorFullStatus));
+                //鐩戞祴绌烘墭缂撳瓨鍖烘湁娌℃湁浜哄伐缁戝畾
+                tasks.Add(GetTask(WMSCore.AutoSendMachine));
                 ////甯歌閫佹绌轰簡鑷姩浠庨�妫�紦瀛樺尯鍙栦竴涓�杩囧幓
                 tasks.Add(GetTask(WMSCore.AutoReplenish));
                 //S7閫氳
-                //tasks.Add(GetTask(S7Helper.ReadSsxPLc));
+                tasks.Add(GetTask(S7Helper.ReadSsxPLc));
 
                 Task.WaitAll(tasks.ToArray());
             }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/ApiHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/ApiHelper.cs
index 0938cb8..6b8cd21 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/ApiHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/ApiHelper.cs
@@ -290,50 +290,50 @@
             return result;
         }
 
-        internal static SimpleResult PalletSorting1(PalletSorting1 model)
-        {
-            var result = new SimpleResult();
-            //鏍¢獙鍏ュ簱鍗曟暟閲忥紝涓嶅彲浠ヨ秴锛屾垚鍔熷悗鎻掑叆鎵樼洏鐗╂枡琛紝鏇存柊鍏ュ簱鍗曠疮璁℃暟閲�-            //涔熷彲浠ョ洿鎺ua鏌ヨ鍏ュ簱鍗曟暟閲忥紝鍋氭牎楠�-            //鍏堢敤bar_code璇诲瓨鍌ㄨ繃绋嬭幏鍙栦俊鎭�-            var codeInfo = GetCodeInfo(model.bar_code, model.org);
-            var info = WMSHelper.GetPutawayOrderDetail(model.bar_code);
-            if (info != null)
-            {
-                if (info.F_QTY - info.F_ACC_B_QTY >= model.qty)
-                {
-                    // 鎻掑叆鍒版墭鐩樻槑缁嗚〃
+        //internal static SimpleResult PalletSorting1(PalletSorting1 model)
+        //{
+        //    var result = new SimpleResult();
+        //    //鏍¢獙鍏ュ簱鍗曟暟閲忥紝涓嶅彲浠ヨ秴锛屾垚鍔熷悗鎻掑叆鎵樼洏鐗╂枡琛紝鏇存柊鍏ュ簱鍗曠疮璁℃暟閲�+        //    //涔熷彲浠ョ洿鎺ua鏌ヨ鍏ュ簱鍗曟暟閲忥紝鍋氭牎楠�+        //    //鍏堢敤bar_code璇诲瓨鍌ㄨ繃绋嬭幏鍙栦俊鎭�+        //    var codeInfo = GetCodeInfo(model.bar_code, model.org);
+        //    var info = WMSHelper.GetPutawayOrderDetail(model.bar_code);
+        //    if (info != null)
+        //    {
+        //        if (info.F_QTY - info.F_ACC_B_QTY >= model.qty)
+        //        {
+        //            // 鎻掑叆鍒版墭鐩樻槑缁嗚〃
 
-                    var cntr = ContainerHelper.GetCntr(model.cntr_code, true);
-                    if (cntr != null)
-                    {
-                        ContainerHelper.BindCntrItem(cntr, model.bar_code, info.S_BATCH_NO, model.qty, info.S_BATCH_NO);
-                        //鏇存柊鍏ュ簱鍗曠疮璁$粦瀹氭暟閲�-                        info.F_ACC_B_QTY += model.qty;
-                        WMSHelper.UpdatePutawayOrderDetailQty(info);
-                    }
-                    else
-                    {
-                        result.resultCode = 2;
-                        result.resultMsg = "鑾峰彇鎵樼洏淇℃伅澶辫触";
-                    }
+        //            var cntr = ContainerHelper.GetCntr(model.cntr_code, true);
+        //            if (cntr != null)
+        //            {
+        //                ContainerHelper.BindCntrItem(cntr, model.bar_code, info.S_BATCH_NO, model.qty, info.S_BATCH_NO);
+        //                //鏇存柊鍏ュ簱鍗曠疮璁$粦瀹氭暟閲�+        //                info.F_ACC_B_QTY += model.qty;
+        //                WMSHelper.UpdatePutawayOrderDetailQty(info);
+        //            }
+        //            else
+        //            {
+        //                result.resultCode = 2;
+        //                result.resultMsg = "鑾峰彇鎵樼洏淇℃伅澶辫触";
+        //            }
 
 
-                }
-                else
-                {
-                    result.resultCode = 1;
-                    result.resultMsg = "绱鐮佺洏鏁伴噺瓒呭嚭鍏ュ簱鍗曟暟閲�;
-                }
-            }
-            else
-            {
-                result.resultCode = 3;
-                result.resultMsg = $"鏈幏鍙栧埌璇ョ墿鏂檣model.bar_code}鐨勫叆搴撳崟鏄庣粏淇℃伅";
-            }
+        //        }
+        //        else
+        //        {
+        //            result.resultCode = 1;
+        //            result.resultMsg = "绱鐮佺洏鏁伴噺瓒呭嚭鍏ュ簱鍗曟暟閲�;
+        //        }
+        //    }
+        //    else
+        //    {
+        //        result.resultCode = 3;
+        //        result.resultMsg = $"鏈幏鍙栧埌璇ョ墿鏂檣model.bar_code}鐨勫叆搴撳崟鏄庣粏淇℃伅";
+        //    }
 
-            return result;
-        }
+        //    return result;
+        //}
 
 
         public class AddTaskModel
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/MoboxController.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/MoboxController.cs
index 57351ce..5664667 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/MoboxController.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/MoboxController.cs
@@ -83,10 +83,10 @@
         /// </summary>
         /// <param name="model"></param>
         /// <returns></returns>
-        [HttpPost]
-        public SimpleResult PalletSorting1(PalletSorting1 model) {
-            return ApiHelper.PalletSorting1(model);
-        }
+        //[HttpPost]
+        //public SimpleResult PalletSorting1(PalletSorting1 model) {
+        //    return ApiHelper.PalletSorting1(model);
+        //}
         /// <summary>
         /// pda鍏ュ簱鐢宠
         /// </summary>
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/WmsController.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/WmsController.cs
index 8fbb40a..2be43e3 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/WmsController.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/WmsController.cs
@@ -1,6 +1,7 @@
 锘� using HH.WCS.JuShi;
 using HH.WCS.JuShi.api;
+using HH.WCS.JuShi.device;
 using HH.WCS.JuShi.process;
 using Newtonsoft.Json;
 using System.Collections.Generic;
@@ -86,7 +87,19 @@
             LogHelper.Info("BindMaterial 杩斿洖锛� + JsonConvert.SerializeObject(res), "WMSAPI");
             return res;
         }
-
+        /// <summary>
+        /// 鏁存帓缁戝畾
+        /// </summary>
+        /// <param name="bondLoc"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public Results MultBindMaterial(string bondLoc)
+        {
+            LogHelper.Info("MultBindMaterial 鍙傛暟锛� + JsonConvert.SerializeObject(bondLoc), "WMSAPI");
+            var res = TaskProcess.multBindMaterial(bondLoc);
+            LogHelper.Info("MultBindMaterial 杩斿洖锛� + JsonConvert.SerializeObject(res), "WMSAPI");
+            return res;
+        }
         /// <summary>
         /// 鎽勫儚澶寸洃娴�         /// </summary>
@@ -114,6 +127,44 @@
             return res;
         }
 
+        /// <summary>
+        /// 鏈嶅姟寮�叧鎸夐挳
+        /// </summary>
+        /// <param name="isusing.S_STATUS">鏈嶅姟鐘舵�</param>
+        /// <param name="isusing.S_TYPE">鏈嶅姟绫诲瀷</param>
+        /// <returns></returns>
+        [HttpPost]
+        public Results switchButton(Isusing isusing)
+        {
+            LogHelper.Info("switchButton 鍙傛暟锛� + JsonConvert.SerializeObject(isusing), "WMSAPI");
+            var res = TaskProcess.switchButton(isusing);
+            LogHelper.Info("switchButton 杩斿洖锛� + JsonConvert.SerializeObject(res), "WMSAPI");
+            return res;
+        }
 
+        /// <summary>
+        /// tcp鍙戦�淇″彿 娴嬭瘯鐢�+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        public Results tcpSend(string str)
+        {
+            LogHelper.Info("tcpSend 鍙傛暟锛� + str, "WMSAPI");
+            var res = TaskProcess.tcpSend(str);
+            LogHelper.Info("tcpSend 杩斿洖锛� + str, "WMSAPI");
+            return res;
+        }
+        /// <summary>
+        /// S7鍐欏叆淇″彿 娴嬭瘯鐢�+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        public Results S7Write(int offsetAddr)
+        {
+            LogHelper.Info("S7Write 鍙傛暟锛� + offsetAddr, "WMSAPI");
+            var res = S7Helper.S7Write(offsetAddr);
+            LogHelper.Info("S7Write 杩斿洖锛� + offsetAddr, "WMSAPI");
+            return res;
+        }
     }
 }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/config/config.json b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/config/config.json
index 4d8fa09..e6a1fb8 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/config/config.json
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/config/config.json
@@ -28,7 +28,7 @@
       "areaCode": "JJSJQ"
     },
     {
-      "areaName": "RGV搴撳尯",
+      "areaName": "绔嬪簱鍏ュ簱鍖�,
       "areaCode": "RGV"
     },
     {
@@ -191,52 +191,74 @@
       "enable": 1
     }
   ],
-  //瀹夊叏闂�+  //瀹夊叏浜や簰
   "SafeInteraction": [
     {
-      "pointCode": "RGV1",
+      "pointCode": "RGV01",
+      "code": 1,
       "ip": "192.168.1.133",
       "type": "RGV",
       "location": "RGV01"
     },
     {
-      "pointCode": "RGV2",
+      "pointCode": "RGV02",
+      "code": 2,
       "ip": "192.168",
       "type": "RGV",
       "location": "RGV02"
     },
     {
-      "pointCode": "RGV3",
+      "pointCode": "RGV03",
+      "code": 3,
       "ip": "192.168",
       "type": "RGV",
       "location": "RGV03"
     },
     {
-      "pointCode": "RGV4",
+      "pointCode": "RGV04",
+      "code": 4,
       "ip": "192.168",
       "type": "RGV",
       "location": "RGV04"
     },
     {
+      "pointCode": "RGV05",
+      "code": 5,
+      "ip": "192.168",
+      "type": "RGV",
+      "location": "RGV05"
+    },
+    {
+      "pointCode": "RGV06",
+      "code": 6,
+      "ip": "192.168",
+      "type": "RGV",
+      "location": "RGV06"
+    },
+    {
       "pointCode": "鎷嗘墭鏈�鍏ュ彛",
+      "code": 7,
       "ip": "192.168",
       "type": "CTJ",
       "location": "CPJ01-R"
     },
     {
       "pointCode": "鎷嗘墭鏈�鍑哄彛",
+      "code": 8,
       "ip": "192.168",
       "type": "CTJ",
       "location": "CPJ01-C"
     },
     {
       "pointCode": "鎷嗘墭鏈�鍏ュ彛",
+      "code": 9,
       "ip": "192.168",
       "type": "CTJ",
       "location": "CPJ02-R"
     },
     {
       "pointCode": "鎷嗘墭鏈�鍑哄彛",
+      "code": 10,
       "ip": "192.168",
       "type": "CTJ",
       "location": "CPJ02-C"
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/core/WMSCore.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/core/WMSCore.cs
index 562e821..28d7508 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/core/WMSCore.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/core/WMSCore.cs
@@ -1,4 +1,5 @@
 锘縰sing HH.WCS.JuShi.api;
+using HH.WCS.JuShi.device;
 using HH.WCS.JuShi.process;
 using HH.WCS.JuShi.util;
 using HH.WCS.JuShi.wms;
@@ -172,49 +173,56 @@
 
         //    }
         //}
-
+        
         //鐩戞祴鎽勫儚澶村璐т綅(閫佹鍏ュ簱鍖�绌烘弧鐘舵� 婊$殑灏卞弶鍒扮珛搴�         public static void MonitorFullStatus()
         {
             //bool result = false;
             //鎵鹃�妫�叆搴撳尯婊℃墭鐩樼殑璐т綅
-            var db = new SqlHelper<Location>().GetInstance();
+            var db = new SqlHelper<object>().GetInstance();
             try
             {
-				var reservoirs = Settings.ReservoirAreas.Where(s => s.areaName == "閫佹鍏ュ簱鍖�).FirstOrDefault();
-				var reservoirs2 = Settings.ReservoirAreas.Where(s => s.areaName == "RGV搴撳尯").FirstOrDefault();
-				//涓夎〃鑱旀煡鏌ュ嚭鎵樼洏婊$殑 鎸夊垱寤烘椂闂撮『搴�-				var locCntrs = db.Queryable<LocCntrRel>().LeftJoin<Container>((p, c) => p.S_CNTR_CODE == c.S_CODE)
-				.Where((p, c) => c.C_FULL == "2")
-				.OrderBy((p, c) => p.T_CREATE)
-				.Select((p, c) => p.S_LOC_CODE) // 閫夋嫨鎵樼洏鐗╂枡琛ㄧ殑鏁版嵁
-				.ToList();
+                var reservoirs = Settings.ReservoirAreas.Where(s => s.areaName == "閫佹鍏ュ簱鍖�).FirstOrDefault();
+                var reservoirs2 = Settings.ReservoirAreas.Where(s => s.areaName == "绔嬪簱鍏ュ簱鍖�).FirstOrDefault();
+                //涓夎〃鑱旀煡鏌ュ嚭鎵樼洏婊$殑 鎸夊垱寤烘椂闂撮『搴�+                var locCntrs = db.Queryable<LocCntrRel>().LeftJoin<Container>((p, c) => p.S_CNTR_CODE == c.S_CODE)
+                .Where((p, c) => c.C_FULL == "2")
+                .OrderBy((p, c) => p.T_CREATE)
+                .Select((p, c) => p.S_LOC_CODE) // 閫夋嫨鎵樼洏鐗╂枡琛ㄧ殑鏁版嵁
+                .ToList();
 
-				//鎵鹃�妫�叆搴撳尯鍐呮墭鐩樻弧浜嗙殑璐т綅
-				var locList = db.Queryable<Location>()
-					.Where(p => p.S_AREA_CODE == reservoirs.areaCode && p.N_LOCK_STATE == 0)
-					.Where(s => locCntrs.Contains(s.S_CODE.Trim()))
-					.ToList();
+                //鎵鹃�妫�叆搴撳尯鍐呮墭鐩樻弧浜嗙殑璐т綅
+                var locList = db.Queryable<Location>()
+                    .Where(p => p.S_AREA_CODE == reservoirs.areaCode && p.N_LOCK_STATE == 0)
+                    .Where(s => locCntrs.Contains(s.S_CODE.Trim()))
+                    .ToList();
 
-				if (locList.Any())
-				{
-					//寤轰换鍔�-					var startLoc = locList.FirstOrDefault();
-					var endLoc = TaskProcess.InWorkTransport(reservoirs2.areaCode);
+                if (locList.Any())
+                {
+                    LogHelper.Info($"浠诲姟鎽勫儚澶寸洃娴嬬┖婊$姸鎬佹壘鍒拌揣浣峽JsonConvert.SerializeObject(locList)}");
+                    //寤轰换鍔�+                    var startLoc = locList.FirstOrDefault();
+                    var endLoc = TaskProcess.InWorkTransport(reservoirs2.areaCode);
+                    LogHelper.Info($"浠诲姟鎽勫儚澶寸洃娴嬫壘鍒扮粓鐐硅揣浣嶏細{JsonConvert.SerializeObject(endLoc)}");
+                    if (endLoc!=null)
+                    {
+                        var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startLoc.S_CODE).First();
+                        LogHelper.Info($"浠诲姟鎽勫儚澶寸洃娴嬫壘鍒版墭鐩橈細{JsonConvert.SerializeObject(locCntrRel)}");
 
-					var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == endLoc.S_CODE).First();
-					TaskProcess.CreateTransport(startLoc.S_CODE, endLoc.S_CODE, "鎽勫儚澶寸洃娴�, locCntrRel.S_CNTR_CODE, 1, 1);
+                        TaskProcess.CreateTransport(startLoc.S_CODE, endLoc.S_CODE, "鎽勫儚澶寸洃娴�, locCntrRel.S_CNTR_CODE, 1, 1);
 
-				}
-			}
+                    }
+
+                }
+            }
             catch (Exception ex)
-			{
-				Console.WriteLine("AutoReplenish:" + ex.Message + ex.StackTrace);
-				LogHelper.Error("AutoReplenish:" + ex.Message, ex);
-				throw;
-			}
+            {
+                Console.WriteLine("MonitorFullStatus:" + ex.Message + ex.StackTrace);
+                LogHelper.Error("MonitorFullStatus:" + ex.Message, ex);
+                throw;
+            }
 
-            
+
             //return result;
 
 
@@ -222,7 +230,12 @@
         //甯歌閫佹绌轰簡鑷姩浠庨�妫�紦瀛樺尯鍙栦竴涓�杩囧幓
         public static void AutoReplenish()
         {
-            var db = new SqlHelper<Location>().GetInstance();
+            var db = new SqlHelper<object>().GetInstance();
+            var isusinglist = db.Queryable<Isusing>().Where(a => a.S_TYPE == "鑷姩琛ヨ揣").First();
+            if (isusinglist.S_STATUS == 0)
+            {
+                return;
+            }
             try
             {
                 var cgreservoirs = Settings.ReservoirAreas.Where(s => s.areaName == "甯歌閫佹鍖�).FirstOrDefault();
@@ -233,7 +246,8 @@
                     var hcreservoirs = Settings.ReservoirAreas.Where(s => s.areaName == "閫佹缂撳瓨鍖�).FirstOrDefault();
                     //鎵鹃�妫�紦瀛樺尯鏈夎揣鐨勮揣浣�                     var startloc = TaskProcess.OutWorkTransport(hcreservoirs.areaCode);
-                    if (startloc!=null)
+                    //LogHelper.Info($"AutoReplenish 鑷姩琛ヨ揣 璧风偣璐т綅{JsonConvert.SerializeObject(startloc)}");
+                    if (startloc != null)
                     {
                         //鍒涘缓閫佹浠诲姟
                         var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startloc.S_CODE).First();
@@ -245,7 +259,96 @@
                         }
                     }
 
-				}
+                }
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine("AutoReplenish:" + ex.Message + ex.StackTrace);
+                LogHelper.Error("AutoReplenish:" + ex.Message, ex);
+                throw;
+            }
+
+        }
+        //绌烘墭缂撳瓨鍖烘湁缁戝畾鐨勬墭鐩樺氨閫佸埌鎷嗘墭鏈�+        public static void AutoSendMachine()
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            var isusinglist = db.Queryable<Isusing>().Where(a => a.S_TYPE == "鑷姩閫佹墭").First();
+            if (isusinglist.S_STATUS == 0)
+            {
+                return;
+            }
+            try
+            {
+                var reservoirs1 = Settings.ReservoirAreas.Where(s => s.areaName == "3min绌烘墭鍖�).FirstOrDefault();
+                var reservoirs2 = Settings.ReservoirAreas.Where(s => s.areaName == "6min绌烘墭鍖�).FirstOrDefault();
+                var linePlcInfo1 = Settings.linePlcInfos.Where(s => s.deviceNo == "1").FirstOrDefault();
+                var linePlcInfo2 = Settings.linePlcInfos.Where(s => s.deviceNo == "2").FirstOrDefault();
+                //鎵惧埌绌烘墭缂撳瓨鍖虹殑鎵�湁璐т綅缂栧彿
+                var locList = db.Queryable<Location>()
+                    .Where(s => s.S_AREA_CODE == reservoirs1.areaCode || s.S_AREA_CODE == reservoirs2.areaCode)
+                    .Where(s => s.N_LOCK_STATE == 0)
+                    .OrderByDescending(s => s.N_ROW).OrderByDescending(s => s.N_COL).OrderBy(s => s.N_LAYER)
+                    .Select(s => s.S_CODE)
+                    .ToList();
+
+                //鎵惧埌缁戜簡鎵樼洏鐨勮揣浣嶅彿
+                var locCntrs = db.Queryable<LocCntrRel>()
+                    .Where(s => locList.Contains(s.S_LOC_CODE.Trim()))
+                    .Select(s => s.S_LOC_CODE)
+                    .ToList();
+                if (locCntrs.Any())
+                {
+                    //LogHelper.Info($"绌烘墭缂撳瓨鍖烘湁缁戝畾璐т綅锛歿JsonConvert.SerializeObject(locCntrs)}");
+                    //var loccode = locCntrs.First();
+                    foreach (var loccode in locCntrs)
+                    {
+                        var loc = db.Queryable<Location>().Where(s => s.S_CODE == loccode).First();
+                        //鍒ゆ柇閫佸線3瀵歌繕鏄�瀵告媶鎵樻満
+                        string endLoc = null;
+                        string dev = null;
+                        if (loc.S_AREA_CODE == reservoirs1.areaCode)
+                        {
+                            endLoc = linePlcInfo1.inLoca;
+                            dev = "1";
+                        }
+                        else if (loc.S_AREA_CODE == reservoirs2.areaCode)
+                        {
+                            endLoc = linePlcInfo2.inLoca;
+                            dev = "2";
+                        }
+                        var endLocation = db.Queryable<Location>().Where(s => s.S_CODE == endLoc).First();
+                        if (endLocation == null || endLocation.N_LOCK_STATE != 0)
+                        {
+                            //LogHelper.Info($"鎷嗘墭鏈鸿揣浣峽endLoc}涓嶅瓨鍦ㄦ垨宸茶閿�);
+                            return;
+                        }
+                        var plcDeviceTable = S7Helper.plcDeviceTables;
+                        LogHelper.Info($"鑷姩閫佹墭 鎷嗘墭鏈簕dev}:{plcDeviceTable.requestPut1}");
+                        if ((plcDeviceTable.requestPut1 && dev == "1") ||
+                            (plcDeviceTable.requestPut2 && dev == "2"))
+                        {
+                            var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == loccode).First();
+
+                            LogHelper.Info($"鍒涘缓浠诲姟 璧风偣:{loccode}缁堢偣:{endLoc}");
+                            var res = TaskProcess.CreateTransport(loccode, endLoc, "閫佹墭", locCntrRel.S_CNTR_CODE, 1, 1);
+                            if (res)
+                            {
+                                LogHelper.Info($"璧风偣:{loccode}缁堢偣:{endLoc}浠诲姟鍒涘缓鎴愬姛");
+                            }
+                            else
+                            {
+                                LogHelper.Info($"璧风偣:{loccode}缁堢偣:{endLoc}浠诲姟鍒涘缓澶辫触");
+                            }
+                        }
+                        else
+                        {
+                            LogHelper.Info($"鎷嗘墭鏈簕endLoc}涓嶅厑璁告斁妗�);
+                        }
+                    }
+
+                }
+
             }
             catch (Exception ex)
             {
@@ -257,7 +360,6 @@
 
 
         }
-
 
 
     }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/device/S7Helper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/device/S7Helper.cs
index d72dc35..30eb63b 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/device/S7Helper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/device/S7Helper.cs
@@ -11,6 +11,7 @@
 using System.Data.SqlTypes;
 using System.Linq;
 using System.Text;
+using System.Threading;
 using System.Threading.Tasks;
 using System.Web.Services.Description;
 using static HH.WCS.JuShi.util.Settings;
@@ -164,6 +165,9 @@
             var result = false;
             try
             {
+                var linkplc = Settings.SafeInteractions.First();
+                var plc = new Plc(CpuType.S71200, linkplc.ip, 0, 1);
+                Link(plc);
                 if (plc.IsConnected)
                 {
                     plc.Write(DataType.DataBlock, db, byteAddr, data);
@@ -285,76 +289,181 @@
         }
 
 
-        public static List<PlcDeviceTable> plcDeviceTables = new List<PlcDeviceTable>();
+        public static PlcDeviceTable plcDeviceTables = new PlcDeviceTable();
         /// <summary>
         /// 鑾峰彇杈撻�绾挎暟鎹�         /// </summary>
         public static void ReadSsxPLc()
         {
-            //#region 娴嬭瘯鍐欏叆鏁版嵁
-            //List<S7Model> s7Models = new List<S7Model>();
-            //s7Models.Add(new S7Model() { addr = 0, value = "1", type = "Int", length = 2 });
-            //s7Models.Add(new S7Model() { addr = 2, value = "2", type = "Int", length = 2 });
-            //s7Models.Add(new S7Model() { addr = 4, value = "4", type = "Int", length = 2 });
-            //s7Models.Add(new S7Model() { addr = 18, value = "TP24121108", type = "String", length = 20 });
-            //var plcInfo = Settings.linePlcInfo.Where(a => (a.deviceNo == "2") && a.enable == 1).FirstOrDefault();
-            //Write(s7Models, 100, plcInfo);
-            //#endregion
-
             var db = new SqlHelper<WCSTask>().GetInstance();
-            //涓や釜鎷嗘墭鏈�-            var linkplcs = Settings.linePlcInfos.FindAll(a => a.enable == 1).ToList();
-            foreach (var linkplc in linkplcs){
-                //鑾峰彇璁惧閰嶇疆鏂囦欢
-                var deviceInfos = Settings.ConveyorLinesInfos.Where(a => a.enable == 1 &&a.deviceNo== linkplc.deviceNo).ToList();
-                if (deviceInfos.Count > 0)
+            try
+            {
+                var linkplc = Settings.linePlcInfos.Find(a => a.enable == 1);
+                var plc = new Plc(CpuType.S71500, linkplc.address, 0, 1);
+                Link(plc);
+                //鎷嗘墭鏈�
+                //object rawValue = plc.Read(DataType.DataBlock, 8, 230, VarType.Byte, 1);
+                //LogHelper.Info($"Raw value: {rawValue} (Type: {rawValue?.GetType()})");
+                // 鍏堣鍙栨暣涓瓧鑺�+                byte data = (byte)plc.Read(DataType.DataBlock, 8, 230, VarType.Byte, 1);
+                // 鐒跺悗鎻愬彇鍚勪釜浣�+                bool requestPut1 = (data & 0x01) != 0;  // 230.0   1001
+                bool requestTake1 = (data & 0x02) != 0;   // 230.1    1003
+                bool requestPut2 = (data & 0x04) != 0;  // 230.2     1004
+                bool requestTake2 = (data & 0x08) != 0;   // 230.3    1006
+                LogHelper.Info($"鎷嗘墭鏈烘帴鏀朵俊鍙�===={requestPut1}锛寋requestTake1}锛寋requestPut2}锛寋requestTake2}");
+
+                //RGV
+                // RGV鍏佽鍗歌揣鐘舵�璇诲彇 (浠嶥B51璇诲彇)
+                int rgv1AllowUnload = (int)plc.Read(DataType.DataBlock, 51, 0, VarType.Int, 1);
+                int rgv2AllowUnload = (int)plc.Read(DataType.DataBlock, 51, 2, VarType.Int, 1);
+                int rgv3AllowUnload = (int)plc.Read(DataType.DataBlock, 51, 4, VarType.Int, 1);
+                int rgv4AllowUnload = (int)plc.Read(DataType.DataBlock, 51, 6, VarType.Int, 1);
+                int rgv5AllowUnload = (int)plc.Read(DataType.DataBlock, 51, 8, VarType.Int, 1);
+                int rgv6AllowUnload = (int)plc.Read(DataType.DataBlock, 51, 10, VarType.Int, 1);
+                LogHelper.Info($"RGV鎺ユ敹淇″彿=== 1={rgv1AllowUnload}, 2={rgv2AllowUnload}, 3={rgv3AllowUnload}, 4={rgv4AllowUnload}, 5={rgv5AllowUnload}, 6={rgv6AllowUnload}");
+
+                //瀛樺埌缂撳瓨
+                if (plcDeviceTables != null)
                 {
-                    int slen =int.Parse(deviceInfos.Min(a => a.readAddr).ToString());
-                    int elen = int.Parse(deviceInfos.Max(a => a.readAddr).ToString());
-
-                    //璇诲彇杈撻�绾挎暣涓亸绉婚噺鐨刡yte鏁扮粍 鏀惧唴瀛橀噷涓�捣瑙f瀽锛岄槻姝㈣繃搴﹁鍙�-                    //PLCRead(linkplc.address, 8, slen, elen + 18, out Ssxbytes);
-
-                    var plc = new Plc(CpuType.S71500, linkplc.address, 0, 1);
-                    Link(plc);
-                    //涓�釜鎷嗘墭鏈轰袱涓嚎浣�-                    foreach (var device in deviceInfos)
+                    plcDeviceTables.requestTake1 = requestTake1;
+                    plcDeviceTables.requestPut1 = requestPut1;
+                    plcDeviceTables.requestTake2 = requestTake2;
+                    plcDeviceTables.requestPut2 = requestPut2;
+                    plcDeviceTables.RGVAllowUnload = new Dictionary<int, int>
                     {
-                        //int workMode = int.Parse(GetValue(int.Parse(device.readAddr.ToString()), VarType.Int, Ssxbytes));        //宸ヤ綔妯″紡
-                        //int lightAction = int.Parse(GetValue(int.Parse((device.readAddr + 2).ToString()), VarType.Int, Ssxbytes));     //鏄惁鏈夎揣锛屽厜鐢典俊鍙�-
-                        int workMode = (short)plc.Read(DataType.DataBlock, 8, int.Parse(device.readAddr.ToString()), VarType.Int, 1, 0);
-                        int lightAction = (short)plc.Read(DataType.DataBlock, 8, int.Parse((device.readAddr + 2).ToString()), VarType.Int, 1, 0);
-                        var requestTake = plc.Read("DB8.DBX"+ device.readAddr+16.0);//杈撻�绾胯姹傚彇妗�-                        var requestPut = plc.Read("DB8.DBX"+ device.readAddr + 16.1);//杈撻�绾垮厑璁告斁妗�-                        //瀛樺埌缂撳瓨
-                        var task = plcDeviceTables.Find(a => a.DeviceNo == device.code);
-                        if (task != null)
-                        {
-                            task.DeviceNo = device.code;
-                            task.workMode = workMode;
-                            task.lightAction = lightAction;
-                            task.requestTake =bool.Parse(requestTake.ToString());
-                            task.requestPut = bool.Parse(requestPut.ToString());
-                        }
-                        else
-                        {
-                            var plcDeviceTable = new PlcDeviceTable();
-                            plcDeviceTable.DeviceNo = device.code;
-                            plcDeviceTable.workMode = workMode;
-                            plcDeviceTable.lightAction = lightAction;
-                            plcDeviceTable.requestTake = bool.Parse(requestTake.ToString());
-                            plcDeviceTable.requestPut = bool.Parse(requestPut.ToString());
-                            plcDeviceTables.Add(plcDeviceTable);
-                        }
-
-                    }
+                        {1, rgv1AllowUnload},
+                        {2, rgv2AllowUnload},
+                        {3, rgv3AllowUnload},
+                        {4, rgv4AllowUnload},
+                        {5, rgv5AllowUnload},
+                        {6, rgv6AllowUnload}
+                    };
+                    LogHelper.Info($"S7鍗忚绗竴娆¤鍙栧弬鏁�{JsonConvert.SerializeObject(plcDeviceTables)}");
                 }
+                else
+                {
+                    var plcDeviceTable = new PlcDeviceTable();
+                    plcDeviceTable.requestTake1 = requestTake1;
+                    plcDeviceTable.requestPut1 = requestPut1;
+                    plcDeviceTable.requestTake2 = requestTake2;
+                    plcDeviceTable.requestPut2 = requestPut2;
+                    plcDeviceTable.RGVAllowUnload = new Dictionary<int, int>
+                    {
+                        {1, rgv1AllowUnload},
+                        {2, rgv2AllowUnload},
+                        {3, rgv3AllowUnload},
+                        {4, rgv4AllowUnload},
+                        {5, rgv5AllowUnload},
+                        {6, rgv6AllowUnload}
+                    };
+                    plcDeviceTables = plcDeviceTable;
+                    LogHelper.Info($"S7鍗忚璇诲彇鍙傛暟:{JsonConvert.SerializeObject(plcDeviceTable)}");
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine("ReadSsxPLc:" + ex.Message + ex.StackTrace);
+                LogHelper.Error("ReadSsxPLc:" + ex.Message, ex);
+                throw;
             }
 
 
         }
+        ///// <summary>
+        ///// 鑾峰彇杈撻�绾挎暟鎹�+        ///// </summary>
+        //public static void oldReadSsxPLc()
+        //{
+        //    //#region 娴嬭瘯鍐欏叆鏁版嵁
+        //    //List<S7Model> s7Models = new List<S7Model>();
+        //    //s7Models.Add(new S7Model() { addr = 0, value = "1", type = "Int", length = 2 });
+        //    //s7Models.Add(new S7Model() { addr = 2, value = "2", type = "Int", length = 2 });
+        //    //s7Models.Add(new S7Model() { addr = 4, value = "4", type = "Int", length = 2 });
+        //    //s7Models.Add(new S7Model() { addr = 18, value = "TP24121108", type = "String", length = 20 });
+        //    //var plcInfo = Settings.linePlcInfo.Where(a => (a.deviceNo == "2") && a.enable == 1).FirstOrDefault();
+        //    //Write(s7Models, 100, plcInfo);
+        //    //#endregion
 
+        //    var db = new SqlHelper<WCSTask>().GetInstance();
+        //    try
+        //    {
+        //        //涓や釜鎷嗘墭鏈�+        //        var linkplcs = Settings.linePlcInfos.FindAll(a => a.enable == 1).ToList();
+        //        foreach (var linkplc in linkplcs)
+        //        {
+        //            //鑾峰彇璁惧閰嶇疆鏂囦欢
+        //            var deviceInfos = Settings.ConveyorLinesInfos.Where(a => a.enable == 1 && a.deviceNo == linkplc.deviceNo).ToList();
+        //            if (deviceInfos.Count > 0)
+        //            {
+        //                int slen = int.Parse(deviceInfos.Min(a => a.readAddr).ToString());
+        //                int elen = int.Parse(deviceInfos.Max(a => a.readAddr).ToString());
+
+        //                //璇诲彇杈撻�绾挎暣涓亸绉婚噺鐨刡yte鏁扮粍 鏀惧唴瀛橀噷涓�捣瑙f瀽锛岄槻姝㈣繃搴﹁鍙�+        //                //PLCRead(linkplc.address, 8, slen, elen + 18, out Ssxbytes);
+
+        //                var plc = new Plc(CpuType.S71500, linkplc.address, 0, 1);
+        //                Link(plc);
+        //                //涓�釜鎷嗘墭鏈轰袱涓嚎浣�+        //                foreach (var device in deviceInfos)
+        //                {
+        //                    //int workMode = int.Parse(GetValue(int.Parse(device.readAddr.ToString()), VarType.Int, Ssxbytes));        //宸ヤ綔妯″紡
+        //                    //int lightAction = int.Parse(GetValue(int.Parse((device.readAddr + 2).ToString()), VarType.Int, Ssxbytes));     //鏄惁鏈夎揣锛屽厜鐢典俊鍙�+
+        //                    //int workMode = (short)plc.Read(DataType.DataBlock, 8, int.Parse(device.readAddr.ToString()), VarType.Int, 1, 0);
+        //                    //int lightAction = (short)plc.Read(DataType.DataBlock, 8, int.Parse((device.readAddr + 2).ToString()), VarType.Int, 1, 0);
+
+        //                    int requestTake1 = (short)plc.Read(DataType.DataBlock, 8, 230, VarType.Int, 1, 0);
+        //                    int requestPut1 = (short)plc.Read(DataType.DataBlock, 8, 230, VarType.Int, 1, 1);
+        //                    int requestTake2 = (short)plc.Read(DataType.DataBlock, 8, 230, VarType.Int, 1, 2);
+        //                    int requestPut2 = (short)plc.Read(DataType.DataBlock, 8, 230, VarType.Int, 1, 3);
+
+        //                    LogHelper.Info($"readbool2================={requestTake1}锛寋requestPut1}锛寋requestTake2}锛寋requestPut2}");
+        //                    //var requestTake = plc.Read("DB8.DBX" + device.readAddr + 16.0);//杈撻�绾胯姹傚彇妗�+        //                    //var requestPut = plc.Read("DB8.DBX" + device.readAddr + 16.1);//杈撻�绾垮厑璁告斁妗�+
+        //                    //瀛樺埌缂撳瓨
+        //                    //var task = plcDeviceTables.Find(a => a.DeviceNo == device.code);
+        //                    if (task != null)
+        //                    {
+        //                        task.DeviceNo = device.code;
+        //                        //task.workMode = workMode;
+        //                        //task.lightAction = lightAction;
+        //                        task.requestTake1 = requestTake1;
+        //                        task.requestPut1 = requestPut1;
+        //                        task.requestTake2 = requestTake2;
+        //                        task.requestPut2 = requestPut2;
+        //                        LogHelper.Info($"S7鍗忚绗竴娆¤鍙栧弬鏁�{JsonConvert.SerializeObject(task)}");
+        //                    }
+        //                    else
+        //                    {
+        //                        var plcDeviceTable = new PlcDeviceTable();
+        //                        plcDeviceTable.DeviceNo = device.code;
+        //                        //plcDeviceTable.workMode = workMode;
+        //                        //plcDeviceTable.lightAction = lightAction;
+        //                        plcDeviceTable.requestTake1 = requestTake1;
+        //                        plcDeviceTable.requestPut1 = requestPut1;
+        //                        plcDeviceTable.requestTake2 = requestTake2;
+        //                        plcDeviceTable.requestPut2 = requestPut2;
+        //                        plcDeviceTables.Add(plcDeviceTable);
+        //                        LogHelper.Info($"S7鍗忚璇诲彇鍙傛暟:{JsonConvert.SerializeObject(plcDeviceTable)}");
+        //                    }
+
+        //                }
+        //            }
+        //        }
+        //    }
+        //    catch (Exception ex)
+        //    {
+        //        Console.WriteLine("ReadSsxPLc:" + ex.Message + ex.StackTrace);
+        //        LogHelper.Error("ReadSsxPLc:" + ex.Message, ex);
+        //        throw;
+        //    }
+
+
+        //}
         ///// <summary>
         ///// 鎵归噺鍐欏叆鏂规硶
         ///// </summary>
@@ -669,7 +778,7 @@
             }
         }
 
-        internal static bool WriteDouble(string deviceNo,int db, double? byteAddr, int data)
+        internal static bool WriteDouble(string deviceNo, int db, int byteAddr, int offsetAddr, int data)
         {
             var result = false;
             try
@@ -679,22 +788,47 @@
                 Link(plc);
                 if (plc.IsConnected)
                 {
-                    if (byteAddr != 0) {
-                        plc.Write("DB9.DBX" + byteAddr, data);
-                        //plc.Write(DataType.DataBlock, db, byteAddr, data);
+                    if (byteAddr != 0)
+                    {
+                        plc.WriteBit(DataType.DataBlock, db, byteAddr, offsetAddr, true);
                         Console.WriteLine($"鍐欏叆plc淇℃伅锛宨p={plc.IP} addr={byteAddr} data={data} ");
                         LogHelper.Info($"鍐欏叆plc淇℃伅锛宨p={plc.IP} addr={byteAddr} data={data} ");
-                        if (result)
+                        //鐫′笁绉�濡傛灉杩樼户缁彂璇锋眰鐨勮瘽灏遍噸鍐欏叆 鍚﹀垯鍐欏叆false
+                        Thread.Sleep(3000);
+                        var plcDeviceTable = S7Helper.plcDeviceTables;
+                        if (plcDeviceTable != null)
                         {
-                            //鍐欏畬鍐嶈涓�纭
-                            //var readData = (short)plc.Read(DataType.DataBlock, db, byteAddr, VarType.Int, 1, 0);
-                            var readData = (short)plc.Read("DB9.DBX" + byteAddr);
-                            Console.WriteLine($"璇诲彇plc淇℃伅锛宨p={plc.IP} addr={byteAddr} data={data} res={string.Join(", ", readData)}");
-                            LogHelper.Info($"璇诲彇plc淇℃伅锛宨p={plc.IP} addr={byteAddr} data={data} res={string.Join(", ", readData)}", "PLC");
-                            result = readData == data;
+                            if ((offsetAddr == 0 && plcDeviceTable.requestPut1)
+                                || (offsetAddr == 1 && plcDeviceTable.requestTake1)
+                                || (offsetAddr == 2 && plcDeviceTable.requestPut2)
+                                || (offsetAddr == 3 && plcDeviceTable.requestTake2))
+                            {
+                                WriteDouble(deviceNo, db, byteAddr, offsetAddr, data);
+                            }
+                            else
+                            {
+                                plc.WriteBit(DataType.DataBlock, db, byteAddr, offsetAddr, false);
+                                LogHelper.Info($"S7鍙戦�澶嶄綅淇″彿");
+                            }
+
                         }
+
+                        //if (result)
+                        //{
+                        //    //鍐欏畬鍐嶈涓�纭
+                        //    //var readData = (short)plc.Read(DataType.DataBlock, db, byteAddr, VarType.Int, 1, 0);
+
+                        //    //byte data1 = (byte)plc.Read(DataType.DataBlock, db, byteAddr, VarType.Byte, 1);
+                        //    //// 鐒跺悗鎻愬彇鍚勪釜浣�+                        //    //bool requestPut1 = (data1 & 0x01) != 0;  // 230.0   1001
+
+                        //    var readData = (short)plc.Read("DB9.DBX" + byteAddr);
+                        //    Console.WriteLine($"璇诲彇plc淇℃伅锛宨p={plc.IP} addr={byteAddr} data={data} res={string.Join(", ", readData)}");
+                        //    LogHelper.Info($"璇诲彇plc淇℃伅锛宨p={plc.IP} addr={byteAddr} data={data} res={string.Join(", ", readData)}", "PLC");
+                        //    result = readData == data;
+                        //}
                     }
-                    
+
                 }
                 else
                 {
@@ -829,7 +963,15 @@
             public string value { get; set; }
         }
 
-
+        //S7鍐欏叆淇″彿 娴嬭瘯鐢�+        internal static Results S7Write(int offsetAddr)
+        {
+            var linkplcs = Settings.linePlcInfos.Find(a => a.deviceNo == "1");
+            var plc = new Plc(CpuType.S71500, linkplcs.address, 0, 1);
+            Link(plc);
+            plc.WriteBit(DataType.DataBlock, 9, 182, offsetAddr, false);
+            return new Results() { Code = "0", Message = $"鍐欏叆鎴愬姛", Data = null };
+        }
 
         #region 鐢ㄤ簬妯℃嫙娴嬭瘯
         /// <summary>
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/device/TcpServer.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/device/TcpServer.cs
index 22ab780..f4885fd 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/device/TcpServer.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/device/TcpServer.cs
@@ -1,4 +1,5 @@
-锘縰sing System;
+锘縰sing Newtonsoft.Json;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Net;
@@ -22,6 +23,7 @@
                 socket.Listen(30);
                 //寮�鎺ュ彈瀹㈡埛绔繛鎺ヨ姹�                 socket.BeginAccept(new AsyncCallback(ClientAccepted), socket);
+                //Console.ReadLine();
             }
             catch (Exception e) {
                 Console.WriteLine(e.Message);
@@ -30,7 +32,11 @@
         public static Dictionary<string, Socket> clients = new Dictionary<string, Socket>();
         public static Dictionary<string, byte[]> buffers = new Dictionary<string, byte[]>();
         public static void ClientAccepted(IAsyncResult ar) {
+            //try
+            //{
 
+
+            Console.WriteLine("ClientAccepted================");
             var socket = ar.AsyncState as Socket;
             var client = socket.EndAccept(ar);
             string remote_ip = ((System.Net.IPEndPoint)client.RemoteEndPoint).Address.ToString();
@@ -55,11 +61,19 @@
             }
             //鍑嗗鎺ュ彈涓嬩竴涓鎴风璇锋眰
             socket.BeginAccept(new AsyncCallback(ClientAccepted), socket);
+
+
+            //}
+            //catch (Exception ex)
+            //{
+            //    Console.WriteLine($"ClientAccepted 寮傚父: {ex.ToString()}");
+            //}
         }
 
 
         public static void ReceiveMessage(IAsyncResult ar) {
             try {
+                //Console.WriteLine("ReceiveMessage================");
                 var socket = ar.AsyncState as Socket;
                 string remote_ip = ((System.Net.IPEndPoint)socket.RemoteEndPoint).Address.ToString();
                 var length = socket.EndReceive(ar);
@@ -80,10 +94,12 @@
                     if (buffers.Keys.Contains(remote_ip)) {
                         //璇诲彇鍑烘潵娑堟伅鍐呭
                         var message = GetHexString(buffers[remote_ip], length);//16   10
-                        Console.WriteLine(message);
+                        Console.WriteLine($"ReceiveMessage鎺ユ敹淇″彿锛歿message}");
+                        LogHelper.Info($"ReceiveMessage鎺ユ敹淇″彿锛歿message}");
+                        //Console.WriteLine(message);
                         //3A 00 01 00 01 05 73 00 02 01 01 B8
                         //鎸夐挳鐩�-                        if (message.Substring(0, 2) == "3A") {
+                        if (message.Substring(0, 2) == "3a") {
                             //鏄剧ず娑堟伅
                             if (length != 24) {
                                 message = message.Substring(0, 24);
@@ -91,14 +107,14 @@
                             PlcHelper.Receive(remote_ip, message);
                             Array.Clear(buffers[remote_ip], 0, buffers[remote_ip].Length);//娓呯┖褰撳墠IP Buffer
                         }
-                        //3F 00 10 20 30 40 0D 0A
+                        //3F 00 10 20 30 40 50 60 0D 0A
                         //瀹夊叏浜や簰
-                        else if (message.Substring(0, 4) == "3F00")
+                        else if (message.Substring(0, 4) == "3f00")
                         {
                             //鏄剧ず娑堟伅
-                            if (length != 16)
+                            if (length != 20)
                             {
-                                message = message.Substring(0, 16);
+                                message = message.Substring(0, 20);
                             }
                             PlcHelper.Receive(remote_ip, message);
                             Array.Clear(buffers[remote_ip], 0, buffers[remote_ip].Length);//娓呯┖褰撳墠IP Buffer
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/CameraMonitor.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/CameraMonitor.cs
index f7da469..707d0a3 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/CameraMonitor.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/CameraMonitor.cs
@@ -6,8 +6,8 @@
 
     public  class SafeInteraction : BaseModel
     {
-        //站点ip
-        public string ip { get; set; }
+        //站点
+        public string code { get; set; }
         //信号
         public string data { get; set; }
 
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/CntrItemDetail.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/CntrItemDetail.cs
index de605b9..151be79 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/CntrItemDetail.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/CntrItemDetail.cs
@@ -22,21 +22,21 @@
         /// 1:合格 2:不合格 
         /// </summary>
         public int N_ITEM_STATE { get; set; }
-        public int S_CK { get; set; }
+        //public int S_CK { get; set; }
 
         public string S_BATCH_NO { get; set; }
         public string S_END_USER { get; set; } = "";
         public string S_OWNER { get; set; }
         public string S_SUPPLIER_NO { get; set; }
-        public string S_PACK_TYPE { get; set; }
-        public float F_PACK_QTY { get; set; }
+        //public string S_PACK_TYPE { get; set; }
+        //public float F_PACK_QTY { get; set; }
         public float F_QTY { get; set; }
         public string S_UOM { get; set; } = "kg";
         public string S_CNTR_CODE { get; set; }
         public string S_BS_TYPE { get; set; } = "";
         public string S_BS_NO { get; set; } = "";
         
-        public string S_ITEM_ROUTE { get; set; } = "";
+        //public string S_ITEM_ROUTE { get; set; } = "";
         public float F_NET_WEIGHT { get; set; }
         public float F_GROSS_WEIGHT { get; set; }
         public string S_WU { get; set; } = "kg";
@@ -45,7 +45,7 @@
         /// </summary>
         public float F_ALLOC_QTY { get; set; }
         public string C_ITEM_MERGE { get; set; } = "N";
-        public string S_PUTAWAY_NO { get; set; }
+        //public string S_PUTAWAY_NO { get; set; }
 
         /// <summary>
         /// 反向映射
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/PlcDeviceTable.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/PlcDeviceTable.cs
index 22693d0..dbfa7ad 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/PlcDeviceTable.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/PlcDeviceTable.cs
@@ -1,57 +1,67 @@
 using HH.WCS.JuShi.models;
 using SqlSugar;
 using System;
+using System.Collections.Generic;
 
 namespace HH.WCS.JuShi
 {
 
     [SugarTable("PlcDeviceTable")]
     public class PlcDeviceTable : BaseModel
-    {    /// <summary>
-         /// 线体编号
-         /// </summary>
-        public int DeviceNo { get; set; }
+    {    
+        ///// <summary>
+        // /// 线体编号
+        // /// </summary>
+        //public int DeviceNo { get; set; }
+        ///// <summary>
+        ///// 设备货位编码
+        ///// </summary>
+        //public string Location { get; set; }
+        ///// <summary>
+        ///// 工作模式 待机=1 运行中=2  脱机=0
+        ///// </summary>
+        //public int workMode { get; set; }
+        ///// <summary>
+        ///// 光电信号        有货 =1 无货=0
+        ///// </summary>
+        //public int lightAction { get; set; }
+        ///// <summary>
+        ///// 故障报警
+        ///// </summary>
+        //public int errorAlarm { get; set; }
+        ///// <summary>
+        ///// 设备状态    无状态=0 运行状态=1 手动状态=2 有料等待=3 异常报警=4
+        ///// </summary>
+        //public int deviceState { get; set; }
+        //public string TaskNo { get; set; }
+        ///// <summary>
+        ///// 目标地址
+        ///// </summary>
+        //public int targetAddr { get; set; }
+        ///// <summary>
+        ///// 重量
+        ///// </summary>
+        //public float weight { get; set; }
+        ///// <summary>
+        ///// 托盘码
+        ///// </summary>
+        //public string trayCode { get; set; }
         /// <summary>
-        /// 设备货位编码
+        /// 3寸输送线请求取框
         /// </summary>
-        public string Location { get; set; }
+        public bool requestTake1 { get; set; }
         /// <summary>
-        /// 工作模式 待机=1 运行中=2  脱机=0
+        /// 3寸输送线允许放框
         /// </summary>
-        public int workMode { get; set; }
+        public bool requestPut1 { get; set; }
         /// <summary>
-        /// 光电信号        有货 =1 无货=0
+        /// 6寸输送线请求取框
         /// </summary>
-        public int lightAction { get; set; }
+        public bool requestTake2 { get; set; }
         /// <summary>
-        /// 故障报警
+        /// 6寸输送线允许放框
         /// </summary>
-        public int errorAlarm { get; set; }
-        /// <summary>
-        /// 设备状态    无状态=0 运行状态=1 手动状态=2 有料等待=3 异常报警=4
-        /// </summary>
-        public int deviceState { get; set; }
-        public string TaskNo { get; set; }
-        /// <summary>
-        /// 目标地址
-        /// </summary>
-        public int targetAddr { get; set; }
-        /// <summary>
-        /// 重量
-        /// </summary>
-        public float weight { get; set; }
-        /// <summary>
-        /// 托盘码
-        /// </summary>
-        public string trayCode { get; set; }
-        /// <summary>
-        /// 输送线请求取框
-        /// </summary>
-        public bool requestTake { get; set; }
-        /// <summary>
-        /// 输送线允许放框
-        /// </summary>
-        public bool requestPut { get; set; }
-
+        public bool requestPut2 { get; set; }
+        public Dictionary<int, int> RGVAllowUnload { get; internal set; }
     }
 }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/TN_ISUSING.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/TN_ISUSING.cs
new file mode 100644
index 0000000..1cd6c7a
--- /dev/null
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/TN_ISUSING.cs
@@ -0,0 +1,15 @@
+using HH.WCS.JuShi.models;
+using SqlSugar;
+using System;
+
+namespace HH.WCS.JuShi
+{
+
+    [SugarTable("TN_ISUSING")]
+    public class Isusing: BaseModel
+    {
+
+        public int S_STATUS { get; set; }
+        public string S_TYPE { get; set; }
+    }
+}
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/process/DeviceProcess.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/process/DeviceProcess.cs
index 7945429..730049f 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/process/DeviceProcess.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/process/DeviceProcess.cs
@@ -28,7 +28,7 @@
                 //3A 00 01 00 01 05 73 00 02 01 01 B8
                 //鍙�                 //2A 00 01 00 01 05 73 00 02 01 01 A8
-                if (data.Substring(0, 2) == "3A")
+                if (data.Substring(0, 2) == "3a")
                 {
                     //鏁版嵁搴忓彿
                     data = data.Substring(16, 2);
@@ -39,7 +39,7 @@
                     bool result = false;
                     if (data.Equals("01"))
                     {
-                        var reservoirs = Settings.ReservoirAreas.Where(s => s.areaName == "RGV搴撳尯").FirstOrDefault();
+                        var reservoirs = Settings.ReservoirAreas.Where(s => s.areaName == "绔嬪簱鍏ュ簱鍖�).FirstOrDefault();
                         result = TaskProcess.tcpOffline(loc, reservoirs.areaCode);
                     }
                     else if (data.Equals("02"))
@@ -64,7 +64,7 @@
                     }
                     //2A 00 01 00 01 05 73 00 02 01 01 A8
                     // 杈撳叆鐨勫崄鍏繘鍒跺瓧绗︿覆鏁扮粍
-                    string[] hexValues = { "2A", "00", "01", "00", "01", "05", "73", "00", "02", data, "01" };
+                    string[] hexValues = { "2a", "00", "01", "00", "01", "05", "73", "00", "02", data, "01" };
                     // 璁$畻鎬诲拰
                     int sum = hexValues.Sum(hex => Convert.ToInt32(hex, 16));
                     string returndata = hexValues.ToString() + sum;
@@ -74,54 +74,60 @@
                     }
                 }
                 //rgv瀹夊叏浜や簰
-                else if (data.Substring(0, 4) == "3F00")
+                else if (data.Substring(0, 4) == "3f00")
                 {
-                    //鏃犱俊鍙蜂笉绠�-                    if (data.Trim() != "3F00102030400D0A")
-                    {
+                    ////鏃犱俊鍙蜂笉绠�+                    //if (data.Trim() != "3f001020304050600d0a")
+                    //{
                         LogHelper.Info($"RGV瀹夊叏浜や簰鎺ユ敹淇″彿{data}");
-                        var reservoirs = Settings.SafeInteractions.Where(s => s.ip == ip).FirstOrDefault();
-                        //1鍏佽鍗歌揣  2鍗歌揣瀹屾垚纭
-                        string datastr = "";
-                        if (reservoirs.pointCode == "RGV1")
-                        {
-                            datastr = data.Substring(5, 1);
-                        }
-                        else if (reservoirs.pointCode == "RGV2")
-                        {
-                            datastr = data.Substring(7, 1);
-                        }
-                        else if (reservoirs.pointCode == "RGV3")
-                        {
-                            datastr = data.Substring(9, 1);
-                        }
-                        else if (reservoirs.pointCode == "RGV4")
-                        {
-                            datastr = data.Substring(11, 1);
-                        }
+                        rgvSafeInteraction = data.Substring(4,12);
+                        //var reservoirs = Settings.SafeInteractions.Where(s => s.ip == ip).FirstOrDefault();
+                        ////1鍏佽鍗歌揣  2鍗歌揣瀹屾垚纭
+                        //string datastr = "";
+                        //switch (reservoirs.pointCode)
+                        //{
+                        //    case "RGV1":
+                        //        datastr = data.Substring(5, 1);
+                        //        break;
+                        //    case "RGV2":
+                        //        datastr = data.Substring(7, 1);
+                        //        break;
+                        //    case "RGV3":
+                        //        datastr = data.Substring(9, 1);
+                        //        break;
+                        //    case "RGV4":
+                        //        datastr = data.Substring(11, 1);
+                        //        break;
+                        //    case "RGV5":
+                        //        datastr = data.Substring(13, 1);
+                        //        break;
+                        //    case "RGV6":
+                        //        datastr = data.Substring(15, 1);
+                        //        break;
+                        //}
 
-                        //鎺ュ彈淇″彿瀛樺埌鍐呭瓨
-                        if (rgvSafeInteraction != null)
-                        {
-                            //string杞垚list
-                            var jsonList = JsonConvert.DeserializeObject<List<SafeInteraction>>(rgvSafeInteraction);
-                            var list = jsonList.Where(s => s.ip == ip).First();
-                            if (list != null)
-                            {
-                                //涓嶄负绌哄氨鍏堝垹鍐嶅姞涓�-                                jsonList.Remove(list);
-                            }
-                            jsonList.Add(new SafeInteraction { ip = ip, data = datastr });
-                            rgvSafeInteraction = JsonConvert.SerializeObject(jsonList);
-                        }
-                        else
-                        {
-                            //绗竴娆¤繘
-                            var safeInteractions = new List<SafeInteraction>{new SafeInteraction { ip = ip, data = datastr }};
-                            rgvSafeInteraction = JsonConvert.SerializeObject(safeInteractions);
-                        }
-                        LogHelper.Info($"RGV瀹夊叏浜や簰 瀛樺叆鍐呭瓨鍙傛暟{rgvSafeInteraction}");
-                    }
+                        ////鎺ュ彈淇″彿瀛樺埌鍐呭瓨
+                        //if (rgvSafeInteraction != null)
+                        //{
+                        //    //string杞垚list
+                        //    var jsonList = JsonConvert.DeserializeObject<List<SafeInteraction>>(rgvSafeInteraction);
+                        //    var list = jsonList.Where(s => s.ip == ip).First();
+                        //    if (list != null)
+                        //    {
+                        //        //涓嶄负绌哄氨鍏堝垹鍐嶅姞涓�+                        //        jsonList.Remove(list);
+                        //    }
+                        //    jsonList.Add(new SafeInteraction { ip = ip, data = datastr });
+                        //    rgvSafeInteraction = JsonConvert.SerializeObject(jsonList);
+                        //}
+                        //else
+                        //{
+                        //    //绗竴娆¤繘
+                        //    var safeInteractions = new List<SafeInteraction>{new SafeInteraction { ip = ip, data = datastr }};
+                        //    rgvSafeInteraction = JsonConvert.SerializeObject(safeInteractions);
+                        //}
+                        //LogHelper.Info($"RGV瀹夊叏浜や簰 瀛樺叆鍐呭瓨鍙傛暟{rgvSafeInteraction}");
+                    //}
 
 
                 }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/process/TaskProcess.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/process/TaskProcess.cs
index 42fc845..20db7c6 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/process/TaskProcess.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/process/TaskProcess.cs
@@ -23,6 +23,9 @@
 using System.Threading;
 using static HH.WCS.JuShi.dispatch.NDC;
 using static HH.WCS.JuShi.util.Settings;
+using System.ComponentModel;
+using Newtonsoft.Json.Linq;
+using S7.Net;
 
 namespace HH.WCS.JuShi.process
 {
@@ -106,16 +109,16 @@
             {
                 CacheBitUpdate(mst, true);
                 //鎷嗘墭鏈哄畨鍏ㄤ氦浜�-                ctjSafe(mst);
+                //ctjSafe(mst);
 
             }
             if (state == 6)//鍗歌揣瀹屾垚
             {
                 CacheBitUpdate(mst, false);
-                //rgv瀹夊叏浜や簰
-                rgvSafe(mst);
-                //鎷嗘墭鏈哄畨鍏ㄤ氦浜�-                ctjSafe(mst);
+                ////rgv瀹夊叏浜や簰
+                //rgvSafe(mst);
+                ////鎷嗘墭鏈哄畨鍏ㄤ氦浜�+                //ctjSafe(mst);
 
             }
             if (state == 7)
@@ -127,96 +130,104 @@
         private static void rgvSafe(WCSTask mst)
         {
             //rgv瀹夊叏浜や簰  鏍规嵁缁堢偣璐т綅鎵惧埌鏄摢涓猺gv
-            var reservoir = Settings.ReservoirAreas.Where(a => a.areaName == "RGV搴撳尯").FirstOrDefault();
+            var reservoir = Settings.ReservoirAreas.Where(a => a.areaName == "绔嬪簱鍏ュ簱鍖�).FirstOrDefault();
             if (mst.S_END_AREA.Equals(reservoir.areaCode))
             {
                 var safeInteractions = Settings.SafeInteractions.Where(a => a.location == mst.S_END_LOC).FirstOrDefault();
-
-                var safelists = JsonConvert.DeserializeObject<List<SafeInteraction>>(DeviceProcess.rgvSafeInteraction);
-
-                if (safelists.Any())
+                var rgvSafeInteraction = DeviceProcess.rgvSafeInteraction;
+                //澶勭悊淇″彿
+                var startsub = safeInteractions.code;
+                var res = rgvSafeInteraction.Substring((startsub - 1) * 2 + 1, 1);
+                //var safelists = JsonConvert.DeserializeObject<List<SafeInteraction>>(DeviceProcess.rgvSafeInteraction);
+                LogHelper.Info($"RGV瀹夊叏浜や簰缂撳瓨淇″彿{rgvSafeInteraction}");
+                //涓嶇瓑浜�2鍗歌揣瀹屾垚纭淇″彿 灏辨帴鐫�彂
+                if (res != "2")
                 {
-                    var safelist = safelists.Where(s => s.ip == safeInteractions.ip).First();
-                    LogHelper.Info($"RGV瀹夊叏浜や簰鍙傛暟{safelist}");
-                    //涓嶇瓑浜�2鍗歌揣瀹屾垚纭淇″彿 灏辨帴鐫�彂
-                    if (safelist.data != "2")
-                    {
-                        string datastr = "3F00102030400D0A";
-                        // 杩斿洖淇″彿
-                        switch (safeInteractions.pointCode)
-                        {
-                            case "RGV1":
-                                datastr = datastr.Replace("10", "11");
-                                break;
-                            case "RGV2":
-                                datastr = datastr.Replace("20", "21");
-                                break;
-                            case "RGV3":
-                                datastr = datastr.Replace("30", "31");
-                                break;
-                            case "RGV4":
-                                datastr = datastr.Replace("40", "41");
-                                break;
-                        }
-                        LogHelper.Info($"RGV瀹夊叏浜や簰鍙戦�淇″彿{safelist.ip},{datastr}");
-                        PlcHelper.SendHex(safelist.ip, datastr);
-                        //浼戠湢3绉掑啀璋�-                        Thread.Sleep(3000);
-                        rgvSafe(mst);
-                    }
-                    else
-                    {
-                        LogHelper.Info($"RGV瀹夊叏浜や簰鍙戦�淇″彿{safelist.ip},3F00102030400D0A");
-                        //鏃犵姸鎬佷俊鍙�-                        PlcHelper.SendHex(safelist.ip, "3F00102030400D0A");
+                    string datastr = "3f001020304050600d0a";
+                    string a = ((startsub - 1) * 2).ToString();
+                    //杩斿洖淇″彿澶勭悊
+                    datastr = datastr.Replace(a + "0", a + "1");
 
-                    }
+                    LogHelper.Info($"RGV瀹夊叏浜や簰鍙戦�淇″彿{safeInteractions.ip},{datastr}");
+                    PlcHelper.SendHex(safeInteractions.ip, datastr);
+                    //浼戠湢3绉掑啀璋�+                    Thread.Sleep(3000);
+                    rgvSafe(mst);
+                }
+                else
+                {
+                    //浼戠湢10绉掑啀鍙戜俊鍙�锛堢粰鐜板満璁惧鍚稿悎鏃堕棿璇存槸锛�+                    Thread.Sleep(10000);
+                    LogHelper.Info($"RGV瀹夊叏浜や簰鍙戦�淇″彿{safeInteractions.ip},3f001020304050600d0a");
+                    //鏃犵姸鎬佷俊鍙�+                    PlcHelper.SendHex(safeInteractions.ip, "3f001020304050600d0a");
+
                 }
             }
         }
         //鎷嗘墭鏈哄畨鍏ㄤ氦浜�         private static void ctjSafe(WCSTask mst)
         {
-            PlcDeviceTable plcDeviceTable = null;
+            PlcDeviceTable plcDeviceTable = S7Helper.plcDeviceTables;
+            string deviceno = null;//绾夸綋
             //鎵惧埌绾夸綋 鏍规嵁绾夸綋鎵惧唴瀛橀噷鐨勭姸鎬�             var rkreservoirs = Settings.ConveyorLinesInfos.Where(s => s.location == mst.S_END_LOC).FirstOrDefault();
             var ckreservoirs = Settings.ConveyorLinesInfos.Where(s => s.location == mst.S_START_LOC).FirstOrDefault();
+            //鍏ュ彛
             if (rkreservoirs != null)
             {
-                plcDeviceTable = S7Helper.plcDeviceTables.Find(a => a.DeviceNo == rkreservoirs.code);
+                if (rkreservoirs.deviceNo == "1")
+                {
+                    deviceno = "1";
+                }
+                else if (rkreservoirs.deviceNo == "2")
+                {
+                    deviceno = "4";
+                }
             }
+            //鍑哄彛
             else if (ckreservoirs != null)
             {
-                plcDeviceTable = S7Helper.plcDeviceTables.Find(a => a.DeviceNo == ckreservoirs.code);
-            }
-            LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜掑啓鍏ュ弬鏁皗plcDeviceTable}");
-            if (plcDeviceTable != null)
-            {
-                //s7鍐欏叆
-                double addr = 0;         //鍋忕Щ閲�-                string deviceNo = null;//鎷嗘墭鏈哄彿
-                if (plcDeviceTable.DeviceNo == 1003)
+                if (ckreservoirs.deviceNo == "1")
                 {
-                    addr = 90.1;
+                    deviceno = "3";
+                }
+                else if (rkreservoirs.deviceNo == "2")
+                {
+                    deviceno = "6";
+                }
+            }
+            LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜掑啓鍏ュ弬鏁皗deviceno},{JsonConvert.SerializeObject(plcDeviceTable)}");
+            if (plcDeviceTable != null && deviceno != null)
+            {
+                //var plcDeviceTables = S7Helper.plcDeviceTables.Where(s => s.DeviceNo == plcDeviceTable.DeviceNo);
+
+                //s7鍐欏叆
+                int addr = 182;         //鍋忕Щ閲�+                int offsetAddr = 0;         //鍋忕Щ閲�+                string deviceNo = null;//鎷嗘墭鏈哄彿
+                if (deviceno == "3")
+                {
+                    offsetAddr = 1;
                     deviceNo = "1";
                 }
-                else if (plcDeviceTable.DeviceNo == 1006)
+                else if (deviceno == "6")
                 {
-                    addr = 180.1;
+                    offsetAddr = 3;
                     deviceNo = "2";
                 }
-                else if (plcDeviceTable.DeviceNo == 1001)
+                else if (deviceno == "1")
                 {
-                    addr = 30.0;
+                    offsetAddr = 0;
                     deviceNo = "1";
                 }
-                else if (plcDeviceTable.DeviceNo == 1004)
+                else if (deviceno == "4")
                 {
-                    addr = 120.0;
+                    offsetAddr = 2;
                     deviceNo = "2";
                 }
                 LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜掑啓鍏deviceNo}锛寋addr}");
-                S7Helper.WriteDouble(deviceNo, 9, addr, 1);
+                S7Helper.WriteDouble(deviceNo, 9, addr, offsetAddr, 1);
             }
         }
 
@@ -795,7 +806,7 @@
             {
                 //鏌ヨ杩欎釜搴撳尯鐨勭┖鎵樼洏涓庢弧鎵樼洏
                 var list = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == area).OrderByDescending(a => a.N_ROW).ToList();
-                //LogHelper.Info($"鏌ヨ杩欎釜搴撳尯鐨勭┖鎵樼洏涓庢弧鎵樼洏锛歿JsonConvert.SerializeObject(list)}");
+                LogHelper.Info($"鏌ヨ杩欎釜搴撳尯鐨勭┖鎵樼洏涓庢弧鎵樼洏锛歿JsonConvert.SerializeObject(list)}");
                 if (list.Count > 0)
                 {
                     List<string> loca = new List<string>();
@@ -812,7 +823,6 @@
                     {
                         list.RemoveAll(s => loca.Contains(s.S_CODE));
                     }
-
                     //绗﹀悎鏉′欢鐨勬帓搴忛�绗竴涓� 鍏堟壘绗竴涓�                     if (list.Count > 0)
                     {
@@ -1383,7 +1393,7 @@
         internal static Results UpdateFullStatus(List<CameraMonitor> models)
         {
             var result = new Results() { Code = "0", Message = "鎿嶄綔鎴愬姛", Data = null };
-            var db = new SqlHelper<Location>().GetInstance();
+            var db = new SqlHelper<object>().GetInstance();
             //鏍¢獙涓庡唴瀛樻槸鍚︿竴鑷�             if (monitorStatus != null)
             {
@@ -1469,40 +1479,50 @@
         //鎽勫儚澶寸洃娴嬬┖鎵樼紦瀛樺尯
         private static void ProcessEmptyTrayAreas(SqlSugar.ISqlSugarClient db, Location loc, string areaCode1, string areaCode2)
         {
-            var plcDeviceTable = new PlcDeviceTable();
-            string endLoc = null;
-            if (loc.S_AREA_CODE.Equals(areaCode1))
+            var plcDeviceTable = S7Helper.plcDeviceTables;
+            if (plcDeviceTable != null)
             {
-                plcDeviceTable = S7Helper.plcDeviceTables.Find(s => s.DeviceNo == 1001);
-                endLoc = Settings.linePlcInfos.Where(s => s.code == "鎷嗘墭鏈�").FirstOrDefault().inLoca;
-            }
-            else if (loc.S_AREA_CODE.Equals(areaCode2))//鍏绌烘墭
-            {
-                plcDeviceTable = S7Helper.plcDeviceTables.Find(s => s.DeviceNo == 1004);
-                endLoc = Settings.linePlcInfos.Where(s => s.code == "鎷嗘墭鏈�").FirstOrDefault().inLoca;
-            }
-            //鍒ゆ柇鏄惁鍏佽鏀炬
-            if (plcDeviceTable.workMode == 1 && plcDeviceTable.lightAction == 0 && plcDeviceTable.requestPut)
-            {
-                //鍒涘缓浠诲姟 浠庣┖鎵樼紦瀛樺尯鍙変釜鏂欏埌鎷嗘墭鏈�-                var list = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == loc.S_AREA_CODE
-                && a.N_CURRENT_NUM > 0 && a.N_LOCK_STATE == 0).OrderByDescending(a => a.N_ROW)
-                .OrderByDescending(a => a.N_COL).First();
-                var startLoc = list.S_CODE;
-
-                string trayCode = ContainerHelper.GenerateCntrNo();
-
-                LogHelper.Info($"鍒涘缓浠诲姟 璧风偣:{startLoc}缁堢偣:{endLoc}", "鎷嗘墭");
-                var res = TaskProcess.CreateTransport(startLoc, endLoc, "鎷嗘墭", trayCode, 1, 1);
-                if (res)
+                string endLoc = null;
+                bool request = false;
+                if (loc.S_AREA_CODE.Equals(areaCode1))
                 {
-                    LogHelper.Info($"璧风偣:{startLoc}缁堢偣:{endLoc}浠诲姟鍒涘缓鎴愬姛", "鎷嗘墭");
+                    request = plcDeviceTable.requestPut1;
+                    endLoc = Settings.linePlcInfos.Where(s => s.code == "鎷嗘墭鏈�").FirstOrDefault().inLoca;
                 }
-                else
+                else if (loc.S_AREA_CODE.Equals(areaCode2))//鍏绌烘墭
                 {
-                    LogHelper.Info($"璧风偣:{startLoc}缁堢偣:{endLoc}浠诲姟鍒涘缓澶辫触", "鎷嗘墭");
+                    request = plcDeviceTable.requestPut2;
+                    endLoc = Settings.linePlcInfos.Where(s => s.code == "鎷嗘墭鏈�").FirstOrDefault().inLoca;
+                }
+                //鍒ゆ柇鏄惁鍏佽鏀炬
+                if (request)
+                {
+                    //鍒涘缓浠诲姟 浠庣┖鎵樼紦瀛樺尯鍒版媶鎵樻満
+                    var list = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == loc.S_AREA_CODE
+                    && a.N_CURRENT_NUM > 0 && a.N_LOCK_STATE == 0).OrderByDescending(a => a.N_ROW)
+                    .OrderByDescending(a => a.N_COL).First();
+                    var startLoc = list.S_CODE;
+
+                    string trayCode = ContainerHelper.GenerateCntrNo();
+
+                    LogHelper.Info($"鍒涘缓浠诲姟 璧风偣:{startLoc}缁堢偣:{endLoc}", "鎷嗘墭");
+                    var res = TaskProcess.CreateTransport(startLoc, endLoc, "鎷嗘墭", trayCode, 1, 1);
+                    if (res)
+                    {
+                        LogHelper.Info($"璧风偣:{startLoc}缁堢偣:{endLoc}浠诲姟鍒涘缓鎴愬姛", "鎷嗘墭");
+                    }
+                    else
+                    {
+                        LogHelper.Info($"璧风偣:{startLoc}缁堢偣:{endLoc}浠诲姟鍒涘缓澶辫触", "鎷嗘墭");
+                    }
                 }
             }
+            else
+            {
+                LogHelper.Info($"鏈鍙栧埌鎷嗘墭鏈轰俊鍙�, "鎷嗘墭");
+
+            }
+
         }
         /// <summary>
         /// 鎶芥涓诲姩鍛煎彨    璧风偣锛氶�妫�紦瀛樺尯
@@ -1551,15 +1571,21 @@
         /// <summary>
         /// 涓诲姩鐗╂枡缁戝畾
         /// </summary>
-        /// <param name="model.S_ITEM_CODE">鐗╂枡缂栫爜</param>
+        /// <param name="model.S_ITEM_CODE">鐗╂枡缂栫爜(閫夊~)</param>
         /// <param name="model.BIND_LOC">缁戝畾璐т綅</param>
         /// <returns></returns>
         internal static Results bindMaterial(GetSubmitCheck model)
         {
             var result = new Results() { Code = "0", Message = "鐗╂枡缁戝畾鎴愬姛锛�, Data = null };
-            var db = new SqlHelper<Location>().GetInstance();
+            var db = new SqlHelper<object>().GetInstance();
             try
             {
+                var loc = db.Queryable<Location>().Where(a => a.S_CODE == model.BIND_LOC).First();
+                if (loc == null || loc.N_LOCK_STATE != 0)
+                {
+                    return new Results { Code = "1", Message = $"缁戝畾璐т綅涓嶅瓨鍦ㄦ垨宸茶閿�, Data = null };
+
+                }
                 string cntrStr = ContainerHelper.GenerateCntrNo();
                 var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == model.BIND_LOC).First();
                 if (locCntrRel != null)
@@ -1571,6 +1597,12 @@
                 {
                     return new Results { Code = "1", Message = $"鐗╂枡{model.S_ITEM_CODE}璐т綅{model.BIND_LOC}缁戝畾澶辫触", Data = null };
                 }
+                loc.N_CURRENT_NUM++;
+                var res2 = db.Updateable(loc).UpdateColumns(it => it.N_CURRENT_NUM).ExecuteCommand() > 0;
+                if (!res2)
+                {
+                    return new Results { Code = "1", Message = $"璐т綅{model.BIND_LOC}褰撳墠鏁伴噺鑷澶辫触", Data = null };
+                }
                 return result;
             }
             catch (Exception ex)
@@ -1579,6 +1611,42 @@
                 LogHelper.Error("bindMaterial:" + ex.Message, ex);
                 throw;
             }
+        }
+        /// <summary>
+        /// 鏁存帓鐗╂枡缁戝畾
+        /// </summary>
+        /// <param name="bondLoc">缁戝畾璐т綅</param>
+        /// <returns></returns>
+        internal static Results multBindMaterial(string bondLoc)
+        {
+            var result = new Results() { Code = "0", Message = "鏁存帓鐗╂枡缁戝畾鎴愬姛锛�, Data = null };
+            var db = new SqlHelper<object>().GetInstance();
+            try
+            {
+                var location = db.Queryable<Location>().Where(a => a.S_CODE == bondLoc).First();
+                //鏌ュ嚭杩欎竴鎺掔殑璐т綅
+                var loclist = db.Queryable<Location>()
+                    .Where(a => a.S_AREA_CODE == location.S_AREA_CODE && a.N_ROW == location.N_ROW).ToList();
+                foreach (var loc in loclist)
+                {
+                    //娌¢攣鐨勪笖娌¤揣鐨勬墠缁�+                    if (loc.N_LOCK_STATE == 0 && loc.N_CURRENT_NUM < loc.N_CAPACITY)
+                    {
+
+
+                    }
+
+                }
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine("multBindMaterial:" + ex.Message + ex.StackTrace);
+                LogHelper.Error("multBindMaterial:" + ex.Message, ex);
+                throw;
+            }
+
+
+            return result;
         }
         /// <summary>
         /// 鎸夐挳鐩掕皟鐢ㄤ笅绾�@@ -1684,47 +1752,52 @@
             var result = new safeResult() { code = "1", msg = "success" };
             try
             {
-                var reservoirs = Settings.SafeInteractions.Where(s => s.pointCode == model.STATION_NAME).FirstOrDefault();//y0-0000 y1-0001  on-FF00  off-0000
-                var rgvSafeInteraction = DeviceProcess.rgvSafeInteraction;
-                //RGV
-                if (reservoirs.type.Equals("RGV"))
+                var reservoirs = Settings.SafeInteractions.Where(s => s.location == model.STATION_NAME).FirstOrDefault();//y0-0000 y1-0001  on-FF00  off-0000
+                //var rgvSafeInteraction = DeviceProcess.rgvSafeInteraction;
+                var plcDeviceTable = S7Helper.plcDeviceTables;
+                if (plcDeviceTable != null)
                 {
-                    LogHelper.Info($"RGV瀹夊叏浜や簰  璇锋眰鐐逛綅锛歿model.STATION_NAME}璇锋眰鐮侊細{model.APPLY_CODE}");
-                    //鍗歌揣璇锋眰杩涘叆
-                    if (model.APPLY_CODE.Equals("5"))
+                    //RGV
+                    if (reservoirs.type.Equals("RGV"))
                     {
+                        LogHelper.Info($"RGV瀹夊叏浜や簰  璇锋眰鐐逛綅锛歿model.STATION_NAME}璇锋眰鐮侊細{model.APPLY_CODE}");
                         //鏍规嵁ip璇荤姸鎬�-                        if (rgvSafeInteraction != null)
+                        LogHelper.Info($"RGV瀹夊叏浜や簰缂撳瓨淇″彿{JsonConvert.SerializeObject(plcDeviceTable.RGVAllowUnload)}");
+                        //澶勭悊淇″彿
+                        var res = plcDeviceTable.RGVAllowUnload[reservoirs.code];
+                        //鍗歌揣璇锋眰杩涘叆
+                        if (model.APPLY_CODE.Equals("5"))
                         {
-                            LogHelper.Info($"RGV瀹夊叏浜や簰鍙傛暟{JsonConvert.SerializeObject(rgvSafeInteraction)}");
-                            var safelist = JsonConvert.DeserializeObject<List<SafeInteraction>>(rgvSafeInteraction);
-                            if (safelist.Any())
+                            //1鍏佽鍗歌揣 
+                            if (res == 1)
                             {
-                                var safedata = safelist.Where(s => s.ip == reservoirs.ip).First();
-                                //1鍏佽鍗歌揣  2鍗歌揣瀹屾垚纭
-                                if (safedata.data == "1") 
-                                {
-                                    LogHelper.Info($"RGV瀹夊叏浜や簰 鍏佽鍗歌揣");
-                                    return new safeResult() { code = "0", msg = "success" };
-                                }
+                                LogHelper.Info($"RGV瀹夊叏浜や簰 鍏佽鍗歌揣");
+                                return new safeResult() { code = "0", msg = "success" };
                             }
                         }
+                        //鍗歌揣鍚庡凡绂诲紑
+                        else if (model.APPLY_CODE.Equals("8"))
+                        {
+                            safeAssistant(reservoirs.code,res);
+                            LogHelper.Info($"RGV瀹夊叏浜や簰 鍗歌揣瀹屾垚");
+                            return new safeResult() { code = "0", msg = "success" };
+                        }
+
+
                     }
-                }
-                //鎷嗘墭鏈�-                else if (reservoirs.type.Equals("CTJ"))
-                {
-                    LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜� 璇锋眰鐐逛綅锛歿model.STATION_NAME}璇锋眰鐮侊細{model.APPLY_CODE}");
-                    //鎵惧埌绾夸綋 鏍规嵁绾夸綋鎵惧唴瀛橀噷鐨勭姸鎬�-                    var reservoirs1 = Settings.ConveyorLinesInfos.Where(s => s.location == model.STATION_NAME).FirstOrDefault();
-                    var plcDeviceTable = S7Helper.plcDeviceTables.Find(a => a.DeviceNo == reservoirs1.code);
-                    if (plcDeviceTable != null)
+                    //鎷嗘墭鏈�+                    else if (reservoirs.type.Equals("CTJ"))
                     {
+                        LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜� 璇锋眰鐐逛綅锛歿model.STATION_NAME}璇锋眰鐮侊細{model.APPLY_CODE}");
+                        //鎵惧埌绾夸綋 鏍规嵁绾夸綋鎵惧唴瀛橀噷鐨勭姸鎬�+                        var reservoirs1 = Settings.ConveyorLinesInfos.Where(s => s.location == model.STATION_NAME).FirstOrDefault();
+
                         LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜掑弬鏁皗JsonConvert.SerializeObject(plcDeviceTable)}");
                         if (model.APPLY_CODE.Equals("1"))
                         {
                             //0-鑴辨満鐘舵�锛�-寰呮満鐘舵�锛�-杩愯涓�   寰呮満涓旀湁鎵樼洏涓旇姹傚彇妗嗘墠璧�-                            if (plcDeviceTable.workMode == 1 && plcDeviceTable.lightAction == 1 && plcDeviceTable.requestTake)
+                            if ((reservoirs1.deviceNo == "1" && plcDeviceTable.requestTake1) ||
+                                (reservoirs1.deviceNo == "2" && plcDeviceTable.requestTake2))
                             {
                                 LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜�鍏佽鍙栨");
                                 return new safeResult() { code = "0", msg = "success" };
@@ -1734,40 +1807,50 @@
                         else if (model.APPLY_CODE.Equals("5"))
                         {
                             //0-鑴辨満鐘舵�锛�-寰呮満鐘舵�锛�-杩愯涓�   寰呮満涓旀棤鎵樼洏涓斿厑璁告斁妗嗘墠璧�-                            if (plcDeviceTable.workMode == 1 && plcDeviceTable.lightAction == 0 && plcDeviceTable.requestPut)
+                            if ((reservoirs1.deviceNo == "1" && plcDeviceTable.requestPut1) ||
+                                (reservoirs1.deviceNo == "2" && plcDeviceTable.requestPut2))
                             {
                                 LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜�鍏佽鏀炬");
                                 return new safeResult() { code = "0", msg = "success" };
                             }
                         }
+                        //鍙栬揣绂诲紑
+                        else if (model.APPLY_CODE.Equals("4"))
+                        {
+                            int offsetAddr = 8;
+                            if (reservoirs1.deviceNo == "1")
+                            {
+                                offsetAddr = 1;
+                            }
+                            else if (reservoirs1.deviceNo == "2")
+                            {
+                                offsetAddr = 3;
+                            }
+                            LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜掑啓鍏reservoirs1.deviceNo}锛寋offsetAddr}");
+                            S7Helper.WriteDouble(reservoirs1.deviceNo, 9, 182, offsetAddr, 1);
+                            LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜�鍙栨绂诲紑");
+                            return new safeResult() { code = "0", msg = "success" };
+                        }
+                        //鍗歌揣绂诲紑
+                        else if (model.APPLY_CODE.Equals("8"))
+                        {
+                            int offsetAddr = 8;//闅忎究缁欎竴涓�+                            if (reservoirs1.deviceNo == "1")
+                            {
+                                offsetAddr = 0;
+                            }
+                            else if (reservoirs1.deviceNo == "2")
+                            {
+                                offsetAddr = 2;
+                            }
+                            LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜掑啓鍏reservoirs1.deviceNo}锛寋offsetAddr}");
+                            S7Helper.WriteDouble(reservoirs1.deviceNo, 9, 182, offsetAddr, 1);
+                            LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜�鍙栨绂诲紑");
+                            return new safeResult() { code = "0", msg = "success" };
+                        }
+
                     }
                 }
-
-                //TcpClient tcpClient = new TcpClient();
-                ////鍙戦�淇″彿鍐欒姹傚紑闂�-                //var str = tcpClient.WriteSingleRegisterRtu("01050000FF008C3A", reservoirs.ip, int.Parse(reservoirs.port));
-                ////鍙戦�淇″彿璇婚棬鐘舵�
-                //var x0bool = tcpClient.ReadInputRegistersRtu("010200000001B9CA", reservoirs.ip, int.Parse(reservoirs.port));
-                ////濡傛灉寮�棬鍒颁綅
-                //if (x0bool)
-                //{
-                //    return new safeResult() { code = "0", msg = "success" };
-                //}
-                ////璇锋眰绂诲紑
-                //else if (model.APPLY_CODE.Equals("8"))
-                //{
-                //    ////鍙戦�淇″彿鍐欒姹傚叧闂�-                //    //var str = tcpClient.WriteSingleRegisterRtu("010500000000CDCA", reservoirs.ip, int.Parse(reservoirs.port));
-                //    //var str2 = tcpClient.WriteSingleRegisterRtu("01050001FF00DDFA", reservoirs.ip, int.Parse(reservoirs.port));
-                //    ////鍙戦�淇″彿璇婚棬鐘舵�
-                //    //var x0bool = tcpClient.ReadInputRegistersRtu("010200010001E80A", reservoirs.ip, int.Parse(reservoirs.port));
-                //    ////濡傛灉闂ㄥ凡鍏�-                //    //if (x0bool)
-                //    //{
-                //    //    return new safeResult() { code = "0", msg = "success" };
-                //    //}
-
-                //}
                 return result;
             }
             catch (Exception ex)
@@ -1778,6 +1861,59 @@
             }
         }
 
+        private static void safeAssistant(int code,int res) {
+            //2鍗歌揣瀹屾垚纭
+            if (res != 2)
+            {
+                //鍗歌揣瀹屾垚淇″彿
+                S7Helper.WriteInt(50, 0, (short)(code * 10 + 1));
+                Thread.Sleep(3000);
+                safeAssistant(code,res);
+            }
+            else
+            {
+                S7Helper.WriteInt(50, 0, (short)(code * 10));
+            }
+
+        }
+
+        /// <summary>
+        /// 鎸夐挳鎺у埗鏈嶅姟寮�叧
+        /// </summary>
+        /// <param name="isusing.S_STATUS">鏈嶅姟鐘舵�</param>
+        /// <param name="isusing.S_TYPE">鏈嶅姟绫诲瀷</param>
+        /// <returns></returns>
+        internal static Results switchButton(Isusing isusing)
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            var result = new Results() { Code = "1", Message = $"鏈嶅姟鐘舵�澶辫触锛�, Data = null };
+            var isusinglist = db.Queryable<Isusing>().Where(a => a.S_TYPE == isusing.S_TYPE).First();
+            isusinglist.S_STATUS = isusing.S_STATUS;
+            var res = db.Updateable(isusinglist).UpdateColumns(it => it.S_STATUS).ExecuteCommand() > 0;
+            if (res)
+            {
+                return new Results() { Code = "0", Message = $"鏈嶅姟鐘舵�淇敼鎴愬姛锛�, Data = null };
+
+            }
+            return result;
+        }
+        //tcp鍙戦�淇″彿 娴嬭瘯鐢�+        internal static Results tcpSend(string str)
+        {
+            var reservoirs = Settings.SafeInteractions.Where(s => s.code == 1).FirstOrDefault();
+            //娴嬭瘯鐢�+            LogHelper.Info($"RGV瀹夊叏浜や簰鍙戦�淇″彿{reservoirs.ip},{str}");
+            //鏃犵姸鎬佷俊鍙�+            bool res = PlcHelper.SendHex(reservoirs.ip, str);
+            if (res)
+            {
+                return new Results() { Code = "0", Message = $"鍙戦�鎴愬姛", Data = null };
+            }
+
+            return new Results() { Code = "1", Message = $"鍙戦�澶辫触", Data = null };
+        }
+
+
     }
 }
 
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/util/Settings.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/util/Settings.cs
index b75b64f..62f7d67 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/util/Settings.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/util/Settings.cs
@@ -195,6 +195,7 @@
         public class SafeInteraction
         {
             public string pointCode { get; set; }
+            public int code{ get; set; }
             public string ip { get; set; }
             public string type { get; set; }
             public string location { get; set; }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/wms/ContainerHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/wms/ContainerHelper.cs
index c6d587a..a04aa45 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/wms/ContainerHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/wms/ContainerHelper.cs
@@ -245,43 +245,43 @@
         /// <param name="batchNo"></param>
         /// <param name="qty"></param>
         /// <returns></returns>
-        internal static bool BindCntrItem(Container cntr, string itemCode, string batchNo, float qty, string putawayNo)
-        {
-            var res = false;
-            var db = new SqlHelper<object>().GetInstance();
-            try
-            {
-                db.BeginTran();
-                //1.鏌ョ湅鏄惁鏈夌浉鍚岀墿鏂欐壒娆$殑淇℃伅锛屽鏋滄湁瑕佺疮鍔狅紝涓嶅悓鎵规鐨勫彲浠ュ垎寮�-                var cir = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE == cntr.S_CODE && a.S_ITEM_CODE == itemCode && a.S_BATCH_NO == batchNo).First();
-                if (cir != null)
-                {
-                    cir.F_QTY += qty;
-                    db.Updateable(cir).UpdateColumns(it => new { it.F_QTY,it.S_CK }).ExecuteCommand();
-                }
-                else
-                {
-                    //2.鎻掑叆鏂扮殑瀹瑰櫒鐗╂枡淇℃伅锛堝鍣ㄥ彿涓嶅彉锛�-                    cir = new CntrItemDetail { S_CNTR_CODE = cntr.S_CODE.Trim(), S_BATCH_NO = batchNo, F_QTY = qty, S_ITEM_CODE = itemCode, S_PUTAWAY_NO = putawayNo};
-                    db.Insertable<CntrItemDetail>(cir).ExecuteCommand();
-                }
-                var count = db.Queryable<CntrItemDetail>().Count(a => a.S_CNTR_CODE == cntr.S_CODE);
-                cntr.N_DETAIL_COUNT = count;
-                cntr.C_ENABLE = "N";//鐮佺洏鍚庡皢鎵樼洏璁剧疆涓轰笉鍙敤鐘舵�锛屽叆搴撳悗鍙樻垚鍙敤
-                //db.Updateable(cntr).UpdateColumns(it => new { it.N_DETAIL_COUNT, it.C_ENABLE, it.S_SRC }).ExecuteCommand();
-                db.Updateable(cntr).UpdateColumns(it => new { it.N_DETAIL_COUNT, it.C_ENABLE }).ExecuteCommand();
+        //internal static bool BindCntrItem(Container cntr, string itemCode, string batchNo, float qty, string putawayNo)
+        //{
+        //    var res = false;
+        //    var db = new SqlHelper<object>().GetInstance();
+        //    try
+        //    {
+        //        db.BeginTran();
+        //        //1.鏌ョ湅鏄惁鏈夌浉鍚岀墿鏂欐壒娆$殑淇℃伅锛屽鏋滄湁瑕佺疮鍔狅紝涓嶅悓鎵规鐨勫彲浠ュ垎寮�+        //        var cir = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE == cntr.S_CODE && a.S_ITEM_CODE == itemCode && a.S_BATCH_NO == batchNo).First();
+        //        if (cir != null)
+        //        {
+        //            cir.F_QTY += qty;
+        //            db.Updateable(cir).UpdateColumns(it => new { it.F_QTY,it.S_CK }).ExecuteCommand();
+        //        }
+        //        else
+        //        {
+        //            //2.鎻掑叆鏂扮殑瀹瑰櫒鐗╂枡淇℃伅锛堝鍣ㄥ彿涓嶅彉锛�+        //            cir = new CntrItemDetail { S_CNTR_CODE = cntr.S_CODE.Trim(), S_BATCH_NO = batchNo, F_QTY = qty, S_ITEM_CODE = itemCode, S_PUTAWAY_NO = putawayNo};
+        //            db.Insertable<CntrItemDetail>(cir).ExecuteCommand();
+        //        }
+        //        var count = db.Queryable<CntrItemDetail>().Count(a => a.S_CNTR_CODE == cntr.S_CODE);
+        //        cntr.N_DETAIL_COUNT = count;
+        //        cntr.C_ENABLE = "N";//鐮佺洏鍚庡皢鎵樼洏璁剧疆涓轰笉鍙敤鐘舵�锛屽叆搴撳悗鍙樻垚鍙敤
+        //        //db.Updateable(cntr).UpdateColumns(it => new { it.N_DETAIL_COUNT, it.C_ENABLE, it.S_SRC }).ExecuteCommand();
+        //        db.Updateable(cntr).UpdateColumns(it => new { it.N_DETAIL_COUNT, it.C_ENABLE }).ExecuteCommand();
 
-                db.CommitTran();
-                res = true;
-            }
-            catch (Exception ex)
-            {
-                db.RollbackTran();
-                Console.WriteLine(ex.Message);
-            }
+        //        db.CommitTran();
+        //        res = true;
+        //    }
+        //    catch (Exception ex)
+        //    {
+        //        db.RollbackTran();
+        //        Console.WriteLine(ex.Message);
+        //    }
 
-            return res;
-        }
+        //    return res;
+        //}
 
         ///// <summary>
         ///// 鐗╂枡淇℃伅缁戝畾鍒版弧瀹瑰櫒涓�@@ -621,6 +621,7 @@
             var db = new SqlHelper<object>().GetInstance();
             try
             {
+                LogHelper.Info($"BindCntrItem=============");
                 db.BeginTran();
                 var cir = new CntrItemDetail { S_CNTR_CODE = trayCode, S_ITEM_CODE = itemCode, S_ITEM_NAME = itemName};
                 db.Insertable<CntrItemDetail>(cir).ExecuteCommand();
@@ -630,6 +631,7 @@
             }
             catch (Exception ex)
             {
+                LogHelper.Error("BindCntrItem:" + ex.Message, ex);
                 db.Ado.RollbackTran();
             }
             return res;

--
Gitblit v1.9.1