111
cjs
4 天以前 99004292e20a9e1efa4e3b11b8c319bfd796912c
HH.WCS.Mobox3.NongFuLinZhi/process/DeviceProcess.cs
@@ -520,7 +520,7 @@
                {
                    LogHelper.Info("即产即用工单");
                    //即产即用在起点为线边
                    var bcpInfo = Settings.areaInfos.Where(a => a.areaName == "瓶胚即产满框" && a.enable == 1).FirstOrDefault();
                    var bcpInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯即产满框" && a.enable == 1).FirstOrDefault();
                    if (bcpInfo != null)
                    {
                        startArea = bcpInfo.areaCode;
@@ -532,7 +532,7 @@
                {
                    LogHelper.Info("非即产即用工单");
                    //非即产即用起点为库区
                    string areaName = plc.deviceName.Split('-')[1].Substring(0, 1) + "号瓶胚翻斗机非即产满框";
                    string areaName = plc.deviceName.Split('-')[1].Substring(0, 1) + "号瓶坯翻斗机非即产满框";
                    var bcpInfo = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).FirstOrDefault();
                    if (bcpInfo != null)
                    {
@@ -544,7 +544,7 @@
                if (data.Length == 6)
                {
                    if (data.Substring(0, 2) == "11")
                    if (data.Substring(2, 2) == "22")
                    {
                        if (LocationHelper.CheckLocFree(plc.TN_Location[0]))
                        {
@@ -574,12 +574,12 @@
                                    //初始状态,无托盘,直接上满托(非即产即用需要校验 套袋完成,即产即用直接使用)
                                    if (workInfo.S_UsingNow == "Y")
                                    {
                                        LogHelper.Info($"瓶胚即产满框 查找");
                                        LogHelper.Info($"瓶坯即产满框 查找");
                                        startLoca = getFDSXArea(db, workInfo, startArea);
                                    }
                                    else
                                    {
                                        LogHelper.Info($"瓶胚翻斗机非即产满框 查找");
                                        LogHelper.Info($"瓶坯翻斗机非即产满框 查找");
                                        startLoca = getFDSXArea(db, workInfo, startArea);
                                    }
@@ -635,7 +635,11 @@
            var workInfo = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo == plc.deviceName).First();
            if (workInfo != null && workInfo.S_WorkState == "执行中")
            {
                LogHelper.Info($"查询到执行中的工单,工单类型:{workInfo.S_PLineNo}");
                if (workInfo.S_ItemName == "小包装盖")
                {
                    return;
                }
                LogHelper.Info($"查询到执行中的工单,工单类型:{workInfo.S_PLineNo},物料编码:{workInfo.S_ItemCode},物料类型:{workInfo.S_ITEM_TYPE}");
                string startArea = "";
                string fullTaskType = "";
                string emptyTaskType = "";
@@ -652,7 +656,7 @@
                if (data.Length == 6)
                {
                    if (data.Substring(0, 2) == "11")
                    if (data.Substring(2, 2) == "22")
                    {
                        if (LocationHelper.CheckLocFree(plc.TN_Location[0]))
                        {
@@ -708,6 +712,7 @@
            {
                foreach(var a in locList)
                {
                    LogHelper.Info($"getFDSXArea:查询到当前货位锁状态:{a.S_LOCK_STATE},货位编码:{a.S_CODE}");
                    if(a.S_LOCK_STATE == "无")
                    {
                        var cntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_CODE).First();
@@ -716,20 +721,29 @@
                            var itemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == cntrInfo.S_CNTR_CODE).First();
                            if(itemInfo != null)
                            {
                                if(itemInfo.S_ITEM_CODE == workInfo.S_ItemCode)
                                LogHelper.Info($"getFDSXArea:查询到物料编码:{itemInfo.S_ITEM_CODE}");
                                LogHelper.Info($"getFDSXArea:查询到物料批次:{itemInfo.S_BATCH_NO}");
                                if (itemInfo.S_ITEM_CODE + itemInfo.S_BATCH_NO == workInfo.S_ItemCode + workInfo.S_ITEM_TYPE)
                                {
                                    result = a;
                                    break;
                                }
                            }
                            else
                            {
                                LogHelper.Info($"getFDSXArea:当前托盘未绑定物料,托盘编码:{cntrInfo.S_CNTR_CODE}");
                            }
                        }
                        else
                        {
                            LogHelper.Info($"getFDSXArea:当前货位未绑定托盘");
                        }
                    }
                }
            }
            else
            {
                LogHelper.Info($"为查询到可能满托,库区编码:{startArea}");
                LogHelper.Info($"getFDSXArea:未查询到可用满托,库区编码:{startArea}");
            }
            return result;
        }
@@ -744,20 +758,6 @@
        {
            LogHelper.Info($"{plc.deviceName}-{plc.address}-{data}", "瓶坯机");
            var db = new SqlHelper<object>().GetInstance();
            LogHelper.Info($"瓶坯机,查询任务终点:{plc.TN_Location[0]}");
            if (LineState.Keys.Contains(plc.TN_Location[0]))
            {
                LogHelper.Info("瓶坯机包含该任务终点");
                LineState[plc.TN_Location[0]].status = data;
                LineState[plc.TN_Location[0]].modify = DateTime.Now;
            }
            else
            {
                LogHelper.Info("瓶坯机未包含该任务终点");
                LineState.Add(plc.TN_Location[0], new statemodel { status = data, modify = DateTime.Now });
            }
            var workInfo = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo == plc.deviceName).First();
            if (workInfo != null && workInfo.S_WorkState == "执行中")
@@ -776,11 +776,11 @@
                    taskType = "注塑库存满托下线(瓶坯)";
                }
                //endArea = Settings.GetLinJiangBCPAreaList().Where(a => a.AreaName == "瓶坯满托" && a.Enable == "1").FirstOrDefault().AreaNo;
                if (data.Length == 4)
                if (data.Length == 8)
                {
                    if (data == "1122") LinZhialysisBottleCapAndPreformTwo(plc, db, workInfo, endArea, taskType, plc.TN_Location[0], "瓶坯机");
                    if (data.Substring(0, 2) == "12") LinZhialysisBottleCapAndPreformTwo(plc, db, workInfo, endArea, taskType, plc.TN_Location[0], "瓶坯机", data);
                    if (data == "1221") LinZhialysisBottleCapAndPreformTwo(plc, db, workInfo, endArea, taskType, plc.TN_Location[1], "瓶坯机");
                    if (data.Substring(2, 2) == "22") LinZhialysisBottleCapAndPreformTwo(plc, db, workInfo, endArea, taskType, plc.TN_Location[1], "瓶坯机", data);
                }
            }
            else LogHelper.Info($"瓶坯机:{plc.deviceName} 未开启工单,不可触发满托下线", "瓶坯机");
@@ -797,9 +797,22 @@
        /// <param name="taskType"></param>
        /// <param name="deviceBit"></param>
        /// <param name="type"></param>
        private static void LinZhialysisBottleCapAndPreformTwo(Settings.deviceInfo plc, SqlSugar.SqlSugarClient db, LinZhiBCPWorkOrder workInfo, string endArea, string taskType, string deviceBit, string type)
        private static void LinZhialysisBottleCapAndPreformTwo(Settings.deviceInfo plc, SqlSugar.SqlSugarClient db, LinZhiBCPWorkOrder workInfo, string endArea, string taskType, string deviceBit, string type,string data)
        {
            LogHelper.Info($"{type}注塑机任务处理开始");
            LogHelper.Info($"瓶坯机,查询任务终点:{deviceBit}");
            if (LineState.Keys.Contains(deviceBit))
            {
                LogHelper.Info("瓶坯机包含该任务终点");
                LineState[deviceBit].status = data;
                LineState[deviceBit].modify = DateTime.Now;
            }
            else
            {
                LogHelper.Info("瓶坯机未包含该任务终点");
                LineState.Add(deviceBit, new statemodel { status = data, modify = DateTime.Now });
            }
            //再次判断信号
            if (LocationHelper.CheckLocFree(deviceBit))
            {
@@ -853,12 +866,12 @@
                            {
                                LogHelper.Info($"{type}注塑机上未绑定托盘,自动绑定托盘");
                                TaskProcess.BindLocCntr(deviceBit, cntrCode, workInfo.S_ItemCode, "");
                                TaskProcess.BindLocCntr(deviceBit, cntrCode, workInfo.S_ItemCode, "","","",workInfo.S_ItemName);
                            }
                            else
                            {
                                cntrCode = cntrInfo.S_CNTR_CODE;
                                TaskProcess.BindCntrItem(cntrCode, workInfo.S_ItemCode, "", "");
                                TaskProcess.BindCntrItem(cntrCode, workInfo.S_ItemCode, "", "",workInfo.S_ItemName);
                            }
                            //创建作业
                            WMSHelper.CreateOpTask(deviceBit, "", "入库", taskType, cntrCode,"","",workInfo.S_WorkNo);
@@ -920,7 +933,7 @@
                if (mst.S_TYPE.Contains("翻斗机"))
                {
                    LogHelper.Info($"查询翻斗机允许取空信号 允许取空信号={LineState[mst.S_START_LOC.Trim()].status} 时间间隔={DateTime.Now.Subtract(LineState[mst.S_START_LOC.Trim()].modify).TotalSeconds}", "安全交互");
                    if ((LineState[mst.S_START_LOC.Trim()].status == "112100" || LineState[mst.S_START_LOC.Trim()].status == "112200") && DateTime.Now.Subtract(LineState[mst.S_START_LOC.Trim()].modify).TotalSeconds < 10)
                    if (LineState[mst.S_START_LOC.Trim()].status.Substring(4,2) == "00" && DateTime.Now.Subtract(LineState[mst.S_START_LOC.Trim()].modify).TotalSeconds < 10)
                    {
                        //NDCHelper.ChangeParam(mst.S_CODE.Trim(), 1101, 18);
                        NDCApi.ChangeOrderParam(mst.S_CODE.Trim(), 18, "1101");
@@ -932,7 +945,7 @@
                    LogHelper.Info($"查询输送线允许取满信号 允许取满信号={LineState[mst.S_START_LOC.Trim()].status} 时间间隔={DateTime.Now.Subtract(LineState[mst.S_START_LOC.Trim()].modify).TotalSeconds}", "安全交互");
                    if (mst.S_TYPE.Contains("满托下线"))
                    {
                        if ((LineState[mst.S_START_LOC.Trim()].status.Substring(4,2) == "01" || LineState[mst.S_START_LOC.Trim()].status.Substring(6,2) == "02") && DateTime.Now.Subtract(LineState[mst.S_START_LOC.Trim()].modify).TotalSeconds < 10)
                        if ((LineState[mst.S_START_LOC.Trim()].status.Substring(4,2) == "00" || LineState[mst.S_START_LOC.Trim()].status.Substring(4,2) == "02") && DateTime.Now.Subtract(LineState[mst.S_START_LOC.Trim()].modify).TotalSeconds < 10)
                        {
                            //NDCHelper.ChangeParam(mst.S_CODE.Trim(), 1101, 18);
                            NDCApi.ChangeOrderParam(mst.S_CODE.Trim(), 18, "1101");
@@ -947,7 +960,6 @@
                            TaskProcess.sendSing(mst, 1101);
                        }
                    }
                }
            }
            else LogHelper.Info($"字典中未找到该key的数据,key:{mst.S_START_LOC}");
@@ -964,7 +976,7 @@
                    if (mst.S_TYPE.Contains("翻斗机"))
                    {
                        LogHelper.Info($"查询翻斗机允许上满信号 允许上满信号={LineState[mst.S_END_LOC.Trim()].status} 时间间隔={DateTime.Now.Subtract(LineState[mst.S_END_LOC.Trim()].modify).TotalSeconds}", "安全交互");
                        if ((LineState[mst.S_END_LOC.Trim()].status == "112100" || LineState[mst.S_END_LOC.Trim()].status == "112200") && DateTime.Now.Subtract(LineState[mst.S_END_LOC.Trim()].modify).TotalSeconds < 10)
                        if (LineState[mst.S_END_LOC.Trim()].status.Substring(4,2) == "00" && DateTime.Now.Subtract(LineState[mst.S_END_LOC.Trim()].modify).TotalSeconds < 10)
                        {
                            //NDCHelper.ChangeParam(mst.S_CODE.Trim(), 1103, 18);
                            NDCApi.ChangeOrderParam(mst.S_CODE.Trim(), 18, "1103");
@@ -976,7 +988,7 @@
                        LogHelper.Info($"查询输送线允许补空信号 允许补空信号={LineState[mst.S_END_LOC.Trim()].status} 时间间隔={DateTime.Now.Subtract(LineState[mst.S_END_LOC.Trim()].modify).TotalSeconds}", "安全交互");
                        if (mst.S_TYPE.Contains("空托上线"))
                        {
                            if ((LineState[mst.S_END_LOC.Trim()].status.Substring(4,2) == "01" || LineState[mst.S_END_LOC.Trim()].status.Substring(6,2) == "02") && DateTime.Now.Subtract(LineState[mst.S_END_LOC.Trim()].modify).TotalSeconds < 10)
                            if ((LineState[mst.S_END_LOC.Trim()].status.Substring(4,2) == "00" || LineState[mst.S_END_LOC.Trim()].status.Substring(4,2) == "02") && DateTime.Now.Subtract(LineState[mst.S_END_LOC.Trim()].modify).TotalSeconds < 10)
                            {
                                //NDCHelper.ChangeParam(mst.S_CODE.Trim(), 1103, 18);
                                NDCApi.ChangeOrderParam(mst.S_CODE.Trim(), 18, "1103");