huanghongfeng
2025-06-23 b7f53ba61fbc1844d7b92ff852762b140d46ab54
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -53,14 +53,42 @@
                {
                    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
                        {
                            WebResponseContent webRespon = _taskService.StackCraneTashty(commonStackerCrane.CurrentTaskNum);
                            if (webRespon.Status)
                            {
                                bool fk = commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
                                wcs_PLCto07("任务完成", $"任务号:{commonStackerCrane.CurrentTaskNum},历史查询信息", $"任务查找任务重,并进行反馈:{fk}");
                            }
                            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,9 +127,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)
                {
                    Console.Out.WriteLine("TaskCompleted" + e.TaskNum);
                    wcs_PLCto07("任务完成", $"任务号:{e.TaskNum}", $"读取到堆垛机完成信号,任务完成,完成时间:{DateTime.Now}");
                    //Console.Out.WriteLine("TaskCompleted" + e.TaskNum);
                    _taskService.StackCraneTaskCompleted(e.TaskNum);
                    commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
                }
@@ -115,99 +144,113 @@
        /// <returns></returns>
        private Dt_Task? GetTask(CommonStackerCrane commonStackerCrane)
        {
            Dt_Task task;
            /*if (commonStackerCrane.LastTaskType == null)
            try
            {
                task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode);
            }
            else
            {
                if (commonStackerCrane.LastTaskType.GetValueOrDefault().GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                {
                    task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
                    if (task == null)
                    {
                        task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
                    }
                }
                else
                {
                    task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
                }
            }*/
            task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode);
                //
                if (_taskService.CutStackerCraneTask(commonStackerCrane.DeviceCode) != null) return null;
                //查询全部任务,按时间排序进行查询
                List<Dt_Task> TasksList = _taskService.CraneTaskList(commonStackerCrane.DeviceCode);
                if (TasksList.Count == 0) return null;
            if (task != null && task.TaskType== (int)TaskOutboundTypeEnum.Outbound)
            {
                string[] targetCodes = task.SourceAddress.Split("-");
                if (targetCodes[4] == "02")
                Dt_Task RELNew= TasksList.Where(x=>x.TaskType== (int)TaskRelocationTypeEnum.Relocation && x.TaskState == (int)TaskOutStatusEnum.ResRestNet).OrderBy(x => x.CreateDate).FirstOrDefault();
                if( RELNew != null )
                {
                    Dt_Task taskst = OutTaskMovelibrary(task);
                    if (taskst != null)
                    string[] targetCodes = RELNew.TargetAddress.Split("-");
                    //如果为深库位,则查看是否有需要执行的任务
                    if (targetCodes[4] == "02")
                    {
                        if(taskst.TaskType == (int)TaskRelocationTypeEnum.Relocation)
                        Dt_Task taskstrot = InTaskMove(RELNew);
                        if (taskstrot != null)
                        {
                            return taskst;
                            return taskstrot;
                        }
                        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)
                        {
                            return task;
                        }
                            return RELNew;
                    }
                    task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
                }
                /*if (OutTaskStationIsOccupied(task) != null)
                foreach (var item in TasksList)
                {
                    return task;
                }
                else
                {
                    List<string> otherOutStaionCodes = _routerService.QueryNextRoutes(commonStackerCrane.DeviceCode, task.NextAddress).Select(x => x.ChildPosi).ToList();
                    List<Dt_Task> tasks = _taskService.QueryStackerCraneOutTasks(commonStackerCrane.DeviceCode);
                    foreach (var item in tasks)
                    if (item.TaskType == (int)TaskInboundTypeEnum.Inbound)
                    {
                        if (OutTaskStationIsOccupied(task) != null)
                        string[] targetCodes = item.TargetAddress.Split("-");
                        if (targetCodes[4] == "01") return item;        //如果是浅库位,则直接返回该任务
                        //如果为深库位,则查看是否有需要执行的任务
                        if (targetCodes[4] == "02")
                        {
                            return task;
                            Dt_Task taskst = InTaskMove(item);
                            if (taskst != null)
                            {
                                return taskst;
                            }
                        }
                    }
                    //task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
                }*/
                    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 (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;
                                        }
                                    }
                                }
                            }
                        }
                        else
                        {
                            if (item.TargetAddress == "R02-001-021-001-02" || item.TargetAddress == "R02-001-022-001-02")
                            {
                                return item;
                            }
                            else
                            {
                                if (OutTaskStationIsOccupied(item) != null)       //判断出库站台是否可下发
                                {
                                    return item;
                                }
                            }
                        }
                    }
                }
                return null;
            }
            return task;
            catch (Exception ex)
            {
                WriteLog.Write_Log("堆垛机任务下发故障", "故障", "故障", new { ä¿¡æ¯ = ex.Message });
                return null;
            }
        }
        /// <summary>
        /// å‡ºåº“任务判断出库站台是否被占用
