Exemple #1
0
        public void MovePts(Pt2D sp)
        {
            var pts = this.Pts;

            foreach (Pt2D pt in pts)
            {
                pt.MovePt(sp);
            }
        }
Exemple #2
0
        public void Reset(string productID, FabStep targetStep, int loadedEqpCount, FabWeightPreset wp)
        {
            this.ProductID      = productID;
            this.TargetStep     = targetStep;
            this.LoadedEqpCount = loadedEqpCount;
            this._wpset         = wp;

            this.LastPt2D   = null;
            this.LastContPt = null;
            this.WipStepList.Clear();
        }
Exemple #3
0
        private void CalcStepOutProfile_Tat()
        {
            var     pts = this.Pts = new List <Pt2D>();
            decimal now = 0;

            Pt2D.SetPt2D(pts, now, 0);

            now = _tatRun;
            Pt2D.SetPt2D(pts, now, _qtyRun);

            now += _tatWait;
            Pt2D.SetPt2D(pts, now, _qtyRun + _qtyWait);
        }
Exemple #4
0
        public void CalcProfile()
        {
            if (_isCalc)
            {
                return;
            }

            Pt2D pt = new Pt2D(0, 0);

            if (WipStepList.Count < 1)
            {
                LastPt2D = pt;
                return;
            }

            // -- tact time 설정
            WipStep wipStep = this.WipStepList.Count > 0 ? this.WipStepList[0] : null;

            if (wipStep != null)
            {
                this.Tact = wipStep.Tact;
            }

            // -- 누적 graph 전개
            List <Pt2D> pts = new List <Pt2D>();

            pts.Add(pt);

            foreach (WipStep ws in this.WipStepList)
            {
                ws.MovePts(pt);
                pts.AddRange(ws.Pts);
                pt = ws.LastPt2D;
            }

            LastPt2D = pt;

            if (_wpset == null)
            {
                return;
            }

            LastContPt = LastPt2D;

            _isCalc = true;
        }
Exemple #5
0
        private void CalcStepOutProfile()
        {
            var     pts = this.Pts = new List <Pt2D>();
            decimal now = 0;

            Pt2D.SetPt2D(pts, now, 0);

            decimal cumQty = 0;

            //Run Wip (Tact / Tat 중 짧은 기준)
            decimal qtyRun    = _qtyRun;
            decimal tactRun   = qtyRun * this.Tact;
            decimal minTatRun = Math.Min(tactRun, this.RemainTatRun);
            decimal maxTatRun = Math.Max(tactRun, this.RemainTatRun);

            if (qtyRun > 0)
            {
                now     = minTatRun;
                cumQty += qtyRun;
                Pt2D.SetPt2D(pts, now, cumQty);
            }

            //maxTatRun 기준 기록
            if (maxTatRun > minTatRun)
            {
                now = maxTatRun;
                Pt2D.SetPt2D(pts, now, cumQty);
            }

            //Wait Wip (Tat 기준 최소 1CST 도착, 나머지는 수량은 Tact / Tat 중 긴 기준)
            decimal qtyWait   = _qtyWait;
            decimal remainQty = qtyWait;
            decimal tactWait  = qtyWait * this.Tact;

            //Tat 기준 최소 1CST
            if (tactWait > this.RemianTatWait)
            {
                decimal lotSize = SeeplanConfiguration.Instance.LotUnitSize;
                decimal minQty  = Math.Min(remainQty, lotSize);

                now     = maxTatRun + this.RemianTatWait;
                cumQty += minQty;

                Pt2D.SetPt2D(pts, now, cumQty);

                remainQty = remainQty - minQty;
            }

            //나머지 수량, Tact / Tat 중 긴 기준
            decimal maxTatWait = Math.Max(tactWait, this.RemianTatWait);

            now     = maxTatRun + maxTatWait;
            cumQty += remainQty;

            Pt2D.SetPt2D(pts, now, cumQty);

            //다음 Step의 Start Point 시간을 위해 기록 필요 (누적 그래프)
            if (maxTatWait < _tatWait)
            {
                now = maxTatRun + _tatWait;
                Pt2D.SetPt2D(pts, now, cumQty);
            }
        }