From 13a442afefdddf1ec9ecd1e22c81735bf5c6a465 Mon Sep 17 00:00:00 2001
From: Administrator <Administrator@DESKTOP-JIE70N9>
Date: 星期二, 10 六月 2025 16:08:24 +0800
Subject: [PATCH] 修改问题

---
 Admin.NET/WCS.Application/PLC/PLCService.cs | 1363 ++++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 1,068 insertions(+), 295 deletions(-)

diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs
index 0f852e9..7167186 100644
--- a/Admin.NET/WCS.Application/PLC/PLCService.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -1,11 +1,15 @@
 锘縰sing Admin.NET.Core.Service;
+using AngleSharp.Io;
 using COSXML.Network;
 using DocumentFormat.OpenXml.Bibliography;
 using DocumentFormat.OpenXml.Drawing;
 using DocumentFormat.OpenXml.Spreadsheet;
+using DocumentFormat.OpenXml.Wordprocessing;
+using Elastic.Clients.Elasticsearch.Snapshot;
 using Furion.Logging;
 using IoTClient;
 using NewLife.Reflection;
+using SixLabors.ImageSharp.ColorSpaces;
 using WCS.Application.Entity;
 using WCS.Application.Util;
 
@@ -24,6 +28,7 @@
         try
         {
             var mod = sender as WcsDeviceDto;
+            
             //Console.WriteLine($"{mod.Text}鍊间负" + mod.Value);
             switch (mod.Type)
             {
@@ -34,7 +39,11 @@
                     AGV(mod);                                       // AGV璋冨害
                     break;
                 case PLCTypeEnum.ShuttleCar: //绌挎杞�
-                    //ShuttleCar(mod);
+                    //if (mod.PlcIdIP == "10.26.254.28") 
+                    //{
+                    //    break;
+                    //}
+                    ShuttleCar(mod);
                     break;
                 case PLCTypeEnum.RobotPalletizer:
                     RobotPalletizer(mod);//鐮佸灈鏈哄櫒浜�
@@ -69,7 +78,7 @@
                     TaskNo = _taskService.GetTaskCode(),
                     TaskType = TaskTypeEnum.Move,
                     Type = PLCTypeEnum.AGV,
-                    StartLocate = AGVStorageUtil.GetPalletOutStorage(),
+                    StartLocate = "",
                     EndLocate = AGVStaionEnum.D1.ToString(),
                     PalletNo = "",
                     Status = TaskStatusEnum.Wait,
@@ -169,70 +178,188 @@
                         int valueTaskStr = Convert.ToInt32(valueTask);
                         //鑾峰彇浠诲姟淇℃伅 鏍规嵁  浠诲姟鍙枫�佸皬杞︾紪鍙�
                         var carTask = _db.Queryable<WcsCarTasks>().First(m=>m.IsDelete == false && m.Status == TaskStatusEnum.Doing && m.CarTaskNo == valueTaskStr && m.CarNo == modDevice.PlcIdIP);
-                        if (carTask == null)
+                        if (carTask != null)
                         {
-                            var modRests = modDevice.listStation.FirstOrDefault(s => s.Text == "澶嶄綅");
-                            plcConn.SetDBValue(modRests.PosType, modRests.PlcPos, "1");//娌℃湁鎵惧埌浠诲姟  澶嶄綅
-                            return;
-                        }
-                         
-                        var modFinshTask = _db.Queryable<WcsTask>().First(s => s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.TaskNo == carTask.TaskNo);
-                        if (modFinshTask == null)
-                        {
-                            break;//娌℃湁鏌ヨ鍒版�讳换鍔�
-                        }
-                        //鑾峰彇璺緞2鐨勪换鍔� 涓嬪彂
-                        carTaskNext = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == carTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.Status <= TaskStatusEnum.Doing).OrderBy(m=>m.CreateTime).First();
-                        
-                        if (carTask != null && carTask.Status != TaskStatusEnum.Complete)
-                        {
-                            carTask.Status = TaskStatusEnum.Complete;
-                            carTask.UpdateTime = DateTime.Now;
-                            _db.Updateable(carTask).ExecuteCommand();
-                            //娣诲姞浠诲姟鏄庣粏
-                            var taskMonitor = new WcsTaskMonitor()
+                            //var modRests = modDevice.listStation.FirstOrDefault(s => s.Text == "澶嶄綅");
+                            //plcConn.SetDBValue(modRests.PosType, modRests.PlcPos, "1");//娌℃湁鎵惧埌浠诲姟  澶嶄綅
+                            
+                            var modFinshTask = _db.Queryable<WcsTask>().First(s => s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.TaskNo == carTask.TaskNo);
+                            if (modFinshTask == null)
                             {
-                                TaskNo = carTask.TaskNo,
-                                PlcName = modDevice.Text,
-                                InteractiveMsg = $"绌挎杞﹀弽棣堜换鍔″畬鎴�"
-                            };
-                            _db.Insertable(taskMonitor).ExecuteCommand();
-                            //涓嬪彂浠诲姟鏃ュ織
+                                break;//娌℃湁鏌ヨ鍒版�讳换鍔�
+                            } 
+                            if (carTask != null && carTask.Status != TaskStatusEnum.Complete)
+                            {
+                                carTask.Status = TaskStatusEnum.Complete;
+                                carTask.UpdateTime = DateTime.Now;
+                                _db.Updateable(carTask).ExecuteCommand();
+                                //娣诲姞浠诲姟鏄庣粏
+                                var taskMonitor = new WcsTaskMonitor()
+                                {
+                                    TaskNo = carTask.TaskNo,
+                                    PlcName = modDevice.Text,
+                                    Status = TaskStatusEnum.Complete,
+                                    InteractiveMsg = $"绌挎杞﹀弽棣堜换鍔″畬鎴�"
+                                };
+                                _db.Insertable(taskMonitor).ExecuteCommand();
+                                //涓嬪彂浠诲姟鏃ュ織
                             
-                            HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>());
-                        }
-                        //鎬讳换鍔′笅娌℃湁鍏朵粬鏈墽琛屽皬杞︾殑浠诲姟 鍙樻洿鎬讳换鍔′俊鎭�
-                        if (carTaskNext == null && modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete)
-                        {
-                            modFinshTask.Status = TaskStatusEnum.Complete;
-                            modFinshTask.FinishDate = DateTime.Now;
-                            _db.Updateable(modFinshTask).ExecuteCommand();
-                            
-                            //鍙嶉WMS绯荤粺 浠诲姟瀹屾垚
-                            //HttpService httpService = new HttpService();
-                            //var requestMode = new TaskRequestWMS()
-                            //{
-                            //    TaskNo = modFinshTask.TaskNo,
-                            //    PalletNo = modFinshTask.PalletNo,
-                            //    TaskType = ((int)modFinshTask.TaskType).ToString(),
-                            //    TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
-                            //};
-                            //var modResponseTask = httpService.RequestTask(requestMode).Result;
-                            //modFinshTask.IsSuccess = TaskSuccessEnum.Success;
-                            //_db.Updateable(modFinshTask).ExecuteCommand();
-                            HubUtil.PublicTask(modFinshTask.Adapt<WcsTaskOutput>());
-                            
-                        }
-                        
-                    }
-                    
-                    var modStationX = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(X)");
-                    var (resultx, valuex) = plcConn.GetDBValue(modStationX.PosType, modStationX.PlcPos);
-                    var modStationY = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(Y)");
-                    var (resulty, valuey) = plcConn.GetDBValue(modStationY.PosType, modStationY.PlcPos);
-                    var modStationZ = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(Z)");
-                    var (resultz, valuez) = plcConn.GetDBValue(modStationZ.PosType, modStationZ.PlcPos);
+                                HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>());
+                            }
+                            //鑾峰彇璺緞2鐨勪换鍔� 涓嬪彂
+                            carTaskNext = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == carTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.Status <= TaskStatusEnum.Doing).OrderBy(m => m.CreateTime).First();
+                            //鎬讳换鍔′笅娌℃湁鍏朵粬鏈墽琛屽皬杞︾殑浠诲姟 鍙樻洿鎬讳换鍔′俊鎭�
+                            if (carTaskNext == null && modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete)
+                            {
+                                if (modFinshTask.TaskType == TaskTypeEnum.Out)
+                                {
+                                    //#region 浠诲姟鍙樻洿鎴愯緭閫佺嚎浠诲姟
+                                    //modFinshTask.Status = TaskStatusEnum.Wait;
+                                    //modFinshTask.Type = PLCTypeEnum.ConveyorLine;
+                                    //_db.Updateable(modFinshTask).ExecuteCommand();
 
+                                    //#endregion
+
+                                    #region 杈撻�佺嚎 鍐欏叆PLC 740
+
+                                    var text = "";
+                                    var devStation = ""; //宸ヤ綅
+                                    var endLocate = modFinshTask.EndRoadway;
+                                    var carcon = new carConverModel();
+                                    var ip = "";
+                                    if ( carcon.conveyorBei.Keys.Contains(endLocate))
+                                    {
+                                        text = "杈撻�佺嚎鍖�";
+                                        ip = "10.26.254.10";
+                                        devStation = carcon.conveyorBei[endLocate];
+                                    }
+                                    else if (carcon.conveyorNan.Keys.Contains(endLocate))
+                                    {
+                                        text = "杈撻�佺嚎鍗�";
+                                        ip = "10.26.254.11";
+                                        devStation = carcon.conveyorNan[endLocate];
+                                    }
+                                    if (text != "")
+                                    {
+
+                                        var modConn = PLCTaskAction.listPlcConn.First(m => m.PlcIP == ip);
+                                        //PLCTaskAction.plcs.FirstOrDefault(s => s.Text == text);
+                                        //var modConn = new PLCUtil(modPlc);
+
+                                        var modDeviceConver = PLCTaskAction.plcDevices.First(s => s.StationNum == devStation);
+                                        var (plcResult, palletVal) = modConn.GetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.PlcPos);
+                                        if (!plcResult.IsSucceed || Convert.ToInt32(palletVal) != 730)
+                                        {
+                                            //modConn.Close();
+                                            return;//鏀捐揣宸ヤ綅娌℃湁璇诲彇鎴愬姛鎴栦笉鏄┖闂�
+                                        }
+                                        
+                                        var plcResult2 = modConn.SetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.WcsPos, "740");
+                                        if (!plcResult.IsSucceed)
+                                        {
+                                            //modConn.Close();
+                                            return;
+                                        }
+                                        //娣诲姞浠诲姟鏄庣粏
+                                        var taskMonitor = new WcsTaskMonitor()
+                                        {
+                                            TaskNo = modFinshTask.TaskNo,
+                                            PlcName = modDevice.Text,
+                                            Status = TaskStatusEnum.Complete,
+                                            InteractiveMsg = $"鍐欏叆鎸囦护740锛氭墭鐩樺埌杈緖modFinshTask.EndRoadway}"
+                                        };
+                                        _db.Insertable(taskMonitor).ExecuteCommand();
+
+                                        //鏀瑰彉浠诲姟鐘舵��
+                                        modFinshTask.Status = TaskStatusEnum.Complete;
+                                        modFinshTask.FinishDate = DateTime.Now;
+                                        _db.Updateable(modFinshTask).ExecuteCommand();
+
+                                        var locateOut = _db.Queryable<WcsStorageLocat>().First(m => m.IsDelete == false && m.WareHouseNo == "W01" && m.LocatNo == modFinshTask.StartLocate);
+                                        if (locateOut != null && locateOut.Make == "1")
+                                        {
+                                            locateOut.PalletNo = "";
+                                            _db.Updateable(locateOut).ExecuteCommand();
+                                        }
+
+                                        //鍙嶉WMS绯荤粺 浠诲姟瀹屾垚
+                                        if (modFinshTask.Origin == "WMS")
+                                        {
+                                            HttpService httpService = new HttpService();
+                                            var requestMode = new TaskRequestWMS()
+                                            {
+                                                TaskNo = modFinshTask.TaskNo,
+                                                PalletNo = modFinshTask.PalletNo,
+                                                TaskType = ((int)modFinshTask.TaskType).ToString(),
+                                                TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
+                                            };
+                                            var modResponseTask = httpService.RequestTask(requestMode).Result;
+                                            modFinshTask.IsSuccess = TaskSuccessEnum.Success;
+                                            _db.Updateable(modFinshTask).ExecuteCommand();
+                                            HubUtil.PublicTask(modFinshTask.Adapt<WcsTaskOutput>());
+                                        }
+
+                                    }
+
+
+                                    #endregion 
+                                }
+                                else
+                                {
+                                    modFinshTask.Status = TaskStatusEnum.Complete;
+                                    modFinshTask.FinishDate = DateTime.Now;
+                                    _db.Updateable(modFinshTask).ExecuteCommand();
+
+                                    if (modFinshTask.TaskType == TaskTypeEnum.Move)
+                                    {
+                                        var locatemove = _db.Queryable<WcsStorageLocat>().First(m => m.IsDelete == false && m.WareHouseNo == "W01" && m.LocatNo == modFinshTask.StartLocate);
+                                        if (locatemove != null && locatemove.Make == "1")
+                                        {
+                                            locatemove.PalletNo = "";
+                                            _db.Updateable(locatemove).ExecuteCommand();
+                                        }
+                                    }
+
+                                    var locateIn = _db.Queryable<WcsStorageLocat>().First(m => m.IsDelete == false && m.WareHouseNo == "W01" && m.LocatNo == modFinshTask.EndLocate);
+                                    if (locateIn != null && locateIn.Make == "1")
+                                    {
+                                        locateIn.PalletNo = string.IsNullOrWhiteSpace(modFinshTask.PalletNo) ? "pall" : modFinshTask.PalletNo;
+                                        _db.Updateable(locateIn).ExecuteCommand();
+                                    }
+
+                                    //鍙嶉WMS绯荤粺 浠诲姟瀹屾垚
+                                    if (modFinshTask.Origin == "WMS")
+                                    {
+                                        HttpService httpService = new HttpService();
+                                        var requestMode = new TaskRequestWMS()
+                                        {
+                                            TaskNo = modFinshTask.TaskNo,
+                                            PalletNo = modFinshTask.PalletNo,
+                                            TaskType = ((int)modFinshTask.TaskType).ToString(),
+                                            TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
+                                        };
+                                        var modResponseTask = httpService.RequestTask(requestMode).Result;
+                                        modFinshTask.IsSuccess = TaskSuccessEnum.Success;
+                                        _db.Updateable(modFinshTask).ExecuteCommand();
+                                        HubUtil.PublicTask(modFinshTask.Adapt<WcsTaskOutput>());
+                                    }
+
+                                    
+
+                                }
+                                
+                                //鍒ゆ柇浠诲姟鏄惁鍏呯數浠诲姟,涓嬪彂寮�濮嬪厖鐢靛懡浠�
+                                if (modFinshTask.Levels == 888)
+                                {
+                                    //鍐欏叆寮�濮嬪厖鐢�
+                                    var modCd = modDevice.listStation.FirstOrDefault(s => s.Text == "鍏呯數鍛戒护");
+                                    plcConn.SetDBValue(modCd.PosType, modCd.PlcPos.ToString(), "2");
+                                }
+
+                                
+                            }
+                        }
+                    }
                     
                     WcsTask modTask;
                     //瑕佷笅鍙戣矾寰�2浠诲姟
