| 2026-03-21 | yanjinhui | ![]() |
| 2026-03-21 | yanjinhui | ![]() |
| 2026-03-21 | dengjunjie | ![]() |
| 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HoistEnum.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/HKTaskMethods.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskMethods.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TSJJob.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 项目资料/与设备交互接口/高普PLC-WCS通讯变量表.xlsx | 补丁 | 查看 | 原始文档 | blame | 历史 |
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HoistEnum.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,78 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WIDESEAWCS_Common { public enum HoistEnum { /// <summary> /// 3æ¥¼å ¥åºç®±å· /// </summary> Inboxnumber, /// <summary> /// 3æ¥¼å ¥åºç¹æç®±æ/æ /// </summary> OutboundInplace, /// <summary> /// 3楼åºåºæç®±å°ä½ /// </summary> SOutboundmaterialbox, /// <summary> /// 3楼åºåºæç®±ç¼åæ°é /// </summary> Outboundmaterialbox, /// <summary> /// 4æ¥¼ç©ºç®±ç®±å· /// </summary> Emptycontainernumber, /// <summary> /// 4楼åç®±æç®±æ/æ /// </summary> ReturnbinAvailable, /// <summary> /// 4楼åºåºæç®±å°ä½ /// </summary> FOutboundmaterialbox, /// <summary> /// 设å¤ç¶æ /// </summary> EquipmentStatus, /// <summary> /// 3楼读ç 触å /// </summary> Codereadingtriggered, /// <summary> /// 3æ¥¼å ¥åºç®±æ¾å°ä½ /// </summary> Inboundboxon, /// <summary> /// 3楼åºåºç®±å宿 /// </summary> Outboundboxon, /// <summary> /// 4楼空箱æ¾å°ä½ /// </summary> Emptyboxplacedinposition, /// <summary> /// 4楼åºåºåç®±å®æ /// </summary> Outboundboxretrievalcompleted, } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs
@@ -102,9 +102,9 @@ [Description("AGVå¾ ç»§ç»æ§è¡")] AGV_WaitToExecute, /// <summary> /// AGVè¿å ¥è¾é线å£ä¸ /// AGVè¿å ¥ä¸ /// </summary> [Description("AGVè¿å ¥è¾é线å£ä¸")] [Description("AGVè¿å ¥ä¸")] AGV_ToExecute, /// <summary> /// æçå·ç¡®è®¤ä¸ ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs
@@ -36,6 +36,7 @@ using Microsoft.VisualBasic; using System.Web; using WIDESEAWCS_DTO.RGV.FOURBOT; using WIDESEAWCS_DTO.AGV.HIKROBOT; namespace WIDESEAWCS_ITaskInfoService { @@ -296,5 +297,14 @@ /// </summary> /// <returns></returns> WebResponseContent multiSetNodeStatus(FOURBOTStorageStatusNotify fOURBOTStorageStatusNotify); /// <summary> /// 海康AGVä»»å¡ç»§ç»æ§è¡ /// </summary> /// <param name="TaskCode">ä»»å¡å·</param> /// <returns></returns> WebResponseContent Hikvisiontaskscontinue(string TaskCode, string Address=null); } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/HKTaskMethods.cs
@@ -13,6 +13,7 @@ using WIDESEAWCS_DTO; using WIDESEAWCS_DTO.AGV.HIKROBOT; using System.Diagnostics.CodeAnalysis; using System.Reflection.PortableExecutable; namespace WIDESEAWCS_TaskInfoService { @@ -322,5 +323,65 @@ } return hIKROBOTTaskSubmit; } /// <summary> /// 海康AGVä»»å¡ç»§ç»æ§è¡ /// </summary> /// <param name="TaskCode">ä»»å¡å·</param> /// <returns></returns> public WebResponseContent Hikvisiontaskscontinue(string TaskCode,string Address=null) { WebResponseContent content = new WebResponseContent(); HIKROBOTReturn hIKROBOTReturn = null; HIKROBOTTaskContinue hIKROBOTTaskContinue =null; try { // 1. åæ°éªè¯ if (string.IsNullOrWhiteSpace(TaskCode)) { throw new Exception("ä»»å¡ç¼ç ä¸è½ä¸ºç©º"); } Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(HIKROBOTTaskContinue)) ?? throw new Exception("æªæ¾å°æµ·åº·AGVç»§ç»æ§è¡æ¥å£é 置信æ¯ï¼è¯·æ£æ¥æ¥å£é ç½®"); hIKROBOTTaskContinue = new HIKROBOTTaskContinue() { triggerCode = TaskCode, triggerType="TASK",//åºå®å¼ targetRoute=string.IsNullOrEmpty(Address)?null: new TargetRouteDto() { code = Address, type = "SITE", } }; var headers = new Dictionary<string, string> { { "X-lr-request-id", DateTimeOffset.Now.ToUnixTimeSeconds().ToString() } }; string response = HttpHelper.Post(apiInfo.ApiAddress, hIKROBOTTaskContinue.Serialize(),headers: headers); hIKROBOTReturn = response.DeserializeObject<HIKROBOTReturn>(); if (hIKROBOTReturn.code == "SUCCESS") { var data = hIKROBOTReturn.data.ToString().DeserializeObject<HIKROBOTReturnData>(); content.OK(data: data); } else { throw new Exception(hIKROBOTReturn.message); } } catch (Exception ex) { content.Error(ex.Message); } finally { _trackloginfoService.AddTrackLog(hIKROBOTTaskContinue, content, "海康AGVç»§ç»æ§è¡ä»»å¡", "", hIKROBOTReturn.message); } return content; } } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskMethods.cs
@@ -80,19 +80,51 @@ task.TaskState = (int)TaskStatusEnum.Takeing; TaskFeedback(task, 1); break; case "outbin": case "outbin"://离å¼èµ·ç¹ { if (task.TaskType == TaskTypeEnum.CK3F.ObjToInt() && task.TaskState == (int)TaskStatusEnum.AGV_ToExecute) { var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ") as OtherDevice; if (device == null) task.ExceptionMessage = "æªæ¾å°æåæºä¿¡æ¯"; else { if (device.IsConnected) device.SetValue(HoistEnum.Outboundboxon, 1); else task.ExceptionMessage = "æåæºä¿¡æ¯è®¾å¤è¿æ¥å¤±è´¥"; } } ///夿任塿¯å¦è·è®¾å¤æå ³ TaskFromCompleted(task, deviceTypeEnum); } break; case "into"://ç³è¯·è¿å ¥æåæº { task.TaskState = (int)TaskStatusEnum.AGV_WaitToExecute; BaseDal.UpdateData(task); } break; case "wait"://æ«ç çå¾ { task.TaskState = (int)TaskStatusEnum.CheckPalletCodeing; BaseDal.UpdateData(task); } break; case "end": case "end"://ä»»å¡å®æéç¥ { ///夿任塿¯å¦è·è®¾å¤æå ³ if(task.TaskType== TaskTypeEnum.RK3F.ObjToInt()&& task.TaskState == (int)TaskStatusEnum.CheckPalletCodeFinish) { var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ") as OtherDevice; if (device == null) task.ExceptionMessage = "æªæ¾å°æåæºä¿¡æ¯"; else { if (device.IsConnected) device.SetValue(HoistEnum.Inboundboxon,1); else task.ExceptionMessage = "æåæºä¿¡æ¯è®¾å¤è¿æ¥å¤±è´¥"; } } TaskCompleted(task, deviceTypeEnum); } break; @@ -465,5 +497,9 @@ return content; } #endregion } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -1137,7 +1137,17 @@ } else if (getLocationInfo.WarehouseId == 3) { //è¿éæ¯æåæºç var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ") as OtherDevice; if (device == null) throw new Exception("æªæ¾å°æåæºè®¾å¤ä¿¡æ¯"); if (!device.IsConnected) throw new Exception("PLC1æåæºè®¾å¤è¿æ¥å¤±è´¥"); var value = device.GetValue<HoistEnum, short>(HoistEnum.Outboundmaterialbox, "TSJ"); list.Add(new { LoctionCode = value, LocationStatus = value!=0? 100 : 0, EnableStatus = 0, }); } else if (getLocationInfo.WarehouseId == 4) { ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TSJJob.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,212 @@ using Autofac.Core; using HslCommunication; using HslCommunication.Core; using Microsoft.VisualBasic.FileIO; using OfficeOpenXml.FormulaParsing.Excel.Functions.Information; using Quartz; using SixLabors.ImageSharp; using SixLabors.ImageSharp.PixelFormats; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Common; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Communicator; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_IBasicInfoService; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; using WIDESEAWCS_QuartzJob.DeviceBase; using WIDESEAWCS_QuartzJob.DTO; using WIDESEAWCS_QuartzJob.StackerCrane.Enum; using WIDESEAWCS_TaskInfoService; namespace WIDESEAWCS_Tasks { [DisallowConcurrentExecution] public class TSJJob : JobBase, IJob { private readonly ITaskService _taskService; private readonly IStationMangerService _stationMangerService; public TSJJob(ITaskService taskService, IStationMangerService stationMangerService) { _taskService = taskService;//æ³¨å ¥ _stationMangerService = stationMangerService; } public Task Execute(IJobExecutionContext context) { bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value); if (flag && value != null) { OtherDevice device = (OtherDevice)value; //Example //device.GetValue 读å //device.SetValue åå ¥ // _taskService.Repository ä»å¨å±ï¼è¿è¡æ°æ®åºè®¿é®- try { List<Dt_Task> Uptasks = new List<Dt_Task>(); //æ¥è¯¢ææä»»å¡ç±»å为3,4楼çå ¥åºä»»å¡ç±»åä¸ä»»å¡ç¶æä¸ºAGV_WaitToExecuteçä»»å¡ var taskList = _taskService.Repository.QueryData(x => x.TaskState == TaskStatusEnum.AGV_WaitToExecute.ObjToInt()); //ä»»å¡çç®æ å°å对äºç«å°å·ï¼ foreach (var task in taskList) { //å æ£æ¥è®¾å¤ç¶æ if (device.GetValue<HoistEnum, short>(HoistEnum.EquipmentStatus, "TSJ") == 2) { if (task.ExceptionMessage == "æåæºè®¾å¤æ é") { continue; } task.ExceptionMessage = "æåæºè®¾å¤æ é"; Uptasks.Add(task); continue; //throw new Exception("è®¾å¤æ é"); } if (task.TaskType == TaskTypeEnum.RK3F.ObjToInt()) { //夿3æ¥¼å ¥åºç®±å·ææ if (device.GetValue<HoistEnum, string>(HoistEnum.OutboundInplace, "TSJ") == "1") { if (task.ExceptionMessage == "3æ¥¼å ¥åºç®±å·æè´§ï¼è¯·å å¤ç") { continue; } task.ExceptionMessage = "3æ¥¼å ¥åºç®±å·æè´§ï¼è¯·å å¤ç"; Uptasks.Add(task); continue; } //ç¶åè°ç¨è¾é线æ¥å£ï¼éç¥è¾é线ææç®±éè¦å ¥åºï¼ä»»å¡ä¸¾è¡æ§è¡ var result = _taskService.Hikvisiontaskscontinue(task.WMSTaskNum); if (result.Status == false) { if (task.ExceptionMessage!= result.Message) { task.ExceptionMessage = result.Message; Uptasks.Add(task); } continue; } task.TaskState = (int)TaskStatusEnum.AGV_ToExecute; task.ExceptionMessage = ""; Uptasks.Add(task); //è¿éä»»å¡åæäºCheckPalletCodeing } else if(task.TaskType == TaskTypeEnum.CK3F.ObjToInt()) //åºåº { ////åºåºæç®±ç¼åæ°é(è¿ä¸ªæ¯åºåºæ¥è¯¢çæ¶åè¦æ¥ä¸ä¸ï¼è¿ç»wms) //if (device.GetValue<HoistEnum, short>(HoistEnum.Outboundmaterialbox, "TSJ") == 0) throw new Exception("没æåºåºæç®±ç¼åæ°é为空"); //读å3楼åºåºæç®±å°ä½ if (device.GetValue<HoistEnum, short>(HoistEnum.SOutboundmaterialbox, "TSJ") != 1) { if (task.ExceptionMessage != "3楼åºåºæç®±æ²¡æå°ä½") { task.ExceptionMessage = "3楼åºåºæç®±æ²¡æå°ä½"; Uptasks.Add(task); } continue; } //ç¶åè°ç¨è¾é线æ¥å£ï¼éç¥è¾é线ææç®±éè¦å ¥åºï¼ä»»å¡ä¸¾è¡æ§è¡ var result = _taskService.Hikvisiontaskscontinue(task.WMSTaskNum); if (result.Status == false) { if (task.ExceptionMessage != result.Message) { task.ExceptionMessage = result.Message; Uptasks.Add(task); } continue; } task.TaskState = (int)TaskStatusEnum.AGV_ToExecute; Uptasks.Add(task); } else if (task.TaskType == TaskTypeEnum.Q1TSJ4.ObjToInt())//4æ¥¼å ¥åº { //åç©ºç®±çæ¶åè¦è¯»ä¸ä¸ªå if (device.GetValue<HoistEnum, short>(HoistEnum.Emptycontainernumber, "TSJ") == null) throw new Exception($"4楼空箱,读ç 卿²¡æè¯»å°å¼"); //夿4楼空箱å°ä½ if (device.GetValue<HoistEnum, short>(HoistEnum.ReturnbinAvailable, "TSJ") == 2) throw new Exception("4楼åæç®±ä¸ºç©º"); if (_taskService.Hikvisiontaskscontinue(task.WMSTaskNum).Status == false) throw new Exception($"3楼åºåºä»»å¡ä¸¾è¡æ§è¡å¤±è´¥ï¼é误信æ¯{_taskService.Hikvisiontaskscontinue(task.WMSTaskNum).Message}");//ç»ä»»å¡å· //åå ¥ç©ºç®±æ¾å°ä½ä¿¡å· device.SetValue(HoistEnum.Emptyboxplacedinposition, "TSJ", "1"); } else if (task.TaskType == TaskTypeEnum.CHUKU1.ObjToInt()) //忥¼åºå å°æåæº { //4楼åºåºæç®±å°ä½ if (device.GetValue<HoistEnum, short>(HoistEnum.FOutboundmaterialbox,"TSJ") == 2) throw new Exception("4楼åºåºæç®±æ²¡æå°ä½"); //å以ä¸ä¸ªåºåºå®æä¿¡å· device.SetValue(HoistEnum.Outboundboxretrievalcompleted, "TSJ", "1"); } } //æ¥æ¾ä¸æ¥¼å ¥åºä»»å¡ç¶æä¸ºCheckPalletCodeingç任塿çå·ç¡®è®¤ä¸ var RK3FTasks = _taskService.Repository.QueryFirst(x => x.TaskType == TaskTypeEnum.RK3F.ObjToInt() && x.TaskState == (int)TaskStatusEnum.CheckPalletCodeing); if (RK3FTasks!=null) { var Barcode = device.SetValue<HoistEnum, short>(HoistEnum.Codereadingtriggered, 1); //æ£æ¥3æ¥¼å ¥åºç®±å·æ¯å¤å°ï¼ç¶åä¼ ç»wms var BinNumber = device.GetValue<HoistEnum, string>(HoistEnum.Inboxnumber, "TSJ"); //æ ¹æ®è¯»å°çç®±å·è¿è¡æç®±æ£éªï¼æ£éªéè¿å°±è§¦å读ç å¨è¯»åï¼å¦æä¸éè¿å°±æåºå¼å¸¸ var Verification = _taskService.MaterialBoxInspection(RK3FTasks.WMSTaskNum, BinNumber.ToString()); if (!Verification.Status) { if (!(RK3FTasks.ExceptionMessage == Verification.Message)) { RK3FTasks.ExceptionMessage = Verification.Message; Uptasks.Add(RK3FTasks); } //æç®±éªè¯å好åï¼éè¦æ´æ¹ RK3FTasks.TargetAddress = Verification.Data.ToString(); } //妿æç®±æ£éªæåå°±åå ¥è¯»ç å¨çå¼ var result = _taskService.Hikvisiontaskscontinue(RK3FTasks.WMSTaskNum, RK3FTasks.TargetAddress); if (result.Status == false) { if (RK3FTasks.ExceptionMessage != result.Message) { RK3FTasks.ExceptionMessage = result.Message; Uptasks.Add(RK3FTasks); } } RK3FTasks.TaskState = (int)TaskStatusEnum.CheckPalletCodeFinish; Uptasks.Add(RK3FTasks); } if (Uptasks.Count > 0) { _taskService.UpdateData(Uptasks); } WriteInfo(device.DeviceName, "infoLog"); WriteDebug(device.DeviceName, "debugLog"); } catch (Exception ex) { WriteError(device.DeviceName, "é误", ex); } } else { WriteError(nameof(TestJob), "åæ°é误,æªä¼ é设å¤åæ°æè®¾å¤ç±»åé误"); } return Task.CompletedTask; } } } ÏîÄ¿×ÊÁÏ/ÓëÉ豸½»»¥½Ó¿Ú/¸ßÆÕPLC-WCSͨѶ±äÁ¿±í.xlsxBinary files differ