213 lines
5.2 KiB
Plaintext
213 lines
5.2 KiB
Plaintext
Function SVC_Process_Time(Service, Param1, Param2, Param3, Param4, Param5, Param6, Param7)
|
|
|
|
/********************************************************************************************************
|
|
|
|
This program is proprietary and is not to be used by or disclosed to others, nor is it to
|
|
be copied without written permission.
|
|
|
|
Name : SVC Process Time
|
|
|
|
Description :
|
|
|
|
Tags : [SRP]
|
|
|
|
Notes : WO_MAST_SCHED_REL, WO number key w/ associated list of appointments in <1>
|
|
WO_MAST_SCHED_DATES, Date (date_span) key w/ associated list of appointments in <1>
|
|
|
|
History (Date, Initials, Notes)
|
|
05/26/10 fjt Initial development
|
|
05/31/10 fjt Last updated
|
|
|
|
********************************************************************************************************/
|
|
|
|
$insert SRP_APP_INSERTS
|
|
$insert SERVICE_INSERT
|
|
|
|
Declare function SRP_Rotate_Array, SRP_Sort_Array
|
|
|
|
Equ Sched_Win$ to "WO_MASTER_SCHEDULER"
|
|
Equ Ctrl$ to Sched_Win$:".OLE_SCHEDULE"
|
|
Equ Mid$ to Iconv("12:00AM", "MT")
|
|
Equ Noon$ to Iconv("12:00PM", "MT")
|
|
|
|
Begin Case
|
|
Case Service _eqc "CalcRange" ; GoSub Calc_Range
|
|
|
|
Case Service _eqc "ProcTime" ; GoSub Proc_Time
|
|
Case Service _eqc "ProcToday" ; GoSub Proc_Today
|
|
|
|
Case Service _eqc "RDSact" ; GoSub RDS_Actual
|
|
Case Service _eqc "RDScomp" ; GoSub RDS_Completed
|
|
Case Service _eqc "RDSpace" ; GoSub RDS_Pace
|
|
|
|
Case Service _eqc "TimeSum" ; GoSub Time_Summary
|
|
End Case
|
|
|
|
Return Ans
|
|
|
|
|
|
!----- SERVICES -----------------------------------------------------------------------------------------
|
|
|
|
|
|
Calc_Range:
|
|
StartDate = Param1
|
|
StartTime = Param2
|
|
Proc.Hrs = Param3
|
|
|
|
Days = Int(Proc.Hrs / 240)
|
|
Partial = Mod(Proc.Hrs, 240)
|
|
|
|
Begin Case
|
|
Case Days EQ 0 and Partial GE 120 and StartTime EQ Mid$
|
|
EndTime = Mid$ ; Days += 1
|
|
|
|
Case Days EQ 0 and Partial EQ 0 and StartTime EQ Noon$
|
|
EndTime = Noon$ ; Days += 1
|
|
|
|
Case Days EQ 0 and Partial EQ 0 and StartTime EQ Mid$
|
|
EndTime = Mid$ ; Days += 1
|
|
|
|
Case Partial GE 120
|
|
EndTime = Iconv("12:00AM", "MT") ; Days += 1
|
|
|
|
Case Otherwise$
|
|
EndTime = Iconv("12:00PM", "MT")
|
|
|
|
End Case
|
|
|
|
EndDate = StartDate + Days
|
|
* debug
|
|
|
|
Ans<1> = StartDate
|
|
Ans<2> = StartTime
|
|
Ans<3> = EndDate
|
|
Ans<4> = EndTime
|
|
return
|
|
|
|
|
|
Proc_Time:
|
|
// Process time for an instance of a WO on the scheduler
|
|
WO = Param1
|
|
Rec = Param2
|
|
PSNno = Rec<06>
|
|
PSrec = Xlate("PROD_SPEC", PSNno, "", "X")
|
|
|
|
GoSub RDS_Completed
|
|
|
|
* RDS_Cnt = Param2 ;// Boxes
|
|
* RDS_Comp = Param3
|
|
* WO_Step = Param4
|
|
|
|
Rem.Min = 0
|
|
Per.Box = 0
|
|
Ttl.Hrs = 0
|
|
Rem.Day = ""
|
|
Proc.Hrs = ""
|
|
Proc.Day = ""
|
|
|
|
// Minutes per wafer, minutes in 1 decimal
|
|
Per.Waf = PSrec<96>
|
|
Per.Waf = Iconv(Oconv(Per.Waf, "MD3"), "MD1")
|
|
|
|
// Wafer count
|
|
Wafers = Xlate("RDS", WO_Step<6>, "WAFERS_SCHEDULED", "X")
|
|
|
|
// Related reactors
|
|
Rel.React = Xlate("WO_MAST_SCHED_REL", WO, "REACTOR_COUNT", "X")
|
|
If Rel.React LT 1 then Rel.React = 1
|
|
|
|
If Per.Waf GT "" and Wafers<0,1> then
|
|
|
|
// Minutes per box is time per wafer times the wafers in the RDS run
|
|
Per.Box = Per.Waf * Wafers<0,1>
|
|
|
|
// Converted to hours
|
|
Proc.Hrs = Iconv(Per.Box / 600, "MD1")
|
|
Ttl.Hrs = (Proc.Hrs * RDS_Cnt)
|
|
Ttl.Hrs = Ttl.Hrs / Rel.React
|
|
|
|
// Converted to days and hours
|
|
Proc.Day = Int(Ttl.Hrs / 240) :" days - ": Oconv(Mod(Ttl.Hrs, 240), "MD1") :" hrs."
|
|
Rem.Hrs = Per.Box * (RDS_Cnt - RDS_Comp)
|
|
Rem.Hrs = Iconv(Rem.Hrs / 600, "MD1")
|
|
Rem.Day = Int(Rem.Hrs / 240) :" days - ": Oconv(Mod(Rem.Hrs, 240), "MD1") :" hrs."
|
|
|
|
end
|
|
|
|
* Proc.Day = "Estimated ":Proc.Day
|
|
Wafers = Sum(Wafers)
|
|
Ans = Ttl.Hrs :@RM: Per.Box :@RM: Per.Waf :@RM: Rem.Day :@RM: Proc.Day :@RM: Wafers
|
|
return
|
|
|
|
|
|
Proc_Today:
|
|
// Provides a LIST of all appointments scheduled on the current date with the associated reactor
|
|
Appts = ""
|
|
Appts<2> = Xlate("WO_MAST_SCHED_DATES", Date(), 1, "X")
|
|
Appts<1> = Xlate("WO_MAST_SCHED", Appts<2>, 15, "X")
|
|
Ans = SRP_Rotate_Array(Appts)
|
|
Ans = SRP_Sort_Array(Ans, "AR1", Yes$)
|
|
return
|
|
|
|
|
|
Time_Summary:
|
|
return
|
|
|
|
|
|
RDS_Actual:
|
|
GoSub RDS_Completed
|
|
|
|
WO.Done = (RDS_Comp EQ RDS_Cnt) and (RDS_Comp NE 0)
|
|
Ans = "0.0"
|
|
If WO.Done then
|
|
Ans = Sum(Xlate("RDS", RDS_Keys, "ELAPSED_HOURS", "X"))
|
|
Ans = Iconv(Comp.Time, "MD0")
|
|
Ans = Oconv(Comp.Time, "MD2")
|
|
end
|
|
Ans = Ans :@FM: RDS_Comp :@FM: RDS_Cnt
|
|
return
|
|
|
|
|
|
RDS_Completed:
|
|
WO = Param1
|
|
Pos = 0
|
|
Delim = ""
|
|
|
|
GoSub RDS_Data
|
|
|
|
Loop
|
|
Remove Val from RDS_Unload at Pos setting Delim
|
|
If Val GT "" then RDS_Comp += 1
|
|
Until Delim EQ 0
|
|
Repeat
|
|
Ans = RDS_Comp :@FM: RDS_Cnt
|
|
return
|
|
|
|
|
|
RDS_Data:
|
|
StepKey = WO:"*1"
|
|
RDS_Comp = 0
|
|
WO_Step = Xlate("WO_STEP", StepKey, "", "X")
|
|
RDS_Keys = WO_Step<06>
|
|
RDS_Unload = Xlate("REACT_RUN", RDS_Keys, "UNLOAD_SIG", "X")
|
|
RDS_Cnt = Count(RDS_Keys, @VM) + (RDS_Keys NE "")
|
|
return
|
|
|
|
|
|
RDS_Pace:
|
|
WO = Param1
|
|
|
|
GoSub RDS_Completed
|
|
|
|
If RDS_Comp GT 0 then
|
|
T1 = Sum(Xlate("RDS", RDS_Keys, "ELAPSED_HOURS", "X"))
|
|
Avg = T1 / RDS_Comp
|
|
Avg = Iconv(Avg, "MD0")
|
|
Avg = Oconv(Avg, "MD2")
|
|
Ans = Avg * RDS_Cnt
|
|
Ans = Iconv(Ans, "MD1")
|
|
end else
|
|
Ans = 0
|
|
end
|
|
return
|