updated WO_MAT and WM_IN actions to mark cassettes as processed when cassettes have a quantity of zero

This commit is contained in:
Infineon\StieberD 2024-11-11 13:24:05 -07:00
parent 8282b5a7d4
commit 19fb71d733
13 changed files with 3414 additions and 3484 deletions

View File

@ -245,7 +245,7 @@ end service
Service DeployHGCV() Service DeployHGCV()
debug
! Get list of work orders in production today. ! Get list of work orders in production today.
SchedEvents = Schedule_Services('GetScheduleEvents', (date() - 7), (date() + 7)) SchedEvents = Schedule_Services('GetScheduleEvents', (date() - 7), (date() + 7))
WOList = '' WOList = ''
@ -350,7 +350,7 @@ Service DeployHGCV()
HgCVList = Database_Services('ReadDataRow', 'SYSLISTS', 'HGCV_UAT') HgCVList = Database_Services('ReadDataRow', 'SYSLISTS', 'HGCV_UAT')
For each WoMatQAKey in HgCVList using @VM For each WoMatQAKey in HgCVList using @VM
If WOMatQAKey EQ '167798*67' then debug
Database_Services('ActivateRecord', 'WO_MAT_QA', WoMatQAKey) Database_Services('ActivateRecord', 'WO_MAT_QA', WoMatQAKey)
Profiles = {PROFILE} Profiles = {PROFILE}
ThickRecipeFound = False$ ThickRecipeFound = False$
@ -586,7 +586,8 @@ Service SetupDevServices()
DevDBServices = 'Update Material Logs':@VM:'Log Transaction Postings':@VM:'Process Wafer Image Queue':@VM DevDBServices = 'Update Material Logs':@VM:'Log Transaction Postings':@VM:'Process Wafer Image Queue':@VM
DevDBServices := 'Process UCL Requests':@VM:'Process ROTR Requests':@VM:'Process Wafer Image Requests':@VM DevDBServices := 'Process UCL Requests':@VM:'Process ROTR Requests':@VM:'Process Wafer Image Requests':@VM
DevDBServices := 'Process SQL Requests':@VM:'Send Notes':@VM:'Update Notification Groups' DevDBServices := 'Process SQL Requests':@VM:'Send Notes':@VM:'Update Notification Groups':@VM
DevDBServices := 'Update Security Groups':@VM:'Auto Scheduler'
Query = "SELECT SERVICES" Query = "SELECT SERVICES"

View File

@ -74,7 +74,7 @@ EQU COL$TAGS TO 9
EQU COL$TOOL_ID TO 10 EQU COL$TOOL_ID TO 10
Declare function Database_Services, obj_NCR, obj_SAP, Environment_Services, Logging_Services, obj_Tables Declare function Database_Services, obj_NCR, obj_SAP, Environment_Services, Logging_Services, obj_Tables
Declare function obj_WO_Mat, obj_RDS, Error_Services, MemberOf Declare function obj_WO_Mat, obj_RDS, Error_Services, MemberOf, SRP_Array
Declare subroutine Error_Services, Database_Services, obj_NCR, obj_SAP, Material_Services, Work_Order_Services Declare subroutine Error_Services, Database_Services, obj_NCR, obj_SAP, Material_Services, Work_Order_Services
Declare subroutine Logging_Services, Set_Status, obj_WO_Mat, obj_WO_Mat_Log, Schedule_Services, obj_Tables Declare subroutine Logging_Services, Set_Status, obj_WO_Mat, obj_WO_Mat_Log, Schedule_Services, obj_Tables
Declare subroutine obj_RDS, SAP_Services, Pass_To_SQL, NCR_Services Declare subroutine obj_RDS, SAP_Services, Pass_To_SQL, NCR_Services
@ -331,6 +331,7 @@ WRITE_RECORD:
OrigStatus = OrigRecord<NCR_STATUS$> OrigStatus = OrigRecord<NCR_STATUS$>
NewStatus = Record<NCR_STATUS$> NewStatus = Record<NCR_STATUS$>
If ( (OrigStatus NE NewStatus) and (NewStatus EQ 'C') ) then If ( (OrigStatus NE NewStatus) and (NewStatus EQ 'C') ) then
******************** ********************
@ -375,6 +376,8 @@ WRITE_RECORD:
If (ReactorType EQ 'EPP') then If (ReactorType EQ 'EPP') then
InCassNos = {CASS_NO}
**************************************************************************** ****************************************************************************
* Verify the need to "Auto-Sign" the box after returning from the NCR form * * Verify the need to "Auto-Sign" the box after returning from the NCR form *
**************************************************************************** ****************************************************************************
@ -500,11 +503,6 @@ WRITE_RECORD:
END END
END END
***********************************************************
* Mark the cassette as "processed" for scheduler purposes *
***********************************************************
Schedule_Services('MarkCassProcessed', WONo, CassNo, SigDTM)
*********************************************************************** ***********************************************************************
* Send CASS_COMP transaction to SAP to inform SAP of the rejected box * * Send CASS_COMP transaction to SAP to inform SAP of the rejected box *
*********************************************************************** ***********************************************************************
@ -653,11 +651,6 @@ WRITE_RECORD:
END END
END END
***********************************************************
* Mark the cassette as "processed" for scheduler purposes *
***********************************************************
Schedule_Services('MarkCassProcessed', WONo, CassNo, SigDTM)
*********************************************************************** ***********************************************************************
* Send CASS_COMP transaction to SAP to inform SAP of the rejected box * * Send CASS_COMP transaction to SAP to inform SAP of the rejected box *
*********************************************************************** ***********************************************************************

View File

@ -846,7 +846,15 @@ Event PUB_CHANGE_CASS_QTY.CLICK()
IF Get_Status(errCode) THEN ErrMsg(errCode) IF Get_Status(errCode) THEN ErrMsg(errCode)
// Set CtrlMap variable to the control(s) that need to be updated // Set CtrlMap variable to the control(s) that need to be updated
CtrlMap = 'EDT_CASS_NO' CtrlMap = ''
CtrlMap<1> = @Window:'.EDL_WO_QTY'
CtrlMap<2> = @Window:'.EDL_RX_QTY'
CtrlMap<3> = @Window:'.EDL_REL_QTY'
CtrlMap<4> = @Window:'.EDL_UNREL_QTY'
CtrlMap<5> = @Window:'.EDL_SAP_CONFIRM_SCRAP_QTY'
CtrlMap<6> = @Window:'.EDL_SAP_YIELD_QTY'
CtrlMap<7> = @Window:'.EDL_SHIP_QTY'
CtrlMap<8> = @Window:'.EDT_CASS_NO'
GoSub PopulateControls GoSub PopulateControls
END END
@ -2155,4 +2163,3 @@ StartStopDate:
return return

View File

@ -1473,4 +1473,3 @@ CalcThickTarget:
RETURN RETURN

View File

