예제 #1
0
        public static double MathOEE(int count, int ct, DateTime startTime, DateTime endTime)
        {
            try
            {
                if (count <= 0)
                {
                    return(0.0);
                }

                double oee = 0.0;

                int second = TimeRange.ExecDateDiffSecond(startTime, endTime);

                oee = Math.Round((double)(count * ct) / (double)second, 2);

                if (oee < 0 || double.IsNaN(oee) || Double.IsInfinity(oee))
                {
                    oee = 0.0;
                }
                // oee = oee * 100;

                return(oee);
            }
            catch
            {
                throw;
            }
        }
예제 #2
0
        public static double MathProductivity(int count, int op, DateTime startTime, DateTime endTime)
        {
            try
            {
                if (count <= 0)
                {
                    return(0.0);
                }

                double pt = 0.0;

                //偏移时间
                int second = TimeRange.ExecDateDiffSecond(startTime, endTime);

                ///换算成小时
                double hour = Math.Round((double)second / (double)3600, 2);


                pt = Math.Round((double)count / (double)(hour * op), 2);

                if (pt < 0 || double.IsNaN(pt) || Double.IsInfinity(pt))
                {
                    pt = 0;
                }

                return(pt);
            }
            catch
            {
                throw;
            }
        }
예제 #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="count"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public static string  MathOEEToString(int count, int ct, DateTime startTime, DateTime endTime)
        {
            try
            {
                if (count <= 0)
                {
                    return("0%");
                }

                double oee = 0.0;

                int second = TimeRange.ExecDateDiffSecond(startTime, endTime);

                oee = Math.Round((double)(count * ct) / (double)second, 2);

                oee = oee * 100;

                if (oee < 0 || double.IsNaN(oee) || Double.IsInfinity(oee))
                {
                    oee = 0;
                }


                string ret = String.Format("{0:D2}%", (int)oee);


                return(ret);
            }
            catch
            {
                throw;
            }
        }
예제 #4
0
        private void Timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            try
            {
                CLog.WriteSysLog("开始采集数据处理");

                if (TimeRange.ExecDateDiffSecond(collectTime, DateTime.Now) > 5)
                {
                    collectTime = DateTime.Now;

                    CLog.WriteSysLog(DateTime.Now.ToLongTimeString());

                    Random r = new Random();
                    emsaddr = emsArray[r.Next(emsArray.Length)];

                    count += 1;

                    CLog.WriteSysLog(emsaddr.ToString());

                    PublicVariable.plcL1.TestChangeThreadFun(String.Format("{0:D2}", Convert.ToInt32(BaseVariable.LineID)), count, emsaddr);
                }
            }
            catch (System.Exception ex)
            {
                CLog.WriteSysLog(ex.Message.ToString());
            }
        }
예제 #5
0
        /// <summary>
        /// 处理换型添加记录
        /// </summary>
        /// <param name="unit"></param>
        /// <returns></returns>
        public int ProcessAcqLineData(string lineID, string unitid, EMSUnit unit)
        {
            int ret = 0;

            try
            {
                ChangeTimeDAL dal = new ChangeTimeDAL();
                ChangeTimeMDL mdl = new ChangeTimeMDL();

                unit.SetTime = DateTime.Now;

                mdl.SetTID(unit.SetTime, lineID, unit.EMS, 0);
                mdl.PLID     = lineID;
                mdl.UNITID   = unitid;
                mdl.PER_PN   = this.ems.EMS.ToString();
                mdl.CUR_PN   = unit.EMS.ToString();
                mdl.TIME_MIG = TimeRange.ExecDateDiffSecond(this.ems.SetTime, unit.SetTime);
                mdl.PER_TIME = this.ems.SetTime;
                mdl.CUR_TIME = DateTime.Now;


                int count = dal.IsUionCOUint(unitid, lineID);

                if (count <= 0)
                {
                    mdl.SetTID(unit.SetTime, lineID, unit.EMS, 1);
                    ret = dal.AddChangeUnitItem(mdl);
                }
                else
                {
                    count += 1;
                    mdl.SetTID(unit.SetTime, lineID, unit.EMS, count);
                    ret = dal.AddChangeUnitItem(mdl);
                }


                LoadEMS(unit);

                return(ret);
            }
            catch
            {
                throw;
            }
        }
예제 #6
0
        /// <summary>
        /// 生产效率   //减去吃饭时间,不减去休息时间
        /// </summary>
        /// <param name="count"></param>
        /// <param name="op"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public static string MathProductivityToString(int count, int op, DateTime startTime, DateTime endTime)
        {
            try
            {
                if (count <= 0)
                {
                    return("0");
                }

                double pt = 0.0;

                //偏移时间
                int second = TimeRange.ExecDateDiffSecond(startTime, endTime);

                ///换算成小时
                double hour = Math.Round((double)second / (double)3600, 2);


                pt = Math.Round((double)count / (double)(hour * op), 1);

                //  pt = pt * 100;

                // string ret = String.Format("{0:D2}", (int)pt);
                if (pt < 0 || double.IsNaN(pt) || Double.IsInfinity(pt))
                {
                    pt = 0;
                }

                string ret = String.Format("{0:F1}", pt);
                return(ret);
            }
            catch
            {
                throw;
            }
        }
예제 #7
0
        /// <summary>
        /// 更新采集单元数据
        /// </summary>
        /// <param name="mdl"></param>
        /// <param name="curUnit"></param>
        /// <returns></returns>
        public int  UpdateAcqUnitData(ref AcqLineItemMDL mdl)
        {
            int ret = -1;

            try
            {
                AcqLineDAL acqDal = new AcqLineDAL();

                ProductDal pdal = new ProductDal();


                //获取PN编码
                //
                ProductionMDL productmdl = pdal.GetProductInfo(mdl.PLID, mdl.EMS);


                //存在产品编码
                if (mdl == null || mdl.PN == string.Empty)
                {
                    mdl.PN = "N/A";
                }

                mdl.PN = productmdl.PN;

                ////判断是存在有历史数据,有更新区间信息
                ////有历史数据

                if (acqDal.AcqUintExist2(mdl.PLID, mdl.EMS, mdl.UNITID) > 0)
                {
                    //获取当前区间的计数
                    //int percount = GetLastRangCount(mdl);

                    AcqLineItemMDL lastItem = GetLastUnit(mdl);
                    //加一个脉冲信号
                    lastItem.PR_COUNT += 1;
                    //加一个脉冲信号

                    CLog.WriteStationLog("PRE_COUNT", mdl.UNITID + "-" + lastItem.PR_COUNT.ToString());

                    //更新结束时间 和 当前开始时段的时间信息
                    mdl.TID        = lastItem.TID;
                    mdl.TGNAME     = lastItem.TGNAME;
                    mdl.PR_COUNT   = lastItem.PR_COUNT;
                    mdl.START_TIME = lastItem.START_TIME;
                    mdl.END_TIME   = DateTime.Now;

                    mdl.TIME_LENGTH = TimeRange.ExecDateDiffSecond(lastItem.START_TIME, mdl.END_TIME);

                    mdl.UPDATE_TIME = mdl.END_TIME;

                    ret = acqDal.UpdateAcqLineUint(mdl);
                }
                else///当前时段的新项目
                {
                    int uintSeq = acqDal.IsUionAcqUint(mdl.UNITID, mdl.PLID);

                    mdl.START_TIME = DateTime.Now;
                    mdl.END_TIME   = mdl.START_TIME;

                    //型号发生变化重新计数 同时表示换型了
                    if (uintSeq > 0)
                    {
                        uintSeq += 1;

                        string strSeq = String.Format("{0:D2}", uintSeq);
                        mdl.SetTID(mdl.START_TIME, mdl.PLID, mdl.TGNAME, strSeq);
                    }

                    // mdl.UPDATE_TIME = DateTime.Now;


                    if (productmdl != null || productmdl.OP != 0)
                    {
                        mdl.START_TIME = DateTime.Now.AddSeconds(-productmdl.OP);
                    }
                    else
                    {
                        mdl.START_TIME = DateTime.Now;
                    }

                    mdl.TIME_LENGTH = TimeRange.ExecDateDiffSecond(mdl.START_TIME, mdl.END_TIME);

                    //更新上一个区间产品的时间
                    AcqLineDAL updateDal = new AcqLineDAL();
                    updateDal.UpdateAclineUnitByLastUnit(DateTime.Now, mdl.PLID);


                    // modify by guozq  2018/3/26
                    //添加采集数据
                    ret = acqDal.AddAcqLine1(mdl);
                }
            }
            catch
            {
                throw;
            }

            return(ret);
        }