1
pulg
4 天以前 dc600c6298a3231e05875813ec0fa2fa18151d84
1
6个文件已修改
508 ■■■■ 已修改文件
HH.WCS.QingXiNongfu/bin/Debug/settings.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.QingXiNongfu/core/Monitor.cs 99 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.QingXiNongfu/core/TaskCore.cs 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.QingXiNongfu/process/DeviceProcess.cs 324 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.QingXiNongfu/process/TaskProcess.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.QingXiNongfu/settings.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.QingXiNongfu/bin/Debug/settings.xml
@@ -62,15 +62,15 @@
    [
    {"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},
        
@@ -88,7 +88,7 @@
    {"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},
HH.WCS.QingXiNongfu/core/Monitor.cs
@@ -1294,18 +1294,18 @@
                                                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 };
@@ -1490,31 +1490,29 @@
                }
                //});
                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(() =>
@@ -2007,8 +2005,9 @@
                                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);
@@ -4716,21 +4715,21 @@
                                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;
@@ -4786,7 +4785,7 @@
                                        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")
HH.WCS.QingXiNongfu/core/TaskCore.cs
@@ -91,6 +91,61 @@
                                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);
HH.WCS.QingXiNongfu/process/DeviceProcess.cs
@@ -98,7 +98,9 @@
                        //翻斗机 -  瓶坯
                        else if (plc.deviceType == 5)
                        {
                            AnalysisBottleCapTipper(data, plc);
                            PpFdjData(data, plc);
                            // AnalysisBottleCapTipper(data, plc);
                        }
                        //翻斗机 - 瓶盖  4 水盖。6 无菌
                        else if (plc.deviceType <= 6)
@@ -2001,6 +2003,12 @@
        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
@@ -2060,6 +2068,10 @@
                                    }
                                }
                            }
                            if (staBit != null)
                            {
                                break;
                            }
                        }
                        if (staBit != null)
                        {
@@ -2103,9 +2115,6 @@
                        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())
                            {
@@ -2123,6 +2132,10 @@
                                        break;
                                    }
                                }
                            }
                            if (endBit != null)
                            {
                                break;
                            }
                        }
                        if (endBit != null)
@@ -2266,7 +2279,7 @@
        /// <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
@@ -2308,7 +2321,22 @@
                                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);
                                    //}
                                }
                            }
@@ -4132,6 +4160,214 @@
            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;
            }
        }
@@ -4148,7 +4384,6 @@
        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))
@@ -4164,46 +4399,8 @@
            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);
@@ -4213,11 +4410,7 @@
                    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";
@@ -4230,15 +4423,7 @@
                    }
                    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;
@@ -4293,21 +4478,17 @@
                                        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);
@@ -4321,20 +4502,13 @@
                                        }
                                        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;
                                            //}
                                        }
                                    }
                                }
HH.WCS.QingXiNongfu/process/TaskProcess.cs
@@ -1353,6 +1353,19 @@
                        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;
@@ -1581,6 +1594,7 @@
                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>
                {
                    {
HH.WCS.QingXiNongfu/settings.xml
@@ -62,15 +62,15 @@
    [
    {"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},
        
@@ -88,7 +88,7 @@
    {"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},