@ -118,16 +118,16 @@ RETURN Result
OpenTable: OpenTable:
* * * * * * * * * * * * * *
IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine' IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine'
IF ErrorMsg = '' THEN IF ErrorMsg = '' THEN
OPEN TableName TO TableVar THEN OPEN TableName TO TableVar THEN
Result = TableVar Result = TableVar
Parms = FieldStore(Parms,@RM,3,1,TableVar) ;* Added 1/22/2007 JCH Parms = FieldStore(Parms,@RM,3,1,TableVar) ;* Added 1/22/2007 JCH
END ELSE END ELSE
ErrorMsg = 'Unable to open Table ':QUOTE(TableName) ErrorMsg = 'Unable to open Table ':QUOTE(TableName)
END END
END END
RETURN RETURN
@ -136,24 +136,24 @@ RETURN
ReadRec: ReadRec:
* * * * * * * * * * * * * *
GOSUB LockRec GOSUB LockRec
IF ErrorMsg NE '' THEN RETURN IF ErrorMsg NE '' THEN RETURN
* * * * * * * * * * * * * *
ReadOnlyRec: ReadOnlyRec:
* * * * * * * * * * * * * *
IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine' IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine'
IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine' IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine'
IF TableVar = '' THEN IF TableVar = '' THEN
GOSUB OpenTable GOSUB OpenTable
IF ErrorMsg THEN RETURN IF ErrorMsg THEN RETURN
END END
READ TableRec FROM TableVar,TableKey THEN READ TableRec FROM TableVar,TableKey THEN
Result = TableRec Result = TableRec
END ELSE END ELSE
// Log failure to read // Log failure to read
LogData = '' LogData = ''
LogData<1> = LoggingDTM LogData<1> = LoggingDTM
@ -165,10 +165,10 @@ END ELSE
Logging_Services('AppendLog', objLog, LogData, @RM, @FM) Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
IF @FILE_ERROR<1> = 100 THEN IF @FILE_ERROR<1> = 100 THEN
* Record doesn't exist * Record doesn't exist
* 04/20/2021 - DJS - Moved unlock call outside of this specific error condition so that the record is always * 04/20/2021 - DJS - Moved unlock call outside of this specific error condition so that the record is always
* unlocked if the record fails to be read. * unlocked if the record fails to be read.
* GOSUB UnlockRec * GOSUB UnlockRec
Null Null
END ELSE END ELSE
Set_FSError() Set_FSError()
@ -181,7 +181,7 @@ END ELSE
If RecordLocked EQ True$ then Database_Services('ReleaseKeyIDLock', TableName, TableKey) If RecordLocked EQ True$ then Database_Services('ReleaseKeyIDLock', TableName, TableKey)
end end
END END
RETURN RETURN
@ -190,13 +190,13 @@ RETURN
WriteRec: WriteRec:
* * * * * * * * * * * * * *
IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine' IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine'
IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine' IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine'
IF TableVar = '' THEN GOSUB OpenTable IF TableVar = '' THEN GOSUB OpenTable
IF ErrorMsg THEN RETURN IF ErrorMsg THEN RETURN
IF ErrorMsg = '' THEN IF ErrorMsg = '' THEN
TestRec = TableRec TestRec = TableRec
@ -204,8 +204,8 @@ IF ErrorMsg = '' THEN
IF TestRec = '' THEN IF TestRec = '' THEN
DELETE TableVar,TableKey ELSE Null DELETE TableVar,TableKey ELSE Null
* ErrorMsg = 'Blank table rec with ':QUOTE(TableKey):' on ':QUOTE(TableName):' table.'; *added 4/9/21 for debugging * ErrorMsg = 'Blank table rec with ':QUOTE(TableKey):' on ':QUOTE(TableName):' table.'; *added 4/9/21 for debugging
* Set_FSError() * Set_FSError()
END ELSE END ELSE
Set_Status(0) Set_Status(0)
rv = Get_Status(errCode) rv = Get_Status(errCode)
@ -222,7 +222,7 @@ IF ErrorMsg = '' THEN
If RecordLocked EQ True$ then Database_Services('ReleaseKeyIDLock', TableName, TableKey) If RecordLocked EQ True$ then Database_Services('ReleaseKeyIDLock', TableName, TableKey)
end end
END END
RETURN RETURN
@ -231,13 +231,13 @@ RETURN
WriteOnlyRec: WriteOnlyRec:
* * * * * * * * * * * * * *
IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine' IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine'
IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine' IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine'
IF TableVar = '' THEN GOSUB OpenTable IF TableVar = '' THEN GOSUB OpenTable
IF ErrorMsg THEN RETURN IF ErrorMsg THEN RETURN
IF ErrorMsg = '' THEN IF ErrorMsg = '' THEN
TestRec = TableRec TestRec = TableRec
@ -250,7 +250,7 @@ IF ErrorMsg = '' THEN
ErrorMsg = 'Unable to write ':QUOTE(TableKey):' on ':QUOTE(TableName):' table.' ErrorMsg = 'Unable to write ':QUOTE(TableKey):' on ':QUOTE(TableName):' table.'
END END
END END
END END
RETURN RETURN
@ -259,17 +259,17 @@ RETURN
DeleteRec: DeleteRec:
* * * * * * * * * * * * * *
IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine' IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine'
IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine' IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine'
IF TableVar = '' THEN GOSUB OpenTable IF TableVar = '' THEN GOSUB OpenTable
IF ErrorMsg THEN RETURN IF ErrorMsg THEN RETURN
IF ErrorMsg = '' THEN IF ErrorMsg = '' THEN
DELETE TableVar,TableKey THEN DELETE TableVar,TableKey THEN
GOSUB UnlockRec GOSUB UnlockRec
END END
END END
RETURN RETURN
@ -279,17 +279,17 @@ RETURN
LockRec: LockRec:
* * * * * * * * * * * * * *
IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine' IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine'
IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine' IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine'
IF TableVar = '' THEN GOSUB OpenTable IF TableVar = '' THEN GOSUB OpenTable
IF ErrorMsg THEN RETURN IF ErrorMsg THEN RETURN
LockData = '' LockData = ''
Locked = FALSE$ Locked = FALSE$
RetryCnt = 0 RetryCnt = 0
LOOP LOOP
LOCK TableVar,TableKey THEN LOCK TableVar,TableKey THEN
Locked = TRUE$ Locked = TRUE$
@ -311,7 +311,7 @@ LOOP
RetryCnt += 1 RetryCnt += 1
END END
UNTIL Locked OR RetryCnt = 10 REPEAT UNTIL Locked OR RetryCnt = 10 REPEAT
RETURN RETURN
@ -321,8 +321,8 @@ RETURN
UnlockRec: UnlockRec:
* * * * * * * * * * * * * *
RecordLocked = Database_Services('IsKeyIDLocked', TableName, TableKey, False$) RecordLocked = Database_Services('IsKeyIDLocked', TableName, TableKey, False$)
If RecordLocked EQ True$ then Database_Services('ReleaseKeyIDLock', TableName, TableKey) If RecordLocked EQ True$ then Database_Services('ReleaseKeyIDLock', TableName, TableKey)
RETURN RETURN
@ -331,21 +331,21 @@ RETURN
LockSet: LockSet:
* * * * * * * * * * * * * *
IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine' IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine'
IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine' IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine'
IF TableVar = '' THEN GOSUB OpenTable IF TableVar = '' THEN GOSUB OpenTable
TableKeys = TableKey ;* Pass in @VM'd list of keys In TableKey TableKeys = TableKey ;* Pass in @VM'd list of keys In TableKey
IF ErrorMsg THEN RETURN IF ErrorMsg THEN RETURN
IF TableKeys = '' THEN RETURN IF TableKeys = '' THEN RETURN
Set_Status(0) Set_Status(0)
LockedTableKeys = '' LockedTableKeys = ''
FOR I = 1 TO COUNT(TableKeys,@VM) + (TableKeys NE '') FOR I = 1 TO COUNT(TableKeys,@VM) + (TableKeys NE '')
TableKey = TableKeys<1,I> TableKey = TableKeys<1,I>
GOSUB LockRec GOSUB LockRec
@ -358,9 +358,9 @@ FOR I = 1 TO COUNT(TableKeys,@VM) + (TableKeys NE '')
Next N Next N
End End
NEXT I NEXT I
Result = TableVar Result = TableVar
RETURN RETURN
@ -369,26 +369,23 @@ RETURN
UnlockSet: UnlockSet:
* * * * * * * * * * * * * *
IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine' IF TableName = '' THEN ErrorMsg = 'Null parameter "TableName" passed to subroutine'
IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine' IF TableKey = '' THEN ErrorMsg = 'Null parameter "TableKey" passed to subroutine'
IF TableVar = '' THEN ErrorMsg = 'Null parameter "TableVar" passed to subroutine' IF TableVar = '' THEN ErrorMsg = 'Null parameter "TableVar" passed to subroutine'
LockedTableKeys = TableKey ;* Pass in @VM'd list of keys In TableKey LockedTableKeys = TableKey ;* Pass in @VM'd list of keys In TableKey
IF ErrorMsg THEN RETURN IF ErrorMsg THEN RETURN
IF LockedTableKeys = '' THEN RETURN IF LockedTableKeys = '' THEN RETURN
Set_Status(0) Set_Status(0)
FOR I = 1 TO COUNT(LockedTableKeys,@VM) + (LockedTableKeys NE '') FOR I = 1 TO COUNT(LockedTableKeys,@VM) + (LockedTableKeys NE '')
TableKey = LockedTableKeys<1,I> TableKey = LockedTableKeys<1,I>
GOSUB UnlockRec GOSUB UnlockRec
NEXT I NEXT I
RETURN RETURN

View File

