wangxinhui
2025-09-06 2b25f973bb6d72ce6971d6f9c3cdccf51b7962ab
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/³ÉÆ·²Ö/RGVJob_CP.cs
@@ -71,73 +71,98 @@
                DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == device.DeviceCode && x.DeviceProParamType == nameof(R_RgvCPDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                DeviceProDTO? deviceProWrite = device.DeviceProDTOs.Where(x => x.DeviceChildCode == device.DeviceCode && x.DeviceProParamType == nameof(W_RgvCPDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                Console.WriteLine(DateTime.Now.ToString("yyyy-mm-ddd HH:mm:ss"));
                if (deviceProRead != null && deviceProWrite != null)
                {
                    R_RGVCPInfo rgvInfoRead = device.Communicator.ReadCustomer<R_RGVCPInfo>(deviceProRead.DeviceProAddress);
                    W_RGVCPInfo rgvInfoWrite = device.Communicator.ReadCustomer<W_RGVCPInfo>(deviceProWrite.DeviceProAddress);
                    if (rgvInfoRead==null || rgvInfoWrite==null)
                    {
                        return Task.CompletedTask;
                    }
                    if ((rgvInfoRead.Mode == 5 || rgvInfoRead.Mode == 4) && rgvInfoRead.State == 0 && rgvInfoRead.TaskDone==1)
                    {
                        //获取任务 æ˜¯å¦æœ‰RGV执行的任务
                        List<Dt_Task> tasks = _taskRepository.QueryData(x => _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState != TaskStatusEnum.RGV_Execute.ObjToInt() && x.DeviceCode == device.DeviceCode);
                        //获取任务
                        Dt_Task? task1 = tasks.FirstOrDefault(x => x.HeightType == 1);
                        Dt_Task? task2 = tasks.FirstOrDefault(x => x.HeightType == 2);
                        Dt_Task? task3 = tasks.FirstOrDefault(x => x.HeightType == 3);
                        List<Dt_Task> tasksDown = _taskRepository.QueryData(x => _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.RGV_Execute.ObjToInt() && x.DeviceCode == device.DeviceCode).OrderBy(x=>x.CreateDate).Take(3).ToList();
                        //分配RGV工位任务
                        if (tasksDown.Count>=2)
                        if (tasksDown.Count>0)
                        {
                            device.SetValue(W_RgvCPDB.TaskType, 4);
                            //占用两个工位
                            if (tasksDown.Count==2)
                            bool ReceivedDone = false;
                            //分配RGV工位任务占用一个工位
                            if (tasksDown.Count == 1)
                            {
                                device.SetValue(W_RgvCPDB.WorkStation, 4);
                                if (task1 == null)
                                {
                                    //下发执行工位
                                    device.SetValue(W_RgvCPDB.WorkStation, 1);
                                    device.SetValue(W_RgvCPDB.WcsTask1, tasksDown[0].TaskNum);
                                    device.SetValue(W_RgvCPDB.Qu1, tasksDown[0].CurrentAddress);
                                    device.SetValue(W_RgvCPDB.Fang1, tasksDown[0].NextAddress);
                                    tasksDown[0].HeightType = 1;
                                    _taskService.UpdateTask(tasksDown[0], TaskStatusEnum.RGV_Executing);
                                    Thread.Sleep(100);
                                    ReceivedDone=true;
                                }
                                if (task2 == null)
                            }
                            else if (tasksDown.Count == 2)//占用两个工位
                            {
                                if (task1 == null && task2 == null)
                                {
                                    //下发执行工位
                                    device.SetValue(W_RgvCPDB.WorkStation, 4);
                                    device.SetValue(W_RgvCPDB.WcsTask1, tasksDown[0].TaskNum);
                                    device.SetValue(W_RgvCPDB.Qu1, tasksDown[0].CurrentAddress);
                                    device.SetValue(W_RgvCPDB.Fang1, tasksDown[0].NextAddress);
                                    tasksDown[0].HeightType = 1;
                                    _taskService.UpdateTask(tasksDown[0], TaskStatusEnum.RGV_Executing);
                                    Thread.Sleep(100);
                                    device.SetValue(W_RgvCPDB.WcsTask2, tasksDown[1].TaskNum);
                                    device.SetValue(W_RgvCPDB.Qu2, tasksDown[1].CurrentAddress);
                                    device.SetValue(W_RgvCPDB.Fang2, tasksDown[1].NextAddress);
                                    tasksDown[1].HeightType = 2;
                                    _taskService.UpdateTask(tasksDown[1], TaskStatusEnum.RGV_Executing);
                                    Thread.Sleep(100);
                                    ReceivedDone = true;
                                }
                            }
                            else //占用三个工位
                            {
                                device.SetValue(W_RgvCPDB.WorkStation, 7);
                                if ( task1 == null)
                                if (task1 == null && task2 == null && task3 == null)
                                {
                                    //下发执行工位
                                    device.SetValue(W_RgvCPDB.WorkStation, 7);
                                    device.SetValue(W_RgvCPDB.WcsTask1, tasksDown[0].TaskNum);
                                    device.SetValue(W_RgvCPDB.Qu1, tasksDown[0].CurrentAddress);
                                    device.SetValue(W_RgvCPDB.Fang1, tasksDown[0].NextAddress);
                                    tasksDown[0].HeightType = 1;
                                    _taskService.UpdateTask(tasksDown[0], TaskStatusEnum.RGV_Executing);
                                }
                                if (task2 == null)
                                {
                                    Thread.Sleep(100);
                                    device.SetValue(W_RgvCPDB.WcsTask2, tasksDown[1].TaskNum);
                                    device.SetValue(W_RgvCPDB.Qu2, tasksDown[1].CurrentAddress);
                                    device.SetValue(W_RgvCPDB.Fang2, tasksDown[1].NextAddress);
                                    tasksDown[1].HeightType = 2;
                                    _taskService.UpdateTask(tasksDown[1], TaskStatusEnum.RGV_Executing);
                                }
                                if (task3 == null)
                                {
                                    Thread.Sleep(100);
                                    device.SetValue(W_RgvCPDB.WcsTask3, tasksDown[2].TaskNum);
                                    device.SetValue(W_RgvCPDB.Qu3, tasksDown[2].CurrentAddress);
                                    device.SetValue(W_RgvCPDB.Fang3, tasksDown[2].NextAddress);
                                    tasksDown[2].HeightType = 3;
                                    _taskService.UpdateTask(tasksDown[2], TaskStatusEnum.RGV_Executing);
                                    Thread.Sleep(100);
                                    ReceivedDone = true;
                                }
                            }
                            device.SetValue(W_RgvCPDB.TaskReceivedDone, 1);
                            if (ReceivedDone)
                            {
                                device.SetValue(W_RgvCPDB.TaskType, 4);
                                device.SetValue(W_RgvCPDB.TaskReceivedDone, 1);
                            }
                        }
                    }
                    else if((rgvInfoRead.Mode == 5 || rgvInfoRead.Mode == 4) && rgvInfoRead.TaskDone == 3)
@@ -153,11 +178,11 @@
                            task.DeviceCode = stationManger.StationDeviceCode;
                            device.SetValue(W_RgvCPDB.TaskReceivedDone, 2);
                            _taskService.UpdateTask(task, TaskStatusEnum.Line_Execute);
                            WriteError(device.DeviceName, $"RGV任务完成,任务号{rgvInfoRead.RgvEndTask}");
                            WriteInfo(device.DeviceName, $"RGV任务完成,任务号{rgvInfoRead.RgvEndTask}");
                        }
                        else
                        {
                            WriteError(device.DeviceName, $"未找到RGV对应的结束任务{rgvInfoRead.RgvEndTask}");
                            WriteInfo(device.DeviceName, $"未找到RGV对应的结束任务{rgvInfoRead.RgvEndTask}");
                        }
                    }
                    else if (rgvInfoRead.TaskDone == 2 && rgvInfoWrite.TaskReceivedDone == 1)