From d06e44eb1c8818c8d19709602631eb7888d4f0e9 Mon Sep 17 00:00:00 2001 From: chengsc <11752@DESKTOP-DS49RCP> Date: 星期二, 06 五月 2025 08:53:01 +0800 Subject: [PATCH] 修改程序,AGV交互 --- Admin.NET/WCS.Application/PLC/PLCService.cs | 456 ++++++++++++---- Admin.NET/WCS.Application/Service/WcsTask/WcsTaskService.cs | 10 Admin.NET/WCS.Application/Util/HttpService.cs | 227 ++++---- Admin.NET/WCS.Application/Entity/WcsTask.cs | 6 Admin.NET/WCS.Application/Model/AGVModel.cs | 138 +++++ Admin.NET/WCS.Application/OpenApi/OpenApi.cs | 205 ++----- Admin.NET/WCS.Application/Hub/HubUtil.cs | 10 Admin.NET/WCS.Application/PLC/PLCCommon.cs | 2 Admin.NET/WCS.Application/PLC/PLCTaskAction.cs | 98 +++ Admin.NET/WCS.Application/Enum/FourWayCarEnum.cs | 45 + Admin.NET/WCS.Application/Hub/PlcDeviceHub.cs | 4 Admin.NET/WCS.Application/Util/AGVStorageUtil.cs | 312 +---------- 12 files changed, 838 insertions(+), 675 deletions(-) diff --git a/Admin.NET/WCS.Application/Entity/WcsTask.cs b/Admin.NET/WCS.Application/Entity/WcsTask.cs index 3482a07..874d23d 100644 --- a/Admin.NET/WCS.Application/Entity/WcsTask.cs +++ b/Admin.NET/WCS.Application/Entity/WcsTask.cs @@ -188,5 +188,9 @@ /// </summary> public string? CarIp { get; set; } - + /// <summary> + /// 鏄惁瀹屾垚鍒嗘浠诲姟 鐢ㄤ簬灏忚溅鍒拌揪鎴愬搧鍏ュ簱鍙� 0/""/null 鏈畬鎴� 1瀹屾垚 + /// </summary> + public string? IsComple { get; set; } + } diff --git a/Admin.NET/WCS.Application/Enum/FourWayCarEnum.cs b/Admin.NET/WCS.Application/Enum/FourWayCarEnum.cs index b618686..69c2359 100644 --- a/Admin.NET/WCS.Application/Enum/FourWayCarEnum.cs +++ b/Admin.NET/WCS.Application/Enum/FourWayCarEnum.cs @@ -76,12 +76,53 @@ /// 鏋侀檺鐢甸噺 浣庝簬姝ょ數閲忎笉鎵ц浠诲姟 /// </summary> [Description("鏋侀檺鐢甸噺")] - Dl = 30, + Dl = 10, /// <summary> /// 鍋ュ悍鐢甸噺 浣庝簬姝ょ數閲� 涓旀棤浠诲姟鏃跺幓鍏呯數 /// </summary> [Description("鍋ュ悍鐢甸噺")] - Dl2 = 80, + Dl2 = 15, } + + +public class carConverModel +{ + + public Dictionary<string, string> conveyorNan = new Dictionary<string, string>(); + public Dictionary<string, string> conveyorBei = new Dictionary<string, string>(); + public Dictionary<string, string> conveyorRuKu = new Dictionary<string, string>(); + public carConverModel(){ + conveyorNan = new Dictionary<string, string>() + { + {"190601","13"}, + {"190602","15"}, + {"191201","14"}, + {"191202","16"} + }; + conveyorBei = new Dictionary<string, string>() + { + {"030401","2"}, + {"030402","6"}, + {"030601","3"}, + {"030602","7"}, + {"031201","5"}, + {"031202","8"}, + }; + conveyorRuKu = new Dictionary<string, string>() + { + {"190601","9"}, + {"190602","9"}, + {"191201","9"}, + {"191202","9"}, + + {"030401","17"}, + {"030402","17"}, + {"030601","18"}, + {"030602","18"}, + {"031201","18"}, + {"031202","18"}, + }; + } +} diff --git a/Admin.NET/WCS.Application/Hub/HubUtil.cs b/Admin.NET/WCS.Application/Hub/HubUtil.cs index fadebde..43064fc 100644 --- a/Admin.NET/WCS.Application/Hub/HubUtil.cs +++ b/Admin.NET/WCS.Application/Hub/HubUtil.cs @@ -83,11 +83,11 @@ /// </summary> /// <param name="context"></param> /// <returns></returns> - public static async Task PublicPlcDevice(WcsDeviceOutput context) - { - if (PLCTaskAction.boRefresh) - await _plcDeviceHubContext.Clients.All.PublicPlcDevice(context); - } + //public static async Task PublicPlcDevice(WcsDeviceOutput context) + //{ + // if (PLCTaskAction.boRefresh) + // await _plcDeviceHubContext.Clients.All.PublicPlcDevice(context); + //} /// <summary> /// 涓嬪彂鍒嗘嫞浠诲姟淇℃伅 diff --git a/Admin.NET/WCS.Application/Hub/PlcDeviceHub.cs b/Admin.NET/WCS.Application/Hub/PlcDeviceHub.cs index ad3ab15..917cda8 100644 --- a/Admin.NET/WCS.Application/Hub/PlcDeviceHub.cs +++ b/Admin.NET/WCS.Application/Hub/PlcDeviceHub.cs @@ -38,7 +38,7 @@ //寮�鍚鍙栨湇鍔$嚎绋� boRunningState = true; cts = new CancellationTokenSource();//鍙栨秷绾跨▼鏍囪瘑 - StartRead(); + //StartRead(); } await base.OnConnectedAsync(); } @@ -225,7 +225,7 @@ modDevice.PickStorey != initialState.PickStorey))) { // 閫氱煡鐢ㄦ埛鍙樻洿 - HubUtil.PublicPlcDevice(modDevice); + //HubUtil.PublicPlcDevice(modDevice); } } initialStates[modDevice.Id] = modDevice.Adapt<WcsDeviceOutput>(); diff --git a/Admin.NET/WCS.Application/Model/AGVModel.cs b/Admin.NET/WCS.Application/Model/AGVModel.cs index 0c46f23..42651d5 100644 --- a/Admin.NET/WCS.Application/Model/AGVModel.cs +++ b/Admin.NET/WCS.Application/Model/AGVModel.cs @@ -6,6 +6,144 @@ namespace WCS.Application { + + + #region JC34 + + /// <summary> + /// agv浠诲姟涓嬪彂model + /// </summary> + public class AgvTaskSend + { + /// <summary> + /// 澶栭儴浠诲姟鍞竴缂栧彿,濡傛灉涓虹┖锛岀郴缁熺敓鎴愪换鍔″彿骞惰繑鍥炪�� + /// </summary> + public string robotTaskCode { get; set; } + /// <summary> + /// 浠诲姟绫诲瀷 + /// </summary> + public string taskType { get; set; } + /// <summary> + /// 鎵ц姝ラ闆嗗悎銆傛湰娆′换鍔℃満鍣ㄤ汉闇�瑕佹墽琛岀殑鍏抽敭璺緞锛屽璐ф灦璧风偣 A 鑷冲嚭搴撳伐浣滃彴 B + /// </summary> + public List<targetRoute> targetRoute { get; set; } + /// <summary> + /// 浠诲姟鎵ц鐨勫垵濮嬩紭鍏堥『搴忥紝鏁板�艰秺澶э紝浼樺厛绾ц秺楂樸�備絾鏈哄櫒浜鸿皟搴︾郴缁熶細鏍规嵁浠诲姟绻佸繖绋嬪害锛屾満鍣ㄤ汉鐨勫伐浣滅姸鎬侊紝浠ュ強鍏朵粬浼樺厛绾т慨姝f潯浠讹紝杩涜缁煎悎鍒ゅ畾鍚庯紝瀹炴椂鍔ㄦ�佽皟鏁翠换鍔″疄闄呯殑浼樺厛绾ф暟鍊笺�傝寖鍥达細1~120 + /// </summary> + public int? initPriority { get; set; } + + /// <summary> + /// 鑷畾涔夋墿灞曞瓧娈碉紝鍙殢涓氬姟鐨勫樊寮傝�屼紶鍏ヤ笉鍚岀殑鎵╁睍鍐呭锛屽湪涓氬姟娴佺▼鐨勬墽琛屼腑浣跨敤 + /// </summary> + public extra extra { get; set; } + } + /// <summary> + /// 鎵ц姝ラ闆嗗悎銆傛湰娆′换鍔℃満鍣ㄤ汉闇�瑕佹墽琛岀殑鍏抽敭璺緞锛屽璐ф灦璧风偣 A 鑷冲嚭搴撳伐浣滃彴 B + /// </summary> + public class targetRoute + { + /// <summary> + /// 鐩爣璺緞搴忓垪銆備粠 0 寮�濮嬨�� + /// </summary> + public int seq { get; set; } + /// <summary> + /// 鐩爣绫诲瀷銆傚彲鎵╁睍鏋氫妇鍊笺�� + /// 棰勫埗鏋氫妇鍊硷細 + /// ZONE鐩爣鎵�澶勫尯鍩熺紪鍙� + /// SITE绔欑偣鍒悕 + /// STORAGE浠撲綅鍒悕 + /// MAT_LABEL鐗╂枡鏍囩 + /// CARRIER杞藉叿缂栧彿 + /// STACK宸烽亾缂栧彿 + /// STACK_LABEL宸烽亾鐗瑰緛鍊� + /// CHANNEL閫氶亾缂栧彿 + /// EQPT 澶栭儴璁惧 + /// PTL_WALL + /// CTU 缂撳瓨鏋� + /// CARRIER_TYPE杞藉叿绫诲瀷 + /// BIN_TYPE浠撲綅绫诲瀷 + /// AREA_STATION鍖哄煙宸ヤ綔鍙� + /// PILE_COUNT涓�娆℃惉鍑犱釜 + /// MIX_CONDITION鏉′欢缁勫悎 + /// DEGREE 鐑害 + /// MULTI_BIN_GROUP澶氭繁浣嶇粍鍙� + /// </summary> + public string type { get; set; } + /// <summary> + /// 鏈哄櫒浜哄埌杈剧洰鏍囦綅缃悗鐨勬搷浣溿�傚浗鏍囪姹傦紝 + /// 闈炲繀瑕併�傚 AMR 鍔ㄤ綔鏃犲奖鍝嶃�傚彲鎵╁睍鐨勬灇涓惧�笺�� + /// 棰勫埗鏋氫妇鍊硷細 + /// COLLECT鍙栬揣 + /// DELIVERY閫佽揣 + /// ROTATE鏃嬭浆 + /// </summary> + public string code { get; set; } + } + public class extra + { + /// <summary> + /// 杞藉叿鐨勪俊鎭紝鍖呭惈杞藉叿缂栧彿銆佸眰鍙枫�� + /// 浣跨敤鍦烘櫙锛� + /// 1.瑁呭嵏鏈烘垨杈撻�佺嚎涓撶敤 + /// 2.杞藉叿涓庣珯鐐规病鏈夌粦瀹氾紝浣嗛渶瑕佷紶鍏ヨ浇鍏风殑鍦烘櫙銆� + /// </summary> + public List<carrierInfo> carrierInfo { get; set; } + } + + public class carrierInfo + { + /// <summary> + /// 杞藉叿绫诲瀷 + /// </summary> + public string carrierType { get; set; } + /// <summary> + /// 杞藉叿缂栧彿 + /// </summary> + public string carrierCode { get; set; } + /// <summary> + /// 灞傚彿锛� 浠� 0 寮�濮嬨�佷粠涓嬪線涓婄紪鍙� + /// </summary> + public int layer { get; set; } + } + + /// <summary> + /// 杩斿洖瀹炰綋 + /// </summary> + public class ResponseAgvDto + { + /// <summary> + /// true 鎴愬姛 false 澶辫触 + /// </summary> + public bool success { get; set; } + /// <summary> + /// 杩斿洖鐮� + /// SUCCESS锛氭垚鍔� + /// FAIL锛氬け璐� + /// 鏄惁蹇呭~锛氭槸 + /// </summary> + public string code { get; set; } + + /// <summary> + /// 杩斿洖娑堟伅 + /// 鏄惁蹇呭~锛氭槸 + /// </summary> + public string message { get; set; } + + /// <summary> + /// 杩斿洖鐨勬暟鎹粨鏋� + /// 鏄惁蹇呭~锛氬惁 + /// </summary> + public data data { get; set; } + } + public class data + { + public string robotTaskCode { get; set; } + } + + + + #endregion + public class AGVApplyLockInput { /// <summary> diff --git a/Admin.NET/WCS.Application/OpenApi/OpenApi.cs b/Admin.NET/WCS.Application/OpenApi/OpenApi.cs index ee7aed5..cdf71f7 100644 --- a/Admin.NET/WCS.Application/OpenApi/OpenApi.cs +++ b/Admin.NET/WCS.Application/OpenApi/OpenApi.cs @@ -34,24 +34,29 @@ /// <param name="models">浠诲姟淇℃伅</param> /// <returns>鍙嶉淇℃伅</returns> [AllowAnonymous] - public async Task AddAssignTasks(ResponseTasksModel models) + public async Task<ResponseAgvDto> AddAssignTasks(AgvTaskSend models) { - // 楠岃瘉浠诲姟鏄惁宸插瓨鍦� - var taskInfo = await _db.Queryable<WcsTask>().FirstAsync(w => w.TaskNo == models.TaskNo); - if (taskInfo == null) - { - throw Oops.Bah("浠诲姟:" + models.TaskNo + ";涓嶅瓨鍦�!"); - } - var data1 = FourWayCarUtil.GetCarPath("091501", "091601","0"); - if (data1 == null) //|| data1.Count == 0 - { - throw Oops.Bah("鍒嗛厤璺緞涓嶅瓨鍦�!"); - } - // 鏍规嵁浠诲姟鐘舵�� 琛ュ厖璧峰缁撴潫鑺傜偣鐘舵�� - var data2 = FourWayCarUtil.GetCarPathUp(data1, 0); - var path = ""; - var executionPath1 = ""; + var response = await new HttpService().GenAgvSendTask(models); + //var response2 = await new HttpService().GenAgvContinueTask("Tk20250503000001"); + //var response3 = await new HttpService().GenAgvUnbind("models", "B010101"); + return response; + // 楠岃瘉浠诲姟鏄惁宸插瓨鍦� + //var taskInfo = await _db.Queryable<WcsTask>().FirstAsync(w => w.TaskNo == models.TaskNo); + //if (taskInfo == null) + //{ + // throw Oops.Bah("浠诲姟:" + models.TaskNo + ";涓嶅瓨鍦�!"); + //} + //var data1 = FourWayCarUtil.GetCarPath("091501", "091601","0"); + //if (data1 == null) //|| data1.Count == 0 + //{ + // throw Oops.Bah("鍒嗛厤璺緞涓嶅瓨鍦�!"); + //} + + //// 鏍规嵁浠诲姟鐘舵�� 琛ュ厖璧峰缁撴潫鑺傜偣鐘舵�� + //var data2 = FourWayCarUtil.GetCarPathUp(data1, 0); + //var path = ""; + //var executionPath1 = ""; //foreach (var item in data1) //{ // //璺緞鑺傜偣 @@ -425,35 +430,6 @@ { case "end"://浠诲姟瀹屾垚 { - - //璐у搧鎷夊埌瀵嗛泦搴撳叆搴撳彛闇�瑕佸悜杈撻�佺嚎鍐欏叆鍊� - if (modTask.EndLocate == AGVStaionEnum.A1.ToString()) - { - var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Text == "杈撻�佺嚎"); - var modConn = new PLCUtil(modPlc); - var modDevice = PLCTaskAction.plcDevices.First(s => s.Text == "C鍙�"); - var modStation = PLCTaskAction.plcPositions.First(s => s.Text == "C鍙g敵璇峰叆搴�"); - var plcResult = modConn.SetPlcDBValue(modStation.PosType, modDevice.DbNumber, modStation.PlcPos, "100"); - if (plcResult.IsSucceed) - { - WcsTaskMonitor modTaskMonitorPLC = new WcsTaskMonitor() - { - TaskNo = modTask.TaskNo, - PlcId = modDevice.PlcId, - PlcName = modStation.PlcPos, - StartLocat = modTask.StartLocate, - EndLocat = modTask.EndLocate, - Status = TaskStatusEnum.Doing, - InteractiveMsg = $"鍚憑modStation.Text}鍐欏叆鎸囦护100锛岀粨鏋渰plcResult.IsSucceed}", - }; - _db.Insertable(modTaskMonitorPLC).ExecuteCommand(); - HubUtil.PublicTaskMonitor(modTaskMonitorPLC.Adapt<WcsTaskMonitorOutput>()); - } - else - { - Log.Error("C鍙g敵璇峰叆搴撳啓鍏ュ��100澶辫触"); - } - } modTask.Status = TaskStatusEnum.Complete; modTask.FinishDate = DateTime.Now; await _db.Updateable(modTask).ExecuteCommandAsync(); @@ -477,14 +453,14 @@ var inputs = new TaskRequestWMS(); inputs.TaskNo = modTask.TaskNo; inputs.PalletNo = modTask.PalletNo; - inputs.TaskType = "2"; + inputs.TaskType = modTask.TaskType.ToString(); inputs.TaskStatus = "2"; var modResponseTask = httpService.RequestTask(inputs).Result; } } break; - case "outbin"://璧板嚭鍌ㄤ綅 + case "admin"://璧板嚭鍌ㄤ綅 { //鍙嶉WMS浠诲姟鍙栬揣瀹屾垚銆乄MS鍒ゆ柇鏄钩搴撳偍浣嶅氨鏇存柊鍌ㄤ綅鐘舵�� if (modTask.Origin == "WMS") @@ -500,67 +476,31 @@ } break; - case "apply"://鏀捐揣鐢宠 + case "continue"://鏀捐揣鐢宠 { - //todo:鍘荤爜鍨涘伐浣嶅彇璐э紝闇�瑕佸啓PLC淇″彿鍏抽棴鍏夊箷 - if ((modTask.StartLocate == AGVStaionEnum.B1.ToString() || modTask.StartLocate == AGVStaionEnum.B2.ToString()) - && (modTask.EndLocate == AGVStaionEnum.C1.ToString() || modTask.EndLocate == AGVStaionEnum.C2.ToString())) + if (modTask.EndLocate != "B010101")//9鍙峰伐浣嶅湴鍧� { - var no = modTask.StartLocate.Substring(1, 1); - var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Type == PLCTypeEnum.RobotPalletizer && s.WareHouseNo == no); - var modConn = new PLCUtil(modPlc); - var modDevice = PLCTaskAction.plcDevices.FirstOrDefault(s => s.PlcId == modPlc.Id && s.Level == DeviceLevelEnum.DB); - var modPos = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDevice.Id && s.Text == "鍏抽棴鍏夊箷"); - var res = modConn.SetPlcDBValue(modPos.PosType, modDevice.DbNumber, modPos.PlcPos, "1"); - var modTaskMonitor = new WcsTaskMonitor() - { - TaskNo = modTask.TaskNo, - PlcId = modDevice.PlcId, - PlcName = modPos.PlcPos, - Status = TaskStatusEnum.Doing, - InteractiveMsg = $"鍚憑modDevice.Text}鍐欏叆鍏抽棴鍏夊箷1锛岀粨鏋渰res.IsSucceed}", - }; - _db.Insertable(modTaskMonitor).ExecuteCommand(); - HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>()); - Task.Run(() => - { - Thread.Sleep(1000); - modConn.SetPlcDBValue(modPos.PosType, modDevice.DbNumber, modPos.PlcPos, "0"); - var modTaskMonitor = new WcsTaskMonitor() - { - TaskNo = modTask.TaskNo, - PlcId = modDevice.PlcId, - PlcName = modPos.PlcPos, - Status = TaskStatusEnum.Doing, - InteractiveMsg = $"鍚憑modDevice.Text}鍐欏叆寮�鍚厜骞�0锛岀粨鏋渰res.IsSucceed}", - }; - _db.Insertable(modTaskMonitor).ExecuteCommand(); - HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>()); - }); - modConn.Close(); + result.Code = "1"; + result.Message = "鎵句笉鍒拌浠诲姟"; + return result; } - } - break; - case "start"://浠诲姟寮�濮� - { - //寮�濮嬪悜鎷嗘墭鏈烘斁鍏ユ墭鐩樹换鍔� - if (modTask.EndLocate == AGVStaionEnum.D1.ToString()) - { - var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Type == PLCTypeEnum.PalletMachine); - var modConn = new PLCUtil(modPlc); - var modDevice = PLCTaskAction.plcDevices.FirstOrDefault(s => s.Text == "鎷嗘墭鏈�"); - var res = modConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "1"); - modConn.Close(); - } - - var taskMonitor = new WcsTaskMonitor() + modTask.Status = TaskStatusEnum.Complete; + modTask.IsComple = "1"; + await _db.Updateable(modTask).ExecuteCommandAsync(); + WcsTaskMonitor modTaskMonitor = new WcsTaskMonitor() { TaskNo = modTask.TaskNo, - PlcName = input.Method, - InteractiveMsg = $"AGV灏忚溅鍙嶉浠诲姟寮�濮�" + //PlcId = modDevice.PlcId, + PlcName = "AGV", + StartLocat = modTask.StartLocate, + EndLocat = modTask.EndLocate, + Status = TaskStatusEnum.Complete, + InteractiveMsg = $"AGV灏忚溅鍙嶉浠诲姟鍒拌揪9宸ヤ綅", }; - await _db.Insertable(taskMonitor).ExecuteCommandAsync(); - HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>()); + await _db.Insertable(modTaskMonitor).ExecuteCommandAsync(); + HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); + HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + } break; case "cancel"://浠诲姟鍙栨秷 @@ -612,8 +552,7 @@ return result; } - - + /// <summary> /// 鑾峰彇鍘熸潗鏂欎粨鐘舵�� /// </summary> @@ -673,35 +612,35 @@ /// </summary> /// <param name="input"></param> /// <returns></returns> - [HttpPost] - [UnitOfWork] - public async Task ProductStorage(RequestStorage input) - { - var intProduct = AGVStorageUtil.ProductCount(); - var intTask = await _db.Queryable<WcsTask>().Where(s => s.TaskType == TaskTypeEnum.Move - && s.Type == PLCTypeEnum.AGV && s.Status <= TaskStatusEnum.Doing - && s.StartLocate.StartsWith("Z") && s.EndLocate == AGVStaionEnum.A1.ToString()).CountAsync(); - if (input.Qty > intProduct) - throw Oops.Bah($"杈撳叆鏁伴噺澶т簬鍙嚭鏁伴噺{intProduct}"); - var listTask = new List<WcsTask>(); - var TaskNo = GetTaskCode("WCS"); - for (int i = 0; i < input.Qty; i++) - { - listTask.Add(new WcsTask() - { - TaskNo = "WCS" + DateTime.Now.ToString("yyyyMMdd") + (TaskNo++).ToString().PadLeft(4, '0'), - TaskType = TaskTypeEnum.Move, - Type = PLCTypeEnum.AGV, - StartLocate = AGVStaionEnum.Z11.ToString(), - EndLocate = AGVStaionEnum.A1.ToString(), - PalletNo = "", - Status = TaskStatusEnum.Wait, - Levels = 10, - Origin = "PDA" - }); - } - await _db.Insertable(listTask).ExecuteCommandAsync(); - } + //[HttpPost] + //[UnitOfWork] + //public async Task ProductStorage(RequestStorage input) + //{ + // var intProduct = AGVStorageUtil.ProductCount(); + // var intTask = await _db.Queryable<WcsTask>().Where(s => s.TaskType == TaskTypeEnum.Move + // && s.Type == PLCTypeEnum.AGV && s.Status <= TaskStatusEnum.Doing + // && s.StartLocate.StartsWith("Z") && s.EndLocate == AGVStaionEnum.A1.ToString()).CountAsync(); + // if (input.Qty > intProduct) + // throw Oops.Bah($"杈撳叆鏁伴噺澶т簬鍙嚭鏁伴噺{intProduct}"); + // var listTask = new List<WcsTask>(); + // var TaskNo = GetTaskCode("WCS"); + // for (int i = 0; i < input.Qty; i++) + // { + // listTask.Add(new WcsTask() + // { + // TaskNo = "WCS" + DateTime.Now.ToString("yyyyMMdd") + (TaskNo++).ToString().PadLeft(4, '0'), + // TaskType = TaskTypeEnum.Move, + // Type = PLCTypeEnum.AGV, + // StartLocate = AGVStaionEnum.Z11.ToString(), + // EndLocate = AGVStaionEnum.A1.ToString(), + // PalletNo = "", + // Status = TaskStatusEnum.Wait, + // Levels = 10, + // Origin = "PDA" + // }); + // } + // await _db.Insertable(listTask).ExecuteCommandAsync(); + //} /// <summary> /// 鑷姩鐢熸垚浠诲姟鍙� /// </summary> diff --git a/Admin.NET/WCS.Application/PLC/PLCCommon.cs b/Admin.NET/WCS.Application/PLC/PLCCommon.cs index 408685e..96111c1 100644 --- a/Admin.NET/WCS.Application/PLC/PLCCommon.cs +++ b/Admin.NET/WCS.Application/PLC/PLCCommon.cs @@ -454,7 +454,7 @@ { string stationNum = ""; - string[] lists = endRoadway.Split("R"); + string[] lists = endRoadway.Split("MR"); var model = _db.Queryable<WcsStorageLocat>().First(m => m.RoadwayNo == endRoadway && m.IsDelete == false); string stat = model.AisleOne; diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs index e8a2fe2..08d9606 100644 --- a/Admin.NET/WCS.Application/PLC/PLCService.cs +++ b/Admin.NET/WCS.Application/PLC/PLCService.cs @@ -1,8 +1,11 @@ 锘縰sing Admin.NET.Core.Service; +using AngleSharp.Io; using COSXML.Network; using DocumentFormat.OpenXml.Bibliography; using DocumentFormat.OpenXml.Drawing; using DocumentFormat.OpenXml.Spreadsheet; +using DocumentFormat.OpenXml.Wordprocessing; +using Elastic.Clients.Elasticsearch.Snapshot; using Furion.Logging; using IoTClient; using NewLife.Reflection; @@ -25,6 +28,7 @@ try { var mod = sender as WcsDeviceDto; + //Console.WriteLine($"{mod.Text}鍊间负" + mod.Value); switch (mod.Type) { @@ -70,7 +74,7 @@ TaskNo = _taskService.GetTaskCode(), TaskType = TaskTypeEnum.Move, Type = PLCTypeEnum.AGV, - StartLocate = AGVStorageUtil.GetPalletOutStorage(), + StartLocate = "", EndLocate = AGVStaionEnum.D1.ToString(), PalletNo = "", Status = TaskStatusEnum.Wait, @@ -190,6 +194,7 @@ { TaskNo = carTask.TaskNo, PlcName = modDevice.Text, + Status = TaskStatusEnum.Complete, InteractiveMsg = $"绌挎杞﹀弽棣堜换鍔″畬鎴�" }; _db.Insertable(taskMonitor).ExecuteCommand(); @@ -202,10 +207,72 @@ //鎬讳换鍔′笅娌℃湁鍏朵粬鏈墽琛屽皬杞︾殑浠诲姟 鍙樻洿鎬讳换鍔′俊鎭� if (carTaskNext == null && modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete) { - modFinshTask.Status = TaskStatusEnum.Complete; - modFinshTask.FinishDate = DateTime.Now; - _db.Updateable(modFinshTask).ExecuteCommand(); - + if (modFinshTask.TaskType == TaskTypeEnum.Out) + { + //#region 浠诲姟鍙樻洿鎴愯緭閫佺嚎浠诲姟 + //modFinshTask.Status = TaskStatusEnum.Wait; + //modFinshTask.Type = PLCTypeEnum.ConveyorLine; + //_db.Updateable(modFinshTask).ExecuteCommand(); + + //#endregion + + #region 杈撻�佺嚎 鍐欏叆PLC 740 + + var text = ""; + var devStation = ""; //宸ヤ綅 + var endLocate = modFinshTask.EndRoadway; + var carcon = new carConverModel(); + if ( carcon.conveyorBei.Keys.Contains(endLocate)) + { + text = "杈撻�佺嚎鍖�"; + devStation = carcon.conveyorBei[endLocate]; + } + else if (carcon.conveyorNan.Keys.Contains(endLocate)) + { + text = "杈撻�佺嚎鍗�"; + devStation = carcon.conveyorNan[endLocate]; + } + if (text != "") + { + var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Text == text); + var modConn = new PLCUtil(modPlc); + + var modDeviceConver = PLCTaskAction.plcDevices.First(s => s.StationNum == devStation); + var (plcResult, palletVal) = modConn.GetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.PlcPos); + if (!plcResult.IsSucceed || Convert.ToInt32(palletVal) != 730) + { + modConn.Close(); + return;//鏀捐揣宸ヤ綅娌℃湁璇诲彇鎴愬姛鎴栦笉鏄┖闂� + } + + var plcResult2 = modConn.SetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.WcsPos, "740"); + if (!plcResult.IsSucceed) + { + modConn.Close(); + return; + } + //娣诲姞浠诲姟鏄庣粏 + var taskMonitor = new WcsTaskMonitor() + { + TaskNo = modFinshTask.TaskNo, + PlcName = modDevice.Text, + Status = TaskStatusEnum.Complete, + InteractiveMsg = $"鍐欏叆鎸囦护740锛氭墭鐩樺埌杈緖modFinshTask.EndRoadway}" + }; + _db.Insertable(taskMonitor).ExecuteCommand(); + modConn.Close(); + } + + + #endregion + } + else + { + modFinshTask.Status = TaskStatusEnum.Complete; + modFinshTask.FinishDate = DateTime.Now; + _db.Updateable(modFinshTask).ExecuteCommand(); + } + //鍒ゆ柇浠诲姟鏄惁鍏呯數浠诲姟,涓嬪彂寮�濮嬪厖鐢靛懡浠� if (modFinshTask.Levels == 888) { @@ -281,22 +348,26 @@ var getCdTask = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.Levels == 888 && m.EndLocate == endLocateCar && m.Type == PLCTypeEnum.ShuttleCar && m.Status <= TaskStatusEnum.Doing); if (getCdTask == null) { - //娣诲姞灏忚溅鍏呯數浣嶇疆 - WcsTask modCarTask = new WcsTask() + var (resultDlLock, valueDlLock) = plcConn.GetDBValue(modDevice.PosType, modDevice.PlcPos); + if (resultDlLock.IsSucceed && valueDlLock!=3) { - TaskNo = _taskService.GetTaskCode(), - TaskType = TaskTypeEnum.Move, - Type = PLCTypeEnum.ShuttleCar, - StartLocate = carXYZ, - EndLocate = endLocateCar, - PalletNo = "", - Status = TaskStatusEnum.Wait, - Levels = 888, //鍏呯數绛夌骇浼樺厛浠诲姟绛夌骇 - Origin = "WCS", - CarIp = modDevice.PlcIdIP - }; - _db.Insertable(modCarTask).ExecuteCommand(); - HubUtil.PublicTask(modCarTask.Adapt<WcsTaskOutput>()); + //娣诲姞灏忚溅鍏呯數浣嶇疆 + WcsTask modCarTask = new WcsTask() + { + TaskNo = _taskService.GetTaskCode(), + TaskType = TaskTypeEnum.Move, + Type = PLCTypeEnum.ShuttleCar, + StartLocate = carXYZ, + EndLocate = endLocateCar, + PalletNo = "", + Status = TaskStatusEnum.Wait, + Levels = 888, //鍏呯數绛夌骇浼樺厛浠诲姟绛夌骇 + Origin = "WCS", + CarIp = modDevice.PlcIdIP + }; + _db.Insertable(modCarTask).ExecuteCommand(); + HubUtil.PublicTask(modCarTask.Adapt<WcsTaskOutput>()); + } } } @@ -344,22 +415,27 @@ var getCdTask = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.Levels == 888 && m.EndLocate == endLocateCar && m.Type == PLCTypeEnum.ShuttleCar && m.Status <= TaskStatusEnum.Doing); if (getCdTask == null) { - //娣诲姞灏忚溅鍏呯數浣嶇疆 - WcsTask modCarTask = new WcsTask() + var (resultDlLock, valueDlLock) = plcConn.GetDBValue(modDevice.PosType, modDevice.PlcPos); + if (resultDlLock.IsSucceed && valueDlLock != 3) { - TaskNo = _taskService.GetTaskCode(), - TaskType = TaskTypeEnum.Move, - Type = PLCTypeEnum.ShuttleCar, - StartLocate = carXYZ, - EndLocate = endLocateCar, - PalletNo = "", - Status = TaskStatusEnum.Wait, - Levels = 888, //鍏呯數绛夌骇浼樺厛浠诲姟绛夌骇 - Origin = "WCS", - CarIp = modDevice.PlcIdIP - }; - _db.Insertable(modCarTask).ExecuteCommand(); - HubUtil.PublicTask(modCarTask.Adapt<WcsTaskOutput>()); + //娣诲姞灏忚溅鍏呯數浣嶇疆 + WcsTask modCarTask = new WcsTask() + { + TaskNo = _taskService.GetTaskCode(), + TaskType = TaskTypeEnum.Move, + Type = PLCTypeEnum.ShuttleCar, + StartLocate = carXYZ, + EndLocate = endLocateCar, + PalletNo = "", + Status = TaskStatusEnum.Wait, + Levels = 888, //鍏呯數绛夌骇浼樺厛浠诲姟绛夌骇 + Origin = "WCS", + CarIp = modDevice.PlcIdIP + }; + _db.Insertable(modCarTask).ExecuteCommand(); + HubUtil.PublicTask(modCarTask.Adapt<WcsTaskOutput>()); + } + } } @@ -472,6 +548,77 @@ carTaskNext.Status = TaskStatusEnum.Doing; carTaskNext.CarTaskNo = carTaskNo; _db.Updateable(carTaskNext).ExecuteCommand(); + + if (modTask.TaskType == TaskTypeEnum.Out) + { + #region 杈撻�佺嚎 鍐欏叆PLC 730 + + var text = ""; + var devStation = ""; + var endLocate = modTask.EndRoadway; + var carcon = new carConverModel(); + if (carcon.conveyorBei.Keys.Contains(endLocate)) + { + text = "杈撻�佺嚎鍖�"; + devStation = carcon.conveyorBei[endLocate]; + } + else if (carcon.conveyorNan.Keys.Contains(endLocate)) + { + text = "杈撻�佺嚎鍗�"; + devStation = carcon.conveyorNan[endLocate]; + } + if (text != "") + { + var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Text == text); + var modConn = new PLCUtil(modPlc); + + var modDeviceConver = PLCTaskAction.plcDevices.First(s => s.StationNum == devStation); + var (plcResult, palletVal) = modConn.GetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.PlcPos); + if (!plcResult.IsSucceed || Convert.ToInt32(palletVal) != 720) + { + modConn.Close(); + return;//鏀捐揣宸ヤ綅娌℃湁璇诲彇鎴愬姛鎴栦笉鏄┖闂� + } + var listResultcon = new List<Result>(); + + //浠诲姟鍙蜂笌鎵樼洏鏉$爜 + var modPosConverTask = PLCTaskAction.plcPositions.First(s => s.DeviceId == modDeviceConver.Id && s.Text == "浠诲姟鍙�"); + listResultcon.Add(modConn.SetPlcDBValue(modPosConverTask.PosType, modDeviceConver.DbNumber, modPosConverTask.PlcPos, modTask.TaskId.ToString())); + var modPosConverPallet = PLCTaskAction.plcPositions.First(s => s.DeviceId == modDeviceConver.Id && s.Text == "鎵樼洏鏉$爜"); + listResultcon.Add(modConn.SetPlcDBValue(modPosConverPallet.PosType, modDeviceConver.DbNumber, modPosConverPallet.PlcPos, modTask.PalletNo.ToString())); + + // 璧峰宸ヤ綅銆佺洰鐨勫伐浣� + var modPosConverStrLocat = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDeviceConver.Id && s.Text == "璧峰宸ヤ綅"); + listResultcon.Add(modConn.SetPlcDBValue(modPosConverStrLocat.PosType, modDeviceConver.DbNumber, modPosConverStrLocat.PlcPos, modDeviceConver.StationNum)); + var modPosConverEndLocat = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDeviceConver.Id && s.Text == "鐩殑宸ヤ綅"); + listResultcon.Add(modConn.SetPlcDBValue(modPosConverEndLocat.PosType, modDeviceConver.DbNumber, modPosConverEndLocat.PlcPos, modTask.EndLocate)); + + if (listResultcon.All(s => s.IsSucceed)) + { + var plcResult2 = modConn.SetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.WcsPos, "730"); + if (!plcResult.IsSucceed) + { + modConn.Close(); + return; + } + //娣诲姞浠诲姟鏄庣粏 + var taskMonitor2 = new WcsTaskMonitor() + { + TaskNo = carTaskNext.TaskNo, + PlcName = modDevice.Text, + Status = TaskStatusEnum.Complete, + InteractiveMsg = $"鍐欏叆鎸囦护730锛氬伐浣嶆槸{modDeviceConver.StationNum}" + }; + _db.Insertable(taskMonitor2).ExecuteCommand(); + } + + modConn.Close(); + } + + + #endregion + } + //娓呴櫎灏忚溅绌洪棽鏃堕棿 var carTimeClear = _db.Queryable<WcsCarTime>().First(m=>m.IsDelete == false && m.CarIp == modDevice.PlcIdIP); if (carTimeClear!= null) @@ -484,6 +631,7 @@ { TaskNo = carTaskNext.TaskNo, PlcName = modDevice.Text, + Status = TaskStatusEnum.Complete, InteractiveMsg = $"鍚戠┛姊溅涓嬪彂浠诲姟{carTaskNext.TaskNo}" }; _db.Insertable(taskMonitor).ExecuteCommand(); @@ -558,14 +706,38 @@ var ledText = ""; switch (modDevice.Value.ToString()) { + case "120": //绌洪棽锛孉GV鍙斁璐� + { + var task = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.Status == TaskStatusEnum.Doing && m.IsComple == "1"); + if (task != null) + { + //娌℃湁鍑哄簱涓氬姟 + var res = new HttpService().GenAgvContinueTask(task.TaskNo).Result; + if (res.code == "0") + { + var modTaskMonitor = new WcsTaskMonitor() + { + TaskNo = task.TaskNo, + PlcId = modDevice.modPlc.Id, + PlcName = modDevice.modPlc.IP, + InteractiveMsg = "鍚慉GV灏忚溅涓嬪彂缁х画鎵ц浠诲姟" + }; + _db.Insertable(modTaskMonitor).ExecuteCommand(); + + //涓嬪彂浠诲姟鏃ュ織 + HubUtil.PublicTask(task.Adapt<WcsTaskOutput>()); + HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + } + } + } + break; case "320": { // 鐢宠瀵嗛泦搴撶粍 string strMsg = ""; - string taskModel = ""; // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭� - var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�"); + var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜"); var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos); if (!res.IsSucceed) { @@ -618,7 +790,7 @@ var http = new HttpService(); string TaskNo = "", EndLocate = ""; - strMsg = http.RequestRoadWay(palletVal, modDevice.StationNum, taskModel, "1", ref EndLocate, ref TaskNo); + strMsg = http.RequestRoadWay(palletVal, modDevice.StationNum, ref EndLocate, ref TaskNo); if (!strMsg.Contains("-1")) { // 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇LEDIP 鎺ㄩ�佸埌LED灞忓箷銆� @@ -693,7 +865,7 @@ case "330": { // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭� - var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�"); + var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜"); var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos); if (!res.IsSucceed) { @@ -719,7 +891,7 @@ } // 鑾峰彇鍥涢」杞﹀彇璐у伐浣� - string endLocatVlue = PLCCommon.RoadwayToStationNum(modTask.EndRoadway, modDevice.StationNum); + string endLocatVlue = PLCCommon.RoadwayToStationNum(modTask.EndRoadway, modDevice.StationNum.PadLeft(3,'0')); @@ -731,7 +903,7 @@ var modPosTaskType = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟绫诲瀷"); var taskTypeStr = (int)modTask.TaskType; listResult.Add(plcConn.SetPlcDBValue(modPosTaskType.PosType, modDevice.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString())); - var modPosPalletNo = modDevice.listStation.FirstOrDefault(s => s.Text == "鎵樼洏鐮�"); + var modPosPalletNo = modDevice.listStation.FirstOrDefault(s => s.Text == "鎵樼洏鏉$爜"); listResult.Add(plcConn.SetPlcDBValue(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo)); // 璧峰宸ヤ綅銆佺洰鐨勫伐浣� var modPosStrLocat = modDevice.listStation.FirstOrDefault(s => s.Text == "璧峰宸ヤ綅"); @@ -782,25 +954,25 @@ { // 鐢宠鍌ㄤ綅 鏇存柊鍏ュ簱浠诲姟(鍌ㄤ綅鍦板潃) 630 var strMsg = ""; - var taskModel = ""; - //// 鏍规嵁宸ヤ綅鍙疯幏鍙栧贩閬撳彿 - //var roadway = PLCCommon.GetRoadwayByStation(modDevice.StationNum); - //if (roadway == "") - //{ - // break; - //} + // 鑾峰彇宸ヤ綅浠诲姟鍙蜂俊鎭� + var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�"); + var (resTask, taskVal) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos); + if (!resTask.IsSucceed) + { + break; + } // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭� - var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�"); + var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜"); var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos); if (!res.IsSucceed) { break; } - var http = new HttpService(); + string TaskNo = ""; // 鍚慦MS鐢宠鍌ㄤ綅淇℃伅 - strMsg = http.RequestLocate(palletVal, modDevice.StationNum, taskModel, "roadway", ref TaskNo); + strMsg = new HttpService().RequestLocate(palletVal, taskVal,ref TaskNo); if (!strMsg.Contains("-1")) { @@ -1007,20 +1179,28 @@ { var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�"); var (res, taskVal) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos); - var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�"); + var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜"); var (res2, palletVal) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos); var modPosStarStationNum = modDevice.listStation.FirstOrDefault(m => m.Text == "璧峰宸ヤ綅"); var (res3, starVal) = plcConn.GetPlcDBValue(modPosStarStationNum.PosType, modDevice.DbNumber, modPosStarStationNum.PlcPos); + + int taskNoVal = Convert.ToInt32(taskVal); + var taskInfo = _db.Queryable<WcsTask>().First(w => w.TaskId == taskNoVal); + if (taskInfo == null) + { + Log.Error(string.Format("杈撻�佺嚎430:鏈壘鍒板搴旂殑浠诲姟銆�")); + break; + } // 鎻掑叆浠诲姟鏄庣粏 var modInsertTaskMonitor = new WcsTaskMonitor() { - TaskNo = taskVal, + TaskNo = taskInfo.TaskNo, PlcId = modDevice.Id, PlcName = modDevice.Text, InteractiveMsg = $"鍐欏叆鎸囦护430锛氭墭鐩樺埌杈緖modDevice.StationNum}宸ヤ綅", PalletNo = palletVal, Status = TaskStatusEnum.Complete, - StartLocat = starVal, + StartLocat = Convert.ToString(starVal), EndLocat = modDevice.StationNum, }; @@ -1030,8 +1210,6 @@ // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈� HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); - // 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇LEDIP 鎺ㄩ�佸埌LED灞忓箷銆� - var taskInfo = _db.Queryable<WcsTask>().First(w => w.TaskNo == modInsertTaskMonitor.TaskNo); modDevice.LedIP = _db.Queryable<WcsDevice>().Where(w => w.StationNum == taskInfo.EndLocate).Select(s => s.LedIP).First(); // led鏄剧ず鍐呭 @@ -1057,19 +1235,22 @@ case "440": { #region 鎷i�夊畬鎴�,鎵樼洏绂诲紑宸ヤ綅 + + var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�"); + var (res, taskVal) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos); + var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜"); + var (res2, palletVal) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos); + var modPosStarStationNum = modDevice.listStation.FirstOrDefault(m => m.Text == "璧峰宸ヤ綅"); + var (res3, starVal) = plcConn.GetPlcDBValue(modPosStarStationNum.PosType, modDevice.DbNumber, modPosStarStationNum.PlcPos); + // 鍐欏叆450 var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "450"); if (ret.IsSucceed) { - var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�"); - var (res, taskVal) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos); - var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�"); - var (res2, palletVal) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos); - var modPosStarStationNum = modDevice.listStation.FirstOrDefault(m => m.Text == "璧峰宸ヤ綅"); - var (res3, starVal) = plcConn.GetPlcDBValue(modPosStarStationNum.PosType, modDevice.DbNumber, modPosStarStationNum.PlcPos); + - string tasknoVal = taskVal.ToString(); - var modTask = _db.Queryable<WcsTask>().First(m => m.Status == TaskStatusEnum.Doing && m.TaskNo == tasknoVal && m.IsDelete == false); + int tasknoVal = Convert.ToInt32(taskVal); + var modTask = _db.Queryable<WcsTask>().First(m => m.Status == TaskStatusEnum.Doing && m.IsDelete == false && m.TaskId == tasknoVal); if (modTask == null) { Log.Error(string.Format("杈撻�佺嚎440:鏈壘鍒板搴旂殑浠诲姟銆�")); @@ -1078,7 +1259,7 @@ // 鏀瑰彉浠诲姟鐘舵�� modTask.Status = TaskStatusEnum.Complete; modTask.FinishDate = DateTime.Now; - modTask.Levels = 999; + //modTask.Levels = 999; _db.Updateable(modTask).ExecuteCommand(); HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); // 鎻掑叆浠诲姟鏄庣粏 @@ -1095,24 +1276,24 @@ }; if (modTask.Origin == "WMS") { - // 鍙嶉WMS - var requestMode = new TaskRequestWMS() - { - TaskNo = modTask.TaskNo + modTask.EndLocate, - PalletNo = modTask.PalletNo, - TaskType = ((int)TaskTypeEnum.Out).ToString(), - TaskStatus = ((int)TaskStatusEnum.Complete).ToString() - }; - HttpService httpService = new HttpService(); - var modResponseTask = httpService.RequestTask(requestMode).Result; - if (modResponseTask.StatusCode == 0) - { - modInsertTaskMonitor.InteractiveMsg += "锛岃繑鍥炵粰WMS浠诲姟瀹屾垚"; - } - else - { - Log.Error(string.Format("浠诲姟鍙嶉澶辫触锛歋tatusCode锛歿0};Msg锛歿1}", modResponseTask.StatusCode, modResponseTask.Msg)); - } + //// 鍙嶉WMS + //var requestMode = new TaskRequestWMS() + //{ + // TaskNo = modTask.TaskNo + modTask.EndLocate, + // PalletNo = modTask.PalletNo, + // TaskType = ((int)TaskTypeEnum.Out).ToString(), + // TaskStatus = ((int)TaskStatusEnum.Complete).ToString() + //}; + //HttpService httpService = new HttpService(); + //var modResponseTask = httpService.RequestTask(requestMode).Result; + //if (modResponseTask.StatusCode == 0) + //{ + // modInsertTaskMonitor.InteractiveMsg += "锛岃繑鍥炵粰WMS浠诲姟瀹屾垚"; + //} + //else + //{ + // Log.Error(string.Format("浠诲姟鍙嶉澶辫触锛歋tatusCode锛歿0};Msg锛歿1}", modResponseTask.StatusCode, modResponseTask.Msg)); + //} } // 鎻掑叆浜や簰鏃ュ織 @@ -1146,56 +1327,76 @@ private static void AGV(WcsDeviceDto modDevice) { - //杩欓噷鎵惧嚭鏉GV寰呮墽琛岀殑浠诲姟銆佹寜鐓т紭鍏堢骇涓嬪彂涓�涓换鍔$粰AGV - var listTask = _db.Queryable<WcsTask>().Where(s => (s.Status == TaskStatusEnum.Wait || s.Status == TaskStatusEnum.Doing) && s.Type == PLCTypeEnum.AGV).OrderBy(s => s.Levels).ToList(); - if (listTask.Count == 0) + //杩欓噷鎵惧嚭鏉GV寰呮墽琛岀殑浠诲姟銆佹寜鐓т紭鍏堢骇銆佸垱寤烘椂闂翠笅鍙戜竴涓换鍔$粰AGV + var modTask = _db.Queryable<WcsTask>().Where(s => s.Status == TaskStatusEnum.Wait && s.Type == PLCTypeEnum.AGV).OrderBy(s => new { s.Levels ,s.CreateTime}).First(); + if (modTask == null) { return; } - foreach (var modTask in listTask) + + if (_db.Queryable<WcsTask>().Any(s => s.EndLocate == modTask.EndLocate && s.IsDelete == false && s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.AGV )) { - if (_db.Queryable<WcsTask>().Any(s => s.EndLocate == modTask.EndLocate && s.IsDelete == false && s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.AGV )) - { - continue; // 鏈夌洰鐨勪綅缃竴鑷翠笖姝e湪鎵ц鐨勪换鍔� - } - - //涓嬪彂AGV浠诲姟 - AgvTaskInput input = new AgvTaskInput() - { - ReqCode = modTask.Id.ToString(), - TaskCode = modTask.TaskNo, - CtnrCode = modTask.PalletNo, - PositionCodePath = new List<PositionCodePathItem>() - { - new PositionCodePathItem(){ PositionCode = modTask.StartLocate }, - new PositionCodePathItem(){ PositionCode = modTask.EndLocate } - } - }; - input.TaskTyp = "1" + modTask.StartLocate.Substring(0, 1) + modTask.EndLocate.Substring(0, 1); - var response = new HttpService().GenAgvSchedulingTask(input).Result; - if (response.code == "0") - { - AGVStatus = true; - modTask.Status = TaskStatusEnum.Doing; - _db.Updateable(modTask).ExecuteCommand(); - var modTaskMonitor = new WcsTaskMonitor() - { - TaskNo = modTask.TaskNo, - PlcId = modDevice.modPlc.Id, - PlcName = modDevice.modPlc.IP, - InteractiveMsg = "鍚慉GV灏忚溅涓嬪彂浠诲姟" - }; - _db.Insertable(modTaskMonitor).ExecuteCommand(); + return; // 鏈夌洰鐨勪綅缃竴鑷翠笖姝e湪鎵ц鐨勪换鍔� + } - //涓嬪彂浠诲姟鏃ュ織 - HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); - HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>()); - } - Console.WriteLine(response.ToJson()); + //涓嬪彂AGV浠诲姟 + var taskTypeModel = AGVStorageUtil.GetTaskModle(modTask.StartLocate, modTask.EndLocate,out string type1,out string type2, out string jiebo); + if (string.IsNullOrWhiteSpace(taskTypeModel)) + { + Console.WriteLine("鑾峰彇AGV浠诲姟妯℃澘澶辫触锛氳鏍稿疄浠诲姟璧峰鐩爣鍌ㄤ綅鏄惁姝g‘"); return; } + AgvTaskSend taskModel = new AgvTaskSend(); + taskModel.robotTaskCode = modTask.TaskNo; + taskModel.taskType = taskTypeModel; + if (jiebo == "") + { + taskModel.targetRoute = new List<targetRoute>() + { + new targetRoute(){seq = 0,type = type1,code = modTask.StartLocate}, + new targetRoute(){seq = 1,type = type2,code = modTask.EndLocate} + }; + } + else + { + taskModel.targetRoute = new List<targetRoute>() + { + new targetRoute(){seq = 0,type = type1,code = modTask.StartLocate}, + new targetRoute(){seq = 1,type = "ZONE",code = jiebo}, + new targetRoute(){seq = 2,type = type2,code = modTask.EndLocate} + }; + } + + taskModel.extra = new extra() + { + carrierInfo = new List<carrierInfo>() + { + new carrierInfo(){ carrierType = "TP",carrierCode = modTask.PalletNo} + } + }; + var response = new HttpService().GenAgvSendTask(taskModel).Result; + if (response.code == "0") + { + modTask.Status = TaskStatusEnum.Doing; + _db.Updateable(modTask).ExecuteCommand(); + var modTaskMonitor = new WcsTaskMonitor() + { + TaskNo = modTask.TaskNo, + PlcId = modDevice.modPlc.Id, + PlcName = modDevice.modPlc.IP, + InteractiveMsg = "鍚慉GV灏忚溅涓嬪彂浠诲姟" + }; + _db.Insertable(modTaskMonitor).ExecuteCommand(); + + //涓嬪彂浠诲姟鏃ュ織 + HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); + HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + } + //Console.WriteLine(response.ToJson()); Thread.Sleep(3000); + return; + } /// <summary> @@ -1240,6 +1441,11 @@ private static void Test(WcsDeviceDto modDevice) { + + var ledText = $"鐢宠鍏ュ簱澶辫触\n\n"; + ledText += $"鎵樼洏鍙�:T2300001\n"; + ledText += $"鍏ュ簱浠诲姟宸查攣瀹氾紝璇疯В閿佸悗閲嶈瘯!\n"; + LedDisplay("10.26.254.31", ledText); //鍗峰笜闂�2鐢宠鎵撳紑 //var result = modDevice.PLCUtil.SetPlcDBValue(PLCDataTypeEnum.Short, "DB1000", "1152", "10"); //鍗峰笜闂�2鐢宠鍏抽棴 @@ -1251,7 +1457,7 @@ //var result = modDevice.PLCUtil.SetPlcDBValue(PLCDataTypeEnum.Short, "DB1000", "1154", "30"); //C鍙GV鏀炬墭鐩樺畬鎴愮敵璇峰叆搴� - var result = modDevice.PLCUtil.SetPlcDBValue(PLCDataTypeEnum.Short, "DB1000", "1156", "100"); + //var result = modDevice.PLCUtil.SetPlcDBValue(PLCDataTypeEnum.Short, "DB1000", "1156", "100"); ////鍐欐娴嬭瘯璇籹tring //var (res, val) = modDevice.PLCUtil.GetPlcDBValue(PLCDataTypeEnum.String, "DB100", "64"); diff --git a/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs b/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs index 434abaa..76f93ee 100644 --- a/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs +++ b/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs @@ -53,6 +53,7 @@ private static List<ModbusUtil> listModbusUtil = new List<ModbusUtil>(); + public static List<ModbusUtil> modbusUtilConn { get { return listModbusUtil; } @@ -87,6 +88,7 @@ boDrumReversal = _sysConfigService.GetConfigValue<bool>("sys_DrumReversal").Result; boOutLock = _sysConfigService.GetConfigValue<bool>("sys_BoOutLock").Result; boEnterLock = _sysConfigService.GetConfigValue<bool>("sys_BoEnterLock").Result; + } /// <summary> /// 鍒濆鍖朠LC杩炴帴 @@ -210,15 +212,6 @@ var (result, value) = modPlcUtil.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.PlcPos); if (result.IsSucceed) { - ////濡傛灉鏄┛姊溅锛岃繖閲屽彂閫佸績璺� - //if (modPlc.Type == PLCTypeEnum.ShuttleCar) - //{ - // var modHeart = listPlcPosition.Where(s => s.DeviceId == modDevice.Id && s.Text == "蹇冭烦").FirstOrDefault(); - // if (modHeart != null) - // { - // modPlcUtil.SetPlcDBValue(modHeart.PosType, modHeart.PlcPos, "1"); - // } - //} //鏃犳祦绋嬭烦鍑� if (Convert.ToInt32(value) == 0) continue; @@ -377,17 +370,90 @@ } try { + + // 鑾峰彇瀵嗛泦搴撴湭鎵ц浠诲姟 鏍规嵁鍒涘缓鏃堕棿鎺掑簭 - var waitTask = _db.Queryable<WcsTask>().Where(s => s.IsDelete == false && s.Status == TaskStatusEnum.Wait && s.Type == PLCTypeEnum.ShuttleCar && string.IsNullOrWhiteSpace(s.StartLocate) && string.IsNullOrWhiteSpace(s.EndLocate)).OrderBy(s => new {s.Levels, s.CreateTime}).First(); + var waitTask = _db.Queryable<WcsTask>().Where(s => s.IsDelete == false && s.Status == TaskStatusEnum.Wait && s.Type == PLCTypeEnum.ShuttleCar).OrderBy(s => new {s.Levels, s.CreateTime}).First(); if (waitTask == null) { continue; } + var starLocate = ""; + var endLocate = ""; + var taskceng = 0; //01010101: 01鎺� 01鍒� 01灞� 01娣卞害-姝ら」鐩笉鍋氬垽鏂� - var taskpai = int.Parse(waitTask.StartLocate.Substring(0, 2)); - var tasklie = int.Parse(waitTask.StartLocate.Substring(2, 2)); - var taskceng = int.Parse(waitTask.StartLocate.Substring(4, 2)); + if (waitTask.TaskType == TaskTypeEnum.In ) + { + //鍏ュ簱浠诲姟璧峰宸烽亾灏辨槸璧峰宸ヤ綅 + if (string.IsNullOrWhiteSpace(waitTask.StartRoadway) || string.IsNullOrWhiteSpace(waitTask.EndLocate)) + { + continue; + } + + taskceng = int.Parse(waitTask.StartRoadway.Substring(4, 2)); + starLocate = waitTask.StartRoadway; + endLocate = waitTask.EndLocate; + } + else if (waitTask.TaskType == TaskTypeEnum.Out) + { + taskceng = int.Parse(waitTask.StartLocate.Substring(4, 2)); + starLocate = waitTask.StartLocate; + endLocate = waitTask.EndRoadway; + + #region 娣诲姞杈撻�佺嚎涓庝换鍔¢獙璇� + + + + var text = ""; + var devStation = ""; + var carcon = new carConverModel(); + if (carcon.conveyorBei.Keys.Contains(endLocate)) + { + text = "杈撻�佺嚎鍖�"; + devStation = carcon.conveyorBei[endLocate]; + } + else if (carcon.conveyorNan.Keys.Contains(endLocate)) + { + text = "杈撻�佺嚎鍗�"; + devStation = carcon.conveyorNan[endLocate]; + } + if (text != "") + { + var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Text == text); + var modConn = new PLCUtil(modPlc); + + var modDevice = PLCTaskAction.plcDevices.First(s => s.StationNum == devStation); + var (plcResult, palletVal) = modConn.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.PlcPos); + if (!plcResult.IsSucceed || Convert.ToInt32(palletVal) != 720) + { + continue;//鏀捐揣宸ヤ綅娌℃湁璇诲彇鎴愬姛鎴栦笉鏄┖闂� + } + modConn.Close(); + + var gongwei = carcon.conveyorRuKu[endLocate]; + //鍒ゆ柇浠诲姟 + var convarTask = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.StartLocate == gongwei && m.Type == PLCTypeEnum.ConveyorLine); + if (convarTask != null) + { + continue;//鏀捐揣宸ヤ綅鏈変换鍔� + } + } + + + #endregion + } + else if (waitTask.TaskType == TaskTypeEnum.Move) + { + taskceng = int.Parse(waitTask.StartLocate.Substring(4, 2)); + starLocate = waitTask.StartLocate; + endLocate = waitTask.EndLocate; + } + else + { + continue; + } + #region 鑾峰彇褰撳墠浠诲姟鎵�鍦ㄥ眰鎵�鏈夌┖闂插皬杞� // 鑾峰彇鏈変换鍔$殑灏忚溅缂栧彿 @@ -444,7 +510,7 @@ { var carVal = ((int)valuex).ToString().PadLeft(2, '0') + ((int)valuey).ToString().PadLeft(2, '0') + ((int)valuez).ToString().PadLeft(2, '0'); //灏忚溅鍒板彇璐у偍浣嶈矾寰� - var d = FourWayCarUtil.GetCarPath(carVal, waitTask.StartLocate); + var d = FourWayCarUtil.GetCarPath(carVal, starLocate); kXCarList.Add(new CarInfo() { CarPlcIp = modbusUtil.PlcIP, @@ -487,7 +553,7 @@ //鍒ゆ柇灏忚溅浣嶇疆鏄惁涓庝换鍔$殑璧峰鍌ㄤ綅鐩稿悓,涓嶇浉鍚岋細鑾峰彇灏忚溅鍒板彇璐у偍浣嶈矾寰� var carLocate = assignCar.X.ToString().PadLeft(2, '0')+assignCar.Y.ToString().PadLeft(2, '0')+ assignCar.Z.ToString().PadLeft(2, '0'); //鑾峰彇灏忚溅鍘诲彇璐у偍浣嶄换鍔¤矾寰� - var data1 = FourWayCarUtil.GetCarPath(carLocate, waitTask.StartLocate); + var data1 = FourWayCarUtil.GetCarPath(carLocate, starLocate); var datas1 = FourWayCarUtil.GetCarPathUp(data1, 0); if (datas1 == null) { @@ -512,7 +578,7 @@ typeStr2 = 0; } //鑾峰彇灏忚溅鍘绘斁璐у偍浣嶄换鍔¤矾寰� - var data2 = FourWayCarUtil.GetCarPath(waitTask.StartLocate, waitTask.EndLocate, typeStr); + var data2 = FourWayCarUtil.GetCarPath(starLocate, endLocate, typeStr); var datas2 = FourWayCarUtil.GetCarPathUp(data2, typeStr2); if (datas2 == null) diff --git a/Admin.NET/WCS.Application/Service/WcsTask/WcsTaskService.cs b/Admin.NET/WCS.Application/Service/WcsTask/WcsTaskService.cs index 6d8a963..fe3a3f2 100644 --- a/Admin.NET/WCS.Application/Service/WcsTask/WcsTaskService.cs +++ b/Admin.NET/WCS.Application/Service/WcsTask/WcsTaskService.cs @@ -238,6 +238,16 @@ modTask.IsSuccess = TaskSuccessEnum.Fail; modTask.CancelDate = DateTime.Now;//鍙栨秷鏃堕棿 } + //濡傛灉鏄洓鍚戣溅浠诲姟 + if (modTask.Type == PLCTypeEnum.ShuttleCar) + { + var carTaskList = _db.Queryable<WcsCarTasks>().Where(m => m.Status <= TaskStatusEnum.Doing && m.IsDelete == false).ToList(); + foreach (var carTask in carTaskList) + { + carTask.Status = input.Status; + } + await _wcsTaskRep.Context.Updateable(carTaskList).ExecuteCommandAsync(); + } modTask.Status = input.Status; modTask.Levels = 999; await _wcsTaskRep.Context.Updateable(modTask).UpdateColumns(s => new { s.Status, s.IsSuccess, s.FinishDate, s.CancelDate, s.UpdateTime, s.UpdateUserId, s.UpdateUserName }).ExecuteCommandAsync(); diff --git a/Admin.NET/WCS.Application/Util/AGVStorageUtil.cs b/Admin.NET/WCS.Application/Util/AGVStorageUtil.cs index b9569e0..cb33fc5 100644 --- a/Admin.NET/WCS.Application/Util/AGVStorageUtil.cs +++ b/Admin.NET/WCS.Application/Util/AGVStorageUtil.cs @@ -15,290 +15,60 @@ private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId); private static readonly SysCacheService sysCacheService = App.GetRequiredService<SysCacheService>(); private static readonly SysConfigService _sysConfigService = App.GetRequiredService<SysConfigService>(); - private static List<string[]> listStorage = new List<string[]>(); - private static string[] listPallet = new[] { "cache_Z53", "cache_Z52", "cache_Z51" }; + static AGVStorageUtil() { - listStorage.Add(new[] { "cache_Z11", "cache_Z12", "cache_Z13" }); - listStorage.Add(new[] { "cache_Z21", "cache_Z22", "cache_Z23" }); - listStorage.Add(new[] { "cache_Z31", "cache_Z32", "cache_Z33" }); - listStorage.Add(new[] { "cache_Z41", "cache_Z42", "cache_Z43" }); } - /// <summary> - /// 鑾峰彇鎴愬搧鏁伴噺 - /// </summary> - /// <returns></returns> - public static int ProductCount() + + public static string GetTaskModle(string straLocate,string endLocate,out string type1,out string type2,out string jiebo) { - int i = 0; - foreach (var item in listStorage) + type1 = ""; + type2 = ""; + jiebo = ""; + var locate1 = _db.Queryable<WcsStorageLocat>().First(m => m.IsDelete == false && m.LocatNo == straLocate); + var locate2 = _db.Queryable<WcsStorageLocat>().First(m => m.IsDelete == false && m.LocatNo == endLocate); + if (locate1 == null || locate2 == null) { - foreach (var mod in item.Reverse()) - { - var value = _sysConfigService.GetConfigValue<bool>(mod).Result; - if (value) - i++; - } + return ""; } - return i; - } - /// <summary> - /// 鑾峰彇鎴愬搧瑕佸叆鐨勫偍浣� - /// </summary> - /// <returns></returns> - public static string GetProductInStorage(string TaskNo = "") - { - List<string> listResult = new List<string>(); - foreach (var item in listStorage) + switch (locate1.WareHouseNo) { - List<string> listItem = new List<string>(); - foreach (var mod in item.Reverse()) - { - var value = _sysConfigService.GetConfigValue<bool>(mod).Result; - if (!value) - listItem.Add(mod.Split('_')[1]); - else - break; - } - listResult.AddRange(listItem.AsEnumerable().Reverse()); - } - //妫�鏌ユ槸鍚︽湁姝e湪鍏ョ殑浠诲姟 - foreach (var result in listResult) - { - if (!_db.Queryable<WcsTask>().Where(s => s.Type == PLCTypeEnum.AGV && s.Status <= TaskStatusEnum.Doing && s.EndLocate == result && s.TaskNo != TaskNo).Any()) - return result; - } - return ""; - //Log.Error("鏃犲彲鍏ョ殑鍌ㄤ綅"); - //throw Oops.Bah("鏃犲彲鍏ョ殑鍌ㄤ綅"); - } - /// <summary> - /// 鑾峰彇鎴愬搧瑕佸嚭鐨勫偍浣� - /// </summary> - /// <returns></returns> - public static string GetProductOutStorage() - { - foreach (var item in listStorage.AsEnumerable().Reverse()) - { - foreach (var mod in item.Reverse()) - { - var value = _sysConfigService.GetConfigValue<bool>(mod).Result; - if (value) - return mod.Split('_')[1]; - } - } - return ""; - //Log.Error("鏃犲彲鍑虹殑鍌ㄤ綅"); - //throw Oops.Bah("鏃犲彲鍑虹殑鍌ㄤ綅"); - } - /// <summary> - /// 鑾峰彇鎵樼洏瑕佸叆鐨勫偍浣� - /// </summary> - /// <returns></returns> - public static string GetPalletInStorage(string TaskNo = "") - { - List<string> listResult = new List<string>(); - foreach (var item in listPallet) - { - var value = _sysConfigService.GetConfigValue<bool>(item).Result; - if (!value) - listResult.Add(item.Split('_')[1]); - else + case "W02": + type1 = "SITE"; + break; + case "W04": + type1 = "STORAGE"; + break; + default: break; } - //妫�鏌ユ槸鍚︽湁姝e湪鍏ョ殑浠诲姟 - foreach (var result in listResult.AsEnumerable().Reverse()) + + switch (locate2.WareHouseNo) { - if (!_db.Queryable<WcsTask>().Where(s => s.Type == PLCTypeEnum.AGV && s.Status <= TaskStatusEnum.Doing && s.EndLocate == result && s.TaskNo != TaskNo).Any()) - return result; + case "W02": + type2 = "SITE"; + break; + case "W04": + type2 = "STORAGE"; + break; + default: + break; } - return ""; - //Log.Error("鏃犲彲鍏ョ殑鍌ㄤ綅"); - //throw Oops.Bah("鏃犲彲鍏ョ殑鍌ㄤ綅"); - } - /// <summary> - /// 鑾峰彇鎵樼洏瑕佸嚭鐨勫偍浣� - /// </summary> - /// <returns></returns> - public static string GetPalletOutStorage() - { - foreach (var item in listPallet) + var Area1002 = new List<string>() { "",""};//1002杞﹂棿鍖哄煙 + var Area1003 = new List<string>() { "",""};//1003杞﹂棿鍖哄煙 + if (Area1002.Contains(locate2.AreaNo)) { - var value = _sysConfigService.GetConfigValue<bool>(item).Result; - if (value) - return item.Split('_')[1]; + jiebo = "1JB";//鎺ラ┏浣� } - return ""; - //Log.Error("鏃犲彲鍑虹殑鍌ㄤ綅"); - //throw Oops.Bah("鏃犲彲鍑虹殑鍌ㄤ綅"); + if (Area1003.Contains(locate2.AreaNo)) + { + jiebo = "2JB"; + } + if (type1 == "" || type2 == "") + { + return ""; + } + return "CJ1"; } - #region 灞炴�� - - public static bool Z11 - { - get - { - return _sysConfigService.GetConfigValue<bool>("cache_Z11").Result; - } - set - { - _sysConfigService.UpdateConfigValue("cache_Z11", value); - } - } - public static bool Z12 - { - get - { - return _sysConfigService.GetConfigValue<bool>("cache_Z12").Result; - } - set - { - _sysConfigService.UpdateConfigValue("cache_Z12", value); - } - } - public static bool Z13 - { - get - { - return _sysConfigService.GetConfigValue<bool>("cache_Z13").Result; - } - set - { - _sysConfigService.UpdateConfigValue("cache_Z13", value); - } - } - public static bool Z21 - { - get - { - return _sysConfigService.GetConfigValue<bool>("cache_Z21").Result; - } - set - { - _sysConfigService.UpdateConfigValue("cache_Z21", value); - } - } - public static bool Z22 - { - get - { - return _sysConfigService.GetConfigValue<bool>("cache_Z22").Result; - } - set - { - _sysConfigService.UpdateConfigValue("cache_Z22", value); - } - } - public static bool Z23 - { - get - { - return _sysConfigService.GetConfigValue<bool>("cache_Z23").Result; - } - set - { - _sysConfigService.UpdateConfigValue("cache_Z23", value); - } - } - public static bool Z31 - { - get - { - return _sysConfigService.GetConfigValue<bool>("cache_Z31").Result; - } - set - { - _sysConfigService.UpdateConfigValue("cache_Z31", value); - } - } - public static bool Z32 - { - get - { - return _sysConfigService.GetConfigValue<bool>("cache_Z32").Result; - } - set - { - _sysConfigService.UpdateConfigValue("cache_Z32", value); - } - } - public static bool Z33 - { - get - { - return _sysConfigService.GetConfigValue<bool>("cache_Z33").Result; - } - set - { - _sysConfigService.UpdateConfigValue("cache_Z33", value); - } - } - public static bool Z41 - { - get - { - return _sysConfigService.GetConfigValue<bool>("cache_Z41").Result; - } - set - { - _sysConfigService.UpdateConfigValue("cache_Z41", value); - } - } - public static bool Z42 - { - get - { - return _sysConfigService.GetConfigValue<bool>("cache_Z42").Result; - } - set - { - _sysConfigService.UpdateConfigValue("cache_Z42", value); - } - } - public static bool Z43 - { - get - { - return _sysConfigService.GetConfigValue<bool>("cache_Z43").Result; - } - set - { - _sysConfigService.UpdateConfigValue("cache_Z43", value); - } - } - public static bool Z51 - { - get - { - return _sysConfigService.GetConfigValue<bool>("cache_Z51").Result; - } - set - { - _sysConfigService.UpdateConfigValue("cache_Z51", value); - } - } - public static bool Z52 - { - get - { - return _sysConfigService.GetConfigValue<bool>("cache_Z52").Result; - } - set - { - _sysConfigService.UpdateConfigValue("cache_Z52", value); - } - } - public static bool Z53 - { - get - { - return _sysConfigService.GetConfigValue<bool>("cache_Z53").Result; - } - set - { - _sysConfigService.UpdateConfigValue("cache_Z53", value); - } - } - #endregion } diff --git a/Admin.NET/WCS.Application/Util/HttpService.cs b/Admin.NET/WCS.Application/Util/HttpService.cs index e37a36d..50d2e65 100644 --- a/Admin.NET/WCS.Application/Util/HttpService.cs +++ b/Admin.NET/WCS.Application/Util/HttpService.cs @@ -3,8 +3,11 @@ using Furion.Logging; using Furion.RemoteRequest.Extensions; using Newtonsoft.Json; +using System.Net.Http.Headers; +using System.Reflection.PortableExecutable; using System.Text; using WCS.Application.Entity; +using WCS.Application.Util; using static SKIT.FlurlHttpClient.Wechat.Api.Models.ComponentTCBBatchCreateContainerServiceVersionResponse.Types; namespace WCS.Application; @@ -12,11 +15,26 @@ { private dynamic Urls; - private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId); + private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId); + private static Dictionary<string, string> dicConverCar = new Dictionary<string, string>(); public HttpService() { var _sysConfigService = App.GetService<SysConfigService>(); Urls = _sysConfigService.GetSystemInfo().Result; + dicConverCar = new Dictionary<string, string> + { + {"013","190601"}, + {"014","191201"}, + {"015","190602"}, + {"016","191202"}, + + {"002","030401"}, + {"006","030402"}, + {"003","030601"}, + {"007","030602"}, + {"005","031201"}, + {"008","031202"}, + }; } @@ -24,16 +42,14 @@ /// 璋冪敤WMS鎺ュ彛鐢宠宸烽亾鎺ュ彛 /// </summary> /// <param name="palletNo"></param> - /// <param name="startLocat"></param> - /// <param name="taskModel"></param> - /// <param name="ceng"></param> + /// <param name="startLocat"></param> /// <param name="endLocat"></param> /// <param name="taskNo"></param> /// <returns></returns> - public string RequestRoadWay(string palletNo, string startLocat, string taskModel, string ceng, ref string endLocat, ref string taskNo) + public string RequestRoadWay(string palletNo, string startLocat, ref string endLocat, ref string taskNo) { string returnStr = ""; - + var stationNum = startLocat.PadLeft(3, '0'); var task = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing) && m.TaskType == TaskTypeEnum.In && m.PalletNo == palletNo); @@ -42,12 +58,11 @@ var model = new RequestAsnTask() { PalletNo = palletNo, - HouseNo = "W01", - TaskModel = taskModel + HouseNo = "W01" }; string url = Urls.WMSAddress + ":" + Urls.WMSPort; - var result = (url + "/api/DownAPi/RequestRoadWay").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseTasks>().Result; + var result = (url + "/api/DownAPi/RequestMiJiRoadWay").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseTasks>().Result; Log.Information("璋冪敤WMS鎺ュ彛鍙嶉浠诲姟鎺ュ彛" + result.ToJson()); if (result.Success == 0) { @@ -56,6 +71,7 @@ { TaskType = TaskTypeEnum.In, Status = TaskStatusEnum.Wait, + Type = PLCTypeEnum.ConveyorLine, Origin = "WMS", StartLocate = startLocat, PalletNo = palletNo, @@ -64,7 +80,9 @@ EndLocate = result.TaskList.EndLocate, EndRoadway = result.TaskList.EndRoadway }; - + + var endLocat2 = PLCCommon.RoadwayToStationNum(taskAdd.EndRoadway, stationNum); + taskAdd.StartRoadway = dicConverCar[endLocat2]; _db.Insertable(taskAdd).ExecuteCommand(); endLocat = result.TaskList.EndRoadway; taskNo = result.TaskList.TaskNo; @@ -84,135 +102,46 @@ taskNo = task.TaskNo; } - endLocat = PLCCommon.RoadwayToStationNum(endLocat, ceng); + endLocat = PLCCommon.RoadwayToStationNum(endLocat, stationNum); return returnStr; } - /// <summary> - /// 璋冪敤WMS鎺ュ彛鑷姩鐮佸灈缁戝畾淇℃伅杩斿洖宸烽亾鍙� - /// </summary> - /// <returns></returns> - public string BindRequestRoadWay(string orderNo, string palletNo, decimal qty, string type, string skuNo, string lotNo, string lotText, string supplierLot, List<WcsBoxInfo> detail, - string startLocat, string taskModel, string ceng, ref string endLocat, ref string taskNo) - { - string returnStr = ""; - - var task = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing) && m.TaskType == TaskTypeEnum.In && m.PalletNo == palletNo); - if (task == null) - { - var model = new BoxPalletBindVm() - { - OrderCode = "",//鏆傛棤涓婃父绯荤粺缂栧彿 - AsnNo = orderNo, - AsnDetailNo = 0,//鏆傛棤鍏ュ簱鍗曟槑缁嗙紪鍙凤紝WMS鏍规嵁鐗╂枡鎵规鏌ユ壘 - PalletNo = palletNo, - Qty = qty, - Type = type, - SkuNo = skuNo, - LotNo = lotNo, - LotText = lotText, - SupplierLot = supplierLot, - Detail = detail - }; - string url = Urls.WMSAddress + ":" + Urls.WMSPort; - var result = (url + "/api/DownAPi/BindRequestRoadWay").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseTasks>().Result; - Log.Information("璋冪敤WMS鎺ュ彛鍙嶉浠诲姟鎺ュ彛" + result.ToJson()); - if (result.Success == 0) - { - var taskAdd = new WcsTask() - { - TaskType = TaskTypeEnum.In, - Status = TaskStatusEnum.Wait, - Origin = "WMS", - StartLocate = startLocat, - PalletNo = palletNo, - TaskNo = result.TaskList.TaskNo, - EndLocate = result.TaskList.EndLocate, - EndRoadway = result.TaskList.EndRoadway - }; - - _db.Insertable(taskAdd).ExecuteCommand(); - endLocat = result.TaskList.EndRoadway; - returnStr = result.TaskList.EndLocate; - } - else - { - returnStr = "-1:" + result.Message; - return returnStr; - } - } - else - { - returnStr = task.EndLocate; - endLocat = task.EndRoadway; - taskNo = task.TaskNo; - } - - endLocat = PLCCommon.RoadwayToStationNum(endLocat, ceng); - - return returnStr; - } /// <summary> /// 璋冪敤WMS鎺ュ彛鐢宠鍌ㄤ綅鎺ュ彛 /// </summary> /// <param name="palletNo"></param> - /// <param name="startLocat"></param> - /// <param name="taskModel"></param> - /// <param name="starRoadWay"></param> + /// <param name="taskId"></param> /// <param name="taskNo"></param> /// <returns></returns> - public string RequestLocate(string palletNo, string startLocat, string taskModel, string starRoadWay, ref string taskNo) + public string RequestLocate(string palletNo, int taskId,ref string taskNo) { string returnStr = ""; - - + var task = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing) - && m.TaskType == TaskTypeEnum.In && m.PalletNo == palletNo && !string.IsNullOrWhiteSpace(m.EndLocate)); + && m.TaskType == TaskTypeEnum.In && m.PalletNo == palletNo && m.TaskId == taskId); - if (task == null) + if (task != null) { var model = new RequestAsnTask() { PalletNo = palletNo, HouseNo = "W01", - RoadWayNo = starRoadWay, - TaskModel = taskModel + RoadWayNo = task.EndRoadway, }; - + string url = Urls.WMSAddress + ":" + Urls.WMSPort; - var result = (url + "/api/DownAPi/RequestLocation").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseTasks>().Result; + var result = (url + "/api/DownAPi/RequestMiJiLocation").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseTasks>().Result; Log.Information("璋冪敤WMS鐢宠鍌ㄤ綅鎺ュ彛鍙嶉浠诲姟鎺ュ彛" + result.ToJson()); if (result.Success == 0) { - var taskUp = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.TaskNo == result.TaskList.TaskNo); - if (taskUp == null) - { - var taskAdd = new WcsTask() - { - TaskNo = result.TaskList.TaskNo, - TaskType = TaskTypeEnum.In, - Status = TaskStatusEnum.Wait, - //IsSuccess =TaskSuccessEnum.Success, - Origin = "WMS", - StartLocate = startLocat, - PalletNo = palletNo, - EndLocate = result.TaskList.EndLocate, - EndRoadway = result.TaskList.EndRoadway - }; - _db.Insertable(taskAdd).ExecuteCommand(); - HubUtil.PublicTask(taskAdd.Adapt<WcsTaskOutput>()); - } - else - { - taskUp.EndRoadway = result.TaskList.EndRoadway; - taskUp.EndLocate = result.TaskList.EndLocate; - _db.Updateable(taskUp).ExecuteCommand(); - HubUtil.PublicTask(taskUp.Adapt<WcsTaskOutput>()); - } - - + task.Status = TaskStatusEnum.Wait; + task.Type = PLCTypeEnum.ShuttleCar; + task.EndLocate = result.TaskList.EndLocate; + _db.Updateable(task).ExecuteCommand(); + HubUtil.PublicTask(task.Adapt<WcsTaskOutput>()); + returnStr = result.TaskList.EndLocate; taskNo = result.TaskList.TaskNo; } @@ -224,8 +153,7 @@ } else { - returnStr = task.EndLocate; - taskNo = task.TaskNo; + returnStr = "-1:娌℃湁鎵惧埌浠诲姟"; } return returnStr; @@ -394,15 +322,76 @@ /// </summary> /// <param name="mod"></param> /// <returns></returns> - public async Task<AgvResponse> GenAgvSchedulingTask(AgvTaskInput mod) + public async Task<ResponseAgvDto> GenAgvSendTask(AgvTaskSend mod) { - string url = Urls.RCSAddress + ":" + Urls.RCSPort; - var result = await (url + "/rcms/services/rest/hikRpcService/genAgvSchedulingTask").SetBody(mod, "application/json", Encoding.UTF8).PostAsAsync<AgvResponse>(); + string url = Urls.RCSAddress + "/rcs/rtas/api/robot/controller/task/submit"; + var requestId = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString(); + var dic = new Dictionary<string, string>() + { + {"X-lr-request-id",requestId }, + {"X-lr-version","4.2" }, + }; + + var result = await url.SetHeaders(dic).SetBody(mod, "application/json", Encoding.UTF8).PostAsAsync<ResponseAgvDto>(); Log.Information("璋冪敤AGV灏忚溅鎺ュ彛涓嬪彂浠诲姟" + result.ToJson()); return result; } /// <summary> + /// 璋冪敤AGV灏忚溅鎺ュ彛缁х画鎵ц浠诲姟 + /// </summary> + /// <param name="taskNo">浠诲姟鍙�</param> + /// <returns></returns> + public async Task<ResponseAgvDto> GenAgvContinueTask(string taskNo) + { + + + string url = Urls.RCSAddress + "/rcs/rtas/api/robot/controller/task/continue"; + var requestId = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString(); + var dic = new Dictionary<string, object>() + { + {"X-lr-request-id","123456879" }, + {"X-lr-version","4.2" }, + }; + var mod = new + { + robotTaskCode = taskNo + }; + + var result = await url.SetHeaders(dic).SetBody(mod, "application/json", Encoding.UTF8).PostAsAsync<ResponseAgvDto>(); + Log.Information("璋冪敤AGV灏忚溅鎺ュ彛缁х画鎵ц浠诲姟" + result.ToJson()); + return null; + } + + /// <summary> + /// 璋冪敤AGV灏忚溅鎺ュ彛 杞藉叿锛堟墭鐩橈級涓庣珯鐐癸紙鍌ㄤ綅锛夎В缁戝畾鎺ュ彛 + /// </summary> + /// <param name="palletNo">鎵樼洏鍙�</param> + /// <param name="locateNo">鍌ㄤ綅鍙�</param> + /// <returns></returns> + public async Task<ResponseAgvDto> GenAgvUnbind(string palletNo,string locateNo) + { + + + string url = Urls.RCSAddress + "/rcs/rtas/api/robot/controller/carrier/unbind"; + var requestId = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString(); + var dic = new Dictionary<string, string>() + { + {"X-lr-request-id",requestId }, + {"X-lr-version","4.2" }, + }; + var mod = new + { + carrierCode = palletNo, + siteCode = locateNo + }; + + var result = await url.SetHeaders(dic).SetBody(mod, "application/json", Encoding.UTF8).PostAsAsync<ResponseAgvDto>(); + Log.Information("璋冪敤AGV灏忚溅鎺ュ彛缁х画鎵ц浠诲姟" + result.ToJson()); + return result; + } + + /// <summary> /// 璋冪敤AGV灏忚溅鎺ュ彛鍙嶉寮�闂ㄦ垚鍔� /// </summary> /// <param name="mod"></param> -- Gitblit v1.8.0