@ -80,29 +80,29 @@ RETURN Result
Create: Create:
* * * * * * * * * * * * * *
WONo = Parms[1,@RM] WONo = Parms[1,@RM]
WOStep = Parms[COL2()+1,@RM] WOStep = Parms[COL2()+1,@RM]
CassNo = Parms[COL2()+1,@RM] CassNo = Parms[COL2()+1,@RM]
WaferQty = Parms[COL2()+1,@RM] WaferQty = Parms[COL2()+1,@RM]
IF WONo = '' THEN ErrorMsg = 'Null Parameter "WONo" passed to routine. (':Method:')' IF WONo = '' THEN ErrorMsg = 'Null Parameter "WONo" passed to routine. (':Method:')'
IF WOStep = '' THEN ErrorMsg = 'Null Parameter "WOStep" passed to routine. (':Method:')' IF WOStep = '' THEN ErrorMsg = 'Null Parameter "WOStep" passed to routine. (':Method:')'
IF CassNo = '' THEN ErrorMsg = 'Null Parameter "CassNo" passed to routine. (':Method:')' IF CassNo = '' THEN ErrorMsg = 'Null Parameter "CassNo" passed to routine. (':Method:')'
IF WaferQty = '' THEN ErrorMsg = 'Null Parameter "WaferQty" passed to routine. (':Method:')' IF WaferQty = '' THEN ErrorMsg = 'Null Parameter "WaferQty" passed to routine. (':Method:')'
IF ErrorMsg NE '' THEN RETURN IF ErrorMsg NE '' THEN RETURN
WMInKey = WONo:'*':WOStep:'*':CassNo WMInKey = WONo:'*':WOStep:'*':CassNo
WMInRec = '' WMInRec = ''
FOR I = 1 TO WaferQty FOR I = 1 TO WaferQty
WMInRec<WM_IN_SLOT_NO$,I> = I WMInRec<WM_IN_SLOT_NO$,I> = I
NEXT I NEXT I
Done = False$ Done = False$
NumAttempts = 0 NumAttempts = 0
Loop Loop
NumAttempts += 1 NumAttempts += 1
Database_Services('WriteDataRow', 'WM_IN', WMInKey, WMInRec) Database_Services('WriteDataRow', 'WM_IN', WMInKey, WMInRec)
@ -129,11 +129,11 @@ Loop
Logging_Services('AppendLog', objLog, LogData, @RM, @FM) Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
Done = True$ Done = True$
end end
Until ( (NumAttempts EQ 10) or (Done EQ True$) ) Until ( (NumAttempts EQ 10) or (Done EQ True$) )
Repeat Repeat
WMInRec = Database_Services('ReadDataRow', 'WM_IN', WMInKey) WMInRec = Database_Services('ReadDataRow', 'WM_IN', WMInKey)
If WMInRec EQ '' then If WMInRec EQ '' then
// Record did not write to the database // Record did not write to the database
LogData = '' LogData = ''
LogData<1> = LoggingDTM LogData<1> = LoggingDTM
@ -148,9 +148,9 @@ If WMInRec EQ '' then
end else end else
Logging_Services('AppendLog', ObjLog, LogData, @RM, @FM, False$) Logging_Services('AppendLog', ObjLog, LogData, @RM, @FM, False$)
end end
end end
* obj_Tables('WriteRec','WM_IN':@RM:WMInKey:@RM:@RM:WMInRec) * obj_Tables('WriteRec','WM_IN':@RM:WMInKey:@RM:@RM:WMInRec)
RETURN RETURN
@ -159,19 +159,19 @@ RETURN
Delete: Delete:
* * * * * * * * * * * * * *
WMInKeys = Parms[1,@RM] WMInKeys = Parms[1,@RM]
IF WMInKeys = '' THEN RETURN IF WMInKeys = '' THEN RETURN
NCRs = XLATE('WM_IN',WMInKeys,'NCR_NOS','X') NCRs = XLATE('WM_IN',WMInKeys,'NCR_NOS','X')
CONVERT @FM TO @VM IN NCRs CONVERT @FM TO @VM IN NCRs
TestString = NCRs TestString = NCRs
CONVERT @VM TO '' IN TestString CONVERT @VM TO '' IN TestString
IF TestString NE '' THEN IF TestString NE '' THEN
FOR I = 1 TO COUNT(NCRs,@VM) + (NCRs NE '') FOR I = 1 TO COUNT(NCRs,@VM) + (NCRs NE '')
IF NCRs<1,I> NE '' THEN IF NCRs<1,I> NE '' THEN
Result<1,-1> = WMInKeys<1,I> ;* Return list of WMInKeys that have started processing and cannot be deleted Result<1,-1> = WMInKeys<1,I> ;* Return list of WMInKeys that have started processing and cannot be deleted
@ -179,13 +179,13 @@ IF TestString NE '' THEN
NEXT I NEXT I
ErrorMsg = 'Material has been rejected' ErrorMsg = 'Material has been rejected'
RETURN RETURN
END END
Set_Status(0) Set_Status(0)
WMiParms = 'WM_IN' WMiParms = 'WM_IN'
LockedWMInKeys = '' LockedWMInKeys = ''
FOR I = 1 TO COUNT(WMInKeys,@VM) + (WMInKeys NE '') FOR I = 1 TO COUNT(WMInKeys,@VM) + (WMInKeys NE '')
WMInKey = WMInKeys<1,I> WMInKey = WMInKeys<1,I>
WMiParms = FieldStore(WMiParms, @RM, 2, 1, WMInKey) WMiParms = FieldStore(WMiParms, @RM, 2, 1, WMInKey)
obj_Tables('LockRec',WMiParms) obj_Tables('LockRec',WMiParms)
@ -199,16 +199,16 @@ FOR I = 1 TO COUNT(WMInKeys,@VM) + (WMInKeys NE '')
END ELSE END ELSE
LockedWMInKeys<1,I> = WMInKey LockedWMInKeys<1,I> = WMInKey
END END
NEXT I NEXT I
TableVar = FIELD(WMiParms,@RM,3,1) TableVar = FIELD(WMiParms,@RM,3,1)
FOR I = 1 TO COUNT(WMInKeys,@VM) + (WMInKeys NE '') FOR I = 1 TO COUNT(WMInKeys,@VM) + (WMInKeys NE '')
WMInKey = WMInKeys<1,I> WMInKey = WMInKeys<1,I>
WMiParms = 'WM_IN':@RM:WMInKey:@RM:TableVar:@RM WMiParms = 'WM_IN':@RM:WMInKey:@RM:TableVar:@RM
obj_Tables('DeleteRec',WMiParms) ;* Deletes and removes the lock obj_Tables('DeleteRec',WMiParms) ;* Deletes and removes the lock
NEXT I NEXT I
RETURN RETURN
@ -217,65 +217,65 @@ RETURN
CurrStatus: CurrStatus:
* * * * * * * * * * * * * *
WMInKey = Parms[1,@RM] WMInKey = Parms[1,@RM]
WMInRec = Parms[COL2()+1,@RM] WMInRec = Parms[COL2()+1,@RM]
WOMatRec = Parms[COL2()+1,@RM] WOMatRec = Parms[COL2()+1,@RM]
IF WMInKey = '' THEN RETURN IF WMInKey = '' THEN RETURN
IF WMInRec = '' THEN WMInRec = XLATE('WM_IN',WMInKey,'','X') IF WMInRec = '' THEN WMInRec = XLATE('WM_IN',WMInKey,'','X')
*IF WMInRec = '' THEN RETURN *IF WMInRec = '' THEN RETURN
IF WMInRec<WM_IN_VOID$> = 1 THEN IF WMInRec<WM_IN_VOID$> = 1 THEN
Result = 'VOID' Result = 'VOID'
RETURN RETURN
END END
* Check for completion or abnormal condition * Check for completion or abnormal condition
IF WOMatRec = '' THEN IF WOMatRec = '' THEN
WONo = WMInKey[1,'*'] WONo = WMInKey[1,'*']
CassNo = WMInKey[-1,'B*'] CassNo = WMInKey[-1,'B*']
WOMatKey = WONo:'*':CassNo WOMatKey = WONo:'*':CassNo
WOMatRec = XLATE('WO_MAT',WOMatKey,'','X') WOMatRec = XLATE('WO_MAT',WOMatKey,'','X')
END END
IF WOMatRec<WO_MAT_HOLD$> = 1 AND WOMatRec<WO_MAT_HOLD_ENTITY$,1> = 'WM_IN' THEN IF WOMatRec<WO_MAT_HOLD$> = 1 AND WOMatRec<WO_MAT_HOLD_ENTITY$,1> = 'WM_IN' THEN
Result = 'HOLD' Result = 'HOLD'
RETURN RETURN
END END
GOSUB NCRNos GOSUB NCRNos
NCRNos = Result NCRNos = Result
Result = '' Result = ''
NCRStatuses = XLATE('NCR',NCRNos,7,'X') NCRStatuses = XLATE('NCR',NCRNos,7,'X')
IF INDEX(NCRStatuses,'O',1) THEN IF INDEX(NCRStatuses,'O',1) THEN
Result = 'NCR' ;* Open NCR associated with box Result = 'NCR' ;* Open NCR associated with box
RETURN RETURN
END END
* Check for sequential status points * Check for sequential status points
RemoveCount = 0 RemoveCount = 0
SlotCount = COUNT(WMInRec<WM_IN_SLOT_NO$>,@VM) + (WMInRec<WM_IN_SLOT_NO$> NE '') SlotCount = COUNT(WMInRec<WM_IN_SLOT_NO$>,@VM) + (WMInRec<WM_IN_SLOT_NO$> NE '')
FOR I = 1 TO SlotCount FOR I = 1 TO SlotCount
IF (WMInRec<WM_IN_RDS_NO$,I> NE '' OR WMInRec<WM_IN_SLOT_NCR$,I> NE '') THEN RemoveCount += 1 IF (WMInRec<WM_IN_RDS_NO$,I> NE '' OR WMInRec<WM_IN_SLOT_NCR$,I> NE '') THEN RemoveCount += 1
NEXT I NEXT I
IF RemoveCount = SlotCount THEN IF RemoveCount = SlotCount THEN
Result = 'MT' ;* Empty Result = 'MT' ;* Empty
RETURN RETURN
END END
/* /*
IF RemoveCount = 0 THEN IF RemoveCount = 0 THEN
PreClean = XLATE('WM_IN',WMInKey,'PRE_CLEAN','X') PreClean = XLATE('WM_IN',WMInKey,'PRE_CLEAN','X')
IF PreClean[1,2] = 'No' OR PreClean = '' THEN IF PreClean[1,2] = 'No' OR PreClean = '' THEN
@ -284,10 +284,10 @@ IF RemoveCount = 0 THEN
Result = 'PREC' ;* Post Clean if Required Result = 'PREC' ;* Post Clean if Required
RETURN RETURN
END END
END END
*/ */
Result = 'RFW' ;* Changed 10/27/2011 Result = 'RFW' ;* Changed 10/27/2011
RETURN RETURN
@ -297,24 +297,24 @@ RETURN
RemainingSlots: RemainingSlots:
* * * * * * * * * * * * * *
WONo = Parms[1,@RM] WONo = Parms[1,@RM]
WOStep = Parms[COL2()+1,@RM] WOStep = Parms[COL2()+1,@RM]
CassNos = Parms[COL2()+1,@RM] CassNos = Parms[COL2()+1,@RM]
IF WONo = '' THEN ErrorMsg = 'Null Parameter "WONo" passed to routine. (':Method:')' IF WONo = '' THEN ErrorMsg = 'Null Parameter "WONo" passed to routine. (':Method:')'
IF WOStep = '' THEN ErrorMsg = 'Null Parameter "WOStep" passed to routine. (':Method:')' IF WOStep = '' THEN ErrorMsg = 'Null Parameter "WOStep" passed to routine. (':Method:')'
IF ErrorMsg NE '' THEN RETURN IF ErrorMsg NE '' THEN RETURN
IF CassNos = '' THEN IF CassNos = '' THEN
CassNos = XLATE('WO_LOG',WONo,'WO_MAT_CASS_NO','X') CassNos = XLATE('WO_LOG',WONo,'WO_MAT_CASS_NO','X')
END END
CassCnt = COUNT(CassNos,@VM) + (CassNos NE '') CassCnt = COUNT(CassNos,@VM) + (CassNos NE '')
* Start Counting at the last box and work backward * Start Counting at the last box and work backward
FOR I = CassCnt TO 1 STEP -1 FOR I = CassCnt TO 1 STEP -1
CassNo = CassNos<1,I> CassNo = CassNos<1,I>
@ -337,7 +337,7 @@ FOR I = CassCnt TO 1 STEP -1
NEXT N NEXT N
END END
NEXT I NEXT I
RETURN RETURN
@ -346,26 +346,26 @@ RETURN
RemoveWafer: RemoveWafer:
* * * * * * * * * * * * * *
WONo = Parms[1,@RM] WONo = Parms[1,@RM]
WOStep = Parms[COL2()+1,@RM] WOStep = Parms[COL2()+1,@RM]
CassNo = Parms[COL2()+1,@RM] CassNo = Parms[COL2()+1,@RM]
SlotNos = Parms[COL2()+1,@RM] SlotNos = Parms[COL2()+1,@RM]
RDSNos = Parms[COL2()+1,@RM] RDSNos = Parms[COL2()+1,@RM]
PocketNos = Parms[COL2()+1,@RM] PocketNos = Parms[COL2()+1,@RM]
Zones = Parms[COL2()+1,@RM] Zones = Parms[COL2()+1,@RM]
IF WONo = '' THEN ErrorMsg = 'Null Parameter "WONo" passed to routine. (':Method:')' IF WONo = '' THEN ErrorMsg = 'Null Parameter "WONo" passed to routine. (':Method:')'
IF WOStep = '' THEN ErrorMsg = 'Null Parameter "WOStep" passed to routine. (':Method:')' IF WOStep = '' THEN ErrorMsg = 'Null Parameter "WOStep" passed to routine. (':Method:')'
IF CassNo = '' THEN ErrorMsg = 'Null Parameter "CassNo" passed to routine. (':Method:')' IF CassNo = '' THEN ErrorMsg = 'Null Parameter "CassNo" passed to routine. (':Method:')'
IF SlotNos = '' THEN ErrorMsg = 'Null Parameter "SlotNos" passed to routine. (':Method:')' IF SlotNos = '' THEN ErrorMsg = 'Null Parameter "SlotNos" passed to routine. (':Method:')'
IF ErrorMsg NE '' THEN RETURN IF ErrorMsg NE '' THEN RETURN
SlotCnt = COUNT(SlotNos,@VM) + (SlotNos NE '') SlotCnt = COUNT(SlotNos,@VM) + (SlotNos NE '')
FOR I = 1 TO SlotCnt FOR I = 1 TO SlotCnt
RDSNo = RDSNos<1,I> RDSNo = RDSNos<1,I>
PocketNo = PocketNos<1,I> PocketNo = PocketNos<1,I>
@ -377,25 +377,25 @@ FOR I = 1 TO SlotCnt
IF ErrorMsg NE '' THEN RETURN IF ErrorMsg NE '' THEN RETURN
NEXT I NEXT I
otParms = 'WM_IN':@RM:WONo:'*':WOStep:'*':CassNo otParms = 'WM_IN':@RM:WONo:'*':WOStep:'*':CassNo
WMInRec = obj_Tables('ReadRec',otParms) WMInRec = obj_Tables('ReadRec',otParms)
IF Get_Status(errCode) THEN RETURN IF Get_Status(errCode) THEN RETURN
FirstWafer = 0 FirstWafer = 0
FirstRDSNo = '' FirstRDSNo = ''
LoadDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS') LoadDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')
WfrIDs = '' ;* Added 9/7/2016 JCH WfrIDs = '' ;* Added 9/7/2016 JCH
RunLocs = '' ;* Added 9/7/2016 JCH RunLocs = '' ;* Added 9/7/2016 JCH
CurrSlotIDs = '' ;* Added 9/7/2016 JCH CurrSlotIDs = '' ;* Added 9/7/2016 JCH
FOR I = 1 TO SlotCnt FOR I = 1 TO SlotCnt
SlotNo = SlotNos<1,I> SlotNo = SlotNos<1,I>
IF SlotNo = 1 THEN IF SlotNo = 1 THEN
@ -437,14 +437,14 @@ FOR I = 1 TO SlotCnt
END END
NEXT I NEXT I
/* /*
* * * * * Added 9/7/2016 JCH * * * * * * * * * * * Added 9/7/2016 JCH * * * * * *
IF WfrIDs NE '' THEN IF WfrIDs NE '' THEN
Parms = WfrIDs:@RM ;* WfrID - mv Parms = WfrIDs:@RM ;* WfrID - mv
Parms := LoadDTM:@RM ;* EventDtm Parms := LoadDTM:@RM ;* EventDtm
@ -464,20 +464,20 @@ IF WfrIDs NE '' THEN
obj_WO_Wfr('AddEvent',Parms) obj_WO_Wfr('AddEvent',Parms)
END END
*/ */
otParms = FieldStore(otParms,@RM,4,0,WMInRec) ;* Put record in 4th field of OtParms otParms = FieldStore(otParms,@RM,4,0,WMInRec) ;* Put record in 4th field of OtParms
obj_Tables('WriteRec',otParms) obj_Tables('WriteRec',otParms)
* Added 11/8/2012 JCH * * Added 11/8/2012 JCH *
WIPStartDTM = XLATE('WO_MAT',WONo:'*':CassNo,WO_MAT_WIP_START_DTM$,'X') WIPStartDTM = XLATE('WO_MAT',WONo:'*':CassNo,WO_MAT_WIP_START_DTM$,'X')
DTMSecond = '0.0000115741' ;*********** Constant for 1 Second in DTM internal format DTMSecond = '0.0000115741' ;*********** Constant for 1 Second in DTM internal format
IF WIPStartDTM = '' THEN IF WIPStartDTM = '' THEN
CurrTime = Time() CurrTime = Time()
CurrDTM = OCONV(Date(),'D4/'):' ':OCONV(CurrTime,'MTS') CurrDTM = OCONV(Date(),'D4/'):' ':OCONV(CurrTime,'MTS')
@ -485,16 +485,16 @@ IF WIPStartDTM = '' THEN
obj_Post_Log('Create','WO_MAT':@RM:WONo:'*':CassNo:@RM:WO_MAT_WIP_START_DTM$:@RM:ICONV(CurrDTM,'DT')) obj_Post_Log('Create','WO_MAT':@RM:WONo:'*':CassNo:@RM:WO_MAT_WIP_START_DTM$:@RM:ICONV(CurrDTM,'DT'))
END ELSE END ELSE
CurrDTM = OCONV(WipStartDTM,'DT4/^S') ;* CurrDTM in OCONV format CurrDTM = OCONV(WipStartDTM,'DT4/^S') ;* CurrDTM in OCONV format
CurrDTM1 = OCONV(WipStartDTM + DTMSecond,'DT4/^S') CurrDTM1 = OCONV(WipStartDTM + DTMSecond,'DT4/^S')
END END
* Added 2/4/2013 by JCH * Added 2/4/2013 by JCH
IF FirstWafer THEN IF FirstWafer THEN
Reactor = XLATE('REACT_RUN',FirstRDSNo,REACT_RUN_REACTOR$ ,'X') Reactor = XLATE('REACT_RUN',FirstRDSNo,REACT_RUN_REACTOR$ ,'X')
@ -569,7 +569,7 @@ IF FirstWafer THEN
RETURN RETURN
END END
END END
RETURN RETURN
@ -579,32 +579,32 @@ RETURN
ReplaceWafer: ReplaceWafer:
* * * * * * * * * * * * * *
WONo = Parms[1,@RM] WONo = Parms[1,@RM]
WOStep = Parms[COL2()+1,@RM] WOStep = Parms[COL2()+1,@RM]
CassNo = Parms[COL2()+1,@RM] CassNo = Parms[COL2()+1,@RM]
SlotNos = Parms[COL2()+1,@RM] SlotNos = Parms[COL2()+1,@RM]
IF WONo = '' THEN ErrorMsg = 'Null Parameter "WONo" passed to routine. (':Method:')' IF WONo = '' THEN ErrorMsg = 'Null Parameter "WONo" passed to routine. (':Method:')'
IF WOStep = '' THEN ErrorMsg = 'Null Parameter "WOStep" passed to routine. (':Method:')' IF WOStep = '' THEN ErrorMsg = 'Null Parameter "WOStep" passed to routine. (':Method:')'
IF CassNo = '' THEN ErrorMsg = 'Null Parameter "CassNo" passed to routine. (':Method:')' IF CassNo = '' THEN ErrorMsg = 'Null Parameter "CassNo" passed to routine. (':Method:')'
IF SlotNos = '' THEN ErrorMsg = 'Null Parameter "SlotNos" passed to routine. (':Method:')' IF SlotNos = '' THEN ErrorMsg = 'Null Parameter "SlotNos" passed to routine. (':Method:')'
IF ErrorMsg NE '' THEN RETURN IF ErrorMsg NE '' THEN RETURN
Set_Status(0) Set_Status(0)
otParms = 'WM_IN':@RM:WONo:'*':WOStep:'*':CassNo otParms = 'WM_IN':@RM:WONo:'*':WOStep:'*':CassNo
WMInRec = obj_Tables('ReadRec',otParms) WMInRec = obj_Tables('ReadRec',otParms)
IF Get_Status(errCode) THEN RETURN IF Get_Status(errCode) THEN RETURN
ReplaceDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS') ReplaceDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')
WfrIDs = '' ;* Added 9/7/2016 JCH WfrIDs = '' ;* Added 9/7/2016 JCH
NewSlotIDs = '' ;* Added 9/7/2016 JCH NewSlotIDs = '' ;* Added 9/7/2016 JCH
FOR I = 1 TO COUNT(SlotNos,@VM) + (SlotNos NE '') FOR I = 1 TO COUNT(SlotNos,@VM) + (SlotNos NE '')
SlotNo = SlotNos<1,I> SlotNo = SlotNos<1,I>
LOCATE SlotNo IN WMInRec<WM_IN_SLOT_NO$> USING @VM SETTING Pos THEN LOCATE SlotNo IN WMInRec<WM_IN_SLOT_NO$> USING @VM SETTING Pos THEN
@ -639,11 +639,11 @@ FOR I = 1 TO COUNT(SlotNos,@VM) + (SlotNos NE '')
obj_WO_Wfr('AddEvent',Parms) obj_WO_Wfr('AddEvent',Parms)
END END
NEXT I NEXT I
/* /*
IF WfrIDs NE '' THEN IF WfrIDs NE '' THEN
* * * * Added 9/7/2016 JCH - wafer history * * * * * * * * Added 9/7/2016 JCH - wafer history * * * *
@ -664,12 +664,12 @@ IF WfrIDs NE '' THEN
obj_WO_Wfr('AddEvent',Parms) obj_WO_Wfr('AddEvent',Parms)
END END
*/ */
otParms = FieldStore(otParms,@RM,4,0,WMInRec) ;* Put record in 4th field of OtParms otParms = FieldStore(otParms,@RM,4,0,WMInRec) ;* Put record in 4th field of OtParms
obj_Tables('WriteRec',otParms) obj_Tables('WriteRec',otParms)
RETURN RETURN
@ -678,30 +678,30 @@ RETURN
AddWafer: AddWafer:
* * * * * * * * * * * * * *
WONo = Parms[1,@RM] WONo = Parms[1,@RM]
WOStep = Parms[COL2()+1,@RM] WOStep = Parms[COL2()+1,@RM]
CassNo = Parms[COL2()+1,@RM] CassNo = Parms[COL2()+1,@RM]
SlotNo = Parms[COL2()+1,@RM] SlotNo = Parms[COL2()+1,@RM]
IF WONo = '' THEN ErrorMsg = 'Null Parameter "WONo" passed to routine. (':Method:')' IF WONo = '' THEN ErrorMsg = 'Null Parameter "WONo" passed to routine. (':Method:')'
IF WOStep = '' THEN ErrorMsg = 'Null Parameter "WOStep" passed to routine. (':Method:')' IF WOStep = '' THEN ErrorMsg = 'Null Parameter "WOStep" passed to routine. (':Method:')'
IF CassNo = '' THEN ErrorMsg = 'Null Parameter "CassNo" passed to routine. (':Method:')' IF CassNo = '' THEN ErrorMsg = 'Null Parameter "CassNo" passed to routine. (':Method:')'
IF SlotNo = '' THEN ErrorMsg = 'Null Parameter "SlotNo" passed to routine. (':Method:')' IF SlotNo = '' THEN ErrorMsg = 'Null Parameter "SlotNo" passed to routine. (':Method:')'
IF ErrorMsg NE '' THEN RETURN IF ErrorMsg NE '' THEN RETURN
otParms = 'WM_IN':@RM:WONo:'*':WOStep:'*':CassNo otParms = 'WM_IN':@RM:WONo:'*':WOStep:'*':CassNo
WMInRec = obj_Tables('ReadRec',otParms) WMInRec = obj_Tables('ReadRec',otParms)
LOCATE SlotNo IN WMInRec<WM_IN_SLOT_NO$> USING @VM SETTING Pos THEN LOCATE SlotNo IN WMInRec<WM_IN_SLOT_NO$> USING @VM SETTING Pos THEN
WMInRec<WM_IN_SLOT_NCR$,Pos> = '' ;* Clears NCR numbers WMInRec<WM_IN_SLOT_NCR$,Pos> = '' ;* Clears NCR numbers
END END
*WMInRec<WM_IN_SLOT_NO$,SlotNo> = SlotNo ;* Slot numbers are the same as the position in the list. *WMInRec<WM_IN_SLOT_NO$,SlotNo> = SlotNo ;* Slot numbers are the same as the position in the list.
otParms = FieldStore(otParms,@RM,4,0,WMInRec) ;* Put record in 4th field of OtParms otParms = FieldStore(otParms,@RM,4,0,WMInRec) ;* Put record in 4th field of OtParms
obj_Tables('WriteRec',otParms) obj_Tables('WriteRec',otParms)
RETURN RETURN
@ -711,25 +711,25 @@ RETURN
NCRNos: NCRNos:
* * * * * * * * * * * * * *
IF NOT(ASSIGNED(WMInKey)) THEN IF NOT(ASSIGNED(WMInKey)) THEN
* Called externally * Called externally
WMInKey = Parms[1,@RM] WMInKey = Parms[1,@RM]
WMInRec = Parms[COL2()+1,@RM] WMInRec = Parms[COL2()+1,@RM]
END END
IF WMInKey = '' THEN RETURN IF WMInKey = '' THEN RETURN
IF WMInRec = '' THEN WMInRec = XLATE('WM_IN',WMInKey,'','X') IF WMInRec = '' THEN WMInRec = XLATE('WM_IN',WMInKey,'','X')
SlotNCRs = WMInRec<WM_IN_SLOT_NCR$> SlotNCRs = WMInRec<WM_IN_SLOT_NCR$>
FOR I = 1 TO COUNT(SlotNCRs,@VM) + (SlotNCRs NE '') FOR I = 1 TO COUNT(SlotNCRs,@VM) + (SlotNCRs NE '')
SlotNCR = SlotNCRs<1,I> SlotNCR = SlotNCRs<1,I>
IF SlotNCR NE '' THEN IF SlotNCR NE '' THEN
LOCATE SlotNCR in Result BY 'AR' USING @VM SETTING Pos ELSE LOCATE SlotNCR in Result BY 'AR' USING @VM SETTING Pos ELSE
Result = INSERT(Result,1,Pos,0,SlotNCR) Result = INSERT(Result,1,Pos,0,SlotNCR)
END END
END END
NEXT I NEXT I
RETURN RETURN
@ -738,26 +738,26 @@ RETURN
RunProdTest: RunProdTest:
* * * * * * * * * * * * * *
WMIKey = Parms[1,@RM] WMIKey = Parms[1,@RM]
WMIRec = Parms[COL2()+1,@RM] WMIRec = Parms[COL2()+1,@RM]
IF WMIKey = '' THEN RETURN IF WMIKey = '' THEN RETURN
IF WMIRec = '' THEN IF WMIRec = '' THEN
WMIRec = XLATE('WM_IN',WMIKey,'','X') WMIRec = XLATE('WM_IN',WMIKey,'','X')
END END
IF WMIRec = '' THEN RETURN IF WMIRec = '' THEN RETURN
CassNo = FIELD(WMIKey,'*',3) CassNo = FIELD(WMIKey,'*',3)
SlotNos = WMIRec<WM_IN_SLOT_NO$> SlotNos = WMIRec<WM_IN_SLOT_NO$>
SlotCnt = COUNT(SlotNos,@VM) + ( SlotNos NE '') SlotCnt = COUNT(SlotNos,@VM) + ( SlotNos NE '')
Ans = '' Ans = ''
FOR I = 1 TO SlotCnt FOR I = 1 TO SlotCnt
RDSNo = WMIRec<WM_IN_RDS_NO$,I> RDSNo = WMIRec<WM_IN_RDS_NO$,I>
RDSRec = XLATE('RDS',RDSNo,'','X') RDSRec = XLATE('RDS',RDSNo,'','X')
@ -783,9 +783,9 @@ FOR I = 1 TO SlotCnt
END ;* End of check for matching Cassette and Slot number in the RDS END ;* End of check for matching Cassette and Slot number in the RDS
NEXT N NEXT N
NEXT I NEXT I
Result = Ans Result = Ans
RETURN RETURN
@ -796,22 +796,22 @@ RETURN
RebuildUnload: RebuildUnload:
* * * * * * * * * * * * * *
WMInID = Parms[1,@RM] WMInID = Parms[1,@RM]
IF WMInID = '' THEN RETURN IF WMInID = '' THEN RETURN
WONo = WMInID[1,'*'] WONo = WMInID[1,'*']
ProcStep = WMInID[COL2()+1,'*'] ProcStep = WMInID[COL2()+1,'*']
CassNo = WMInID[COL2()+1,'*'] CassNo = WMInID[COL2()+1,'*']
Update_Index ("RDS", "WO", "") Update_Index ("RDS", "WO", "")
Extract_SI_Keys( 'RDS', 'WO', WONo, RDSNos ) ;* Original Code Extract_SI_Keys( 'RDS', 'WO', WONo, RDSNos ) ;* Original Code
WOBoxCnt = COUNT( RDSNos, @VM ) + ( RDSNos NE '' ) WOBoxCnt = COUNT( RDSNos, @VM ) + ( RDSNos NE '' )
FOR I = 1 TO WOBoxCnt FOR I = 1 TO WOBoxCnt
RDSNo = RDSNos<1,I> RDSNo = RDSNos<1,I>
RDSRec = XLATE('RDS',RDSNo,'','X') RDSRec = XLATE('RDS',RDSNo,'','X')
@ -841,7 +841,7 @@ FOR I = 1 TO WOBoxCnt
END END
END END
NEXT I NEXT I
RETURN RETURN
@ -851,29 +851,29 @@ RemProdTW:
* * * * * * * * * * * * * *
WONo = Parms[1,@RM] WONo = Parms[1,@RM]
WOCassNo = Parms[COL2()+1,@RM] WOCassNo = Parms[COL2()+1,@RM]
MetNo = Parms[COL2()+1,@RM] MetNo = Parms[COL2()+1,@RM]
SlotNos = Parms[COL2()+1,@RM] SlotNos = Parms[COL2()+1,@RM]
IF WONo = '' THEN ErrorMsg = 'Null Parm "WONo" passed to routine. (':Method:')' IF WONo = '' THEN ErrorMsg = 'Null Parm "WONo" passed to routine. (':Method:')'
IF WOCassNo = '' THEN ErrorMsg = 'Null Parm "WOCassNo" passed to routine. (':Method:')' IF WOCassNo = '' THEN ErrorMsg = 'Null Parm "WOCassNo" passed to routine. (':Method:')'
IF MetNo = '' THEN ErrorMsg = 'Null Parm "MetNo" passed to routine. (':Method:')' IF MetNo = '' THEN ErrorMsg = 'Null Parm "MetNo" passed to routine. (':Method:')'
IF SlotNos = '' THEN ErrorMsg = 'Null Parm "SlotNos" passed to routine. (':Method:')' IF SlotNos = '' THEN ErrorMsg = 'Null Parm "SlotNos" passed to routine. (':Method:')'
IF ErrorMsg NE '' THEN RETURN IF ErrorMsg NE '' THEN RETURN
StepNo = 1 StepNo = 1
otParms = 'WM_IN':@RM:WONo:'*':StepNo:'*':WOCassNo otParms = 'WM_IN':@RM:WONo:'*':StepNo:'*':WOCassNo
WMInRec = obj_Tables('ReadRec',otParms) ;* Reads and sets lock WMInRec = obj_Tables('ReadRec',otParms) ;* Reads and sets lock
PulledWaferIDs = '' PulledWaferIDs = ''
IF Get_Status(errCode) THEN IF Get_Status(errCode) THEN
NULL NULL
END ELSE END ELSE
SlotCnt = COUNT(SlotNos,@VM) + (SlotNos NE '') SlotCnt = COUNT(SlotNos,@VM) + (SlotNos NE '')
PulledWaferIDs = '' PulledWaferIDs = ''
FOR I = 1 TO SlotCnt FOR I = 1 TO SlotCnt
@ -885,9 +885,9 @@ END ELSE
otParms = FIELDSTORE(otParms,@RM,4,0,WMInRec) otParms = FIELDSTORE(otParms,@RM,4,0,WMInRec)
obj_Tables('WriteRec',otParms) obj_Tables('WriteRec',otParms)
END END
Result = PulledWaferIDs Result = PulledWaferIDs
RETURN RETURN
@ -896,23 +896,23 @@ RETURN
RepProdTW: RepProdTW:
* * * * * * * * * * * * * *
WONo = Parms[1,@RM] WONo = Parms[1,@RM]
WOCassNo = Parms[COL2()+1,@RM] WOCassNo = Parms[COL2()+1,@RM]
MetNo = Parms[COL2()+1,@RM] MetNo = Parms[COL2()+1,@RM]
WaferIDs = Parms[COL2()+1,@RM] WaferIDs = Parms[COL2()+1,@RM]
IF NOT(ASSIGNED(WONo)) THEN ErrorMsg = 'Unassigned Parm "WONo" passed to routine. (':Method:')' IF NOT(ASSIGNED(WONo)) THEN ErrorMsg = 'Unassigned Parm "WONo" passed to routine. (':Method:')'
IF NOT(ASSIGNED(WOCassNo)) THEN ErrorMsg = 'Unassigned Parm "WOCassNo" passed to routine. (':Method:')' IF NOT(ASSIGNED(WOCassNo)) THEN ErrorMsg = 'Unassigned Parm "WOCassNo" passed to routine. (':Method:')'
IF NOT(ASSIGNED(MetNo)) THEN ErrorMsg = 'Unassigned Parm "MetNo" passed to routine. (':Method:')' IF NOT(ASSIGNED(MetNo)) THEN ErrorMsg = 'Unassigned Parm "MetNo" passed to routine. (':Method:')'
IF ErrorMsg NE '' THEN RETURN IF ErrorMsg NE '' THEN RETURN
StepNo = 1 StepNo = 1
otParms = 'WM_IN':@RM:WONo:'*':StepNo:'*':WOCassNo otParms = 'WM_IN':@RM:WONo:'*':StepNo:'*':WOCassNo
WMInRec = obj_Tables('ReadRec',otParms) ;* Reads and sets lock WMInRec = obj_Tables('ReadRec',otParms) ;* Reads and sets lock
IF WaferIDs = '' THEN IF WaferIDs = '' THEN
MetNos = WMInRec<WM_IN_SLOT_MET_NO$> MetNos = WMInRec<WM_IN_SLOT_MET_NO$>
WaferIDCnt = COUNT(MetNos,@VM) + (MetNos NE '') WaferIDCnt = COUNT(MetNos,@VM) + (MetNos NE '')
@ -921,17 +921,17 @@ IF WaferIDs = '' THEN
WMInRec<WM_IN_SLOT_MET_NO$,I> = '' WMInRec<WM_IN_SLOT_MET_NO$,I> = ''
END END
NEXT I NEXT I
END ELSE END ELSE
WaferIDCnt = COUNT(WaferIDs,',') + (WaferIDs NE '') WaferIDCnt = COUNT(WaferIDs,',') + (WaferIDs NE '')
FOR I = 1 TO WaferIDCnt FOR I = 1 TO WaferIDCnt
WaferID = FIELD(WaferIDs,',',I) WaferID = FIELD(WaferIDs,',',I)
SlotNo = WaferID[-1,'B.'] SlotNo = WaferID[-1,'B.']
WMInRec<WM_IN_SLOT_MET_NO$,SlotNo> = '' WMInRec<WM_IN_SLOT_MET_NO$,SlotNo> = ''
NEXT I NEXT I
END END
otParms = FIELDSTORE(otParms,@RM,4,0,WMInRec) otParms = FIELDSTORE(otParms,@RM,4,0,WMInRec)
obj_Tables('WriteRec',otParms) obj_Tables('WriteRec',otParms)
RETURN RETURN

