From 50f6cb0f96f04f505b9493f7621d8e49ad5add9d Mon Sep 17 00:00:00 2001
From: chengsc <Demo@DESKTOP-CPA90BF>
Date: 星期一, 04 十一月 2024 08:13:32 +0800
Subject: [PATCH] Merge branch 'master' of http://47.95.120.53:8083/r/WCSNet6

---
 Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceInput.cs     |    4 
 Web/src/api/wcs/wcsDevice.ts                                          |   16 
 Admin.NET/WCS.Application/PLC/PLCService.cs                           |  327 +++++++-------
 Admin.NET/WCS.Application/OpenApi/DemoOpenApi.cs                      |  119 +++++
 Web/src/views/device/deviceInfo/index.vue                             |  189 +++++--
 Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs       |  362 ++++++++++++++--
 Admin.NET/WCS.Application/Entity/WcsBoxInfo.cs                        |   27 +
 Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs |   39 
 Admin.NET/WCS.Application/PLC/PLCCommon.cs                            |    3 
 Admin.NET/WCS.Application/PLC/PLCTaskAction.cs                        |    6 
 Web/src/views/device/deviceStartStop/index.vue                        |   39 +
 Admin.NET/WCS.Application/Model/TaskRequest.cs                        |  128 +++++
 Web/src/views/wcs/wcsTask/index.vue                                   |   13 
 13 files changed, 968 insertions(+), 304 deletions(-)

diff --git a/Admin.NET/WCS.Application/Entity/WcsBoxInfo.cs b/Admin.NET/WCS.Application/Entity/WcsBoxInfo.cs
index 7d2b76e..c43cbdb 100644
--- a/Admin.NET/WCS.Application/Entity/WcsBoxInfo.cs
+++ b/Admin.NET/WCS.Application/Entity/WcsBoxInfo.cs
@@ -117,13 +117,19 @@
     /// </summary>
     [SugarColumn(ColumnName = "StoreTime", ColumnDescription = "瀛樺偍鏈熻嚦")]
     public DateTime? StoreTime { get; set; }
-    
+
+    /// <summary>
+    /// 鎶芥鏍囪
+    /// </summary>
+    [SugarColumn(ColumnName = "InsPectMark", ColumnDescription = "鎶芥鏍囪", Length = 3)]
+    public string? InsPectMark { get; set; }
+
     /// <summary>
     /// 闆剁鏍囪
     /// </summary>
     [SugarColumn(ColumnName = "BitBoxMark", ColumnDescription = "闆剁鏍囪", Length = 3)]
     public string? BitBoxMark { get; set; }
-    
+
     /// <summary>
     /// 绠辩爜
     /// </summary>
@@ -166,9 +172,22 @@
     [SugarColumn(ColumnName = "EndLotFlag", ColumnDescription = "缁撴壒鏍囪瘑", Length = 3)]
     public string? EndLotFlag { get; set; }
 
+    /// <summary>
+    /// 鎬讳欢鏁�
+    /// </summary>
+    [SugarColumn(ColumnName = "QtyCount", ColumnDescription = "鎬讳欢鏁�")]
+    public int? QtyCount { get; set; }
 
+    /// <summary>
+    /// 绗嚑浠�
+    /// </summary>
+    [SugarColumn(ColumnName = "QtyOrd", ColumnDescription = "绗嚑浠�")]
+    public int? QtyOrd { get; set; }
 
-
-
+    /// <summary>
+    /// 鐘舵��
+    /// </summary>
+    [SugarColumn(ColumnName = "Status", ColumnDescription = "鐘舵��", Length = 3)]
+    public string? Status { get; set; }
 
 }
diff --git a/Admin.NET/WCS.Application/Model/TaskRequest.cs b/Admin.NET/WCS.Application/Model/TaskRequest.cs
index fc7a5c1..105610b 100644
--- a/Admin.NET/WCS.Application/Model/TaskRequest.cs
+++ b/Admin.NET/WCS.Application/Model/TaskRequest.cs
@@ -305,3 +305,131 @@
     public List<ResponseTasksModel> TaskList { get; set; }
 }
 
+
+/// <summary>
+/// 杩斿洖璧嬬爜绯荤粺鍝嶅簲鍙傛暟
+/// </summary>
+public class ResponseFuMaModel
+{
+    /// <summary>
+    /// 鐘舵�佺爜 0鎴愬姛  -1锛氬け璐�
+    /// </summary>
+    public string Success { get; set; }
+    /// <summary>
+    /// 鎻愮ず淇℃伅
+    /// </summary>
+    public string Message { get; set; }
+}
+
+/// <summary>
+/// 璧嬬爜绯荤粺鎺ㄩ�佺鐮佷俊鎭�
+/// </summary>
+public class FumaBoxInfoInput
+{
+    /// <summary>
+    /// 绠辩爜
+    /// </summary>
+    public string BoxNo { get; set; }
+    /// <summary>
+    /// 鍗曟嵁鍙�
+    /// </summary>
+    public string OrderNo { get; set; }
+    /// <summary>
+    /// 鐗╂枡缂栫爜
+    /// </summary>
+    public string SkuNo { get; set; }
+    /// <summary>
+    /// 鐗╂枡鍚嶇О
+    /// </summary>
+    public string SkuName { get; set; }
+    /// <summary>
+    /// 鐗╂枡瑙勬牸
+    /// </summary>
+    public string Standard { get; set; }
+    /// <summary>
+    /// 鎵规鍙�
+    /// </summary>
+    public string LotNo { get; set; }
+    /// <summary>
+    /// 鏁伴噺
+    /// </summary>
+    public decimal Qty { get; set; }
+    /// <summary>
+    /// 婊$鏁伴噺
+    /// </summary>
+    public decimal FullQty { get; set; }
+    /// <summary>
+    /// 渚涜揣鍟嗘壒娆�
+    /// </summary>
+    public string SupplierLot { get; set; }
+    /// <summary>
+    /// 鏄惁鎶芥绠� 0鍚�   1鏄�
+    /// </summary>
+    public string InsPectMark { get; set; }
+    /// <summary>
+    /// 鏄惁闆剁  0鍚�   1鏄�
+    /// </summary>
+    public string BitBoxMark { get; set; }
+    /// <summary>
+    /// 璐ㄦ鐘舵�� 0寰呮锛堥粯璁わ級  1鍚堟牸  2涓嶅悎鏍�
+    /// </summary>
+    public string InspectStatus { get; set; }
+    /// <summary>
+    /// 鐢熶骇鏃ユ湡
+    /// </summary>
+    public string ProductionTime { get; set; }
+    /// <summary>
+    /// 澶辨晥鏃ユ湡
+    /// </summary>
+    public string ExpirationTime { get; set; }
+    /// <summary>
+    /// 鍌ㄥ瓨鏈熻嚦
+    /// </summary>
+    public string StoreTime { get; set; }
+    /// <summary>
+    /// 鏉ユ簮 鍥哄畾鍊糩璧嬬爜]
+    /// </summary>
+    public string Origin { get; set; }
+    /// <summary>
+    /// 缁撴壒鏍囪瘑 0/绌猴細鍚�   1锛氭槸
+    /// </summary>
+    public string EndBatchMark { get; set; }
+    /// <summary>
+    /// 绠卞唴鏄庣粏
+    /// </summary>
+    public List<BoxList> DelistList { get; set; }
+
+}
+
+public class BoxList
+{
+    /// <summary>
+    /// 鐩掔爜
+    /// </summary>
+    public string BoxNo2 { get; set; }
+    /// <summary>
+    /// 鏀爜闆嗗悎
+    /// </summary>
+    public List<BoxList2> DelistList2 { get; set; }
+}
+
+public class BoxList2
+{
+    /// <summary>
+    /// 鏀爜
+    /// </summary>
+    public string BoxNo3 { get; set; }
+    /// <summary>
+    /// 鏁伴噺
+    /// </summary>
+    public decimal Qty { get; set; }
+    /// <summary>
+    /// 鎬讳欢鏁�
+    /// </summary>
+    public int? QtyCount { get; set; }
+    /// <summary>
+    /// 绗嚑浠�
+    /// </summary>
+    public int? QtyOrd { get; set; }
+}
+
diff --git a/Admin.NET/WCS.Application/OpenApi/DemoOpenApi.cs b/Admin.NET/WCS.Application/OpenApi/DemoOpenApi.cs
index 838dae2..6de853a 100644
--- a/Admin.NET/WCS.Application/OpenApi/DemoOpenApi.cs
+++ b/Admin.NET/WCS.Application/OpenApi/DemoOpenApi.cs
@@ -1,4 +1,8 @@
-锘縰sing Elastic.Clients.Elasticsearch;
+锘縰sing DocumentFormat.OpenXml.Presentation;
+using Elastic.Clients.Elasticsearch;
+using Furion.Logging;
+using Newtonsoft.Json;
+using System;
 using System.Diagnostics.CodeAnalysis;
 using System.Linq;
 using System.Text;
