| | |
| | | [DisallowConcurrentExecution] |
| | | public class OHTJob : JobBase, IJob |
| | | { |
| | | public static string InorOut = "In"; |
| | | private readonly ITaskService _taskService; |
| | | WebSocketServer _webSocketServer; |
| | | public OHTJob(ITaskService taskService, WebSocketServer webSocketServer) |
| | |
| | | _taskService = taskService;//注å
¥ |
| | | _webSocketServer = webSocketServer; |
| | | } |
| | | |
| | | public Task Execute(IJobExecutionContext context) |
| | | { |
| | | |
| | |
| | | //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); |
| | |
| | | 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); |
| | | } |
| | |
| | | } |
| | | } |
| | | } |
| | | return Task.CompletedTask; |
| | | } |
| | | else if (oHTReadData.R_RunState == (int)RunStateEnum.PutCompleted && oHTReadData.R_TaskState == (int)TaskStateEnum.TaskComplete) |
| | | { |
| | | //天车æ¾è´§å®æé»è¾ |
| | | _taskService.StackCraneTaskCompleted(oHTReadData.R_TaskNumber); |
| | | 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_RunState == (int)RunStateEnum.Standby) |
| | | { |
| | | Dt_Task? task = GetTask(); |
| | | Dt_Task? task = GetTask(InorOut); |
| | | if (task != null) |
| | | { |
| | | OHTTaskCommand? oHTTaskCommand = ConvertToOHTTaskCommand(task); |
| | |
| | | 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); |
| | | 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.TaskNum, oHTTaskCommand.W_Task_Type); |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | WriteInfo(device.DeviceName, "infoLog"); |
| | | |
| | | WriteDebug(device.DeviceName, "debugLog"); |
| | | #endregion |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | WriteError(device.DeviceName, "é误", ex); |
| | | } |
| | | } |
| | | |
| | | |
| | | return Task.CompletedTask; |
| | | } |
| | | |
| | |
| | | { |
| | | 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 = task.TaskType + 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 = task.TaskType + Convert.ToInt16(SourceCodes[0]) + Convert.ToInt16(SourceCodes[1]); |
| | | } |
| | | string[] targetCodes = task.TargetAddress.Split("-"); |
| | | if (targetCodes.Length == 3) |
| | | |
| | | if (task.WMSId==1) |
| | | { |
| | | 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_Catch_1 = 1; |
| | | oHtTaskCommand.W_Catch_2 = 0; |
| | | oHtTaskCommand.W_CheckValue += 1; |
| | | } |
| | | else |
| | | else if (task.WMSId == 2) |
| | | { |
| | | //æ°æ®é
ç½®é误 |
| | | _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"ä»»å¡ç®æ å°åé
ç½®é误"); |
| | | return null; |
| | | 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.TaskNum; |
| | | oHtTaskCommand.W_CheckValue += task.TaskNum; |
| | | return oHtTaskCommand; |
| | | } |
| | | |
| | |
| | | /// è·åä»»å¡ |
| | | /// </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"; |
| | | } |
| | | } |
| | | return task; |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | } |