From 73e0e7c3886bc88e7ed37db24d28d8f6d159f1c0 Mon Sep 17 00:00:00 2001 From: qinchulong <qinchulong@hnkhzn.com> Date: 星期六, 08 三月 2025 18:57:10 +0800 Subject: [PATCH] 优先级修改 --- 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/OHT/OHTJob.cs | 311 ++++++++++++++++++++++++++++++--------------------- 1 files changed, 183 insertions(+), 128 deletions(-) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/OHT/OHTJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/OHT/OHTJob.cs" index db1ebc6..4f6742d 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/OHT/OHTJob.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/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; @@ -31,93 +32,66 @@ [DisallowConcurrentExecution] 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; + //鏁村舰鏈篜LC瀵硅薄 + var ZXJdevice = Storage.Devices.Find(v => v.DeviceName == "闃虫瀬鏁村舰鏈�"); + //瑙勬暣鏈篜LC瀵硅薄 + 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 澶╄溅瀹屾垚浠诲姟閫昏緫 //鍥犱负澶╃殑浠诲姟闇�瑕佸垎娈靛彂閫侊紝鎵�浠ュ彇璐у畬鎴愪笌鏀捐揣瀹屾垚闇�瑕佸崟鐙仛閫昏緫鎺у埗 //鍒ゆ柇澶╄溅褰撳墠鏈夋病鏈夊彇璐у畬鎴愪换鍔′俊鍙� - if (oHTReadData.R_RunState == (int)RunStateEnum.PickUpCompleted && oHTReadData.R_TaskState==(int)TaskStateEnum.TaskComplete) + if (oHTReadData.R_RunState == (int)RunStateEnum.PickUpCompleted && oHTReadData.R_TaskState == (int)TaskStateEnum.TaskComplete) { //澶╄溅鍙栬揣瀹屾垚閫昏緫 var nawtask = _taskService.QueryTakNnmTask(oHTReadData.R_TaskNumber); - if (nawtask==null) + if (nawtask == null) { - throw new Exception(string.Format("澶╄溅鍙栬揣瀹屾垚浠诲姟鏈煡璇㈠埌浠诲姟鍙穥0}",oHTReadData.R_TaskNumber)); + throw new Exception(string.Format("澶╄溅鍙栬揣瀹屾垚浠诲姟鏈煡璇㈠埌浠诲姟鍙穥0}", oHTReadData.R_TaskNumber)); } - if (nawtask.TaskType== (int)TaskInboundTypeEnum.Inbound) + //鍏ュ簱 + if (nawtask.TaskType == (int)TaskInboundTypeEnum.Inbound) { - //濡傛灉浠诲姟鐨勭姸鎬佹槸澶╄溅鍏ュ簱鍙栬揣鎵ц涓� - if (nawtask.TaskState==(int)TaskInStatusEnum.Line_InGrabExecuting) + //濡傛灉浠诲姟鐨勭姸鎬佹槸鍚︽槸澶╄溅鍏ュ簱鍙栬揣鎵ц涓� + if (nawtask.TaskState == (int)TaskInStatusEnum.Line_InGrabExecuting) { - WebResponseContent result=_taskService.UpdateTaskStatusToLine_Ingrab(nawtask); - if (result.Status) + //淇敼鐘舵�� + WebResponseContent result = _taskService.UpdateTaskStatusToLine_Ingrab(nawtask); + if (result.Status) { device.SetValue(DeviceDBName.W_ConfirmSignal, 3); } } } + //鍑哄簱 else if (nawtask.TaskType == (int)TaskOutboundTypeEnum.Outbound) { - //濡傛灉浠诲姟鐘舵�佹槸澶╄溅鍑哄簱鍙栬揣鎵ц涓� + //濡傛灉浠诲姟鐘舵�佹槸鍚︽槸澶╄溅鍑哄簱鍙栬揣鎵ц涓� if (nawtask.TaskState == (int)TaskOutStatusEnum.Line_OutGrabExecuting) { + //淇敼鐘舵�� WebResponseContent result = _taskService.UpdateTaskStatusToLine_Outgrab(nawtask); if (result.Status) { @@ -125,75 +99,90 @@ } } } + //鐩存帴鍑哄簱 + 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) { //澶╄溅鏀捐揣瀹屾垚閫昏緫 - var nawtask = _taskService.QueryTakNnmTask(oHTReadData.R_TaskNumber); - if (nawtask == null) + WebResponseContent result = _taskService.StackCraneTaskCompleted(oHTReadData.R_TaskNumber, oHTReadData.weight); + if (result.Status) { - throw new Exception(string.Format("澶╄溅鏀捐揣瀹屾垚浠诲姟鏈煡璇㈠埌浠诲姟鍙穥0}", oHTReadData.R_TaskNumber)); + device.SetValue(DeviceDBName.W_ConfirmSignal, 3); } - if (nawtask.TaskType == (int)TaskInboundTypeEnum.Inbound) - { - - } - else if (nawtask.TaskType == (int)TaskOutboundTypeEnum.Outbound) - { - - } + 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 - - if (oHTReadData.R_RunMode == (int)RunModeEnum.Automatic && oHTReadData.R_AlarmCode == (int)AlarmCodeEnum.Normal) + #region 澶╄溅鍙戦�佷换鍔¢�昏緫 + if (oHTReadData.R_RunMode == (int)RunModeEnum.Automatic) { if (oHTReadData.R_RunState == (int)RunStateEnum.Standby) { - Dt_Task? task = GetTask(); - 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_Pick_Layer, oHTTaskCommand.W_Pick_Layer); - device.SetValue(DeviceDBName.W_Put_Line, oHTTaskCommand.W_Put_Line); - device.SetValue(DeviceDBName.W_Put_Column, oHTTaskCommand.W_Put_Column); - device.SetValue(DeviceDBName.W_Put_Layer, oHTTaskCommand.W_Put_Layer); - 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_TaskNumber, oHTTaskCommand.W_TaskNumber); - device.SetValue(DeviceDBName.W_CheckValue, oHTTaskCommand.W_CheckValue); - //纭淇″彿鍐欏叆1锛屼换鍔′笅杈惧畬鎴� - device.SetValue(DeviceDBName.W_ConfirmSignal, 1); - //WCS妫�娴嬪埌澶╄溅鐨凴_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妫�娴嬪埌澶╄溅鐨凴_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); } } - } - } - } - WriteInfo(device.DeviceName, "infoLog"); - - WriteDebug(device.DeviceName, "debugLog"); + #endregion } catch (Exception ex) { - WriteError(device.DeviceName, "閿欒", ex); + _ErrormsginfoService.UpdateErrorMsg(ex.Message, 1); } } - - return Task.CompletedTask; } @@ -208,36 +197,84 @@ { OHTTaskCommand oHtTaskCommand = new OHTTaskCommand(); - oHtTaskCommand.W_Task_Type = 1; - oHtTaskCommand.W_Load_Layer = 0; - oHtTaskCommand.W_Pick_Line = 1; - - string[] SourceCodes = task.SourceAddress.Split("-"); - if (SourceCodes.Length == 3) + if (task.TaskState == (int)TaskInStatusEnum.InNew || task.TaskState == (int)TaskOutStatusEnum.OutNew) { - oHtTaskCommand.W_Pick_Line = Convert.ToInt16(SourceCodes[1]); - oHtTaskCommand.W_Put_Column = Convert.ToInt16(SourceCodes[2]); - oHtTaskCommand.W_Put_Layer = Convert.ToInt16(SourceCodes[3]); + oHtTaskCommand.W_Task_Type = 2; + string[] SourceCodes = task.SourceAddress.Split("-"); + if (SourceCodes.Length == 3) + { + 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; + } + else + { + //鏁版嵁閰嶇疆閿欒 + _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"浠诲姟婧愬湴鍧�閰嶇疆閿欒锛�"); + return null; + } + oHtTaskCommand.W_CheckValue = 2 + Convert.ToInt16(SourceCodes[0]) + Convert.ToInt16(SourceCodes[1]); } - else + else if (task.TaskState == (int)TaskInStatusEnum.Line_Ingrab || task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting) { - //鏁版嵁閰嶇疆閿欒 - _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"浠诲姟婧愬湴鍧�閰嶇疆閿欒锛�"); - return null; + oHtTaskCommand.W_Task_Type = 3; + 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 = 3 + Convert.ToInt16(SourceCodes[0]) + Convert.ToInt16(SourceCodes[1]); } - string[] targetCodes = task.TargetAddress.Split("-"); - if (targetCodes.Length == 3) + else if(task.TaskState == (int)TaskMoveStatusEnum.OutNewMove ) { - oHtTaskCommand.W_Put_Line = Convert.ToInt16(targetCodes[1]); - oHtTaskCommand.W_Put_Column = Convert.ToInt16(targetCodes[2]); - oHtTaskCommand.W_Put_Layer = Convert.ToInt16(targetCodes[3]); + 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]); } - else + + if (task.WMSId==1) { - //鏁版嵁閰嶇疆閿欒 - _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"浠诲姟鐩爣鍦板潃閰嶇疆閿欒"); - return null; + oHtTaskCommand.W_Catch_1 = 1; + oHtTaskCommand.W_Catch_2 = 0; + oHtTaskCommand.W_CheckValue += 1; } + else if (task.WMSId == 2) + { + oHtTaskCommand.W_Catch_1 = 0; + oHtTaskCommand.W_Catch_2 = 1; + oHtTaskCommand.W_CheckValue += 1; + } + else if (task.WMSId == 3) + { + oHtTaskCommand.W_Catch_1 = 1; + oHtTaskCommand.W_Catch_2 = 1; + oHtTaskCommand.W_CheckValue += 2; + } + oHtTaskCommand.W_TaskNumber = task.TaskId; + oHtTaskCommand.W_CheckValue += task.TaskId; return oHtTaskCommand; } @@ -246,15 +283,33 @@ /// 鑾峰彇浠诲姟 /// </summary> /// <returns></returns> - private Dt_Task? GetTask() + private Dt_Task? GetTask(string workType) { Dt_Task task; - task = _taskService.QueryStackerCraneTask("R01"); + task = _taskService.QueryStackerCraneTask(workType); + if (task!=null && (task.TaskState==(int)TaskInStatusEnum.InNew|| task.TaskState == (int)TaskOutStatusEnum.OutNew)) + { + if (task.TaskType == (int)TaskInboundTypeEnum.Inbound) + { + InorOut = "Out"; + } + else + { + InorOut = "In"; + } + } + else + { + if (workType.Equals("In")) + { + InorOut = "Out"; + } + else + { + InorOut = "In"; + } + } return task; } - - } - - } -- Gitblit v1.9.3