duyongjia
2024-12-03 14aaca9a2e1da2849d602487a52094ee26bbe30a
生产试运行稳定版本提交
已修改6个文件
168 ■■■■■ 文件已修改
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Common/ApiInvoke.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/DoubleStackerCraneJob.cs 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs
@@ -117,6 +117,13 @@
        /// <returns></returns>
        Dt_Task QueryStackerCraneTask();
        /// <summary>
        /// æŸ¥è¯¢å°å †åž›æœºç§»åº“任务
        /// </summary>
        /// <param name="taskNum"></param>
        /// <returns></returns>
        Dt_Task QueryStackerCraneTaskByRelotion(int taskNum);
        /// <summary>
        /// æŸ¥è¯¢å°å †åž›æœºå‡ºåº“完成任务
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs
@@ -144,7 +144,7 @@
        public DateTime? Dispatchertime { get; set; }
        /// <summary>
        /// å¤‡æ³¨  ç”¨äºŽå­˜ä¸Šæ–™æ–™è½¦çš„æ€»å±‚数和当前层数 æ ¼å¼ï¼šæ€»å±‚æ•°-当前层数
        /// å¤‡æ³¨ ä¸Šæ–™ä»»åŠ¡æ—¶ ç”¨äºŽå­˜ä¸Šæ–™æ–™è½¦çš„æ€»å±‚数和当前层数 æ ¼å¼ï¼šæ€»å±‚æ•°-当前层数  å‡ºåº“任务时,写总层数
        /// </summary>
        [ImporterHeader(Name = "备注")]
        [ExporterHeader(DisplayName = "备注")]
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Common/ApiInvoke.cs
@@ -5,6 +5,7 @@
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.ServiceLog;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_DTO.TaskInfo;
using static System.Net.WebRequestMethods;
@@ -21,13 +22,16 @@
            string response = "";
            try
            {
                ServiceLogger.WriteDebug("SendTaskCMD", $"请求参数:{postData}");
                response = HttpManager.HttpPostAsync(url, postData).Result;
                ServiceLogger.WriteDebug("SendTaskCMD", $"响应参数:{response}");
                MESResponse res  = JsonConvert.DeserializeObject<MESResponse>(response);
                return res;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
                ServiceLogger.WriteDebug("SendTaskCMD", $"异常描述:{ex.Message}--{ex.StackTrace}--{ex.InnerException}");
                return null;
            }
        }
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -42,6 +42,7 @@
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Service;
@@ -210,7 +211,7 @@
                            if (taskinfo != null)
                            {
                                UpdateTaskStatus(taskinfo.TaskId, (int)TaskInStatusEnum.AGV_InExecuting);
                                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"AGV入库执行中");
                                _taskExecuteDetailService.AddTaskExecuteDetail(taskinfo.TaskId, $"AGV入库执行中");
                                ServiceLogger.WriteDebug("ReceiveTask", $"AGV入库执行中(自动3001)更新状态成功,任务号:{taskinfo.TaskId}");
                                return content = WebResponseContent.Instance.OK($"AGV入库执行中(自动3001)更新状态成功,任务号:{taskinfo.TaskId}");
                            }
@@ -226,7 +227,7 @@
                        {
                            //更新任务表中NextAddress字段为新的任务号   taskDTO.weight-旧的任务号   taskDTO.task_id-新的任务号
                            UpdateTaskStatus(taskinfo.TaskId, taskDTO.task_id, (int)TaskInStatusEnum.AGV_InFinish);
                            _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"AGV搬运完成");
                            _taskExecuteDetailService.AddTaskExecuteDetail(taskinfo.TaskId, $"AGV搬运完成");
                            ServiceLogger.WriteDebug("ReceiveTask", $"AGV搬运完成(101)更新状态成功,任务号:{taskinfo.TaskId}");
                            return content = WebResponseContent.Instance.OK($"AGV搬运完成(101)更新状态成功,任务号:{taskinfo.TaskId}");
                        }