File diff suppressed because it is too large Load Diff

View File

@ -4266,6 +4266,9 @@ SetWfrQty:
CurrWfrQty = WOMatRec<WO_MAT_WAFER_QTY$> CurrWfrQty = WOMatRec<WO_MAT_WAFER_QTY$>
CurrSlots = WOMatRec<WO_MAT_SLOT_NO$> CurrSlots = WOMatRec<WO_MAT_SLOT_NO$>
ReactorType = Xlate('WO_MAT', WOMatKey, 'REACTOR_TYPE', 'X')
EpiPro = ( (ReactorType EQ 'EPP') or (ReactorType EQ 'EpiPro') )
BEGIN CASE BEGIN CASE
CASE WfrQty > CurrWfrQty CASE WfrQty > CurrWfrQty
@ -4282,6 +4285,7 @@ SetWfrQty:
NEXT I NEXT I
CASE WfrQty < CurrWfrQty CASE WfrQty < CurrWfrQty
// Removing wafers // Removing wafers
EligibleWfrList = '' EligibleWfrList = ''
@ -4295,7 +4299,10 @@ SetWfrQty:
NEXT I NEXT I
NumEligibleWfrs = DCount(EligibleWfrList, @FM) NumEligibleWfrs = DCount(EligibleWfrList, @FM)
If NumEligibleWfrs GE WfrQty then
DiffQty = CurrWfrQty - WfrQty
If NumEligibleWfrs GE DiffQty then
// We have enough wafers, so remove enough to make cassette quantity equal the desired quantity // We have enough wafers, so remove enough to make cassette quantity equal the desired quantity
Loop Loop
@ -4306,16 +4313,32 @@ SetWfrQty:
CurrWfrQty -= 1 CurrWfrQty -= 1
NumEligibleWfrs -= 1 NumEligibleWfrs -= 1
Repeat Repeat
end
WOMatRec<WO_MAT_WAFER_QTY$> = WfrQty ;* Update Wafer Qty WOMatRec<WO_MAT_WAFER_QTY$> = WfrQty ;* Update Wafer Qty
end else
ErrorMsg = 'This cassette cannot be reduced to ':WfrQty:' wafers because only ':NumEligibleWfrs:' are eligible to be removed. '
end
END CASE END CASE
otParms = FIELDSTORE(otParms,@RM,4,0,WOMatRec) If ErrorMsg EQ '' then
obj_Tables('WriteRec',otParms) If EpiPro then
WMIKey = WOMatRec<WO_MAT_WMI_KEY$>
If WMIKey NE '' then
WMIRec = Database_Services('ReadDataRow', 'WM_IN', WMIKey)
If Error_Services('NoError') then
WMIRec<WM_IN_SLOT_NO$> = WOMatRec<WO_MAT_SLOT_NO$>
Database_Services('WriteDataRow', 'WM_IN', WMIKey, WMIRec, True$, False$, True$)
end
end
end
otParms = FIELDSTORE(otParms,@RM,4,0,WOMatRec)
obj_Tables('WriteRec',otParms) ; // This will release the lock
Result = CurrWfrQty Result = CurrWfrQty
end else
RecordLocked = Database_Services('IsKeyIDLocked', 'WO_MAT', WOMatKey, False$)
If RecordLocked then Database_Services('ReleaseKeyIDLock', 'WO_MAT', WOMatKey)
end
RETURN RETURN

