From 3b87f36219202b4cec47840bd9f56fdbe53e7d04 Mon Sep 17 00:00:00 2001
From: DESKTOP-9BNTV8O <DESKTOP-9BNTV8O@163.com>
Date: 星期二, 11 三月 2025 20:49:17 +0800
Subject: [PATCH] 初版提交

---
 Admin.NET/WCS.Application/PLC/PLCService.cs | 1730 ++++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 1,304 insertions(+), 426 deletions(-)

diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs
index c946757..d905aec 100644
--- a/Admin.NET/WCS.Application/PLC/PLCService.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -20,6 +20,7 @@
 namespace WCS.Application;
 public static class PLCService
 {
+    private static readonly object OLock = new object();
 
     private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId);
 
@@ -54,7 +55,7 @@
         {
             Log.Error(ex.Message, ex);
         }
-    }
+    } 
     /// <summary>
     /// 璺烘満涓氬姟澶勭悊
     /// </summary>
@@ -69,7 +70,7 @@
                 // 璺烘満绌洪棽锛岃幏鍙栧嚭搴撲换鍔°�佺Щ搴撲换鍔�
                 {
                     // 鑾峰彇浠诲姟淇℃伅
-                    var modTask = _db.Queryable<WcsTask>().OrderBy(m => m.Levels, OrderByType.Asc).OrderBy(m => m.CreateTime)
+                    var modTask = _db.Queryable<WcsTask>().OrderBy(m => m.Levels, OrderByType.Asc).OrderBy(m => m.CreateTime, OrderByType.Asc)
                         .First(s => s.Status == TaskStatusEnum.Wait && (s.TaskType == TaskTypeEnum.Out || s.TaskType == TaskTypeEnum.Move)
                         && s.StartRoadway == modDevice.StationNum);
                     if (modTask == null)
@@ -85,6 +86,7 @@
                     PlcTaskInfo taskInfo = new PlcTaskInfo();
                     if (modTask.TaskType == TaskTypeEnum.Move)
                     {
+                        // 绉诲簱鐩爣鍦板潃
                         taskInfo = PLCCommon.GetEndPai(modTask.EndLocate.Substring(1, 2), modTask.EndLocate.Substring(2, 2),
                                     modTask.EndLocate.Substring(0, 2), modTask.EndLocate.Substring(4, 2),
                                     modTask.EndLocate.Substring(6, 2));
@@ -92,13 +94,88 @@
                     }
                     else 
                     {
-                        // 鏍规嵁鐩爣鍦板潃鍜屽贩閬撹幏鍙栨斁璐у伐浣嶅搴旂殑鎺掑垪灞�
+                        // 鏍规嵁鐩爣鍦板潃鍜屽贩閬撹幏鍙栧嚭搴撳彛瀵瑰簲鐨勬斁璐у伐浣嶅搴旂殑鎺掑垪灞�
                         taskInfo = PLCCommon.GetCTaskInfo(modTask.EndLocate, ((int)modTask.TaskType).ToString(),
                             modTask.StartRoadway, modTask.EndRoadway);
 
                         // 鐩爣宸ヤ綅涓嶄负null锛岄渶鍏堝垽鏂斁璐у伐浣嶆槸鍚︾┖闂�
                         if (!string.IsNullOrEmpty(taskInfo.EndStation))
                         {
+                            #region 璺ㄨ泛鏈轰换鍔″鐞�     ###########
+                            // 鍒ゆ柇鐩爣浣嶇疆鏄惁鏄法璺烘満鍑哄簱宸ヤ綅
+                            if (modTask.EndLocate == "266" && modTask.StartRoadway != "R05")
+                            {
+                                // 鍒ゆ柇鍏ュ簱宸ヤ綅鏄惁瀛樺湪鏈畬鎴愮殑鍏ュ簱浠诲姟
+                                var modInTask = _db.Queryable<WcsTask>().OrderBy(m => m.Levels, OrderByType.Asc).OrderBy(m => m.CreateTime, OrderByType.Asc)
+                                    .First(s => (s.Status == TaskStatusEnum.Wait || s.Status == TaskStatusEnum.Doing) && s.TaskType == TaskTypeEnum.In
+                                    && s.StartLocate == modTask.EndLocate);
+                                if (modInTask != null) 
+                                {
+                                    // 鐩爣鍑哄簱鍙f湁瀵瑰簲鐨勫叆搴撲换鍔¤烦鍑哄惊鐜紝绛夊緟鍏ュ簱浠诲姟瀹屾垚銆�
+                                    break;
+                                }
+
+                                // 鏍规嵁鐩爣宸ヤ綅鍙疯幏鍙栬緭閫佺嚎閾炬帴
+                                var plcCconn = PLCCommon.GetPlcIp(modTask.EndLocate);
+                                // 璇诲彇鐩爣宸ヤ綅褰撳墠鐘舵��
+                                var ConveyorMod = PLCTaskAction.plcDevices.First(m => m.StationNum == modTask.EndLocate && m.DeviceType == DeviceTypeEnum.Business);
+                                var (result, value) = plcCconn.GetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.PlcPos);
+                                if (result.IsSucceed) 
+                                {
+                                    if (value.ToString() != "120") 
+                                    {
+                                        // 鐩爣宸ヤ綅琚崰鐢ㄨ烦鍑哄惊鐜紝绛夊緟宸ヤ綅閲婃斁銆�
+                                        break;
+                                    }
+                                }
+
+                                string aaa = PLCCommon.RoadwayToOutStationNum(modTask.StartRoadway, "1");  // 鑾峰彇1妤间腑涓撳伐浣嶅彿
+                                taskInfo.Ip = PLCCommon.GetPlcIp(aaa).PlcIP;
+                                taskInfo.EndPai = "2";
+                                taskInfo.EndLie = "60";
+                                taskInfo.EndCeng = "1";
+                                taskInfo.EndStation = aaa;
+
+                            }
+
+                            if (modTask.EndLocate == "265" && modTask.StartRoadway != "R05" && modTask.StartRoadway != "R06") 
+                            {
+                                // 鍒ゆ柇鍏ュ簱宸ヤ綅鏄惁瀛樺湪鏈畬鎴愮殑鍏ュ簱浠诲姟
+                                var modInTask = _db.Queryable<WcsTask>().OrderBy(m => m.Levels, OrderByType.Asc).OrderBy(m => m.CreateTime, OrderByType.Asc)
+                                    .First(s => (s.Status == TaskStatusEnum.Wait || s.Status == TaskStatusEnum.Doing) && s.TaskType == TaskTypeEnum.In
+                                    && s.StartLocate == modTask.EndLocate);
+                                if (modInTask != null)
+                                {
+                                    // 鐩爣鍑哄簱鍙f湁瀵瑰簲鐨勫叆搴撲换鍔¤烦鍑哄惊鐜紝绛夊緟鍏ュ簱浠诲姟瀹屾垚銆�
+                                    break;
+                                }
+
+                                // 鏍规嵁鐩爣宸ヤ綅鍙疯幏鍙栬緭閫佺嚎閾炬帴
+                                var plcCconn = PLCCommon.GetPlcIp(modTask.EndLocate);
+                                // 璇诲彇鐩爣宸ヤ綅褰撳墠鐘舵��
+                                var ConveyorMod = PLCTaskAction.plcDevices.First(m => m.StationNum == modTask.EndLocate && m.DeviceType == DeviceTypeEnum.Business);
+                                var (result, value) = plcCconn.GetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.PlcPos);
+                                if (result.IsSucceed)
+                                {
+                                    if (value.ToString() != "120")
+                                    {
+                                        // 鐩爣宸ヤ綅琚崰鐢ㄨ烦鍑哄惊鐜紝绛夊緟宸ヤ綅閲婃斁銆�
+                                        break;
+                                    }
+                                }
+
+                                string aaa = PLCCommon.RoadwayToOutStationNum(modTask.StartRoadway, "1");  // 鑾峰彇1妤间腑涓撳伐浣嶅彿
+                                taskInfo.Ip = PLCCommon.GetPlcIp(aaa).PlcIP;
+                                taskInfo.EndPai = "2";
+                                taskInfo.EndLie = "60";
+                                taskInfo.EndCeng = "1";
+                                taskInfo.EndStation = aaa;
+                            }
+
+                            // 鍐欏叆鏀捐揣宸ヤ綅鍥哄畾鍦板潃
+                            
+                            #endregion
+
                             // 鎵撳紑瀵瑰簲鐨勮緭閫佺嚎杩炴帴
                             var plcConveyorConn = PLCTaskAction.listPlcConn.First(m => m.PlcIP == taskInfo.Ip);
                             if (plcConveyorConn.Connected)
@@ -110,15 +187,19 @@
                                 var (result, value) = plcConveyorConn.GetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.PlcPos);
                                 if (result.IsSucceed)
                                 {
-                                    if (value.ToString() != "720")              // 720:鏀捐揣绌轰綅绌洪棽锛屽彲鏀捐揣
+                                    if (value.ToString() != "720")              // 720:鏀捐揣绌轰綅绌洪棽锛屽彲鏀捐揣  liudl 绋嬪簭璋冭瘯瀹屾垚鍚庢斁寮�
                                     {
                                         Log.Error(string.Format("浠诲姟鍙�:{0}:鏀捐揣宸ヤ綅鍗犵敤锛岀◢鍚庢墽琛屻��", modTask.TaskNo));
                                         break;
                                     }
-                                    else if (value.ToString() == "720") 
+                                    else if (value.ToString() == "720")
                                     {
                                         // 鑻ョ┖闂叉彁鍓嶅崰鐢ㄦ宸ヤ綅锛屽悓宸ヤ綅鍑哄叆鍏敤鍙� 鏀惧紑姝ょ▼搴�
-                                        // var ret = plcConn.SetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.WcsPos, "730");
+                                        var ret = plcConveyorConn.SetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.WcsPos, "730");
+                                        if (!ret.IsSucceed) 
+                                        {
+                                            break;
+                                        }
                                     }
                                 }
                                 else
@@ -133,7 +214,7 @@
                         }
                     }
 
-                    // 鑾峰彇杞崲鍚庣殑璧峰鎺掑垪灞� 06010101
+                    // 鑾峰彇杞崲鍚庣殑璧峰鎺掑垪灞� 06010101    // 绉诲簱鏃惰捣濮嬫帓鍒楀眰
                     PlcTaskInfo startTaskInfo = PLCCommon.GetEndPai(modTask.StartRoadway.Substring(1, 2), modTask.StartLocate.Substring(2, 2),
                     modTask.StartLocate.Substring(0, 2), modTask.StartLocate.Substring(4, 2),
                     modTask.StartLocate.Substring(6, 2));
@@ -152,6 +233,13 @@
                     listResult.Add(plcConn.SetPlcDBValue(modPosColumn.PosType, modDevice.DbNumber, modPosColumn.PlcPos, startTaskInfo.EndLie));
                     var modPosStorey = modDevice.listStation.FirstOrDefault(s => s.Text == "鍙栬揣灞�");
                     listResult.Add(plcConn.SetPlcDBValue(modPosStorey.PosType, modDevice.DbNumber, modPosStorey.PlcPos, startTaskInfo.EndCeng));
+
+                    if (modTask.TaskType == TaskTypeEnum.Out) 
+                    {
+                        var modEndNo = modDevice.listStation.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅");
+                        listResult.Add(plcConn.SetPlcDBValue(modEndNo.PosType, modDevice.DbNumber, modEndNo.PlcPos, taskInfo.EndStation));
+                    }
+
                     // 鐩爣鏀捐揣宸ヤ綅(鍥哄畾鎺掑垪灞�)
                     var modPosEndRow = modDevice.listStation.FirstOrDefault(s => s.Text == "鏀捐揣鎺�");
                     listResult.Add(plcConn.SetPlcDBValue(modPosEndRow.PosType, modDevice.DbNumber, modPosEndRow.PlcPos, taskInfo.EndPai));
@@ -225,10 +313,7 @@
                 {
                     // 鑾峰彇璺烘満鐐逛綅閰嶇疆
                     var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�");
-                    var (res, val) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosTask.PlcPos);
-
-                    var modPosEndStation = modDevice.listStation.FirstOrDefault(m => m.Text == "鐩殑宸ヤ綅");
-                    var (endStationRes, endStation) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosEndStation.PlcPos);
+                    var (res, val) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos);
                     if (res.IsSucceed)
                     {
                         // 鑾峰彇浠诲姟淇℃伅
@@ -236,7 +321,7 @@
                         var modTask = _db.Queryable<WcsTask>().First(m => m.Status == TaskStatusEnum.Doing && m.TaskNo == tasknoVal && m.IsDelete == false);
                         if (modTask == null)
                         {
-                            Log.Error(string.Format("PLC鎺у埗瀛�840:鏈壘鍒板搴旂殑浠诲姟銆�"));
+                            Log.Error(string.Format($"PLC鎺у埗瀛�840:鏈壘鍒板搴旂殑浠诲姟銆備换鍔″彿锛歿tasknoVal}"));
                             break;
                         }
                         // 璁板綍浠诲姟鏄庣粏
@@ -250,19 +335,24 @@
                             StartLocat = modTask.StartLocate,
                         };
 