@@ -246,25 +373,153 @@
                     {
                         // 鑾峰彇浠诲姟淇℃伅
                         modTask = _db.Queryable<WcsTask>().Where(s => s.Status <= TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.CarIp == modDevice.PlcIdIP).OrderBy(m => m.Levels).OrderBy(m => m.CreateTime).First();
-                        if (modTask == null)
+                        if (modTask != null)
                         {
-                            return;
+                            carTaskNext = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == modTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.Status == TaskStatusEnum.Wait).OrderBy(m => m.CreateTime).First();
                         }
-                        carTaskNext = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == modTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.Status == TaskStatusEnum.Wait).OrderBy(m => m.CreateTime).First();
                     }
 
-                    //return;
-                    if (modTask == null || carTaskNext == null)
+                    //璇诲彇灏忚溅浣嶇疆
+                    var modStationX = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(X)");
+                    var (resultx, valuex) = plcConn.GetDBValue(modStationX.PosType, modStationX.PlcPos);
+                    var modStationY = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(Y)");
+                    var (resulty, valuey) = plcConn.GetDBValue(modStationY.PosType, modStationY.PlcPos);
+                    var modStationZ = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(Z)");
+                    var (resultz, valuez) = plcConn.GetDBValue(modStationZ.PosType, modStationZ.PlcPos);
+                    var carXYZ = valuex.ToString().PadLeft(2, '0') + valuey.ToString().PadLeft(2, '0') + valuez.ToString().PadLeft(2, '0');
+                    if (modTask == null)
                     {
-                        //鍒ゆ柇灏忚溅鏄惁鏈夌┖闂叉椂闂磋褰� 娌℃湁锛氭坊鍔�  鏈夛細鍒ゆ柇褰撳墠鏃堕棿涓庤褰曟椂闂存槸鍚︽弧瓒�5鍒嗛挓 婊¤冻锛氭坊鍔犺灏忚溅鍘诲厖鐢典换鍔�
+                        //璇诲彇灏忚溅鐢甸噺
+                        var modPosCarDl = modDevice.listStation.FirstOrDefault(s => s.Text == "鐢垫睜鐢甸噺");
+                        var (resultDl, valueDl) = plcConn.GetDBValue(modPosCarDl.PosType, modPosCarDl.PlcPos);
+                        if (resultDl.IsSucceed && valueDl < (int)FourWayCarDLEnum.Dl)
+                        {
+                            var endLocateCar = "";
+                            if (valuez == 1)
+                            {
+                                endLocateCar = "011201";
+                            }
+                            else if (valuez == 2)
+                            {
+                                endLocateCar = "011202"; //
+                            }
+                            else
+                            {
+                                return; // 灞傛暟閿欒
+                            }
+                            var getCdTask = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.Levels == 888 && m.EndLocate == endLocateCar && m.Type == PLCTypeEnum.ShuttleCar && m.Status <= TaskStatusEnum.Doing);
+                            if (getCdTask == null)
+                            {
+                                var (resultDlLock, valueDlLock) = plcConn.GetDBValue(modDevice.PosType, modDevice.PlcPos);
+                                if (resultDlLock.IsSucceed && valueDlLock!=3 && carXYZ != endLocateCar)
+                                {
+                                    //娣诲姞灏忚溅鍏呯數浣嶇疆
+                                    WcsTask modCarTask = new WcsTask()
+                                    {
+                                        TaskNo = _taskService.GetTaskCode(),
+                                        TaskType = TaskTypeEnum.Move,
+                                        Type = PLCTypeEnum.ShuttleCar,
+                                        StartLocate = carXYZ,
+                                        EndLocate = endLocateCar,
+                                        PalletNo = "",
+                                        Status = TaskStatusEnum.Wait,
+                                        Levels = 888, //鍏呯數绛夌骇浼樺厛浠诲姟绛夌骇
+                                        Origin = "WCS",
+                                        CarIp = modDevice.PlcIdIP
+                                    };
+                                    _db.Insertable(modCarTask).ExecuteCommand();
+                                    HubUtil.PublicTask(modCarTask.Adapt<WcsTaskOutput>());
+                                }
+                            }
+                            
+                        }
+                        else if(resultDl.IsSucceed && valueDl < (int)FourWayCarDLEnum.Dl2)
+                        {
+                            //鍒ゆ柇灏忚溅鏄惁鏈夌┖闂叉椂闂磋褰� 娌℃湁锛氭坊鍔�  鏈夛細鍒ゆ柇褰撳墠鏃堕棿涓庤褰曟椂闂存槸鍚︽弧瓒�5鍒嗛挓 婊¤冻锛氭坊鍔犺灏忚溅鍘诲厖鐢典换鍔�
+                            var carTime = _db.Queryable<WcsCarTime>().First(m => m.IsDelete == false && m.CarIp == modDevice.PlcIdIP);
+                            if (carTime == null)
+                            {
+                                var carTimeAdd = new WcsCarTime()
+                                {
+                                    CarIp = modDevice.PlcIdIP,
+                                    CarTime = DateTime.Now
+                                };
+                                _db.Insertable(carTimeAdd).ExecuteCommand();
+                            }
+                            else
+                            {
+                                if (carTime.CarTime == null)
+                                {
+                                    carTime.CarTime = DateTime.Now;
+                                    carTime.UpdateTime = DateTime.Now;
+                                    _db.Updateable(carTime).ExecuteCommand();
+                                }
+                                else
+                                {
+                                    var date1 = DateTime.Now;
+                                    var data2 = (DateTime)carTime.CarTime;
+                                    TimeSpan interval = date1 - data2;
+                                    if (interval.TotalMinutes >= 5)
+                                    {
+                                        var endLocateCar = "";
+                                        if (valuez == 1)
+                                        {
+                                            endLocateCar = "011201";
+                                        }
+                                        else if (valuez == 2)
+                                        {
+                                            endLocateCar = "011202";
+                                        }
+                                        else
+                                        {
+                                            return; // 灞傛暟閿欒
+                                        }
+                                        var getCdTask = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.Levels == 888 && m.EndLocate == endLocateCar && m.Type == PLCTypeEnum.ShuttleCar && m.Status <= TaskStatusEnum.Doing);
+                                        if (getCdTask == null)
+                                        {
+                                            var (resultDlLock, valueDlLock) = plcConn.GetDBValue(modDevice.PosType, modDevice.PlcPos);
+                                            if (resultDlLock.IsSucceed && valueDlLock != 3 && carXYZ != endLocateCar)
+                                            {
+                                                //娣诲姞灏忚溅鍏呯數浣嶇疆
+                                                WcsTask modCarTask = new WcsTask()
+                                                {
+                                                    TaskNo = _taskService.GetTaskCode(),
+                                                    TaskType = TaskTypeEnum.Move,
+                                                    Type = PLCTypeEnum.ShuttleCar,
+                                                    StartLocate = carXYZ,
+                                                    EndLocate = endLocateCar,
+                                                    PalletNo = "",
+                                                    Status = TaskStatusEnum.Wait,
+                                                    Levels = 888, //鍏呯數绛夌骇浼樺厛浠诲姟绛夌骇
+                                                    Origin = "WCS",
+                                                    CarIp = modDevice.PlcIdIP
+                                                };
+                                                _db.Insertable(modCarTask).ExecuteCommand();
+                                                HubUtil.PublicTask(modCarTask.Adapt<WcsTaskOutput>());
+                                            }
+                                                
+                                        }
+                                       
+                                    }
+                                }
+
+
+                            }
+                        }
+                         
+                        
                         return;
                     }