@@ -159,4 +163,117 @@
         }
     }
 
+
+    /// <summary>
+    /// WCS鎺ュ彈璧嬬爜绯荤粺鎺ㄩ�佺殑绠辩爜淇℃伅
+    /// </summary>
+    /// <param name="models">绠辩爜淇℃伅</param>
+    /// <returns>鍙嶉淇℃伅</returns>
+    [HttpPost]
+    [AllowAnonymous]
+    public ResponseFuMaModel AddHttpBoxInfo(FumaBoxInfoInput models)
+    {
+        
+        try
+        {
+            string str = JsonConvert.SerializeObject(models);
+            Log.Information("鎺ユ敹璧嬬爜鎺ㄩ�佺殑绠辩爜淇℃伅锛�"+str);
+            if (models.Origin != "璧嬬爜")
+            {
+                throw new Exception("鏉ユ簮鏈瘑鍒�");
+            }
+            var num = _db.Queryable<WcsBoxInfo>().Where(m=>m.BoxNo == models.BoxNo && m.IsDelete == false).ToList();
+            var type = "add";
+            if (num.Count>0)
+            {
+                //WCS瀛樺湪绠辩爜淇℃伅锛屾洿鏂扮鐮佷俊鎭�(闇�鍒ゆ柇绠辩爜鏄惁宸茬粍鐩樺叆搴�)
+                var num2 = num.Count(m => m.Status != "0" || !string.IsNullOrWhiteSpace(m.PalletNo));
+                if (num2 > 0)
+                {
+                    throw new Exception("璇ョ宸插叆鐩樺叆搴擄紝涓嶅彲鏇存柊淇℃伅");
+                }
+                type = "edit";
+            }
+            
+            if (models.DelistList.Count == 0) 
+            {
+                throw new Exception("鐩掔爜闆嗗悎涓嶈兘涓虹┖");
+            }
+            
+            var listBox = new List<WcsBoxInfo>();
+            foreach (var item in models.DelistList)
+            {
+                var level = "3";
+                if (string.IsNullOrWhiteSpace(item.BoxNo2))
+                {
+                    level = "2";
+                }
+                if (item.DelistList2.Count == 0)
+                {
+                    throw new Exception("鍊肩爜闆嗗悎涓嶈兘涓虹┖");
+                }
+                //浜岀骇鐮�
+                foreach (var item2 in item.DelistList2)
+                {
+                    if (string.IsNullOrWhiteSpace(models.ProductionTime) || string.IsNullOrWhiteSpace(models.ExpirationTime))
+                    {
+                        throw new Exception("鐢熶骇鏃ユ湡鎴栧け鏁堟棩鏈熶笉鑳戒负绌�");
+                    }
+                    DateTime proTime;
+                    DateTime expTime;
+                    var isValid = DateTime.TryParse(models.ProductionTime, out proTime);
+                    var isValid2 = DateTime.TryParse(models.ExpirationTime, out expTime);
+                    if (!isValid || !isValid2)
+                    {
+                        throw new Exception("鐢熶骇鏃ユ湡鎴栧け鏁堟棩鏈熸牸寮忛敊璇�");
+                    };
+
+                    var boxAdd = new WcsBoxInfo()
+                    {
+                        BoxNo = models.BoxNo,
+                        //OrderNo = models.OrderNo,
+                        SkuNo = models.SkuNo,
+                        SkuName = models.SkuName,
+                        Standard = models.Standard,
+                        LotNo = models.LotNo,
+                        Qty = item2.Qty,
+                        FullQty = models.FullQty,
+                        //SupplierLot = models.SupplierLot,
+                        InsPectMark = models.InsPectMark,
+                        BitBoxMark = models.BitBoxMark,
+                        //InspectStatus = models.InspectStatus锛�
+                        ProductionTime = proTime,
+                        ExpirationTime = expTime,
+                        StoreTime = DateTime.Parse(models.StoreTime),
+                        EndLotFlag = string.IsNullOrWhiteSpace(models.EndBatchMark) ? "0" : models.EndBatchMark,
+
+                        BoxNo2 = item.BoxNo2,
+                        BoxNo3 = item2.BoxNo3,
+                        QtyCount = item2.QtyCount,
+                        QtyOrd = item2.QtyOrd,
+
+                        Status = "0",
+                        Level = level,
+
+                        IsDelete = false
+                    };
+                    listBox.Add(boxAdd);
+                }
+
+            }
+            _db.Insertable(listBox).ExecuteCommand();
+            if (type == "edit")
+            {
+                //gen
+                _db.Deleteable(num).ExecuteCommand();
+                return new ResponseFuMaModel() { Success = "0", Message = "鏇存柊鎴愬姛" };
+            }
+            return new ResponseFuMaModel() { Success = "0", Message = "鎻掑叆鎴愬姛" };
+        }
+        catch (Exception ex)
+        {
+            return new ResponseFuMaModel() { Success = "-1", Message = ex.Message };
+        }
+    }
+
 }
\ No newline at end of file
diff --git a/Admin.NET/WCS.Application/PLC/PLCCommon.cs b/Admin.NET/WCS.Application/PLC/PLCCommon.cs
index 2cc7b0b..9cb4230 100644
--- a/Admin.NET/WCS.Application/PLC/PLCCommon.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCCommon.cs
@@ -328,6 +328,7 @@
     /// <returns></returns>
     public static PLCUtil GetPlcIp(string startStation) 
     {
+        startStation = startStation.PadLeft(3, '0');
         string strIp = "";
         var conveyList1 = new List<string>() { "147", "145", "139", "137", "129", "127", "121", "119", "111", "109", "103", "101", "093", "091", "085", "083", "075", "073", "067", "065","033","039","044" ,"051","059"};
         var conveyList2 = new List<string>() { "205", "234", "252", "254", "260", "262", "270", "272", "278", "280", "288", "290", "294", "301", "307", "309", "315", "317", "325", "327", "331", "337" };
@@ -604,6 +605,8 @@
     /// <returns>璺烘満鑱旀満</returns>
     public static string GetRoadwayByStation(string StationNum)
     {
+        StationNum = StationNum.PadLeft(3, '0');
+
         string value = "";
         var conveyList1 = new List<string>() { "147", "145", "252", "254", "401", "402", };
         var conveyList2 = new List<string>() { "139", "137", "260", "262", "405", "406", };
diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs
index c34b5ad..01ea309 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);
 
@@ -1705,7 +1706,7 @@
                                     }
                                 }
                                 // 鏍规嵁绠卞唴鍝佺鍙疯幏鍙栫爜韬茬粦瀹氬伐浣嶅強瀵瑰簲鐨勫垎閬撳彿
-                                var checkTaskInfo = _db.Queryable<WcsCheckTask>().First(w => w.SkuNo == boxInfo.SkuNo && w.SkuName == boxInfo.SkuName && w.LotNo == boxInfo.LotNo);
+                                var checkTaskInfo = _db.Queryable<WcsCheckTask>().First(w => w.SkuNo == boxInfo.SkuNo && w.SkuName == boxInfo.SkuName && w.LotNo == boxInfo.LotNo && w.Status == "1");
                                 if (checkTaskInfo == null)
                                 {
                                     // 缁戝畾淇℃伅涓簄ull鍐欏叆鍓旈櫎閫氶亾鍙�
@@ -1868,181 +1869,184 @@
                 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)
                             {
-                                // 鍐欏叆缁勬墭鍥炲娴佺▼瀛�
-                                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));
-                                break;
-                            }
-                            else 
-                            {
-                                // 鑾峰彇鍏ュ簱浠诲姟淇℃伅
-                                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();
-                                    //}
-                                }   
-                            }
-                        }
-                        else 
-                        {
-                            // 鏍规嵁鎵樼洏鍙凤紝灏嗙粍鎵樹俊鎭彃鍏oxinfolog琛� 骞跺垹闄oxinfo琛ㄦ暟鎹�
-                            var boxInfoList = await _db.Queryable<WcsBoxInfo>().Where(w => w.IsDelete == false && w.PalletNo == palletNo).ToListAsync();
-                            if (boxInfoList.Count <= 0)
-                            {
-                                Log.Error(string.Format("鐢宠宸烽亾澶辫触锛岀爜鍨涘伐浣峽0}锛岀鐮佷俊鎭笉瀛樺湪", modDevice.StationNum));
+                                Log.Error(string.Format("缁勬墭澶辫触鏍规嵁鐮佸灈宸ヤ綅{0}锛岃幏鍙栨墭鐩樺彿澶辫触!", modDevice.StationNum));
 
                                 // 鍐欏叆浜や簰宸ヤ綅鐩爣鍦板潃
                                 var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, "234");
-                                if (retVal.IsSucceed)
+                                if (retVal.IsSucceed) 
                                 {
                                     // 鍐欏叆缁勬墭鍥炲娴佺▼瀛�
                                     retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50");
                                 }
                                 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 palletNo = checkTaskMedel.PalletNo;
+
+                            // 鏄惁婕旂ず妯″紡
+                            if (PLCTaskAction.boDemo)
                             {
-                                // 缁勬墭鎴愬姛鍚庡皢淇℃伅瀛樺埌log琛�
-                                string sqlStr2 = $"delete from WCSBoxInfoLog 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"))
-                            {
-                                Log.Error(string.Format("鐢宠宸烽亾澶辫触锛岀爜鍨涘伐浣峽0};鍘熷洜{1}", modDevice.StationNum, strMsg));
-                                break;
-                            }
-                            else
-                            {
-                                // 鑾峰彇鍏ュ簱浠诲姟淇℃伅
-                                var taskModel = _db.Queryable<WcsTask>().First(m => m.TaskNo == TaskNo && m.IsDelete == false && m.Status == TaskStatusEnum.Wait);
-                                if (taskModel != null)
+                                // 鐩存帴绠眞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"))
                                 {
-                                    // 鑾峰彇鍏ュ簱鍙栬揣宸ヤ綅
-                                    string endLocatVlue = PLCCommon.RoadwayToStationNum(taskModel.EndRoadway, "2");
+                                    Log.Error(string.Format("鐢宠宸烽亾澶辫触锛岀爜鍨涘伐浣峽0};鍘熷洜{1}", modDevice.StationNum, strMsg));
+                                    break;
+                                }
+                                else 
+                                {
+                                    // 鑾峰彇鍏ュ簱浠诲姟淇℃伅
+                                    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()));
+                                        var listResult = new List<Result>();
 
