wangxinhui
2025-04-29 95e39ae7aecd6e1016c71cf5ae70a680d8f569bb
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/³ÉÆ·²Ö/ConveyorLineJob_CP.cs
@@ -95,8 +95,13 @@
                                WriteError(item.StationName, $"未找到路由配置信息,设备编号:{item.StationCode},任务号:{task.TaskNum}");
                                continue;
                            }
                            _taskService.UpdateTask(task, TaskStatusEnum.Line_Executing, nextAddress: router.NextPosi, targetAddress: router.NextPosi);
                            device.SetValue(W_ConveyorLineCPDB.StartPos, task.CurrentAddress, item.StationCode);
                            //string? locationCode = _taskService.RequestAssignLocation(task.TaskNum, "AGV_CP");
                            //if (string.IsNullOrEmpty(locationCode) && task.TaskType != TaskTypeEnum.EmptyProductBack.ObjToInt())
                            //{
                            //    WriteError(item.StationName, $"请求分配货位返回信息错误,设备编号:{item.StationCode},任务号:{task.TaskNum}");
                            //    continue;
                            //}
                            device.SetValue(W_ConveyorLineCPDB.StartPos, router.StartPosi, item.StationCode);
                            device.SetValue(W_ConveyorLineCPDB.EndPos, router.NextPosi, item.StationCode);
                            device.SetValue(W_ConveyorLineCPDB.Barcode, task.PalletCode, item.StationCode);
                            device.SetValue(W_ConveyorLineCPDB.TaskNum, task.TaskNum, item.StationCode);
