qinchulong
2025-03-08 73e0e7c3886bc88e7ed37db24d28d8f6d159f1c0
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/OHT/OHTJob.cs
@@ -37,7 +37,7 @@
        private readonly ITaskService _taskService;
        private readonly Idt_ErrormsginfoService _ErrormsginfoService;
        WebSocketServer _webSocketServer;
        public OHTJob(ITaskService taskService, WebSocketServer webSocketServer,Idt_ErrormsginfoService errormsginfoService)
        public OHTJob(ITaskService taskService, WebSocketServer webSocketServer, Idt_ErrormsginfoService errormsginfoService)
        {
            _taskService = taskService;//注入
            _webSocketServer = webSocketServer;
@@ -45,7 +45,6 @@
        }
        public Task Execute(IJobExecutionContext context)
        {
            bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
            if (flag && value != null)
            {
@@ -55,10 +54,10 @@
                var ZXJdevice = Storage.Devices.Find(v => v.DeviceName == "阳极整形机");
                //规整机PLC对象
                var GZJevice = Storage.Devices.Find(v => v.DeviceName == "阳极规整机");
                if (!device.Communicator.IsConnected || !ZXJdevice.Communicator.IsConnected || !GZJevice.Communicator.IsConnected)
                {
                    return Task.CompletedTask;
                }
                //if (!device.Communicator.IsConnected || !ZXJdevice.Communicator.IsConnected || !GZJevice.Communicator.IsConnected)
                //{
                //    return Task.CompletedTask;
                //}
                try
                {
                    #region å¤©è½¦å®Œæˆä»»åŠ¡é€»è¾‘
@@ -72,11 +71,13 @@
                        {
                            throw new Exception(string.Format("天车取货完成任务未查询到任务号{0}", oHTReadData.R_TaskNumber));
                        }
                        //入库
                        if (nawtask.TaskType == (int)TaskInboundTypeEnum.Inbound)
                        {
                            //如果任务的状态是天车入库取货执行中
                            //如果任务的状态是否是天车入库取货执行中
                            if (nawtask.TaskState == (int)TaskInStatusEnum.Line_InGrabExecuting)
                            {
                                //修改状态
                                WebResponseContent result = _taskService.UpdateTaskStatusToLine_Ingrab(nawtask);
                                if (result.Status)
                                {
@@ -84,16 +85,28 @@
                                }
                            }
                        }
                        //出库
                        else if (nawtask.TaskType == (int)TaskOutboundTypeEnum.Outbound)
                        {
                            //如果任务状态是天车出库取货执行中
                            //如果任务状态是否是天车出库取货执行中
                            if (nawtask.TaskState == (int)TaskOutStatusEnum.Line_OutGrabExecuting)
                            {
                                //修改状态
                                WebResponseContent result = _taskService.UpdateTaskStatusToLine_Outgrab(nawtask);
                                if (result.Status)
                                {
                                    device.SetValue(DeviceDBName.W_ConfirmSignal, 3);
                                }
                            }
                        }
                        //直接出库
                        else if (nawtask.TaskType == (int)TaskOutboundTypeEnum.OutInventory)
                        {
                            //修改状态
                            WebResponseContent result = _taskService.UpdateTaskStatusToLine_Outgrab(nawtask);
                            if (result.Status)
                            {
                                device.SetValue(DeviceDBName.W_ConfirmSignal, 3);
                            }
                        }
                        return Task.CompletedTask;
@@ -108,40 +121,57 @@
                        }
                        return Task.CompletedTask;
                    }
                    else if (oHTReadData.R_RunState == (int)RunStateEnum.MoveCompleted && oHTReadData.R_TaskState == (int)TaskStateEnum.TaskComplete)
                    {
                        //天车移动完成
                        WebResponseContent result = _taskService.StackCraneTaskCompleted(oHTReadData.R_TaskNumber, oHTReadData.weight);
                        if (result.Status)
                        {
                            device.SetValue(DeviceDBName.W_ConfirmSignal, 3);
                        }
                        return Task.CompletedTask;
                    }
                    #endregion
                    #region å¤©è½¦å‘送任务逻辑
                    if (oHTReadData.R_RunMode == (int)RunModeEnum.Automatic && oHTReadData.R_AlarmCode == (int)AlarmCodeEnum.Normal)
                    if (oHTReadData.R_RunMode == (int)RunModeEnum.Automatic)
                    {
                        if (oHTReadData.R_RunState == (int)RunStateEnum.Standby)
                        {
                            Dt_Task? task = GetTask(InorOut);
                            if (task != null)
                            //查看任务池中是否存在执行中的任务
                            var tasking = _taskService.QueryTasking();
                            if (tasking==null)
                            {
                                OHTTaskCommand? oHTTaskCommand = ConvertToOHTTaskCommand(task);
                                if (oHTTaskCommand != null)
                                Dt_Task? task = GetTask(InorOut);
                                if (task != null)
                                {
                                    //todo:写入任务命令
                                    device.SetValue(DeviceDBName.W_Task_Type, oHTTaskCommand.W_Task_Type);
                                    device.SetValue(DeviceDBName.W_Pick_Line, oHTTaskCommand.W_Pick_Line);
                                    device.SetValue(DeviceDBName.W_Pick_Column, oHTTaskCommand.W_Pick_Column);
                                    device.SetValue(DeviceDBName.W_Put_Line, oHTTaskCommand.W_Put_Line);
                                    device.SetValue(DeviceDBName.W_Put_Column, oHTTaskCommand.W_Put_Column);
                                    device.SetValue(DeviceDBName.W_Catch_1, oHTTaskCommand.W_Catch_1);
                                    device.SetValue(DeviceDBName.W_Catch_2, oHTTaskCommand.W_Catch_2);
                                    device.SetValue(DeviceDBName.W_TaskNumber, oHTTaskCommand.W_TaskNumber);
                                    device.SetValue(DeviceDBName.W_CheckValue, oHTTaskCommand.W_CheckValue);
                                    //确认信号写入1,任务下达完成
                                    device.SetValue(DeviceDBName.W_ConfirmSignal, 1);
                                    Thread.Sleep(500);
                                    //WCS检测到天车的R_TaskState=1,通过W_ConfirmSignalç½®2表示让天车开始执行任务
                                    int R_TaskState = device.GetValue<DeviceDBName, short>(DeviceDBName.R_TaskState);
                                    if (R_TaskState == 1)
                                    OHTTaskCommand? oHTTaskCommand = ConvertToOHTTaskCommand(task);
                                    if (oHTTaskCommand != null)
                                    {
                                        device.SetValue(DeviceDBName.W_ConfirmSignal, 2);
                                        //给天车下发任务之前将此值写0
                                        device.SetValue(DeviceDBName.W_ConfirmSignal, 0);
                                        //todo:写入任务命令
                                        device.SetValue(DeviceDBName.W_Task_Type, oHTTaskCommand.W_Task_Type);
                                        device.SetValue(DeviceDBName.W_Pick_Line, oHTTaskCommand.W_Pick_Line);
                                        device.SetValue(DeviceDBName.W_Pick_Column, oHTTaskCommand.W_Pick_Column);
                                        device.SetValue(DeviceDBName.W_Put_Line, oHTTaskCommand.W_Put_Line);
                                        device.SetValue(DeviceDBName.W_Put_Column, oHTTaskCommand.W_Put_Column);
                                        device.SetValue(DeviceDBName.W_Catch_1, oHTTaskCommand.W_Catch_1);
                                        device.SetValue(DeviceDBName.W_Catch_2, oHTTaskCommand.W_Catch_2);
                                        device.SetValue(DeviceDBName.W_TaskNumber, oHTTaskCommand.W_TaskNumber);
                                        device.SetValue(DeviceDBName.W_CheckValue, oHTTaskCommand.W_CheckValue);
                                        //确认信号写入1,任务下达完成
                                        device.SetValue(DeviceDBName.W_ConfirmSignal, 1);
                                        Thread.Sleep(500);
                                        //WCS检测到天车的R_TaskState=1,通过W_ConfirmSignalç½®2表示让天车开始执行任务
                                        int R_TaskState = device.GetValue<DeviceDBName, short>(DeviceDBName.R_TaskState);
                                        if (R_TaskState == 1)
                                        {
                                            device.SetValue(DeviceDBName.W_ConfirmSignal, 2);
                                        }
                                        //下发成功,修改任务状态
                                        _taskService.UpdateTaskStatus(task.TaskId, oHTTaskCommand.W_Task_Type);
                                    }
                                    //下发成功,修改任务状态
                                    _taskService.UpdateTaskStatus(task.TaskNum, oHTTaskCommand.W_Task_Type);
                                }
                            }
                        }
@@ -150,7 +180,7 @@
                }
                catch (Exception ex)
                {
                    _ErrormsginfoService.UpdateErrorMsg(ex.Message,1);
                    _ErrormsginfoService.UpdateErrorMsg(ex.Message, 1);
                }
            }
            return Task.CompletedTask;