View File

@ -950,7 +950,8 @@ WRITE_RECORD:
OrigDateOut = OrigRecord<RDS_DATE_OUT$> OrigDateOut = OrigRecord<RDS_DATE_OUT$>
NewDateOut = Record<RDS_DATE_OUT$> NewDateOut = Record<RDS_DATE_OUT$>
If ( (OrigDateOut EQ '') and (NewDateOut NE '') ) then
If ( ( (OrigDateOut EQ '') and (NewDateOut NE '') ) ) then
// Mark this cassette as processed in the schedule event record // Mark this cassette as processed in the schedule event record
DatetimeOut = {DATETIME_OUT} DatetimeOut = {DATETIME_OUT}
If EpiPro then If EpiPro then

View File

@ -3002,6 +3002,9 @@ Service MarkCassProcessed(WONo, CassNo, ProcessedDTM)
CassComp = False$ CassComp = False$
ReactType = Xlate('WO_LOG', WONo, 'REACT_TYPE', 'X') ReactType = Xlate('WO_LOG', WONo, 'REACT_TYPE', 'X')
If ReactType EQ 'EPP' then If ReactType EQ 'EPP' then
// Since EpiPro splits WM_IN cassettes out into RDS runs, we need to determine if the
// cassette has been emptied out or if enough wafers have been consumed such that
// the wafer count equals the split work order event quantity.
StopDtm = SchedDetNGRec<SCHED_DET_NG.STOP_DTM$> StopDtm = SchedDetNGRec<SCHED_DET_NG.STOP_DTM$>
SchedWfrQty = Schedule_Services('GetScheduledWfrQty', WONo, StopDtm) SchedWfrQty = Schedule_Services('GetScheduledWfrQty', WONo, StopDtm)
// Determine the cassette and slot this event should end on. This will be used to identify // Determine the cassette and slot this event should end on. This will be used to identify
@ -3025,7 +3028,10 @@ Service MarkCassProcessed(WONo, CassNo, ProcessedDTM)
NumUnloadedWfrs += (UnloadDtm NE '') NumUnloadedWfrs += (UnloadDtm NE '')
Next UnloadDtm Next UnloadDtm
end end
If ( (NumUnloadedWfrs EQ 25) or ( (CassNo EQ EndCassNo) and (NumUnloadedWfrs GE EndSlotNo) ) ) then CassComp = True$ CassRemWfrs = Xlate('WM_IN', WMIKey, 'REM_WFRS', 'X')
If ( (NumUnloadedWfrs EQ 25) or ( (CassNo EQ EndCassNo) and (NumUnloadedWfrs GE EndSlotNo) ) or (CassRemWfrs EQ 0) ) then
CassComp = True$
end
end else end else
CassComp = True$ CassComp = True$
end end
@ -3041,17 +3047,6 @@ Service MarkCassProcessed(WONo, CassNo, ProcessedDTM)
Done = True$ Done = True$
end end
end end
// Mark previous cassette processed if it isn't already. This covers situations where users fail to
// sign the unload stage for a cassette.
PrevCassNo = CassNo - 1
Locate PrevCassNo in UnprocessedCassettes using @VM setting vPos then
UnprocessedCassettes = Delete(UnprocessedCassettes, 0, vPos, 0)
ProcessedCassettes = SchedDetNGRec<SCHED_DET_NG.PROCESSED_CASS$>
ProcessedCassettes<0, -1> = PrevCassNo
SchedDetNGRec<SCHED_DET_NG.UNPROCESSED_CASS$> = UnprocessedCassettes
SchedDetNGRec<SCHED_DET_NG.PROCESSED_CASS$> = ProcessedCassettes
Database_Services('WriteDataRow', 'SCHED_DET_NG', SchedDetNGKey, SchedDetNGRec, True$, False$, True$)
end
Until Done EQ True$ Until Done EQ True$
Repeat Repeat
end end
@ -3424,4 +3419,3 @@ CreateScheduleChangeNotification:
return return