-                    
+                    if (carTaskNext == null)
+                    {
+                        return;
+                    }
                     if (carTaskNext.Status == TaskStatusEnum.Doing)
                     {
                         Thread.Sleep(3000);
                         return;
                     }
+                    
                     //鍒ゆ柇褰撳墠浠诲姟鏄惁杩樻湁鍓嶇疆浠诲姟鏈畬鎴�
                     var preStrs = carTaskNext.PreId.Split(';');
                     foreach (var preStr in preStrs)
@@ -280,16 +535,37 @@
                             return;//鍓嶇疆浠诲姟鏈畬鎴�
                         }
                     }
-                    //鍏堝浣�
-                    var modRest = modDevice.listStation.FirstOrDefault(s => s.Text == "澶嶄綅");
-                    plcConn.SetDBValue(modRest.PosType, modRest.PlcPos, "1");
+                     
+                    //灏忚溅鐘舵��
+                    var (resultCar, valueCar) = plcConn.GetDBValue(modDevice.PosType, modDevice.PlcPos);
 
-                    List<Result> listResult = new List<Result>();
+                    var modPosTaskStatus2 = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鐘舵��");
+                    var (resultTaskStatus2, valueTaskStatus2) = plcConn.GetDBValue(modPosTaskStatus.PosType, modPosTaskStatus.PlcPos);
+                    if (resultCar.IsSucceed && valueCar == 1 && resultTaskStatus2.IsSucceed && (valueTaskStatus2 == 0 || valueTaskStatus2 == 1))
+                    {
+                        //鍏堝浣�
+                        var modRest = modDevice.listStation.FirstOrDefault(s => s.Text == "澶嶄綅");
+                        plcConn.SetDBValue(modRest.PosType, modRest.PlcPos, "1");
+                    }
+                    else
+                    {
+                        return;
+                    }
+
+                        List<Result> listResult = new List<Result>();
                     //鑾峰彇灏忚溅浠诲姟鍙�
                     var carTaskNo = FourWayCarUtil.GetTaskNo();
-                    
+
+                    //鍒ゆ柇浠诲姟鏄惁鍏呯數浠诲姟
+                    if (modTask.Levels == 888)
+                    {
+                        //鍐欏叆鍏呯數鍛戒护
+                        var modCd = modDevice.listStation.FirstOrDefault(s => s.Text == "鍏呯數鍛戒护");
+                        listResult.Add(plcConn.SetDBValue(modCd.PosType, modCd.PlcPos.ToString(), "1"));
+                    }
+
                     var modWriteTask = modDevice.listStation.FirstOrDefault(s => s.Text == "鍐欏叆浠诲姟鍙�");
-                    listResult.Add(plcConn.SetDBValue(modWriteTask.PosType, modWriteTask.PlcPos, carTaskNo.ToString()));
+                    listResult.Add(plcConn.SetDBValueRepeat(modWriteTask.PosType, modWriteTask.PlcPos, carTaskNo.ToString()));
 
                     var modNodeX = modDevice.listStation.FirstOrDefault(s => s.Text == "鑺傜偣鍧愭爣X");
                     var modNodeY = modDevice.listStation.FirstOrDefault(s => s.Text == "鑺傜偣鍧愭爣Y");
@@ -323,22 +599,97 @@
                         var epathz = ePath.Substring(4, 2);
                         var epathn = ePath.Substring(6, 1);
                         //鍐欏叆浜や簰浣嶇疆