+
+                        var modPosEndStation = modDevice.listStation.FirstOrDefault(m => m.Text == "鐩殑宸ヤ綅");
+                        var (endRes, endStation) = plcConn.GetPlcDBValue(modPosEndStation.PosType, modDevice.DbNumber, modPosEndStation.PlcPos);
+                        
+                        var modPosStartStation = modDevice.listStation.FirstOrDefault(m => m.Text == "璧峰宸ヤ綅");
+                        var (startStationRes, startStationVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.Short, modDevice.DbNumber, modPosStartStation.PlcPos);
+
                         if (modTask.TaskType == TaskTypeEnum.In)
                         {
                             // 鑾峰彇璺烘満璧峰宸ヤ綅鐐逛綅閰嶇疆,璇诲彇璧峰宸ヤ綅
-                            var modPosStartStation = modDevice.listStation.FirstOrDefault(m => m.Text == "璧峰宸ヤ綅");
-                            var (startStationRes, startStationVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.Short, modDevice.DbNumber, modPosStartStation.PlcPos);
                             if (startStationRes.IsSucceed)
                             {
                                 // 鏍规嵁宸ヤ綅鍙疯幏鍙栧搴旂殑杈撻�佺嚎IP
-                                PLCUtil plcConveyorConn = PLCCommon.GetPlcIp(startStationVal.ToString());
+                                PLCUtil plcConveyorConn = PLCCommon.GetPlcIp(startStationVal.ToString().PadLeft(3, '0'));
                                 if (plcConveyorConn.Connected)
                                 {
                                     // 鍚戝彇璐у伐浣嶅啓鍏ユ祦绋嬪瓧640  鍙栬揣宸插畬鎴�
-                                    var ConveyorMod = PLCTaskAction.plcDevices.First(m => m.StationNum == startStationVal.ToString()
+                                    var ConveyorMod = PLCTaskAction.plcDevices.First(m => m.StationNum == startStationVal.ToString().PadLeft(3, '0')
                                                             && m.DeviceType == DeviceTypeEnum.Business && m.IsDelete == false);
 
                                     var modcTaskMonitor = new WcsTaskMonitor()
@@ -280,75 +370,159 @@
                                     var (ress, va1s) = plcConveyorConn.GetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.WcsPos);
                                     if (va1s.ToString() == "630") 
                                     {
-                                        modcTaskMonitor.InteractiveMsg = string.Format("宸ヤ綅锛歿0},鍐欏叆鍙栬揣瀹屾垚:640", startStationVal);
-                                        // 鎻掑叆浜や簰鏃ュ織
-                                        _db.Insertable(modcTaskMonitor).ExecuteCommand();
-                                    }
+                                        var retc = plcConveyorConn.SetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.WcsPos, "640");
+                                        if (retc.IsSucceed)
+                                        {
+                                            modcTaskMonitor.InteractiveMsg = string.Format("宸ヤ綅锛歿0},鍐欏叆鍙栬揣瀹屾垚:640", startStationVal);
+                                            // 鎻掑叆浜や簰鏃ュ織
+                                            _db.Insertable(modcTaskMonitor).ExecuteCommand();
+                                        }
+                                        else
+                                        {
+                                            modcTaskMonitor.InteractiveMsg = string.Format("宸ヤ綅锛歿0},鍐欏叆鍙栬揣瀹屾垚640澶辫触", startStationVal);
+                                            // 鎻掑叆浜や簰鏃ュ織
+                                            _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
+                                            //涓嬪彂浠诲姟鏃ュ織
+                                            HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+                                            break;
+                                        }
 
-                                    var retc = plcConveyorConn.SetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.WcsPos, "640");
-
-                                    if (!retc.IsSucceed)
-                                    {
-                                        modcTaskMonitor.InteractiveMsg = string.Format("宸ヤ綅锛歿0},鍐欏叆鍙栬揣瀹屾垚640澶辫触", startStationVal);
-                                        // 鎻掑叆浜や簰鏃ュ織
-                                        _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
                                         //涓嬪彂浠诲姟鏃ュ織
                                         HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+                                        // 璇诲彇wcs鎺у埗瀛�
+                                        var (resss, va1ss) = plcConn.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos);
+                                        if (va1ss.ToString() == "830")
+                                        {
+                                            modInsertTaskMonitor.InteractiveMsg = string.Format("宸ヤ綅锛歿0}璺烘満鍙栬揣瀹屾垚鍐欏叆850", startStationVal);
+                                            modInsertTaskMonitor.EndLocat = modTask.EndLocate;                  // 鐩爣鍌ㄤ綅鍦板潃
+                                                                                                                // 鎻掑叆浜や簰鏃ュ織
+                                            _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
+                                        }
+
+                                        // 鍐欏叆娴佺▼鎺у埗瀛�
+                                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "850");
+                                        if (!ret.IsSucceed)
+                                        {
+                                            modInsertTaskMonitor.InteractiveMsg = string.Format("宸ヤ綅锛歿0}璺烘満鍙栬揣瀹屾垚鍐欏叆850澶辫触,绛夊緟鍐嶆鍐欏叆銆�", startStationVal);
+                                            modInsertTaskMonitor.EndLocat = modTask.EndLocate;                  // 鐩爣鍌ㄤ綅鍦板潃
+                                                                                                                // 鎻掑叆浜や簰鏃ュ織
+                                            _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
+                                            break;              // 鍐欏叆澶辫触璺冲嚭绛夊緟鍐嶆鍐欏叆
+                                        }
+
+                                        //涓嬪彂浠诲姟鏃ュ織
+                                        HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+
+                                    }
+                                }
+                            }
+                        }
+                        else if (modTask.TaskType == TaskTypeEnum.Out)
+                        {
+                            #region 璺烘満杞繍浠诲姟澶勭悊
+                            if (modTask.StartRoadway != modDevice.StationNum)
+                            {// 杞繍浠诲姟
+                                // 鍐欏叆璧峰宸ヤ綅640
+                                string stationFrom = startStationVal.ToString();
+                                var plcItemconn = PLCCommon.GetPlcIp(stationFrom);
+                                if (plcItemconn.Connected)
+                                {
+                                    // 鍐欏叆璧峰宸ヤ綅640
+                                    var modFrom = PLCTaskAction.plcDevices.First(m => m.IsDelete == false && m.StationNum == stationFrom);
+                                    var retFrom = plcItemconn.SetPlcDBValue(modFrom.PosType, modFrom.DbNumber, modFrom.WcsPos, "640");
+                                    if (retFrom.IsSucceed)
+                                    {
+                                        Log.Error(stationFrom + "涓浆宸ヤ綅鍐欏叆640");
+                                    }
+                                    else
+                                    {
                                         break;
+                                    }
+
+                                    // 璇诲彇wcs鎺у埗瀛�
+                                    var (resss, va1ss) = plcConn.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos);
+                                    if (va1ss.ToString() == "830")
+                                    {
+                                        // 璁板綍浠诲姟鏄庣粏
+                                        modInsertTaskMonitor.InteractiveMsg = string.Format("鍌ㄤ綅鍦板潃锛歿0}鍙栬揣瀹屾垚鍐欏叆850", modTask.StartLocate);
+                                        modInsertTaskMonitor.EndLocat = endStation.ToString();                  // 鏀捐揣宸ヤ綅
+                                    }
+                                    // 鍐欏叆娴佺▼鎺у埗瀛�
+                                    var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "850");
+                                    if (!ret.IsSucceed)
+                                    {
+                                        modInsertTaskMonitor.InteractiveMsg = string.Format("鍌ㄤ綅鍦板潃锛歿0}鍙栬揣瀹屾垚鍐欏叆850澶辫触,绛夊緟鍐嶆鍐欏叆銆�", modTask.StartLocate);
+                                        modInsertTaskMonitor.EndLocat = modTask.EndLocate;                  // 鐩爣鍌ㄤ綅鍦板潃
+                                                                                                            // 鎻掑叆浜や簰鏃ュ織
+                                        _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
+                                        break;              // 鍐欏叆澶辫触璺冲嚭绛夊緟鍐嶆鍐欏叆
                                     }
 
                                     //涓嬪彂浠诲姟鏃ュ織
                                     HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
                                 }
+                            }
+                            else 
+                            {
+                                //if (modTask.EndLocate == "266" && modTask.StartRoadway == "R06")
+                                //{
+                                //    // R06宸烽亾鍗曠嫭杞繍浠诲姟銆�
+                                //    // 鍐欏叆璧峰宸ヤ綅640
+                                //    string stationFrom = startStationVal.ToString();
+                                //    var plcItemconn = PLCCommon.GetPlcIp(stationFrom);
+                                //    var modFrom = PLCTaskAction.plcDevices.First(m => m.IsDelete == false && m.StationNum == stationFrom);
+                                //    var retFrom = plcItemconn.SetPlcDBValue(modFrom.PosType, modFrom.DbNumber, modFrom.WcsPos, "640");
+                                //    if (retFrom.IsSucceed)
+                                //    {
+                                //        Log.Error(stationFrom + "涓浆宸ヤ綅鍐欏叆640");
+                                //    }
+                                //    else
+                                //    {
+                                //        break;
+                                //    }
 
-                                // 璇诲彇wcs鎺у埗瀛�
-                                var (resss, va1ss) = plcConn.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos);
-                                if (va1ss.ToString() == "830") 
-                                {
-                                    modInsertTaskMonitor.InteractiveMsg = string.Format("宸ヤ綅锛歿0}璺烘満鍙栬揣瀹屾垚鍐欏叆850", startStationVal);
-                                    modInsertTaskMonitor.EndLocat = modTask.EndLocate;                  // 鐩爣鍌ㄤ綅鍦板潃
-                                                                                                        // 鎻掑叆浜や簰鏃ュ織
-                                    _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
-                                }
+                                //    // 璇诲彇wcs鎺у埗瀛�
+                                //    var (resss, va1ss) = plcConn.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos);
+                                //    if (va1ss.ToString() == "830")
+                                //    {
+                                //        // 璁板綍浠诲姟鏄庣粏
+                                //        modInsertTaskMonitor.InteractiveMsg = string.Format("鍌ㄤ綅鍦板潃锛歿0}鍙栬揣瀹屾垚鍐欏叆850", modTask.StartLocate);
+                                //        modInsertTaskMonitor.EndLocat = endStation.ToString();                  // 鏀捐揣宸ヤ綅
+                                //    }
+                                //    // 鍐欏叆娴佺▼鎺у埗瀛�
+                                //    var ret11 = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "850");
+                                //    if (!ret11.IsSucceed)
+                                //    {
+                                //        modInsertTaskMonitor.InteractiveMsg = string.Format("鍌ㄤ綅鍦板潃锛歿0}鍙栬揣瀹屾垚鍐欏叆850澶辫触,绛夊緟鍐嶆鍐欏叆銆�", modTask.StartLocate);
+                                //        modInsertTaskMonitor.EndLocat = modTask.EndLocate;                  // 鐩爣鍌ㄤ綅鍦板潃
+                                //                                                                            // 鎻掑叆浜や簰鏃ュ織
+                                //        _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
+                                //        break;              // 鍐欏叆澶辫触璺冲嚭绛夊緟鍐嶆鍐欏叆
+                                //    }
+
+                                //    //涓嬪彂浠诲姟鏃ュ織
+                                //    HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+
+                                //    break;
+                                //}
+
 
                                 // 鍐欏叆娴佺▼鎺у埗瀛�
                                 var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "850");
                                 if (!ret.IsSucceed)
                                 {
-                                    modInsertTaskMonitor.InteractiveMsg = string.Format("宸ヤ綅锛歿0}璺烘満鍙栬揣瀹屾垚鍐欏叆850澶辫触,绛夊緟鍐嶆鍐欏叆銆�", startStationVal);
-                                    modInsertTaskMonitor.EndLocat = modTask.EndLocate;                  // 鐩爣鍌ㄤ綅鍦板潃
-                                                                                                        // 鎻掑叆浜や簰鏃ュ織
-                                    _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
                                     break;              // 鍐欏叆澶辫触璺冲嚭绛夊緟鍐嶆鍐欏叆
                                 }
 
+                                modInsertTaskMonitor.InteractiveMsg = string.Format("鍌ㄤ綅鍦板潃锛歿0}鍙栬揣瀹屾垚", modTask.StartLocate);
+                                modInsertTaskMonitor.EndLocat = endStation;                  // 鐩爣鍌ㄤ綅
+
+                                // 鎻掑叆浜や簰鏃ュ織
+                                _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
                                 //涓嬪彂浠诲姟鏃ュ織
                                 HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
                             }
-                        }
-                        else if (modTask.TaskType == TaskTypeEnum.Out)
-                        {
-                            // 璇诲彇wcs鎺у埗瀛�
-                            var (resss, va1ss) = plcConn.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos);
-                            if (va1ss.ToString() == "830")
-                            {
-                                // 璁板綍浠诲姟鏄庣粏
-                                modInsertTaskMonitor.InteractiveMsg = string.Format("鍌ㄤ綅鍦板潃锛歿0}鍙栬揣瀹屾垚鍐欏叆850", modTask.StartLocate);
-                                modInsertTaskMonitor.EndLocat = endStation;                  // 鏀捐揣宸ヤ綅
-                            }
-                            // 鍐欏叆娴佺▼鎺у埗瀛�
-                            var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "850");
-                            if (!ret.IsSucceed)
-                            {
-                                modInsertTaskMonitor.InteractiveMsg = string.Format("鍌ㄤ綅鍦板潃锛歿0}鍙栬揣瀹屾垚鍐欏叆850澶辫触,绛夊緟鍐嶆鍐欏叆銆�", modTask.StartLocate);
-                                modInsertTaskMonitor.EndLocat = modTask.EndLocate;                  // 鐩爣鍌ㄤ綅鍦板潃
-                                                                                                    // 鎻掑叆浜や簰鏃ュ織
-                                _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
-                                break;              // 鍐欏叆澶辫触璺冲嚭绛夊緟鍐嶆鍐欏叆
-                            }
-
-                            //涓嬪彂浠诲姟鏃ュ織
-                            HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+                            #endregion
                         }
                         else
                         {
@@ -371,11 +545,11 @@
                     }
                 }
                 break;