View File

@ -59,7 +59,7 @@ Equ Comma$ to ','
Declare function Database_Services, obj_NCR, obj_SAP, Environment_Services, Logging_Services, Datetime Declare function Database_Services, obj_NCR, obj_SAP, Environment_Services, Logging_Services, Datetime
Declare subroutine Error_Services, Database_Services, obj_NCR, obj_SAP, Material_Services, Work_Order_Services Declare subroutine Error_Services, Database_Services, obj_NCR, obj_SAP, Material_Services, Work_Order_Services
Declare subroutine Logging_Services, obj_Notes Declare subroutine Logging_Services, obj_Notes, Schedule_Services
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\WM_IN' LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\WM_IN'
LogDate = Oconv(Date(), 'D4/') LogDate = Oconv(Date(), 'D4/')
@ -160,48 +160,8 @@ WRITE_RECORD:
WONo = Field(Name, '*', 1) WONo = Field(Name, '*', 1)
CassNo = Field(Name, '*', 3) CassNo = Field(Name, '*', 3)
ProcessedDTM = Datetime() ProcessedDTM = Datetime()
// Find the SCHED_DET_NG event record that contains the cassette number. // This service will determine if the cassette needs to be marked as complete.
Query = 'SELECT SCHED_DET_NG WITH WO_NO EQ ':WONo:' AND WITH UNPROCESSED_CASS CONTAINING ':CassNo Schedule_Services('MarkCassProcessed', WONo, CassNo, ProcessedDtm)
GoSub ClearCursors
RList(Query, TARGET_ACTIVELIST$, '', '', '')
EOF = False$
Done = False$
Loop
Readnext SchedDetNGKey else EOF = True$
Until EOF = True$
SchedDetNGRec = Database_Services('ReadDataRow', 'SCHED_DET_NG', SchedDetNGKey)
ProcessedCassettes = SchedDetNGRec<SCHED_DET_NG.PROCESSED_CASS$>
ProcessedWfrQty = DCount(ProcessedCassettes, @VM) * 25
TotalWfrs = SchedDetNGRec<SCHED_DET_NG.EVENT_TOTAL_WFRS$>
CassRemWfrs = Xlate('WM_IN', Name, 'REM_WFRS', 'X')
ProcessedCassQty = 25 - CassRemWfrs
If (ProcessedWfrQty + ProcessedCassQty ) EQ TotalWfrs then
// Mark cassette complete.
UnprocessedCassettes = SchedDetNGRec<SCHED_DET_NG.UNPROCESSED_CASS$>
Locate CassNo in UnprocessedCassettes using @VM setting vPos then
UnprocessedCassettes = Delete(UnprocessedCassettes, 0, vPos, 0)
ProcessedCassettes = SchedDetNGRec<SCHED_DET_NG.PROCESSED_CASS$>
ProcessedCassettes<0, -1> = CassNo
SchedDetNGRec<SCHED_DET_NG.UNPROCESSED_CASS$> = UnprocessedCassettes
SchedDetNGRec<SCHED_DET_NG.PROCESSED_CASS$> = ProcessedCassettes
Database_Services('WriteDataRow', 'SCHED_DET_NG', SchedDetNGKey, SchedDetNGRec, True$, False$, True$)
Done = True$
end
// Mark previous cassette processed if it isn't already. This covers situations where users fail to
// sign the unload stage for a cassette.
PrevCassNo = CassNo - 1
Locate PrevCassNo in UnprocessedCassettes using @VM setting vPos then
UnprocessedCassettes = Delete(UnprocessedCassettes, 0, vPos, 0)
ProcessedCassettes = SchedDetNGRec<SCHED_DET_NG.PROCESSED_CASS$>
ProcessedCassettes<0, -1> = PrevCassNo
SchedDetNGRec<SCHED_DET_NG.UNPROCESSED_CASS$> = UnprocessedCassettes
SchedDetNGRec<SCHED_DET_NG.PROCESSED_CASS$> = ProcessedCassettes
Database_Services('WriteDataRow', 'SCHED_DET_NG', SchedDetNGKey, SchedDetNGRec, True$, False$, True$)
end
end
Until Done EQ True$
Repeat
WfrCount = DCount(Record<WM_IN_SLOT_NO$>, @VM) WfrCount = DCount(Record<WM_IN_SLOT_NO$>, @VM)
If WfrCount LT 25 then If WfrCount LT 25 then
@ -301,4 +261,3 @@ Restore_System_Variables:
@FILE.ERROR = OrigFileError @FILE.ERROR = OrigFileError
return return

