First final commit

This commit is contained in:
Infineon\Ouellette 2024-11-21 10:22:03 -07:00 committed by Ouellette Jonathan (CSC FI SPS MESLEO)
parent f143b3e60c
commit e4cca79a08
6 changed files with 134 additions and 42 deletions

View File

@ -145,3 +145,4 @@ CreateHALItem:
end end
return return

View File

@ -29,7 +29,6 @@ Return Response or ""
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
Service PrintLabel(ZPLString, PrinterId) Service PrintLabel(ZPLString, PrinterId)
debug
SuccessfulPrint = False$ SuccessfulPrint = False$
ErrorMessage = '' ErrorMessage = ''
If PrinterId EQ '' then If PrinterId EQ '' then
@ -174,3 +173,4 @@ end service

View File

@ -28,7 +28,7 @@ LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' L
Headers = 'Logging DTM' : @FM : 'Lot Id' : @FM : 'Event Type' : @FM : 'Operator' : @FM : 'Begin Wafer Qty' : @FM : 'End Wafer Qty' : @FM : 'Bonus Wafer Qty' : @FM : 'Reduce Wafer Qty' : @FM : 'Message' Headers = 'Logging DTM' : @FM : 'Lot Id' : @FM : 'Event Type' : @FM : 'Operator' : @FM : 'Begin Wafer Qty' : @FM : 'End Wafer Qty' : @FM : 'Bonus Wafer Qty' : @FM : 'Reduce Wafer Qty' : @FM : 'Message'
objLotEventLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$) objLotEventLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$)
Options EVENT_TYPES = 'MOVE_IN', 'MOVE_OUT', 'HOLD_ON', 'HOLD_OFF', 'REDUCE_WAFER_QTY', 'BONUS_WAFER_QTY', 'COMMENT', 'LOCATION', 'LOAD', 'UNSIGN_LOAD', 'TW_USE' Options EVENT_TYPES = 'MOVE_IN', 'MOVE_OUT', 'HOLD_ON', 'HOLD_OFF', 'REDUCE_WAFER_QTY', 'BONUS_WAFER_QTY', 'COMMENT', 'LOCATION', 'LOAD', 'UNSIGN_LOAD', 'TW_USE', 'CLOSE'
Options LOT_TYPES = 'TW', 'RDS', 'WM_OUT', 'WM_IN' Options LOT_TYPES = 'TW', 'RDS', 'WM_OUT', 'WM_IN'
GoToService GoToService
@ -47,7 +47,6 @@ Service GenerateNewLotId(LotType)
GeneratedLotID = '' GeneratedLotID = ''
Begin Case Begin Case
Case LotType EQ 'TW' Case LotType EQ 'TW'
Loop Loop
Until ValidLotNum EQ True$ Until ValidLotNum EQ True$
LotPrefix = 'TW' LotPrefix = 'TW'
@ -80,8 +79,6 @@ end service
Service CreateNewLot(LotType, ProdName, LotQty, VendorPartNo, VendorLotNo, VendorCode, Username, PrinterID, LotId) Service CreateNewLot(LotType, ProdName, LotQty, VendorPartNo, VendorLotNo, VendorCode, Username, PrinterID, LotId)
; //649491 , 03M6241, 814474, SP
debug
CreatedLotNumber = '' CreatedLotNumber = ''
ErrorMessage = '' ErrorMessage = ''
Begin Case Begin Case
@ -139,10 +136,9 @@ Service CreateNewLot(LotType, ProdName, LotQty, VendorPartNo, VendorLotNo, Vendo
ThisLotCurrOpId = Lot_Services('GetLotCurrOperationId', CreatedLotNumber) ThisLotCurrOpId = Lot_Services('GetLotCurrOperationId', CreatedLotNumber)
If ThisLotCurrOpId NE '' then If ThisLotCurrOpId NE '' then
Lot_Services('CreateLotEvent', CreatedLotNumber, 'TW', Datetime(), 'MOVE_IN', 'Move Lot in.', '', 0, 0, ThisLotCurrOpId, Username) Lot_Services('CreateLotEvent', CreatedLotNumber, 'TW', Datetime(), 'MOVE_IN', 'Move Lot in.', '', 0, 0, ThisLotCurrOpId, Username)
//Lot_Services('MoveInLot', NewLotId, Username)
if Error_Services('NoError') then if Error_Services('NoError') then
//Set lot to open //Set lot to open
Lot_Services('OpenLot', CreatedLotNumber) Lot_Services('CreateLotEvent', CreatedLotNumber, 'TW', Datetime(), 'OPEN', 'Setting lot to open.', '', 0, 0, '', Username)
if Error_Services('NoError') then if Error_Services('NoError') then
If PrinterID NE 'WEB' then If PrinterID NE 'WEB' then
//If PrinterID is set to WEB this means the request comes from OI_Wizard and the client is going to handle printing. //If PrinterID is set to WEB this means the request comes from OI_Wizard and the client is going to handle printing.
@ -166,12 +162,19 @@ Service CreateNewLot(LotType, ProdName, LotQty, VendorPartNo, VendorLotNo, Vendo
ErrorMessage = 'Error in Create New Test Wafer Lot Process, lot id: ' : NewLotId : ' , ' : Error_Services('GetMessage') ErrorMessage = 'Error in Create New Test Wafer Lot Process, lot id: ' : NewLotId : ' , ' : Error_Services('GetMessage')
end end
end else end else
//Close LOT record as there was an error
Lot_Services('CreateLotEvent', NewLotId, 'TW', Datetime(), 'CLOSE', 'Error occured while created lot. Automatically setting to close', '', 0, 0, '', 'SYSTEM')
ErrorMessage = 'Error in Create New Test Wafer Lot Process, lot id: ' : NewLotId : ' , ' : Error_Services('GetMessage') ErrorMessage = 'Error in Create New Test Wafer Lot Process, lot id: ' : NewLotId : ' , ' : Error_Services('GetMessage')
end end
end else end else
//Close LOT record as there was an error
Lot_Services('CreateLotEvent', NewLotId, 'TW', Datetime(), 'CLOSE', 'Error occured while created lot. Automatically setting to close', '', 0, 0, '', 'SYSTEM')
ErrorMessage = 'Error in Create New Test Wafer Lot Process, error getting current operation for lot: ' : NewLotId ErrorMessage = 'Error in Create New Test Wafer Lot Process, error getting current operation for lot: ' : NewLotId
end end
end else end else
//Close LOT record as there was an error
//Database_Services('DeleteDataRow', 'LOT', NewLotId, True$, False$)
Lot_Services('CreateLotEvent', NewLotId, 'TW', Datetime(), 'CLOSE', 'Error occured while created lot. Automatically setting to close', '', 0, 0, '', 'SYSTEM')
ErrorMessage = 'Error in Create New Test Wafer Lot Process, lot id: ' : NewLotId : ' , ' : Error_Services('GetMessage') ErrorMessage = 'Error in Create New Test Wafer Lot Process, lot id: ' : NewLotId : ' , ' : Error_Services('GetMessage')
end end
end end
@ -208,13 +211,13 @@ Service CreateNewLot(LotType, ProdName, LotQty, VendorPartNo, VendorLotNo, Vendo
LogData<4> = 'Successfully created lot id ' : CreatedLotNumber : ' of product type ' : ProdName '.' LogData<4> = 'Successfully created lot id ' : CreatedLotNumber : ' of product type ' : ProdName '.'
Logging_Services('AppendLog', objTWCreationLog, LogData, @RM, @FM, False$) Logging_Services('AppendLog', objTWCreationLog, LogData, @RM, @FM, False$)
end else end else
Error_Services('Add', ErrorMessage)
LogData = '' LogData = ''
LogData<1> = LoggingDTM LogData<1> = LoggingDTM
LogData<2> = ProdName LogData<2> = ProdName
LogData<3> = Username LogData<3> = Username
LogData<4> = ErrorMessage LogData<4> = ErrorMessage
Logging_Services('AppendLog', objTWCreationLog, LogData, @RM, @FM, False$) Logging_Services('AppendLog', objTWCreationLog, LogData, @RM, @FM, False$)
Error_Services('Add', ErrorMessage)
end end
Response = CreatedLotNumber Response = CreatedLotNumber
@ -565,7 +568,6 @@ Service IsLotMovedIn(LotId)
end service end service
Service MoveInLot(LotID, Operator) Service MoveInLot(LotID, Operator)
debug
ErrorMessage = '' ErrorMessage = ''
ThisLotCurrOperationID = '' ThisLotCurrOperationID = ''
If LotId NE '' then If LotId NE '' then
@ -584,7 +586,6 @@ Service MoveInLot(LotID, Operator)
If Error_Services('NoError') then If Error_Services('NoError') then
LotType = XLATE('LOT', LotId, LOT_TYPE$, 'X') LotType = XLATE('LOT', LotId, LOT_TYPE$, 'X')
CurrOperation = XLATE('LOT_OPERATION', ThisLotCurrOperationID, LOT_OPERATION_OPERATION_ID$, 'X') CurrOperation = XLATE('LOT_OPERATION', ThisLotCurrOperationID, LOT_OPERATION_OPERATION_ID$, 'X')
//Lot_Services('CreateLotEvent', LotId, LotType, Datetime(), 'MOVE_IN', '', '', 0, 0, CurrOperation, Operator)
If Error_Services('HasError') then If Error_Services('HasError') then
ErrorMessage = 'Error in Move In process for Lot id ' : LotId : '. ' : Error_Services('GetMessage') ErrorMessage = 'Error in Move In process for Lot id ' : LotId : '. ' : Error_Services('GetMessage')
end end
@ -632,7 +633,6 @@ Service MoveOutLot(LotID, Operator)
If Error_Services('NoError') then If Error_Services('NoError') then
LotType = XLATE('LOT', LotId, LOT_TYPE$, 'X') LotType = XLATE('LOT', LotId, LOT_TYPE$, 'X')
CurrOperation = XLATE('LOT_OPERATION', ThisLotCurrOperationID, LOT_OPERATION_OPERATION_ID$, 'X') CurrOperation = XLATE('LOT_OPERATION', ThisLotCurrOperationID, LOT_OPERATION_OPERATION_ID$, 'X')
//Lot_Services('CreateLotEvent', LotId, LotType, Datetime(), 'MOVE_OUT', '', '', ReduceQty, BonusQty, CurrOperation, Operator)
If Error_Services('HasError') then If Error_Services('HasError') then
ErrorMessage = 'Error in Move In process for Lot id ' : LotId : '. ' : Error_Services('GetMessage') ErrorMessage = 'Error in Move In process for Lot id ' : LotId : '. ' : Error_Services('GetMessage')
end end
@ -745,7 +745,15 @@ Service CreateLotEvent(LotId, LotType=LOT_TYPES, EventDatetime, EventType=EVENT_
Case EventType EQ 'LOCATION' Case EventType EQ 'LOCATION'
//Do nothing for now. //Do nothing for now.
Case EventType EQ 'CLOSE' Case EventType EQ 'CLOSE'
//Do nothing for now. Lot_Services('CloseLot', LotId)
If Error_Services('HasError') then
ErrorMessage = 'Error in Create Lot Event routine, ' : Error_Services('GetMessage')
end
Case EventType EQ 'OPEN'
Lot_Services('OpenLot', LotId)
If Error_Services('HasError') then
ErrorMessage = 'Error in Create Lot Event routine, ' : Error_Services('GetMessage')
end
Case Otherwise$ Case Otherwise$
ErrorMessage = 'Error in Create Lot Event routine, event type of ' : EventType : ' passed to routine is not valid for a lot of type TW.' ErrorMessage = 'Error in Create Lot Event routine, event type of ' : EventType : ' passed to routine is not valid for a lot of type TW.'
End Case End Case

View File

@ -168,7 +168,6 @@ Event PUB_CLEAR.CLICK()
end event end event
Event PUB_SUBMIT.CLICK() Event PUB_SUBMIT.CLICK()
debug
NotReadyReason = '' NotReadyReason = ''
//Gather all field information //Gather all field information
ReasonForTest = Get_Property(@Window : '.CMB_TEST_TYPE', 'TEXT') ReasonForTest = Get_Property(@Window : '.CMB_TEST_TYPE', 'TEXT')

View File

@ -104,4 +104,11 @@ GetLot:
end end
return return
ResetForm:
Set_Property(@Window : '.EDL_CURR_OPERATION', 'TEXT', '')
Set_Property(@Window : '.EDL_CURR_WAFER_QTY', 'TEXT', '')
Set_Property(@Window : '.EDT_LOT_OPERATIONS', 'ARRAY', '')
Set_Property(@Window : '.EDT_LOT_EVENTS', 'ARRAY', '')
return

View File

@ -526,7 +526,7 @@ Service ProcessScanData(ScanID, ScanJSON)
TWLotQuantity = Field(ScanData, '|', 3) TWLotQuantity = Field(ScanData, '|', 3)
ThisScanTWLots = ScansRow<SCANS.TW_LOT_ID$> ThisScanTWLots = ScansRow<SCANS.TW_LOT_ID$>
Locate TWLot in ThisScanTWLots using @VM setting twPOS then Locate TWLot in ThisScanTWLots using @VM setting twPOS then
ScansRow<SCANS.TW_LOT_QTY$> = TWLotQuantity ScansRow<SCANS.TW_LOT_QTY$, twPos> = TWLotQuantity
end end
Case ScanData[1, 17] EQ 'TESTRUNTYPEUPDATE' Case ScanData[1, 17] EQ 'TESTRUNTYPEUPDATE'
TestRunTypeId = Field(ScanData, '|', 2) TestRunTypeId = Field(ScanData, '|', 2)
@ -619,8 +619,36 @@ Service ProcessScanData(ScanID, ScanJSON)
// "RDS" process. // "RDS" process.
If (CassetteIDs NE '') then If (CassetteIDs NE '') then
TestWaferLotData = ScansRow<SCANS.TW_LOT_ID$>
Abort = False$
If TestWaferLotData NE '' then
ThisTestRunType = ScansRow<SCANS.TEST_RUN_TYPE_ID$>
If ThisTestRunType NE '' then
for each TWLot in TestWaferLotData using @VM setting twPOS
If ScansRow<SCANS.TW_LOT_QTY$, twPOS> NE '' OR ScansRow<SCANS.TW_LOT_QTY$, twPOS> GT 0 then
TWLotCurrOperation = Lot_Services('GetLotCurrOperationName', TWLot)
If TWLotCurrOperation NE 'TW_CREATE' AND TWLotCurrOperation NE 'TW_CLOSE' then
TWLotCurrOpen = Database_Services('ReadDataColumn', 'LOT', TWLot, LOT_OPEN$, True$, 0, False$)
If Not(TWLotCurrOpen) then
Abort = True$
Scan_Services('AddNotAcceptableReason', 'Lot ':TWLot:' is closed and cannot be used at this time.')
end
end else
Abort = True$
Scan_Services('AddNotAcceptableReason', 'Lot ':TWLot:' is currently at ':TWLotCurrOperation:' and cannot be used at this time.')
end
end else
Abort = True$
Scan_Services('AddNotAcceptableReason', 'Lot ':TWLot:' must have a quantity associated with it.')
end
Until Abort
Next TWLot
end
end else
Scan_Services('AddNotAcceptableReason', 'A test run type is required to log test wafer usage.')
end
// Ensure only one cassette is scanned // Ensure only one cassette is scanned
If (NumCass EQ 1) then If (NumCass EQ 1) AND Not(Abort) then
CassetteID = CassetteIDs<0, NumCass> CassetteID = CassetteIDs<0, NumCass>
// Ensure we are working with an RDS and not a WM_OUT/WM_IN cassette // Ensure we are working with an RDS and not a WM_OUT/WM_IN cassette
If (Count(CassetteID, '.') EQ 0) then If (Count(CassetteID, '.') EQ 0) then
@ -1041,20 +1069,38 @@ Service ProcessScanData(ScanID, ScanJSON)
end end
end else end else
If ScansRow<SCANS.TW_LOT_ID$> NE '' then If ScansRow<SCANS.TW_LOT_ID$> NE '' then
//Test Wafer Lot Loading ThisTestRunType = ScansRow<SCANS.TEST_RUN_TYPE_ID$>
ThisUser = ScansRow<SCANS.EMPLOYEE_ID$>
If ThisTestRunType NE '' then
If RowExists('LSL_USERS', ThisUser) then
TestWaferLotData = ScansRow<SCANS.TW_LOT_ID$> TestWaferLotData = ScansRow<SCANS.TW_LOT_ID$>
Abort = False$ Abort = False$
for each TWLot in TestWaferLotData using @VM setting twPOS for each TWLot in TestWaferLotData using @VM setting twPOS
If ScansRow<SCANS.TW_LOT_QTY$, twPOS> EQ '' OR ScansRow<SCANS.TW_LOT_QTY$, twPOS> LE 0 then If ScansRow<SCANS.TW_LOT_QTY$, twPOS> NE '' OR ScansRow<SCANS.TW_LOT_QTY$, twPOS> GT 0 then
Scan_Services('AddNotAcceptableReason', 'Each test wafer lot logged must have a quantity associated with it.') TWLotCurrOperation = Lot_Services('GetLotCurrOperationName', TWLot)
If TWLotCurrOperation NE 'TW_CREATE' AND TWLotCurrOperation NE 'TW_CLOSE' then
TWLotCurrOpen = Database_Services('ReadDataColumn', 'LOT', TWLot, LOT_OPEN$, True$, 0, False$)
If Not(TWLotCurrOpen) then
Abort = True$
Scan_Services('AddNotAcceptableReason', 'Lot ':TWLot:' is closed and cannot be used at this time.')
end
end else
Abort = True$
Scan_Services('AddNotAcceptableReason', 'Lot ':TWLot:' is currently at ':TWLotCurrOperation:' and cannot be used at this time.')
end
end else
Abort = True$
Scan_Services('AddNotAcceptableReason', 'Lot ':TWLot:' must have a quantity associated with it.')
end
Until Abort
Next TWLot
end else end else
ThisUser = ScansRow<SCANS.EMPLOYEE_ID$>
If Not(RowExists('LSL_USERS', ThisUser)) then
Scan_Services('AddNotAcceptableReason', 'A User ID Scan is required to log test wafer usage.') Scan_Services('AddNotAcceptableReason', 'A User ID Scan is required to log test wafer usage.')
end end
end else
Scan_Services('AddNotAcceptableReason', 'A test run type is required to log test wafer usage.')
end end
Until False$
Next TWLot
end else end else
Scan_Services('AddNotAcceptableReason', 'A cassette must be scanned in order to complete a tool scan.') Scan_Services('AddNotAcceptableReason', 'A cassette must be scanned in order to complete a tool scan.')
end end
@ -1295,6 +1341,23 @@ Service AcceptScan(ScanID, ScanJSON)
// Check if both the PRE and LOAD stages are ready to sign // Check if both the PRE and LOAD stages are ready to sign
PreStageSigned = False$ PreStageSigned = False$
LoadStageSigned = False$ LoadStageSigned = False$
//Log test wafer usage here
If TestWaferLots NE '' then
Continue = False$
ToolID = ScansRow<SCANS.TOOL_ID$>
Reactor = ToolID[-1, 'BR']
Username = ScansRow<SCANS.EMPLOYEE_ID$>
TestWaferLotQtys = ScansRow<SCANS.TW_LOT_QTY$>
PSNo = Database_Services('ReadDataColumn', 'RDS', RDSNo, RDS_PROD_SPEC_ID$, True$, 0, False$)
NewTestRunId = Test_Run_Services('CreateTestRunRecord', 3, 'R', Reactor, PSNo, RDSNo,Username , TestWaferLots, TestWaferLotQtys)
If Error_Services('NoError') then
Continue = True$
end else
ErrorMessage = Error_Services('GetMessage')
Error_Services('Set', ErrorMessage)
Continue = False$
end
If Continue then
PreStageSigned = QA_Services('SignPreEpiStage', RDSNo, Username, WaferQty, Reactor, 1) PreStageSigned = QA_Services('SignPreEpiStage', RDSNo, Username, WaferQty, Reactor, 1)
If PreStageSigned EQ True$ then If PreStageSigned EQ True$ then
LoadStageSigned = QA_Services('SignLoadStage', RDSNo, USername, WaferQty, LLSide, 1) LoadStageSigned = QA_Services('SignLoadStage', RDSNo, USername, WaferQty, LLSide, 1)
@ -1305,6 +1368,21 @@ Service AcceptScan(ScanID, ScanJSON)
LogData<6> = Action LogData<6> = Action
LogData<7> = Result LogData<7> = Result
Logging_Services('AppendLog', objLog, LogData, @RM, @FM) Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
end
end else
PreStageSigned = QA_Services('SignPreEpiStage', RDSNo, Username, WaferQty, Reactor, 1)
If PreStageSigned EQ True$ then
LoadStageSigned = QA_Services('SignLoadStage', RDSNo, USername, WaferQty, LLSide, 1)
end
If ( (PreStageSigned EQ True$) and (LoadStageSigned EQ True$) ) then
Result = '(':CassetteID:') Load stage signed.'
end
LogData<6> = Action
LogData<7> = Result
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
end
Case CurrStage _EQC 'LOAD' Case CurrStage _EQC 'LOAD'
Action = 'LOAD' Action = 'LOAD'
// Check if LOAD stage is ready to sign // Check if LOAD stage is ready to sign
@ -1333,13 +1411,12 @@ Service AcceptScan(ScanID, ScanJSON)
Error_Services('Set', '(':CassetteID:') The ':CurrStage:' is not currently supported by the barcode application.') Error_Services('Set', '(':CassetteID:') The ':CurrStage:' is not currently supported by the barcode application.')
End Case End Case
Case CassetteID EQ '' AND TestWaferLots NE '' Case CassetteID EQ '' AND TestWaferLots NE ''
debug
//Tool scan with ONLY test wafers being logged. //Tool scan with ONLY test wafers being logged.
ToolID = ScansRow<SCANS.TOOL_ID$> ToolID = ScansRow<SCANS.TOOL_ID$>
Reactor = ToolID[-1, 'BR'] Reactor = ToolID[-1, 'BR']
Username = ScansRow<SCANS.EMPLOYEE_ID$> Username = ScansRow<SCANS.EMPLOYEE_ID$>
TestWaferLotQtys = ScansRow<SCANS.TW_LOT_QTY$> TestWaferLotQtys = ScansRow<SCANS.TW_LOT_QTY$>
NewTestRunId = Test_Run_Services('CreateTestRunRecord', 3, 'REACTOR', Reactor, '', '',Username , TestWaferLots, TestWaferLotQtys) NewTestRunId = Test_Run_Services('CreateTestRunRecord', 3, 'R', Reactor, '', '',Username , TestWaferLots, TestWaferLotQtys)
If Error_Services('HasError') then If Error_Services('HasError') then
ErrorMessage = Error_Services('GetMessage') ErrorMessage = Error_Services('GetMessage')
Error_Services('Set', ErrorMessage) Error_Services('Set', ErrorMessage)