@@ -241,6 +242,10 @@
                        task.TaskType= (int)TaskRelocationTypeEnum.Relocation;
                        task.TaskState = (int)TaskOutStatusEnum.OutNew;
                        task.Roadway = "SC01";
                        if (taskDTO.total > 0)
                        {
                            task.Remark = taskDTO.total.ToString();//取出库的总层数
                        }
                        task.Grade = 1;
                        break;
                    case 102:
@@ -586,6 +591,15 @@
        }
        /// <summary>
        /// æŸ¥è¯¢ç§»åº“任务
        /// </summary>
        /// <returns></returns>
        public Dt_Task QueryStackerCraneTaskByRelotion(int taskNum)
        {
            return BaseDal.QueryFirst(x => (x.Roadway == "SC01" )&&x.TaskType==(int)TaskRelocationTypeEnum.Relocation && x.TaskNum==taskNum, TaskOrderBy);
        }
        /// <summary>
        /// æŸ¥è¯¢å°å †åž›æœºå‡ºåº“完成任务
        /// </summary>
        /// <returns></returns>
@@ -749,7 +763,7 @@
                {
                    if (task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting)
                    {
                        if (task.TaskType == (int)TaskOutboundTypeEnum.OutInventory || task.TaskType == (int)TaskOutboundTypeEnum.OutPick)//异常出库 ç©ºè½¦å‡ºåº“
                        {
                            task.TaskState = (int)TaskOutStatusEnum.OutFinish;
@@ -1176,7 +1190,7 @@
                        MESResponse res = ApiInvoke.SendTaskCMD(sendcmd);
                        if (res != null && res.code != 0)
                        {
                            ServiceLogger.WriteDebug("StackCraneTaskCompleted", $"大堆垛机完成入库任务后回传MES失败!,任务号:【{taskNum}】,失败信息:【{res.message}】");
                            content = WebResponseContent.Instance.Error($"大堆垛机完成入库任务后回传MES失败!,任务号:【{taskNum}】,失败信息:【{res.message}】");
                        }
@@ -1225,6 +1239,24 @@
                            ServiceLogger.WriteDebug("StackCraneTaskCompleted", $"大堆垛机完成出库任务后回传MES失败!,任务号:【{taskNum}】,失败信息:【{res.message}】");
                            content = WebResponseContent.Instance.Error($"大堆垛机完成出库任务后回传MES失败!,任务号:【{taskNum}】,失败信息:【{res.message}】");
                        }
                        //if(task.TaskType== (int)TaskRelocationTypeEnum.Relocation&&!string.IsNullOrEmpty(task.Remark.Trim()))//出库任务写总层数标识
                        //{
                        //    CommonStackerCrane commonStackerCrane = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "SC01") as CommonStackerCrane;
                        //    //根据任务源地址确定写入PLC位置 Depth
                        //    Dt_LocationInfo location = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress);
                        //    if (commonStackerCrane!=null&&location != null)
                        //    {
                        //        bool issuccess = commonStackerCrane.Communicator.Write<short>("DB28." + location.Depth + ".0", 9);
                        //        if (issuccess)
                        //        {
                        //            ServiceLogger.WriteDebug("TaskService", $"原料出库后写入标识成功!");
                        //        }
                        //        else
                        //        {
                        //            ServiceLogger.WriteDebug("TaskService", $"原料出库后写入标识失败!");
                        //        }
                        //    }
                        //}
                    }
                    catch (Exception ex)
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -53,15 +53,15 @@
        public Task Execute(IJobExecutionContext context)
        {
            //WriteDebug("大堆垛机运行日志", "开始时间" + DateTime.Now);
            Console.WriteLine("当前线程数"+ThreadPool.ThreadCount);
             WriteDebug("线程统计日志", "线程数" + ThreadPool.ThreadCount);
             //CommonStackerCrane commonStackerCrane = (CommonStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
             CommonStackerCrane commonStackerCrane = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "SC01") as CommonStackerCrane;
            try
            {  
                if (commonStackerCrane != null)
                {
                   WriteDebug("大堆垛机运行日志", $"大堆垛机任务执行中...");
                   //WriteDebug("大堆垛机运行日志", $"大堆垛机任务执行中...");
                    //if (!commonStackerCrane.IsEventSubscribed)
                    //{
                    //    commonStackerCrane.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//订阅任务完成事件
@@ -69,7 +69,7 @@
                    if (commonStackerCrane.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneStatusValue == StackerCraneStatus.Normal)
                    {
                        commonStackerCrane.CheckStackerCraneTaskCompleted();//防止任务完成事件监测超时,再手动触发一次
                       // commonStackerCrane.CheckStackerCraneTaskCompleted();//防止任务完成事件监测超时,再手动触发一次
                        
                        if (commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
                        {
@@ -77,7 +77,7 @@
                            if (task != null)
                            {
                                
                                WriteDebug("大堆垛机运行日志", $"大堆垛机任务号{task.TaskNum}");
                                WriteDebug(nameof(CommonStackerCraneJob), $"大堆垛机任务号{task.TaskNum}");
                                StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task);
                                if (stackerCraneTaskCommand != null)
                                {
@@ -128,9 +128,7 @@
            }
            //Task.Run(delegate
            //{
            try
            {
                if (commonStackerCrane != null)
@@ -138,7 +136,7 @@
                    //读取大堆垛机任务号和任务完成确认状态(因为封装的事件经常不触发,所以加个直接读的逻辑,以免出现堆垛机一直接处于等待wcs确认)
                    byte IsOver = commonStackerCrane.Communicator.Read<byte>("DB106.22");
                    int tasknum = commonStackerCrane.Communicator.Read<int>("DB106.18");
                    //WriteDebug(nameof(CommonStackerCraneJob), $"读取大堆垛机SC01任务完成信号值:{IsOver} ä»»åŠ¡å·ï¼š{tasknum}");
                    WriteDebug(nameof(CommonStackerCraneJob), $"大堆垛机SC01任务号堆垛机任务号:{tasknum}状态:{IsOver}");
                    if (IsOver == 6)
                    {
                        if (commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5)
@@ -146,17 +144,38 @@
                            _taskService.StackCraneTaskCompleted(tasknum);
                            Console.Out.WriteLine("TaskCompleted" + tasknum);
                            bool issuccess = commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
                            if (issuccess)
                            if(issuccess)
                            {
                                WriteDebug(nameof(CommonStackerCraneJob), $"大堆垛机SC01任务号写入任务完成确认值5成功{tasknum}");
                                WriteDebug(nameof(CommonStackerCraneJob), $"大堆垛机SC01任务号堆垛机任务号:{tasknum},回写5成功");
                                //查询当前任务号,是不是出库(正常库位-->暂存位)
                                Dt_Task tasktemp = _taskService.QueryStackerCraneTaskByRelotion(tasknum);
                                if (tasktemp != null&&!string.IsNullOrEmpty(tasktemp.Remark.Trim()))
                                {
                                    //根据任务目标地址确定写入PLC位置 Depth
                                    Dt_LocationInfo location = _locationInfoRepository.QueryFirst(x => x.LocationCode == tasktemp.TargetAddress);
                                    if (commonStackerCrane != null && location != null)
                                    {
                                        bool issuccess2 = commonStackerCrane.Communicator.Write<short>("DB28." + location.Depth + ".0", 9);
                                        if (issuccess2)
                                        {
                                            ServiceLogger.WriteDebug("TaskService", $"原料出库后写入标识成功!");
                                        }
                                        else
                                        {
                                            ServiceLogger.WriteDebug("TaskService", $"原料出库后写入标识失败!");
                                        }
                                    }
                                }
                            }
                            else
                            {
                                WriteDebug(nameof(CommonStackerCraneJob), $"大堆垛机SC01任务号写入任务完成确认值5失败{tasknum}");
                                WriteDebug(nameof(CommonStackerCraneJob), $"大堆垛机SC01任务号堆垛机任务号:{tasknum},回写5失败");
                            }
                        }
                    }
                    //提升机交互
                    Dt_Task? task1001 = _taskService.QueryStackerCraneTaskByAGVRequest("SC01");
@@ -176,18 +195,6 @@
                        {
                            MESSendCMD sendcmd = new MESSendCMD { cmd = 2001, task_id = task1001.TaskNum, status = 6 };
                            MESResponse res = ApiInvoke.SendTaskCMD(sendcmd);
                            if (res != null && res.code != 0)
                            {
                                WriteDebug(nameof(CommonStackerCraneJob), $"允计AGV进入提升机,回传WMS失败!任务号{task1001.TaskNum}");
                            }
                            else
                            {
                                WriteDebug(nameof(CommonStackerCraneJob), $"允计AGV进入提升机,回传WMS成功!任务号{task1001.TaskNum}");
                            }
                        }
                        else
                        {
                            WriteDebug(nameof(CommonStackerCraneJob), $"未读取到提升机允计进入信号,暂不允计AGV进入提升机,任务号{task1001.TaskNum}");
                        }
                    }
                    Dt_Task? task3001 = _taskService.QueryStackerCraneTaskByAGVPutFinish("SC01");
@@ -208,10 +215,7 @@
                            {
                                commonStackerCrane.Communicator.Write<short>("DB1.0.0", 1);
                            }
                            else
                            {
                                WriteDebug(nameof(CommonStackerCraneJob), $"未写入提升信号,可能是已写入或者提升机未处理就绪状态,任务号:{task3001.TaskNum}");
                            }
                            //读取提升机信号,确定是否提升完成
                            IsFinish = commonStackerCrane.Communicator.Read<short>("DB2.2.0");
@@ -228,10 +232,7 @@
                            {
                                commonStackerCrane.Communicator.Write<short>("DB1.6.0", 1);
                            }
                            else
                            {
                                WriteDebug(nameof(CommonStackerCraneJob), $"未写入提升信号,可能是信号已写入或者提升机未处理就绪状态,任务号:{task3001.TaskNum}");
                            }
                            //读取提升机信号,确定是否提升完成
                            IsFinish = commonStackerCrane.Communicator.Read<short>("DB2.10.0");
                        }
@@ -247,10 +248,7 @@
                                WriteDebug(nameof(CommonStackerCraneJob), $"提升机提升完成,回传WMS失败!任务号{task3001.TaskNum}");
                            }
                        }
                        else
                        {
                            WriteDebug(nameof(CommonStackerCraneJob), $"提升机提升中...,任务号:{task3001.TaskNum}");
                        }
                    }
                    //小堆垛机出库完成任务
@@ -334,10 +332,8 @@
            }
            catch (Exception ex)
            {
                WriteError(nameof(CommonStackerCraneJob), "查询或写入PLC状态失败!", ex);
                WriteError(nameof(CommonStackerCraneJob), "执行异常!", ex);
            }
           // WriteDebug("大堆垛机运行日志", "结束时间" + DateTime.Now);
            //});
            return Task.CompletedTask;
        }
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/DoubleStackerCraneJob.cs
@@ -52,7 +52,7 @@
        public  Task Execute(IJobExecutionContext context)
        {
            //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;
          
@@ -66,7 +66,7 @@
                    CommonStackerCrane? StackerCrane = GetStrackerCrane(task, stackerCraneOne, stackerCraneTwo);
                    if (StackerCrane != null)
                    {
                        WriteDebug("小堆垛机运行日志", $"小堆垛机任务号{task.TaskNum}");
                        WriteDebug(nameof(DoubleStackerCraneJob), $"小堆垛机任务号{task.TaskNum}");
                        StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task);
                        if (stackerCraneTaskCommand != null)
                        {
@@ -79,8 +79,8 @@
                            }
                            else
                            {
                                _taskService.UpdateTaskExceptionMessage(task.TaskNum, "堆垛机执行任务命令失败!");
                                WriteDebug(nameof(DoubleStackerCraneJob), "堆垛机执行任务命令失败!");
                                _taskService.UpdateTaskExceptionMessage(task.TaskNum, "堆垛机发送任务命令失败!");
                                WriteDebug(nameof(DoubleStackerCraneJob), $"堆垛机发送任务命令失败!{task.TaskNum}");
                            }
                        }
