qinchulong
2025-03-04 6acfe6b52441943b1ceb8468a2235326dad880fe
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/OHT/OHTJob.cs
@@ -19,6 +19,7 @@
using WIDESEAWCS_Communicator;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
@@ -32,66 +33,33 @@
    public class OHTJob : JobBase, IJob
    {
        public static string InorOut = "In";
        public static OHTReadData oHTReadData = new OHTReadData();
        private readonly ITaskService _taskService;
        private readonly Idt_ErrormsginfoService _ErrormsginfoService;
        WebSocketServer _webSocketServer;
        public OHTJob(ITaskService taskService, WebSocketServer webSocketServer)
        public OHTJob(ITaskService taskService, WebSocketServer webSocketServer,Idt_ErrormsginfoService errormsginfoService)
        {
            _taskService = taskService;//注入
            _webSocketServer = webSocketServer;
            _ErrormsginfoService = errormsginfoService;
        }
        public Task Execute(IJobExecutionContext context)
        {
            bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
            if (flag && value != null)
            {
                //天车PLC对象
                OtherDevice device = (OtherDevice)value;
                //整形机PLC对象
                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;
                //}
                try
                {
                    //Example
                    //device.GetValue  è¯»å–
                    //device.SetValue  å†™å…¥
                    //_taskService.Repository; //仓储层,进行数据库访问
                    OHTReadData oHTReadData = new OHTReadData();
                    #region è¯»å–天车设备数据
                    oHTReadData.R_HeartBeat = device.GetValue<DeviceDBName, bool>(DeviceDBName.R_HeartBeat);
                    oHTReadData.R_RunMode = device.GetValue<DeviceDBName, short>(DeviceDBName.R_RunMode);
                    oHTReadData.R_RunState = device.GetValue<DeviceDBName, short>(DeviceDBName.R_RunState);
                    oHTReadData.R_AlarmCode = device.GetValue<DeviceDBName, short>(DeviceDBName.R_AlarmCode);
                    oHTReadData.R_TaskState = device.GetValue<DeviceDBName, short>(DeviceDBName.R_TaskState);
                    oHTReadData.R_CurrentLine = device.GetValue<DeviceDBName, int>(DeviceDBName.R_CurrentLine);
                    oHTReadData.R_CurrentColumn = device.GetValue<DeviceDBName, int>(DeviceDBName.R_CurrentColumn);
                    oHTReadData.R_RiseUp_Position = device.GetValue<DeviceDBName, int>(DeviceDBName.R_RiseUp_Position);
                    oHTReadData.R_TaskNumber = device.GetValue<DeviceDBName, int>(DeviceDBName.R_TaskNumber);
                    oHTReadData.R_Loaded_1 = device.GetValue<DeviceDBName, short>(DeviceDBName.R_Loaded_1);
                    oHTReadData.R_Loaded_2 = device.GetValue<DeviceDBName, short>(DeviceDBName.R_Loaded_2);
                    oHTReadData.weight = device.GetValue<DeviceDBName, float>(DeviceDBName.weight);
                    #region æµ‹è¯•用
                    //oHTReadData.R_HeartBeat = 1;
                    //oHTReadData.R_RunMode = 2;
                    //oHTReadData.R_RunState = 3;
                    //oHTReadData.R_AlarmCode = 4;
                    //oHTReadData.R_TaskState = 5;
                    //oHTReadData.R_CurrentLine = 6;
                    //oHTReadData.R_CurrentColumn = 7;
                    //oHTReadData.R_RiseUp_Position = 8;
                    //oHTReadData.R_TaskNumber = 9;
                    //oHTReadData.R_Loaded_1 =10;
                    //oHTReadData.R_Loaded_2 = 11;
                    //oHTReadData.R_Code_1 = "12";
                    //oHTReadData.R_Code_2 = "13";
                    //oHTReadData.R_Load_Requst_1 =true;
                    //oHTReadData.R_Load_Requst_2 = false;
                    #endregion
                    #endregion
                    //状态数据发送给前端
                    string ohtData = JsonConvert.SerializeObject(oHTReadData);
                    _webSocketServer.PublishAllClientPayload(ohtData);
                    #region å¤©è½¦å®Œæˆä»»åŠ¡é€»è¾‘
                    //因为天的任务需要分段发送,所以取货完成与放货完成需要单独做逻辑控制
                    //判断天车当前有没有取货完成任务信号
@@ -127,6 +95,14 @@
                                }
                            }
                        }
                        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;
                    }
                    else if (oHTReadData.R_RunState == (int)RunStateEnum.PutCompleted && oHTReadData.R_TaskState == (int)TaskStateEnum.TaskComplete)
@@ -142,7 +118,7 @@
                    #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)
                        {
@@ -152,6 +128,8 @@
                                OHTTaskCommand? oHTTaskCommand = ConvertToOHTTaskCommand(task);
                                if (oHTTaskCommand != null)
                                {
                                    //给天车下发任务之前将此值写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);
@@ -181,7 +159,7 @@
                }
                catch (Exception ex)
                {
                    WriteError(device.DeviceName, "错误", ex);
                    _ErrormsginfoService.UpdateErrorMsg(ex.Message,1);
                }
            }
            return Task.CompletedTask;
@@ -215,7 +193,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)
            {
@@ -234,7 +212,7 @@
                    _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]);
            }
            
            if (task.WMSId==1)
@@ -255,8 +233,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;
        }
@@ -280,6 +258,17 @@
                    InorOut = "In";
                }
            }
            else
            {
                if (workType.Equals("In"))
                {
                    InorOut = "Out";
                }
                else
                {
                    InorOut = "In";
                }
            }
            return task;
        }
    }