-            case "860":
+            case "860":         //璺烘満鏀捐揣瀹屾垚
                 {
                     // 鑾峰彇璺烘満鐐逛綅閰嶇疆
                     var modPos860Task = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�");
-                    var (res, val) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPos860Task.PlcPos);
+                    var (res, val) = plcConn.GetPlcDBValue(modPos860Task.PosType, modDevice.DbNumber, modPos860Task.PlcPos);
                     // 鏍规嵁浠诲姟鍙疯幏鍙栦换鍔′俊鎭�
                     if (res.IsSucceed)
                     {
@@ -391,6 +565,86 @@
                         {
                             case TaskTypeEnum.In:
                                 {
+                                    #region 璺ㄨ泛鏈鸿浆杩愪换鍔″鐞�#####
+                                    // 鍒ゆ柇鏄惁璺ㄨ泛鏈鸿浆杩愪换鍔�
+                                    var modPos860endAddre = modDevice.listStation.FirstOrDefault(m => m.Text == "鐩殑宸ヤ綅");
+                                    var (ress, endVal) = plcConn.GetPlcDBValue(modPos860endAddre.PosType, modDevice.DbNumber, modPos860endAddre.PlcPos);
+                                    string endValStr = endVal.ToString().PadLeft(3, '0');
+                                    // 鏍规嵁宸烽亾銆佸眰鏁拌幏鍙栧叆搴撴斁璐у伐浣�
+                                    var inVal = PLCCommon.RoadwayToStationNum(modTask.EndRoadway, "1");
+                                    var inVal1 = PLCCommon.RoadwayToStationNum(modTask.EndRoadway, "2", modTask.StartLocate.ToString());
+
+                                    // 鏍规嵁褰撳墠璺烘満鏀捐揣宸ヤ綅瀵规瘮鐩爣宸烽亾鍏ュ簱鍙栬揣宸ヤ綅鍋氬姣旂‘璁ゆ槸鍚﹁浆杩愪换鍔°��
+                                    if (endValStr != inVal && endValStr != inVal1) 
+                                    {
+                                        // 鏍规嵁宸ヤ綅鍙疯幏鍙栬緭閫佺嚎閾炬帴
+                                        var plcCconn = PLCCommon.GetPlcIp(endValStr);
+                                        if (plcCconn.Connected) 
+                                        {
+                                            // 鍐欏叆杞繍淇℃伅
+                                            // 缁橮LC鍐欏叆浠诲姟鏁版嵁
+                                            var listResult = new List<Result>();
+
+                                            // 鏍规嵁宸ヤ綅鍙疯幏鍙栧伐浣嶄俊鎭�
+                                            var wcsDevice = PLCTaskAction.plcDevices.First(s => s.PlcId == plcCconn.PlcId && s.Level == DeviceLevelEnum.Station && s.StationNum == endValStr);
+                                            // 璇诲彇褰撳墠宸ヤ綅鍚勫亸绉婚噺鍊�
+                                            var listPos = PLCTaskAction.plcPositions.Where(s => s.DeviceId == wcsDevice.Id).ToList();
+
+                                            //浠诲姟鍙�
+                                            var modPosTask = listPos.FirstOrDefault(s => s.Text == "浠诲姟鍙�");
+                                            listResult.Add(plcCconn.SetPlcDBValue(modPosTask.PosType, wcsDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo));
+                                            //浠诲姟绫诲瀷
+                                            var modPosTaskType = listPos.FirstOrDefault(s => s.Text == "浠诲姟绫诲瀷");
+                                            listResult.Add(plcCconn.SetPlcDBValue(modPosTaskType.PosType, wcsDevice.DbNumber, modPosTaskType.PlcPos, ((int)modTask.TaskType).ToString()));
+                                            //鎵樼洏鍙�
+                                            var modPosPalletNo = listPos.FirstOrDefault(s => s.Text == "鎵樼洏鐮�");
+                                            listResult.Add(plcCconn.SetPlcDBValue(modPosPalletNo.PosType, wcsDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
+                                            //璧峰宸ヤ綅
+                                            var modPosLocatNo = listPos.FirstOrDefault(s => s.Text == "璧峰宸ヤ綅");
+                                            listResult.Add(plcCconn.SetPlcDBValue(modPosLocatNo.PosType, wcsDevice.DbNumber, modPosLocatNo.PlcPos, endValStr));
+                                            // 鐩爣宸ヤ綅
+                                            var modPosEndLocatNo = listPos.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅");
+                                            listResult.Add(plcCconn.SetPlcDBValue(modPosEndLocatNo.PosType, wcsDevice.DbNumber, modPosEndLocatNo.PlcPos, inVal));
+
+                                            // 鏄惁鍐欏叆鎴愬姛
+                                            if (listResult.All(s => s.IsSucceed))
+                                            {
+                                                var result = plcCconn.SetPlcDBValue(wcsDevice.PosType, wcsDevice.DbNumber, wcsDevice.WcsPos, "740");
+
+                                                if (result.IsSucceed)
+                                                {
+                                                    // 鍐欏叆璺烘満wcs鎺у埗瀛� 杩斿洖鍨涙満鎵ц瀹屾垚
+                                                    result = modDevice.PLCUtil.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "870");
+                                                    if (result.IsSucceed)
+                                                    {
+                                                        var modcTaskMonitor = new WcsTaskMonitor()
+                                                        {
+                                                            TaskNo = modTask.TaskNo,
+                                                            PlcId = wcsDevice.Id,
+                                                            PlcName = wcsDevice.Text,
+                                                            PalletNo = modTask.PalletNo,
+                                                            Status = TaskStatusEnum.Complete,
+                                                            StartLocat = "",
+                                                            EndLocat = modTask.EndRoadway,
+                                                            InteractiveMsg = $"鍐欏叆鎸囦护锛氭敹鍒拌泛鏈烘斁璐у畬鎴愶紱鏀捐揣{endValStr}宸ヤ綅===銆媨inVal}宸ヤ綅"
+                                                        };
+                                                        // 鎻掑叆浜や簰鏃ュ織
+                                                        _db.Insertable(modcTaskMonitor).ExecuteCommand();
+                                                        //涓嬪彂浠诲姟鏃ュ織
+                                                        HubUtil.PublicTaskMonitor(modcTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+
+                                                        break;
+                                                    }
+                                                }
+                                            }
+                                        }
+
+                                    }
+
+                                    // 鍚戝伐浣嶅啓鍏ワ紝褰撳墠宸ヤ綅鍒扮洰鏍囧贩閬撳叆搴撳彇璐у伐浣嶆祦绋嬨�傚啓鍏ユ祦绋嬫帶鍒跺瓧"740"
+
+                                    #endregion
+
                                     var res870 = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "870");
                                     if (!res870.IsSucceed)
                                     {
@@ -462,15 +716,51 @@
                                     string roadway = modTask.StartRoadway;
                                     // 浠庡嚭搴撲换鍔¤幏鍙栨斁璐у伐浣�
                                     string outCode = modTask.EndLocate;
+
+                                    #region 璺ㄨ泛鏈鸿浆杩愪换鍔�  ##########
+                                    var modPosStation = modDevice.listStation.FirstOrDefault(m => m.Text == "鐩殑宸ヤ綅");
+                                    var (ress, stationNum) = plcConn.GetPlcDBValue(modPosStation.PosType, modDevice.DbNumber, modPosStation.PlcPos);
+                                    if (!ress.IsSucceed) 
+                                    {
+                                        // 鑾峰彇褰撳墠鎵樼洏鎵�鍦ㄥ伐浣嶅け璐�
+                                        break;
+                                    }
+                                    // 鏍规嵁鐩爣鍦板潃鍜屽贩閬撹幏鍙栨斁璐у伐浣嶅搴旂殑鎺掑垪灞�
+                                    PlcTaskInfo taskInfo = PLCCommon.GetCTaskInfo(modTask.EndLocate, ((int)modTask.TaskType).ToString(),
+                                        modTask.StartRoadway, modTask.EndRoadway);
+
+
+                                    string stationNumstr = stationNum.ToString();
+                                    if (!taskInfo.EndStation.Contains(stationNumstr) && stationNumstr != "0") 
+                                    { // 鏄泛鏈轰腑涓撳伐浣� 
+                                        //taskInfo.EndStation = stationNumstr;
+
+                                        string roadwayto = "R05";
+                                        // 鏍规嵁鍑哄簱鍙f斁璐у伐浣嶈幏鍙栧搴旂殑涓浆宸烽亾
+                                        if (taskInfo.EndStation.Contains("277"))
+                                        {
+                                            roadwayto = "R05";
+                                        }
+                                        else if (taskInfo.EndStation.Contains("250"))
+                                        {
+                                            roadwayto = "R06";
+                                        }
+
+
+                                        // 鏍规嵁灞傛暟鍜屽贩閬撴暟纭畾涓笓宸ヤ綅
+                                        outCode = PLCCommon.RoadwayToStationNum(roadwayto, "1");
+                                    }
+                                    #endregion
+
+
                                     // 鏍规嵁宸ヤ綅鍙疯幏鍙栧搴旂殑杈撻�佺嚎IP
-                                    var plcConveyorConn = PLCCommon.GetPlcIp(outCode);
+                                    var plcConveyorConn = PLCCommon.GetPlcIp(stationNumstr);
                                     if (plcConveyorConn.Connected)
                                     {
-                                        // 鏍规嵁鐩爣鍦板潃鍜屽贩閬撹幏鍙栨斁璐у伐浣嶅搴旂殑鎺掑垪灞�
-                                        PlcTaskInfo taskInfo = PLCCommon.GetCTaskInfo(modTask.EndLocate, ((int)modTask.TaskType).ToString(),
-                                            modTask.StartRoadway, modTask.EndRoadway);
+                                        stationNumstr = stationNumstr.PadLeft(3, '0');
                                         // 鏍规嵁宸ヤ綅鍙疯幏鍙栧伐浣嶄俊鎭�
-                                        var wcsDevice = PLCTaskAction.plcDevices.First(s => s.PlcId == plcConveyorConn.PlcId && s.Level == DeviceLevelEnum.Station && s.StationNum == taskInfo.EndStation);
+                                        var wcsDevice = PLCTaskAction.plcDevices.First(s => s.PlcId == plcConveyorConn.PlcId 
+                                                && s.Level == DeviceLevelEnum.Station && s.StationNum == stationNumstr);
                                         // 璇诲彇褰撳墠宸ヤ綅鍚勫亸绉婚噺鍊�
                                         var listPos = PLCTaskAction.plcPositions.Where(s => s.DeviceId == wcsDevice.Id).ToList();
 
@@ -487,7 +777,7 @@
                                         listResult.Add(plcConveyorConn.SetPlcDBValue(modPosPalletNo.PosType, wcsDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
                                         //璧峰宸ヤ綅
                                         var modPosLocatNo = listPos.FirstOrDefault(s => s.Text == "璧峰宸ヤ綅");
-                                        listResult.Add(plcConveyorConn.SetPlcDBValue(modPosLocatNo.PosType, wcsDevice.DbNumber, modPosLocatNo.PlcPos, taskInfo.EndStation));
+                                        listResult.Add(plcConveyorConn.SetPlcDBValue(modPosLocatNo.PosType, wcsDevice.DbNumber, modPosLocatNo.PlcPos, stationNumstr));
                                         // 鐩爣宸ヤ綅
                                         var modPosEndLocatNo = listPos.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅");
                                         listResult.Add(plcConveyorConn.SetPlcDBValue(modPosEndLocatNo.PosType, wcsDevice.DbNumber, modPosEndLocatNo.PlcPos, outCode));
@@ -512,7 +802,7 @@
                                                         Status = TaskStatusEnum.Complete,
                                                         StartLocat = taskInfo.EndStation,
                                                         EndLocat = outCode,
-                                                        InteractiveMsg = $"鍐欏叆鎸囦护锛氭敹鍒拌泛鏈烘斁璐у畬鎴愶紱鏀捐揣{taskInfo.EndStation}宸ヤ綅===銆媨outCode}鍑哄簱鍙�"
+                                                        InteractiveMsg = $"鍐欏叆鎸囦护锛氭敹鍒拌泛鏈烘斁璐у畬鎴愶紱鏀捐揣{taskInfo.EndStation}宸ヤ綅===銆媨outCode}宸ヤ綅"
                                                     };
                                                     // 鎻掑叆浜や簰鏃ュ織
                                                     _db.Insertable(modcTaskMonitor).ExecuteCommand();
@@ -730,6 +1020,7 @@
                 break;
         }
     }
+
     /// <summary>
     /// 涓嶇┖璺�
     /// </summary>
@@ -904,26 +1195,138 @@
         var ledText = "";
         switch (modDevice.Value.ToString())
         {
+            case "120": 
+                { // 120:绌洪棽锛� wcs璋冨害灏忚溅鍐�130璇锋眰鏀�(鍗犱綇宸ヤ綅)
+                    
+                } break;
+            case "140": 
+                {  // 140:鍙斁锛涘啓鍏ヤ换鍔″彿绛変氦浜掍俊鎭渶鍚庡啓鍏�150姝e湪鏀撅紱   wcs鎺ュ彈wms鍙戦�佺殑灏忚溅浠诲姟瀹屾垚淇″彿鍚庡彉鏇翠负锛�160锛�
+                    var http = new HttpService();
+                    var modResponseTask = http.IssuedAgvTask(modDevice.StationNum).Result;
+                    if (modResponseTask.StatusCode == 0)
+                    {
+                        plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "150");
+                    }
+
+                } break;
+
+            case "230": 
+                { // 230锛氭墭鐩樿緭閫佸埌浣嶏紝璇锋眰灏忚溅锛�  WCS鍚慦MS鐢宠灏忚溅杈撻�乄MS杩斿洖鎴愬姛锛涘啓鍏�240  锛� 
+
+                } break;
+
+            case "310":
+                //鍏ュ簱鐢宠PLC鍑虹幇寮傚父锛堟墭鐩樿秴瀹姐�佽秴楂樼瓑锛�
+                {
+                    plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "311");
+
+                    string dbStr = "";
+                    switch (modDevice.StationNum)
+                    {
+                        case "094":
+                                dbStr = "2381";
+                            break;
+
+                        case "160":
+                            dbStr = "2385";
+                            break;
+
+                        case "155":
+                            dbStr = "2383";
+                            break;
+                    }
+
+                    string errorStr = "寮傚父淇℃伅锛�";
+                    //灏嗗紓甯镐俊鎭樉绀哄埌LED灞忓箷涓�
+                    var (errorRes0, errorVal0) = plcConn.GetPlcDBValue(PLCDataTypeEnum.Bit, $"M{dbStr}.0", "");
+                    if (errorRes0.IsSucceed && errorVal0 == true)
+                    {
+                        errorStr += " 鎵爜澶辫触";
+                    }
+                    var (errorRes1, errorVal1) = plcConn.GetPlcDBValue(PLCDataTypeEnum.Bit, $"M{dbStr}.1", "");
+                    if (errorRes1.IsSucceed && errorVal1 == true)
+                    {
+                        errorStr += " 绉伴噸澶辫触";
+                    }
+                    var (errorRes2, errorVal2) = plcConn.GetPlcDBValue(PLCDataTypeEnum.Bit, $"M{dbStr}.2", "");
+                    if (errorRes2.IsSucceed && errorVal2 == true)
+                    {
+                        errorStr += " 鍨涘瀷宸﹁秴瀹�";
+                    }
+                    var (errorRes3, errorVal3) = plcConn.GetPlcDBValue(PLCDataTypeEnum.Bit, $"M{dbStr}.3", "");
+                    if (errorRes3.IsSucceed && errorVal3 == true)
+                    {
+                        errorStr += " 鍨涘瀷鍙宠秴瀹�";
+                    }
+                    var (errorRes4, errorVal4) = plcConn.GetPlcDBValue(PLCDataTypeEnum.Bit, $"M{dbStr}.4", "");
+                    if (errorRes4.IsSucceed && errorVal4 == true)
+                    {
+                        errorStr += " 鍨涘瀷鍓嶈秴闀�";
+                    }
+                    var (errorRes5, errorVal5) = plcConn.GetPlcDBValue(PLCDataTypeEnum.Bit, $"M{dbStr}.5", "");
+                    if (errorRes5.IsSucceed && errorVal5 == true)
+                    {
+                        errorStr += " 鍨涘瀷鍚庤秴闀�";
+                    }
+                    var (errorRes6, errorVal6) = plcConn.GetPlcDBValue(PLCDataTypeEnum.Bit, $"M{dbStr}.6", "");
+                    if (errorRes6.IsSucceed && errorVal6 == true)
+                    {
+                        errorStr += " 鍨涘瀷鍚庤秴楂�";
+                    }
+                    var (errorRes7, errorVal7) = plcConn.GetPlcDBValue(PLCDataTypeEnum.Bit, $"M{dbStr}.7", "");
+                    if (errorRes7.IsSucceed && errorVal7 == true)
+                    {
+                        errorStr += " 楂樹綆浣嶅紓甯告姤璀�";
+                    }
+                    var (errorRes9, errorVal9) = plcConn.GetPlcDBValue(PLCDataTypeEnum.Bit, $"M{Convert.ToUInt32(dbStr)-1}.1", "");
+                    if (errorRes9.IsSucceed && errorVal9 == true)
+                    {
+                        errorStr += " 鎵爜浠�氳鎶ヨ";
+                    }
+                    ledText += $"鐢宠鍏ュ簱澶辫触\n\n";
+                    ledText += $"{errorStr}";
+                    LedDisplay(modDevice.LedIP, ledText);                    
+                }
+                break;
             case "320":
                 {
+                    //闃叉閲嶅鐢宠
+                    var (res0, Val0) = plcConn.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos);
+                    if (res0.IsSucceed && Val0 != 0)
+                    {
+                        break;
+                    }
                     // 鐢宠宸烽亾
                     string strMsg = "";
                     string taskModel = "";
 
                     // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭�
                     var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�");
-                    var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
+                    var (res, palletVal) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos);
                     if (!res.IsSucceed)
                     {
                         break;
                     }
+                    
+                    string palletStr = Convert.ToString(palletVal);
                     var modPosEndLocat = modDevice.listStation.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅");
-                   
+
+                    //鑾峰彇鎵樼洏楂樺害
+                    var modPosPalletHeight = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏楂樺害");
+                    var (resPalletHeight, palletHeightVal) = plcConn.GetPlcDBValue(modPosPalletHeight.PosType, modDevice.DbNumber, modPosPalletHeight.PlcPos);
+                    if (!resPalletHeight.IsSucceed)
+                    {
+                        break;
+                    }
+
+                    //鑾峰彇鎵樼洏瀹為檯閲嶉噺
+                    var modPosPalletWeight = modDevice.listStation.FirstOrDefault(m => m.Text == "瀹為檯閲嶉噺");
+                    var (resPalletWeight, palletWeightVal) = plcConn.GetPlcDBValue(modPosPalletWeight.PosType, modDevice.DbNumber, modPosPalletWeight.PlcPos);
 
                     //鍒ゆ柇鍏ュ簱閿佸畾鏄惁鎵撳紑
                     if (PLCTaskAction.boEnterLock)
                     {
-                        var (res350, palletVal350) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
+                        var (res350, palletVal350) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos);
                         if (res350.IsSucceed && palletVal350 != "350") 
                         {
                             ledText += $"鐢宠鍏ュ簱澶辫触\n\n";
@@ -944,7 +1347,7 @@
 
                     if (palletVal == null) 
                     {
-                        var (res350, palletVal350) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
+                        var (res350, palletVal350) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos);
                         if (res350.IsSucceed && palletVal350 != "350")
                         {
                             ledText += $"鐢宠鍏ュ簱澶辫触\n\n";
@@ -965,7 +1368,7 @@
 
                     var http = new HttpService();
                     string TaskNo = "", EndLocate = "";
-                    strMsg = http.RequestRoadWay(palletVal, modDevice.StationNum, taskModel, louCeng, ref EndLocate, ref TaskNo);
+                    strMsg = http.RequestRoadWay(palletVal, modDevice.StationNum, taskModel, louCeng, ref EndLocate, ref TaskNo, (int)palletHeightVal);
 
                     if (!strMsg.Contains("-1"))
                     {
@@ -1002,10 +1405,11 @@
                                 ledText += $"浠诲姟绫诲瀷:{taskInfo.TaskType.GetDescription()}\n\n";
 
                                 ledText += $"浠诲姟鍙�:{taskInfo.TaskNo}\n";
-                                ledText += $"鎵樼洏鍙�:{taskInfo.PalletNo}\n\n";
+                                ledText += $"鎵樼洏鍙�:{taskInfo.PalletNo}\n";
 
                                 ledText += $"璧峰浣�:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n";
-                                ledText += $"鐩爣浣�:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}";
+                                ledText += $"鐩爣浣�:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}\n";
+                                ledText += $"閲嶉噺(KG):{Convert.ToDecimal(palletWeightVal)}";
                                 LedDisplay(modDevice.LedIP, ledText);
                                 
                             }
@@ -1013,13 +1417,11 @@
                             {
                                 Log.Error(ex.Message);
                             }
-                            
                         }
-
                     }
                     else
                     {
-                        var (res350, palletVal350) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
+                        var (res350, palletVal350) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos);
                         if (res350.IsSucceed && palletVal350 != "350")
                         {
                             ledText += $"鐢宠鍏ュ簱澶辫触\n\n";
@@ -1043,11 +1445,12 @@
 
                     // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭�
                     var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�");
-                    var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
+                    var (res, palletVal) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos);
                     if (!res.IsSucceed)
                     {
                         break;
                     }
+
                     string pallet = palletVal.ToString();
                     // 鑾峰彇浠诲姟淇℃伅
                     var modTask = _db.Queryable<WcsTask>().First(s => s.IsDelete == false && s.PalletNo == pallet && (s.Status == TaskStatusEnum.Wait || s.Status == TaskStatusEnum.Doing) && s.TaskType == TaskTypeEnum.In);
@@ -1063,9 +1466,61 @@
                     }
 
                     // 鑾峰彇宸烽亾鍙e叆搴撳伐浣�
-                    string endLocatVlue = PLCCommon.RoadwayToStationNum(modTask.EndRoadway, louCeng);
+                    string endLocatVlue = PLCCommon.RoadwayToStationNum(modTask.EndRoadway, louCeng, modDevice.StationNum);
+
+                    #region 璺烘満杞繍浠诲姟澶勭悊  ##########
+                    // 鍒ゆ柇鏄惁鍥涙ゼ杈撻�佺嚎
+                    if (modDevice.StationNum == "265")
+                    {   // 鏄�
+                        if (modTask.EndRoadway != "R05" && modTask.EndRoadway != "R06")
+                        {
+                            // 鏍规嵁宸烽亾鑾峰彇涓浆璺烘満IP   ### R05宸烽亾
+                            var sInfo = PLCCommon.GetStokePlc("R05", louCeng);
+                            var plcStackeConn = PLCTaskAction.listPlcConn.First(m => m.PlcIP == sInfo.Ip);
+                            if (plcStackeConn.Connected)
+                            {
+                                var djmodel = _db.Queryable<WcsPlc>().First(m => m.IP == sInfo.Ip);
+                                var djMod = PLCTaskAction.plcDevices.First(m => m.PlcId == djmodel.Id
+                                    && m.DeviceType == DeviceTypeEnum.Business && m.IsDelete == false);
+                                var (djRes, djVal) = plcStackeConn.GetPlcDBValue(djMod.PosType, djMod.DbNumber, djMod.PlcPos);
+
+                                // 鍒ゆ柇R05璺烘満鏄惁绌洪棽
+                                if (djRes.IsSucceed && djVal.ToString() == "820")
+                                {
+                                    endLocatVlue = "253";
+                                }
+                            }
+
+                            // 鏍规嵁宸烽亾鑾峰彇涓浆璺烘満IP   ### R06宸烽亾
+                            var sInfoR06 = PLCCommon.GetStokePlc("R06", louCeng);
+                            var plcStackeConnR06 = PLCTaskAction.listPlcConn.First(m => m.PlcIP == sInfoR06.Ip);
+                            if (plcStackeConnR06.Connected)
+                            {
+                                var djmodel = _db.Queryable<WcsPlc>().First(m => m.IP == sInfoR06.Ip);
+                                var djMod = PLCTaskAction.plcDevices.First(m => m.PlcId == djmodel.Id
+                                    && m.DeviceType == DeviceTypeEnum.Business && m.IsDelete == false);
+                                var (djRes, djVal) = plcStackeConnR06.GetPlcDBValue(djMod.PosType, djMod.DbNumber, djMod.PlcPos);
+
+                                // 鍒ゆ柇R05璺烘満鏄惁绌洪棽
+                                if (djRes.IsSucceed && djVal.ToString() == "820")
+                                {
+                                    endLocatVlue = "250";
+                                }
+                            }
+                        }
+                    }
+                    if (modDevice.StationNum == "266")
+                    {   // 鏄�
+                        if (modTask.EndRoadway != "R05")
+                        {
+                            endLocatVlue = "277";
+                        }
+                    }
+                    #endregion
+
                     // 缁橮LC鍐欏叆浠诲姟鏁版嵁
                     var listResult = new List<Result>();
+
                     // 浠诲姟鍙枫�佷换鍔$被鍨嬨�佹墭鐩樺彿
                     var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�");
                     listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo));