View File

@ -1055,7 +1055,3 @@ ClearCursors:
Next counter Next counter
return return

View File

@ -56,9 +56,9 @@ $insert RLIST_EQUATES
Equ Comma$ to ',' Equ Comma$ to ','
Declare function Error_Services, Database_Services, Environment_Services, Logging_Services, obj_WO_Mat, Max Declare function Error_Services, Database_Services, Environment_Services, Logging_Services, obj_WO_Mat, Max
Declare function GaN_Services, Signature_Services, obj_WO_LOG, SRP_Array, MemberOf Declare function GaN_Services, Signature_Services, obj_WO_LOG, SRP_Array, MemberOf, Datetime
Declare subroutine Error_Services, Database_Services, Environment_Services, Logging_Services, Obj_SAP, obj_Notes Declare subroutine Error_Services, Database_Services, Environment_Services, Logging_Services, Obj_SAP, obj_Notes
Declare subroutine SAP_Services, Work_Order_Services, Material_Services, RList Declare subroutine SAP_Services, Work_Order_Services, Material_Services, RList, Schedule_Services
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\WO_Mat' LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\WO_Mat'
LogDate = Oconv(Date(), 'D4/') LogDate = Oconv(Date(), 'D4/')
@ -690,7 +690,7 @@ WRITE_RECORD:
end end
end end
//Original MU wafer transaction // Original MU wafer transaction
IF OrigSAPBatchNo EQ '' AND NewSAPBatchNo NE '' then IF OrigSAPBatchNo EQ '' AND NewSAPBatchNo NE '' then
MULotFlag = False$ MULotFlag = False$
If {REACTOR_TYPE} NE 'EPP' then If {REACTOR_TYPE} NE 'EPP' then
@ -825,6 +825,12 @@ WRITE_RECORD:
Work_Order_Services('UpdateReleasedQty', WONo) Work_Order_Services('UpdateReleasedQty', WONo)
end end
CurrWaferCount = obj_WO_Mat('CurrWaferCnt', WOMatKeyID)
If CurrWaferCount EQ 0 then
// This should catch cases where the entire cassette is "peeled off", NCR'ed, or used for destructive testing.
Schedule_Services('MarkCassProcessed', WONo, CassNo, Datetime())
end
return return
DELETE_RECORD_PRE: DELETE_RECORD_PRE: