1
huanghongfeng
2025-06-06 f5b8c1ae89286dada20ea433ffac84f4c9e72a29
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -53,14 +53,32 @@
                {
                    Signalinteraction(commonStackerCrane);  //出库信号交互
                    Siganlinteraction2(commonStackerCrane); //入库信号交互
                    if (!commonStackerCrane.IsEventSubscribed)
                    /*if (!commonStackerCrane.IsEventSubscribed)
                    {
                        commonStackerCrane.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//订阅任务完成事件
                    }*/
                    if (commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.WorkCompleted)
                    {
                        wcs_PLCto07("任务完成", $"任务号:{commonStackerCrane.CurrentTaskNum}", $"读取到堆垛机完成信号,任务完成,完成时间:{DateTime.Now}");
                        //Console.Out.WriteLine("TaskCompleted" + e.TaskNum);
                        WebResponseContent webResponse=_taskService.StackCraneTaskCompleted(commonStackerCrane.CurrentTaskNum);
                        if (webResponse.Status)
                        {
                            bool ddjfk= commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
                            wcs_PLCto07("任务完成", $"任务号:{commonStackerCrane.CurrentTaskNum},修改任务成功", $"修改任务完成,并反馈堆垛完成信号是否成功:{ddjfk}");
                        }
                        else
                        {
                            wcs_PLCto07("任务完成故障", $"任务号:{commonStackerCrane.CurrentTaskNum},修改任务失败", $"失败原因:{webResponse.Message}");
                        }
                    }
                    if (commonStackerCrane.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneStatusValue == StackerCraneStatus.Normal)
                    {
                        commonStackerCrane.CheckStackerCraneTaskCompleted();//防止任务完成事件监测超时,再手动触发一次
                        //commonStackerCrane.CheckStackerCraneTaskCompleted();//防止任务完成事件监测超时,再手动触发一次
                        if (commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
                        {
@@ -99,10 +117,10 @@
            CommonStackerCrane? commonStackerCrane = sender as CommonStackerCrane;
            if (commonStackerCrane != null)
            {
                if (commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5)
                if (commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5 && e.TaskNum !=0)
                {
                    wcs_PLCto07("任务完成", $"任务号:{e.TaskNum}", $"读取到堆垛机完成信号,任务完成,完成时间:{DateTime.Now}");
                    Console.Out.WriteLine("TaskCompleted" + e.TaskNum);
                    //Console.Out.WriteLine("TaskCompleted" + e.TaskNum);
                    _taskService.StackCraneTaskCompleted(e.TaskNum);
                    commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
                }
@@ -116,62 +134,89 @@
        /// <returns></returns>
        private Dt_Task? GetTask(CommonStackerCrane commonStackerCrane)
        {
            Dt_Task task;
            task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode);
            if (task != null && task.TaskType== (int)TaskOutboundTypeEnum.Outbound)
            try
            {
                string[] targetCodes = task.SourceAddress.Split("-");
                if (targetCodes[4] == "02")
                //
                if (_taskService.CutStackerCraneTask(commonStackerCrane.DeviceCode) != null) return null;
                //查询全部任务,按时间排序进行查询
                List<Dt_Task> TasksList = _taskService.CraneTaskList(commonStackerCrane.DeviceCode);
                if (TasksList.Count == 0) return null;
                foreach (var item in TasksList)
                {
                    Dt_Task taskst = OutTaskMovelibrary(task);
                    if (taskst != null)
                    if (item.TaskType == (int)TaskInboundTypeEnum.Inbound)
                    {
                        if(taskst.TaskType == (int)TaskRelocationTypeEnum.Relocation)
                        string[] targetCodes = item.TargetAddress.Split("-");
                        if (targetCodes[4] == "01") return item;        //如果是浅库位,则直接返回该任务
                        //如果为深库位,则查看是否有需要执行的任务
                        if (targetCodes[4] == "02")
                        {
                            return taskst;
                        }
                        else
                        {
                            if(taskst.TargetAddress== "R02-001-021-001-02" || taskst.TargetAddress == "R02-001-022-001-02")
                            Dt_Task taskst = InTaskMove(item);
                            if (taskst != null)
                            {
                                return taskst;
                            }
                            else
                        }
                    }
                    else if (item.TaskType == (int)TaskOutboundTypeEnum.Outbound)
                    {
                        string[] targetCodes = item.SourceAddress.Split("-");//进行解析货位
                        if (targetCodes[4] == "02")
                        {
                            //为深库位
                            Dt_Task taskst = OutTaskMovelibrary(item);  //判断是否需要进行移库
                            if (taskst != null)
                            {
                                if (OutTaskStationIsOccupied(taskst) != null)
                                if (taskst.TaskType == (int)TaskRelocationTypeEnum.Relocation)
                                {
                                    return taskst;
                                }
                                else
                                {
                                    if (taskst.TargetAddress == "R02-001-021-001-02" || taskst.TargetAddress == "R02-001-022-001-02")
                                    {
                                        return taskst;
                                    }
                                    else
                                    {
                                        if (OutTaskStationIsOccupied(taskst) != null)       //判断出库站台是否可下发
                                        {
                                            return taskst;
                                        }
                                    }
                                }
                            }
                        }
                    }
                    task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
                }
                else
                {
                    if (task.TargetAddress == "R02-001-021-001-02" || task.TargetAddress == "R02-001-022-001-02")
                    {
                        return task;
                    }
                    else
                    {
                        if (OutTaskStationIsOccupied(task) != null)
                        else
                        {
                            return task;
                            if (item.TargetAddress == "R02-001-021-001-02" || item.TargetAddress == "R02-001-022-001-02")
                            {
                                return item;
                            }
                            else
                            {
                                if (OutTaskStationIsOccupied(item) != null)       //判断出库站台是否可下发
                                {
                                    return item;
                                }
                            }
                        }
                    }
                    task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
                }
                return null;
            }
            return task;
            catch (Exception ex)
            {
                WriteLog.Write_Log("堆垛机任务下发故障", "故障", "故障", new { ä¿¡æ¯ = ex.Message });
                return null;
            }
        }
        /// <summary>
        /// å‡ºåº“任务判断出库站台是否被占用
@@ -205,6 +250,7 @@
            return null;
        }
        /// <summary>
        /// å‡ºåº“任务判断是否需要进行移库Move the library
        /// </summary>
@@ -212,42 +258,62 @@
        /// <returns>如果未被占用,返回传入的任务信息,否则,返回null</returns>
        private Dt_Task? OutTaskMovelibrary([NotNull] Dt_Task task)
        {
            try
            string[] targetCodes = task.SourceAddress.Split("-");
            if (targetCodes[1] == "001")
            {
                string[] targetCodes = task.SourceAddress.Split("-");
                if (targetCodes[1] == "001")
                {
                    targetCodes[1] = "002";
                targetCodes[1] = "002";
                }
                else if (targetCodes[1] == "004")
                {
                    targetCodes[1] = "003";
                }
                targetCodes[4] = "01";
                string SourceAddress = string.Join("-", targetCodes); //组装浅库位地址
                Dt_Task? tasks = _taskService.QueryStationIsOccupiedOutTasks(task.Roadway, SourceAddress).FirstOrDefault(); //找浅库位是否有任务
                if (tasks != null)
                {
                    return tasks;
                }
                else
                {
                    //向wms申请判断浅库位是否有货,是否需要进行移库
                    Dt_Task? taskst = _taskService.RequestWMSTaskMovelibrary(task);
                    if (taskst != null)
                    {
                        return taskst;
                    }
                }
            }
            catch (Exception ex)
            else if (targetCodes[1] == "004")
            {
                throw;
                targetCodes[1] = "003";
            }
            targetCodes[4] = "01";
            string SourceAddress = string.Join("-", targetCodes); //组装浅库位地址
            Dt_Task? tasks = _taskService.QueryStationIsOccupiedOutTasks(task.Roadway, SourceAddress).FirstOrDefault(); //找浅库位是否有任务
            if (tasks != null)
            {
                return tasks;
            }
            else
            {
                //向wms申请判断浅库位是否有货,是否需要进行移库
                Dt_Task? taskst = _taskService.RequestWMSTaskMovelibrary(task);
                if (taskst != null)
                {
                    return taskst;
                }
            }
            return null;
        }
        private Dt_Task? InTaskMove([NotNull] Dt_Task task)
        {
            string[] targetCodes = task.TargetAddress.Split("-");
            if (targetCodes[1] == "001")
            {
                targetCodes[1] = "002";
            }
            else if (targetCodes[1] == "004")
            {
                targetCodes[1] = "003";
            }
            targetCodes[4] = "01";
            string TargetAddress = string.Join("-", targetCodes);  //用深库位组装浅库位编号
            Dt_Task? tasks = _taskService.QueryStationIsOccupiedOutTasks2(task.Roadway, TargetAddress).FirstOrDefault(); //找浅库位是否有出库任务或移库任务
            if(tasks != null) { return tasks; }     //如果有,则先下发至堆垛机
            //向wms申请判断浅库位是否有货,是否需要进行移库
            Dt_Task? taskst = _taskService.RequestWMSTaskMovelibrary2(task);
            if (taskst != null)
            {
                return taskst;
            }
            return null;
        }
        public void Signalinteraction(CommonStackerCrane commonStackerCrane)
        {
@@ -1218,6 +1284,10 @@
        {
            WriteLog.Write_Log("任务信息完成记录", SCLLinStack, Logtype, new { ä¿¡æ¯ = Magessadd });
        }
        public void wcs_PLCto07_1(string SCLLinStack, string Logtype, string Magessadd)
        {
            WriteLog.Write_Log("任务信息完成修改记录", SCLLinStack, Logtype, new { ä¿¡æ¯ = Magessadd });
        }
        public void wcs_PLCto08(string SCLLinStack, string Logtype, string Magessadd)
        {