@@ -105,6 +110,7 @@
                            device.SetValue(W_ConveyorLineCPDB.CheckPos, 1, item.StationCode);
                            //启动指令
                            device.SetValue(W_ConveyorLineCPDB.ConveyArrival, 1, item.StationCode);
                            _taskService.UpdateTask(task, TaskStatusEnum.Line_Executing, nextAddress: router.NextPosi, targetAddress: router.NextPosi);
                            if (task.TaskType==TaskTypeEnum.EmptyProductBack.ObjToInt())
                            {
                                _taskService.TaskCompleted(task.TaskNum);
@@ -114,15 +120,15 @@
                    else if (item.StationType == StationTypeEnum.StationType_InStartAndOutEnd.ObjToInt() && deviceProRead != null)
                    {
                        R_ConveyorLineCPInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_ConveyorLineCPInfo>(deviceProRead.DeviceProAddress);
                        if (conveyorLineInfoRead != null && conveyorLineInfoRead.EndPos.ToString()==item.StationCode)
                        if (conveyorLineInfoRead != null && conveyorLineInfoRead.EndPos.ToString() == item.StationCode)
                        {
                            short isCanTake = device.GetValue<GroundStationDBName, short>(GroundStationDBName.R_IsCanTake, item.StationCode);
                            if (conveyorLineInfoRead.ConveyArrivaled==1 && isCanTake==1)
                            if (conveyorLineInfoRead.ConveyArrivaled == 1 && isCanTake == 1)
                            {
                                //获取任务
                                Dt_Task task = _taskRepository.QueryFirst(x => x.NextAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && (x.TaskState == TaskStatusEnum.Line_Executing.ObjToInt()) && x.DeviceCode == device.DeviceCode && x.TaskNum == conveyorLineInfoRead.TaskNum.ObjToInt());
                                //获取站台
                                if (task!=null)
                                if (task != null)
                                {
                                    Dt_StationManger? stationManger = stationMangers.FirstOrDefault(x => x.StationCode == item.StationCode);
                                    if (stationManger == null)
@@ -143,55 +149,55 @@
                                        WriteError(item.StationName, $"请求分配货位返回信息错误,设备编号:{item.StationCode},任务号:{task.TaskNum}");
                                        continue;
                                    }
                                    _taskService.UpdateTask(task, TaskStatusEnum.AGV_Execute,deviceCode: router.ChildPosiDeviceCode, nextAddress: locationCode, targetAddress: locationCode, currentAddress: router.StartPosi);
                                    _taskService.UpdateTask(task, TaskStatusEnum.AGV_Execute, deviceCode: router.ChildPosiDeviceCode, currentAddress: router.StartPosi, nextAddress: locationCode, targetAddress: locationCode);
                                }
                            }
                        }
                    }
                }
                Dt_StationManger? dt_StationManger = stationMangers.FirstOrDefault(x => x.StationType == StationTypeEnum.StationType_ProductBackTake.ObjToInt());
                if (dt_StationManger != null)
                {
                    DeviceProDTO? deviceProWrite = device.DeviceProDTOs.Where(x => x.DeviceChildCode == dt_StationManger.StationCode && x.DeviceProParamType == nameof(W_ConveyorLineCPDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                    List<Dt_StationManger> ProductBackStations = stationMangers.Where(x => x.StationType == StationTypeEnum.StationType_ProductBack.ObjToInt()).ToList();
                    for (int i = 0; i < ProductBackStations.Count(); i++)
                    {
                        short isCanTake = device.GetValue<GroundStationDBName, short>(GroundStationDBName.R_IsCanTake, dt_StationManger.StationCode);
                        Dt_StationManger stationManger = ProductBackStations[i];
                        string startDb = "DB29.";
                        short stationCurrentStatus = device.Communicator.Read<short>(startDb + stationManger.Remark.ToString());
                        short stationEndStatus = device.Communicator.Read<short>(startDb + (stationManger.Remark.ObjToInt() + 2).ToString());
                        bool endStatus = true;
                        if ((i != 2 && i != 5 && i != 8))
                        {
                            endStatus = (stationEndStatus == 1);
                        }
                        //读取线体段状态
                        if (isCanTake == 1 && stationCurrentStatus == 1 && stationManger.IsOccupied==0 && endStatus)
                        {
                            device.SetValue(W_ConveyorLineCPDB.StartPos, dt_StationManger.StationCode, dt_StationManger.StationCode);
                            device.SetValue(W_ConveyorLineCPDB.EndPos, stationManger.AGVStationCode, dt_StationManger.StationCode);
                            device.SetValue(W_ConveyorLineCPDB.Barcode, "C00001", dt_StationManger.StationCode);
                            device.SetValue(W_ConveyorLineCPDB.TaskNum, DateTime.Now.ToString("yyMMddHHmmss"), dt_StationManger.StationCode);
                            device.SetValue(W_ConveyorLineCPDB.WorkType, 1, dt_StationManger.StationCode);
                            device.SetValue(W_ConveyorLineCPDB.WorkMode, 1, dt_StationManger.StationCode);
                            device.SetValue(W_ConveyorLineCPDB.CheckPos, 1, dt_StationManger.StationCode);
                            //启动指令
                            device.SetValue(W_ConveyorLineCPDB.ConveyArrival, 1, dt_StationManger.StationCode);
                            stationManger.IsOccupied = 1;
                            _stationMangerRepository.UpdateData(stationManger);
                            Thread.Sleep(2000);
                            return Task.CompletedTask;
                        }
                        else if(stationManger.IsOccupied == 1 && (stationCurrentStatus == 3))
                        {
                            stationManger.IsOccupied = 0;
                            _stationMangerRepository.UpdateData(stationManger);
                        }
                    }
                }
                //Dt_StationManger? dt_StationManger = stationMangers.FirstOrDefault(x => x.StationType == StationTypeEnum.StationType_ProductBackTake.ObjToInt());
                //if (dt_StationManger != null)
                //{
                //    DeviceProDTO? deviceProWrite = device.DeviceProDTOs.Where(x => x.DeviceChildCode == dt_StationManger.StationCode && x.DeviceProParamType == nameof(W_ConveyorLineCPDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                //    List<Dt_StationManger> ProductBackStations = stationMangers.Where(x => x.StationType == StationTypeEnum.StationType_ProductBack.ObjToInt()).ToList();
                //    for (int i = 0; i < ProductBackStations.Count(); i++)
                //    {
                //        short isCanTake = device.GetValue<GroundStationDBName, short>(GroundStationDBName.R_IsCanTake, dt_StationManger.StationCode);
                //        Dt_StationManger stationManger = ProductBackStations[i];
                //        string startDb = "DB29.";
                //        short stationCurrentStatus = device.Communicator.Read<short>(startDb + stationManger.Remark.ToString());
                //        short stationEndStatus = device.Communicator.Read<short>(startDb + (stationManger.Remark.ObjToInt() + 2).ToString());
                //        bool endStatus = true;
                //        if ((i != 2 && i != 5 && i != 8))
                //        {
                //            endStatus = (stationEndStatus == 1);
                //        }
                //        //读取线体段状态
                //        if (isCanTake == 1 && stationCurrentStatus == 1 && stationManger.IsOccupied==0 && endStatus)
                //        {
                //            device.SetValue(W_ConveyorLineCPDB.StartPos, dt_StationManger.StationCode, dt_StationManger.StationCode);
                //            device.SetValue(W_ConveyorLineCPDB.EndPos, stationManger.AGVStationCode, dt_StationManger.StationCode);
                //            device.SetValue(W_ConveyorLineCPDB.Barcode, "C00001", dt_StationManger.StationCode);
                //            device.SetValue(W_ConveyorLineCPDB.TaskNum, DateTime.Now.ToString("yyMMddHHmmss"), dt_StationManger.StationCode);
                //            device.SetValue(W_ConveyorLineCPDB.WorkType, 1, dt_StationManger.StationCode);
                //            device.SetValue(W_ConveyorLineCPDB.WorkMode, 1, dt_StationManger.StationCode);
                //            device.SetValue(W_ConveyorLineCPDB.CheckPos, 1, dt_StationManger.StationCode);
                //            //启动指令
                //            device.SetValue(W_ConveyorLineCPDB.ConveyArrival, 1, dt_StationManger.StationCode);
                //            stationManger.IsOccupied = 1;
                //            _stationMangerRepository.UpdateData(stationManger);
                //            Thread.Sleep(2000);
                //            return Task.CompletedTask;
                //        }
                //        else if(stationManger.IsOccupied == 1 && (stationCurrentStatus == 3))
                //        {
                //            stationManger.IsOccupied = 0;
                //            _stationMangerRepository.UpdateData(stationManger);
                //        }
                //    }
                //}
                
            }
            return Task.CompletedTask;