@@ -98,9 +98,7 @@
                WriteError(nameof(DoubleStackerCraneJob), "小堆垛机执行任务异常!", ex);
            }
            //读取堆垛机任务号和任务完成确认状态
            //Task.Run(delegate
            //{
            try
            {
@@ -108,7 +106,7 @@
                {
                    byte IsOver = stackerCraneOne.Communicator.Read<byte>("DB106.22");
                    int tasknum = stackerCraneOne.Communicator.Read<int>("DB106.18");
                   // WriteDebug(nameof(DoubleStackerCraneJob), $"读取小堆垛机SC02任务完成信号值:{IsOver}任务号:{tasknum}");
                    WriteDebug(nameof(DoubleStackerCraneJob), $"小堆垛机SC02任务号堆垛机任务号:{tasknum}状态:{IsOver}");
                    if (IsOver == 6)
                    {
                        if (stackerCraneOne.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5)
@@ -116,14 +114,6 @@
                            _taskService.StackCraneTaskCompleted(tasknum);
                            Console.Out.WriteLine("TaskCompleted" + tasknum);
                            bool issuccess = stackerCraneOne.SetValue(StackerCraneDBName.WorkType, 5);
                            if (issuccess)
                            {
                                WriteDebug(nameof(DoubleStackerCraneJob), $"小堆垛机SC02任务号写入任务完成确认值5成功{tasknum}");
                            }
                            else
                            {
                                WriteDebug(nameof(DoubleStackerCraneJob), $"小堆垛机SC02任务号写入任务完成确认值5失败{tasknum}");
                            }
                        }
                    }
@@ -134,7 +124,7 @@
                    //读取堆垛机任务号和任务完成确认状态
                    byte IsOver = stackerCraneTwo.Communicator.Read<byte>("DB106.22");
                    int tasknum = stackerCraneTwo.Communicator.Read<int>("DB106.18");
                   // WriteDebug(nameof(DoubleStackerCraneJob), $"读取小堆垛机SC03任务完成信号值:{IsOver}任务号:{tasknum}");
                    WriteDebug(nameof(DoubleStackerCraneJob), $"小堆垛机SC03任务号堆垛机任务号:{tasknum}状态:{IsOver}");
                    if (IsOver == 6)
                    {
                        if (stackerCraneTwo.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5)
@@ -142,27 +132,18 @@
                            _taskService.StackCraneTaskCompleted(tasknum);
                            Console.Out.WriteLine("TaskCompleted" + tasknum);
                            bool issuccess = stackerCraneTwo.SetValue(StackerCraneDBName.WorkType, 5);
                            if (issuccess)
                            {
                                WriteDebug(nameof(DoubleStackerCraneJob), $"小堆垛机SC03任务号写入任务完成确认值5成功{tasknum}");
                            }
                            else
                            {
                                WriteDebug(nameof(DoubleStackerCraneJob), $"小堆垛机SC03任务号写入任务完成确认值5失败{tasknum}");
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                WriteError(nameof(DoubleStackerCraneJob), "查询或写入PLC状态失败!", ex);
                WriteError(nameof(DoubleStackerCraneJob), "执行异常!", ex);
            }
            //});
            //WriteDebug("小堆垛机运行日志", "结束时间" + DateTime.Now);
            return Task.CompletedTask;
        }