-                        listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), epathx));
-                        listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), epathy));
-                        listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), epathz));
-                        listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), epathn));
+                        listResult.Add(plcConn.SetDBValueRepeat(modNodeX.PosType, posX++.ToString(), epathx));
+                        listResult.Add(plcConn.SetDBValueRepeat(modNodeY.PosType, posY++.ToString(), epathy));
+                        listResult.Add(plcConn.SetDBValueRepeat(modNodeZ.PosType, posZ++.ToString(), epathz));
+                        listResult.Add(plcConn.SetDBValueRepeat(modNodeStatus.PosType, posStatus++.ToString(), epathn));
                     }
                     
                     //杩欓噷鏄妸鍚庨潰鐨勫潗鏍囧叏鍐�0锛堜负浜嗛槻姝笂娆′换鍔″潗鏍囨病琚鐩栵級
                     while (posX <= 43097)
                     {
-                        listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), "0"));
-                        listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), "0"));
-                        listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), "0"));
-                        listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), "0"));
+                        listResult.Add(plcConn.SetDBValueRepeat(modNodeX.PosType, posX++.ToString(), "0"));
+                        listResult.Add(plcConn.SetDBValueRepeat(modNodeY.PosType, posY++.ToString(), "0"));
+                        listResult.Add(plcConn.SetDBValueRepeat(modNodeZ.PosType, posZ++.ToString(), "0"));
+                        listResult.Add(plcConn.SetDBValueRepeat(modNodeStatus.PosType, posStatus++.ToString(), "0"));
                     }
                     if (listResult.All(s => s.IsSucceed))
                     {
+                        if (modTask.TaskType == TaskTypeEnum.Out)
+                        {
+                            #region 杈撻�佺嚎 鍐欏叆PLC 730
+
+                            var text = "";
+                            var devStation = "";
+                            var endLocate = modTask.EndRoadway;
+                            var carcon = new carConverModel();
+                            var ip = "";
+                            if (carcon.conveyorBei.Keys.Contains(endLocate))
+                            {
+                                text = "杈撻�佺嚎鍖�";
+                                ip = "10.26.254.10";
+                                devStation = carcon.conveyorBei[endLocate];
+                            }
+                            else if (carcon.conveyorNan.Keys.Contains(endLocate))
+                            {
+                                text = "杈撻�佺嚎鍗�";
+                                ip = "10.26.254.11";
+                                devStation = carcon.conveyorNan[endLocate];
+                            }
+                            if (text != "")
+                            {
+                                var modConn = PLCTaskAction.listPlcConn.First(m => m.PlcIP == ip);
+                                //var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Text == text);
+                                //var modConn = new PLCUtil(modPlc);
+
+                                var modDeviceConver = PLCTaskAction.plcDevices.First(s => s.StationNum == devStation);
+                                var (plcResult, palletVal) = modConn.GetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.PlcPos);
+                                if (!plcResult.IsSucceed || Convert.ToInt32(palletVal) == 720)
+                                {
+                                    var listResultcon = new List<Result>();
+
+                                    //浠诲姟鍙蜂笌鎵樼洏鏉$爜
+                                    var modPosConverTask = PLCTaskAction.plcPositions.First(s => s.DeviceId == modDeviceConver.Id && s.Text == "浠诲姟鍙�");
+                                    listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverTask.PosType, modDeviceConver.DbNumber, modPosConverTask.PlcPos, modTask.TaskId.ToString()));
+                                    var modPosConverPallet = PLCTaskAction.plcPositions.First(s => s.DeviceId == modDeviceConver.Id && s.Text == "鎵樼洏鏉$爜");
+                                    listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverPallet.PosType, modDeviceConver.DbNumber, modPosConverPallet.PlcPos, modTask.PalletNo.ToString()));
+
+                                    // 璧峰宸ヤ綅銆佺洰鐨勫伐浣�
+                                    var modPosConverStrLocat = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDeviceConver.Id && s.Text == "璧峰宸ヤ綅");
+                                    listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverStrLocat.PosType, modDeviceConver.DbNumber, modPosConverStrLocat.PlcPos, modDeviceConver.StationNum));
+                                    var modPosConverEndLocat = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDeviceConver.Id && s.Text == "鐩殑宸ヤ綅");
+                                    listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverEndLocat.PosType, modDeviceConver.DbNumber, modPosConverEndLocat.PlcPos, modTask.EndLocate));
+
+                                    if (listResultcon.All(s => s.IsSucceed))
+                                    {
+                                        var plcResult2 = modConn.SetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.WcsPos, "730");
+                                        if (!plcResult.IsSucceed)
+                                        {
+                                            //modConn.Close();
+                                            return;
+                                        }
+                                        //娣诲姞浠诲姟鏄庣粏
+                                        var taskMonitor2 = new WcsTaskMonitor()
+                                        {
+                                            TaskNo = carTaskNext.TaskNo,
+                                            PlcName = modDevice.Text,
+                                            Status = TaskStatusEnum.Complete,
+                                            InteractiveMsg = $"鍐欏叆鎸囦护730锛氬伐浣嶆槸{modDeviceConver.StationNum}"
+                                        };
+                                        _db.Insertable(taskMonitor2).ExecuteCommand();
+                                    }
+                                }
+                                else if (!plcResult.IsSucceed || Convert.ToInt32(palletVal) != 730)
+                                {
+                                    return;
+                                }
+                               
+                            }
+
+
+                            #endregion
+                        }
+
                         var modStart = modDevice.listStation.FirstOrDefault(s => s.Text == "鍚姩鍛戒护");
                         var result = plcConn.SetDBValue(modStart.PosType, modStart.PlcPos, "1");
                         if (result.IsSucceed)
@@ -346,11 +697,22 @@
                             carTaskNext.Status = TaskStatusEnum.Doing;
                             carTaskNext.CarTaskNo = carTaskNo;
                             _db.Updateable(carTaskNext).ExecuteCommand();
+
+                            
+                             
                             //娓呴櫎灏忚溅绌洪棽鏃堕棿
+                            var carTimeClear = _db.Queryable<WcsCarTime>().First(m=>m.IsDelete == false && m.CarIp == modDevice.PlcIdIP);
+                            if (carTimeClear!= null)
+                            {
+                                carTimeClear.CarTime = null;
+                                carTimeClear.UpdateTime = DateTime.Now;
+                                _db.Updateable(carTimeClear).ExecuteCommand();
+                            }
                             var taskMonitor = new WcsTaskMonitor()
                             {
                                 TaskNo = carTaskNext.TaskNo,
                                 PlcName = modDevice.Text,
+                                Status = TaskStatusEnum.Complete,
                                 InteractiveMsg = $"鍚戠┛姊溅涓嬪彂浠诲姟{carTaskNext.TaskNo}"
                             };
                             _db.Insertable(taskMonitor).ExecuteCommand();
@@ -422,226 +784,612 @@
     {
         var plcConn = modDevice.PLCUtil;
 
+        var ledText = "";
         switch (modDevice.Value.ToString())
         {
-            case "20":
+            case "120": //绌洪棽锛孉GV鍙斁璐�
                 {
-                    //灏忚溅璇锋眰寮�鍗峰笜闂� 杩欓噷鏀规垚娴峰悍鐩存帴璋冪敤妯″潡 杩欓噷涓嶉渶瑕佷簡
-                    string Devicelndex = "";
-                    if (modDevice.Text == "2鍙峰嵎甯橀棬")
-                        Devicelndex = "222";
-                    else if (modDevice.Text == "3鍙峰嵎甯橀棬")
-                        Devicelndex = "111";
-                    var modCallBack = sysCacheService.Get<AGVApplyLockInput>("OpenDoor" + Devicelndex);
-                    if (modCallBack != null)
+                    var task = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.Status == TaskStatusEnum.Doing && m.IsComple == "1");
+                    if (task != null)
                     {
-                        var modAgvDevice = PLCTaskAction.plcs.FirstOrDefault(s => s.Text == "AGV");
-                        AgvNotifyInput input = new AgvNotifyInput()
+                        //娌℃湁鍑哄簱涓氬姟
+                        var res = new HttpService().GenAgvContinueTask(task.TaskNo).Result;
+                        if (res.code == "0")
                         {
-                            ActionStatus = "1",
-                            DeviceIndex = Devicelndex,
-                            UUID = modCallBack.UUID,
-                        };
-                        var response = new HttpService().NotifyExcuteResultInfo(input).Result;
-                        if (response.code == 0)
-                        {
-                            sysCacheService.Remove("OpenDoor" + Devicelndex);
+                            var modTaskMonitor = new WcsTaskMonitor()
+                            {
+                                TaskNo = task.TaskNo,
+                                PlcId = modDevice.modPlc.Id,
+                                PlcName = modDevice.modPlc.IP,
+                                InteractiveMsg = "鍚慉GV灏忚溅涓嬪彂缁х画鎵ц浠诲姟"
+                            };
+                            _db.Insertable(modTaskMonitor).ExecuteCommand();
+
+                            //涓嬪彂浠诲姟鏃ュ織
+                            HubUtil.PublicTask(task.Adapt<WcsTaskOutput>());
+                            HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
                         }
                     }
                 }
                 break;
-            case "100":
+            case "320":
                 {
-                    //宸ヤ綅瀵瑰簲 1=A 4=B 10=C
-                    string stationNum = "";
-                    if (modDevice.StationNum == "1" || modDevice.StationNum == "4")
+                    // 鐢宠瀵嗛泦搴撶粍
+                    string strMsg = "";
+
+                    // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭�
+                    var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜");
+                    var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
+                    if (!res.IsSucceed)
                     {
-                        stationNum = "10";
-                        //鍒ゆ柇鏈夋病鏈夊皬杞﹀埌C鍙g殑浠诲姟锛屽鏋滄湁灏卞啓120
-                        var countTask = _db.Queryable<WcsTask>().Where(s => s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.AGV && s.EndLocate == "A1").Count();
-                        if (countTask != 0)
-                        {
-                            var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "120");
-                            Log.Information($"鍚憄lc{modDevice.PlcIdIP}鍐欏叆120锛岀粨鏋滐細{ret.ToJson()}");
-                            return;
-                        }
+                        break;
                     }
-                    string strPalletNo = "";
-                    if (modDevice.StationNum == "10" || modDevice.StationNum == "4")
+                    var modPosEndLocat = modDevice.listStation.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅");
+
+                    //鍒ゆ柇鍏ュ簱閿佸畾鏄惁鎵撳紑
+                    if (PLCTaskAction.boEnterLock)
                     {
-                        var modPosPallet = modDevice.listStation.First(s => s.Text == "鎵樼洏鏉$爜");
-                        //todo:杩欓噷璇荤爜鍣ㄨ�佽涓嶅埌鏉$爜淇℃伅 鍏堝啓姝� 璇荤爜鍣ㄩ棶棰樿В鍐充簡鍙互娉ㄩ噴鎺�
-                        //plcConn.SetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos, "T2400001");
-                        var (res, palletNo) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos, modPosPallet.StringLength);
-                        if (!res.IsSucceed || palletNo == "")
+                        var (res350, palletVal350) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
+                        if (res350.IsSucceed && palletVal350 != "350")
                         {
-                            var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "120");
-                            Log.Information($"鍚憄lc{modDevice.PlcIdIP}鍐欏叆120锛岀粨鏋滐細{ret.ToJson()}");
-                            return;
+                            ledText += $"鐢宠鍏ュ簱澶辫触\n\n";
+                            ledText += $"鎵樼洏鍙�:{palletVal}\n";
+                            ledText += $"鍏ュ簱浠诲姟宸查攣瀹氾紝璇疯В閿佸悗閲嶈瘯!\n";
+                            LedDisplay(modDevice.LedIP, ledText);
                         }