@@ -1118,7 +1573,6 @@
 
                         }
                     }
-
                 }
                 break;
             case "620":
@@ -1141,22 +1595,135 @@
                     }
                     // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭�
                     var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�");
-                    var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
+                    var (res, palletVal) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos);
                     if (!res.IsSucceed)
                     {
                         break;
                     }
+
+                    #region 璺烘満杞繍浠诲姟澶勭悊  ###########
+                    // 鏍规嵁浠诲姟鐩爣宸烽亾鍙疯幏鍙栧伐浣嶅彿
+                    var modPosEndStation = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�");
+                    var (ress, endTaskNoVal) = plcConn.GetPlcDBValue(modPosEndStation.PosType, modDevice.DbNumber, modPosEndStation.PlcPos);
+                    if (!ress.IsSucceed)
+                    {
+                        break;
+                    }
+                    string taskno = endTaskNoVal; 
+                    var taskInfo2 = _db.Queryable<WcsTask>().First(w => w.TaskNo == taskno);         // 鏍规嵁浠诲姟鍙疯幏鍙栧綋鍓嶄换鍔$洰鏍囧贩閬�
+                    if (taskInfo2 == null) 
+                    {
+                        break;
+                    }
+                    string roadwayNo = PLCCommon.GetRoadwayByStation(modDevice.StationNum);         // 褰撳墠宸ヤ綅瀵瑰簲鐨勫贩閬撳彿  
+
+                    // 鍒ゆ柇鏄惁鍏ュ簱杞繍浠诲姟
+                    if (roadwayNo != taskInfo2.EndRoadway && taskInfo2.TaskType == TaskTypeEnum.In) 
+                    {// 鏄�
+                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "630");
+
+                        if (ret.IsSucceed)
+                        {
+                            var modPosTaskNo = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�");
+                            var (resss, taskNoVal) = plcConn.GetPlcDBValue(modPosEndStation.PosType, modDevice.DbNumber, modPosEndStation.PlcPos);
+                            if (!resss.IsSucceed)
+                            {
+                                break;
+                            }
+
+                            string taskNo = taskNoVal.ToString();
+                            var taskInfos = _db.Queryable<WcsTask>().First(w => w.TaskNo == taskNo);
+                            modDevice.LedIP = _db.Queryable<WcsDevice>().Where(w => w.StationNum == taskInfos.StartLocate).Select(s => s.LedIP).First();
+                            // 鎻掑叆浠诲姟鏄庣粏 
+                            var modInsertTaskMonitor = new WcsTaskMonitor()
+                            {
+                                TaskNo = taskNo,
+                                PlcId = modDevice.Id,
+                                PlcName = modDevice.Text,
+                                InteractiveMsg = $"鍐欏叆鎸囦护630锛氬紑鍚泛鏈鸿浆杩愪换鍔�",
+                                PalletNo = palletVal,
+                                Status = TaskStatusEnum.Complete,
+                                StartLocat = modDevice.StationNum,
+                                EndLocat = strMsg,
+                            };
+
+                            // 鎻掑叆浜や簰鏃ュ織
+                            _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
+
+                            // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈�
+                            HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+
+                            var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business);
+                            ledText += $"浠诲姟绫诲瀷:{taskInfos.TaskType.GetDescription()}\n\n";
+                            ledText += $"浠诲姟鍙�:{taskInfos.TaskNo}\n";
+                            ledText += $"鎵樼洏鍙�:{taskInfos.PalletNo}\n\n";
+                            ledText += $"璧峰浣�:{taskInfos.StartRoadway + " " + taskInfos.StartLocate}\n";
+                            ledText += $"鐩爣浣�:{taskInfos.EndRoadway + " " + taskInfos.EndLocate}";
+                            LedDisplay(modDevice.LedIP, ledText);
+                        }
+
+                        break;
+                    }
+
+                    // 鍒ゆ柇鏄惁鍑哄簱杞繍浠诲姟
+                    var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�");
+                    var (res1, taskVal) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos);
+                    if (res1.IsSucceed)
+                    {
+                        string taskNo = taskVal.ToString();
+                        var taskInfos = _db.Queryable<WcsTask>().First(w => w.TaskNo == taskNo);
+                        if (taskInfos.TaskType == TaskTypeEnum.Out)
+                        {
+                            var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "630");
+                            if (!ret.IsSucceed)
+                            {
+                                break;
+                            }
+                            modDevice.LedIP = _db.Queryable<WcsDevice>().Where(w => w.StationNum == taskInfos.EndLocate).Select(s => s.LedIP).First();
+                            // 鎻掑叆浠诲姟鏄庣粏 
+                            var modInsertTaskMonitor = new WcsTaskMonitor()
+                            {
+                                TaskNo = taskNo,
+                                PlcId = modDevice.Id,
+                                PlcName = modDevice.Text,
+                                InteractiveMsg = $"鍐欏叆鎸囦护630锛氬紑鍚泛鏈鸿浆杩愪换鍔�",
+                                PalletNo = palletVal,
+                                Status = TaskStatusEnum.Complete,
+                                StartLocat = modDevice.StationNum,
+                                EndLocat = strMsg,
+                            };
+
+                            // 鎻掑叆浜や簰鏃ュ織
+                            _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
+
+                            // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈�
+                            HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+
+                            var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business);
+                            ledText += $"浠诲姟绫诲瀷:{taskInfos.TaskType.GetDescription()}\n\n";
+                            ledText += $"浠诲姟鍙�:{taskInfos.TaskNo}\n";
+                            ledText += $"鎵樼洏鍙�:{taskInfos.PalletNo}\n\n";
+                            ledText += $"璧峰浣�:{taskInfos.StartRoadway + " " + taskInfos.StartLocate}\n";
+                            ledText += $"鐩爣浣�:{taskInfos.EndRoadway + " " + taskInfos.EndLocate}";
+                            LedDisplay(modDevice.LedIP, ledText);
+
+                            break;
+                        }
+                    }
+                    else { break; }
+                    #endregion
+
                     var http = new HttpService();
                     string TaskNo = "";
                     // 鍚慦MS鐢宠鍌ㄤ綅淇℃伅
-                    strMsg = http.RequestLocate(palletVal, modDevice.StationNum, taskModel, roadway, ref TaskNo);
+                    strMsg = http.RequestLocate(palletVal, modDevice.StationNum, taskModel, roadway, ref TaskNo, (int)taskInfo2.PalletQty);
 
                     // 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇LEDIP 鎺ㄩ�佸埌LED灞忓箷銆�
                     var taskInfo = _db.Queryable<WcsTask>().First(w => w.TaskNo == TaskNo);
                     modDevice.LedIP = _db.Queryable<WcsDevice>().Where(w => w.StationNum == taskInfo.StartLocate).Select(s => s.LedIP).First();
 
                     if (!strMsg.Contains("-1"))