@@ -228,6 +271,10 @@
                    {
                        return task;
                    }
                    else
                    {
                        wcs_PLCto08("出库任务", $"任务号:{task.TaskNum},进行出库", $"读取到输送线不可放货信号,不可进行任务下发");
                    }
                }
            }
            else
@@ -237,6 +284,7 @@
            return null;
        }
        /// <summary>
        /// å‡ºåº“任务判断是否需要进行移库Move the library
        /// </summary>
@@ -244,42 +292,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)
        {
@@ -301,22 +369,24 @@
                                if (Releasespermitted(commonStackerCrane, task.TargetAddress,true))  //写入堆垛机允许放货信
                                {
                                    WriteLog.GetLog("堆垛机信号").Write($"站台编号:{task.TargetAddress},任务号:{task.TaskNum},信息:写入堆垛机允许放货信号成功:true", $"(放货)写入{task.TargetAddress}");
                                    wcs_PLCto06(task.TargetAddress + "成功信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", "写入堆垛机允许放货信号成功:true");
                                }
                                else
                                {
                                    WriteLog.GetLog("堆垛机信号").Write($"站台编号:{task.TargetAddress},任务号:{task.TaskNum},信息:写入堆垛机允许放货信号失败", $"(放货)写入{task.TargetAddress}");
                                    wcs_PLCto06(task.TargetAddress + "错误信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", "写入堆垛机允许放货信号失败");
                                }
                            }
                            else
                            {
                                if (Releasespermitted(commonStackerCrane, task.TargetAddress,false))  //写入堆垛机不允许放货信
                                {
                                    WriteLog.GetLog("堆垛机信号").Write($"站台编号:{task.TargetAddress},任务号:{task.TaskNum},信息:写入堆垛机不允许放货信号成功:false", $"(放货)写入{task.TargetAddress}");
                                    wcs_PLCto06(task.TargetAddress + "成功信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", "写入堆垛机不允许放货信号成功:false");
                                }
                                else
                                {
                                    WriteLog.GetLog("堆垛机信号").Write($"站台编号:{task.TargetAddress},任务号:{task.TaskNum},信息:写入堆垛机不允许放货信号失败", $"(放货)写入{task.TargetAddress}");
                                    wcs_PLCto06(task.TargetAddress + "错误信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", "写入堆垛机不允许放货信号失败");
                                }
                            }
                        }
@@ -339,11 +409,12 @@
                                byte PLCtost = (byte)task.PLCTo;
                                if (PLCSignal2(conveyorLine, task.TargetAddress, "W_Destination", PLCtost))
                                {
                                    WriteLog.GetLog("输送线").Write($"站台编号:{task.TargetAddress},任务号:{task.TaskNum},信息:写入去向成功,去向为:{PLCtost}", $"出料口去向");
                                    wcs_PLCto06(task.TargetAddress + "成功信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"写入去向成功,去向为:{PLCtost}");
                                }
                                else
                                {
                                    WriteLog.GetLog("输送线").Write($"站台编号:{task.TargetAddress},任务号:{task.TaskNum},信息:写入去向失败,去向为:{PLCtost}", $"出料口去向");
                                    wcs_PLCto06(task.TargetAddress + "错误信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"写入去向失败,去向为:{PLCtost}");
                                }
                            }
@@ -369,36 +440,35 @@
                                                    byte PLCtost2 = 0;
                                                    if (PLCSignal2(conveyorLine, task.TargetAddress, "W_Destination", PLCtost2))
                                                    {
                                                        WriteLog.GetLog("输送线").Write($"站台编号:{task.TargetAddress},任务号:{task.TaskNum},信息:清除去向成功", $"出料口去向");
                                                        wcs_PLCto06(task.TargetAddress + "成功信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"清除去向成功");
                                                    }
                                                    else
                                                    {
                                                        WriteLog.GetLog("输送线").Write($"站台编号:{task.TargetAddress},任务号:{task.TaskNum},信息:清除去向失败", $"出料口去向");
                                                        wcs_PLCto06(task.TargetAddress + "错误信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"清除去向失败");
                                                    }
                                                    // æ¸…除输送线
                                                    if (PLCSignal(conveyorLine, task.TargetAddress, (byte)0))
                                                    {
                                                        WriteLog.GetLog("输送线").Write($"站台编号:{task.TargetAddress},任务号:{task.TaskNum},信息:写入输送线清除-堆垛机放下信号成功", $"出料口去向");
                                                        wcs_PLCto06(task.TargetAddress + "成功信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"写入输送线清除-堆垛机放下信号成功");
                                                    }
                                                    else
                                                    {
                                                        WriteLog.GetLog("输送线").Write($"站台编号:{task.TargetAddress},任务号:{task.TaskNum},信息:写入输送线清除-堆垛机放下信号失败", $"出料口去向");
                                                        wcs_PLCto06(task.TargetAddress + "错误信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"写入输送线清除-堆垛机放下信号失败");
                                                    }
                                                    //堆垛机写完成
                                                    if (Releasespermitted4(commonStackerCrane, task.TargetAddress, true))
                                                    {
                                                        WriteLog.GetLog("堆垛机信号").Write($"站台编号:{task.TargetAddress},任务号:{task.TaskNum},信息:写入堆垛机放下信号成功:true", $"出料口去向");
                                                        wcs_PLCto06(task.TargetAddress + "成功信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"写入堆垛机放下信号成功:true");
                                                    }
                                                    else
                                                    {
                                                        WriteLog.GetLog("堆垛机信号").Write($"站台编号:{task.TargetAddress},任务号:{task.TaskNum},信息:写入堆垛机放下信号失败:true", $"出料口去向");
                                                        wcs_PLCto06(task.TargetAddress + "错误信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"写入堆垛机放下信号失败:true");
                                                    }
                                                }
                                                else
                                                {
                                                    WriteLog.GetLog("输送线").Write($"站台编号:{task.TargetAddress},任务号:{task.TaskNum},信息:去向比对不一致,输送线去向为:{PLCwcstost},wcs写入去向为:{task.PLCTo}", $"出料口去向");
                                                    wcs_PLCto06(task.TargetAddress + "错误信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"去向比对不一致,输送线去向为:{PLCwcstost},wcs写入去向为:{task.PLCTo}");
                                                }
                                            }
                                        }
@@ -408,21 +478,23 @@
                                            // æ¸…除输送线
                                            if (PLCSignal(conveyorLine, task.TargetAddress, 0))
                                            {
                                                WriteLog.GetLog("输送线").Write($"站台编号:{task.TargetAddress},任务号:{task.TaskNum},信息:写入输送线清除-堆垛机放下信号成功", $"(放货)读取{task.TargetAddress}");
                                                wcs_PLCto06(task.TargetAddress + "成功信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"写入输送线清除-堆垛机放下信号成功");
                                            }
                                            else
                                            {
                                                WriteLog.GetLog("输送线").Write($"站台编号:{task.TargetAddress},任务号:{task.TaskNum},信息:写入输送线清除-堆垛机放下信号失败", $"(放货)读取{task.TargetAddress}");
                                                wcs_PLCto06(task.TargetAddress + "错误信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"写入输送线清除-堆垛机放下信号失败");
                                            }
                                            //堆垛机写完成
                                            if (Releasespermitted4(commonStackerCrane, task.TargetAddress, true))
                                            {
                                                WriteLog.GetLog("堆垛机信号").Write($"站台编号:{task.TargetAddress},任务号:{task.TaskNum},信息:写入堆垛机放下信号成功:true", $"(放货)写入{task.TargetAddress}");
                                                wcs_PLCto06(task.TargetAddress + "成功信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"写入堆垛机放下信号成功:true");
                                            }
                                            else
                                            {
                                                WriteLog.GetLog("堆垛机信号").Write($"站台编号:{task.TargetAddress},任务号:{task.TaskNum},信息:写入堆垛机放下信号失败:true", $"(放货)写入{task.TargetAddress}");
                                                wcs_PLCto06(task.TargetAddress + "错误信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"写入堆垛机放下信号失败:true");
                                            }
                                        }
@@ -433,24 +505,25 @@
                                        // æ¸…除输送线
                                        if (PLCSignal(conveyorLine, task.TargetAddress, 0))
                                        {
                                            WriteLog.GetLog("输送线").Write($"站台编号:{task.TargetAddress},任务号:{task.TaskNum},信息:未读取到输送线反馈堆垛机完成反馈信号,重置为0", $"(放货)读取{task.TargetAddress}");
                                            wcs_PLCto06(task.TargetAddress + "成功信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"未读取到输送线反馈堆垛机完成反馈信号,重置为0");
                                        }
                                        else
                                        {
                                            WriteLog.GetLog("输送线").Write($"站台编号:{task.TargetAddress},任务号:{task.TaskNum},信息:未读取到输送线反馈堆垛机完成反馈信号,重置为0", $"(放货)读取{task.TargetAddress}");
                                            wcs_PLCto06(task.TargetAddress + "错误信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"未读取到输送线反馈堆垛机完成反馈信号,重置为0失败");
                                        }
                                    }
                                }
                            }
                            else
                            {
                                WriteLog.GetLog("输送线").Write($"站台编号:{task.TargetAddress},任务号:{task.TaskNum},信息:写入输送线0-堆垛机放下信号失败", $"(放货)写入{task.TargetAddress}");
                                wcs_PLCto06(task.TargetAddress + "错误信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"写入输送线0-堆垛机放下信号失败");
                            }
                        }
                    }
                    else
                    {
                        WriteLog.GetLog("堆垛机信号").Write($"站台编号:{task.TargetAddress},任务号:{task.TaskNum},信息:未读取到堆垛机放货完成信号", $"(放货)写入{task.TargetAddress}");
                        wcs_PLCto06(task.TargetAddress + "错误信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"未读取到堆垛机放货完成信号");
                    }
                }
            }
@@ -473,22 +546,23 @@
                        {
                            if (Releasespermitted2(commonStackerCrane, task.SourceAddress,true))  //写入堆垛机允许取货信号
                            {
                                WriteLog.GetLog("堆垛机信号").Write($"站台编号:{task.SourceAddress},信息:写入堆垛机允许取货信号成功:true", $"(取货)写入{task.SourceAddress}");
                                wcs_PLCto05(task.SourceAddress+":成功信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"写入堆垛机允许取货信号成功:true");
                            }
                            else
                            {
                                WriteLog.GetLog("堆垛机信号").Write($"站台编号:{task.SourceAddress},信息:写入堆垛机允许取货信号失败", $"(取货)写入{task.SourceAddress}");
                                wcs_PLCto05(task.SourceAddress + ":错误信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"写入堆垛机允许取货信号成功:true");
                            }
                        }
                        else
                        {
                            if (Releasespermitted2(commonStackerCrane, task.SourceAddress,false))  //写入堆垛机允许取货信号
                            {
                                WriteLog.GetLog("堆垛机信号").Write($"站台编号:{task.SourceAddress},信息:未读取到输送线允许取货信号,写入堆垛机允许取货信号成功:false", $"(取货)写入{task.SourceAddress}");
                                wcs_PLCto05(task.SourceAddress + ":成功信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"未读取到输送线允许取货信号,写入堆垛机允许取货信号成功:false");
                            }
                            else
                            {
                                WriteLog.GetLog("堆垛机信号").Write($"站台编号:{task.SourceAddress},信息:未读取到输送线允许取货信号,写入堆垛机允许取货信号失败", $"(取货)写入{task.SourceAddress}");
                                wcs_PLCto05(task.SourceAddress + ":错误信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"未读取到输送线允许取货信号,写入堆垛机允许取货信号失败");
                            }
                           
                        }
@@ -498,6 +572,7 @@
                    {
                        if(PLCSignal2(conveyorLine, task.SourceAddress, "W_StackerCranePicked", 1))    //写入输送线取货完成信号
                        {
                            wcs_PLCto05(task.SourceAddress + ":成功信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"写入输送线取货完成信号,地址:{conveyorLine}");
                            DeviceProDTO? deviceProDTO2 = GetDeviceProDTO(conveyorLine, task.SourceAddress, "R_StackerCranePicked");    //输送线协议找读取信号
                            if (deviceProDTO != null)
                            {
@@ -507,31 +582,36 @@
                                    //写入给堆垛机,输送线的  å †åž›æœºå–èµ° ä¿¡å·
                                    if(Releasespermitted3(commonStackerCrane, task.SourceAddress,true))
                                    {
                                        WriteLog.GetLog("堆垛机信号").Write($"站台编号:{task.SourceAddress},信息:写入堆垛机取走信号成功:true", $"(取货)写入{task.SourceAddress}");
                                        wcs_PLCto05(task.SourceAddress + ":成功信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"写入堆垛机取走信号成功:true");
                                    }
                                    else
                                    {
                                        WriteLog.GetLog("堆垛机信号").Write($"站台编号:{task.SourceAddress},信息:写入堆垛机取走信号失败:true", $"(取货)写入{task.SourceAddress}");
                                        wcs_PLCto05(task.SourceAddress + ":错误信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"写入堆垛机取走信号失败:true");
                                    }
                                }
                                else
                                {
                                    if (Releasespermitted3(commonStackerCrane, task.SourceAddress,false))
                                    {
                                        WriteLog.GetLog("堆垛机信号").Write($"站台编号:{task.SourceAddress},信息:未读取输送线的堆垛机取走信号,写入堆垛机取走信号成功:false", $"(取货)写入{task.SourceAddress}");
                                        wcs_PLCto05(task.SourceAddress + ":成功信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"未读取输送线的堆垛机取走信号,写入堆垛机取走信号成功:false");
                                    }
                                    else
                                    {
                                        WriteLog.GetLog("堆垛机信号").Write($"站台编号:{task.SourceAddress},信息:未读取输送线的堆垛机取走信号,写入堆垛机取走信号失败:false", $"(取货)写入{task.SourceAddress}");
                                        wcs_PLCto05(task.SourceAddress + ":错误信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"未读取输送线的堆垛机取走信号,写入堆垛机取走信号失败:false");
                                    }
                                }
                            }
                        }
                        else
                        {
                            wcs_PLCto05(task.SourceAddress + ":成功信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"写入输送线取货完成信号失败,地址:{conveyorLine}");
                        }
                    }
                    else
                    {
                        if (PLCSignal2(conveyorLine, task.SourceAddress, "W_StackerCranePicked", 0))    //写入输送线清除信号
                        {
                            wcs_PLCto05(task.SourceAddress + ":成功信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"写入输送线清除信号成功,地址:{conveyorLine}");
                            DeviceProDTO? deviceProDTO2 = GetDeviceProDTO(conveyorLine, task.SourceAddress, "R_StackerCranePicked");    //输送线协议找读取信号
                            if (deviceProDTO != null)
                            {
@@ -541,25 +621,29 @@
                                    //写入给堆垛机,输送线的  å †åž›æœºå–èµ° ä¿¡å·
                                    if (Releasespermitted3(commonStackerCrane, task.SourceAddress, false))
                                    {
                                        WriteLog.GetLog("堆垛机信号").Write($"站台编号:{task.SourceAddress},信息:写入堆垛机取走信号成功:true", $"(取货)写入{task.SourceAddress}");
                                        wcs_PLCto05(task.SourceAddress + ":成功信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"写入堆垛机取走信号成功:true");
                                    }
                                    else
                                    {
                                        WriteLog.GetLog("堆垛机信号").Write($"站台编号:{task.SourceAddress},信息:写入堆垛机取走信号失败:true", $"(取货)写入{task.SourceAddress}");
                                        wcs_PLCto05(task.SourceAddress + ":错误信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"写入堆垛机取走信号失败:true");
                                    }
                                }
                                else
                                {
                                    if (Releasespermitted3(commonStackerCrane, task.SourceAddress, false))
                                    {
                                        WriteLog.GetLog("堆垛机信号").Write($"站台编号:{task.SourceAddress},信息:未读取输送线的堆垛机取走信号,写入堆垛机取走信号成功:false", $"(取货)写入{task.SourceAddress}");
                                        wcs_PLCto05(task.SourceAddress + ":成功信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"未读取输送线的堆垛机取走信号,写入堆垛机取走信号成功:false");
                                    }
                                    else
                                    {
                                        WriteLog.GetLog("堆垛机信号").Write($"站台编号:{task.SourceAddress},信息:未读取输送线的堆垛机取走信号,写入堆垛机取走信号失败:false", $"(取货)写入{task.SourceAddress}");
                                        wcs_PLCto05(task.SourceAddress + ":错误信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"未读取输送线的堆垛机取走信号,写入堆垛机取走信号失败:false");
                                    }
                                }
                            }
                        }
                        else
                        {
                            wcs_PLCto05(task.SourceAddress + ":错误信息", $"任务号:{task.TaskNum},托盘条码:{task.PalletCode}", $"写入输送线清除信号失败,地址:{conveyorLine}");
                        }
                    }
                }
@@ -1219,5 +1303,29 @@
            }
            return stackerCraneTaskCommand;
        }
        public void wcs_PLCto05(string SCLLinStack, string Logtype, string Magessadd)
        {
            WriteLog.Write_Log("入库交互信息", SCLLinStack, Logtype, new { ä¿¡æ¯ = Magessadd });
        }
        public void wcs_PLCto06(string SCLLinStack, string Logtype, string Magessadd)
        {
            WriteLog.Write_Log("出库交互信息", SCLLinStack, Logtype, new { ä¿¡æ¯ = Magessadd });
        }
        public void wcs_PLCto07(string SCLLinStack, string Logtype, string Magessadd)
        {
            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)
        {
            WriteLog.Write_Log("出库站台信息", SCLLinStack, Logtype, new { ä¿¡æ¯ = Magessadd });
        }
    }
}