chengsc
2025-04-16 42bb5b84ff935e0a3efb46f56d4ff5ca5ed9e592
Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -675,9 +675,11 @@
            //如果拉托盘去成品工位,先检查有没有缺托
            if (modTask.StartLocate.Substring(0, 1) == "D" && modTask.EndLocate.Substring(0, 1) == "B")
            {
                //判断目标位置是拆托机的任务有没有,有就跳过拆托机到成品工位的任务
                if (listTask.Any(s => s.EndLocate.Substring(0, 1) == "D"))
                    continue;
            }
            //如果目的工位是原料仓,先检查原料仓储位状态
            if (modTask.EndLocate == AGVStaionEnum.F1.ToString())
            {
                if (_sysConfigService.GetConfigValue<bool>("cache_Materal").Result)
@@ -688,12 +690,17 @@
            //    if (!_sysConfigService.GetConfigValue<bool>("cache_Materal").Result)
            //        continue;
            //}
            //如果起始工位是拆托机
            if (modTask.StartLocate == AGVStaionEnum.D1.ToString())
            {
                //获取叠拆托机IP
                var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Type == PLCTypeEnum.PalletMachine);
                //获取叠拆托机工位
                var modDevice2 = PLCTaskAction.plcDevices.FirstOrDefault(s => s.PlcId == modPlc.Id && s.Text == "拆托机");
                //打开连接
                var modConn = new PLCUtil(modPlc);
                //是否缺托信号
                //是否允许取托信号
                var modPos = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDevice2.Id && s.Text == "允许取托");
                var (result, value) = modConn.GetPlcDBValue(modPos.PosType, modDevice2.DbNumber, modPos.PlcPos);
                if (result.IsSucceed)
@@ -724,6 +731,7 @@
                    }
                    else
                    {
                        //不允许取托,判断是否拆托机准备完成
                        modPos = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDevice2.Id && s.Text == "准备完成");
                        (result, value) = modConn.GetPlcDBValue(modPos.PosType, modDevice2.DbNumber, modPos.PlcPos);
                        if (!value)
@@ -738,6 +746,7 @@
                    continue;
                }
            }
            //如果目的工位是提升机放货工位,先检查有没有托盘线的任务
            if (modTask.EndLocate == AGVStaionEnum.A1.ToString())
            {
                if (_db.Queryable<WcsTask>().Where(s => s.Type == PLCTypeEnum.ConveyorLine && s.Status == TaskStatusEnum.Doing).Any())