-                    {
+                    {                       
                         // 鍐欏叆娴佺▼瀛� 630
                         var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "630");
 
@@ -1205,14 +1772,14 @@
                 break;
             case "630":
                 {
-                    #region 鍐欏叆璺烘満鍙栬揣浠诲姟 640
+                    #region 鍐欏叆璺烘満鍙栬揣浠诲姟 涓嶇敤鍐欏叆640鍨涘彇璐у畬鎴愬悗浼氬啓
 
                     // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭�
                     var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�");
-                    var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
+                    var (res, palletVal) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos);
                     // 鑾峰彇宸ヤ綅浠诲姟鍙蜂俊鎭�
                     var modPosTaskNo = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�");
-                    var (taskRes, taskNoVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosTaskNo.PlcPos);
+                    var (taskRes, taskNoVal) = plcConn.GetPlcDBValue(modPosTaskNo.PosType, modDevice.DbNumber, modPosTaskNo.PlcPos);
                     if (!res.IsSucceed || !taskRes.IsSucceed)
                     {
                         break;
@@ -1220,14 +1787,274 @@
                     string pallet = palletVal.ToString();
                     string taskNo = taskNoVal.ToString();
                     // 鑾峰彇浠诲姟淇℃伅
-                    var modTask = _db.Queryable<WcsTask>().First(s => s.IsDelete == false && s.PalletNo == pallet && s.Status == TaskStatusEnum.Doing && s.TaskType == TaskTypeEnum.In && s.TaskNo == taskNo);
+                    var modTask = _db.Queryable<WcsTask>().First(s => s.IsDelete == false && s.PalletNo == pallet && s.Status == TaskStatusEnum.Doing  && s.TaskNo == taskNo);
                     if (modTask == null)
                     {
                         // 姝ゆ墭鐩樻病鏈夊搴旂殑杞Щ浠诲姟 led鏄剧ず
                         break;
                     }
 
-                    var sInfo = PLCCommon.GetStokePlc(modTask.EndRoadway, louCeng);
+                    #region 璺烘満杞繍浠诲姟澶勭悊  ###########
+                    string taskno = taskNoVal;
+                    string roadwayNo = PLCCommon.GetRoadwayByStation(modDevice.StationNum);         // 褰撳墠宸ヤ綅瀵瑰簲鐨勫贩閬撳彿  
+
+
+                    // 鑾峰彇褰撳墠宸ヤ綅鐩爣鍦板潃
+                    var modPosEndStation = modDevice.listStation.FirstOrDefault(m => m.Text == "鐩殑宸ヤ綅");
+                    var (ress, endStationVal) = plcConn.GetPlcDBValue(modPosEndStation.PosType, modDevice.DbNumber, modPosEndStation.PlcPos);
+                    if (!ress.IsSucceed)
+                    {
+                        break;
+                    }
+
+                    if (modTask.EndRoadway == null) 
+                    {
+                        modTask.EndRoadway = "";
+                    }
+                    var sInfo = PLCCommon.GetStokePlc(roadwayNo, louCeng, modDevice.StationNum); // 鏍规嵁褰撳墠宸烽亾鑾峰彇璺烘満淇℃伅
+                    // 鍒ゆ柇鏄惁鍏ュ簱杞繍浠诲姟
+                    // 鍒ゆ柇鏄惁鍏ュ簱杞繍浠诲姟
+                    if (roadwayNo != modTask.EndRoadway && modTask.TaskType == TaskTypeEnum.In)
+                    {// 鏄�
+
+                        // 鏍规嵁褰撳墠宸ヤ綅鍙凤紝鑾峰彇瀵瑰簲鐨勫彇璐ф帓鍒楀眰
+                        sInfo = PLCCommon.GetStokePlc(roadwayNo, louCeng, modDevice.StationNum);
+
+                        // 鍒ゆ柇1灞傛斁璐у伐浣嶇姸鎬佹槸鍚︾┖闂�
+                        var endStationNum = PLCCommon.RoadwayToOutStationNum(roadwayNo, "1");
+                        var ConveyorMod = PLCTaskAction.plcDevices.First(m => m.StationNum == endStationNum
+                                                            && m.DeviceType == DeviceTypeEnum.Business && m.IsDelete == false);
+                        var plcConveyorConn = PLCCommon.GetPlcIp(endStationNum);
+                        if (plcConveyorConn.Connected) 
+                        {
+                            // 璇诲彇1妤兼斁璐у伐浣嶇姸鎬�
+                            var (reouts, plcVal) = plcConveyorConn.GetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.PlcPos);
+                            if (reouts.IsSucceed) 
+                            {
+                                //if (plcVal.ToString() != "720") 
+                                //{
+                                //    // 1灞傛斁璐у伐浣嶅崰鐢紝绛夊緟鏀捐揣宸ヤ綅閲婃斁
+                                //    break;
+                                //}
+
+                                // 鍒ゆ柇璺烘満鏄惁绌洪棽 
+                                var plcSConn = PLCTaskAction.listPlcConn.First(m => m.PlcIP == sInfo.Ip);
+                                if (plcSConn.Connected) 
+                                {
+                                    var djmodel = _db.Queryable<WcsPlc>().First(m => m.IP == sInfo.Ip);
+
+                                    var djMod = PLCTaskAction.plcDevices.First(m => m.PlcId == djmodel.Id
+                                        && m.DeviceType == DeviceTypeEnum.Business && m.IsDelete == false);
+                                    var djInfos = PLCTaskAction.plcPositions.Where(m => m.IsDelete == false && m.DeviceId == djMod.Id).ToList();
+                                    var djInfo = djInfos.First(m => m.Text == "PLC娴佺▼瀛�");
+                                    // 鑾峰彇璺烘満褰撳墠鐘舵��
+                                    var (djRess, djVal) = plcSConn.GetPlcDBValue(djMod.PosType, djMod.DbNumber, djMod.PlcPos);
+
+                                    if (!djRess.IsSucceed || djVal.ToString() != "820")
+                                    {
+                                        // 璺烘満闈炵┖闂茬瓑寰�
+                                        break;
+                                    }
+
+                                    var listResult = new List<Result>();
+
+                                    // 浠诲姟鍙枫�佷换鍔$被鍨嬨�佹墭鐩樺彿
+                                    var modPosTask = djInfos.FirstOrDefault(s => s.Text == "浠诲姟鍙�");
+                                    listResult.Add(plcSConn.SetPlcDBValue(modPosTask.PosType, djMod.DbNumber, modPosTask.PlcPos, modTask.TaskNo));
+                                    var modPosTaskType = djInfos.FirstOrDefault(s => s.Text == "浠诲姟绫诲瀷");
+                                    var taskTypeStr = (int)modTask.TaskType;
+                                    listResult.Add(plcSConn.SetPlcDBValue(modPosTaskType.PosType, djMod.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString()));
+                                    var modPosPalletNo = djInfos.FirstOrDefault(s => s.Text == "鎵樼洏鐮�");
+                                    listResult.Add(plcSConn.SetPlcDBValue(modPosPalletNo.PosType, djMod.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
+
+                                    //璧峰宸ヤ綅
+                                    var modPosStrStationNum = djInfos.FirstOrDefault(s => s.Text == "璧峰宸ヤ綅");
+                                    listResult.Add(plcSConn.SetPlcDBValue(modPosStrStationNum.PosType, djMod.DbNumber, modPosStrStationNum.PlcPos, modDevice.StationNum));
+
+                                    // 鐩殑宸ヤ綅
+                                    var modPosendStationNum = djInfos.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅");
+                                    listResult.Add(plcSConn.SetPlcDBValue(modPosendStationNum.PosType, djMod.DbNumber, modPosendStationNum.PlcPos, endStationNum));
+
+                                    //鍙栬揣鎺掋�佸垪銆佸眰
+                                    var modPosStrPai = djInfos.FirstOrDefault(s => s.Text == "鍙栬揣鎺�");
+                                    listResult.Add(plcSConn.SetPlcDBValue(modPosStrPai.PosType, djMod.DbNumber, modPosStrPai.PlcPos, sInfo.Pai));
+                                    var modPosStrLie = djInfos.FirstOrDefault(s => s.Text == "鍙栬揣鍒�");
+                                    listResult.Add(plcSConn.SetPlcDBValue(modPosStrLie.PosType, djMod.DbNumber, modPosStrLie.PlcPos, sInfo.Lie));
+                                    var modPosStrCeng = djInfos.FirstOrDefault(s => s.Text == "鍙栬揣灞�");
+                                    listResult.Add(plcSConn.SetPlcDBValue(modPosStrCeng.PosType, djMod.DbNumber, modPosStrCeng.PlcPos, sInfo.Ceng));
+                                    //鏀捐揣鎺掋�佸垪銆佸眰
+                                    var modPosEndPai = djInfos.FirstOrDefault(s => s.Text == "鏀捐揣鎺�");
+                                    listResult.Add(plcSConn.SetPlcDBValue(modPosEndPai.PosType, djMod.DbNumber, modPosEndPai.PlcPos, "2"));
+                                    var modPosEndLie = djInfos.FirstOrDefault(s => s.Text == "鏀捐揣鍒�");
+                                    listResult.Add(plcSConn.SetPlcDBValue(modPosEndLie.PosType, djMod.DbNumber, modPosEndLie.PlcPos, "60"));
+                                    var modPosEndCeng = djInfos.FirstOrDefault(s => s.Text == "鏀捐揣灞�");
+                                    listResult.Add(plcSConn.SetPlcDBValue(modPosEndCeng.PosType, djMod.DbNumber, modPosEndCeng.PlcPos, "1"));
+                                    if (listResult.All(s => s.IsSucceed))
+                                    {
+                                        // 鍐欏叆璺烘満 830
+                                        var retc2 = plcSConn.SetPlcDBValue(djMod.PosType, djMod.DbNumber, djMod.WcsPos, "830");
+                                        
+                                        // 鎻掑叆浠诲姟鏄庣粏 浠诲姟鏄庣粏瀹炰綋绫�
+                                        var modInsertTaskMonitor = new WcsTaskMonitor()
+                                        {
+                                            TaskNo = modTask.TaskNo,
+                                            PlcId = modDevice.Id,
+                                            PlcName = modDevice.Text,
+                                            PalletNo = modTask.PalletNo,
+                                            Status = TaskStatusEnum.Complete,
+                                            StartLocat = modDevice.StationNum,
+                                            EndLocat = modTask.EndLocate                  // 鐩爣鍌ㄤ綅鍦板潃
+                                        };
+                                        if (!retc2.IsSucceed)
+                                        {
+                                            modInsertTaskMonitor.InteractiveMsg = $"杈撻�佺嚎鍙栬揣宸ヤ綅锛歿modDevice.StationNum},鍐欏叆鍨涙満鍙栬揣浠诲姟830澶辫触绛夊緟鍐嶆鍐欏叆";
+                                            // 鎻掑叆浜や簰鏃ュ織
+                                            _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
+                                            //涓嬪彂浠诲姟鏃ュ織
+                                            HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+                                            break;
+
+                                        }
+                                        // 鍐欏叆鐩爣宸ヤ綅 730  : 閫昏緫涓婃澶勪笉鐢ㄥ崰鐢ㄥ湴鍧�銆�
+                                        var retc3 = plcConveyorConn.SetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.WcsPos, "730");
+
+                                        modInsertTaskMonitor.InteractiveMsg = $"璺烘満鍐欏叆鎸囦护830锛歿modDevice.StationNum}宸ヤ綅====銆�" + modTask.EndLocate + "鍌ㄤ綅鍦板潃!";
+                                        // 鎻掑叆浜や簰鏃ュ織
+                                        _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
+                                        if (PLCTaskAction.boRefresh)
+                                        {
+                                            //涓嬪彂浠诲姟鏃ュ織
+                                            HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+                                        }
+
+                                    }
+                                }
+                            }
+                        }
+
+                        break;
+                    }
+
+                    // 鍒ゆ柇鏄惁鍑哄簱杞繍浠诲姟
+                    if (modTask.TaskType == TaskTypeEnum.Out) 
+                    {
+                        var roadWay1 = "R06";
+                        if (modTask.EndLocate == "266") 
+                        {
+                            roadWay1 = "R05";
+
+                        }
+                        
+                        var sInfo1 = PLCCommon.GetStokePlc(roadWay1, "2");              // 鏀捐揣鎺掑垪灞備俊鎭�
+
+                        var plcSConn = PLCTaskAction.listPlcConn.First(m => m.PlcIP == sInfo1.Ip);
+                        if (plcSConn.Connected)
+                        {
+                            var djmodel = _db.Queryable<WcsPlc>().First(m => m.IP == sInfo1.Ip);
+
+                            var djMod = PLCTaskAction.plcDevices.First(m => m.PlcId == djmodel.Id
+                                && m.DeviceType == DeviceTypeEnum.Business && m.IsDelete == false);
+                            var djInfos = PLCTaskAction.plcPositions.Where(m => m.IsDelete == false && m.DeviceId == djMod.Id).ToList();
+                            var djInfo = djInfos.First(m => m.Text == "PLC娴佺▼瀛�");
+                            // 鑾峰彇璺烘満褰撳墠鐘舵��
+                            var (djRess, djVal) = plcSConn.GetPlcDBValue(djMod.PosType, djMod.DbNumber, djMod.PlcPos);
+
+                            if (!djRess.IsSucceed || djVal.ToString() != "820")
+                            {
+                                // 璺烘満闈炵┖闂茬瓑寰�
+                                break;
+                            }
+
+                            var listResult = new List<Result>();
+
+                            // 浠诲姟鍙枫�佷换鍔$被鍨嬨�佹墭鐩樺彿
+                            var modPosTask = djInfos.FirstOrDefault(s => s.Text == "浠诲姟鍙�");
+                            listResult.Add(plcSConn.SetPlcDBValue(modPosTask.PosType, djMod.DbNumber, modPosTask.PlcPos, modTask.TaskNo));
+                            var modPosTaskType = djInfos.FirstOrDefault(s => s.Text == "浠诲姟绫诲瀷");
+                            var taskTypeStr = (int)modTask.TaskType;
+                            listResult.Add(plcSConn.SetPlcDBValue(modPosTaskType.PosType, djMod.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString()));
+                            var modPosPalletNo = djInfos.FirstOrDefault(s => s.Text == "鎵樼洏鐮�");
+                            listResult.Add(plcSConn.SetPlcDBValue(modPosPalletNo.PosType, djMod.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
+
+                            //璧峰宸ヤ綅
+                            var modPosStrStationNum = djInfos.FirstOrDefault(s => s.Text == "璧峰宸ヤ綅");
+                            listResult.Add(plcSConn.SetPlcDBValue(modPosStrStationNum.PosType, djMod.DbNumber, modPosStrStationNum.PlcPos, modDevice.StationNum));
+                            //鐩殑宸ヤ綅
+                            if (modTask.EndLocate == "266") 
+                            {
+                                modTask.EndLocate = "277";
+                            }
+                            if (modTask.EndLocate == "265") 
+                            {
+                                modTask.EndLocate = "250";
+                            }
+
+                            var modPosStrend = djInfos.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅");
+                            listResult.Add(plcSConn.SetPlcDBValue(modPosStrend.PosType, djMod.DbNumber, modPosStrend.PlcPos, modTask.EndLocate));       // 姝ゅ鐜板湪瀛樼殑鏄嚭搴撳彛266銆�
+
+                            //鍙栬揣鎺掋�佸垪銆佸眰
+                            var modPosStrPai = djInfos.FirstOrDefault(s => s.Text == "鍙栬揣鎺�");
+                            listResult.Add(plcSConn.SetPlcDBValue(modPosStrPai.PosType, djMod.DbNumber, modPosStrPai.PlcPos, "3"));
+                            var modPosStrLie = djInfos.FirstOrDefault(s => s.Text == "鍙栬揣鍒�");
+                            listResult.Add(plcSConn.SetPlcDBValue(modPosStrLie.PosType, djMod.DbNumber, modPosStrLie.PlcPos, "60"));
+                            var modPosStrCeng = djInfos.FirstOrDefault(s => s.Text == "鍙栬揣灞�");
+                            listResult.Add(plcSConn.SetPlcDBValue(modPosStrCeng.PosType, djMod.DbNumber, modPosStrCeng.PlcPos, "1"));
+                            //鏀捐揣鎺掋�佸垪銆佸眰
+                            var modPosEndPai = djInfos.FirstOrDefault(s => s.Text == "鏀捐揣鎺�");
+                            listResult.Add(plcSConn.SetPlcDBValue(modPosEndPai.PosType, djMod.DbNumber, modPosEndPai.PlcPos, sInfo1.Pai));
+                            var modPosEndLie = djInfos.FirstOrDefault(s => s.Text == "鏀捐揣鍒�");
+                            listResult.Add(plcSConn.SetPlcDBValue(modPosEndLie.PosType, djMod.DbNumber, modPosEndLie.PlcPos, sInfo1.Lie));
+                            var modPosEndCeng = djInfos.FirstOrDefault(s => s.Text == "鏀捐揣灞�");
+                            listResult.Add(plcSConn.SetPlcDBValue(modPosEndCeng.PosType, djMod.DbNumber, modPosEndCeng.PlcPos, sInfo1.Ceng));
+                            if (listResult.All(s => s.IsSucceed))
+                            {
+                                // 鍐欏叆璺烘満 830
+                                var retc2 = plcSConn.SetPlcDBValue(djMod.PosType, djMod.DbNumber, djMod.WcsPos, "830");
+
+                                // 鎻掑叆浠诲姟鏄庣粏 浠诲姟鏄庣粏瀹炰綋绫�
+                                var modInsertTaskMonitor = new WcsTaskMonitor()
+                                {
+                                    TaskNo = modTask.TaskNo,
+                                    PlcId = modDevice.Id,
+                                    PlcName = modDevice.Text,
+                                    PalletNo = modTask.PalletNo,
+                                    Status = TaskStatusEnum.Complete,
+                                    StartLocat = modTask.StartLocate,
+                                    EndLocat = modTask.EndLocate                  // 鐩爣鍌ㄤ綅鍦板潃
+                                };
+                                if (!retc2.IsSucceed)
+                                {
+                                    modInsertTaskMonitor.InteractiveMsg = $"杈撻�佺嚎鍙栬揣宸ヤ綅锛歿modDevice.StationNum},鍐欏叆鍨涙満鍙栬揣浠诲姟830澶辫触绛夊緟鍐嶆鍐欏叆";
+                                    // 鎻掑叆浜や簰鏃ュ織
+                                    _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
+                                    //涓嬪彂浠诲姟鏃ュ織
+                                    HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+                                    break;
+
+                                }
+
+                                modInsertTaskMonitor.InteractiveMsg = $"璺烘満鍐欏叆鎸囦护830锛歿modDevice.StationNum}宸ヤ綅====銆�" + modTask.EndLocate + "鍌ㄤ綅鍦板潃!";
+                                // 鎻掑叆浜や簰鏃ュ織
+                                _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
+                                if (PLCTaskAction.boRefresh)
+                                {
+                                    //涓嬪彂浠诲姟鏃ュ織
+                                    HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+                                }
+
+                            }
+                        }
+                        break;
+                    }
+
+                    #endregion
+
+                    // 闈炴甯稿叆搴撲换鍔′笉寰�涓嬫墽琛�
+                    if (modTask.TaskType != TaskTypeEnum.In) 
+                    {
+                        break;
+                    }
+                    
                     if (string.IsNullOrWhiteSpace(sInfo.Ip))
                     {
                         //闇�鍔犱笂LED鏄剧ず
@@ -1283,6 +2110,10 @@
                         var modPosStrStationNum = djInfos.FirstOrDefault(s => s.Text == "璧峰宸ヤ綅");
                         listResult.Add(plcStackeConn.SetPlcDBValue(modPosStrStationNum.PosType, djMod.DbNumber, modPosStrStationNum.PlcPos, modDevice.StationNum));
 
+                        //鐩殑宸ヤ綅
+                        var modPosendStationNum = djInfos.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅");
+                        listResult.Add(plcStackeConn.SetPlcDBValue(modPosStrStationNum.PosType, djMod.DbNumber, modPosendStationNum.PlcPos, modDevice.StationNum));     // 姝ゅ鐜板湪鏄�139 搴旇涓�0
+
                         //鍙栬揣鎺掋�佸垪銆佸眰
                         var modPosStrPai = djInfos.FirstOrDefault(s => s.Text == "鍙栬揣鎺�");
                         listResult.Add(plcStackeConn.SetPlcDBValue(modPosStrPai.PosType, djMod.DbNumber, modPosStrPai.PlcPos, sInfo.Pai));
@@ -1334,10 +2165,6 @@
                             }
 
                         }
-
-
-
-
                     }
 
                     #endregion
@@ -1347,27 +2174,35 @@
             #region 鍑哄簱浜や簰
             case "420":
                 {
+                    string plcValue = "430";
                     #region 鎵樼洏鍒拌揪鎷i�夊伐浣�/鍑哄簱鍙�
-                    // 鍑哄簱鍙�
-                    // led鏄剧ず鎵樼洏淇℃伅
-                    // 鍐欏叆430
-                    var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "430");
-
+                    var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�");
+                    var (res, taskVal) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos);
+                    var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�");
+                    var (res2, palletVal) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos);
+                    var modPosStarStationNum = modDevice.listStation.FirstOrDefault(m => m.Text == "璧峰宸ヤ綅");
+                    var (res3, starVal) = plcConn.GetPlcDBValue(modPosStarStationNum.PosType, modDevice.DbNumber, modPosStarStationNum.PlcPos);
+                    //鍒ゆ柇鏄惁鍥涙ゼ鍑哄簱鍙�
+                    //if (modDevice.StationNum == "265" || modDevice.StationNum == "266")
+                    //{
+                    //    var http = new HttpService();
+                    //    //鏍规嵁鍑哄簱浠诲姟鍙疯幏鍙栧嚭搴撳崟绫诲瀷
+                    //    var modResponseTask = http.GetSoOrderTypeByTaskNo(taskVal).Result;
+                    //    if (modResponseTask.StatusCode == 0 && modResponseTask.Msg == "1")//1锛氶鏂欏嚭搴撳崟
+                    //    {
+                    //        plcValue = "230";
+                    //    }
+                    //}
+                    var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, plcValue);
                     if (ret.IsSucceed)
                     {
-                        var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�");
-                        var (res, taskVal) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos);
-                        var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�");
-                        var (res2, palletVal) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos);
-                        var modPosStarStationNum = modDevice.listStation.FirstOrDefault(m => m.Text == "璧峰宸ヤ綅");
-                        var (res3, starVal) = plcConn.GetPlcDBValue(modPosStarStationNum.PosType, modDevice.DbNumber, modPosStarStationNum.PlcPos);
                         // 鎻掑叆浠诲姟鏄庣粏 
                         var modInsertTaskMonitor = new WcsTaskMonitor()
                         {
                             TaskNo = taskVal,
                             PlcId = modDevice.Id,
                             PlcName = modDevice.Text,
-                            InteractiveMsg = $"鍐欏叆鎸囦护430锛氭墭鐩樺埌杈緖modDevice.StationNum}宸ヤ綅",
+                            InteractiveMsg = $"鍐欏叆鎸囦护{plcValue}锛氭墭鐩樺埌杈緖modDevice.StationNum}宸ヤ綅",
                             PalletNo = palletVal,
                             Status = TaskStatusEnum.Complete,
                             StartLocat = starVal,
@@ -1387,7 +2222,7 @@
                         // led鏄剧ず鍐呭
                         // 鏍规嵁鐩爣宸ヤ綅鍙疯幏鍙栧搴旂殑LEDIP鍦板潃
                         var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business && m.PlcId == modDevice.PlcId);