-                        strPalletNo = Convert.ToString(palletNo);
-                    }
-                    if (modDevice.StationNum == "10")
-                    {
-                        if (strPalletNo.Substring(0, 1) == "T")
-                            stationNum = "4";
-                        else
-                            stationNum = "1";
+
+                        // 鍐欏叆杈撻�佺嚎閫�鍥炴寚浠�
+                        var ret = plcConn.SetPlcDBValueRepeat(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
+                        if (ret.IsSucceed)
+                        {
+                            plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350");
+                        }
+
+                        break;
                     }
 
-                    // 鍐欏叆鎵樼洏杈撻�佺嚎鐮佸灈宸ヤ綅
+                    if (palletVal == null)
+                    {
+                        var (res350, palletVal350) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
+                        if (res350.IsSucceed && palletVal350 != "350")
+                        {
+                            ledText += $"鐢宠鍏ュ簱澶辫触\n\n";
+                            ledText += $"鎵樼洏鍙�:{palletVal}\n";
+                            ledText += $"鎵弿鎵樼洏鍙峰け璐�!\n";
+                            LedDisplay(modDevice.LedIP, ledText);
+                        }
+
+                        // 鍐欏叆杈撻�佺嚎閫�鍥炴寚浠�
+                        var ret = plcConn.SetPlcDBValueRepeat(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
+                        if (ret.IsSucceed)
+                        {
+                            plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350");
+                        }
+
+                        break;
+                    }
+
+                    var http = new HttpService();
+                    string TaskNo = "", EndLocate = "";
+                    strMsg = http.RequestRoadWay(palletVal, modDevice.StationNum, ref EndLocate, ref TaskNo);
+                    if (!strMsg.Contains("-1"))
+                    {
+                        // 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇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();
+
+                        // 鍐欏叆330
+                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "330");
+                        if (ret.IsSucceed)
+                        {
+                            // 鎻掑叆浠诲姟鏄庣粏 
+                            var modInsertTaskMonitor = new WcsTaskMonitor()
+                            {
+                                TaskNo = TaskNo,
+                                PlcId = modDevice.Id,
+                                PlcName = modDevice.Text,
+                                InteractiveMsg = $"鍐欏叆鎸囦护330锛歿modDevice.StationNum}宸ヤ綅鐢宠宸烽亾",
+                                PalletNo = palletVal,
+                                Status = TaskStatusEnum.Complete,
+                                StartLocat = modDevice.StationNum,
+                                EndLocat = EndLocate,
+                            };
+                            // 鎻掑叆浜や簰鏃ュ織
+                            _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
+
+
+                            // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈�
+                            HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+                            // led鏄剧ず鍐呭
+                            try
+                            {
+                                ledText += $"浠诲姟绫诲瀷:{taskInfo.TaskType.GetDescription()}\n\n";
+
+                                ledText += $"浠诲姟鍙�:{taskInfo.TaskNo}\n";
+                                ledText += $"鎵樼洏鍙�:{taskInfo.PalletNo}\n\n";
+
+                                ledText += $"璧峰浣�:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n";
+                                ledText += $"鐩爣浣�:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}";
+                                LedDisplay(modDevice.LedIP, ledText);
+
+                            }
+                            catch (Exception ex)
+                            {
+                                Log.Error(ex.Message);
+                            }
+
+                        }
+
+                    }
+                    else
+                    {
+                        var (res350, palletVal350) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
+                        if (res350.IsSucceed && palletVal350 != "350")
+                        {
+                            ledText += $"鐢宠鍏ュ簱澶辫触\n\n";
+                            ledText += $"鎵樼洏鍙�:{palletVal}\n";
+                            ledText += $"{strMsg}\n";
+                            LedDisplay(modDevice.LedIP, ledText);
+                        }
+
+                        // 鍐欏叆杈撻�佺嚎閫�鍥炴寚浠�
+                        var ret = plcConn.SetPlcDBValueRepeat(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
+                        if (ret.IsSucceed)
+                        {
+                            plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350");
+                        }
+                    }
+                }
+                break;
+            case "330":
+                {
+                    // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭�
+                    var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜");
+                    var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, 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.Type == PLCTypeEnum.ConveyorLine 
+                    && (s.Status == TaskStatusEnum.Wait || s.Status == TaskStatusEnum.Doing) 
+                    && s.TaskType == TaskTypeEnum.In);
+
+                    if (modTask == null)
+                    {
+                        // 姝ゆ墭鐩樻病鏈夊搴旂殑杞Щ浠诲姟 led鏄剧ず
+                        break;
+                    }
+                    //鍒ゆ柇鍏ュ簱閿佸畾鏄惁鎵撳紑
+                    if (PLCTaskAction.boEnterLock)
+                    {
+                        break;//鍏ュ簱閿佸畾鎵撳紑鍒欎笉鎵ц鍏ュ簱浠诲姟
+                    }
+
+                    // 鑾峰彇鍥涢」杞﹀彇璐у伐浣�
+                    string endLocatVlue = PLCCommon.RoadwayToStationNum(modTask.EndRoadway, modDevice.StationNum.PadLeft(3,'0'));
+
+
+
+                    // 缁橮LC鍐欏叆浠诲姟鏁版嵁
                     var listResult = new List<Result>();
-                    // 鍐欏叆鎵樼洏杈撻�佺嚎鐮佸灈宸ヤ綅 鐩殑宸ヤ綅銆佷换鍔″彿锛屽啓鍏ヤ氦浜掓祦绋嬬粍鎵樻垚鍔�
-                    var posModel = modDevice.listStation.First(m => m.Text == "璧峰宸ヤ綅");
-                    listResult.Add(plcConn.SetPlcDBValue(posModel.PosType, modDevice.DbNumber, posModel.PlcPos, modDevice.StationNum));
-                    var posModel2 = modDevice.listStation.First(m => m.Text == "鐩爣宸ヤ綅");
-                    listResult.Add(plcConn.SetPlcDBValue(posModel2.PosType, modDevice.DbNumber, posModel2.PlcPos, stationNum));
-                    string taskNo = _taskService.GetTaskCode("WCS");
-                    var modPosTask = modDevice.listStation.First(s => s.Text == "浠诲姟鍙�");
-                    listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, taskNo));
+                    // 浠诲姟鍙枫�佷换鍔$被鍨嬨�佹墭鐩樺彿
+                    var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�");
+                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskId.ToString()));
+                    var modPosTaskType = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟绫诲瀷");
+                    var taskTypeStr = (int)modTask.TaskType;
+                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosTaskType.PosType, modDevice.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString()));
+                    var modPosPalletNo = modDevice.listStation.FirstOrDefault(s => s.Text == "鎵樼洏鏉$爜");
+                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
+                    // 璧峰宸ヤ綅銆佺洰鐨勫伐浣�
+                    var modPosStrLocat = modDevice.listStation.FirstOrDefault(s => s.Text == "璧峰宸ヤ綅");
+                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosStrLocat.PosType, modDevice.DbNumber, modPosStrLocat.PlcPos, modDevice.StationNum));
+                    var modPosEndLocat = modDevice.listStation.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅");
+                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosEndLocat.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, endLocatVlue));
+
 
                     if (listResult.All(s => s.IsSucceed))
                     {
-                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "130");
-                        Log.Information($"鍚憄lc{modDevice.PlcIdIP}鍐欏叆130锛岀粨鏋滐細{ret.ToJson()}");
+                        // 灏嗕换鍔$姸鎬佸彉鏇翠负姝e湪鎵ц
+                        _db.Updateable<WcsTask>()
+                           .SetColumns(s => s.Status == TaskStatusEnum.Doing)
+                           .Where(s => s.Id == modTask.Id)
+                           .ExecuteCommand();
+                        // 鍐欏叆娴佺▼瀛� 330 340
+
+                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "340");
+
+                        // 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇LEDIP 鎺ㄩ�佸埌LED灞忓箷銆�
+                        modDevice.LedIP = _db.Queryable<WcsDevice>().Where(w => w.StationNum == modTask.StartLocate).Select(s => s.LedIP).First();
+
                         if (ret.IsSucceed)
                         {
-                            AddWcsTaskInput modTask = new AddWcsTaskInput()
-                            {
-                                TaskNo = taskNo,
-                                TaskType = TaskTypeEnum.In,
-                                PalletNo = strPalletNo,
-                                Status = TaskStatusEnum.Doing,
-                                IsSuccess = TaskSuccessEnum.Fail,
-                                StartLocate = modDevice.StationNum,
-                                EndLocate = stationNum,
-                                Type = PLCTypeEnum.ConveyorLine,
-                            };
-                            _taskService.Add(modTask);
-                            WcsTaskMonitor modTaskMonitor = new WcsTaskMonitor()
+                            // 鎻掑叆浠诲姟鏄庣粏 
+                            var modInsertTaskMonitor = new WcsTaskMonitor()
                             {
                                 TaskNo = modTask.TaskNo,
-                                PlcId = modDevice.PlcId,
+                                PlcId = modDevice.Id,
                                 PlcName = modDevice.Text,
+                                InteractiveMsg = $"鍐欏叆鎸囦护340锛歿modDevice.StationNum}鍌ㄤ綅====銆媨endLocatVlue}宸ヤ綅",
+                                PalletNo = palletVal,
+                                Status = TaskStatusEnum.Complete,
                                 StartLocat = modDevice.StationNum,
-                                EndLocat = stationNum,
-                                Status = TaskStatusEnum.Doing,
-                                InteractiveMsg = $"鍚憑modDevice.Text}鍐欏叆鎸囦护130锛岀粨鏋渰ret.IsSucceed}",
+                                EndLocat = endLocatVlue,
                             };
-                            _db.Insertable(modTaskMonitor).ExecuteCommand();
 
-                            //涓嬪彂浠诲姟鏃ュ織
-                            HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
-                            HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+                            // 鎻掑叆浜や簰鏃ュ織
+                            _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
+
+                            // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈�
+                            HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
                         }
                     }
                 }
                 break;
