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

272 lines
6.1 KiB
Plaintext

COMPILE FUNCTION Reconcile_EPI_WO(WONo,ReturnArray)
DECLARE SUBROUTINE ErrMsg, RList, Set_Status
DECLARE FUNCTION Set_Status, Popup
$INSERT WO_MAT_EQUATES
$INSERT WM_OUT_EQUATES
$INSERT WM_IN_EQUATES
$INSERT REACT_RUN_EQUATES
$INSERT RLIST_EQUATES
$INSERT POPUP_EQUATES
$INSERT LOGICAL
IF NOT(Assigned(ReturnArray)) THEN ReturnArray = ''
ErrorMsg = ''
Result = ''
IF NOT(ASSIGNED(WONo)) THEN ErrorMsg = 'Null parameter passed to routine.'
IF WONo = '' THEN ErrorMsg = 'Null WONo passed to routine.'
WORec = XLATE('WO_LOG',WONo,'','X')
IF WORec = '' THEN ErrorMsg = 'WONo ':QUOTE(WOno):' is not on file!'
IF ErrorMsg NE '' THEN
ErrMsg(ErrorMsg)
GOTO Bail
END
OPEN 'WM_IN' TO WMITable ELSE
ErrMsg('Unable to open WM_IN table.')
GOTO Bail
END
OPEN 'WM_OUT' TO WMOTable ELSE
ErrMsg('Unable to open WM_OUT table.')
GOTO Bail
END
OPEN 'REACT_RUN' TO RRTable ELSE
ErrMsg('Unable to open REACT_RUN table.')
GOTO Bail
END
SelectSent = 'SELECT WM_IN WITH WO_NO = ':QUOTE(WONo):' BY IN_CASS_NO'
Set_Status(0)
RList(SelectSent,TARGET_ACTIVELIST$,'','','')
IF Get_Status(errCode) THEN
ErrMsg(errCode)
GOTO Bail
END
EQU WAFER_ID$ TO 1
EQU LOT_NO$ TO 2
EQU LOADED_INTO$ TO 3
EQU RAN_IN$ TO 4
EQU POCKET_CHAR$ TO 5
EQU UNLOADED_INTO$ TO 6
EQU WAFER_DISP$ TO 7
WaferArray = ''
Done = 0
LOOP
READNEXT WMInKey ELSE Done = 1
UNTIL Done
READ WMIRec FROM WMITable,WMInKey THEN
WONo = WMInKey[1,'*']
Step = WMInKey[COL2()+1,'*']
CassNo = WMInKey[COL2()+1,'*']
LotNo = XLATE('WO_MAT',WONo:'*':CassNo,WO_MAT_LOT_NO$,'X')
SlotNos = WMIRec<WM_IN_SLOT_NO$>
SlotCnt = COUNT(SlotNos,@VM) + (SlotNos NE '')
FOR I = 1 TO SlotCnt
WaferID = WONo:'.':CassNo:'.':SlotNos<1,I>
RunDest = WMIRec<WM_IN_RDS_NO$,I>:'.'
RunDest := WMIRec<WM_IN_POCKET_NO$,I>:'.'
RunDest := WMIRec<WM_IN_ZONE$,I>
IF WMIRec<WM_IN_SLOT_NCR$,I> NE '' THEN
WaferDest = 'NCR ':WMIRec<WM_IN_SLOT_NCR$,I>
END ELSE
WaferDest = RunDest
END
WaferArray<WAFER_ID$,-1> = WaferID
WaferArray<LOT_NO$,-1> = LotNo
WaferArray<LOADED_INTO$,-1> = WaferDest
NEXT I
END ;* End of WMIRec read
REPEAT
SelectSent = 'SELECT REACT_RUN WITH WO_NO = ':QUOTE(WONo)
Set_Status(0)
RList(SelectSent,TARGET_ACTIVELIST$,'','','')
IF Get_Status(errCode) THEN
ErrMsg(errCode)
GOTO Bail
END
Done = 0
LOOP
READNEXT RDSNo ELSE Done = 1
UNTIL Done
READ RRRec FROM RRTable,RDSNo THEN
WONo = RRRec<REACT_RUN_WO_NO$>
InCassNos = RRRec<REACT_RUN_IN_CASS_NO$>
InSlotNos = RRRec<REACT_RUN_IN_SLOT_NO$>
SlotCnt = COUNT(InCassNos,@VM) + (InCassNos NE '')
FOR I = 1 TO SlotCnt
CassNo = InCassNos<1,I>
SlotNo = InSlotNos<1,I>
IF CassNo NE '' AND SlotNo NE '' THEN
WaferID = WONo:'.':CassNo:'.':SlotNo
RDSPosID = RDSNo:'.':RRRec<REACT_RUN_POCKET$,I>:'.':RRRec<REACT_RUN_ZONE$,I>
UnloadID = WONo:'.':RRRec<REACT_RUN_OUT_CASS_NO$,I>:'.':RRRec<REACT_RUN_OUT_SLOT_NO$,I>
LOCATE WaferID IN WaferArray<WAFER_ID$> USING @VM SETTING Pos THEN
IF WaferArray<LOADED_INTO$,Pos> = RDSPosID THEN
WaferArray<RAN_IN$,Pos> = RDSPosID
END ELSE
WaferArray<RAN_IN$,Pos> = '*':RDSPosID:'*'
END
PocketChar = RRRec<REACT_RUN_POCKET_CHAR$,I>
WaferArray<POCKET_CHAR$,Pos> = PocketChar
IF PocketChar = '' THEN
WaferArray<UNLOADED_INTO$,Pos> = UnloadID
END
END
END
NEXT I
END ;* End of WMIRec read
REPEAT
SelectSent = 'SELECT WM_OUT WITH WO_NO = ':QUOTE(WONo)
Set_Status(0)
RList(SelectSent,TARGET_ACTIVELIST$,'','','')
IF Get_Status(errCode) THEN
ErrMsg(errCode)
GOTO Bail
END
ErrorLog = ''
Done = 0
LOOP
READNEXT WMOKey ELSE Done = 1
UNTIL Done
READ WMORec FROM WMOTable,WMOKey THEN
WONo = WMOKey[1,'*']
StepNo = WMOKey[COL2()+1,'*']
CassNo = WMOKey[COL2()+1,'*']
SlotNos = WMORec<WM_OUT_SLOT_NO$>
SlotCnt = COUNT(SlotNos,@VM) + (SlotNos NE '')
FOR I = 1 TO SlotCnt
RDSNo = WMORec<WM_OUT_RDS$,I>
PktNo = WMORec<WM_OUT_POCKET$,I>
Zone = WMORec<WM_OUT_ZONE$,I>
InCassNo = WMORec<WM_OUT_IN_CASS_NO$,I>
InSlotNo = WMORec<WM_OUT_IN_SLOT_NO$,I>
NCR = WMORec<WM_OUT_SLOT_NCR$,I>
UMWCass = WMORec<WM_OUT_UMW_CASS_ID$,I>
UMWSlot = WMORec<WM_OUT_UMW_SLOT_NO$,I>
MWBox = WMORec<WM_OUT_MAKEUP_BOX$>
DefWfrID = WONo:'.':CassNo:'.':I
UMWWaferID = UMWCass[1,'.']:'.':UMWCass[-1,'B.']:'.':UMWSlot
RDSPosID = RDSNo:'.':PktNo:'.':Zone
BEGIN CASE
CASE NCR NE ''
Disposition = 'NCR - ':NCR
CASE UMWCass NE ''
Disposition = 'UMW - ':UMWWaferID
CASE 1
IF MWBox THEN
Disposition = 'M/U - ':DefWfrID
END ELSE
Disposition = 'PROD - ':DefWfrID
END
END CASE
LOCATE DefWfrID IN WaferArray<UNLOADED_INTO$> USING @VM SETTING Pos THEN
IF WaferArray<WAFER_DISP$,Pos> NE '' THEN
WaferArray<WAFER_DISP$,Pos> = WaferArray<WAFER_DISP$,Pos>:'***':Disposition
END ELSE
WaferArray<WAFER_DISP$,Pos> = Disposition
END
END ELSE
IF RDSNo NE '' THEN
ErrorLog<1,-1> = DefWfrID:' in WMO but not in RDS records. RDS.Pkt.Zone: ':RDSNo:'.':PktNo:'.':Zone' unload errors'
END
END
NEXT I
END ;* End of WMIRec read
REPEAT
IF ErrorLog NE '' THEN
TypeOver = ''
TypeOver<pDISPLAY$> = ErrorLog
dummy = Popup(@WINDOW,TypeOver,'EPI_WO_RECON_ERRORS')
END
Display = ''
WACnt = COUNT(WaferArray<WAFER_ID$>,@VM) + (WaferArray<WAFER_ID$> NE '')
IF ReturnArray = 1 THEN
Result = WaferArray
END ELSE
FOR I = 1 TO WACnt
LineOut = WaferArray<WAFER_ID$,I>:@SVM
LineOut := WaferArray<LOT_NO$,I>:@SVM
LineOut := WaferArray<LOADED_INTO$,I>:@SVM
LineOut := WaferArray<RAN_IN$,I>:@SVM
LineOut := WaferArray<POCKET_CHAR$,I>:@SVM
LineOut := WaferArray<UNLOADED_INTO$,I>:@SVM
LineOut := WaferArray<WAFER_DISP$,I>
Display<1,I> = LineOut
NEXT I
TypeOver = ''
TypeOver<PDISPLAY$> = Display
void = Popup(@WINDOW,TypeOver,'EPI_WO_RECONCILE')
IF Get_Status(errCode) THEN DEBUG
END
* * * * * * *
Bail:
* * * * * * *
RETURN Result