| | |
| | | [ |
| | | {"address":"10.140.3.164","deviceName":"550","FuLeLineNo":"青溪成品仓QX1输送线","deviceNo":[],"location":["CX-2","CX-1"],"areaPriy":["QX-01","QX-02","QX-03","QX-04","QX-05","QX-06","QX-07","QX-08","QX-09","QX-10","QX-11","QX-12","QX-13","QX-14","QX-15","QX-16","QX-19",],"deviceType":9,"enable":1}, |
| | | |
| | | {"address":"10.140.9.168","deviceName":"注塑机","deviceNo":["","666"],"location":["ZSJ1-1","ZSJ1-2"],"deviceType":8,"enable":1}, |
| | | {"address":"10.140.9.168","deviceName":"550注塑机","deviceNo":["","666"],"location":["ZSJ1-1","ZSJ1-2"],"deviceType":8,"enable":1}, |
| | | |
| | | {"address":"10.140.9.169","deviceName":"注塑机3","deviceNo":["","664"],"location":["ZSJ3-1","ZSJ3-2"],"deviceType":8,"enable":1}, |
| | | |
| | | {"address":"10.140.3.176","deviceName":"注塑机4","deviceNo":["","666"],"location":["ZSJ4-1","ZSJ4-2"],"deviceType":8,"enable":1}, |
| | | {"address":"10.140.9.169","deviceName":"注塑机4","deviceNo":["","666"],"location":["ZSJ4-1","ZSJ4-2"],"deviceType":8,"enable":1}, |
| | | |
| | | {"address":"10.140.3.150","deviceName":"注塑机5","deviceNo":["","659"],"location":["ZSJ5-1","ZSJ5-2"],"deviceType":8,"enable":1}, |
| | | |
| | | {"address":"10.140.3.161","deviceName":"翻斗机","deviceNo":["","999"],"location":["FDJ-1P-1L-1C"],"deviceType":5,"enable":1}, |
| | | {"address":"10.140.9.167","deviceName":"550翻斗机","deviceNo":["","999"],"location":["FDJ-1P-1L-1C"],"deviceType":5,"enable":1}, |
| | | |
| | | {"address":"10.140.3.181","deviceName":"3线翻斗机","deviceNo":["","979"],"location":["SXFDJ1"],"deviceType":5,"enable":1}, |
| | | |
| | |
| | | {"address":"10.140.3.178","deviceName":"CX4","FuLeLineNo":"青溪成品仓QX4输送线","deviceNo":[],"location":["CX4-2","CX4-1"],"areaPriy":["QX-01","QX-02","QX-03","QX-04","QX-05","QX-06","QX-07","QX-08","QX-09","QX-10","QX-11","QX-12","QX-13","QX-14","QX-15","QX-16","QX-19",],"deviceType":9,"enable":1}, |
| | | |
| | | |
| | | {"address":"10.140.9.167","deviceName":"5L注塑机","deviceNo":["","665"],"location":["5LZSJ1-1","5LZSJ1-2"],"deviceType":8,"enable":1}, |
| | | {"address":"10.140.9.161","deviceName":"5L注塑机","deviceNo":["","665"],"location":["5LZSJ1-1","5LZSJ1-2"],"deviceType":8,"enable":1}, |
| | | {"address":"10.140.3.167","deviceName":"5L翻斗机","deviceNo":["","998"],"location":["5LFDJ"],"deviceType":5,"enable":1}, |
| | | |
| | | {"address":"10.140.3.155","deviceName":"门plc2","deviceNo":["2"],"location":[],"deviceType":1,"enable":1}, |
| | |
| | | var sign = Settings.GetTimeStamp(); |
| | | var res = TaskProcess.CreateTransport(sign, _cl.S_LOC_CODE, endbit.S_LOC_CODE, "原物料搬运-纸箱", _clrel.Select(x => x.S_CNTR_CODE).ToList(), 1, endbit.N_CURRENT_NUM + 1, 1, 50, Last);///, EdnRarea == "YWLYLTKQ" ? _clrel0.S_TYPE : ""); |
| | | LogHelper.Info($"{r.Key}原物料搬运 {sign} 任务 ,创建{res} "); |
| | | if (CDlist.Contains(endbit.S_AREA_CODE) && res) |
| | | { |
| | | LogHelper.Info($"添加内存排锁"); |
| | | var ggf = inlockLis.Find(e => e.S_LOCK_SRC == cir1.S_ITEM_CODE + cir1.S_ITEM_NAME + cir1.S_CJ_NAME && e.S_AREA_CODE == endbit.S_AREA_CODE && e.N_ROW == endbit.N_ROW); |
| | | LogHelper.Info($"添加内存排锁 是否查询到数据:{JsonConvert.SerializeObject(ggf)}"); |
| | | if (ggf == null) |
| | | { |
| | | var rrrr = new RowLock { S_LOCK_SRC = cir1.S_ITEM_CODE + cir1.S_ITEM_NAME + cir1.S_CJ_NAME, T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "入库锁", S_AREA_CODE = endbit.S_AREA_CODE, N_ROW = endbit.N_ROW }; |
| | | inlockLis.Add(rrrr); |
| | | LogHelper.Info($"添加内存排锁 添加数据到内存排锁中:{JsonConvert.SerializeObject(inlockLis)}"); |
| | | } |
| | | } |
| | | //if (CDlist.Contains(endbit.S_AREA_CODE) && res) |
| | | //{ |
| | | // LogHelper.Info($"添加内存排锁"); |
| | | // var ggf = inlockLis.Find(e => e.S_LOCK_SRC == cir1.S_ITEM_CODE + cir1.S_ITEM_NAME + cir1.S_CJ_NAME && e.S_AREA_CODE == endbit.S_AREA_CODE && e.N_ROW == endbit.N_ROW); |
| | | // LogHelper.Info($"添加内存排锁 是否查询到数据:{JsonConvert.SerializeObject(ggf)}"); |
| | | // if (ggf == null) |
| | | // { |
| | | // var rrrr = new RowLock { S_LOCK_SRC = cir1.S_ITEM_CODE + cir1.S_ITEM_NAME + cir1.S_CJ_NAME, T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "入库锁", S_AREA_CODE = endbit.S_AREA_CODE, N_ROW = endbit.N_ROW }; |
| | | // inlockLis.Add(rrrr); |
| | | // LogHelper.Info($"添加内存排锁 添加数据到内存排锁中:{JsonConvert.SerializeObject(inlockLis)}"); |
| | | // } |
| | | //} |
| | | //if (res && inlock == null && isCd) |
| | | //{ |
| | | // var rrrr = new RowLock { S_LOCK_SRC = cir1.S_ITEM_CODE + cir1.S_ITEM_NAME + cir1.S_CJ_NAME, T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "入库锁", S_AREA_CODE = endbit.S_AREA_CODE, N_ROW = endbit.N_ROW }; |
| | |
| | | } |
| | | //}); |
| | | |
| | | var task11 = Task.Run(() => |
| | | try |
| | | { |
| | | try |
| | | // var yuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "无菌标签出库" && x.WorkType == 6 && x.SQL_State == "执行中").FindAll(x => x.OutNum > 0 && DateTime.Now.Subtract(x.SQL_Modify_TIme ?? DateTime.Now).TotalSeconds > 10).OrderBy(x => x.TagOverTime).ToList(); |
| | | var yuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "中水标签出库" && x.WorkType == 6 && x.SQL_State == "执行中").FindAll(x => x.OutNum > 0).OrderBy(x => x.TagOverTime).ToList(); |
| | | if (LocLock(SX_BQ.RK_BBHJQ)) |
| | | { |
| | | // var yuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "无菌标签出库" && x.WorkType == 6 && x.SQL_State == "执行中").FindAll(x => x.OutNum > 0 && DateTime.Now.Subtract(x.SQL_Modify_TIme ?? DateTime.Now).TotalSeconds > 10).OrderBy(x => x.TagOverTime).ToList(); |
| | | var yuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "中水标签出库" && x.WorkType == 6 && x.SQL_State == "执行中").FindAll(x => x.OutNum > 0).OrderBy(x => x.TagOverTime).ToList(); |
| | | if (LocLock(SX_BQ.RK_BBHJQ)) |
| | | { |
| | | //水标入库 |
| | | YwlBQ_CreInwork(SblocsFirst, SX_BQ.RK_BQDDQ, SX_BQ.RK_BBHJQ); |
| | | } |
| | | if (yuworders.Any()) |
| | | { |
| | | LogHelper.Info($" 无菌出库 工单开启中 "); |
| | | // 中水标签退库。货架直接出到线边 |
| | | ZsBQ_CreWJOutOrder(); |
| | | } |
| | | // 中水标签退库。 |
| | | ZsBQ_CreWJTK(); |
| | | //水标入库 |
| | | YwlBQ_CreInwork(SblocsFirst, SX_BQ.RK_BQDDQ, SX_BQ.RK_BBHJQ); |
| | | } |
| | | catch (Exception ex) |
| | | if (yuworders.Any()) |
| | | { |
| | | LogHelper.Error(ex.Message, ex); |
| | | LogHelper.Info($" 无菌出库 工单开启中 "); |
| | | // 中水标签退库。货架直接出到线边 |
| | | ZsBQ_CreWJOutOrder(); |
| | | } |
| | | }); |
| | | // 中水标签退库。 |
| | | ZsBQ_CreWJTK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogHelper.Error(ex.Message, ex); |
| | | } |
| | | |
| | | |
| | | var plc = Settings.GetDeviceInfoList().Where(a => a.deviceName == "T2提升机").FirstOrDefault(); |
| | | var task2 = Task.Run(() => |
| | |
| | | Location Endbit = null; |
| | | //if (area == area/* WJ_BQ.RK_BQJBQ*/) |
| | | //{ |
| | | var hjs = LocationHelper.GetAreaNormalLocList(WJ_BQ.RK_BBHJQ, true, false); |
| | | Endbit = hjs.FindAll(x => x.N_CURRENT_NUM == 0 && x.N_LAYER == (s_type == .5 ? 1 : (s_type == .75 ? 2 : 3))).OrderBy(x => x.N_ROW).ThenBy(x => x.N_COL).FirstOrDefault(); |
| | | var hjs = LocationHelper.GetAreaNormalLocList(WJ_BQ.RK_BBHJQ, false, false); |
| | | var Type = s_type == .5 ? 1 : (s_type == .75 ? 2 : 3); |
| | | Endbit = hjs.FindAll(x => x.N_CURRENT_NUM == 0 && x.N_LAYER == Type).OrderBy(x => x.N_ROW).ThenBy(x => x.N_COL).FirstOrDefault(); |
| | | if (Endbit != null) |
| | | { |
| | | var re = TaskProcess.CreateTransport("", lastfull.S_LOC_CODE.Trim(), Endbit.S_LOC_CODE, "标签叉运-线边标签退库", CNTR.Select(x => x.S_CNTR_CODE).ToList(), 1, 1, 1, 62); |
| | |
| | | else |
| | | { |
| | | //检测指定库区的物料排总数量 |
| | | if (dsi.TryGetValue(od.S_ROW, out var dictitems1)) |
| | | { |
| | | //var rows = dictitems1.Select(x => x.Row).Distinct(); |
| | | //var loclist = LocationHelper.GetLocList(x => x.S_AREA_CODE == od.S_ROW && rows.Contains(x.N_ROW)); |
| | | ////查询可用货位有多少 |
| | | //List<string> Ky = new List<string>() { "无", "出库锁", "入库锁" }; |
| | | //var loclistK = loclist.FindAll(x => Ky.Contains(x.S_LOCK_STATE)).Count(); |
| | | //var count = loclist.FindAll(x => x.N_CURRENT_NUM > 0 && x.S_LOCK_STATE == "无").Sum(x => x.N_CURRENT_NUM); |
| | | //LogHelper.Info("AutoRun13TSJ" + $"od.S_ROW 出库余量判断是否需要转运。-{count}< 总共能用的货位数{loclistK} -7"); |
| | | //if (count < loclistK - 7) |
| | | //{ |
| | | // autoTurn = true; |
| | | // _sAB没物料或者余量不足开始触发跟根据自动转运_名字越长越好(od); |
| | | //} |
| | | } |
| | | //if (dsi.TryGetValue(od.S_ROW, out var dictitems1)) |
| | | //{ |
| | | // //var rows = dictitems1.Select(x => x.Row).Distinct(); |
| | | // //var loclist = LocationHelper.GetLocList(x => x.S_AREA_CODE == od.S_ROW && rows.Contains(x.N_ROW)); |
| | | // ////查询可用货位有多少 |
| | | // //List<string> Ky = new List<string>() { "无", "出库锁", "入库锁" }; |
| | | // //var loclistK = loclist.FindAll(x => Ky.Contains(x.S_LOCK_STATE)).Count(); |
| | | // //var count = loclist.FindAll(x => x.N_CURRENT_NUM > 0 && x.S_LOCK_STATE == "无").Sum(x => x.N_CURRENT_NUM); |
| | | // //LogHelper.Info("AutoRun13TSJ" + $"od.S_ROW 出库余量判断是否需要转运。-{count}< 总共能用的货位数{loclistK} -7"); |
| | | // //if (count < loclistK - 7) |
| | | // //{ |
| | | // // autoTurn = true; |
| | | // // _sAB没物料或者余量不足开始触发跟根据自动转运_名字越长越好(od); |
| | | // //} |
| | | //} |
| | | } |
| | | Location Endbit = null; |
| | | |
| | |
| | | var ggf = db.Updateable(od).UpdateColumns(it => new { it.TagOverTime, it.TagOver, it.OutNum }).ExecuteCommand(); |
| | | LogHelper.Info($"上提升机任务 更新工单的时间影响行数: {ggf}"); |
| | | |
| | | 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 }; |
| | | // 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 }; |
| | | |
| | | //给终点锁定住 |
| | | if (od.S_ROW == "YWLCQSX" || od.S_ROW == "YWLDQWJ") |
| | |
| | | TaskProcess.OperateStatus(wmsTask, 7); |
| | | wmsTask.T_END_TIME = DateTime.Now; |
| | | TaskHelper.UpdateStatus(wmsTask, "取消"); |
| | | try |
| | | { |
| | | if (wmsTask.S_TYPE.Contains("注塑满托-入库")) |
| | | { |
| | | var plc = Settings.GetDeviceInfoList().Where(a => a.location.Any(str => str == wmsTask.S_START_LOC)).FirstOrDefault(); |
| | | if (plc != null) |
| | | { |
| | | for (var i = 0; i < plc.location.Length; i++) |
| | | { |
| | | if (wmsTask.S_START_LOC == plc.location[i]) |
| | | { |
| | | PlcHelper.SendHex(plc.address, "3F00" + (i + 1) + "0" + "0d0a"); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else if (wmsTask.S_TYPE.Contains("注塑空拖-出库")) |
| | | { |
| | | var plc = Settings.GetDeviceInfoList().Where(a => a.location.Any(str => str == wmsTask.S_END_LOC)).FirstOrDefault(); |
| | | if (plc != null) |
| | | { |
| | | for (var i = 0; i < plc.location.Length; i++) |
| | | { |
| | | if (wmsTask.S_END_LOC == plc.location[i]) |
| | | { |
| | | PlcHelper.SendHex(plc.address, "3F00" + (i + 1) + "0" + "0d0a"); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else if (wmsTask.S_TYPE.Contains("瓶坯翻斗机满托-出库")) |
| | | { |
| | | var plc = Settings.GetDeviceInfoList().Where(a => a.location.Any(str => str == wmsTask.S_END_LOC)).FirstOrDefault(); |
| | | if (plc != null) |
| | | { |
| | | PlcHelper.SendHex(plc.address, "3F00110D0A"); |
| | | } |
| | | |
| | | } |
| | | else if (wmsTask.S_TYPE.Contains("瓶坯翻斗机空托-入库")) |
| | | { |
| | | var plc = Settings.GetDeviceInfoList().Where(a => a.location.Any(str => str == wmsTask.S_START_LOC)).FirstOrDefault(); |
| | | if (plc != null) |
| | | { |
| | | PlcHelper.SendHex(plc.address, "3F00110D0A"); |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | throw; |
| | | } |
| | | break; |
| | | case 8://强制完成 - 未使用 |
| | | r = TaskProcess.OperateStatus(wmsTask, 8); |
| | |
| | | //翻斗机 - 瓶坯 |
| | | else if (plc.deviceType == 5) |
| | | { |
| | | AnalysisBottleCapTipper(data, plc); |
| | | |
| | | PpFdjData(data, plc); |
| | | // AnalysisBottleCapTipper(data, plc); |
| | | } |
| | | //翻斗机 - 瓶盖 4 水盖。6 无菌 |
| | | else if (plc.deviceType <= 6) |
| | |
| | | private static object lockoIn = new object(); |
| | | private static object lockoOut = new object(); |
| | | |
| | | /// <summary> |
| | | /// 瓶坯机 |
| | | /// </summary> |
| | | /// <param name="plc"></param> |
| | | /// <param name="location"></param> |
| | | /// <returns></returns> |
| | | static bool BottlePEMInfoFullTwo(Settings.deviceInfo plc, string location) |
| | | { |
| | | try |
| | |
| | | } |
| | | } |
| | | } |
| | | if (staBit != null) |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | if (staBit != null) |
| | | { |
| | |
| | | foreach (var Area in AreaList) |
| | | { |
| | | var Row = jcjykk.Select(e => e.N_ROW).Distinct().ToList(); |
| | | |
| | | |
| | | |
| | | var EndList = GetInWork(Area, Row, true, workOrder.SQL_ItemCode); |
| | | if (EndList.Any()) |
| | | { |
| | |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | if (endBit != null) |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | if (endBit != null) |
| | |
| | | /// <param name="Row"></param> |
| | | /// <param name="ItemCode"></param> |
| | | /// <returns></returns> |
| | | public static List<Location> GetInWork(string AreaCode, List<int> Row, bool InOutLock = true, string ItemCode = "") |
| | | public static List<Location> GetInWork(string AreaCode, List<int> Row, bool InOutLock = true, string ItemCode = "", string Jt = "") |
| | | { |
| | | var lstCanOutL = new List<Location>(); |
| | | try |
| | |
| | | var MaxCol = Mhw.FindAll(e => e.N_ROW == item.N_ROW).OrderByDescending(c => c.N_COL).FirstOrDefault(); |
| | | if (MaxCol != null) |
| | | { |
| | | lstCanOutL.RemoveAll(e => e.S_AREA_CODE == item.S_AREA_CODE && e.N_ROW == item.N_ROW && e.N_COL < MaxCol.N_COL); |
| | | if (!string.IsNullOrEmpty(ItemCode) && AreaCode == "QXPPXXQ") |
| | | { |
| | | lstCanOutL.RemoveAll(e => e.S_AREA_CODE == item.S_AREA_CODE && e.N_ROW == item.N_ROW && e.N_COL < MaxCol.N_COL); |
| | | } |
| | | else if (AreaCode == "QXPPXXQ" && Jt == "翻斗机") |
| | | { |
| | | lstCanOutL.RemoveAll(e => e.S_AREA_CODE == item.S_AREA_CODE && e.N_ROW == item.N_ROW && e.N_COL > MaxCol.N_COL); |
| | | } |
| | | //if (!string.IsNullOrEmpty(ItemCode) && AreaCode == "QXPPXXQ") |
| | | //{ |
| | | // lstCanOutL.RemoveAll(e => e.S_AREA_CODE == item.S_AREA_CODE && e.N_ROW == item.N_ROW && e.N_COL < MaxCol.N_COL); |
| | | //} |
| | | //else |
| | | //{ |
| | | // lstCanOutL.RemoveAll(e => e.S_AREA_CODE == item.S_AREA_CODE && e.N_ROW == item.N_ROW && e.N_COL > MaxCol.N_COL); |
| | | //} |
| | | } |
| | | } |
| | | |
| | |
| | | return result; |
| | | } |
| | | |
| | | public static void PpFdjData(string Data, Settings.deviceInfo plc) |
| | | { |
| | | try |
| | | { |
| | | if (Data.Length == 2) |
| | | { |
| | | if (Data == "11") |
| | | { |
| | | BottlePpFdjFullTwo(plc, plc.location[0]); |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | throw; |
| | | } |
| | | } |
| | | private static object lockoPp = new object(); |
| | | /// <summary> |
| | | /// 瓶坯翻斗机 |
| | | /// </summary> |
| | | /// <param name="plc"></param> |
| | | /// <param name="location"></param> |
| | | /// <returns></returns> |
| | | static bool BottlePpFdjFullTwo(Settings.deviceInfo plc, string location) |
| | | { |
| | | try |
| | | { |
| | | lock (lockoPp) |
| | | { |
| | | var chi = new SqlHelper<object>().GetInstance(); |
| | | var newDb = chi.CopyNew(); |
| | | Location endBit = null; |
| | | Location staBit = null; |
| | | bool SentTask = false; |
| | | if (location == "") |
| | | { |
| | | throw new Exception("货位为空"); |
| | | } |
| | | var workOrder = WCSHelper.GetWorkOrder(plc.deviceName); |
| | | if (workOrder == null) |
| | | { |
| | | throw new Exception("没有【执行中】的工单"); |
| | | } |
| | | //先查询货位有没有货 满的下满 空的则上空 |
| | | // = newDb.Queryable<Location>().FindAll(x => x.S_LOCK_STATE == "无" && x.N_CURRENT_NUM == 0); |
| | | var hojs = newDb.Queryable<Location>().Where(e => e.S_LOC_CODE == location).First(); |
| | | if (hojs != null && hojs.S_LOCK_STATE != "无") |
| | | { |
| | | return false; |
| | | } |
| | | var bcpList = WCSHelper.BcpQyOrderList(plc.deviceName); |
| | | if (bcpList.Count() == 0) |
| | | { |
| | | throw new Exception("未划分对应的区域 查看这个产线是否在半成品区域表进行配置 并启用"); |
| | | } |
| | | if (hojs.N_CURRENT_NUM == 0)//上托盘 否则下托盘 |
| | | { |
| | | //上托盘 满托 |
| | | var jcjykk = bcpList.FindAll(e => e.S_CNTR_TYPE == "满托").OrderByDescending(g => g.N_PRI).ToList(); |
| | | var AreaList = jcjykk.Select(e => e.S_AREA_CODE).Distinct().ToList(); |
| | | foreach (var Area in AreaList) |
| | | { |
| | | var Row = jcjykk.FindAll(f => f.S_AREA_CODE == Area).Select(e => e.N_ROW).Distinct().ToList(); |
| | | //过算法 计算起点 |
| | | var staList = GetOutWork(Area, Row, true, workOrder.SQL_ItemCode); |
| | | if (staList.Any()) |
| | | { |
| | | foreach (var item in jcjykk) |
| | | { |
| | | Location sta = null; |
| | | var staLisL = staList.FindAll(e => e.S_AREA_CODE == item.S_AREA_CODE && e.N_ROW == item.N_ROW).ToList(); |
| | | if (staLisL.Any()) |
| | | { |
| | | if (item.S_AREA_CODE != "QXPPXXQ") |
| | | { |
| | | sta = staLisL.OrderByDescending(e => e.N_COL).First(); |
| | | } |
| | | else |
| | | { |
| | | sta = staLisL.OrderBy(e => e.N_COL).First(); |
| | | } |
| | | |
| | | } |
| | | if (sta != null) |
| | | { |
| | | staBit = sta; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | if (staBit != null) |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | if (staBit != null) |
| | | { |
| | | var _ctrl = LocationHelper.GetLocCntrRel(staBit.S_LOC_CODE); |
| | | int StaLayer = staBit.N_CURRENT_NUM; |
| | | var carryCntrs = new List<string> { _ctrl.FirstOrDefault().S_CNTR_CODE };//DateTime.Now.ToString("yyMMddHHmmss") }; |
| | | var bb = TaskProcess.CreateTransport(workOrder.SQL_WorkNo, staBit.S_LOC_CODE, location, "瓶坯翻斗机满托-出库", carryCntrs, StaLayer, 1, carryCntrs.Count, plc.taskPri); |
| | | if (bb) |
| | | { |
| | | SentTask = true; |
| | | } |
| | | } |
| | | if (SentTask) |
| | | { |
| | | return SentTask; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | var time = LocationHelper.GetT_FULL_TIME(location); |
| | | LogHelper.Info(location + ":托盘放置时间:(" + time + ") 货位托盘数量(" + hojs.N_CURRENT_NUM + ")"); |
| | | if (DateTime.Now.Subtract(time ?? DateTime.Now).TotalMinutes < 1) |
| | | { |
| | | PlcHelper.SendHex(plc.address, "3F00110D0A"); |
| | | return false; |
| | | } |
| | | LocCntrRel _clrel = LocationHelper.GetLocCntrRel(hojs.S_LOC_CODE).FirstOrDefault(); |
| | | //下托盘 空框 |
| | | var jcjykk = bcpList.FindAll(e => e.S_CNTR_TYPE == "空托").OrderByDescending(g => g.N_PRI).ToList(); |
| | | var AreaList = jcjykk.Select(e => e.S_AREA_CODE).Distinct().ToList(); |
| | | |
| | | //过算法 计算起点 |
| | | foreach (var Area in AreaList) |
| | | { |
| | | var Row = jcjykk.Select(e => e.N_ROW).Distinct().ToList(); |
| | | var EndList = GetInWork(Area, Row, true, "", "翻斗机"); |
| | | if (EndList.Any()) |
| | | { |
| | | foreach (var item in jcjykk) |
| | | { |
| | | Location End = null; |
| | | var EndListT = EndList.FindAll(e => e.S_AREA_CODE == item.S_AREA_CODE && e.N_ROW == item.N_ROW).ToList(); |
| | | if (EndListT.Count() > 0) |
| | | { |
| | | if (item.S_AREA_CODE != "QXPPXXQ") |
| | | { |
| | | End = EndListT.OrderBy(e => e.N_COL).First(); |
| | | } |
| | | else |
| | | { |
| | | End = EndListT.OrderByDescending(e => e.N_COL).First(); |
| | | } |
| | | } |
| | | if (End != null) |
| | | { |
| | | endBit = End; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | if (endBit != null) |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | if (endBit != null) |
| | | { |
| | | var _ctrl = LocationHelper.GetLocCntrRel(location); |
| | | var ggf = 0; |
| | | foreach (var item in _ctrl) |
| | | { |
| | | var cntrrel = ContainerHelper.GetCntrItemRel(item.S_CNTR_CODE).FirstOrDefault(); |
| | | if (cntrrel != null) |
| | | { |
| | | ggf = newDb.Deleteable<CntrItemRel>().Where(it => it.S_ID.Trim() == cntrrel.S_ID.Trim()).ExecuteCommand(); |
| | | } |
| | | } |
| | | //if (ggf > 0) |
| | | //{ |
| | | int endLayer = endBit.N_CURRENT_NUM + 1; |
| | | var carryCntrs = new List<string> { _ctrl.FirstOrDefault().S_CNTR_CODE }; |
| | | var bb = TaskProcess.CreateTransport(workOrder.SQL_WorkNo, location, endBit.S_LOC_CODE, "瓶坯翻斗机空托-入库", carryCntrs, 1, endLayer, carryCntrs.Count, plc.taskPri); |
| | | if (bb) |
| | | { |
| | | SentTask = true; |
| | | //触发自动解绑 |
| | | //var zdjb = jcjykk.FindAll(e => e.SQL_UsingNow == "Y").OrderByDescending(g => g.N_PRI).ToList(); |
| | | //foreach (var item in zdjb) |
| | | //{ |
| | | |
| | | //} |
| | | //var Jb = newDb.Queryable<Location>().Where(e => e.S_AREA_CODE == Area && Row.Contains(e.N_ROW)).ToList(); |
| | | ////查询第一排是否满 并且第二排入满三个后解绑第一排 |
| | | ////1.查询第一排是否有空货位 有 则跳过 |
| | | } |
| | | // } |
| | | } |
| | | if (SentTask) |
| | | { |
| | | return SentTask; |
| | | } |
| | | |
| | | } |
| | | return true; |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogHelper.Info(plc.deviceName + $" 报错: {ex.Message}"); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | |
| | | |
| | | internal static void AnalysisBottleCapTipper(string data, Settings.deviceInfo plc) |
| | | { |
| | | //LogHelper.Info($"{plc.deviceName}-{plc.address}-{plc.deviceType}-data:{data}。 "); |
| | | bool containsKey = true; |
| | | int llll = 0; |
| | | if (!FJD_wwwwFD.TryGetValue(plc.deviceName.Trim(), out llll)) |
| | |
| | | bool flag = data.Length == 2; |
| | | if (flag) |
| | | { |
| | | //LogHelper.Info(string.Concat(new string[] |
| | | //{ |
| | | // "翻斗机门 ", |
| | | // plc.deviceNo[1], |
| | | // " - 信号: ", |
| | | // data, |
| | | // " 门状态:(1开2关) ", |
| | | // data.Substring(3, 1) |
| | | // }), "自动门"); |
| | | string s = "2";// data.Substring(3, 1); |
| | | string s = "2"; |
| | | |
| | | //bool flag4 = DeviceProcess.doorStatus.Keys.Contains(plc.deviceNo[1]); |
| | | //if (flag4) |
| | | //{ |
| | | // DeviceProcess.doorStatus[plc.deviceNo[1]].info = s; |
| | | // DeviceProcess.doorStatus[plc.deviceNo[1]].modify = DateTime.Now; |
| | | //} |
| | | //else |
| | | //{ |
| | | // DeviceProcess.doorStatus.Add(plc.deviceNo[1], new DeviceProcess.signalInfo |
| | | // { |
| | | // info = data.Substring(3, 1), |
| | | // modify = DateTime.Now |
| | | // }); |
| | | //} |
| | | //if (data.Substring(1, 1) == "1") |
| | | //{ |
| | | // LogHelper.Info(plc.location[0] + "读到11信号。(12信号持续数量):" + llll); |
| | | // if (llll < 10) |
| | | // { |
| | | // llll = 0; |
| | | // LogHelper.Info(plc.deviceName + "读到11信号,或连续12信号不足10次"); |
| | | // if (containsKey) |
| | | // FJD_wwwwFD[plc.deviceName.Trim()] = llll; |
| | | // else FJD_wwwwFD.Add(plc.deviceName.Trim(), llll); |
| | | |
| | | // return; |
| | | // } |
| | | //} |
| | | //else |
| | | if (data.Substring(1, 1) == "0" || data.Substring(1, 1) == "2") |
| | | { |
| | | LogHelper.Info(plc.location[0] + $"读到1 0/2信号。(1 0/2信号持续数量):" + llll); |
| | |
| | | else FJD_wwwwFD.Add(plc.deviceName.Trim(), llll); |
| | | } |
| | | |
| | | //if (llll < 10) |
| | | //{ |
| | | // LogHelper.Info(plc.deviceName + "读到11信号 ,或连续12信号不足10次(" + llll + "次)"); |
| | | // return; |
| | | //} |
| | | |
| | | |
| | | LogHelper.Info(plc.deviceName + "查看翻斗鸡空筐位" + (data.Substring(1, 1) == "1").ToString() + LocationHelper.CheckLocFree(plc.location[0]).ToString(), "翻斗机"); |
| | | bool flag5 = data.Substring(1, 1) == "1" && LocationHelper.CheckLocFree(plc.location[0]) && s == "2"; |
| | |
| | | } |
| | | else |
| | | { |
| | | //if (llll > 10) |
| | | //{ |
| | | // LogHelper.Info(plc.deviceName + "交管给翻斗信号后还没有翻斗", "翻斗机"); |
| | | // return; |
| | | //} |
| | | //else |
| | | //{ |
| | | // LogHelper.Info(plc.deviceName + "交管给翻斗信号后 已翻斗:" + llll, "翻斗机"); |
| | | //} |
| | | |
| | | |
| | | WorkOrder workOrder = WCSHelper.GetWorkOrder(plc.deviceName); |
| | | bool flag7 = workOrder == null; |
| | |
| | | if (flag11 > 30) |
| | | { |
| | | |
| | | //if (data.Substring(1, 1) == "1") |
| | | //{ |
| | | |
| | | LogHelper.Info(plc.location[0] + "读到11信号。(1 0/2信号持续数量):" + llll); |
| | | //if (flag11 < 3.0) |
| | | |
| | | if (llll < 0) |
| | | { |
| | | //llll = 0; |
| | | |
| | | LogHelper.Info(plc.deviceName + "读到11信号,但是没出现过1 0/2"); |
| | | //if (containsKey) |
| | | // FJD_wwwwFD[plc.deviceName.Trim()] = llll; |
| | | //else FJD_wwwwFD.Add(plc.deviceName.Trim(), llll); |
| | | |
| | | |
| | | return; |
| | | } |
| | | //} |
| | | |
| | | var b = TaskProcess.FDJTakeEmpyt2(plc, workOrder); |
| | | |
| | |
| | | } |
| | | else |
| | | { |
| | | ///- |
| | | LogHelper.Info($"{plc.deviceName} 货位 {plc.location} 满框卸货不足30S缓冲时间。 "); |
| | | |
| | | //if (time != null && DateTime.Now.Subtract(time ?? DateTime.Now).TotalSeconds < 30) |
| | | //{ |
| | | LogHelper.Info($"翻斗机满框放下时间{time}不足30秒, 回写翻斗信号", "翻斗机"); |
| | | PlcHelper.SendHex(plc.address, $"3f 00 11 0d 0a"); |
| | | |
| | | if (containsKey) |
| | | FJD_wwwwFD[plc.deviceName.Trim()] = 0; |
| | | else FJD_wwwwFD.Add(plc.deviceName.Trim(), 0); |
| | | |
| | | return; |
| | | //} |
| | | } |
| | | } |
| | | } |
| | |
| | | else return false; |
| | | } |
| | | } |
| | | else if (taskType.Contains("瓶坯翻斗机空托") && mst.S_END_LAREA == "QXPPXXQ") |
| | | { |
| | | start = LocationHelper.GetAgvSite(mst.S_START_LOC); |
| | | end = LocationHelper.GetAgvSite(mst.S_END_LOC, "2"); |
| | | LogHelper.Info($"瓶坯机任务 起点终点对应的agv站点 start {start} end {end} 任务:" + mst.S_TASK_NO); |
| | | |
| | | } |
| | | else if (taskType.Contains("瓶坯翻斗机满托") && mst.S_START_LAREA == "QXPPXXQ") |
| | | { |
| | | start = LocationHelper.GetAgvSite(mst.S_START_LOC, "2"); |
| | | end = LocationHelper.GetAgvSite(mst.S_END_LOC); |
| | | LogHelper.Info($"瓶坯机任务 起点终点对应的agv站点 start {start} end {end} 任务:" + mst.S_TASK_NO); |
| | | } |
| | | //else if (taskType.Contains("收缩膜叉运-入库") || taskType.Contains("收缩膜叉运-入库") || taskType.Contains("收缩膜叉运-货架出提升机")) |
| | | //{ |
| | | // var ts = 5; |
| | |
| | | LogHelper.Info("SendTask " + mst.S_TASK_NO); |
| | | Console.WriteLine("start=" + start.ToString()); |
| | | Console.WriteLine("end= " + end.ToString()); |
| | | |
| | | NDC.AGVResult res = NDC.AddNewOrder(TSNo, new Dictionary<string, string> |
| | | { |
| | | { |
| | |
| | | [ |
| | | {"address":"10.140.3.164","deviceName":"550","FuLeLineNo":"青溪成品仓QX1输送线","deviceNo":[],"location":["CX-2","CX-1"],"areaPriy":["QX-01","QX-02","QX-03","QX-04","QX-05","QX-06","QX-07","QX-08","QX-09","QX-10","QX-11","QX-12","QX-13","QX-14","QX-15","QX-16","QX-19",],"deviceType":9,"enable":1}, |
| | | |
| | | {"address":"10.140.9.168","deviceName":"注塑机","deviceNo":["","666"],"location":["ZSJ1-1","ZSJ1-2"],"deviceType":8,"enable":1}, |
| | | {"address":"10.140.9.168","deviceName":"550注塑机","deviceNo":["","666"],"location":["ZSJ1-1","ZSJ1-2"],"deviceType":8,"enable":1}, |
| | | |
| | | {"address":"10.140.9.169","deviceName":"注塑机3","deviceNo":["","664"],"location":["ZSJ3-1","ZSJ3-2"],"deviceType":8,"enable":1}, |
| | | |
| | | {"address":"10.140.3.176","deviceName":"注塑机4","deviceNo":["","666"],"location":["ZSJ4-1","ZSJ4-2"],"deviceType":8,"enable":1}, |
| | | {"address":"10.140.9.169","deviceName":"注塑机4","deviceNo":["","666"],"location":["ZSJ4-1","ZSJ4-2"],"deviceType":8,"enable":1}, |
| | | |
| | | {"address":"10.140.3.150","deviceName":"注塑机5","deviceNo":["","659"],"location":["ZSJ5-1","ZSJ5-2"],"deviceType":8,"enable":1}, |
| | | |
| | | {"address":"10.140.3.161","deviceName":"翻斗机","deviceNo":["","999"],"location":["FDJ-1P-1L-1C"],"deviceType":5,"enable":1}, |
| | | {"address":"10.140.9.167","deviceName":"550翻斗机","deviceNo":["","999"],"location":["FDJ-1P-1L-1C"],"deviceType":5,"enable":1}, |
| | | |
| | | {"address":"10.140.3.181","deviceName":"3线翻斗机","deviceNo":["","979"],"location":["SXFDJ1"],"deviceType":5,"enable":1}, |
| | | |
| | |
| | | {"address":"10.140.3.178","deviceName":"CX4","FuLeLineNo":"青溪成品仓QX4输送线","deviceNo":[],"location":["CX4-2","CX4-1"],"areaPriy":["QX-01","QX-02","QX-03","QX-04","QX-05","QX-06","QX-07","QX-08","QX-09","QX-10","QX-11","QX-12","QX-13","QX-14","QX-15","QX-16","QX-19",],"deviceType":9,"enable":1}, |
| | | |
| | | |
| | | {"address":"10.140.9.167","deviceName":"5L注塑机","deviceNo":["","665"],"location":["5LZSJ1-1","5LZSJ1-2"],"deviceType":8,"enable":1}, |
| | | {"address":"10.140.9.161","deviceName":"5L注塑机","deviceNo":["","665"],"location":["5LZSJ1-1","5LZSJ1-2"],"deviceType":8,"enable":1}, |
| | | {"address":"10.140.3.167","deviceName":"5L翻斗机","deviceNo":["","998"],"location":["5LFDJ"],"deviceType":5,"enable":1}, |
| | | |
| | | {"address":"10.140.3.155","deviceName":"门plc2","deviceNo":["2"],"location":[],"deviceType":1,"enable":1}, |