/// <summary> /// remember event item work will be into process /// INが Eventで予約されている事を 各種制約で考慮できるように覚えておく /// </summary> /// <param name="now"></param> public void RememberWorkWillBeIn(DateTime now, JitStage.WorkEventQueue.Item ei) { foreach (var cio in Cios) { var stage = ei.Work.FindStage(); stage.SetLastInTime(ei.Work.Next, cio, now); // save in-time (for Span constraint) stage.AddWorkInReserve(ei.Work.Next, cio, ei.Work); // reserve work-in (for Max constraint) } }
/// <summary> /// caluclate next confirmation timing /// Span制約中のワークに対して、待ち時間を計算する /// </summary> /// <param name="Events"></param> /// <param name="ei"></param> /// <param name="work"></param> /// <param name="Now"></param> /// <returns></returns> public override TimeSpan GetWaitTime(JitStage.WorkEventQueue.Item ei, DateTime Now) { var ret = MathUtil.Min( TimeSpan.FromDays(999.9), ei.Work.Current.Stage.GetLastInTime(ei.Work.Next, this) + Span - Now ); if (ret < TimeSpan.FromSeconds(1)) { ret = PorlingSpan; } return(ret); }
/// <summary> /// interval time to check next confirmation timing /// 制約中のワークに対し、待ち時間を計算する /// </summary> /// <returns></returns> public override TimeSpan GetWaitTime(JitStage.WorkEventQueue.Item ei, DateTime Now) { var nextexit = ei.Work.FindStage().Events.Find(ei.Work.Next, EventTypes.Out, ":Work"); if (nextexit != null) { var ret = MathUtil.Min(TimeSpan.FromDays(999.9), nextexit.Value.Work.ExitTime - Now); if (ret < TimeSpan.FromSeconds(1)) { ret = TimeSpan.FromMinutes(1); } return(ret); } else { return(TimeSpan.FromSeconds(0)); // OUT→INの処理待ちのケースなので、同時刻(IN完了)を指定する // Note: 後工程が最終工程で、ワーク詰まって、IN制約で入れないとすると、無限ループになる } }
/// <summary> /// interval time of next confirmation timing when the work was in waiting condition /// 横工程からInできない場合、次に確認するまで待つ時間 /// </summary> /// <param name="Events"></param> /// <param name="ei"></param> /// <param name="Now"></param> /// <returns></returns> public override TimeSpan GetWaitTime(JitStage.WorkEventQueue.Item ei, DateTime Now) { return(PorlingSpan); }