From 06eb604f71605c47f015b88b1620b72b6f69df8c Mon Sep 17 00:00:00 2001 From: helongyang <647556386@qq.com> Date: 星期一, 22 九月 2025 05:20:41 +0800 Subject: [PATCH] 功能增加,代码优化 --- 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/板材仓/StackerCraneJob_BC.cs | 47 +++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 41 insertions(+), 6 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/StackerCraneJob_BC.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/StackerCraneJob_BC.cs" index 4056894..6e7ce35 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/StackerCraneJob_BC.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/StackerCraneJob_BC.cs" @@ -31,6 +31,9 @@ using Autofac.Core; using WIDESEAWCS_DTO.TaskInfo; using AutoMapper; +using WIDESEAWCS_Tasks.鏉挎潗浠�; +using HslCommunication.WebSocket; +using WIDESEAWCS_Tasks.娴嬭瘯鏋朵粨; namespace WIDESEAWCS_Tasks { @@ -45,10 +48,12 @@ private readonly IRouterService _routerService; private readonly IStationMangerRepository _stationMangerRepository; private readonly IRouterRepository _routerRepository; + public static BCReadData bCReadData = new BCReadData(); private List<Dt_ApiInfo> apiInfos; private readonly List<Dt_WarehouseDevice> warehouseDevices; + private WebSocketServer _webSocketServer; - public StackerCraneJob_BC(IMapper mapper, ITaskService taskService, ICacheService cacheService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository) + public StackerCraneJob_BC(IMapper mapper, ITaskService taskService, ICacheService cacheService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository,WebSocketServer webSocketServer) { _mapper = mapper; _taskService = taskService; @@ -58,6 +63,7 @@ _stationMangerRepository = stationMangerRepository; _cacheService = cacheService; _routerRepository = routerRepository; + _webSocketServer = webSocketServer; string? apiInfoStr = _cacheService.Get("apiInfos"); if (!string.IsNullOrEmpty(apiInfoStr)) @@ -107,6 +113,7 @@ commonStackerCrane.CheckStackerCraneTaskCompleted();//闃叉浠诲姟瀹屾垚浜嬩欢鐩戞祴瓒呮椂锛屽啀鎵嬪姩瑙﹀彂涓�娆� if (commonStackerCrane.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneStatusValue == StackerCraneStatus.Normal && commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby) { + Thread.Sleep(1000); Dt_Task? task = GetTask(commonStackerCrane); if (task != null) { @@ -126,6 +133,14 @@ } } } + bCReadData.R_BC_Status = ((short)commonStackerCrane.StackerCraneStatusValue); + bCReadData.R_BC_AutoStatus = ((short)commonStackerCrane.StackerCraneAutoStatusValue); + bCReadData.R_BC_WorkStatus = ((short)commonStackerCrane.StackerCraneWorkStatusValue); + bCReadData.R_BC_TaskNum = commonStackerCrane.CurrentTaskNum.ObjToInt(); + bCReadData.R_BC_WorkType = commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType); + bCReadData.R_BC_TrayType = commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.TrayType); + string bCData = JsonConvert.SerializeObject(bCReadData); + _webSocketServer.PublishAllClientPayload(bCData); } } catch (Exception ex) @@ -196,11 +211,15 @@ return WebResponseContent.Instance.Error($"鏈壘鍒拌矾鐢变俊鎭�,{task.NextAddress}"); } } - if (task.TargetAddress.Contains("SCUTL-001")) + if (task.TargetAddress.Contains("SCUTL-001")) //鑷姩涓�绾� { _taskService.UpdateTask(task, TaskStatusEnum.Line_Execute, deviceCode: stationManger.StationDeviceCode, currentAddress: stationManger.StationCode, nextAddress: router.NextPosi, targetAddress: router.NextPosi); } - else + else if (task.TargetAddress.Contains("SCUTL-002")) //鑷姩浜岀嚎 + { + _taskService.UpdateTask(task, TaskStatusEnum.Line_Execute, deviceCode: stationManger.StationDeviceCode, currentAddress: stationManger.StationCode, nextAddress: "1103", targetAddress: "1103"); + } + else //鎵嬪姩绾� { _taskService.UpdateTask(task, TaskStatusEnum.Line_Execute, deviceCode: stationManger.StationDeviceCode, currentAddress: stationManger.StationCode, nextAddress: "1102", targetAddress: "1102"); } @@ -248,7 +267,12 @@ //} } catch { } - + if (_taskRepository.QueryFirst(x => x.DeviceCode == commonStackerCrane.DeviceCode && x.TaskState==TaskStatusEnum.SC_Executing.ObjToInt())!=null) + { + return null; + } + + WriteDebug(commonStackerCrane.DeviceCode, $"璇诲彇鍒板綋鍓嶄换鍔″彿:{commonStackerCrane.CurrentTaskNum}"); Dt_Task task; if (commonStackerCrane.LastTaskType == null) { @@ -279,7 +303,7 @@ if (OutTaskStationIsOccupied(task) == null) { bool flag = false; - List<string> otherOutStaionCodes = _routerService.QueryNextRoutes(commonStackerCrane.DeviceCode, task.NextAddress).Select(x => x.ChildPosi).ToList(); + List<string> otherOutStaionCodes = _routerService.QueryNextRoutes(commonStackerCrane.DeviceCode, task.NextAddress,task.TaskType).Select(x => x.ChildPosi).ToList(); List<Dt_Task> tasks = _taskService.QueryStackerCraneOutTasks(commonStackerCrane.DeviceCode, otherOutStaionCodes); foreach (var item in tasks) { @@ -340,10 +364,21 @@ Dt_Task reloTask = _mapper.Map<Dt_Task>(taskDTO); //鍒ゆ柇绉诲簱璐т綅浠诲姟鏄惁宸插瓨鍦紝濡傚瓨鍦ㄥ厛鎵ц Dt_Task existTask = _taskService.QueryStackerExistTask(reloTask.PalletCode, reloTask.SourceAddress); - if (existTask != null) + if (existTask != null && existTask.TaskState == (int)TaskStatusEnum.SC_Execute) { return existTask; } + else if (existTask != null && existTask.TaskState == (int)TaskStatusEnum.MesPending) //鍒ゆ柇鎸傝捣 + { + existTask.TaskState = TaskStatusEnum.SC_Execute.ObjToInt(); + task.TaskState=TaskStatusEnum.MesPending.ObjToInt(); + _taskRepository.UpdateData(existTask); + _taskRepository.UpdateData(task); + } + else if (existTask != null && existTask.TaskState != (int)TaskStatusEnum.SC_Execute && existTask.TaskState != (int)TaskStatusEnum.MesPending) + { + return null; + } else { reloTask.TaskState = TaskStatusEnum.SC_Execute.ObjToInt(); -- Gitblit v1.9.3