duyongjia
2024-12-10 913f4af81e7ad477110bfe2ff430163b9225898c
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -54,11 +54,12 @@
        public Task Execute(IJobExecutionContext context)
        {
            
             WriteDebug("线程统计日志", "线程数" + 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("大堆垛机运行日志", $"大堆垛机任务执行中...");
@@ -75,8 +76,7 @@
                        {
                            Dt_Task? task = GetTask(commonStackerCrane);
                            if (task != null)
                            {
                            {
                                WriteDebug(nameof(CommonStackerCraneJob), $"大堆垛机任务号{task.TaskNum}");
                                StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task);
                                if (stackerCraneTaskCommand != null)
@@ -136,7 +136,7 @@
                    //读取大堆垛机任务号和任务完成确认状态(因为封装的事件经常不触发,所以加个直接读的逻辑,以免出现堆垛机一直接处于等待wcs确认)
                    byte IsOver = commonStackerCrane.Communicator.Read<byte>("DB106.22");
                    int tasknum = commonStackerCrane.Communicator.Read<int>("DB106.18");
                    WriteDebug(nameof(CommonStackerCraneJob), $"大堆垛机SC01任务号堆垛机任务号:{tasknum}状态:{IsOver}");
                    //WriteDebug(nameof(CommonStackerCraneJob), $"大堆垛机SC01任务号堆垛机任务号:{tasknum}状态:{IsOver}");
                    if (IsOver == 6)
                    {
                        if (commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5)
@@ -191,10 +191,24 @@
                        {
                            IsAllow = commonStackerCrane.Communicator.Read<short>("DB2.8.0");
                        }
                        if (IsAllow == 1)//如果为1,则允计AGV进入,回传WMS
                        //查询任务标记为1的任务为空才允计回传
                        WriteDebug(nameof(CommonStackerCraneJob), $"任务号:{task1001.TaskNum}-是否允计:{IsAllow}");
                        Dt_Task? taskAgvIning = _taskService.QueryStackerCraneTaskByAGVIning("SC01");
                        if (IsAllow == 1&&taskAgvIning==null)//如果为1,则允计AGV进入,回传WMS
                        {
                            _taskService.UpdateTaskAllowIn(task1001.TaskNum, 1);
                            WriteDebug(nameof(CommonStackerCraneJob), $"更新是否进入升降机标志值1,任务号{task1001.TaskNum}");
                            IsAllow = 0;//更新成功,置0不允许
                            MESSendCMD sendcmd = new MESSendCMD { cmd = 2001, task_id = task1001.TaskNum, status = 6 };
                            MESResponse res = ApiInvoke.SendTaskCMD(sendcmd);
                            //if (res != null && res.code == 0)//回传2001成功
                            //{
                                //WCS读到允许信号后任务标记1,表示AGV已进入提升机,Dt_Task ä¸­çš„CurrentAddress做为标记字段
                                //_taskService.UpdateTaskAllowIn(task1001.TaskNum, 1);
                                //WriteDebug(nameof(CommonStackerCraneJob), $"更新是否进入升降机标志值1,任务号{task1001.TaskNum}");
                            //}
                        }
                    }
                    Dt_Task? task3001 = _taskService.QueryStackerCraneTaskByAGVPutFinish("SC01");
@@ -206,26 +220,23 @@
                        if (task3001.SourceAddress == "SC01-002-000-001")//WMS 1001站点
                        {
                            //提升机是否处于就绪状态
                            int IsReady = commonStackerCrane.Communicator.Read<short>("DB2.0.0");
                            WriteDebug(nameof(CommonStackerCraneJob), $"提升机状态:{IsReady}任务号:{task3001.TaskNum}");
                            WriteDebug(nameof(CommonStackerCraneJob), $"提升机是否就绪状态:{IsReady}任务号:{task3001.TaskNum}");
                            //写入提升信息
                            IsWriteOne = commonStackerCrane.Communicator.Read<short>("DB1.0.0");
                            if (IsWriteOne == 0 && IsReady == 1)
                            {
                                commonStackerCrane.Communicator.Write<short>("DB1.0.0", 1);
                            }
                            }
                            //读取提升机信号,确定是否提升完成
                            IsFinish = commonStackerCrane.Communicator.Read<short>("DB2.2.0");
                        }
                        else if (task3001.SourceAddress == "SC01-002-000-002")//WMS 1002站点
                        {
                            //提升机是否处于就绪状态
                            int IsReady = commonStackerCrane.Communicator.Read<short>("DB2.0.0");
                            WriteDebug(nameof(CommonStackerCraneJob), $"提升机状态:{IsReady}任务号:{task3001.TaskNum}");
                            WriteDebug(nameof(CommonStackerCraneJob), $"提升机是否就绪状态:{IsReady}任务号:{task3001.TaskNum}");
                            //写入提升信息
                            IsWriteTwo = commonStackerCrane.Communicator.Read<short>("DB1.6.0");
                            if (IsWriteTwo == 0 && IsReady == 1)
@@ -235,17 +246,37 @@
                           
                            //读取提升机信号,确定是否提升完成
                            IsFinish = commonStackerCrane.Communicator.Read<short>("DB2.10.0");
                        }
                        if (IsFinish == 1)//如果为1,则表示提升完成,回传WMS
                        {
                            MESSendCMD sendcmd = new MESSendCMD { cmd = 2002, task_id = task3001.TaskNum, status = 6 };
                            MESResponse res = ApiInvoke.SendTaskCMD(sendcmd);
                            string inparam = JsonConvert.SerializeObject(sendcmd);
                            WriteDebug(nameof(CommonStackerCraneJob), $"提升机提升完成,回传WMS,入参:{inparam}");
                            if (res != null && res.code != 0)
                            if (task3001.WMSId == 3)// WCS人工入库
                            {
                                WriteDebug(nameof(CommonStackerCraneJob), $"提升机提升完成,回传WMS失败!任务号{task3001.TaskNum}");
                                MESTaskDTO taskDTO = new MESTaskDTO();
                                taskDTO.weight = task3001.TaskNum;//旧任务号
                                taskDTO.cmd = 101;
                                _taskService.ReceiveWCSTask(taskDTO);
                            }
                            else
                            {
                                MESSendCMD sendcmd = new MESSendCMD { cmd = 2002, task_id = task3001.TaskNum, status = 6 };
                                MESResponse res = ApiInvoke.SendTaskCMD(sendcmd);
                                string inparam = JsonConvert.SerializeObject(sendcmd);
                                WriteDebug(nameof(CommonStackerCraneJob), $"提升机提升完成,回传WMS,入参:{inparam}");
                                if (res != null && res.code == 0)
                                {
                                    _taskService.UpdateTaskAllowIn(task3001.TaskNum, 0);
                                    WriteDebug(nameof(CommonStackerCraneJob), $"更新是否进入升降机标志值0,任务号{task3001.TaskNum}");
                                }
                                else
                                {
                                    WriteDebug(nameof(CommonStackerCraneJob), $"提升机提升完成,回传WMS失败!任务号{task3001.TaskNum}");
                                }
                            }
                        }