-                                    if (listResult.All(s => s.IsSucceed))
+                                        // 鍐欏叆鎵樼洏杈撻�佺嚎鐮佸灈宸ヤ綅 鐩殑宸ヤ綅銆佷换鍔″彿锛屽啓鍏ヤ氦浜掓祦绋嬬粍鎵樻垚鍔� 鎵ц鍏ュ簱{鑻ラ渶瑕佸彲浠ュ啓鍏ヤ换鍔″彿绛夌瓑鍏朵粬淇℃伅}
+                                        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();
+                                        //}
+                                    }   
+                                }
+                            }
+                            else 
+                            {
+                                // 鏍规嵁鎵樼洏鍙凤紝灏嗙粍鎵樹俊鎭彃鍏oxinfolog琛� 骞跺垹闄oxinfo琛ㄦ暟鎹�
+                                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)
                                     {
                                         // 鍐欏叆缁勬墭鍥炲娴佺▼瀛�
-                                        var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50");
-                                        if (retVal.IsSucceed) 
-                                        {
-                                            // 灏嗗叆搴撲换鍔$敱姝e湪鎵ц鏀逛负姝e湪鎵ц
-                                            taskModel.Status = TaskStatusEnum.Doing;
-                                            _db.Updateable(taskModel).ExecuteCommand();
+                                        retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50");
+                                    }
+                                    break;
+                                }
+                                string sqlStr = $"insert into WCSBoxInfoLog select * from WCSBoxInfo where IsDelete=0 and PalletNo='{palletNo}'";
+                                int insertCount = _db.Ado.ExecuteCommand(sqlStr);
+                                if (insertCount > 0)
+                                {
+                                    // 缁勬墭鎴愬姛鍚庡皢淇℃伅瀛樺埌log琛�
+                                    string sqlStr2 = $"delete from WCSBoxInfoLog 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"))
+                                {
+                                    Log.Error(string.Format("鐢宠宸烽亾澶辫触锛岀爜鍨涘伐浣峽0};鍘熷洜{1}", modDevice.StationNum, strMsg));
+                                    break;
+                                }
+                                else
+                                {
+                                    // 鑾峰彇鍏ュ簱浠诲姟淇℃伅
+                                    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 modInsertTaskMonitor = new WcsTaskMonitor()
+                                        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) 
                                             {
-                                                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>());
+                                                // 灏嗗叆搴撲换鍔$敱姝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>());
+                                            }
                                         }
                                     }
                                 }
@@ -2114,11 +2118,11 @@
     }
 
     /// <summary>
-    /// 鑷姩缁撴壒
+    /// 鑷姩缁撴壒 骞� 瑙g粦鍒嗛亾
     /// </summary>
     /// <param name="lotNo">鎵规鍙�</param>
     /// <param name="plcConn">Plc杩炴帴</param>
-    /// <param name="status">鏄惁瑙g粦鍒嗛亾 0锛氳В缁�  1锛氱粦瀹�</param>
+    /// <param name="status">鏄惁瑙g粦鍒嗛亾 0锛氳В缁�  1锛氱粦瀹�</param> 
     private static void AutoEndLot(string lotNo,PLCUtil plcConn,string status) 
     {
         try
@@ -2135,7 +2139,10 @@
             foreach (var item in checkTaskList)
             {
                 #region#缁橮LC鍐欏叆缁撴壒鎵规鍙�
+                // 鍐欏叆缁撴壒淇″彿
                 var ret = plcConn.SetPlcDBValue(item.PosTypeLot, item.DbNumber, item.PosLot, "1");
+                // 鍒嗛亾瑙g粦锛屾姄绠卞搧绉嶅啓鍏�0
+                var ret1 = plcConn.SetPlcDBValue(item.PosTypeLot, item.DbNumber, item.PlcPos, "0");
                 if (ret.IsSucceed)
                 {
                     //鍐欏叆娴佺▼瀛楁垚鍔熷悗鏇存柊鍒嗘嫞浠诲姟    liudl 鏈�鍚庝竴鎵樼洏鐢宠瀹屽叆搴撴墠鍙竻绌�
@@ -2146,7 +2153,7 @@
                     //item.SkuName = "";
                     //item.BoxType = "";
                     //item.Qty = 0;
-                    //item.PZNo = "";
+                    item.PZNo = "";
                     item.Status = status;      // 缁戝畾鍒嗛亾 0锛氳В缁�  1锛氱粦瀹� 
 
                     //鏇存柊鍒嗘嫞浠诲姟
diff --git a/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs b/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
index 504a4e7..390cd4c 100644
--- a/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
@@ -141,7 +141,7 @@
                         }
                         if (!modPlcUtil.Connected)
                         {
-                            Thread.Sleep(10000);
+                            Thread.Sleep(1000);
                             modPlcUtil.Open();
                             continue;
                         }
@@ -182,7 +182,7 @@
                             }
                         }
 
-                        Thread.Sleep(50000);
+                        Thread.Sleep(1000);
                     }
                     catch (OperationCanceledException)
                     {
@@ -245,7 +245,7 @@
                             HubUtil.PublicPlcConn(modPlc);
                         }
                     }
-                    Thread.Sleep(1000);
+                    Thread.Sleep(10000);
                 }
             }
             catch (OperationCanceledException)