-                        
+
                         ledText += $"鍑哄簱瀹屾垚\n\n";
                         ledText += $"浠诲姟鍙�:{taskInfo.TaskNo}\n";
                         ledText += $"鎵樼洏鍙�:{taskInfo.PalletNo}\n\n";
@@ -1490,27 +2325,38 @@
             case "50":
                 // plc鐢宠绌烘墭
                 {
-                    // 闃叉閲嶅鍙┖鎵樿泛
-                    var (res, palletVal) = plcConn.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos);
-                    if (palletVal != 0) 
+                    lock (OLock)
                     {
-                        break;
-                    }
+                        // 鍒ゆ柇鏄惁宸叉湁鍚戝彨绌烘墭宸ヤ綅鐨勫嚭搴撲换鍔�
+                        var modTask = _db.Queryable<WcsTask>().First(m => (m.Status == TaskStatusEnum.Doing || m.Status == TaskStatusEnum.Wait)
+                        && m.EndLocate == modDevice.StationNum && m.IsDelete == false);
+                        if (modTask != null)
+                        {
+                            Log.Error("宸插瓨鍦ㄥ悜" + modDevice.StationNum + "宸ヤ綅鐨勪换鍔°�備换鍔″彿:" + modTask.TaskNo);
+                            break;
+                        }
 
-                    // 璋冪敤WMS绌烘墭鍑哄簱鎺ュ彛锛岃繑鍥炲嚭搴撲换鍔″瓨鍏ュ嚭搴撹〃
-                    var strMsg = "";
-                    var http = new HttpService();
-                    strMsg = http.IssuePlnOutHouseWcs("1", "205");
-                    if (!strMsg.Contains("-1"))
-                    {
-                        // 鍐欏叆plc娴佺▼瀛�60
-                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "60");
+                        // 闃叉閲嶅鍙┖鎵樿泛
+                        var (res, palletVal) = plcConn.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos);
+                        if (palletVal != 0)
+                        {
+                            break;
+                        }
+                        // 璋冪敤WMS绌烘墭鍑哄簱鎺ュ彛锛岃繑鍥炲嚭搴撲换鍔″瓨鍏ュ嚭搴撹〃
+                        var strMsg = "";
+                        var http = new HttpService();
+                        strMsg = http.IssuePlnOutHouseWcs("1", modDevice.StationNum);
+                        if (!strMsg.Contains("-1"))
+                        {
+                            // 鍐欏叆plc娴佺▼瀛�60
+                            var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "60");
+                        }
+                        else
+                        {
+                            // 鐢宠宸烽亾澶辫触锛丩ED鏄剧ず
+                            Log.Error(string.Format($"宸ヤ綅鍙凤細{modDevice.StationNum}鐢宠绌烘墭璺哄け璐�:{strMsg};"));
+                        }
                     }
-                    else
-                    {
-                        // 鐢宠宸烽亾澶辫触锛丩ED鏄剧ず
-                        Log.Error(string.Format($"宸ヤ綅鍙凤細{modDevice.StationNum}鐢宠绌烘墭璺哄け璐�:{strMsg};"));
-                    }                    
                 }
                 break;
             case "80":
@@ -1583,6 +2429,59 @@
                 break;
             #endregion
 
+            #region 鎷嗗灈涓氬姟
+            case "520":
+                //鎵樼洏杈惧埌鎷嗗灈宸ヤ綅锛學CS鍐欏叆鍝佺鍙峰苟鍐欏叆530
+                {
+                    // 鑾峰彇鎵樼洏鏉$爜閰嶇疆
+                    var modPalletNo = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜" && m.IsDelete == false);
+                    // 璇诲彇PLC鎵樼洏鏉$爜鍙�
+                    var (res, palletVal) = plcConn.GetPlcDBValue(modPalletNo.PosType, modDevice.DbNumber, modPalletNo.PlcPos);
+                    string palletNo = palletVal.ToString();
+                    if (string.IsNullOrEmpty(palletNo))
+                    {
+                        Log.Error(string.Format("{0}锛岃鍙栫殑鎵樼洏鍙蜂负null", modDevice.Text));
+                        break;
+                    }
+                    string pzNo = string.Empty;
+                    //璋冪敤WMS鎺ュ彛鑾峰彇鎵樼洏涓婄墿鏂欏搧绉嶄俊鎭�
+                    var http = new HttpService();
+                    pzNo = http.GetPalletPzNo(palletNo);
+                    if (!string.IsNullOrEmpty(pzNo))
+                    {
+                        var modAddCode = modDevice.listStation.FirstOrDefault(m => m.Text == "鍝佺" && m.IsDelete == false);
+                        // 鍐欏叆鎷嗗灈鍝佺
+                        var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, pzNo);
+                        if (retVal.IsSucceed)
+                        {
+                            plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "530");
+                        }
+                    }
+                }
+                break;
+            case "540":
+                //鎷嗗灈瀹屾垚鍗冲嚭搴撳畬鎴愪换鍔$粨鏉燂紝WCS鍐欏叆550锛孭LC娓�0
+                {
+                    // 鑾峰彇鎵樼洏鏉$爜閰嶇疆
+                    var modPalletNo = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜" && m.IsDelete == false);
+                    // 璇诲彇PLC鎵樼洏鏉$爜鍙�
+                    var (res, palletVal) = plcConn.GetPlcDBValue(modPalletNo.PosType, modDevice.DbNumber, modPalletNo.PlcPos);
+                    string palletNo = palletVal.ToString();
+                    if (string.IsNullOrEmpty(palletNo))
+                    {
+                        Log.Error(string.Format("{0}锛岃鍙栫殑鎵樼洏鍙蜂负null", modDevice.Text));
+                        break;
+                    }
+                    //璋冪敤WMS鎺ュ彛杩涜鎴愬搧绠辩爜鎷h揣
+                    var http = new HttpService();
+                    var strMsg = http.BoxUnstackd(palletNo);
+                    if (!strMsg.Contains("-1"))
+                    {
+                        plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "550");
+                    }
+                }
+                break;
+            #endregion
             default: break;
         }
 
@@ -1629,11 +2528,11 @@
     /// 浠剁杈撻�佸拰鐮佸灈鏈哄櫒浜轰笟鍔″鐞�  閰嶇疆鐨勬槸浠剁杈撻��
     /// </summary>
     /// <param name="modDevice"></param>
-    private static async void BoxConveyorLine(WcsDeviceDto modDevice) 
+    private static void BoxConveyorLine(WcsDeviceDto modDevice)
     {
         var plcConn = modDevice.PLCUtil;
 
-        if (modDevice.DbNumber == "DB101")
+        if (modDevice.DbNumber == "DB101" || modDevice.DbNumber == "DB102" || modDevice.DbNumber == "DB103" || modDevice.DbNumber == "DB104" || modDevice.DbNumber == "DB105")
         {
             // 涓绘壂浜や簰娴佺▼
             switch (modDevice.Value.ToString())
@@ -1641,98 +2540,69 @@
                 case "1":
                     // 涓绘壂鐢宠鍒嗛亾 wcs鍐欏叆2
                     {
-                        // 鍒ゆ柇鏄惁婕旂ず妯″紡 true锛氭紨绀烘ā寮�   false:鐢熶骇妯″紡
-                        if (PLCTaskAction.boDemo)   
+                        var modPosReadBox = modDevice.listStation.FirstOrDefault(m => m.Text == "璇诲彇绠辩爜" && m.IsDelete == false);
+                        var (res, boxNo) = plcConn.GetPlcDBValue(modPosReadBox.PosType, modDevice.DbNumber, modPosReadBox.PlcPos);
+                        if (string.IsNullOrWhiteSpace(boxNo.ToString()))
                         {
-                            // 閫氶亾鍙�
-                            var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "閫氶亾鍙�");
-
-                            // 婕旂ず妯″紡鐩存帴鍐欏叆1鍒嗛亾
-                            var ret = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, "1");
-                            if (ret.IsSucceed)
+                            // 鍐欏叆娴佺▼鎺у埗瀛� 2
+                            var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2");
+                            if (retVal.IsSucceed)
                             {
-                                // 鍐欏叆娴佺▼鎺у埗瀛� 2
-                                var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2");
-                                if (!retVal.IsSucceed)
-                                {
-                                    Log.Error("婕旂ず妯″紡鍐欏叆鍒嗛亾鍙峰け璐�!");
-                                    break;
-                                }
+                                Log.Error("绠辩爜涓簄ull杩涜鍓旈櫎");
+                                break;
+                            }
+                        }
+                        // 鏍规嵁绠辩爜鑾峰彇绠卞唴淇℃伅
+                        string boxNoVal = boxNo.ToString();
+                        var boxInfo = _db.Queryable<WcsBoxInfo>().First(w => w.IsDelete == false && w.BoxNo == boxNoVal && string.IsNullOrEmpty(w.PalletNo));
+                        if (boxInfo == null)
+                        {
+                            // 鍐欏叆娴佺▼鎺у埗瀛� 2
+                            var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2");
+                            if (retVal.IsSucceed)
+                            {
+                                Log.Error($"绠辩爜涓簄ull鎴栧凡缁戝畾鎵樼洏锛岃繘琛屽墧闄ゃ�傜鐮侊細{boxNoVal}");
+                                break;
+                            }
+                        }
+                        // 鏍规嵁绠卞唴鍝佺鍙疯幏鍙栫爜韬茬粦瀹氬伐浣嶅強瀵瑰簲鐨勫垎閬撳彿
+                        var checkTaskInfo = _db.Queryable<WcsCheckTask>().First(w => w.SkuNo == boxInfo.SkuNo && w.SkuName == boxInfo.SkuName && w.LotNo == boxInfo.LotNo);
+                        if (checkTaskInfo == null)
+                        {
+                            Log.Error($"娴嬭瘯--銆傜鐮侊細{boxNoVal},绠盜D锛歿boxInfo.Id},鐗╂枡缂栫爜锛歿boxInfo.SkuNo},鐗╂枡鍚嶇О锛歿boxInfo.SkuName}锛屾壒娆★細{boxInfo.LotNo}");
+                            // 鍐欏叆娴佺▼鎺у埗瀛� 2
+                            var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2");
+                            if (retVal.IsSucceed)
+                            {
+                                Log.Error($"绠辩爜鏈粦瀹氬垎鎷d换鍔★紝杩涜鍓旈櫎銆傜鐮侊細{boxNoVal}");
+                                break;
                             }
                         }
                         else
                         {
-                            // 閫氶亾鍙�
-                            var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "閫氶亾鍙�");
+                            // 缁橮LC鍐欏叆浠诲姟鏁版嵁
+                            var listResult = new List<Result>();
+                            //鎵规鍙�
+                            var modPosLotNo = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵规鍙�" && m.IsDelete == false);
+                            listResult.Add(plcConn.SetPlcDBValue(modPosLotNo.PosType, modDevice.DbNumber, modPosLotNo.PlcPos, boxInfo.LotNo));
+                            //鍝佺
+                            var modPosPZ = modDevice.listStation.FirstOrDefault(m => m.Text == "鍝佺" && m.IsDelete == false);
+                            listResult.Add(plcConn.SetPlcDBValue(modPosPZ.PosType, modDevice.DbNumber, modPosPZ.PlcPos, checkTaskInfo.PZNo));
+                            //鏄惁灏剧
+                            var modPosIsEndBox = modDevice.listStation.FirstOrDefault(m => m.Text == "鏄惁灏剧" && m.IsDelete == false);
+                            listResult.Add(plcConn.SetPlcDBValue(modPosIsEndBox.PosType, modDevice.DbNumber, modPosIsEndBox.PlcPos, boxInfo.EndLotFlag));
+                            //鍐欏叆绠辩爜
+                            var modPosBox = modDevice.listStation.FirstOrDefault(m => m.Text == "鍐欏叆绠辩爜" && m.IsDelete == false);
+                            listResult.Add(plcConn.SetPlcDBValue(modPosBox.PosType, modDevice.DbNumber, modPosBox.PlcPos, boxInfo.BoxNo));
 
-                            // 璇诲彇plc绠辩爜
-                            var modBoxNo = modDevice.listStation.FirstOrDefault(m => m.Text == "绠辩爜");
-                            var (res, boxNo) = plcConn.GetPlcDBValue(modBoxNo.PosType, modDevice.DbNumber, modBoxNo.PlcPos);
-                            if (string.IsNullOrWhiteSpace(boxNo.ToString()))
+                            // 鏄惁鍐欏叆鎴愬姛
+                            if (listResult.All(s => s.IsSucceed))
                             {
-                                // 绠辩爜涓簄ull鍐欏叆鍓旈櫎閫氶亾鍙�
-                                var ret = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, "0");
-                                if (ret.IsSucceed)
+                                // 鍐欏叆娴佺▼鎺у埗瀛� 2
+                                var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2");
+                                if (retVal.IsSucceed)
                                 {
-                                    // 鍐欏叆娴佺▼鎺у埗瀛� 2
-                                    var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2");
-                                    if (retVal.IsSucceed)
-                                    {
-                                        Log.Error("绠辩爜涓簄ull杩涜鍓旈櫎");
-                                        break;
-                                    }
-                                }
-                            }
-                            else
-                            {
-                                // 鏍规嵁绠辩爜鑾峰彇绠卞唴淇℃伅
-                                string boxNoVal = boxNo.ToString();
-                                var boxInfo = _db.Queryable<WcsBoxInfo>().First(w => w.IsDelete == false && w.BoxNo == boxNoVal && string.IsNullOrEmpty(w.PalletNo));
-                                if (boxInfo == null)
-                                {
-                                    // 绠变俊鎭负null鍐欏叆鍓旈櫎閫氶亾鍙�
-                                    var ret = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, "0");
-                                    if (ret.IsSucceed)
-                                    {
-                                        // 鍐欏叆娴佺▼鎺у埗瀛� 2
-                                        var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2");
-                                        if (retVal.IsSucceed)
-                                        {
-                                            Log.Error("绠辩爜涓簄ull鎴栧凡缁戝畾鎵樼洏锛岃繘琛屽墧闄ゃ��");
-                                            break;
-                                        }
-                                    }
-                                }
-                                // 鏍规嵁绠卞唴鍝佺鍙疯幏鍙栫爜韬茬粦瀹氬伐浣嶅強瀵瑰簲鐨勫垎閬撳彿
-                                var checkTaskInfo = _db.Queryable<WcsCheckTask>().First(w => w.SkuNo == boxInfo.SkuNo && w.SkuName == boxInfo.SkuName && w.LotNo == boxInfo.LotNo);
-                                if (checkTaskInfo == null)
-                                {
-                                    // 缁戝畾淇℃伅涓簄ull鍐欏叆鍓旈櫎閫氶亾鍙�
-                                    var ret = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, "0");
-                                    if (ret.IsSucceed)
-                                    {
-                                        // 鍐欏叆娴佺▼鎺у埗瀛� 2
-                                        var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2");
-                                        if (retVal.IsSucceed)
-                                        {
-                                            Log.Error("绠辩爜鏈粦瀹氬垎鎷d换鍔★紝杩涜鍓旈櫎銆�");
-                                            break;
-                                        }
-                                    }
-                                }
-                                else
-                                {
-                                    // 涓巔lc浜や簰鍐欏叆鍒嗛亾鍙峰拰娴佺▼鎺у埗瀛�
-                                    var ret = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, checkTaskInfo.RoboatNo);
-                                    if (ret.IsSucceed)
-                                    {
-                                        // 鍐欏叆娴佺▼鎺у埗瀛� 2
-                                        var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2");
-                                        if (retVal.IsSucceed)
-                                        {
-                                            break;
-                                        }
-                                    }
+                                    break;
                                 }
                             }
                         }
