duyongjia
2025-02-28 cb385f0b515c738b503c5c75c9d7efcec323716d
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/DoubleStackerCraneJob.cs
@@ -1,5 +1,6 @@
using HslCommunication;
using Microsoft.AspNetCore.Components.Routing;
using Newtonsoft.Json;
using Quartz;
using System;
using System.Collections.Generic;
@@ -49,30 +50,23 @@
            _locationInfoRepository = locationInfoRepository;
        }
        public Task Execute(IJobExecutionContext context)
        public  Task Execute(IJobExecutionContext context)
        {
            CommonStackerCrane? stackerCraneOne = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "SC02") as CommonStackerCrane;
            CommonStackerCrane? stackerCraneTwo = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "SC03") as CommonStackerCrane;
            try
            {
                CommonStackerCrane? stackerCraneOne = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "SC02") as CommonStackerCrane;
                CommonStackerCrane? stackerCraneTwo = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "SC03") as CommonStackerCrane;
                //Dt_DeviceInfo deviceSC02= _deviceInfoRepository.QueryFirst(x => x.DeviceCode == "SC02");
                //Dt_DeviceInfo deviceSC03 = _deviceInfoRepository.QueryFirst(x => x.DeviceCode == "SC03");
                //if(deviceSC02.DeviceStatus=="0")
                //{
                //    stackerCraneOne = null;
                //}
                //if(deviceSC03.DeviceStatus=="0")
                //{
                //    stackerCraneTwo = null;
                //}
                stackerCraneOne.CheckStackerCraneTaskCompleted();
                Dt_Task? task = GetTask();
                if (task != null)
                {
                    CommonStackerCrane? StackerCrane= GetStrackerCrane(task, stackerCraneOne, stackerCraneTwo);
                    if(StackerCrane != null)
                {
                    CommonStackerCrane? StackerCrane = GetStrackerCrane(task, stackerCraneOne, stackerCraneTwo);
                    if (StackerCrane != null)
                    {
                        WriteDebug(nameof(DoubleStackerCraneJob), $"小堆垛机任务号{task.TaskNum}--{StackerCrane.DeviceCode}");
                        StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task);
                        if (stackerCraneTaskCommand != null)
                        {
@@ -85,24 +79,71 @@
                            }
                            else
                            {
                                _taskService.UpdateTaskExceptionMessage(task.TaskNum, "堆垛机执行任务命令失败!");
                                WriteDebug(nameof(CommonStackerCraneJob), "堆垛机执行任务命令失败!");
                                _taskService.UpdateTaskExceptionMessage(task.TaskNum, "堆垛机发送任务命令失败!");
                                WriteDebug(nameof(DoubleStackerCraneJob), $"堆垛机发送任务命令失败!{task.TaskNum}");
                            }
                        }
                    }
                    else
                    {
                        WriteDebug(nameof(CommonStackerCraneJob), "未查询到当前可以执行上料任务的小堆垛机!");
                        WriteDebug(nameof(DoubleStackerCraneJob), "未查询到当前可以执行上料任务的小堆垛机!");
                    }
                }
            }
            catch (Exception ex)
            {
                WriteError(nameof(CommonStackerCraneJob), "小堆垛机执行任务异常!", ex);
                WriteError(nameof(DoubleStackerCraneJob), "小堆垛机执行任务异常!", ex);
            }
            try
            {
                if (stackerCraneOne != null)//SC02
                {
                    byte IsOver = stackerCraneOne.Communicator.Read<byte>("DB106.22");
                    int tasknum = stackerCraneOne.Communicator.Read<int>("DB106.18");
                    WriteDebug(nameof(DoubleStackerCraneJob), $"小堆垛机SC02任务号堆垛机任务号:{tasknum}状态:{IsOver}");
                    if (IsOver == 6)
                    {
                        if (stackerCraneOne.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5)
                        {
                            _taskService.StackCraneTaskCompleted(tasknum);
                            Console.Out.WriteLine("TaskCompleted" + tasknum);
                            bool issuccess = stackerCraneOne.SetValue(StackerCraneDBName.WorkType, 5);
                        }
                    }
                }
                if (stackerCraneTwo != null)//SC03
                {
                    //读取堆垛机任务号和任务完成确认状态
                    byte IsOver = stackerCraneTwo.Communicator.Read<byte>("DB106.22");
                    int tasknum = stackerCraneTwo.Communicator.Read<int>("DB106.18");
                    WriteDebug(nameof(DoubleStackerCraneJob), $"小堆垛机SC03任务号堆垛机任务号:{tasknum}状态:{IsOver}");
                    if (IsOver == 6)
                    {
                        if (stackerCraneTwo.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5)
                        {
                            _taskService.StackCraneTaskCompleted(tasknum);
                            Console.Out.WriteLine("TaskCompleted" + tasknum);
                            bool issuccess = stackerCraneTwo.SetValue(StackerCraneDBName.WorkType, 5);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                WriteError(nameof(DoubleStackerCraneJob), "执行异常!", ex);
            }
            return Task.CompletedTask;
        }
@@ -147,13 +188,9 @@
            {
                if (stackerCraneOne != null)
                {
                    if (!stackerCraneOne.IsEventSubscribed)
                    {
                        stackerCraneOne.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//订阅任务完成事件
                    }
                    if (stackerCraneOne.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && stackerCraneOne.StackerCraneStatusValue == StackerCraneStatus.Normal)
                    {
                        stackerCraneOne.CheckStackerCraneTaskCompleted();//防止任务完成事件监测超时,再手动触发一次
                        if (stackerCraneOne.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
                        {
                            return stackerCraneOne;
@@ -166,15 +203,17 @@
                        if (deviceSC02.DeviceStatus=="0"&& stackerCraneTwo != null)
                        {
                            if (!stackerCraneTwo.IsEventSubscribed)
                            {
                                stackerCraneTwo.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//订阅任务完成事件
                            }
                            //if (!stackerCraneTwo.IsEventSubscribed)
                            //{
                            //    stackerCraneTwo.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//订阅任务完成事件
                            //}
                            if (stackerCraneTwo.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && stackerCraneTwo.StackerCraneStatusValue == StackerCraneStatus.Normal)
                            {
                                stackerCraneTwo.CheckStackerCraneTaskCompleted();//防止任务完成事件监测超时,再手动触发一次
                                //stackerCraneTwo.CheckStackerCraneTaskCompleted();//防止任务完成事件监测超时,再手动触发一次
                                if (stackerCraneTwo.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
                                {
                                    //todo:任务表中的RoadWay切换为SC03
                                    return stackerCraneTwo;
                                }
                            }
@@ -184,18 +223,34 @@
                    }
                }
                else
                {
                    if(stackerCraneTwo != null)
                    {
                        if (stackerCraneTwo.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && stackerCraneTwo.StackerCraneStatusValue == StackerCraneStatus.Normal)
                        {
                            if (stackerCraneTwo.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
                            {
                                //todo:任务表中的RoadWay切换为SC03
                                return stackerCraneTwo;
                            }
                        }
                    }
                }
            }
            else if (task.Roadway=="SC03")
            {
                if (stackerCraneTwo != null)
                {
                    if (!stackerCraneTwo.IsEventSubscribed)
                    {
                        stackerCraneTwo.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//订阅任务完成事件
                    }
                 {
                //    if (!stackerCraneTwo.IsEventSubscribed)
                //    {
                //        stackerCraneTwo.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//订阅任务完成事件
                //    }
                    if (stackerCraneTwo.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && stackerCraneOne.StackerCraneStatusValue == StackerCraneStatus.Normal)
                    {
                        stackerCraneTwo.CheckStackerCraneTaskCompleted();//防止任务完成事件监测超时,再手动触发一次
                        //stackerCraneTwo.CheckStackerCraneTaskCompleted();//防止任务完成事件监测超时,再手动触发一次
                        if (stackerCraneTwo.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
                        {
                            return stackerCraneTwo;
@@ -206,15 +261,16 @@
                        Dt_DeviceInfo deviceSC03 = _deviceInfoRepository.QueryFirst(x => x.DeviceCode == "SC03");
                        if (deviceSC03.DeviceStatus=="0"&&stackerCraneOne != null)
                        {
                            if (!stackerCraneOne.IsEventSubscribed)
                            {
                                stackerCraneOne.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//订阅任务完成事件
                            }
                            //if (!stackerCraneOne.IsEventSubscribed)
                            //{
                            //    stackerCraneOne.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//订阅任务完成事件
                            //}
                            if (stackerCraneOne.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && stackerCraneTwo.StackerCraneStatusValue == StackerCraneStatus.Normal)
                            {
                                stackerCraneOne.CheckStackerCraneTaskCompleted();//防止任务完成事件监测超时,再手动触发一次
                                //stackerCraneOne.CheckStackerCraneTaskCompleted();//防止任务完成事件监测超时,再手动触发一次
                                if (stackerCraneOne.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
                                {
                                    //todo:任务表中的RoadWay切换为SC03
                                    return stackerCraneOne;
                                }
                            }
@@ -222,6 +278,21 @@
                    }
                }
                else
                {
                    if(stackerCraneOne != null)
                    {
                        if (stackerCraneOne.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && stackerCraneOne.StackerCraneStatusValue == StackerCraneStatus.Normal)
                        {
                            if (stackerCraneOne.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
                            {
                                return stackerCraneOne;
                            }
                        }
                    }
                }
            }
            return null;