diff --git a/Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs b/Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs
index 82a8859..b99dd08 100644
--- a/Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs
+++ b/Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs
@@ -233,26 +233,27 @@
     [DisplayName("浠诲姟寮哄埗缁撴壒")]
     public async Task CloseTaskForPLC(CloseTaskPLCInput input)
     {
-        if (PLCTaskAction.boDemo)
-        {
-            //婕旂ず妯″紡
-            var checkTaskList2 = await _wcsCheckTaskRep.Context.Queryable<WcsCheckTask>().FirstAsync(w => w.Port == "208");
+        //  娉ㄩ噴锛氭紨绀烘ā寮忎笉缁戝畾鍒嗛亾銆俵iudl 2024-10-30
+        //if (PLCTaskAction.boDemo)
+        //{
+        //    //婕旂ず妯″紡
+        //    var checkTaskList2 = await _wcsCheckTaskRep.Context.Queryable<WcsCheckTask>().FirstAsync(w => w.Port == "208");
 
-            var deviceInfo = await _wcsDeviceRep.Context.Queryable<WcsDevice>().FirstAsync(w => w.StationNum == "208");
-            if (deviceInfo == null)
-            {
-                throw Oops.Bah($"鎵句笉鍒板伐浣嶅彿锛�208鐨勭爜鍨涘伐浣嶄俊鎭�");
-            }
-            var modPlc = await _wcsDeviceRep.Context.Queryable<WcsPlc>().FirstAsync(s => s.Id == deviceInfo.PlcId);
-            if (modPlc == null)
-            {
-                throw Oops.Bah($"鎵句笉鍒板伐浣嶅彿锛�208鐨勮澶囦俊鎭�");
-            }
-            PLCUtil modUtil = new PLCUtil(modPlc);
+        //    var deviceInfo = await _wcsDeviceRep.Context.Queryable<WcsDevice>().FirstAsync(w => w.StationNum == "208");
+        //    if (deviceInfo == null)
+        //    {
+        //        throw Oops.Bah($"鎵句笉鍒板伐浣嶅彿锛�208鐨勭爜鍨涘伐浣嶄俊鎭�");
+        //    }
+        //    var modPlc = await _wcsDeviceRep.Context.Queryable<WcsPlc>().FirstAsync(s => s.Id == deviceInfo.PlcId);
+        //    if (modPlc == null)
+        //    {
+        //        throw Oops.Bah($"鎵句笉鍒板伐浣嶅彿锛�208鐨勮澶囦俊鎭�");
+        //    }
+        //    PLCUtil modUtil = new PLCUtil(modPlc);
             
-            var ret = modUtil.SetPlcDBValue(checkTaskList2.PosTypeLot, checkTaskList2.DbNumber, checkTaskList2.PosLot, "1");
-            return;
-        }
+        //    var ret = modUtil.SetPlcDBValue(checkTaskList2.PosTypeLot, checkTaskList2.DbNumber, checkTaskList2.PosLot, "1");
+        //    return;
+        //}
 
         // 姝e父妯″紡
         if (string.IsNullOrWhiteSpace(input.lotNo))
@@ -280,7 +281,7 @@
             PLCUtil modUtil = new PLCUtil(modPlc);
             if (modUtil.Connected)
             {
-                var ret = modUtil.SetPlcDBValue(item.PosTypeLot, item.DbNumber, item.PosLot, "1");
+                var ret = modUtil.SetPlcDBValue(item.PosTypeLot, item.DbNumber, item.PosLot, "0");    // 瑙g粦鍒嗛亾
                 if (ret.IsSucceed)
                 {
                     //鍐欏叆娴佺▼瀛楁垚鍔熷悗鏇存柊鍒嗘嫞浠诲姟
diff --git a/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceInput.cs b/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceInput.cs
index 2428bf4..8bcd3a2 100644
--- a/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceInput.cs
+++ b/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceInput.cs
@@ -373,6 +373,10 @@
     /// 妤煎眰
     /// </summary>
     public string Layer { get; set; }
+    /// <summary>
+    /// 浜嬩欢缁撴灉 true/false
+    /// </summary>
+    public string FuncName { get; set; }
 }
 
 
diff --git a/Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs b/Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs
index ee6a929..dd5008e 100644
--- a/Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs
+++ b/Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs
@@ -27,6 +27,150 @@
 
     #region 宸ヤ綔鍙版搷浣�
 
+
+    /// <summary>
+    /// 鎵嬪姩鎿嶄綔PLC閿佸畾鍐欏叆宸ヤ綅淇℃伅
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "WriteLocationInfo")]
+    [DisplayName("鎵嬪姩鎿嶄綔PLC閿佸畾鍐欏叆宸ヤ綅淇℃伅")]
+    public async Task WriteLocationInfo(WcsDeviceUpInfo input)
+    {
+        WcsPlc modPlc;
+        string DbNum = "";// DB鍧�
+
+        if (string.IsNullOrWhiteSpace(input.LocatNo))//濡傛灉宸ヤ綅涓虹┖
+        {
+            throw Oops.Bah("宸ヤ綅涓嶈兘涓虹┖");
+        }
+        var plcList = await _wcsPlcRep.Context.Queryable<WcsPlc>().Where(s => s.Type == PLCTypeEnum.ConveyorLine && s.IsDelete == false).ToListAsync();
+        switch (input.Layer)
+        {
+            case "1":
+                modPlc = plcList.FirstOrDefault(m => m.Text == "1灞傛墭鐩樿緭閫佺嚎");
+                if (modPlc == null)
+                    throw Oops.Bah($"鏈煡璇㈠埌{input.Layer}妤煎眰PLC淇℃伅");
+                DbNum = "";
+                break;
+            case "2":
+                modPlc = plcList.FirstOrDefault(m => m.Text == "2灞傛墭鐩樿緭閫佺嚎");
+                if (modPlc == null)
+                    throw Oops.Bah($"鏈煡璇㈠埌{input.Layer}妤煎眰PLC淇℃伅");
+                DbNum = "DB91";
+                break;
+            case "3":
+                modPlc = plcList.FirstOrDefault(m => m.Text == "3灞傛墭鐩樿緭閫佺嚎");
+                if (modPlc == null)
+                    throw Oops.Bah($"鏈煡璇㈠埌{input.Layer}妤煎眰PLC淇℃伅");
+                DbNum = "";
+                break;
+            default:
+                throw Oops.Bah("妤煎眰淇℃伅閿欒");
+        }
+
+        var device = await _wcsDeviceRep.Context.Queryable<WcsDevice>().FirstAsync(s => s.PlcId == modPlc.Id && s.StationNum == input.LocatNo && s.IsDelete == false && s.DeviceType == DeviceTypeEnum.Show);
+        if (device == null)
+        {
+            throw Oops.Bah("褰撳墠妤煎眰鏈煡璇㈠埌璇ュ伐浣嶄俊鎭�");
+        }
+        PLCUtil modUtil = new PLCUtil(modPlc);
+
+        switch (input.TypeName)
+        {
+            case "suoding":     // 閿佸畾
+                modUtil.SetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "48.0", input.LocatNo);
+                break;
+            
+            default:
+                break;
+        }
+
+        modUtil.Close();
+    }
+
+
+    /// <summary>
+    /// 鑾峰彇宸ヤ綅涓婁俊鎭�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "GetLocationInfo")]
+    [DisplayName("鑾峰彇宸ヤ綅涓婁俊鎭�")]
+    public async Task<WcsDeviceUpInfo> GetLocationInfo(WcsDeviceUpInfo input)
+    {
+        WcsPlc modPlc;
+        string DbNum = "";// DB鍧�
+
+        if (string.IsNullOrWhiteSpace(input.LocatNo))//濡傛灉宸ヤ綅涓虹┖
+        {
+            throw Oops.Bah("宸ヤ綅涓嶈兘涓虹┖");
+        }
+        var plcList = await _wcsPlcRep.Context.Queryable<WcsPlc>().Where(s => s.Type == PLCTypeEnum.ConveyorLine && s.IsDelete == false).ToListAsync();
+        switch (input.Layer)
+        {
+            case "1":
+                modPlc = plcList.FirstOrDefault(m => m.Text == "1灞傛墭鐩樿緭閫佺嚎");
+                if (modPlc == null)
+                    throw Oops.Bah($"鏈煡璇㈠埌{input.Layer}妤煎眰PLC淇℃伅");
+                DbNum = "";
+                break;
+            case "2":
+                modPlc = plcList.FirstOrDefault(m => m.Text == "2灞傛墭鐩樿緭閫佺嚎");
+                if (modPlc == null)
+                    throw Oops.Bah($"鏈煡璇㈠埌{input.Layer}妤煎眰PLC淇℃伅");
+                DbNum = "DB1100";
+                break;
+            case "3":
+                modPlc = plcList.FirstOrDefault(m => m.Text == "3灞傛墭鐩樿緭閫佺嚎");
+                if (modPlc == null)
+                    throw Oops.Bah($"鏈煡璇㈠埌{input.Layer}妤煎眰PLC淇℃伅");
+                DbNum = "";
+                break;
+            default:
+                throw Oops.Bah("妤煎眰淇℃伅閿欒");
+        }
+
+        var device = await _wcsDeviceRep.Context.Queryable<WcsDevice>().FirstAsync(s => s.PlcId == modPlc.Id && s.StationNum == input.LocatNo && s.IsDelete == false && s.DeviceType == DeviceTypeEnum.Show);
+        if (device == null)
+        {
+            throw Oops.Bah("褰撳墠妤煎眰鏈煡璇㈠埌璇ュ伐浣嶄俊鎭�");
+        }
+        PLCUtil modUtil = new PLCUtil(modPlc);
+        WcsDeviceUpInfo data = new WcsDeviceUpInfo();
+        data.FuncName = "";
+        data.Layer = "";
+        data.LocatNo = input.LocatNo;
+        data.TypeName = "";
+        var (result2, value2) = modUtil.GetPlcDBValue(PLCDataTypeEnum.String, DbNum, "4");
+        data.PalletNo = value2;
+        var (result3, value3) = modUtil.GetPlcDBValue(PLCDataTypeEnum.String, DbNum, "14");
+        data.TaskNo = value3;
+        var (result4, value4) = modUtil.GetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "34");
+        data.StartLoction = value4.ToString();
+        var (result5, value5) = modUtil.GetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "36");
+        data.EndLoction = value5.ToString();
+
+        var (result6, value6) = modUtil.GetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "38");
+        data.StartPai = value6.ToString();
+        var (result7, value7) = modUtil.GetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "40");
+        data.StartLie = value7.ToString();
+        var (result8, value8) = modUtil.GetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "42");
+        data.StartCeng = value8.ToString();
+
+
+        var (result9, value9) = modUtil.GetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "44");
+        data.EndPai = value9.ToString();
+        var (result10, value10) = modUtil.GetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "46");
+        data.EndLie = value10.ToString();
+        var (result11, value11) = modUtil.GetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "48");
+        data.EndCeng = value11.ToString();
+
+        modUtil.Close();
+        return data;
+    }
     /// <summary>
     /// 鎵嬪姩鎿嶄綔PLC淇℃伅
     /// </summary>
