chengsc
2025-04-20 8246dd0db17f84a7ab3760670e445eb18756a288
Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -420,7 +420,7 @@
                    {
                        var modPosPallet = modDevice.listStation.First(s => s.Text == "托盘条码");
                        //todo:这里读码器老读不到条码信息 先写死 读码器问题解决了可以注释掉
                        plcConn.SetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos, "T2400001");
                        //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 == "")
                        {
@@ -512,7 +512,7 @@
                                    TaskNo = _taskService.GetTaskCode(),
                                    TaskType = TaskTypeEnum.Move,
                                    Type = PLCTypeEnum.AGV,
                                    StartLocate = AGVStaionEnum.A2.ToString(),
                                    StartLocate = AGVStaionEnum.A1.ToString(),
                                    EndLocate = AGVStaionEnum.F1.ToString(),
                                    PalletNo = modTask.PalletNo,
                                    Status = TaskStatusEnum.Wait,
@@ -529,7 +529,7 @@
                                    TaskNo = _taskService.GetTaskCode(),
                                    TaskType = TaskTypeEnum.Move,
                                    Type = PLCTypeEnum.AGV,
                                    StartLocate = AGVStaionEnum.A2.ToString(),
                                    StartLocate = AGVStaionEnum.A1.ToString(),
                                    EndLocate = AGVStorageUtil.GetPalletInStorage(),
                                    PalletNo = modTask.PalletNo,
                                    Status = TaskStatusEnum.Wait,
@@ -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())