@@ -167,7 +197,7 @@
        {
            OHTTaskCommand oHtTaskCommand = new OHTTaskCommand();
            if (task.TaskState==(int)TaskInStatusEnum.InNew || task.TaskState == (int)TaskOutStatusEnum.OutNew)
            if (task.TaskState == (int)TaskInStatusEnum.InNew || task.TaskState == (int)TaskOutStatusEnum.OutNew)
            {
                oHtTaskCommand.W_Task_Type = 2;
                string[] SourceCodes = task.SourceAddress.Split("-");
@@ -176,7 +206,7 @@
                    oHtTaskCommand.W_Pick_Line = Convert.ToInt16(SourceCodes[0]);
                    oHtTaskCommand.W_Pick_Column = Convert.ToInt16(SourceCodes[1]);
                    oHtTaskCommand.W_Put_Line = 0;
                    oHtTaskCommand.W_Put_Column = 0;
                    oHtTaskCommand.W_Put_Column = 0;
                }
                else
                {
@@ -184,7 +214,7 @@
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"任务源地址配置错误!");
                    return null;
                }
                oHtTaskCommand.W_CheckValue = task.TaskType + Convert.ToInt16(SourceCodes[0]) + Convert.ToInt16(SourceCodes[1]);
                oHtTaskCommand.W_CheckValue = 2 + Convert.ToInt16(SourceCodes[0]) + Convert.ToInt16(SourceCodes[1]);
            }
            else if (task.TaskState == (int)TaskInStatusEnum.Line_Ingrab || task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting)
            {
@@ -203,7 +233,26 @@
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"任务源地址配置错误!");
                    return null;
                }
                oHtTaskCommand.W_CheckValue = task.TaskType + Convert.ToInt16(SourceCodes[0]) + Convert.ToInt16(SourceCodes[1]);
                oHtTaskCommand.W_CheckValue = 3 + Convert.ToInt16(SourceCodes[0]) + Convert.ToInt16(SourceCodes[1]);
            }
            else if(task.TaskState == (int)TaskMoveStatusEnum.OutNewMove )
            {
                oHtTaskCommand.W_Task_Type = 4;
                string[] SourceCodes = task.TargetAddress.Split("-");
                if (SourceCodes.Length == 3)
                {
                    oHtTaskCommand.W_Pick_Line = 0;
                    oHtTaskCommand.W_Pick_Column = 0;
                    oHtTaskCommand.W_Put_Line = Convert.ToInt16(SourceCodes[0]);
                    oHtTaskCommand.W_Put_Column = Convert.ToInt16(SourceCodes[1]);
                }
                else
                {
                    //数据配置错误
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"任务源地址配置错误!");
                    return null;
                }
                oHtTaskCommand.W_CheckValue = 4 + Convert.ToInt16(SourceCodes[0]) + Convert.ToInt16(SourceCodes[1]);
            }
            
            if (task.WMSId==1)
@@ -224,8 +273,8 @@
                oHtTaskCommand.W_Catch_2 = 1;
                oHtTaskCommand.W_CheckValue += 2;
            }
            oHtTaskCommand.W_TaskNumber = task.TaskNum;
            oHtTaskCommand.W_CheckValue += task.TaskNum;
            oHtTaskCommand.W_TaskNumber = task.TaskId;
            oHtTaskCommand.W_CheckValue += task.TaskId;
            return oHtTaskCommand;
        }
@@ -249,6 +298,17 @@
                    InorOut = "In";
                }
            }
            else
            {
                if (workType.Equals("In"))
                {
                    InorOut = "Out";
                }
                else
                {
                    InorOut = "In";
                }
            }
            return task;
        }
    }