chengsc
2 天以前 4c7f2d26fd6041d32f4e291559bc443671493246
Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
@@ -332,7 +332,7 @@
                        Thread.Sleep(3000);
                        Thread.Sleep(2000);
                    }
                    catch (OperationCanceledException)
                    {
@@ -357,7 +357,7 @@
        {
            while (true)
            {
                Console.WriteLine("开启四向车任务自分配");
                //Console.WriteLine("开启四向车任务自分配");
                //取消线程 关闭PLC连接
                if (cts.Token.IsCancellationRequested)
                {
@@ -385,7 +385,7 @@
                    
                    if (waitTask.TaskType == TaskTypeEnum.In )
                    {
                        //入库任务起始巷道就是起始工位
                        //入库任务起始巷道就是四向车取货工位
                        if (string.IsNullOrWhiteSpace(waitTask.StartRoadway) || string.IsNullOrWhiteSpace(waitTask.EndLocate))
                        {
                            continue;
@@ -397,6 +397,7 @@
                    }
                    else if (waitTask.TaskType == TaskTypeEnum.Out)
                    {
                        //出库任务目标巷道就是四向车放货工位
                        taskceng = int.Parse(waitTask.StartLocate.Substring(4, 2));
                        starLocate = waitTask.StartLocate;
                        endLocate = waitTask.EndRoadway;
@@ -407,33 +408,36 @@
                        var text = "";
                        var devStation = "";
                        var ip = "";
                        var carcon = new carConverModel();
                        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 modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Text == text);
                            var modConn = new PLCUtil(modPlc);
                            //var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Text == text);
                            //var modConn = new PLCUtil(modPlc);
                            var modConn = PLCTaskAction.listPlcConn.First(m => m.PlcIP == ip);
                            var modDevice = PLCTaskAction.plcDevices.First(s => s.StationNum == devStation);
                            var (plcResult, palletVal) = modConn.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.PlcPos);
                            if (!plcResult.IsSucceed || Convert.ToInt32(palletVal) != 720)
                            {
                                continue;//放货工位没有读取成功或不是空闲
                            }
                            modConn.Close();
                            }
                            var gongwei = carcon.conveyorRuKu[endLocate];
                            //判断任务
                            var convarTask = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.StartLocate == gongwei && m.Type == PLCTypeEnum.ConveyorLine);
                            var convarTask = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.StartLocate == gongwei
                            && m.Type == PLCTypeEnum.ConveyorLine && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing));
                            if (convarTask != null)
                            {
                                continue;//放货工位有任务
@@ -492,6 +496,12 @@
                                        break; //暂缓分配,防止同层小车关机或失联导致阻挡路径
                                    }
                                }
                                var modCarPall = plcPosition.FirstOrDefault(s => s.Text == "托盘检测");
                                var (resultPall, valuePall) = modbusUtil.GetDBValue(modCarPall.PosType, modCarPall.PlcPos);
                                if (resultPall.IsSucceed && valuePall  == 1)  //1有托盘 2无托盘
                                {
                                    break; //暂缓分配
                                }
                                //小车空闲加入集合
                                if (value == 1)
                                {