-            case "140":
+            case "620":
                 {
-                    var modPosTask = modDevice.listStation.First(m => m.Text == "浠诲姟鍙�");
-                    var (result, taskNo) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modPosTask.StringLength);
-                    var modPosPallet = modDevice.listStation.First(m => m.Text == "鎵樼洏鏉$爜");
-                    var (res, palletNo) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos, modPosPallet.StringLength);
-                    WcsTaskMonitor modTaskMonitor = new WcsTaskMonitor();
-                    WcsTask modTask = new WcsTask();
-                    if (!result.IsSucceed)
+                    // 鐢宠鍌ㄤ綅 鏇存柊鍏ュ簱浠诲姟(鍌ㄤ綅鍦板潃) 630
+                    var strMsg = "";
+
+                    // 鑾峰彇宸ヤ綅浠诲姟鍙蜂俊鎭�
+                    var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�");
+                    var (resTask, taskVal) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos);
+                    if (!resTask.IsSucceed)
                     {
-                        Log.Error($"{plcConn.PlcIP}璇诲彇浠诲姟鍙峰け璐�");
-                        return;
+                        break;
                     }
-                    if (modDevice.StationNum == "10")
+                    // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭�
+                    var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜");
+                    var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
+                    if (!res.IsSucceed)
                     {
-                        var posModel = modDevice.listStation.First(m => m.Text == "璧峰宸ヤ綅");
-                        var (resultS, station) = plcConn.GetPlcDBValue(posModel.PosType, modDevice.DbNumber, posModel.PlcPos);
-                        if (resultS.IsSucceed)
+                        break;
+                    }
+
+                    string TaskNo = "";
+                    // 鍚慦MS鐢宠鍌ㄤ綅淇℃伅
+                    strMsg = new HttpService().RequestLocate(palletVal, taskVal,ref TaskNo);
+
+                    if (!strMsg.Contains("-1"))
+                    {
+                        // 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇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();
+                        // 鍐欏叆娴佺▼瀛� 630
+                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "630");
+
+                        if (ret.IsSucceed)
                         {
-                            if (station == 1)
+                            // 鎻掑叆浠诲姟鏄庣粏 
+                            var modInsertTaskMonitor = new WcsTaskMonitor()
                             {
-                                WcsTask modInsertTask = new WcsTask()
-                                {
-                                    TaskNo = _taskService.GetTaskCode(),
-                                    TaskType = TaskTypeEnum.Move,
-                                    Type = PLCTypeEnum.AGV,
-                                    StartLocate = AGVStaionEnum.A1.ToString(),
-                                    EndLocate = AGVStaionEnum.F1.ToString(),
-                                    PalletNo = modTask.PalletNo,
-                                    Status = TaskStatusEnum.Wait,
-                                    Levels = 5,
-                                    Origin = "WCS"
-                                };
-                                _db.Insertable(modInsertTask).ExecuteCommand();
-                                HubUtil.PublicTask(modInsertTask.Adapt<WcsTaskOutput>());
-                            }
-                            else if (station == 4)
-                            {
-                                WcsTask modInsertTask = new WcsTask()
-                                {
-                                    TaskNo = _taskService.GetTaskCode(),
-                                    TaskType = TaskTypeEnum.Move,
-                                    Type = PLCTypeEnum.AGV,
-                                    StartLocate = AGVStaionEnum.A1.ToString(),
-                                    EndLocate = AGVStorageUtil.GetPalletInStorage(),
-                                    PalletNo = modTask.PalletNo,
-                                    Status = TaskStatusEnum.Wait,
-                                    Levels = 5,
-                                    Origin = "WCS"
-                                };
-                                _db.Insertable(modInsertTask).ExecuteCommand();
-                                HubUtil.PublicTask(modInsertTask.Adapt<WcsTaskOutput>());
-                            }
-                        }
-                        else
-                        {
-                            Log.Error("鑾峰彇璧峰宸ヤ綅澶辫触锛屽け璐ュ師鍥�" + resultS.Err);
-                            return;
+                                TaskNo = TaskNo,
+                                PlcId = modDevice.Id,
+                                PlcName = modDevice.Text,
+                                InteractiveMsg = $"鍐欏叆鎸囦护340锛歿modDevice.StationNum}宸ヤ綅鐢宠鍌ㄤ綅",
+                                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 += $"浠诲姟绫诲瀷:{taskInfo.TaskType.GetDescription()}\n\n";
+                            ledText += $"浠诲姟鍙�:{taskInfo.TaskNo}\n";
+                            ledText += $"鎵樼洏鍙�:{taskInfo.PalletNo}\n\n";
+                            ledText += $"璧峰浣�:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n";
+                            ledText += $"鐩爣浣�:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}";
+                            LedDisplay(modDevice.LedIP, ledText);
                         }
                     }
-                    var ledText = "";
-                    if (modDevice.StationNum == "4")
+                    else
                     {
-                        //todo:led
-                        ledText += "浠诲姟绫诲瀷:鍏ュ簱\n\n";
-                        ledText += $"浠诲姟鍙�:{taskNo}\n";
-                        ledText += $"鎵樼洏鍙�:{palletNo}\n\n";
-                        //ledText += $"璧峰浣�:10\n";
-                        //ledText += $"鐩爣浣�:4";
+                        // 鐢宠鍌ㄤ綅澶辫触锛丩ED鏄剧ず
+                        Log.Error(string.Format($"鐢宠鍌ㄤ綅澶辫触:{strMsg},璇诲啓plc閿欒"));
+                        // led鏄剧ず鍐呭
+                        var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business);
+                        ledText += $"鐢宠鍏ュ簱澶辫触\n\n";
+                        ledText += $"{strMsg}\n";
                         LedDisplay(modDevice.LedIP, ledText);
                     }