@@ -1740,21 +2610,21 @@
                     break;
                 default: break;
             }
-        } 
-        else  
+        }
+        else
         {
             // 鎻掔爜浜や簰
-            switch (modDevice.Value.ToString()) 
+            switch (modDevice.Value.ToString())
             {
                 case "1":
                     // 鎵樼洏鏉$爜鍙
                     {
                         // 鑾峰彇鎵樼洏鏉$爜閰嶇疆
-                        var modPalletNo = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜");
+                        var modPalletNo = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜" && m.IsDelete == false);
                         // 璇诲彇PLC鎵樼洏鏉$爜鍙�
                         var (res, palletVal) = plcConn.GetPlcDBValue(modPalletNo.PosType, modDevice.DbNumber, modPalletNo.PlcPos);
                         string palletNo = palletVal.ToString();
-                        if (string.IsNullOrEmpty(palletNo)) 
+                        if (string.IsNullOrEmpty(palletNo))
                         {
                             Log.Error(string.Format("{0}锛岃鍙栫殑鎵樼洏鍙蜂负null", modDevice.Text));
                             break;
@@ -1762,18 +2632,19 @@
 
                         // 鏍规嵁宸ヤ綅鍙峰皢鎵樼洏鍙蜂繚瀛樺湪鍒嗛亾琛�
                         var checkTaskMedel = _db.Queryable<WcsCheckTask>().First(m => m.Port == modDevice.StationNum && m.IsDelete == false);
-                        if (checkTaskMedel == null) 
+                        if (checkTaskMedel == null)
                         {
                             Log.Error(string.Format("鏍规嵁鐮佸灈宸ヤ綅{0}锛岃幏鍙栧垎閬撳け璐�!", modDevice.StationNum));
                             break;
                         }
                         checkTaskMedel.PalletNo = palletNo;
+                        checkTaskMedel.BoxCount = 0;
                         var rowCount = _db.Updateable(checkTaskMedel).ExecuteCommand();
-                        if (rowCount > 0 ) 
+                        if (rowCount > 0)
                         {
                             // plc鍐欏叆璇诲彇鎴愬姛琛ㄧず 2
                             var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2");
-                            if (retVal.IsSucceed) 
+                            if (retVal.IsSucceed)
                             {
                                 // liudl  姝ゅ闇�娣诲姞
                                 // 閫氱煡鍒嗘嫞鐮佸灈椤垫洿鏂�
@@ -1785,199 +2656,148 @@
                     // 鐢宠鎻掔爜
                     {
                         // 鑾峰彇鎵樼洏鏉$爜閰嶇疆
-                        var modAddCode = modDevice.listStation.FirstOrDefault(m => m.Text == "鎻掔爜缁撴灉");
-                        // 鍒ゆ柇鏄惁婕旂ず妯″紡 true锛氭紨绀烘ā寮�   false:鐢熶骇妯″紡
-                        if (PLCTaskAction.boDemo)
+                        var modAddCode = modDevice.listStation.FirstOrDefault(m => m.Text == "鎻掔爜缁撴灉" && m.IsDelete == false);
+
+                        //鑾峰彇鎻掔爜绠辨暟
+                        var modAddBoxNum = modDevice.listStation.FirstOrDefault(m => m.Text == "鎻掔爜绠辨暟" && m.IsDelete == false);
+                        var (boxNumRes, boxNumVal) = plcConn.GetPlcDBValue(modAddBoxNum.PosType, modDevice.DbNumber, modAddBoxNum.PlcPos);
+                        int boxNum = Convert.ToInt32(boxNumVal);
+                        if (boxNum != 1 && boxNum != 2)
                         {
-                            // 婕旂ず妯″紡鐩存帴鍐欏叆鎻掔爜缁撴灉 1锛氭垚鍔�
-                            var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "1");
+                            Log.Error(string.Format($"鐮佸灈宸ヤ綅{0}锛岃姹傛彃鐮佺鏁颁笉姝g‘! boxNum:{boxNum}", modDevice.StationNum));
+                            // 鍐欏叆鎻掑叆缁撴灉 2锛氭彃鐮佸け璐�
+                            var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2");
                             break;
                         }
-                        else 
+
+                        // 鑾峰彇褰撳墠鍒嗛亾鎵樼洏鍙�
+                        var checkTaskMedel = _db.Queryable<WcsCheckTask>().First(m => m.Port == modDevice.StationNum && m.IsDelete == false);
+                        if (checkTaskMedel == null)
+                        {
+                            Log.Error(string.Format("鏍规嵁鐮佸灈宸ヤ綅{0}锛岃幏鍙栧垎閬撳け璐�!", modDevice.StationNum));
+                            // 鍐欏叆鎻掑叆缁撴灉 2锛氭彃鐮佸け璐�
+                            var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2");
+                            break;
+                        }                       
+
+                        string palletNo = checkTaskMedel.PalletNo;
+                        if (string.IsNullOrEmpty(palletNo))
+                        {
+                            Log.Error(string.Format("鑾峰彇鐮佸灈宸ヤ綅{0}涓婄殑鎵樼洏鍙峰け璐ワ紒", modDevice.StationNum));
+                            // 鍐欏叆鎻掑叆缁撴灉 2锛氭彃鐮佸け璐�
+                            var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2");
+                            break;
+                        }
+                        for (int i = 1; i <= boxNum; i++)
                         {
                             // 鑾峰彇绠辨潯鐮�
                             // 鑾峰彇绠辨潯鐮侀厤缃�
-                            var modBoxNo = modDevice.listStation.FirstOrDefault(m => m.Text == "绠辨潯鐮�");
+                            var modBoxNo = modDevice.listStation.FirstOrDefault(m => m.Text == $"璇诲彇绠辩爜{i}");
                             var (res, boxVal) = plcConn.GetPlcDBValue(modBoxNo.PosType, modDevice.DbNumber, modBoxNo.PlcPos);
                             string boxNo = boxVal.ToString();
-                            if (string.IsNullOrEmpty(boxNo)) 
+                            if (string.IsNullOrEmpty(boxNo))
                             {
-                                Log.Error(string.Format("鐮佸灈宸ヤ綅{0}锛岀鐮佷负null鎻掔爜澶辫触!璇蜂汉宸ュ己鍒剁粨鎵广��"), modDevice.StationNum);
-                                // 鍐欏叆鎻掑叆缁撴灉 2锛氭彃鐮佸け璐�
-                                var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2");
+                                Log.Error(string.Format("鐮佸灈宸ヤ綅{0}锛岀鐮佷负null鎻掔爜澶辫触!璇蜂汉宸ュ己鍒剁粨鎵广��", modDevice.StationNum));
                                 break;
                             }
                             // 楠岃瘉绠辩爜琛ㄦ槸鍚﹀瓨鍦ㄦ绠辩爜
-                            var boxInfo = _db.Queryable<WcsBoxInfo>().First(w => w.IsDelete == false && w.BoxNo == boxNo);
-                            if (boxInfo == null) 
+                            var boxInfo = _db.Queryable<WcsBoxInfo>().Where(w => w.IsDelete == false && w.BoxNo == boxNo).ToList();
+                            if (boxInfo.Count == 0)
                             {
-                                Log.Error(string.Format("鐮佸灈宸ヤ綅{0}锛岀鐮亄1}涓嶅瓨鍦�!璇蜂汉宸ュ己鍒剁粨鎵广��"), modDevice.StationNum,boxNo);
+                                Log.Error(string.Format("鐮佸灈宸ヤ綅{0}锛岀鐮亄1}涓嶅瓨鍦�!璇蜂汉宸ュ己鍒剁粨鎵广��", modDevice.StationNum, boxNo));
                                 // 鍐欏叆鎻掑叆缁撴灉 2锛氭彃鐮佸け璐�
-                                var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2");
-                                break;
-                            }
-                            // 鑾峰彇褰撳墠鍒嗛亾鎵樼洏鍙�
-                            var checkTaskMedel = _db.Queryable<WcsCheckTask>().First(m => m.Port == modDevice.StationNum && m.IsDelete == false);
-                            if (checkTaskMedel == null)
-                            {
-                                Log.Error(string.Format("鏍规嵁鐮佸灈宸ヤ綅{0}锛岃幏鍙栧垎閬撳け璐�!", modDevice.StationNum));
-                                break;
-                            }
-                            string palletNo = checkTaskMedel.PalletNo;
-                            if (string.IsNullOrEmpty(palletNo)) 
-                            {
-                                Log.Error(string.Format("鑾峰彇鐮佸灈宸ヤ綅{0}涓婄殑鎵樼洏鍙峰け璐ワ紒",modDevice.StationNum));
+                                plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2");
                                 break;
                             }
                             // 淇敼鎻掔爜琛�
-                            boxInfo.PalletNo = palletNo;
-                            boxInfo.UpdateTime = DateTime.Now;
-                            var rowCount = _db.Updateable(boxInfo).ExecuteCommand();
-                            if (rowCount > 0)
+                            foreach (WcsBoxInfo item in boxInfo)
                             {
-                                // 鎻掔爜鎴愬姛
-                                var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "1");
+                                item.PalletNo = palletNo;
+                                item.UpdateTime = DateTime.Now;
                             }
-                            else 
+                            var resultCount = _db.Updateable(boxInfo).ExecuteCommand();
+                            if (resultCount <= 0)
                             {
                                 // 鎻掔爜澶辫触
-                                Log.Error(string.Format("绠辩爜{0};鐮佸灈宸ヤ綅{1}锛屾彃鐮佸け璐ワ紝璇峰己鍒剁粨鎵�"),boxNo,modDevice.StationNum);
-                                var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2");
+                                Log.Error(string.Format("绠辩爜{0};鐮佸灈宸ヤ綅{1}锛岀粦瀹氭墭鐩榹2}澶辫触锛岃寮哄埗缁撴壒", boxNo, modDevice.StationNum, palletNo));
+                                // 鍐欏叆鎻掑叆缁撴灉 2锛氭彃鐮佸け璐�
+                                plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2");
+                                break;
                             }
+                        }
+                        // 鎻掔爜鎴愬姛
+                        var retVal2 = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "1");
+                        if (retVal2.IsSucceed)
+                        {
+                            //鏇存柊宸叉彃鐮佹暟閲�
+                            checkTaskMedel.BoxCount += boxNum;
+                            _db.Updateable(checkTaskMedel).ExecuteCommand();
+                        }
+                        else 
+                        {
+                            // 鍐欏叆澶辫触
+                            Log.Error(string.Format("鍐欏叆PLC鎻掔爜缁撴灉澶辫触锛岀爜鍨涘伐浣峽1}锛屾墭鐩樺彿{2}", modDevice.StationNum, palletNo));
                         }
                     }
                     break;
                 case "40":
                     // 璇锋眰缁勬墭锛岀敵璇峰叆搴�
                     {
-                        // 鏍规嵁宸ヤ綅鍙凤紝鑾峰彇鎵樼洏鍙�
-                        var checkTaskMedel = _db.Queryable<WcsCheckTask>().First(m => m.Port == modDevice.StationNum && m.IsDelete == false);
-                        // 鏍规嵁宸ヤ綅鍙疯幏鍙� 鎵樼洏绾胯宸ヤ綅鍙风殑閰嶇疆淇℃伅
-                        var numModel = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business && m.PlcId != modDevice.PlcId);
-                        var posModel = PLCTaskAction.plcPositions.First(m => m.DeviceId == numModel.Id && m.Text == "鐩殑宸ヤ綅" && m.IsDelete == false);
-                        if (checkTaskMedel == null)
+                        lock (OLock)
                         {
-                            Log.Error(string.Format("缁勬墭澶辫触鏍规嵁鐮佸灈宸ヤ綅{0}锛岃幏鍙栨墭鐩樺彿澶辫触!", modDevice.StationNum));
-
-                            // 鍐欏叆浜や簰宸ヤ綅鐩爣鍦板潃
-                            var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, "234");
-                            if (retVal.IsSucceed) 
+                            // 鏍规嵁宸ヤ綅鍙凤紝鑾峰彇鎵樼洏鍙�
+                            var checkTaskMedel = _db.Queryable<WcsCheckTask>().First(m => m.Port == modDevice.StationNum && m.IsDelete == false);
+                            // 鏍规嵁宸ヤ綅鍙疯幏鍙� 鎵樼洏绾胯宸ヤ綅鍙风殑閰嶇疆淇℃伅
+                            var numModel = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business && m.PlcId != modDevice.PlcId);
+                            //var posModel = PLCTaskAction.plcPositions.First(m => m.DeviceId == numModel.Id && m.Text == "鐩殑宸ヤ綅" && m.IsDelete == false);
+                            if (checkTaskMedel == null)
                             {
+                                Log.Error(string.Format("缁勬墭澶辫触鏍规嵁鐮佸灈宸ヤ綅{0}锛岃幏鍙栨墭鐩樺彿澶辫触!", modDevice.StationNum));
+
                                 // 鍐欏叆缁勬墭鍥炲娴佺▼瀛�
-                                retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50");
-                            }
-                            break;
-                        }
-
-                        // 鐮佸灈宸ヤ綅鎵樼洏鍙�
-                        string palletNo = checkTaskMedel.PalletNo;
-
-                        // 鏄惁婕旂ず妯″紡
-                        if (PLCTaskAction.boDemo)
-                        {
-                            // 鐩存帴绠眞ms鐢宠宸烽亾
-                            var http = new HttpService();
-                            string TaskNo = "", EndLocate = "";
-                            string strMsg = http.RequestRoadWay(palletNo, modDevice.StationNum, "1", "2", ref EndLocate, ref TaskNo);
-                            if (strMsg.Contains("-1"))
-                            {
-                                Log.Error(string.Format("鐢宠宸烽亾澶辫触锛岀爜鍨涘伐浣峽0};鍘熷洜{1}", modDevice.StationNum, strMsg));
+                                var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "60");
                                 break;
                             }
-                            else 
+
+                            //鑾峰彇鎵樼洏楂樺害
+                            //var posPalletHeightModel = PLCTaskAction.plcPositions.First(m => m.DeviceId == numModel.Id && m.Text == "鎵樼洏楂樺害" && m.IsDelete == false);
+                            //var (resPalletHeight, palletHeightVal) = plcConn.GetPlcDBValue(posPalletHeightModel.PosType, modDevice.DbNumber, posPalletHeightModel.PlcPos);
+                            //if (!resPalletHeight.IsSucceed)
+                            //{
+                            //    break;
+                            //}
+
+
+                            // 鐮佸灈宸ヤ綅鎵樼洏鍙�
+                            string palletNo = checkTaskMedel.PalletNo;
+                            //鍒ゆ柇璇ユ墭鐩樻槸鍚︽湁姝e湪鎵ц鐨勪换鍔★紝闃叉閲嶅鐢宠
+                            var taskIng = _db.Queryable<WcsTask>().First(w => w.PalletNo == palletNo && (w.Status == TaskStatusEnum.Wait || w.Status == TaskStatusEnum.Doing) && w.IsDelete == false);
+                            if (taskIng != null)
                             {
-                                // 鑾峰彇鍏ュ簱浠诲姟淇℃伅
-                                var taskModel = _db.Queryable<WcsTask>().First(m => m.TaskNo == TaskNo && m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing));
-                                if (taskModel != null) 
-                                {
-                                    // 鑾峰彇鍏ュ簱鍙栬揣宸ヤ綅
-                                    string endLocatVlue = PLCCommon.RoadwayToStationNum(taskModel.EndRoadway, "2");
-
-                                    var listResult = new List<Result>();
-
-                                    // 鍐欏叆鎵樼洏杈撻�佺嚎鐮佸灈宸ヤ綅 鐩殑宸ヤ綅銆佷换鍔″彿锛屽啓鍏ヤ氦浜掓祦绋嬬粍鎵樻垚鍔� 鎵ц鍏ュ簱{鑻ラ渶瑕佸彲浠ュ啓鍏ヤ换鍔″彿绛夌瓑鍏朵粬淇℃伅}
-                                    listResult.Add(plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, endLocatVlue));    // 鐩爣宸ヤ綅
-                                    var modPosTask = PLCTaskAction.plcPositions.First(s => s.DeviceId == numModel.Id && s.Text == "浠诲姟鍙�" && s.IsDelete == false);
-                                    listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, numModel.DbNumber, modPosTask.PlcPos, TaskNo));
-                                    var modPosTaskType = PLCTaskAction.plcPositions.First(s => s.DeviceId == numModel.Id && s.Text == "浠诲姟绫诲瀷" && s.IsDelete == false);
-                                    var taskTypeStr = (int)taskModel.TaskType;
-                                    listResult.Add(plcConn.SetPlcDBValue(modPosTaskType.PosType, numModel.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString()));
-
-                                    if (listResult.All(s => s.IsSucceed))
-                                    {
-                                        // 鍐欏叆缁勬墭鍥炲娴佺▼瀛�
-                                        var retVal1 = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50");
-                                        if (retVal1.IsSucceed)
-                                        {
-                                            // 灏嗗叆搴撲换鍔$敱姝e湪鎵ц鏀逛负姝e湪鎵ц
-                                            taskModel.Status = TaskStatusEnum.Doing;
-                                            _db.Updateable(taskModel).ExecuteCommand();
-
-                                            // 鎻掑叆浠诲姟鏄庣粏 
-                                            var modInsertTaskMonitor = new WcsTaskMonitor()
-                                            {
-                                                TaskNo = TaskNo,
-                                                PlcId = modDevice.Id,
-                                                PlcName = modDevice.Text,
-                                                InteractiveMsg = $"鍐欏叆鎸囦护50锛氱敵璇峰贩閬撴垚鍔�",
-                                                PalletNo = palletNo,
-                                                Status = TaskStatusEnum.Complete,
-                                                StartLocat = modDevice.StationNum,
-                                                EndLocat = strMsg,
-                                            };
-                                            // 鎻掑叆浜や簰鏃ュ織
-                                            _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
-                                            // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈�
-                                            HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
-                                        }
-                                    }
-
-                                    //// 鍐欏叆鎵樼洏杈撻�佺嚎鐮佸灈宸ヤ綅 鐩殑宸ヤ綅锛屽啓鍏ヤ氦浜掓祦绋嬬粍鎵樻垚鍔� 鎵ц鍏ュ簱{鑻ラ渶瑕佸彲浠ュ啓鍏ヤ换鍔″彿绛夌瓑鍏朵粬淇℃伅}
-                                    //var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, endLocatVlue);
-                                    //if (retVal.IsSucceed)
-                                    //{
-                                    //    // 鍐欏叆鐮佸灈浜や簰-缁勬墭鍥炲娴佺▼瀛�
-                                    //    retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50");
-
-                                    //    // 灏嗗叆搴撲换鍔$敱姝e湪鎵ц鏀逛负姝e湪鎵ц
-                                    //    taskModel.Status = TaskStatusEnum.Doing;
-                                    //    _db.Updateable(taskModel).ExecuteCommand();
-                                    //}
-                                }   
+                                break;
                             }