@@ -57,7 +201,7 @@
                 modPlc = plcList.FirstOrDefault(m => m.Text == "2灞傛墭鐩樿緭閫佺嚎");
                 if (modPlc == null)
                     throw Oops.Bah($"鏈煡璇㈠埌{input.Layer}妤煎眰PLC淇℃伅");
-                DbNum = "91";
+                DbNum = "DB91";
                 break;
             case "3":
                 modPlc = plcList.FirstOrDefault(m => m.Text == "3灞傛墭鐩樿緭閫佺嚎");
@@ -74,12 +218,14 @@
         {
             throw Oops.Bah("褰撳墠妤煎眰鏈煡璇㈠埌璇ュ伐浣嶄俊鎭�");
         }
-
         PLCUtil modUtil = new PLCUtil(modPlc);
+        
+
+        // true 锛� 鎵嬪姩妯″紡    false:鑷姩妯″紡
         var (result, value) = modUtil.GetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.4");
         if (result.IsSucceed)
         {
-            if (input.TypeName != "shoudong" && value.ToString().ToLower() != "false")
+            if (input.TypeName != "shoudong" && value.ToString().ToLower() == "false"  && input.TypeName != "huifu" && input.TypeName != "UpTask" )
             {
                 throw Oops.Bah("褰撳墠涓鸿嚜鍔ㄦā寮忥紝璇峰厛鍒囨崲涓烘墜鍔ㄦā寮�");
             }
@@ -88,19 +234,33 @@
         {
             throw Oops.Bah("璇诲彇PLC鎵嬭嚜鍔ㄥ�煎け璐�");
         }
-        modUtil.SetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "48.0", input.LocatNo);
+        
         switch (input.TypeName)
         {
-            case "zidong":
-                modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.4", "true");
-                break;
-            case "shoudong":
+            case "zidong":     // 鑷姩
+                //modUtil.SetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "48.0", input.LocatNo);
                 modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.4", "false");
                 break;
-            case "huifu":
-                modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "47.0", "true");
+            case "shoudong":    // 鎵嬪姩
+                //modUtil.SetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "48.0", input.LocatNo);
+                modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.4", "true");
                 break;
-            case "1diandong":
+            case "huifu":       // 鎶ヨ鎭㈠
+                if (input.FuncName == "true")
+                {
+                    modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "47.0", "true");
+                }
+                else if (input.FuncName == "false")
+                {
+                    modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "47.0", "false");
+                }
+                else
+                {
+                    throw Oops.Bah("浜嬩欢缁撴灉閿欒");
+                }
+                
+                break;
+            case "1diandong":   // 1鐐瑰姩
                 if(input.FuncName == "true")
                 {
                     modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.7", "true");
@@ -114,7 +274,7 @@
                     throw Oops.Bah("浜嬩欢缁撴灉閿欒");
                 }
                 break;
-            case "1liandong":
+            case "1liandong":       // 1鑱斿姩
                 if (input.FuncName == "true")
                 {
                     modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "51.3", "true");
@@ -269,7 +429,24 @@
                 }
                 break;
             case "UpTask":
-                modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.0", "true");
+                var (result1, value2) = modUtil.GetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.0");
+                if (result.IsSucceed)
+                {
+                    if (value2 == true)
+                    {
+                        modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.0", "false");
+                    }
+                    else
+                    {
+                        modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.0", "true");
+                    }
+                }
+                else
+                {
+                    throw Oops.Bah("璇诲彇PLC鍊煎け璐�");
+                }
+                
+                
                 break;
             default:
                 break;
@@ -310,8 +487,8 @@
                 modPlc = plcList.FirstOrDefault(m => m.Text == "2灞傛墭鐩樿緭閫佺嚎");
                 if (modPlc == null)
                     throw Oops.Bah($"鏈煡璇㈠埌{input.Layer}妤煎眰PLC淇℃伅");
-                DbNum = "91";
-                TaskDbNum = "1101";
+                DbNum = "DB91";
+                TaskDbNum = "DB1100";
                 break;
             case "3":
                 modPlc = plcList.FirstOrDefault(m => m.Text == "3灞傛墭鐩樿緭閫佺嚎");
@@ -330,41 +507,45 @@
         }
 
         PLCUtil modUtil = new PLCUtil(modPlc);
-        var (result, value) = modUtil.GetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.0");
-        if (result.IsSucceed)
-        {
-            if (value.ToString().ToLower() != "false")
-            {
-                throw Oops.Bah("璇峰厛鍒囨崲涓烘洿鏀逛换鍔℃ā寮�");
-            }
-        }
-        else
-        {
-            throw Oops.Bah("璇诲彇PLC鎵嬭嚜鍔ㄥ�煎け璐�");
-        }
-        modUtil.SetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "48.0", input.LocatNo);
+        //var (result, value) = modUtil.GetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.0");
+        //if (result.IsSucceed)
+        //{
+        //    if (value.ToString().ToLower() != "false")
+        //    {
+        //        throw Oops.Bah("璇峰厛鍒囨崲涓烘洿鏀逛换鍔℃ā寮�");
+        //    }
+        //}
+        //else
+        //{
+        //    throw Oops.Bah("璇诲彇PLC鎵嬭嚜鍔ㄥ�煎け璐�");
+        //}
+        //modUtil.SetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "48.0", input.LocatNo);
         switch (input.TypeName)
         {
             case "writeTask":
                 modUtil.SetPlcDBValue(PLCDataTypeEnum.String, TaskDbNum, "4", input.PalletNo);
                 modUtil.SetPlcDBValue(PLCDataTypeEnum.String, TaskDbNum, "14", input.TaskNo);
-                modUtil.SetPlcDBValue(PLCDataTypeEnum.Int, TaskDbNum, "34", input.StartLoction);
-                modUtil.SetPlcDBValue(PLCDataTypeEnum.Int, TaskDbNum, "36", input.EndLoction);
+                //modUtil.SetPlcDBValue(PLCDataTypeEnum.Int, TaskDbNum, "34", input.StartLoction);
+                modUtil.SetPlcDBValue(PLCDataTypeEnum.Short, TaskDbNum, "36.0", input.EndLoction);
 
 
-                modUtil.SetPlcDBValue(PLCDataTypeEnum.Int, TaskDbNum, "38", input.StartPai);
-                modUtil.SetPlcDBValue(PLCDataTypeEnum.Int, TaskDbNum, "40", input.StartLie);
-                modUtil.SetPlcDBValue(PLCDataTypeEnum.Int, TaskDbNum, "42", input.StartCeng);
+                modUtil.SetPlcDBValue(PLCDataTypeEnum.Short, TaskDbNum, "38", input.StartPai);
+                modUtil.SetPlcDBValue(PLCDataTypeEnum.Short, TaskDbNum, "40", input.StartLie);
+                modUtil.SetPlcDBValue(PLCDataTypeEnum.Short, TaskDbNum, "42", input.StartCeng);
 
 
-                modUtil.SetPlcDBValue(PLCDataTypeEnum.Int, TaskDbNum, "44", input.EndPai);
-                modUtil.SetPlcDBValue(PLCDataTypeEnum.Int, TaskDbNum, "46", input.EndLie);
-                modUtil.SetPlcDBValue(PLCDataTypeEnum.Int, TaskDbNum, "48", input.EndCeng);
+                modUtil.SetPlcDBValue(PLCDataTypeEnum.Short, TaskDbNum, "44", input.EndPai);
+                modUtil.SetPlcDBValue(PLCDataTypeEnum.Short, TaskDbNum, "46", input.EndLie);
+                modUtil.SetPlcDBValue(PLCDataTypeEnum.Short, TaskDbNum, "48", input.EndCeng);
 
                 modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.3", "true");
+                Thread.Sleep(1000);
+                modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.3", "false");
                 break;
             case "writeTaskDelete":
                 modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.2", "true");
+                Thread.Sleep(1000);
+                modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.2", "false");
                 break;
             
             default:
@@ -403,33 +584,122 @@
             modPlc = plcList.FirstOrDefault(m => m.Text == "2灞傛墭鐩樿緭閫佺嚎");
             if (modPlc == null)
                 throw Oops.Bah($"鏈煡璇㈠埌2妤煎眰PLC淇℃伅");
-            DbNum = "91";
+            DbNum = "DB91";
             PLCUtil modUtil = new PLCUtil(modPlc);
             switch (input.Type)
             {
                 case "TwoPalletStart":
-                    modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "46.0", "true");
+                    if (input.FuncName == "true")
+                    {
+                        modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "46.0", "true");
+                    }
+                    else if (input.FuncName == "false")
+                    {
+                        modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "46.0", "false");
+                    }
+                    else
+                    {
+                        throw Oops.Bah("浜嬩欢缁撴灉閿欒");
+                    }
                     break;
-                case "OnePalletStop":
-                    modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "46.1", "true");
+                case "TwoPalletStop":
+                    if (input.FuncName == "true")
+                    {
+                        modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "46.1", "true");
+                    }
+                    else if (input.FuncName == "false")
+                    {
+                        modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "46.1", "false");
+                    }
+                    else
+                    {
+                        throw Oops.Bah("浜嬩欢缁撴灉閿欒");
+                    }
                     break;
                 case "TwoMaStart":
-                    modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "58.0", "true");
+                    if (input.FuncName == "true")
+                    {
+                        modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "58.0", "true");
+                    }
+                    else if (input.FuncName == "false")
+                    {
+                        modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "58.0", "false");
+                    }
+                    else
+                    {
+                        throw Oops.Bah("浜嬩欢缁撴灉閿欒");
+                    }
                     break;
                 case "TwoMaStop":
-                    modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "58.1", "true");
+                    if (input.FuncName == "true")
+                    {
+                        modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "58.1", "true");
+                    }
+                    else if (input.FuncName == "false")
+                    {
+                        modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "58.1", "false");
+                    }
+                    else
+                    {
+                        throw Oops.Bah("浜嬩欢缁撴灉閿欒");
+                    }
                     break;
                 case "TwoMaTwoStart":
-                    modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "58.2", "true");
+                    if (input.FuncName == "true")
+                    {
+                        modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "58.2", "true");
+                    }
+                    else if (input.FuncName == "false")
+                    {
+                        modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "58.2", "false");
+                    }
+                    else
+                    {
+                        throw Oops.Bah("浜嬩欢缁撴灉閿欒");
+                    }
                     break;
                 case "TwoMaTwoStop":
-                    modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "58.3", "true");
+                    if (input.FuncName == "true")
+                    {
+                        modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "58.3", "true");
+                    }
+                    else if (input.FuncName == "false")
+                    {
+                        modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "58.3", "false");
+                    }
+                    else
+                    {
+                        throw Oops.Bah("浜嬩欢缁撴灉閿欒");
+                    }
                     break;
                 case "TwoBoxStart":
-                    modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "46.2", "true");
+                    if (input.FuncName == "true")
+                    {
+                        modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "46.2", "true");
+                    }
+                    else if (input.FuncName == "false")
+                    {
+                        modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "46.2", "false");
+                    }
+                    else
+                    {
+                        throw Oops.Bah("浜嬩欢缁撴灉閿欒");
+                    }
                     break; 
                 case "TwoBoxStop":
-                    modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "46.3", "true");
+
+                    if (input.FuncName == "true")
+                    {
+                        modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "46.3", "true");
+                    }
+                    else if (input.FuncName == "false")
+                    {
+                        modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "46.3", "false");
+                    }
+                    else
+                    {
+                        throw Oops.Bah("浜嬩欢缁撴灉閿欒");
+                    }
                     break;
                 default:
                     break;
diff --git a/Web/src/api/wcs/wcsDevice.ts b/Web/src/api/wcs/wcsDevice.ts
index 1211e99..d2b0fec 100644
--- a/Web/src/api/wcs/wcsDevice.ts
+++ b/Web/src/api/wcs/wcsDevice.ts
@@ -16,11 +16,27 @@
   CloseTaskForPLC='/api/WcsCheckTask/CloseTaskForPLC',
 
   
+  GetLocationInfo = '/api/wcsDevice/GetLocationInfo',
+  WriteLocationInfo = '/api/wcsDevice/WriteLocationInfo',
   WriteInfo = '/api/wcsDevice/WriteInfo',
   WriteTaskInfo = '/api/wcsDevice/WriteTaskInfo',
   WriteStartStop = '/api/wcsDevice/WriteStartStop',
 }
 // 澧炲姞璁惧淇℃伅