-                    var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "150");
-                    Log.Information($"鍚憄lc{modDevice.PlcIdIP}鍐欏叆150锛岀粨鏋滐細{ret.ToJson()}");
-                    if (ret.IsSucceed)
-                    {
-                        string strTaskNo = taskNo;
-                        modTask = _db.Queryable<WcsTask>().First(s => s.TaskNo == strTaskNo);
-                        if (modTask != null)
-                        {
-                            modTaskMonitor = new WcsTaskMonitor()
-                            {
-                                TaskNo = modTask.TaskNo,
-                                PlcId = modDevice.PlcId,
-                                PlcName = modDevice.Text,
-                                StartLocat = modTask.StationNum,
-                                EndLocat = modTask.EndLocate,
-                                InteractiveMsg = $"鍚憑modDevice.Text}鍐欏叆鎸囦护150锛岀粨鏋渰ret.IsSucceed}",
-                            };
-                            modTaskMonitor.Status = TaskStatusEnum.Complete;
-                            _db.Insertable(modTaskMonitor).ExecuteCommand();
-                            modTask.FinishDate = DateTime.Now;
-                            modTask.Status = TaskStatusEnum.Complete;
-                            _db.Updateable(modTask).ExecuteCommand();
 
-                            //涓嬪彂浠诲姟鏃ュ織
-                            HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
-                            HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
-                        }
-                    }
+                }
+                break;
+            case "630":
+                {
+                    #region plc鍏夌數鎵弿涓嶅埌鎵樼洏鍚� 鑷姩娓呬俊鎭�
+
+                    //// 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭�
+                    //var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�");
+                    //var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
+                    //// 鑾峰彇宸ヤ綅浠诲姟鍙蜂俊鎭�
+                    //var modPosTaskNo = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�");
+                    //var (taskRes, taskNoVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosTaskNo.PlcPos);
+                    //if (!res.IsSucceed || !taskRes.IsSucceed)
+                    //{
+                    //    break;
+                    //}
+                    //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);
+                    //if (modTask == null)
+                    //{
+                    //    // 姝ゆ墭鐩樻病鏈夊搴旂殑杞Щ浠诲姟 led鏄剧ず
+                    //    break;
+                    //}
+
+                    //var sInfo = PLCCommon.GetStokePlc(modTask.EndRoadway, louCeng);
+                    //if (string.IsNullOrWhiteSpace(sInfo.Ip))
+                    //{
+                    //    //闇�鍔犱笂LED鏄剧ず
+                    //    Log.Error(string.Format($"鏍规嵁宸烽亾鑾峰彇璺烘満IP澶辫触锛岃鑱旂郴绠$悊鍛�"));
+                    //    break;
+                    //}
+                    //// 璺烘満杩炴帴
+                    //var plcStackeConn = PLCTaskAction.listPlcConn.First(m => m.PlcIP == sInfo.Ip);
+                    //if (plcStackeConn.Connected)
+                    //{
+                    //    // 鐩爣鎺掑垪灞�
+                    //    var endLocate = modTask.EndLocate;
+                    //    if (string.IsNullOrWhiteSpace(modTask.EndLocate))
+                    //    {
+                    //        Log.Error(string.Format($"鐩爣浣嶇疆涓虹┖锛岃浜哄伐澶勭悊,璇诲啓plc閿欒"));
+                    //        break;
+                    //    }
+
+                    //    // 杞崲鐩爣宸ヤ綅鎺掑垪灞� 03010301
+                    //    var paiVal = PLCCommon.GetDjAdress(modTask.EndRoadway.Substring(1, 2), endLocate.Substring(0, 2), endLocate.Substring(6, 2));
+                    //    string pai = paiVal.ToString();
+                    //    string lie = int.Parse(endLocate.Substring(2, 2)).ToString();
+                    //    string ceng = int.Parse(endLocate.Substring(4, 2)).ToString();
+
+                    //    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 (djRes, djVal) = plcStackeConn.GetPlcDBValue(djMod.PosType, djMod.DbNumber, djMod.PlcPos);
+
+                    //    if (!djRes.IsSucceed || djVal.ToString() != "820")
+                    //    {
+                    //        // 璺烘満闈炵┖闂茬瓑寰�
+                    //        break;
+                    //    }
+                    //    // 缁橮LC鍐欏叆浠诲姟鏁版嵁
+                    //    var listResult = new List<Result>();
+
+                    //    // 浠诲姟鍙枫�佷换鍔$被鍨嬨�佹墭鐩樺彿
+                    //    var modPosTask = djInfos.FirstOrDefault(s => s.Text == "浠诲姟鍙�");
+                    //    listResult.Add(plcStackeConn.SetPlcDBValue(modPosTask.PosType, djMod.DbNumber, modPosTask.PlcPos, modTask.TaskNo));
+                    //    var modPosTaskType = djInfos.FirstOrDefault(s => s.Text == "浠诲姟绫诲瀷");
+                    //    var taskTypeStr = (int)modTask.TaskType;
+                    //    listResult.Add(plcStackeConn.SetPlcDBValue(modPosTaskType.PosType, djMod.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString()));
+                    //    var modPosPalletNo = djInfos.FirstOrDefault(s => s.Text == "鎵樼洏鐮�");
+                    //    listResult.Add(plcStackeConn.SetPlcDBValue(modPosPalletNo.PosType, djMod.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
+
+                    //    //璧峰宸ヤ綅
+                    //    var modPosStrStationNum = djInfos.FirstOrDefault(s => s.Text == "璧峰宸ヤ綅");
+                    //    listResult.Add(plcStackeConn.SetPlcDBValue(modPosStrStationNum.PosType, djMod.DbNumber, modPosStrStationNum.PlcPos, modDevice.StationNum));
+
+                    //    //鍙栬揣鎺掋�佸垪銆佸眰
+                    //    var modPosStrPai = djInfos.FirstOrDefault(s => s.Text == "鍙栬揣鎺�");
+                    //    listResult.Add(plcStackeConn.SetPlcDBValue(modPosStrPai.PosType, djMod.DbNumber, modPosStrPai.PlcPos, sInfo.Pai));
+                    //    var modPosStrLie = djInfos.FirstOrDefault(s => s.Text == "鍙栬揣鍒�");
+                    //    listResult.Add(plcStackeConn.SetPlcDBValue(modPosStrLie.PosType, djMod.DbNumber, modPosStrLie.PlcPos, sInfo.Lie));
+                    //    var modPosStrCeng = djInfos.FirstOrDefault(s => s.Text == "鍙栬揣灞�");
+                    //    listResult.Add(plcStackeConn.SetPlcDBValue(modPosStrCeng.PosType, djMod.DbNumber, modPosStrCeng.PlcPos, sInfo.Ceng));
+                    //    //鏀捐揣鎺掋�佸垪銆佸眰
+                    //    var modPosEndPai = djInfos.FirstOrDefault(s => s.Text == "鏀捐揣鎺�");
+                    //    listResult.Add(plcStackeConn.SetPlcDBValue(modPosEndPai.PosType, djMod.DbNumber, modPosEndPai.PlcPos, pai));
+                    //    var modPosEndLie = djInfos.FirstOrDefault(s => s.Text == "鏀捐揣鍒�");
+                    //    listResult.Add(plcStackeConn.SetPlcDBValue(modPosEndLie.PosType, djMod.DbNumber, modPosEndLie.PlcPos, lie));
+                    //    var modPosEndCeng = djInfos.FirstOrDefault(s => s.Text == "鏀捐揣灞�");
+                    //    listResult.Add(plcStackeConn.SetPlcDBValue(modPosEndCeng.PosType, djMod.DbNumber, modPosEndCeng.PlcPos, ceng));
+
+                    //    if (listResult.All(s => s.IsSucceed))
+                    //    {
+                    //        // 鍐欏叆璺烘満 830
+                    //        var retc2 = plcStackeConn.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;
+
+                    //        }
+                    //        modInsertTaskMonitor.InteractiveMsg = $"璺烘満鍐欏叆鎸囦护830锛歿modDevice.StationNum}宸ヤ綅====銆�" + modTask.EndLocate + "鍌ㄤ綅鍦板潃!";
+                    //        // 鎻掑叆浜や簰鏃ュ織
+                    //        _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
+                    //        if (PLCTaskAction.boRefresh)
+                    //        {
+                    //            //涓嬪彂浠诲姟鏃ュ織
+                    //            HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+                    //        }
+
+                    //    }
+
+
+
+
+                    //}
+
+                    #endregion
                 }
                 break;
 
+            #region 鍑哄簱浜や簰
+            case "420":
+                {
+                    #region 鎵樼洏鍒拌揪鎷i�夊伐浣�/鍑哄簱鍙�
+                    // 鍑哄簱鍙�
+                    // led鏄剧ず鎵樼洏淇℃伅
+                    // 鍐欏叆430
+                    var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "430");
+
+                    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);
+
+                        int taskNoVal = Convert.ToInt32(taskVal);
+                        var taskInfo = _db.Queryable<WcsTask>().First(w => w.TaskId == taskNoVal && w.TaskType == TaskTypeEnum.Out);
+                        if (taskInfo == null)
+                        {
+                            Log.Error(string.Format("杈撻�佺嚎430:鏈壘鍒板搴旂殑浠诲姟銆�"));
+                            break;
+                        }
+                        //// 鏀瑰彉浠诲姟鐘舵��
+                        //taskInfo.Status = TaskStatusEnum.Complete;
+                        //taskInfo.FinishDate = DateTime.Now;
+                        ////modTask.Levels = 999;
+                        //_db.Updateable(taskInfo).ExecuteCommand();
+                        //HubUtil.PublicTask(taskInfo.Adapt<WcsTaskOutput>());
+                        // 鎻掑叆浠诲姟鏄庣粏 
+                        var modInsertTaskMonitor = new WcsTaskMonitor()
+                        {
+                            TaskNo = taskInfo.TaskNo,
+                            PlcId = modDevice.Id,
+                            PlcName = modDevice.Text,
+                            InteractiveMsg = $"鍐欏叆鎸囦护430锛氭墭鐩樺埌杈緖modDevice.StationNum}宸ヤ綅",
+                            PalletNo = palletVal,
+                            Status = TaskStatusEnum.Complete,
+                            StartLocat = Convert.ToString(starVal),
+                            EndLocat = modDevice.StationNum,
+                        };
+                        //if (taskInfo.Origin == "WMS")
+                        //{
+                        //    // 鍙嶉WMS
+                        //    var requestMode = new TaskRequestWMS()
+                        //    {
+                        //        TaskNo = taskInfo.TaskNo,
+                        //        PalletNo = taskInfo.PalletNo,
+                        //        TaskType = ((int)taskInfo.TaskType).ToString(),
+                        //        TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
+                        //    };
+                        //    HttpService httpService = new HttpService();
+                        //    var modResponseTask = httpService.RequestTask(requestMode).Result;
+                        //    if (modResponseTask.StatusCode == 0)
+                        //    {
+                        //        modInsertTaskMonitor.InteractiveMsg += "锛岃繑鍥炵粰WMS浠诲姟瀹屾垚";
+                        //    }
+                        //    else
+                        //    {
+                        //        Log.Error(string.Format("浠诲姟鍙嶉澶辫触锛歋tatusCode锛歿0};Msg锛歿1}", modResponseTask.StatusCode, modResponseTask.Msg));
+                        //    }
+                        //}
+
+                        // 鎻掑叆浜や簰鏃ュ織
+                        _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
+
+                        // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈�
+                        HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+
+                        modDevice.LedIP = _db.Queryable<WcsDevice>().Where(w => w.StationNum == taskInfo.EndLocate).Select(s => s.LedIP).First();
+
+                        // 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";
+                        ledText += $"璧峰浣�:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n";
+                        ledText += $"鐩爣浣�:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}";
+                        LedDisplay(ledDevice.LedIP, ledText);
+                    }
+                    // 鍙嶉WMS鍑哄簱瀹屾垚
+                    //TaskReques taskReques = new TaskReques();
+                    //taskReques.taskNo = TaskNo;
+                    //taskReques.TaskType = "1";
+                    //taskReques.TaskStatus = "2";
+                    //bool bl = wcsMySql.RequestTasks(taskReques);
+                    #endregion
+                }
+                break;
+            case "440":
+                {
+                    #region 鎷i�夊畬鎴�,鎵樼洏绂诲紑宸ヤ綅
+
+                    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);
+
+                    // 鍐欏叆450
+                    var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "450");
+                    if (ret.IsSucceed)
+                    {
+                        
+
+                        int tasknoVal = Convert.ToInt32(taskVal);
+                        var modTask = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.TaskId == tasknoVal);
+                        if (modTask == null)
+                        {
+                            Log.Error(string.Format("杈撻�佺嚎440:鏈壘鍒板搴旂殑浠诲姟銆�"));
+                            break;
+                        }
+                        
+                        // 鎻掑叆浠诲姟鏄庣粏 
+                        var modInsertTaskMonitor = new WcsTaskMonitor()
+                        {
+                            TaskNo = modTask.TaskNo,
+                            PlcId = modDevice.Id,
+                            PlcName = modDevice.Text,
+                            InteractiveMsg = $"鍐欏叆鎸囦护450锛歿modDevice.StationNum}鎵樼洏绂诲紑宸ヤ綅",
+                            PalletNo = palletVal,
+                            Status = TaskStatusEnum.Complete,
+                            StartLocat = starVal.ToString(),
+                            EndLocat = modDevice.StationNum,
+                        };
+                        // 鎻掑叆浜や簰鏃ュ織
+                        _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
+
+                        // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈�
+                        HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+                    }
+                    #endregion
+                }
+                break;
+
+            #endregion
             default: break;
         }
