duyongjia
2024-11-22 a89f1faab22c204627d49d6731be9c94d8160184
´úÂë¹ÜÀí/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;
@@ -51,25 +52,19 @@
        public Task Execute(IJobExecutionContext context)
        {
            try
            {
            WriteDebug("小堆垛机运行日志", "开始时间" + DateTime.Now);
                CommonStackerCrane? stackerCraneOne = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "SC02") as CommonStackerCrane;
                CommonStackerCrane? stackerCraneTwo = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "SC03") as CommonStackerCrane;
            WriteDebug(nameof(DoubleStackerCraneJob), $"小堆垛机任务执行中...");
                //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();
            try
            {
                Dt_Task? task = GetTask();
                if (task != null)
                {
                    WriteDebug("小堆垛机运行日志", $"小堆垛机任务号{task.TaskNum}");
                    CommonStackerCrane? StackerCrane= GetStrackerCrane(task, stackerCraneOne, stackerCraneTwo);
                    if(StackerCrane != null)
                    {
@@ -86,14 +81,14 @@
                            else
                            {
                                _taskService.UpdateTaskExceptionMessage(task.TaskNum, "堆垛机执行任务命令失败!");
                                WriteDebug(nameof(CommonStackerCraneJob), "堆垛机执行任务命令失败!");
                                WriteDebug(nameof(DoubleStackerCraneJob), "堆垛机执行任务命令失败!");
                            }
                        }
                    }
                    else
                    {
                        WriteDebug(nameof(CommonStackerCraneJob), "未查询到当前可以执行上料任务的小堆垛机!");
                        WriteDebug(nameof(DoubleStackerCraneJob), "未查询到当前可以执行上料任务的小堆垛机!");
                    }
                  
                }
@@ -103,6 +98,53 @@
            {
                WriteError(nameof(CommonStackerCraneJob), "小堆垛机执行任务异常!", ex);
            }
            //读取堆垛机任务号和任务完成确认状态
            //Task.Run(delegate
            //{
                try
                {
                    if (stackerCraneOne != null)
                    {
                        byte IsFinish = stackerCraneOne.Communicator.Read<byte>("DB106.22");
                        int tasknum = stackerCraneOne.Communicator.Read<int>("DB106.18");
                        if (IsFinish == 6)
                        {
                            if (stackerCraneOne.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5)
                            {
                                //暂时 å…ˆå†™5:完成确认 ä¿¡å·
                                _taskService.StackCraneTaskCompleted(tasknum);
                                stackerCraneOne.SetValue(StackerCraneDBName.WorkType, 5);
                            }
                        }
                    }
                    if (stackerCraneTwo != null)
                    {
                        //读取堆垛机任务号和任务完成确认状态
                        byte IsFinish = stackerCraneTwo.Communicator.Read<byte>("DB106.22");
                        int tasknum = stackerCraneTwo.Communicator.Read<int>("DB106.18");
                        if (IsFinish == 6)
                        {
                            if (stackerCraneTwo.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5)
                            {
                                _taskService.StackCraneTaskCompleted(tasknum);
                                stackerCraneTwo.SetValue(StackerCraneDBName.WorkType, 5);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    WriteError(nameof(DoubleStackerCraneJob), "查询或写入PLC状态失败!", ex);
                }
            //});
            WriteDebug("小堆垛机运行日志", "结束时间" + DateTime.Now);
            return Task.CompletedTask;
        }
@@ -147,13 +189,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 +204,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 +224,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,18 +262,34 @@
                        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;
                                }
                            }
                        }
                    }
                }
                else
                {
                    if(stackerCraneOne != null)
                    {
                        if (stackerCraneOne.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && stackerCraneOne.StackerCraneStatusValue == StackerCraneStatus.Normal)
                        {
                                if (stackerCraneOne.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
                                {
                                    return stackerCraneOne;
                                }
                            }
                        }
                    }