-                        }
-                        else 
-                        {
+
                             // 鏍规嵁鎵樼洏鍙凤紝灏嗙粍鎵樹俊鎭彃鍏oxinfolog琛� 骞跺垹闄oxinfo琛ㄦ暟鎹�
-                            var boxInfoList = await _db.Queryable<WcsBoxInfo>().Where(w => w.IsDelete == false && w.PalletNo == palletNo).ToListAsync();
+                            var boxInfoList = _db.Queryable<WcsBoxInfo>().Where(w => w.IsDelete == false && w.PalletNo == palletNo).ToList();
                             if (boxInfoList.Count <= 0)
                             {
                                 Log.Error(string.Format("鐢宠宸烽亾澶辫触锛岀爜鍨涘伐浣峽0}锛岀鐮佷俊鎭笉瀛樺湪", modDevice.StationNum));
 
-                                // 鍐欏叆浜や簰宸ヤ綅鐩爣鍦板潃
-                                var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, "234");
-                                if (retVal.IsSucceed)
-                                {
-                                    // 鍐欏叆缁勬墭鍥炲娴佺▼瀛�
-                                    retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50");
-                                }
+                                // 鍐欏叆缁勬墭鍥炲娴佺▼瀛�
+                                var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "60");
                                 break;
                             }
-                            string sqlStr = $"insert into WCSBoxInfoLog select * from WCSBoxInfo where IsDelete=0 and PalletNo='{palletNo}'";
-                            int insertCount = _db.Ado.ExecuteCommand(sqlStr);
-                            if (insertCount > 0)
-                            {
-                                string sqlStr2 = $"delete from WCSBoxInfo where  IsDelete=0 and PalletNo='{palletNo}'";
-                                _db.Ado.ExecuteCommand(sqlStr2);
-                            }
+
                             // 鍚慦MS鐢宠宸烽亾
                             var http = new HttpService();
                             string TaskNo = "", EndLocate = "";
-                            string strMsg = http.BindRequestRoadWay(checkTaskMedel.OrderNo,palletNo, checkTaskMedel.BoxCount.ToDecimal(),"0", checkTaskMedel.SkuNo, checkTaskMedel.LotNo, "","", boxInfoList, 
-                                modDevice.StationNum, "1", "2", ref EndLocate, ref TaskNo);
-                            if (!strMsg.Contains("-1"))
+                            string strMsg = http.BindRequestRoadWay(checkTaskMedel.OrderNo, palletNo, checkTaskMedel.BoxCount.ToDecimal(), "0", checkTaskMedel.SkuNo, checkTaskMedel.LotNo, "", "", boxInfoList,
+                                modDevice.StationNum, "1", "1", ref EndLocate, ref TaskNo, (int)1351);
+                            if (strMsg.Contains("-1"))
                             {
                                 Log.Error(string.Format("鐢宠宸烽亾澶辫触锛岀爜鍨涘伐浣峽0};鍘熷洜{1}", modDevice.StationNum, strMsg));
+                                // 鍐欏叆缁勬墭鍥炲娴佺▼瀛�
+                                var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "60");
                                 break;
                             }
                             else
@@ -1986,54 +2806,61 @@
                                 var taskModel = _db.Queryable<WcsTask>().First(m => m.TaskNo == TaskNo && m.IsDelete == false && m.Status == TaskStatusEnum.Wait);
                                 if (taskModel != null)
                                 {
-                                    // 鑾峰彇鍏ュ簱鍙栬揣宸ヤ綅
-                                    string endLocatVlue = PLCCommon.RoadwayToStationNum(taskModel.EndRoadway, "2");
-
-                                    var listResult = new List<Result>();
-                                    // 鍐欏叆鎵樼洏杈撻�佺嚎鐮佸灈宸ヤ綅 鐩殑宸ヤ綅銆佷换鍔″彿锛屽啓鍏ヤ氦浜掓祦绋嬬粍鎵樻垚鍔� 鎵ц鍏ュ簱{鑻ラ渶瑕佸彲浠ュ啓鍏ヤ换鍔″彿绛夌瓑鍏朵粬淇℃伅}
-                                    listResult.Add(plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, endLocatVlue));    // 鐩爣宸ヤ綅
-                                    var modPosTask = PLCTaskAction.plcPositions.First(s => s.DeviceId == numModel.Id && s.Text == "浠诲姟鍙�" && s.IsDelete == false);
-                                    listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, numModel.DbNumber, modPosTask.PlcPos, TaskNo));
-                                    var modPosTaskType = PLCTaskAction.plcPositions.First(s => s.DeviceId == numModel.Id && s.Text == "浠诲姟绫诲瀷" && s.IsDelete == false);
-                                    var taskTypeStr = (int)taskModel.TaskType;
-                                    listResult.Add(plcConn.SetPlcDBValue(modPosTaskType.PosType, numModel.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString()));
-
-                                    if (listResult.All(s => s.IsSucceed))
+                                    // 鍐欏叆缁勬墭鍥炲娴佺▼瀛�
+                                    var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50");
+                                    if (retVal.IsSucceed)
                                     {
-                                        // 鍐欏叆缁勬墭鍥炲娴佺▼瀛�
-                                        var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50");
-                                        if (retVal.IsSucceed) 
-                                        {
-                                            // 灏嗗叆搴撲换鍔$敱姝e湪鎵ц鏀逛负姝e湪鎵ц
-                                            taskModel.Status = TaskStatusEnum.Doing;
-                                            _db.Updateable(taskModel).ExecuteCommand();
+                                        // 灏嗗叆搴撲换鍔$敱姝e湪鎵ц鏀逛负姝e湪鎵ц
+                                        taskModel.Status = TaskStatusEnum.Doing;
+                                        _db.Updateable(taskModel).ExecuteCommand();
 
-                                            // 鎻掑叆浠诲姟鏄庣粏 
-                                            var modInsertTaskMonitor = new WcsTaskMonitor()
-                                            {
-                                                TaskNo = TaskNo,
-                                                PlcId = modDevice.Id,
-                                                PlcName = modDevice.Text,
-                                                InteractiveMsg = $"鍐欏叆鎸囦护50锛氱敵璇峰贩閬撴垚鍔�",
-                                                PalletNo = palletNo,
-                                                Status = TaskStatusEnum.Complete,
-                                                StartLocat = modDevice.StationNum,
-                                                EndLocat = strMsg,
-                                            };
-                                            // 鎻掑叆浜や簰鏃ュ織
-                                            _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
-                                            // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈�
-                                            HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+                                        string sqlStr = $"insert into WCSBoxInfoLog select * from WCSBoxInfo where IsDelete=0 and PalletNo='{palletNo}'";
+                                        int insertCount = _db.Ado.ExecuteCommand(sqlStr);
+                                        if (insertCount > 0)
+                                        {
+                                            string sqlStr2 = $"delete from WCSBoxInfo where  IsDelete=0 and PalletNo='{palletNo}'";
+                                            _db.Ado.ExecuteCommand(sqlStr2);
                                         }
+
+                                        // 鎻掑叆浠诲姟鏄庣粏 
+                                        var modInsertTaskMonitor = new WcsTaskMonitor()
+                                        {
+                                            TaskNo = TaskNo,
+                                            PlcId = modDevice.Id,
+                                            PlcName = modDevice.Text,
+                                            InteractiveMsg = $"鍐欏叆鎸囦护50锛氱敵璇峰贩閬撴垚鍔�",
+                                            PalletNo = palletNo,
+                                            Status = TaskStatusEnum.Complete,
+                                            StartLocat = modDevice.StationNum,
+                                            EndLocat = strMsg,
+                                        };
+                                        // 鎻掑叆浜や簰鏃ュ織
+                                        _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
+                                        // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈�
+                                        HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
                                     }
                                 }
                             }
                         }
                     }
                     break;
-                default:break;
+                case "100":
+                    //鑷姩缁撴壒
+                    {
+                        // 鑾峰彇褰撳墠鍒嗛亾鎵樼洏鍙�
+                        var checkTaskMedel = _db.Queryable<WcsCheckTask>().First(m => m.Port == modDevice.StationNum && m.IsDelete == false);
+                        if (checkTaskMedel == null)
+                        {
+                            Log.Error(string.Format("鐮佸灈宸ヤ綅{0}锛屾壒娆1}锛岃嚜鍔ㄧ粨鎵瑰け璐�!璇蜂汉宸ュ己鍒剁粨鎵�!", modDevice.StationNum, checkTaskMedel.LotNo));
+                            break;
+                        }
+                        // 瑙﹀彂缁撴壒 瑙g粦鍒嗛亾
+                        AutoEndLot(checkTaskMedel.LotNo, plcConn, "0", modDevice);
+                    }
+                    break;
+                default: break;
             }
-        }        
+        }
     }
 
     /// <summary>
@@ -2055,26 +2882,6 @@
         }
     }
 
-    /// <summary>
-    /// Led灞忓睍绀轰俊鎭�
-    /// </summary>
-    /// <param name="ip">鍦板潃</param>
-    /// <param name="top">涓婃柟鍖哄煙</param>
-    /// <param name="content">涓棿鍖哄煙</param>
-    /// <param name="foot">搴曢儴鍖哄煙</param>
-    private static void LedDisplay(string ip, string top, string content, string foot)
-    {
-        try
-        {
-            LedDll Led = new LedDll();
-            Led.LEDstr(ip, top, content, foot);
-        }
-        catch (Exception ex)
-        {
-            Log.Error(ex.Message);
-        }
-    }
-
     private static void LedDisplay(string ip,string text) 
     {
         try
@@ -2090,6 +2897,77 @@
         }
     }
 
+    /// <summary>
+    /// 鑷姩缁撴壒 骞� 瑙g粦鍒嗛亾
+    /// </summary>
+    /// <param name="lotNo">鎵规鍙�</param>
+    /// <param name="plcConn">Plc杩炴帴</param>
+    /// <param name="status">鏄惁瑙g粦鍒嗛亾 0锛氳В缁�  1锛氱粦瀹�</param> 
+    private static void AutoEndLot(string lotNo, PLCUtil plcConn, string status, WcsDeviceDto modDevice)
+    {
+        try
+        {
+            if (string.IsNullOrWhiteSpace(lotNo))
+            {
+                Console.WriteLine("鎵规鍙蜂负null");
+            }
+
+            var checkTaskList = _db.Queryable<WcsCheckTask>().Where(w => w.LotNo == lotNo && w.Status == "1").ToList();
+            if (checkTaskList.Count <= 0)
+            {
+                Console.WriteLine("鏈壘鍒板垎閬撶粦瀹氫俊鎭�");
+            }
+            var taskInfo = _db.Queryable<WcsOderTask>().First(w => w.OrderNo == checkTaskList[0].OrderNo);
+            if (taskInfo != null)
+            { 
+                taskInfo.Status= TaskStatusEnum.Complete;//宸茬粨鏉�
+                //鏇存柊浠诲姟鐘舵��
+                _db.Updateable(taskInfo).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
+            }
+            foreach (var item in checkTaskList)
+            {
+                #region#缁橮LC鍐欏叆缁撴壒鎵规鍙�
+                var listResult = new List<Result>();
+                listResult.Add(plcConn.SetPlcDBValue(item.PosType, item.DbNumber, item.PlcPos, "0"));//鍝佺鍙�
+                listResult.Add(plcConn.SetPlcDBValue(item.PosTypeLot, item.DbNumber, item.PosLot, ""));//鎵规鍙�
+                listResult.Add(plcConn.SetPlcDBValue(item.PosTypeStatus, item.DbNumber, item.PosStatus, "0"));//缁戝畾鐘舵�� 0锛氭湭缁戝畾 1锛氬凡缁戝畾
+                if (listResult.All(s => s.IsSucceed))
+                {
+                    // 鍐欏叆缁勬墭鍥炲娴佺▼瀛�
+                    var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "110");
+                    if (retVal.IsSucceed)
+                    {
+                        //鍐欏叆娴佺▼瀛楁垚鍔熷悗鏇存柊鍒嗘嫞浠诲姟
+                        item.OrderNo = "";
+                        item.TaskNo = "";
+                        item.LotNo = "";
+                        item.SkuNo = "";
+                        item.SkuName = "";
+                        item.BoxType = "";
+                        item.Qty = 0;
+                        item.BoxCount = 0;
+                        item.PZNo = "";
+                        item.PalletNo = "";
+                        item.Status = status;      // 缁戝畾鍒嗛亾 0锛氳В缁�  1锛氱粦瀹� 
+
+                        //鏇存柊缁戝畾淇℃伅
+                        _db.Updateable(item).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
+                    }                   
+                }
+                else
+                {
+                    throw Oops.Bah("涓嶱CL浜や簰澶辫触锛岀粨鎵瑰け璐ワ紒");
+                }
+                #endregion
+            }
+        }
+        catch (Exception ex)
+        {
+            Log.Error(ex.Message);
+            throw;
+        }
+    }
+
     private static void Test(WcsDeviceDto modDevice)
     {
         //鍐欐娴嬭瘯璇籹tring

--
Gitblit v1.8.0