-
     }
 
     /// <summary>
@@ -651,56 +1399,76 @@
     private static void AGV(WcsDeviceDto modDevice)
     {
         
-        //杩欓噷鎵惧嚭鏉GV寰呮墽琛岀殑浠诲姟銆佹寜鐓т紭鍏堢骇涓嬪彂涓�涓换鍔$粰AGV
-        var listTask = _db.Queryable<WcsTask>().Where(s => (s.Status == TaskStatusEnum.Wait || s.Status == TaskStatusEnum.Doing) && s.Type == PLCTypeEnum.AGV).OrderBy(s => s.Levels).ToList();
-        if (listTask.Count == 0)
+        //杩欓噷鎵惧嚭鏉GV寰呮墽琛岀殑浠诲姟銆佹寜鐓т紭鍏堢骇銆佸垱寤烘椂闂翠笅鍙戜竴涓换鍔$粰AGV
+        var modTask = _db.Queryable<WcsTask>().Where(s => s.Status == TaskStatusEnum.Wait && s.Type == PLCTypeEnum.AGV).OrderBy(s => new { s.Levels ,s.CreateTime}).First();
+        if (modTask == null)
         {
             return;
         }
         
-        foreach (var modTask in listTask)
+         
+        if (_db.Queryable<WcsTask>().Any(s => s.EndLocate == modTask.EndLocate && s.IsDelete == false && s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.AGV ))
         {
-            if (_db.Queryable<WcsTask>().Any(s => s.EndLocate == modTask.EndLocate && s.IsDelete == false && s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.AGV ))
-            {
-                continue; // 鏈夌洰鐨勪綅缃竴鑷翠笖姝e湪鎵ц鐨勪换鍔�
-            }
-            
-            //涓嬪彂AGV浠诲姟
-            AgvTaskInput input = new AgvTaskInput()
-            {
-                ReqCode = modTask.Id.ToString(),
-                TaskCode = modTask.TaskNo,
-                CtnrCode = modTask.PalletNo,
-                PositionCodePath = new List<PositionCodePathItem>()
-            {
-                new PositionCodePathItem(){ PositionCode = modTask.StartLocate },
-                new PositionCodePathItem(){ PositionCode = modTask.EndLocate }
-            }
-            };
-            input.TaskTyp = "1" + modTask.StartLocate.Substring(0, 1) + modTask.EndLocate.Substring(0, 1);
-            var response = new HttpService().GenAgvSchedulingTask(input).Result;
-            if (response.code == "0")
-            {
-                AGVStatus = true;
-                modTask.Status = TaskStatusEnum.Doing;
-                _db.Updateable(modTask).ExecuteCommand();
-                var modTaskMonitor = new WcsTaskMonitor()
-                {
-                    TaskNo = modTask.TaskNo,
-                    PlcId = modDevice.modPlc.Id,
-                    PlcName = modDevice.modPlc.IP,
-                    InteractiveMsg = "鍚慉GV灏忚溅涓嬪彂浠诲姟"
-                };
-                _db.Insertable(modTaskMonitor).ExecuteCommand();
+            return; // 鏈夌洰鐨勪綅缃竴鑷翠笖姝e湪鎵ц鐨勪换鍔�
+        }
 
-                //涓嬪彂浠诲姟鏃ュ織
-                HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
-                HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
-            }
-            Console.WriteLine(response.ToJson());
+        //涓嬪彂AGV浠诲姟 
+        var taskTypeModel = AGVStorageUtil.GetTaskModle(modTask.StartLocate, modTask.EndLocate,out string type1,out string type2, out string jiebo);
+        if (string.IsNullOrWhiteSpace(taskTypeModel))
+        {
+            Console.WriteLine("鑾峰彇AGV浠诲姟妯℃澘澶辫触锛氳鏍稿疄浠诲姟璧峰鐩爣鍌ㄤ綅鏄惁姝g‘");
             return;
         }
+        AgvTaskSend taskModel = new AgvTaskSend();
+        taskModel.robotTaskCode = modTask.TaskNo;
+        taskModel.taskType = taskTypeModel;
+        if (jiebo == "")
+        {
+            taskModel.targetRoute = new List<targetRoute>()
+            {
+                new targetRoute(){seq = 0,type = type1,code = modTask.StartLocate},
+                new targetRoute(){seq = 1,type = type2,code = modTask.EndLocate}
+            };
+        }
+        else
+        {
+            taskModel.targetRoute = new List<targetRoute>()
+            {
+                new targetRoute(){seq = 0,type = type1,code = modTask.StartLocate},
+                new targetRoute(){seq = 1,type = "ZONE",code = jiebo},
+                new targetRoute(){seq = 2,type = type2,code = modTask.EndLocate}
+            };
+        }
+        
+        taskModel.extra = new extra()
+        {
+            carrierInfo = new List<carrierInfo>()
+            {
+                new carrierInfo(){ carrierType = "TP",carrierCode = modTask.PalletNo}
+            }
+        };
+        var response = new HttpService().GenAgvSendTask(taskModel).Result;
+        if (response.code == "SUCCESS")
+        {
+            modTask.Status = TaskStatusEnum.Doing;
+            _db.Updateable(modTask).ExecuteCommand();
+            var modTaskMonitor = new WcsTaskMonitor()
+            {
+                TaskNo = modTask.TaskNo,
+                PlcId = modDevice.modPlc.Id,
+                PlcName = modDevice.modPlc.IP,
+                InteractiveMsg = "鍚慉GV灏忚溅涓嬪彂浠诲姟"
+            };
+            _db.Insertable(modTaskMonitor).ExecuteCommand();
+
+            //涓嬪彂浠诲姟鏃ュ織
+            HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
+            HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+        }
+        //Console.WriteLine(response.ToJson());
         Thread.Sleep(3000);
+        return; 
+        
     }
 
     /// <summary>
@@ -745,6 +1513,11 @@
 
     private static void Test(WcsDeviceDto modDevice)
     {
+
+        var ledText = $"鐢宠鍏ュ簱澶辫触\n\n";
+        ledText += $"鎵樼洏鍙�:T2300001\n";
+        ledText += $"鍏ュ簱浠诲姟宸查攣瀹氾紝璇疯В閿佸悗閲嶈瘯!\n";
+        LedDisplay("10.26.254.31", ledText);
         //鍗峰笜闂�2鐢宠鎵撳紑
         //var result = modDevice.PLCUtil.SetPlcDBValue(PLCDataTypeEnum.Short, "DB1000", "1152", "10");
         //鍗峰笜闂�2鐢宠鍏抽棴
@@ -756,7 +1529,7 @@
         //var result = modDevice.PLCUtil.SetPlcDBValue(PLCDataTypeEnum.Short, "DB1000", "1154", "30");
 
         //C鍙GV鏀炬墭鐩樺畬鎴愮敵璇峰叆搴�
-        var result = modDevice.PLCUtil.SetPlcDBValue(PLCDataTypeEnum.Short, "DB1000", "1156", "100");
+        //var result = modDevice.PLCUtil.SetPlcDBValue(PLCDataTypeEnum.Short, "DB1000", "1156", "100");
 
         ////鍐欐娴嬭瘯璇籹tring
         //var (res, val) = modDevice.PLCUtil.GetPlcDBValue(PLCDataTypeEnum.String, "DB100", "64");

--
Gitblit v1.8.0