+export const WriteLocationInfo = (params?: any) =>
+	request({
+		url: Api.WriteLocationInfo,
+		method: 'post',
+		data: params,
+	});
+// 澧炲姞璁惧淇℃伅
+export const GetLocationInfo = (params?: any) =>
+	request({
+		url: Api.GetLocationInfo,
+		method: 'post',
+		data: params,
+	});
+// 澧炲姞璁惧淇℃伅
 export const WriteInfo = (params?: any) =>
 	request({
 		url: Api.WriteInfo,
diff --git a/Web/src/views/device/deviceInfo/index.vue b/Web/src/views/device/deviceInfo/index.vue
index d422c71..4965b80 100644
--- a/Web/src/views/device/deviceInfo/index.vue
+++ b/Web/src/views/device/deviceInfo/index.vue
@@ -89,34 +89,35 @@
 							<div >
 								<el-form label-position="right" label-width="40px" style="">
 									<el-form-item label="宸ヤ綅">
-										<el-input v-model="stationValue.LocatNo" style="width: 200px; margin-right: 10px;"></el-input>
+										<el-input id="locaText" :disabled="lockInputStatus" v-model="stationValue.locatNo" style="width: 200px; margin-right: 10px;"></el-input>
+										<el-button @click="textLock(stationValue)">{{lockText}}</el-button>
 										<el-button @click="write('zidong',stationValue)">鑷姩</el-button>
 										<el-button @click="write('shoudong',stationValue)">鎵嬪姩</el-button>
-										<el-button @click="write('huifu',stationValue)">鎶ヨ鎭㈠</el-button>
+										<el-button @mousedown="writeDown('huifu',stationValue)"  @mouseup="writeUp('huifu',stationValue)">鎶ヨ鎭㈠</el-button>
 									</el-form-item>
 																		
 									<el-form-item>
-										<el-button size="large" @mousedown="writeDown('1diandong',stationValue)"  @mouseup="writeUp('1diandong',stationValue)">1鐐瑰姩</el-button>
-										<el-button size="large" @mousedown="writeDown('2diandong',stationValue)"  @mouseup="writeUp('2diandong',stationValue)">2鐐瑰姩</el-button>
-										<el-button size="large" @mousedown="writeDown('3diandong',stationValue)"  @mouseup="writeUp('3diandong',stationValue)">3鐐瑰姩</el-button>
-										<el-button size="large" @mousedown="writeDown('4diandong',stationValue)"  @mouseup="writeUp('4diandong',stationValue)">4鐐瑰姩</el-button>
+										<el-button size="large" :disabled="lockStatus" @mousedown="writeDown('1diandong',stationValue)"  @mouseup="writeUp('1diandong',stationValue)">1鐐瑰姩</el-button>
+										<el-button size="large" :disabled="lockStatus" @mousedown="writeDown('2diandong',stationValue)"  @mouseup="writeUp('2diandong',stationValue)">2鐐瑰姩</el-button>
+										<el-button size="large" :disabled="lockStatus" @mousedown="writeDown('3diandong',stationValue)"  @mouseup="writeUp('3diandong',stationValue)">3鐐瑰姩</el-button>
+										<el-button size="large" :disabled="lockStatus" @mousedown="writeDown('4diandong',stationValue)"  @mouseup="writeUp('4diandong',stationValue)">4鐐瑰姩</el-button>
 									</el-form-item>
 
 									<el-form-item>
-										<el-button size="large" @mousedown="writeDown('1liandong',stationValue)"  @mouseup="writeUp('1liandong',stationValue)">1鑱斿姩</el-button>
-										<el-button size="large" @mousedown="writeDown('2liandong',stationValue)"  @mouseup="writeUp('2liandong',stationValue)">2鑱斿姩</el-button>
-										<el-button size="large" @mousedown="writeDown('3liandong',stationValue)"  @mouseup="writeUp('3liandong',stationValue)">3鑱斿姩</el-button>
-										<el-button size="large" @mousedown="writeDown('4liandong',stationValue)"  @mouseup="writeUp('4liandong',stationValue)">4鑱斿姩</el-button>
+										<el-button size="large" :disabled="lockStatus" @mousedown="writeDown('1liandong',stationValue)"  @mouseup="writeUp('1liandong',stationValue)">1鑱斿姩</el-button>
+										<el-button size="large" :disabled="lockStatus" @mousedown="writeDown('2liandong',stationValue)"  @mouseup="writeUp('2liandong',stationValue)">2鑱斿姩</el-button>
+										<el-button size="large" :disabled="lockStatus" @mousedown="writeDown('3liandong',stationValue)"  @mouseup="writeUp('3liandong',stationValue)">3鑱斿姩</el-button>
+										<el-button size="large" :disabled="lockStatus" @mousedown="writeDown('4liandong',stationValue)"  @mouseup="writeUp('4liandong',stationValue)">4鑱斿姩</el-button>
 									</el-form-item>
 									
 									<el-form-item>
-										<el-button size="large" @mousedown="writeDown('yizaisheng',stationValue)"  @mouseup="writeUp('yizaisheng',stationValue)">绉绘牻涓婂崌</el-button>
-										<el-button size="large" @mousedown="writeDown('fanzhuansheng',stationValue)"  @mouseup="writeUp('fanzhuansheng',stationValue)">缈昏浆鏈轰笂鍗�</el-button>
+										<el-button size="large" :disabled="lockStatus" @mousedown="writeDown('yizaisheng',stationValue)"  @mouseup="writeUp('yizaisheng',stationValue)">绉绘牻涓婂崌</el-button>
+										<el-button size="large" :disabled="lockStatus" @mousedown="writeDown('fanzhuansheng',stationValue)"  @mouseup="writeUp('fanzhuansheng',stationValue)">缈昏浆鏈轰笂鍗�</el-button>
 									</el-form-item>
 
 									<el-form-item>
-										<el-button size="large" @mousedown="writeDown('yizaijiang',stationValue)"  @mouseup="writeUp('yizaijiang',stationValue)">绉绘牻涓嬮檷</el-button>
-										<el-button size="large" @mousedown="writeDown('fanzhuanjiang',stationValue)"  @mouseup="writeUp('fanzhuanjiang',stationValue)">缈昏浆鏈轰笅闄�</el-button>
+										<el-button size="large" :disabled="lockStatus" @mousedown="writeDown('yizaijiang',stationValue)"  @mouseup="writeUp('yizaijiang',stationValue)">绉绘牻涓嬮檷</el-button>
+										<el-button size="large" :disabled="lockStatus" @mousedown="writeDown('fanzhuanjiang',stationValue)"  @mouseup="writeUp('fanzhuanjiang',stationValue)">缈昏浆鏈轰笅闄�</el-button>
 									</el-form-item>
 
 								</el-form>
@@ -135,52 +136,52 @@
 										</el-col>	
 										<el-col :span="6">
 											<el-form-item label="浠诲姟鍙�" >
-												<el-input v-model="stationValue.TaskNo" style="width: 200px; "></el-input> 
+												<el-input v-model="stationValue.taskNo" style="width: 200px; "></el-input> 
 											</el-form-item>
 										</el-col>
 										<el-col :span="6">
 											<el-form-item label="鎵樼洏鍙�">
-												<el-input v-model="stationValue.PalletNo" style="width: 200px; margin-right: 10px;"></el-input>
+												<el-input v-model="stationValue.palletNo" style="width: 200px; margin-right: 10px;"></el-input>
 											</el-form-item>
 										</el-col>
 										<el-col :span="6">
 											<el-form-item label="璧峰宸ヤ綅">
-												<el-input v-model="stationValue.StartLoction" style="width: 200px; margin-right: 10px;"></el-input>
+												<el-input v-model="stationValue.startLoction" style="width: 200px; margin-right: 10px;"></el-input>
 											</el-form-item>
 										</el-col>
 										<el-col :span="6">
 											<el-form-item label="鐩爣宸ヤ綅">
-												<el-input v-model="stationValue.EndLoction" style="width: 200px; margin-right: 10px;"></el-input>
+												<el-input v-model="stationValue.endLoction" style="width: 200px; margin-right: 10px;"></el-input>
 											</el-form-item>
 										</el-col>
 										<el-col :span="6">
 											<el-form-item label="璧峰鎺�">
-												<el-input v-model="stationValue.StartPai" style="width: 200px; margin-right: 10px;"></el-input>
+												<el-input v-model="stationValue.startPai" style="width: 200px; margin-right: 10px;"></el-input>
 											</el-form-item>
 										</el-col>
 										<el-col :span="6">
 											<el-form-item label="璧峰鍒�">
-												<el-input v-model="stationValue.StartLie" style="width: 200px; margin-right: 10px;"></el-input>
+												<el-input v-model="stationValue.startLie" style="width: 200px; margin-right: 10px;"></el-input>
 											</el-form-item>
 										</el-col>
 										<el-col :span="6">
 											<el-form-item label="璧峰灞�">
-												<el-input v-model="stationValue.StartCeng" style="width: 200px; margin-right: 10px;"></el-input>
+												<el-input v-model="stationValue.startCeng" style="width: 200px; margin-right: 10px;"></el-input>
 											</el-form-item>
 										</el-col>
 										<el-col :span="6">
 											<el-form-item label="鐩爣鎺�">
-												<el-input v-model="stationValue.EndPai" style="width: 200px; margin-right: 10px;"></el-input>
+												<el-input v-model="stationValue.endPai" style="width: 200px; margin-right: 10px;"></el-input>
 											</el-form-item>
 										</el-col>
 										<el-col :span="6">
 											<el-form-item label="鐩爣鍒�">
-												<el-input v-model="stationValue.EndLie" style="width: 200px; margin-right: 10px;"></el-input>
+												<el-input v-model="stationValue.endLie" style="width: 200px; margin-right: 10px;"></el-input>
 											</el-form-item>
 										</el-col>
 										<el-col :span="6">
 											<el-form-item label="鐩爣灞�">
-												<el-input v-model="stationValue.EndCeng" style="width: 200px; margin-right: 10px;"></el-input>
+												<el-input v-model="stationValue.endCeng" style="width: 200px; margin-right: 10px;"></el-input>
 											</el-form-item>
 										</el-col>
 										
@@ -198,32 +199,41 @@
 <script lang="ts" setup>
 import { ref, reactive, onMounted } from 'vue';
 import { listStatus, listPosition } from '/@/api/wcs/wcsPlc';
-import { WriteInfo,WriteTaskInfo } from '/@/api/wcs/wcsDevice';
+import { GetLocationInfo,WriteLocationInfo,WriteInfo,WriteTaskInfo } from '/@/api/wcs/wcsDevice';
 import { signalR } from './signalR';
 import { cellsDataLine, cellsDataOne, cellsDataTwo, cellsDataThree } from './data';
 import { ElMessage } from "element-plus";
 
+// export default{
+
+// }
 const state = ref<any>({});
 const stackers = ref<any>({});
 const conveyors = ref<any>({});
+
+
+const lockText = ref("閿佸畾");
+const lockStatus = ref(true); 
+const lockInputStatus = ref(false); 
+
 const stationValue = ref<any>({
-	LocatNo: '',//宸ヤ綅
-	Layer:'',//妤煎眰
-	TypeName:'',//鎿嶄綔绫诲瀷鍚嶇О
-	FuncName:'',//浜嬩欢缁撴灉  true/false
+	locatNo: '',//宸ヤ綅
+	layer:'',//妤煎眰
+	typeName:'',//鎿嶄綔绫诲瀷鍚嶇О
+	funcName:'',//浜嬩欢缁撴灉  true/false
 
-	TaskNo:'',
-	PalletNo:'',
-	StartLoction:'',
-	EndLoction:'',
-	StartPai:'',
-	StartLie:'',
-	StartCeng:'',
-	EndPai:'',
-	EndLie:'',
-	EndCeng:'',
+	taskNo:'',
+	palletNo:'',
+	startLoction:'',
+	endLoction:'',
+	startPai:'',
+	startLie:'',
+	startCeng:'',
+	endPai:'',
+	endLie:'',
+	endCeng:'',
 });
-
+ 
 
 // 鏌ヨ鐘舵��
 const handleQuery = async () => {
@@ -376,16 +386,71 @@
 	}
 }
 
+
+const textLock = async (row: any) => {
+	if(lockText.value == "閿佸畾"){
+		lockStatus.value=false;
+		lockInputStatus.value=true;
+		lockText.value ="瑙i攣";
+		if (floorStates.value.isPlain1 == false) {
+			row.layer = 1;
+		}else if(floorStates.value.isPlain2 == false){
+			row.layer = 2;
+		}
+		else if(floorStates.value.isPlain3 == false){
+			row.layer = 3;
+		}
+		row.typeName = "suoding";
+		
+		console.log(row);
+		var res = await WriteLocationInfo(row);
+		var res2 = await GetLocationInfo(row);
+		let rowData = JSON.parse(JSON.stringify(res2.data.result));
+		stationValue.value = res2.data.result;
+// 		stationValue.value = {
+// 	locatNo: '',//宸ヤ綅
+// 	layer:'',//妤煎眰
+// 	typeName:'',//鎿嶄綔绫诲瀷鍚嶇О
+// 	funcName:null,//浜嬩欢缁撴灉  true/false
+
+// 	taskNo:'',
+// 	palletNo:'',
+// 	startLoction:'',
+// 	endLoction:'',
+// 	startPai:'',
+// 	startLie:'',
+// 	startCeng:'',
+// 	endPai:'',
+// 	endLie:'',
+// 	endCeng:'',
+// }
+
+
+		console.log(res2.data.result);
+		console.log(rowData);
+		
+	}else{
+		lockStatus.value=true;
+		lockInputStatus.value=false;
+		lockText.value ="閿佸畾";
+	} 
+	 
+}
+
 const write = async (type: string,row: any) => {
+	if (lockStatus.value == false) {
+		ElMessage.success("璇峰厛閿佸畾");
+		return;
+	}
 	if (floorStates.value.isPlain1 == false) {
-		row.Layer = 1;
+		row.layer = 1;
 	}else if(floorStates.value.isPlain2 == false){
-		row.Layer = 2;
+		row.layer = 2;
 	}
 	else if(floorStates.value.isPlain3 == false){
-		row.Layer = 3;
+		row.layer = 3;
 	}
-	row.TypeName = type;
+	row.typeName = type;
 	
 	console.log(row);
 	var res = await WriteInfo(row);
@@ -394,32 +459,40 @@
 }
 
 const writeDown = async (type: string,row: any) => {
+	if (lockStatus.value == false) {
+		ElMessage.success("璇峰厛閿佸畾");
+		return;
+	}
 	if (floorStates.value.isPlain1 == false) {
-		row.Layer = 1;
+		row.layer = 1;
 	}else if(floorStates.value.isPlain2 == false){
-		row.Layer = 2;
+		row.layer = 2;
 	}
 	else if(floorStates.value.isPlain3 == false){
-		row.Layer = 3;
+		row.layer = 3;
 	}
-	row.TypeName = type;
-	row.FuncName = "true";
+	row.typeName = type;
+	row.funcName = "true";
 	var res = await WriteInfo(row);
 	console.log(type+"鎸変笅浜嬩欢");
 	
 	// ElMessage.success(res.data.result);
 }
 const writeUp = async (type: string,row: any) => {
+	if (lockStatus.value == false) {
+		ElMessage.success("璇峰厛閿佸畾");
+		return;
+	}
 	if (floorStates.value.isPlain1 == false) {
-		row.Layer = 1;
+		row.layer = 1;
 	}else if(floorStates.value.isPlain2 == false){
-		row.Layer = 2;
+		row.layer = 2;
 	}
 	else if(floorStates.value.isPlain3 == false){
-		row.Layer = 3;
+		row.layer = 3;
 	}
-	row.TypeName = type;
-	row.FuncName = "false";
+	row.typeName = type;
+	row.funcName = "false";
 	var res = await WriteInfo(row);
 	console.log(type+"鎶捣浜嬩欢");
 	
@@ -428,14 +501,14 @@
 
 const writeTaskInfo = async (type: string,row: any) => {
 	if (floorStates.value.isPlain1 == false) {
-		row.Layer = 1;
+		row.layer = 1;
 	}else if(floorStates.value.isPlain2 == false){
-		row.Layer = 2;
+		row.layer = 2;
 	}
 	else if(floorStates.value.isPlain3 == false){
-		row.Layer = 3;
+		row.layer = 3;
 	}
-	row.TypeName = type;
+	row.typeName = type;
 	var res = await WriteTaskInfo(row);
 	console.log(type+"鎶捣浜嬩欢");
 	
diff --git a/Web/src/views/device/deviceStartStop/index.vue b/Web/src/views/device/deviceStartStop/index.vue
index a197f3c..eb04f31 100644
--- a/Web/src/views/device/deviceStartStop/index.vue
+++ b/Web/src/views/device/deviceStartStop/index.vue
@@ -33,24 +33,24 @@
                 <el-collapse-item title="浠撳簱浜屽眰" name="2">
                     <el-card class="box-card" shadow="hover">
                         <el-text style="margin-right: 15px;">鎵樼洏杈撻��</el-text>
-                        <el-button @click="write('TwoPalletStart','2')">鍚姩</el-button>
-                        <el-button @click="write('TwoPalletStop','2')">鍋滄</el-button>
+                        <el-button  @mousedown="writeDown('TwoPalletStart','2')"  @mouseup="writeUp('TwoPalletStart','2')">鍚姩</el-button>
+                        <el-button  @mousedown="writeDown('TwoPalletStop','2')"  @mouseup="writeUp('TwoPalletStop','2')">鍋滄</el-button>
                     </el-card>
                     <el-card class="box-card" shadow="hover" style="margin-top: 3px;">
                         <el-text style="margin-right: 15px;">鐮佽泛鏈哄櫒浜�1</el-text>
-                        <el-button @click="write('TwoMaStart','2')">鍚姩</el-button>
-                        <el-button @click="write('TwoMaStop','2')">鍋滄</el-button>
+                        <el-button @mousedown="writeDown('TwoMaStart','2')"  @mouseup="writeUp('TwoMaStart','2')">鍚姩</el-button>
+                        <el-button @mousedown="writeDown('TwoMaStop','2')"  @mouseup="writeUp('TwoMaStop','2')">鍋滄</el-button>
                     </el-card> 
                     
                     <el-card class="box-card" shadow="hover" style="margin-top: 3px;">
                         <el-text style="margin-right: 15px;">鐮佽泛鏈哄櫒浜�2</el-text>
-                        <el-button @click="write('TwoMaTwoStart','2')">鍚姩</el-button>
-                        <el-button @click="write('TwoMaTwoStop','2')">鍋滄</el-button>
+                        <el-button @mousedown="writeDown('TwoMaTwoStart','2')"  @mouseup="writeUp('TwoMaTwoStart','2')">鍚姩</el-button>
+                        <el-button @mousedown="writeDown('TwoMaTwoStop','2')"  @mouseup="writeUp('TwoMaTwoStop','2')">鍋滄</el-button>
                     </el-card> 
                     <el-card class="box-card" shadow="hover" style="margin-top: 3px;">
                         <el-text style="margin-right: 15px;">浠剁杈撻��</el-text>
-                        <el-button @click="write('TwoBoxStart','2')">鍚姩</el-button>
-                        <el-button @click="write('TwoBoxStop','2')">鍋滄</el-button>
+                        <el-button @mousedown="writeDown('TwoBoxStart','2')"  @mouseup="writeUp('TwoBoxStart','2')">鍚姩</el-button>
+                        <el-button @mousedown="writeDown('TwoBoxStop','2')"  @mouseup="writeUp('TwoBoxStop','2')">鍋滄</el-button>
                     </el-card> 
                 </el-collapse-item>
             </el-collapse>
@@ -97,7 +97,28 @@
 	console.log(res.data.result);
 	// ElMessage.success(res.data.result);
 }
-
+const writeDown = async (type: string,layer: string) => {
+	
+    var data={
+        Type:type,
+        Layer: layer,
+        FuncName : "true"
+    }
+	var res = await WriteStartStop(data);
+	console.log(type+"鎸変笅浜嬩欢");
+	
+}
+const writeUp = async (type: string,layer: string) => {
+	
+	var data={
+        Type:type,
+        Layer: layer,
+        FuncName : "false"
+    }
+	var res = await WriteStartStop(data);
+	console.log(type+"鎶捣浜嬩欢");
+	
+}
 
 </script>
 
diff --git a/Web/src/views/wcs/wcsTask/index.vue b/Web/src/views/wcs/wcsTask/index.vue
index 16ad7d0..91ceda3 100644
--- a/Web/src/views/wcs/wcsTask/index.vue
+++ b/Web/src/views/wcs/wcsTask/index.vue
@@ -16,7 +16,7 @@
               </el-col>
               <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
                 <el-form-item label="浠诲姟鍙�">
-                  <el-input v-model="queryParams.taskNo" clearable="" placeholder="璇疯緭鍏ヤ换鍔″彿" />
+                  <el-input v-model="queryParams.taskNo" clearable="" placeholder=" " />
                 </el-form-item>
               </el-col>
               <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
@@ -151,12 +151,12 @@
           </template>
           <el-form :model="queryParams2" ref="queryForm2" labelWidth="90">
             <el-row>
-              <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
+              <el-col :xs="24" :sm="12" :md="12" :lg="10" :xl="8" class="mb10">
                 <el-form-item label="浠诲姟鍙�">
-                  <el-input v-model="queryParams2.taskNo" clearable="" placeholder="璇疯緭鍏ヤ换鍔″彿"style="width: 130px;" />
+                  <el-input v-model="queryParams2.taskNo" clearable="" placeholder="璇疯緭鍏ヤ换鍔″彿" style="width: 130px;" />
                 </el-form-item>
               </el-col>
-              <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" style="margin-left: 20px;">
+              <el-col :xs="24" :sm="12" :md="12" :lg="10" :xl="8" class="mb10" style="margin-left: 20px;">
                 <el-form-item>
                   <el-button type="primary" icon="ele-Search" @click="handleQuery2"> 鏌ヨ
                   </el-button>
@@ -402,4 +402,9 @@
 :deep(.el-input-number) {
   width: 100%;
 }
+
+/* :deep(.el-input__inner)
+{
+  width: 50%;
+} */
 </style>

--
Gitblit v1.8.0