HH.WCS.QingXiNongfu/Program.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HH.WCS.QingXiNongfu/core/Monitor.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HH.WCS.QingXiNongfu/core/TaskCore.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HH.WCS.QingXiNongfu/process/DeviceProcess.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HH.WCS.QingXiNongfu/process/TaskProcess.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HH.WCS.QingXiNongfu/wms/TaskHelper.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
HH.WCS.QingXiNongfu/Program.cs
@@ -78,6 +78,9 @@ //Console.WriteLine(set1.SetEquals(set2)); //Console.WriteLine(set1.SetEquals(set3)); #endregion var uuu16 = "TN" + (DateTime.Now.ToString("yy")) + ((6180010+ "").PadLeft(8, '0')); Console.WriteLine(uuu16); } else { HH.WCS.QingXiNongfu/core/Monitor.cs
@@ -872,10 +872,10 @@ { var lastloC = locs.OrderByDescending(x => x.N_COL).FirstOrDefault(); if (lastloC.N_CURRENT_NUM == lastloC.N_CAPACITY) WCSHelper.Do(db => db.Deleteable(item).ExecuteCommand()); else if (new List<string>() { "YWLAQWJ", "YWLBQWJ", "YWLCQSX", "YWLDQWJ" }.Contains(item.S_AREA_CODE)) WCSHelper.Do(db => db.Deleteable(item).ExecuteCommand()); } } } } /// <summary> @@ -1018,7 +1018,7 @@ //InworkLock = false; var usingSpace = new List<string> { "入库接驳区", "库内接驳区", "出库接驳区", "提升机退料口" }; //usingSpace = new List<string> { "YWLRGDD", "YWLWJJB", "YWLYLTKQ", "YWLTKKTQ", "YWLKTDDQ", "YWLT1TSJ", "YWLT1TSJCD", "YWLT2TSJ", "YWLT2TSJCD" }; usingSpace = new List<string> { "YWLWJJB", "YWLYLTKQ", "YWLTKKTQ", "YWLRGDD", "YWLT1TSJ", "YWLT2TSJ" }; usingSpace = new List<string> { "YWLYLTKQ", "YWLTKKTQ", "YWLWJJB", "YWLRGDD", "YWLT1TSJ", "YWLT2TSJ" }; foreach (var area in usingSpace) { try @@ -3014,7 +3014,7 @@ if (endBit != null) { LogHelper.Info($"{spn} - 去中转区,找到位置{endBit.S_LOC_CODE}"); bool bb = TaskProcess.CreateTransport(order.SQL_WorkNo, strBit.S_LOC_CODE, endBit.S_LOC_CODE, spn + "中转去", new List<string> { crl.S_CNTR_CODE }, strBit.N_CURRENT_NUM, endBit.N_CURRENT_NUM++, 1, 50, crl.S_TYPE); bool bb = TaskProcess.CreateTransport(order.SQL_WorkNo, strBit.S_LOC_CODE, endBit.S_LOC_CODE, spn + "中转去", new List<string> { crl.S_CNTR_CODE }, strBit.N_CURRENT_NUM, endBit.N_CURRENT_NUM+1, 1, 50, crl.S_TYPE); LogHelper.Info($"{spn}未开,翻斗机开。线程,创建去{areaList}中转区的任务{(bb ? "成功" : "失败")}"); if (bb && needBread) { @@ -3607,8 +3607,9 @@ foreach (var od in orkOrd.OrderBy(x => x.TagOverTime).ThenBy(x => x.OutNum)) //foreach (var od in od2.ToList()) { list.Remove(od.S_ROW); var odsr = new List<string> { od.S_ROW }.Concat(list).Distinct().ToList(); var l2 = new List<string>() { "YWLAQWJ", "YWLBQWJ", "YWLCQSX", "YWLDQWJ" }; l2.Remove(od.S_ROW); var odsr = new List<string> { od.S_ROW }.Concat(l2).Distinct().ToList(); ///汇总仓库里最大层是几层。 Dictitems Lart = null; foreach (var area in odsr)//od.S_ROW.Split('$')) @@ -3625,6 +3626,7 @@ Lart = d; } } } } @@ -3684,20 +3686,23 @@ if (StartBit != null && Endbit != null) { var crs = _clrel.Select(x => x.S_CNTR_CODE).ToList(); var EndBit = Endbit.S_LOC_CODE; var jbbit = ""; if (od.S_ROW == "YWLCQSX" || od.S_ROW == "YWLDQWJ") { var locs1 = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == "YWLWJJB" && x.S_LOCK_STATE != "报废" && x.S_LOCK_STATE == "无" && x.N_CURRENT_NUM == 0).ToList(); if (locs1.Count() > 0) { EndBit = locs1.FirstOrDefault().S_LOC_CODE; jbbit = locs1.FirstOrDefault().S_LOC_CODE; } else { continue; } } var b = TaskProcess.CreateTransport(od.SQL_WorkNo, StartBit.S_LOC_CODE, EndBit, "原物料搬运-纸箱", crs, StartBit.N_CURRENT_NUM - crs.Count + 1, 1, crs.Count, PLC.taskPri, "", Endbit.S_LOC_CODE); var b = false; if (!string.IsNullOrEmpty(jbbit)) b = TaskProcess.CreateTransport(od.SQL_WorkNo, StartBit.S_LOC_CODE, jbbit, "原物料搬运-纸箱", crs, StartBit.N_CURRENT_NUM - crs.Count + 1, 1, crs.Count, PLC.taskPri, "", Endbit.S_LOC_CODE); else b = TaskProcess.CreateTransport(od.SQL_WorkNo, StartBit.S_LOC_CODE, Endbit.S_LOC_CODE, "原物料搬运-纸箱", crs, StartBit.N_CURRENT_NUM - crs.Count + 1, 1, crs.Count, PLC.taskPri); if (b) { var r = new RowLock { S_LOCK_SRC = od.SQL_ItemCode, T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "出库锁", S_AREA_CODE = StartBit.S_AREA_CODE, N_ROW = StartBit.N_ROW }; @@ -3724,7 +3729,7 @@ //else db.Insertable(r).ExecuteCommand(); od.TagOverTime = DateTime.Now; db.Updateable(od).UpdateColumns(it => new { it.TagOverTime }).ExecuteCommand(); break; //break; } } } @@ -3891,6 +3896,7 @@ var locS = LocationHelper.GetAreaNormalLocList(ODs.Key); foreach (var od in ODs) { LogHelper.Info($"from{od.S_START_AREA} mid:{od.S_ZZ_AREA} to{od.S_END_AREA} 开始 》》》"); if (string.IsNullOrEmpty(od.S_ZZ_AREA) || string.IsNullOrEmpty(od.S_END_AREA)) { LogHelper.CError($"from{od.S_START_AREA} mid:{od.S_ZZ_AREA} to{od.S_END_AREA} 数据缺失。无法完成移库。"); @@ -3910,10 +3916,12 @@ var lastful = rows.FindAll(x => x.N_CURRENT_NUM > 0).OrderBy(x => x.N_COL).LastOrDefault(); if (lastful != null) { LogHelper.Info($"from{od.S_START_AREA} mid:{od.S_ZZ_AREA} to{od.S_END_AREA} 找到移库起点》{lastful.S_LOC_CODE}。"); var crs = LocationHelper.GetLocCntrRel(lastful.S_LOC_CODE); var cntritems = ContainerHelper.GetCntrItemRel(crs.FirstOrDefault()?.S_CNTR_CODE); if (!cntritems.Any()) continue; LogHelper.Info($"from{od.S_START_AREA} mid:{od.S_ZZ_AREA} to{od.S_END_AREA} 找到移库起点》{lastful.S_LOC_CODE}。接驳是否被锁?:{InworkLock}"); var cir1 = cntritems.First(); if (od.S_ZZ_AREA == "YWLWJJB") { @@ -3934,7 +3942,7 @@ var cntrrel = ContainerHelper.GetCntrItemRel(rel.FirstOrDefault()?.S_CNTR_CODE).FirstOrDefault(); if (cntrrel == null) continue; if (cntrrel.S_ITEM_CODE == cir1.S_ITEM_CODE && cntrrel.S_ITEM_NAME == cir1.S_ITEM_NAME) if (cntrrel.S_ITEM_CODE == cir1.S_ITEM_CODE && cntrrel.S_ITEM_NAME == cir1.S_ITEM_NAME && cntrrel.S_CJ_NAME == cir1.S_CJ_NAME) { Endbit = zzrloclist.Find(x => x.N_COL > (_cl2?.N_COL ?? 0)); } @@ -3947,6 +3955,7 @@ break; } } LogHelper.Info($"from{od.S_START_AREA} mid:{od.S_ZZ_AREA} to{od.S_END_AREA} 找到移库终点》{Endbit?.S_LOC_CODE}"); if (Endbit != null) { //生成接驳区任务,标记为终点库区。 HH.WCS.QingXiNongfu/core/TaskCore.cs
@@ -200,16 +200,16 @@ var list = TaskHelper.GetTaskListByState("未执行"); if (list.Count > 0) { foreach (var mst in list) { var dinfo = Settings.GetDeviceInfoList().FindAll(x => x.deviceType == 13); if (dinfo.Find(x => x.location.Contains(mst.S_START_LOC)) != null) mst.N_PRIORITY = 99; else if (dinfo.Find(x => x.location.Contains(mst.S_END_LOC)) != null) mst.N_PRIORITY = 98; } list = list.OrderByDescending(x => x.N_PRIORITY).ToList(); //foreach (var mst in list) //{ // var dinfo = Settings.GetDeviceInfoList().FindAll(x => x.deviceType == 13); // if (dinfo.Find(x => x.location.Contains(mst.S_START_LOC)) != null) // mst.N_PRIORITY = 99; // else // if (dinfo.Find(x => x.location.Contains(mst.S_END_LOC)) != null) // mst.N_PRIORITY = 98; //} //list = list.OrderByDescending(x => x.N_PRIORITY).ToList(); list.ForEach(task => { HH.WCS.QingXiNongfu/process/DeviceProcess.cs
@@ -178,6 +178,7 @@ { if (od.SQL_Total >= v[0]) { LogHelper.Info(plc.deviceName + $"已累计信号量{od.SQL_Total} 待领料数{od.OutNum}--开始转换(信号量>{(od.SQL_Total - v[0])} 领料数>{od.OutNum + v[1]}"); od.SQL_Total -= v[0]; od.OutNum += v[1]; WCSHelper.Do(db => @@ -299,6 +300,10 @@ { db.Insertable(lirl).ExecuteCommand(); db.Insertable(lcrl).ExecuteCommand(); db.Insertable(new Container { S_CNTR_CODE=lirl.FirstOrDefault().S_CNTR_CODE, }).ExecuteCommand(); db.Updateable(_cl).UpdateColumns(x => new { x.N_CURRENT_NUM }).ExecuteCommand(); }); goto ballll; @@ -321,7 +326,7 @@ si = "0"; } else if (data.Contains("11") && (ods.Find(x => x.SQL_PLineNo.Contains("纸箱")) != null||plc.deviceName.Contains("T1"))) else if (data.Contains("11") && (ods.Find(x => x.SQL_PLineNo.Contains("纸箱")) != null || plc.deviceName.Contains("T1"))) { //if (!ods.Any()) // return; @@ -1809,9 +1814,18 @@ } if (add) { LogHelper.Info($@"{plc.deviceName}新到位信号。 执行YWL工单信号量增加1"); var ods = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_State == "执行中" && x.WorkType == 6 && x.SQL_LinkLineNO == plc.deviceName);//.FirstOrDefault(); if (ods.Any()) { LogHelper.Info($@"{plc.deviceName}新到位信号,找到工单{JsonConvert.SerializeObject(ods.Select(x => new { x.SQL_PLineNo, x.SQL_LinkLineNO, x.SQL_Total, x.OutNum }))}"); foreach (var od in ods) { od.SQL_Total += 1; HH.WCS.QingXiNongfu/process/TaskProcess.cs
@@ -387,7 +387,7 @@ } //终点货位为 YWLT1TSJCD 或者 YWLT2TSJCD 的 要取货完成解锁起点,解绑起点,绑定终点,卸货完成,解锁终点 2025年6月10日 Plg //if (mst.S_END_LOC?.Trim() == "YWLT1TSJCD" || mst.S_END_LOC?.Trim() == "YWLT2TSJCD") //if (mst.S_END_LAREA?.Trim() == "YWLT1TSJCD" || mst.S_END_LAREA?.Trim() == "YWLT2TSJCD") //{ // //解绑起点 // CacheBitUpdate(mst, load: true); @@ -399,19 +399,22 @@ //new List<string> { "成品满框-入库", "" } if (state == 6 || state == 5) { LogHelper.Info($"任务类型:{mst.S_TYPE}- 动作:{state}. 是否5算6?{mst.S_TYPE.Contains("成品满框") || mst.S_TYPE.Contains("备货")} "); if (mst.S_TYPE.Contains("备货")) { if (state == 6) goto vvv; } else if (state == 5) goto vvv; ///只需要释放货位就行了 //if (mst.S_END_LOC?.Trim() == "YWLT1TSJCD" || mst.S_END_LOC?.Trim() == "YWLT2TSJCD") //{ // LocationHelper.UnLockLoc(mst.S_END_LOC.Trim()); // return r; //} else if (state == 5) { ///只需要释放货位就行了 //if (mst.S_END_LAREA?.Trim() == "YWLT1TSJCD" || mst.S_END_LAREA?.Trim() == "YWLT2TSJCD") //{ // LocationHelper.UnLockLoc(mst.S_END_LOC.Trim()); // return r; //} goto vvv; } if (mst.S_TYPE.Trim() == "J空瓶坯-出库") { @@ -1523,10 +1526,10 @@ } } if (Settings.GetDeviceInfoList().Find(x => x.location.Contains(mst.S_END_LOC))?.deviceType == 13 && mst.S_TYPE.Contains("收缩膜叉运")) { end = 7027; } //if (Settings.GetDeviceInfoList().Find(x => x.location.Contains(mst.S_END_LOC))?.deviceType == 13 && mst.S_TYPE.Contains("收缩膜叉运")) //{ // end = 7027; //} LogHelper.Info("SendTask " + mst.S_TASK_NO); Console.WriteLine("start=" + start.ToString()); HH.WCS.QingXiNongfu/wms/TaskHelper.cs
@@ -1,11 +1,14 @@ using HH.WCS.QingXigongchang.process; using HH.WCS.QingXigongchang.dispatch; using HH.WCS.QingXigongchang.process; using HH.WCS.QingXigongchang.util; using Newtonsoft.Json; using NLog.Fluent; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; namespace HH.WCS.QingXigongchang.wms { @@ -86,6 +89,10 @@ { var fromLoc = LocationHelper.GetLoc(from); var endLoc = LocationHelper.GetLoc(to); //NDCHelper.ChangeParam(taskNo, agvsite, 2); //NDCHelper.ChangeParam(taskNo, 2, 6); if (fromLoc.S_AREA_CODE == "YWLRGDD") { //查询任务表 要求是只能生成两个任务 起点库区为YWLRGDD hh_plg 2025年6月9日 @@ -123,6 +130,12 @@ return false; } } if (!taskType.Contains("成品满框-入库")) if (endLoc.N_CURRENT_NUM >= endLayer || fromLoc.N_CURRENT_NUM < startLayer) { LogHelper.Info($"CreateTransport- CreateTask Error" + $"起点数量{fromLoc.N_CURRENT_NUM}<{startLayer}或者{endLoc.N_CURRENT_NUM}>={endLayer} "); return false; } } WMSTask wmsTask = new WMSTask() { @@ -146,6 +159,8 @@ }; LogHelper.Info($"CreateTransport- CreateTask" + $"{JsonConvert.SerializeObject(wmsTask)}"); LogHelper.Info($"CreateTransport- CreateTask {wmsTask.S_TASK_NO} 起点:{JsonConvert.SerializeObject(from)}"); LogHelper.Info($"CreateTransport- CreateTask {wmsTask.S_TASK_NO} 终点:{JsonConvert.SerializeObject(to)}"); return CreateTask(wmsTask, lockLoc); } internal static string GetDeptName(string taskType) @@ -227,37 +242,48 @@ internal static void End(WMSTask task) { var db = new SqlHelper<WMSTask>().GetInstance(); if (task != null) { task.S_B_STATE = "完成"; task.T_END_TIME = DateTime.Now; db.Updateable(task).UpdateColumns(it => new { it.S_B_STATE, it.T_END_TIME }).ExecuteCommand(); } //plg 2025年6月13日 10:42:24 if (task.S_END_LAREA == "YWLWJJB" && task.S_START_LAREA != "YWLRGDD") { var model = db.Queryable<Location>().Where(a => a.S_LOC_CODE == task.S_TWO_END_LOC).First(); //先解锁终点 在锁定 //db.Ado.BeginTran(); //try //{ // model.S_LOCK_STATE = "无"; // var res = db.Updateable(model).UpdateColumns(it => new { it.S_LOCK_STATE }).ExecuteCommand() > 0; // LogHelper.Info(task.S_TWO_END_LOC + "LockLoc:锁结果" + res); // db.Ado.CommitTran(); //} //catch (Exception ex) //{ // db.Ado.RollbackTran(); // LogHelper.Info("CreateTask 失败 " + ex.Message); //} if (model != null) { //先解锁终点 在锁定 db.Ado.BeginTran(); try { model.S_LOCK_STATE = "无"; var res = db.Updateable(model).UpdateColumns(it => new { it.S_LOCK_STATE }).ExecuteCommand() > 0; LogHelper.Info(task.S_TWO_END_LOC + "LockLoc:锁结果" + res); db.Ado.CommitTran(); } catch (Exception ex) { db.Ado.RollbackTran(); LogHelper.Info("CreateTask 失败 " + ex.Message); } LogHelper.Info(task.S_TWO_END_LOC + "二段任务 开始。 "); var b = TaskProcess.CreateTransport(task.S_SRC_NO, task.S_END_LOC, task.S_TWO_END_LOC, "原物料搬运-纸箱", task.S_CNTRS.Split(',').ToList(), task.N_START_LAYER, 1, task.N_CNTR_COUNT, task.N_PRIORITY); //if (b) //{ // if (task != null) // { // task.S_B_STATE = "完成"; // task.T_END_TIME = DateTime.Now; // db.Updateable(task).UpdateColumns(it => new { it.S_B_STATE, it.T_END_TIME }).ExecuteCommand(); // } //} } } if (task != null) { task.S_B_STATE = "完成"; task.T_END_TIME = DateTime.Now; db.Updateable(task).UpdateColumns(it => new { it.S_B_STATE, it.T_END_TIME }).ExecuteCommand(); } } internal static void Fail(WMSTask task) {