open-insight/LSL2/STPROC/OBJ_WO_MAT_WFR.txt
Infineon\StieberD 7762b129af pre cutover push
2024-09-04 20:33:41 -07:00

467 lines
10 KiB
Plaintext

COMPILE FUNCTION obj_WO_Mat_Wfr(Method,Parms)
/*
Methods for the WO_MAT_WFR (Wafer) Tables
3/4/2016 JCH - Initial coding
*/
DECLARE FUNCTION Get_Status, Msg, obj_Tables, Send_Dyn, ErrMsg, obj_Tables, obj_WO_Wfr
DECLARE SUBROUTINE ErrMsg, Set_Status, FieldStore, obj_Tables, obj_WO_Wfr, RList, Send_Dyn
$Insert WO_MAT_WFR_EQUATES
$Insert WO_WFR_EQUATES
$Insert WO_MAT_EQUATES
$Insert WO_LOG_EQUATES
$Insert RLIST_EQUATES
ErrTitle = 'Error in Stored Procedure "obj_WO_Mat_Wfr"'
ErrorMsg = ''
IF NOT(ASSIGNED(Method)) THEN ErrorMsg = 'Unassigned parameter "Method" passed to subroutine'
IF NOT(ASSIGNED(Parms)) THEN Parms = ''
IF ErrorMsg NE '' THEN
Set_Status(-1,ErrTitle:@SVM:ErrorMsg)
RETURN ''
END
Result = ''
BEGIN CASE
CASE Method = 'SetWfrID' ; Gosub SetWfrID
Case Method = 'ClearWfrID' ; Gosub ClearWfrID
CASE Method = 'GetWfrID' ; GOSUB GetWfrID
Case Method = 'GetPreEpiWfrs' ; Gosub GetPreEpiWfrs
Case Method = 'GetPostEpiSlots' ; Gosub GetPostEpiSlots
Case Method = 'FixPrevWfr' ; Gosub FixPrevWfr
CASE 1
NULL
END CASE
IF ErrorMsg NE '' THEN
Set_Status(-1,ErrTitle:@SVM:ErrorMsg)
END
RETURN Result
* * * * * * *
SetWfrID:
* * * * * * *
SlotID = Parms[1,@RM]
WfrID = Parms[COL2()+1,@RM]
WfrSide = Parms[COL2()+1,@RM]
If SlotID = '' THEN ErrorMsg = 'Null Parameter "SlotID" passed to routine. (':Method:')'
If ErrorMsg NE '' Then Return
WOMatWfrKey = FIELD(SlotID,'*',1,2)
WOMatSlotNo = FIELD(SlotID,'*',3)
otParms = 'WO_MAT_WFR':@RM:WOMatWfrKey
WOMatWfrRec = obj_Tables('ReadRec',otParms)
IF WfrSide = 'I' THEN
WfrField = WO_MAT_WFR_IN_WFR_ID$
PrevWfrField = WO_MAT_WFR_IN_PREV_WFR_ID$
END ELSE
WfrField = WO_MAT_WFR_OUT_WFR_ID$
PrevWfrField = WO_MAT_WFR_OUT_PREV_WFR_ID$
END
WOMatWfrRec<WfrField,WOMatSlotNo> = WfrID
WOMatWfrRec<PrevWfrField,WOMatSlotNo> = ''
otParms = FieldStore(otParms,@RM,4,0,WOMatWfrRec)
obj_Tables('WriteRec',otParms)
Return
* * * * * * *
SetWfrIDs:
* * * * * * *
*** New 9/6/2016 JCH * * * *
WOMatKey = Parms[1,@RM]
SlotIDs = Parms[COL2()+1,@RM]
WfrIDs = Parms[COL2()+1,@RM]
WfrSide = Parms[COL2()+1.@RM]
IF WOMatKey = '' THEN ErrorMsg = 'Null Parameter "WOMatKey" passed to routine. (':Method:')'
IF SlotIDs = '' THEN ErrorMsg = 'Null Parameter "SlotIDs" passed to routine. (':Method:')'
IF WfrIDs = '' THEN ErrorMsg = 'Null Parameter "WfrIDs" passed to routine. (':Method:')'
IF WfrSide = '' THEN ErrorMsg = 'Null Parameter "WfrSide" passed to routine. (':Method:')'
IF WfrSide = 'I' THEN
WfrField = WO_MAT_WFR_IN_WFR_ID$
PrevWfrField = WO_MAT_WFR_IN_PREV_WFR_ID$
END ELSE
WfrField = WO_MAT_WFR_OUT_WFR_ID$
PrevWfrField = WO_MAT_WFR_OUT_PREV_WFR_ID$
END
otParms = 'WO_MAT_WFR':@RM:WOMatWfrKey
WOMatWfrRec = obj_Tables('ReadRec',otParms)
wCnt = COUNT(WfrIDs,@VM) + (WfrIDs NE '')
FOR I = 1 TO wCnt
SlotID = SlotIDs<1,I>
WfrID = WfrIDs<1,I>
WOMatSlotNo = FIELD(SlotID,'*',3)
WOMatWfrRec<WfrField,WOMatSlotNo> = WfrID
WOMatWfrRec<PrevWfrField,WOMatSlotNo> = ''
NEXT I
otParms = FieldStore(otParms,@RM,4,0,WOMatWfrRec)
obj_Tables('WriteRec',otParms)
RETURN
* * * * * * *
ClearWfrID:
* * * * * * *
SlotID = Parms[1,@RM]
WfrID = Parms[COL2()+1,@RM] ;* Not used here
WfrSide = Parms[COL2()+1,@RM]
If SlotID = '' THEN ErrorMsg = 'Null Parameter "SlotID" passed to routine. (':Method:')'
If ErrorMsg NE '' Then Return
Convert '.' To '*' In SlotID
WOMatWfrKey = Field(SlotID,'*',1,2)
WOMatSlotNo = Field(SlotID,'*',3,1)
otParms = 'WO_MAT_WFR':@RM:WOMatWfrKey
WOMatWfrRec = obj_Tables('ReadRec',otParms)
IF WfrSide = 'I' THEN
WfrField = WO_MAT_WFR_IN_WFR_ID$
PrevWfrField = WO_MAT_WFR_IN_PREV_WFR_ID$
END ELSE
WfrField = WO_MAT_WFR_OUT_WFR_ID$
PrevWfrField = WO_MAT_WFR_OUT_PREV_WFR_ID$
END
WOMatWfrRec<PrevWfrField,WOMatSlotNo> = WOMatWfrRec<WfrField,WOMatSlotNo>
WOMatWfrRec<WfrField,WOMatSlotNo> = ''
otParms = FieldStore(otParms,@RM,4,0,WOMatWfrRec)
obj_Tables('WriteRec',otParms)
Return
* * * * * * *
ClearWfrIDs:
* * * * * * *
*** New 9/6/2016 JCH * * * *
WOMatKey = Parms[1,@RM]
SlotIDs = Parms[COL2()+1,@RM]
WfrIDs = Parms[COL2()+1,@RM]
WfrSide = Parms[COL2()+1.@RM]
IF WOMatKey = '' THEN ErrorMsg = 'Null Parameter "WOMatKey" passed to routine. (':Method:')'
IF SlotIDs = '' THEN ErrorMsg = 'Null Parameter "SlotIDs" passed to routine. (':Method:')'
IF WfrIDs = '' THEN ErrorMsg = 'Null Parameter "WfrIDs" passed to routine. (':Method:')'
IF WfrSide = '' THEN ErrorMsg = 'Null Parameter "WfrSide" passed to routine. (':Method:')'
Convert '.' To '*' In SlotIDs
IF WfrSide = 'I' THEN
WfrField = WO_MAT_WFR_IN_WFR_ID$
PrevWfrField = WO_MAT_WFR_IN_PREV_WFR_ID$
END ELSE
WfrField = WO_MAT_WFR_OUT_WFR_ID$
PrevWfrField = WO_MAT_WFR_OUT_PREV_WFR_ID$
END
otParms = 'WO_MAT_WFR':@RM:WOMatWfrKey
WOMatWfrRec = obj_Tables('ReadRec',otParms)
wCnt = COUNT(WfrIDs,@VM) + (WfrIDs NE '')
FOR I = 1 TO wCnt
SlotID = SlotIDs<1,I>
WfrID = WfrIDs<1,I>
WOMatSlotNo = FIELD(SlotID,'*',3)
WOMatWfrRec<PrevWfrField,WOMatSlotNo> = WOMatWfrRec<WfrField,WOMatSlotNo>
WOMatWfrRec<WfrField,WOMatSlotNo> = ''
NEXT I
otParms = FieldStore(otParms,@RM,4,0,WOMatWfrRec)
obj_Tables('WriteRec',otParms)
RETURN
* * * * * * *
GetWfrID:
* * * * * * *
SlotID = Parms[1,@RM]
If SlotID = '' THEN ErrorMsg = 'Null Parameter "SlotID" passed to routine. (':Method:')'
If ErrorMsg NE '' Then Return
Convert '.' To '*' In SlotID
WOMatWfrKey = Field(SlotID,'*',1,2)
WOMatSlotNo = Field(SlotID,'*',3,1)
WOMatWfrRec = XLATE('WO_MAT_WFR',WOMatWfrKey,'','X')
Result = WOMatWfrRec<WO_MAT_WFR_WFR_ID$,WOMatSlotNo>
Return
* * * * * * *
GetPreEpiWfrs:
* * * * * * *
WONo = Parms[1,@RM]
CassNos = Parms[COL2()+1,@RM]
IF WONo = '' THEN ErrorMsg = 'Null Parameter "WONo" passed to routine. (':Method:')'
IF ErrorMsg NE '' THEN RETURN
IF CassNos = '' THEN
CassNos = XLATE('WO_LOG',WONo,'WO_MAT_CASS_NO','X')
END
CassCnt = COUNT(CassNos,@VM) + (CassNos NE '')
* Start Counting at the last box and work backward
FOR I = CassCnt TO 1 STEP -1
CassNo = CassNos<1,I>
WOMatKey = WONo:'*':CassNo
WOMatRec = XLATE('WO_MAT' , WOMatKey , '' , 'X' )
SlotCnt = WOMatRec<WO_MAT_WAFER_QTY$>
IF WOMatRec<WO_MAT_HOLD$> = 1 THEN
NULL ;* Box is on hold - skip it
END Else
WOWfrIDs = Xlate('WO_MAT_WFR',WONo:'*':CassNo,WO_MAT_WFR_IN_WFR_ID$,'X')
FOR N = SlotCnt TO 1 STEP -1
SlotID = WONo:'*':CassNo:'*':N
If WOWfrIDs<1,N> = '' Then
WfrID = ''
End Else
WfrID = WOWfrIDs<1,N>
Result = INSERT(Result,1,0,0,SlotID:@VM:WfrID) ;* Plate-o-lator (LIFO) style
End
Next N
END
NEXT I
RETURN
* * * * * * *
GetPostEpiSlots:
* * * * * * *
WONo = Parms[1,@RM]
CassNos = Parms[COL2()+1,@RM]
IF WONo = '' THEN ErrorMsg = 'Null Parameter "WONo" passed to routine. (':Method:')'
IF ErrorMsg NE '' THEN RETURN
IF CassNos = '' THEN
CassNos = XLATE('WO_LOG',WONo,'WO_MAT_CASS_NO','X')
END
CassCnt = COUNT(CassNos,@VM) + (CassNos NE '')
* Start Counting at the last box and work backward
LoadQty = Xlate('WO_LOG',WONo,WO_LOG_OUT_CASS_LOAD_QTY$,'X')
FOR I = CassCnt TO 1 STEP -1
CassNo = CassNos<1,I>
WOMatKey = WONo:'*':CassNo
WOMatRec = XLATE('WO_MAT' , WOMatKey , '' , 'X' )
SlotCnt = WOMatRec<WO_MAT_CASS_SHIP_QTY$>
If SlotCnt = '' THEN
SlotCnt = WOMatRec<WO_MAT_WAFER_QTY$>
END
WOMatWfrRec = XLATE('WO_MAT_WFR',WONo:'*':CassNo,'','X')
WfrKeys = WOMatWfrRec<WO_MAT_WFR_OUT_WFR_ID$>
PrevWfrKeys = WOMatWfrRec<WO_MAT_WFR_OUT_PREV_WFR_ID$>
FOR N = SlotCnt TO 1 STEP -1
SlotID = WOMatKey:'*':N
If WfrKeys<1,N> = '' Then
PrevDisp = obj_WO_WFr('Disp',WOMatWfrRec<WO_MAT_WFR_OUT_PREV_WFR_ID$,N>)[1,' '] ;* Just need the 'EVENT' at the front of the text
IF PrevDisp NE 'NCR' AND PrevDisp NE 'MKUP' THEN
*IF NOT(RowExists('WMO_WFRS',WONo:'*':WOStep:'*':CassNo:'*':SlotNo)) THEN ;* Check for 'LOCK' in WMO_WFRS table
Result = INSERT(Result,1,0,0,SlotID) ;* Plate-o-lator (LIFO) style
END
END
NEXT N
NEXT I
RETURN
* * * * * * *
FixPrevWfr:
* * * * * * *
/*
OPEN 'WO_WFR' TO WOWfrTable ELSE
DEBUG
RETURN
END
OPEN 'WO_MAT_WFR' TO WOMatWfrTable ELSE
DEBUG
RETURN
END
*RList('SELECT WO_WFR WITH REACT_TYPE = "EPP"',TARGET_ACTIVELIST$)
RList('SELECT WO_WFR WITH WO_NO 162188 AND WITH CASS_NO >= 10',TARGET_ACTIVELIST$)
IF Get_Status(errCode) THEN DEBUG
Done = 0
RecNo = 0
FixCnt = 0
LOOP
READNEXT WOWfrKey ELSE Done = 1
UNTIL Done
READ WOWfrRec FROM WOWfrTable,WOWfrKey THEN
RecNo += 1
Events = WOWfrRec<WO_WFR_LOC_EVENT$>
eCnt = COUNT(Events,@VM) + (Events NE '')
FOR I = 1 TO eCnt
Event = Events<1,I>
IF Event = 'LOAD' OR Event = 'TEST' OR Event = 'REPLACE' THEN
WfrSide = 'I'
END ELSE
WfrSide = 'O'
END
Parms = WOWfrKey:@RM ;* WfrID
Parms := WOWfrRec<WO_WFR_LOC_DTM$,I>:@RM ;* EventDtm
Parms := WOWfrRec<WO_WFR_LOC_BY$,I>:@RM ;* EventBy
Parms := WOWfrRec<WO_WFR_LOC_EVENT$,I>:@RM ;* Event
Parms := WOWfrRec<WO_WFR_SLOT_ID$,I>:@RM ;* NewSlotID
Parms := WOWfrRec<WO_WFR_RUN_LOC$,I:@RM ;* RunLoc
Parms := WOWfrRec<WO_WFR_NCR_NO$,I>:@RM ;* NCRNo
Parms := WOWfrRec<WO_WFR_TW_USE$,I>:@RM ;* TWUse
Parms := WOWfrRec<WO_WFR_TOOL_ID$,I>:@RM ;* CurrSlotID
Parms := WOWfrRec<WO_WFR_INV_LOC$,I>:ReactNo:@RM ;* NewToolID (Load Tool)
Parms := WOWfrRec<,I:@RM ;* CurrToolID
Parms := WOWfrRec<,I:@RM ;* NewInvLoc
Parms := WOWfrRec<,I:@RM ;* CurrInvLoc
Parms := WfrSide ;* Wfr Side
*obj_WO_Wfr('AddEvent',Parms)
NEXT I
*otParms = 'WO_MAT_WFR':@RM:WOMatWfrKey
*WOMatWfrRec = obj_Tables('ReadRec',otParms)
*IF WOMatWfrRec<WO_MAT_WFR_WFR_ID$,WOMatSlotNo> = '' THEN
* WOMatWfrRec<WO_MAT_WFR_PREV_WFR_ID$,WOMatSlotNo> = PrevWfrID
* FixCnt += 1
*END
*otParms = FieldStore(otParms,@RM,4,0,WOMatWfrRec)
*obj_Tables('WriteRec',otParms)
Send_Dyn(RecNo:' ':FixCnt:' ':WOMatWfrKey:' ':WOMatSlotNo:' -> ':PrevWfrID:' ':LastEvent)
END
END ;* End of check for multiple lines
End ;* End of record read
Repeat
*/
RETURN